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

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

[elpa] master 280522c 4/5: Merge commit '5b562e4ddfc449cd61c82ef7646a6c5


From: Stephen Leake
Subject: [elpa] master 280522c 4/5: Merge commit '5b562e4ddfc449cd61c82ef7646a6c501b913b6c'
Date: Thu, 11 Jul 2019 21:11:11 -0400 (EDT)

branch: master
commit 280522c32d26412fb1894d19e2a1760dc3d142a4
Merge: b3034e0 5b562e4
Author: Stephen Leake <address@hidden>
Commit: Stephen Leake <address@hidden>

    Merge commit '5b562e4ddfc449cd61c82ef7646a6c501b913b6c'
---
 .gitignore                                         |   23 +
 GNUmakefile                                        |    8 +-
 README                                             |   29 +-
 admin/archive-contents.el                          |  128 +-
 copyright_exceptions                               |    2 +
 externals-list                                     |   55 +-
 packages/ada-mode/ada-mode.el                      |    4 +-
 packages/advice-patch/advice-patch.el              |  124 +
 packages/arbitools/arbitools.el                    | 1001 +--
 packages/avy/Makefile                              |    7 +-
 packages/avy/README.md                             |   17 +-
 packages/avy/avy-test.el                           |    4 +
 packages/avy/avy.el                                | 1233 +++-
 packages/avy/doc/Changelog.org                     |  175 +-
 packages/avy/targets/avy-init.el                   |    6 -
 packages/avy/targets/checkdoc.el                   |    4 +
 packages/cl-lib/cl-lib.el                          |    4 +-
 packages/cobol-mode/cobol-mode.el                  |   23 +-
 packages/company-math/company-math.el              |  153 +-
 packages/company-math/readme.md                    |   35 +-
 packages/company/NEWS.md                           |   18 +
 packages/company/company-clang.el                  |   15 +-
 packages/company/company-tng.el                    |   20 +
 packages/company/company.el                        |  133 +-
 packages/company/test/capf-tests.el                |   32 +-
 packages/company/test/core-tests.el                |   28 +-
 packages/debbugs/Debbugs.wsdl                      |    2 +-
 packages/debbugs/debbugs-browse.el                 |   12 +-
 packages/debbugs/debbugs-gnu.el                    |  859 ++-
 packages/debbugs/debbugs-org.el                    |    4 +-
 packages/debbugs/debbugs-ug.info                   |  246 +-
 packages/debbugs/debbugs-ug.texi                   |   99 +-
 packages/debbugs/debbugs.el                        |    9 +-
 packages/debbugs/debbugs.info                      |    2 +-
 packages/debbugs/debbugs.texi                      |    2 +-
 packages/debbugs/instructions.texi                 |   70 +-
 packages/diff-hl/diff-hl.el                        |    8 +-
 packages/djvu/djvu.el                              |  654 +-
 packages/ebdb-i18n-chn/ebdb-i18n-chn.el            |    4 +-
 packages/el-search/NEWS                            |   50 +
 packages/el-search/el-search.el                    |  810 ++-
 packages/excorporate/NEWS                          |   20 +
 packages/excorporate/excorporate-diary.el          |   93 +-
 packages/excorporate/excorporate-org.el            |   57 +-
 packages/excorporate/excorporate.el                |  247 +-
 packages/excorporate/excorporate.info              |   61 +-
 packages/excorporate/excorporate.texi              |   57 +-
 packages/gnorb/gnorb-utils.el                      |    6 +-
 .../etc/gnu-elpa.gpg-keyring                       |  Bin 0 -> 2069 bytes
 .../gnu-elpa-keyring-update.el                     |  110 +
 packages/gnus-mock/data/.newsrc.eld                |    2 +-
 packages/gnus-mock/data/active                     |    1 +
 packages/gnus-mock/data/gnus-mock-tests.el         |   93 +
 .../mails/cur/1557249518.M173117P12100Q0.slip:2,   |  184 +
 .../.overview"                                     |    1 +
 .../data/\343\203\206\343\202\271\343\203\210/1"   |  108 +
 packages/gnus-mock/gnus-mock.el                    |   23 +-
 packages/ivy/.dir-locals.el                        |   12 +-
 packages/ivy/.gitignore                            |    6 +
 packages/ivy/CONTRIBUTING.org                      |   51 +-
 packages/ivy/README.md                             |   42 +-
 packages/ivy/colir.el                              |   64 +-
 packages/ivy/counsel.el                            | 4557 ++++++++------
 packages/ivy/doc/Changelog.org                     |  896 ++-
 packages/ivy/doc/Makefile                          |    2 +
 packages/ivy/doc/ivy-help.org                      |    2 +-
 packages/ivy/doc/ivy-ox.el                         |   15 +-
 packages/ivy/doc/ivy.org                           |   80 +-
 packages/ivy/doc/ivy.texi                          |  333 +-
 packages/ivy/doc/scripts.el                        |    6 +
 packages/ivy/ivy-hydra.el                          |   15 +-
 packages/ivy/ivy-overlay.el                        |   70 +-
 packages/ivy/ivy-test.el                           |  307 +-
 packages/ivy/ivy.el                                | 2338 ++++---
 packages/ivy/swiper.el                             |  644 +-
 packages/ivy/targets/obsolete-config.el            |    1 -
 packages/ivy/targets/plain.el                      |    5 +
 packages/load-relative/THANKS                      |    1 +
 packages/load-relative/configure.ac                |    8 +-
 packages/load-relative/load-relative.el            |   33 +-
 packages/math-symbol-lists/math-symbol-lists.el    | 6602 +++++++++++---------
 packages/math-symbol-lists/msl-build.el            |  168 +
 packages/math-symbol-lists/readme.md               |   15 +-
 packages/mines/mines.el                            |  507 +-
 packages/nhexl-mode/nhexl-mode.el                  |   31 +-
 packages/nlinum/nlinum.el                          |   97 +-
 packages/on-screen/on-screen.el                    |    8 +-
 packages/poker/poker.el                            |    2 +-
 packages/rcirc-menu/rcirc-menu.el                  |    4 +-
 packages/realgud/.gitignore                        |   27 -
 packages/realgud/.travis.yml                       |   16 -
 packages/realgud/AUTHORS                           |    1 -
 packages/realgud/COPYING                           |  674 --
 packages/realgud/Cask                              |   10 -
 packages/realgud/ChangeLog                         | 6549 -------------------
 packages/realgud/INSTALL.md                        |   15 -
 packages/realgud/Makefile.am                       |   17 -
 packages/realgud/NEWS                              |    0
 packages/realgud/README.md                         |  110 -
 packages/realgud/THANKS                            |   17 -
 packages/realgud/autogen.sh                        |   12 -
 packages/realgud/common.mk.in                      |   23 -
 packages/realgud/configure.ac                      |   87 -
 packages/realgud/cr_exceptions.txt                 |    0
 packages/realgud/elisp-comp                        |   93 -
 packages/realgud/etc/.nosearch                     |    0
 packages/realgud/etc/realgud-logo-square.png       |  Bin 8702 -> 0 bytes
 packages/realgud/etc/realgud-logo.png              |  Bin 10806 -> 0 bytes
 packages/realgud/etc/realgud-logo.svg              |  106 -
 packages/realgud/etc/realgud.png                   |  Bin 100651 -> 0 bytes
 packages/realgud/etc/screenshot.el                 |  100 -
 packages/realgud/install-from-git.sh               |  105 -
 packages/realgud/realgud-recursive-autoloads.el    | 1300 ----
 packages/realgud/realgud.el                        |  199 -
 packages/realgud/realgud/.nosearch                 |   11 -
 packages/realgud/realgud/Makefile.am               |   21 -
 packages/realgud/realgud/common/Makefile.am        |    8 -
 packages/realgud/realgud/common/attach.el          |   68 -
 packages/realgud/realgud/common/backtrace-mode.el  |  118 -
 packages/realgud/realgud/common/backtrack-mode.el  |  115 -
 packages/realgud/realgud/common/bp-image-data.el   |  378 --
 packages/realgud/realgud/common/bp.el              |  231 -
 packages/realgud/realgud/common/buffer/Makefile.am |    7 -
 .../realgud/realgud/common/buffer/backtrace.el     |  491 --
 packages/realgud/realgud/common/buffer/command.el  |  482 --
 packages/realgud/realgud/common/buffer/helper.el   |  181 -
 packages/realgud/realgud/common/buffer/info.el     |   64 -
 packages/realgud/realgud/common/buffer/source.el   |  208 -
 packages/realgud/realgud/common/cmds.el            |  447 --
 packages/realgud/realgud/common/core.el            |  331 -
 packages/realgud/realgud/common/custom.el          |   28 -
 packages/realgud/realgud/common/eval.el            |  101 -
 packages/realgud/realgud/common/file.el            |  150 -
 packages/realgud/realgud/common/follow.el          |   50 -
 packages/realgud/realgud/common/fringe-utils.py    |   37 -
 packages/realgud/realgud/common/fringe.el          |  224 -
 packages/realgud/realgud/common/helper.el          |  109 -
 packages/realgud/realgud/common/init.el            |   45 -
 packages/realgud/realgud/common/key.el             |  137 -
 packages/realgud/realgud/common/lang.el            |  111 -
 packages/realgud/realgud/common/loc.el             |  200 -
 packages/realgud/realgud/common/lochist.el         |  145 -
 packages/realgud/realgud/common/menu.el            |  183 -
 packages/realgud/realgud/common/regexp.el          |   76 -
 packages/realgud/realgud/common/reset.el           |   58 -
 packages/realgud/realgud/common/run.el             |  220 -
 packages/realgud/realgud/common/send.el            |  281 -
 packages/realgud/realgud/common/shortkey.el        |  225 -
 packages/realgud/realgud/common/track-mode.el      |  239 -
 packages/realgud/realgud/common/track.el           |  895 ---
 packages/realgud/realgud/common/utils.el           |   67 -
 packages/realgud/realgud/common/window.el          |  180 -
 packages/realgud/realgud/debugger/Makefile.am      |    8 -
 .../realgud/realgud/debugger/bashdb/Makefile.am    |    5 -
 packages/realgud/realgud/debugger/bashdb/bashdb.el |  108 -
 packages/realgud/realgud/debugger/bashdb/core.el   |  197 -
 packages/realgud/realgud/debugger/bashdb/init.el   |  110 -
 .../realgud/realgud/debugger/bashdb/track-mode.el  |   73 -
 packages/realgud/realgud/debugger/common.mk        |    3 -
 packages/realgud/realgud/debugger/gdb/Makefile.am  |    5 -
 packages/realgud/realgud/debugger/gdb/core.el      |  223 -
 packages/realgud/realgud/debugger/gdb/gdb.el       |  141 -
 packages/realgud/realgud/debugger/gdb/init.el      |  145 -
 .../realgud/realgud/debugger/gdb/track-mode.el     |   74 -
 packages/realgud/realgud/debugger/gub/Makefile.am  |    5 -
 packages/realgud/realgud/debugger/gub/core.el      |  181 -
 packages/realgud/realgud/debugger/gub/gub.el       |   87 -
 packages/realgud/realgud/debugger/gub/init.el      |  206 -
 .../realgud/realgud/debugger/gub/track-mode.el     |   85 -
 packages/realgud/realgud/debugger/ipdb/Makefile.am |    5 -
 packages/realgud/realgud/debugger/ipdb/core.el     |  255 -
 packages/realgud/realgud/debugger/ipdb/init.el     |  136 -
 packages/realgud/realgud/debugger/ipdb/ipdb.el     |  123 -
 .../realgud/realgud/debugger/ipdb/track-mode.el    |   77 -
 packages/realgud/realgud/debugger/jdb/Makefile.am  |    5 -
 packages/realgud/realgud/debugger/jdb/README       |    2 -
 .../realgud/realgud/debugger/jdb/backtrack-mode.el |   78 -
 packages/realgud/realgud/debugger/jdb/core.el      |  190 -
 packages/realgud/realgud/debugger/jdb/file.el      |  241 -
 packages/realgud/realgud/debugger/jdb/init.el      |  234 -
 packages/realgud/realgud/debugger/jdb/jdb.el       |  111 -
 .../realgud/realgud/debugger/jdb/track-mode.el     |   93 -
 .../realgud/realgud/debugger/kshdb/Makefile.am     |    5 -
 packages/realgud/realgud/debugger/kshdb/core.el    |  175 -
 packages/realgud/realgud/debugger/kshdb/init.el    |  126 -
 packages/realgud/realgud/debugger/kshdb/kshdb.el   |   71 -
 .../realgud/realgud/debugger/kshdb/track-mode.el   |   72 -
 .../realgud/realgud/debugger/nodejs/Makefile.am    |    5 -
 packages/realgud/realgud/debugger/nodejs/core.el   |  166 -
 packages/realgud/realgud/debugger/nodejs/init.el   |  185 -
 packages/realgud/realgud/debugger/nodejs/nodejs.el |   87 -
 .../realgud/realgud/debugger/nodejs/track-mode.el  |   90 -
 packages/realgud/realgud/debugger/pdb/Makefile.am  |    5 -
 packages/realgud/realgud/debugger/pdb/core.el      |  208 -
 packages/realgud/realgud/debugger/pdb/init.el      |  137 -
 packages/realgud/realgud/debugger/pdb/pdb.el       |  138 -
 .../realgud/realgud/debugger/pdb/track-mode.el     |   73 -
 .../realgud/realgud/debugger/perldb/Makefile.am    |    5 -
 packages/realgud/realgud/debugger/perldb/core.el   |  151 -
 packages/realgud/realgud/debugger/perldb/init.el   |  145 -
 packages/realgud/realgud/debugger/perldb/perldb.el |   70 -
 .../realgud/realgud/debugger/perldb/track-mode.el  |   79 -
 .../realgud/realgud/debugger/rdebug/Makefile.am    |    5 -
 packages/realgud/realgud/debugger/rdebug/core.el   |  172 -
 packages/realgud/realgud/debugger/rdebug/init.el   |  143 -
 packages/realgud/realgud/debugger/rdebug/rdebug.el |  124 -
 .../realgud/realgud/debugger/rdebug/track-mode.el  |   70 -
 .../realgud/realgud/debugger/remake/Makefile.am    |    5 -
 packages/realgud/realgud/debugger/remake/core.el   |  249 -
 packages/realgud/realgud/debugger/remake/init.el   |  154 -
 packages/realgud/realgud/debugger/remake/remake.el |   90 -
 .../realgud/realgud/debugger/remake/track-mode.el  |   69 -
 .../realgud/realgud/debugger/trepan.pl/Makefile.am |    5 -
 .../realgud/debugger/trepan.pl/backtrack-mode.el   |   73 -
 .../realgud/realgud/debugger/trepan.pl/core.el     |  182 -
 .../realgud/realgud/debugger/trepan.pl/init.el     |  281 -
 .../realgud/debugger/trepan.pl/track-mode.el       |   81 -
 .../realgud/realgud/debugger/trepan.pl/trepanpl.el |   74 -
 .../realgud/realgud/debugger/trepan/Makefile.am    |    5 -
 .../realgud/debugger/trepan/backtrack-mode.el      |   80 -
 packages/realgud/realgud/debugger/trepan/core.el   |  242 -
 packages/realgud/realgud/debugger/trepan/init.el   |  230 -
 .../realgud/realgud/debugger/trepan/track-mode.el  |   94 -
 packages/realgud/realgud/debugger/trepan/trepan.el |   72 -
 .../realgud/realgud/debugger/trepan2/Makefile.am   |    5 -
 packages/realgud/realgud/debugger/trepan2/core.el  |  241 -
 packages/realgud/realgud/debugger/trepan2/init.el  |  120 -
 .../realgud/realgud/debugger/trepan2/track-mode.el |   77 -
 .../realgud/realgud/debugger/trepan2/trepan2.el    |  103 -
 .../realgud/realgud/debugger/trepan3k/Makefile.am  |    5 -
 packages/realgud/realgud/debugger/trepan3k/core.el |  187 -
 packages/realgud/realgud/debugger/trepan3k/init.el |  127 -
 .../realgud/debugger/trepan3k/track-mode.el        |   77 -
 .../realgud/realgud/debugger/trepan3k/trepan3k.el  |  100 -
 .../realgud/realgud/debugger/trepanjs/Makefile.am  |    5 -
 .../realgud/debugger/trepanjs/backtrack-mode.el    |   80 -
 packages/realgud/realgud/debugger/trepanjs/core.el |  158 -
 packages/realgud/realgud/debugger/trepanjs/init.el |  162 -
 .../realgud/debugger/trepanjs/track-mode.el        |   90 -
 .../realgud/realgud/debugger/trepanjs/trepanjs.el  |   85 -
 .../realgud/realgud/debugger/zshdb/Makefile.am     |    5 -
 packages/realgud/realgud/debugger/zshdb/core.el    |  191 -
 packages/realgud/realgud/debugger/zshdb/init.el    |  106 -
 .../realgud/realgud/debugger/zshdb/track-mode.el   |   71 -
 packages/realgud/realgud/debugger/zshdb/zshdb.el   |   89 -
 packages/realgud/realgud/lang/Makefile.am          |    5 -
 packages/realgud/realgud/lang/java.el              |   47 -
 packages/realgud/realgud/lang/js.el                |   41 -
 packages/realgud/realgud/lang/perl.el              |   60 -
 packages/realgud/realgud/lang/posix-shell.el       |  150 -
 packages/realgud/realgud/lang/python.el            |  196 -
 packages/realgud/realgud/lang/ruby.el              |  131 -
 packages/realgud/test/.gitignore                   |    6 -
 packages/realgud/test/.nosearch                    |    0
 packages/realgud/test/HelloWorld.java              |    6 -
 packages/realgud/test/Makefile.am                  |   74 -
 packages/realgud/test/bt-helper.el                 |   47 -
 packages/realgud/test/gcd.js                       |   44 -
 packages/realgud/test/gcd.pl                       |   21 -
 packages/realgud/test/gcd.py                       |   41 -
 packages/realgud/test/gcd.rb                       |   19 -
 packages/realgud/test/gcd.sh                       |   25 -
 packages/realgud/test/gdb/bar.sh                   |    2 -
 packages/realgud/test/gdb/baz                      |    0
 packages/realgud/test/gdb/baz.c                    |    0
 packages/realgud/test/gdb/foo                      |    0
 packages/realgud/test/gdb/foo.c                    |    0
 packages/realgud/test/gdb/test2/bar.sh             |    2 -
 packages/realgud/test/gdb/test2/baz.c              |    0
 packages/realgud/test/make-check-filter.rb         |   24 -
 packages/realgud/test/node_modules/gcd.js/gcd.js   |   47 -
 .../realgud/test/node_modules/gcd.js/package.json  |   12 -
 packages/realgud/test/regexp-helper.el             |   50 -
 packages/realgud/test/test-bashdb.el               |   60 -
 packages/realgud/test/test-bp.el                   |   59 -
 packages/realgud/test/test-bt-pdb.el               |   45 -
 packages/realgud/test/test-bt-rdebug.el            |   47 -
 packages/realgud/test/test-bt-trepan.el            |   49 -
 packages/realgud/test/test-bt-trepan2.el           |   77 -
 packages/realgud/test/test-bt-trepan3k.el          |   43 -
 packages/realgud/test/test-bt-zshdb.el             |   38 -
 packages/realgud/test/test-buf-bt.el               |   27 -
 packages/realgud/test/test-buf-cmd.el              |   57 -
 packages/realgud/test/test-common-helper.el        |   30 -
 packages/realgud/test/test-core.el                 |   98 -
 packages/realgud/test/test-file.el                 |  128 -
 packages/realgud/test/test-gdb-core.el             |   66 -
 packages/realgud/test/test-gdb.el                  |   68 -
 packages/realgud/test/test-gub-core.el             |   22 -
 packages/realgud/test/test-ipdb.el                 |   40 -
 packages/realgud/test/test-jdb.el                  |   18 -
 packages/realgud/test/test-lang.el                 |   65 -
 packages/realgud/test/test-loc-regexp-gub.el       |   63 -
 packages/realgud/test/test-loc-regexp-nodejs.el    |  115 -
 packages/realgud/test/test-loc-regexp-trepan.el    |   83 -
 packages/realgud/test/test-loc-regexp-trepanpl.el  |  128 -
 packages/realgud/test/test-loc.el                  |   63 -
 packages/realgud/test/test-lochist.el              |  114 -
 packages/realgud/test/test-nodejs.el               |   37 -
 packages/realgud/test/test-pdb.el                  |   39 -
 packages/realgud/test/test-perldb.el               |   26 -
 packages/realgud/test/test-rdebug.el               |   45 -
 packages/realgud/test/test-realgud.el              |   40 -
 packages/realgud/test/test-regexp-bashdb.el        |  126 -
 packages/realgud/test/test-regexp-gdb.el           |  112 -
 packages/realgud/test/test-regexp-gub.el           |   65 -
 packages/realgud/test/test-regexp-ipdb.el          |  108 -
 packages/realgud/test/test-regexp-java.el          |   41 -
 packages/realgud/test/test-regexp-jdb.el           |   78 -
 packages/realgud/test/test-regexp-nodejs.el        |   74 -
 packages/realgud/test/test-regexp-pdb.el           |  107 -
 packages/realgud/test/test-regexp-perldb.el        |  207 -
 packages/realgud/test/test-regexp-python.el        |   64 -
 packages/realgud/test/test-regexp-rdebug.el        |   55 -
 packages/realgud/test/test-regexp-remake.el        |   75 -
 packages/realgud/test/test-regexp-ruby.el          |   43 -
 packages/realgud/test/test-regexp-trepan.el        |  150 -
 packages/realgud/test/test-regexp-trepan2.el       |  167 -
 packages/realgud/test/test-regexp-trepan3k.el      |  167 -
 packages/realgud/test/test-regexp-trepanjs.el      |   94 -
 packages/realgud/test/test-regexp-trepanpl.el      |  115 -
 packages/realgud/test/test-regexp-zshdb.el         |  118 -
 packages/realgud/test/test-regexp.el               |   79 -
 packages/realgud/test/test-remake-core.el          |   38 -
 packages/realgud/test/test-remake.el               |   37 -
 packages/realgud/test/test-send.el                 |   69 -
 packages/realgud/test/test-shortkey.el             |   40 -
 packages/realgud/test/test-srcbuf.el               |   72 -
 packages/realgud/test/test-track-mode.el           |   66 -
 packages/realgud/test/test-track.el                |  196 -
 packages/realgud/test/test-trepan2.el              |   45 -
 packages/realgud/test/test-trepan3k.el             |   37 -
 packages/realgud/test/test-trepanpl.el             |   50 -
 packages/realgud/test/test-utils.el                |   53 -
 packages/realgud/test/test-zshdb.el                |   60 -
 packages/shelisp/shelisp.el                        |  218 +
 packages/stream/stream.el                          |   41 +-
 packages/stream/tests/stream-tests.el              |   12 +-
 packages/svg/svg.el                                |  248 -
 packages/wcheck-mode/Makefile                      |   39 -
 packages/wcheck-mode/README.md                     |   63 +-
 packages/wcheck-mode/wcheck-mode.el                |   40 +-
 packages/websocket/websocket-functional-test.el    |    1 +
 packages/websocket/websocket.el                    |   36 +-
 packages/xclip/xclip.el                            |   15 +-
 packages/yasnippet/yasnippet.el                    |   12 +-
 346 files changed, 15697 insertions(+), 40939 deletions(-)

diff --git a/.gitignore b/.gitignore
index 7fcb315..e93f34d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,18 +12,26 @@ packages/*/*-pkg.el
 # External packages with their own .git tree [autogenerated].
 packages/auctex/
 packages/bbdb/
+packages/bnf-mode/
+packages/buffer-expose/
 packages/chess/
 packages/cl-print/
 packages/clipboard-collector/
 packages/dash/
+packages/dired-git-info/
+packages/disk-usage/
 packages/dismal/
 packages/ebdb/
+packages/eev/
 packages/eglot/
 packages/ergoemacs-mode/
 packages/exwm/
 packages/flymake/
 packages/fountain-mode/
+packages/frog-menu/
 packages/gpastel/
+packages/greader/
+packages/guess-language/
 packages/hyperbole/
 packages/ivy-explorer/
 packages/jsonrpc/
@@ -32,19 +40,34 @@ packages/map/
 packages/mmm-mode/
 packages/ntlm/
 packages/objed/
+packages/olivetti/
 packages/omn-mode/
 packages/orgalist/
 packages/pabbrev/
+packages/peg/
 packages/posframe/
 packages/psgml/
 packages/python/
+packages/realgud/
+packages/realgud-ipdb/
+packages/realgud-jdb/
+packages/realgud-lldb/
+packages/realgud-node-debug/
+packages/realgud-node-inspect/
+packages/realgud-trepan-ni/
+packages/relint/
 packages/rudel/
+packages/smalltalk-mode/
 packages/soap-client/
 packages/sql-indent/
 packages/ssh-deploy/
+packages/svg/
 packages/system-packages/
+packages/tramp/
 packages/w3/
+packages/webfeeder/
 packages/xelb/
+packages/xr/
 packages/zones/
 
 # Testing file
diff --git a/GNUmakefile b/GNUmakefile
index 8bfd49b..5d2095f 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -138,10 +138,10 @@ autoloads := $(foreach pkg, $(pkgs), $(pkg)/$(notdir 
$(pkg))-autoloads.el)
 $(foreach al, $(autoloads), $(eval $(call RULE-srcdeps, $(al))))
 %-autoloads.el:
        @echo 'Generating autoloads for $@'
-       @cd $(dir $@) && \
-         $(EMACS) -l $(CURDIR)/admin/archive-contents.el \
-             --eval "(archive--refresh-pkg-file)" \
-             --eval "(require 'package)" \
+       @cd $(dir $@) &&                                                   \
+         $(EMACS) -l $(CURDIR)/admin/archive-contents.el                  \
+             --eval "(archive-refresh-pkg-file)"                          \
+             --eval "(require 'package)"                                  \
              --eval "(load (expand-file-name \"../names/names-autoloads.el\") 
t t)" \
              --eval "(package-generate-autoloads \"$$(basename $$(pwd))\" \
                                                  \"$$(pwd)\")"
diff --git a/README b/README
index e0c9faf..39d07f6 100644
--- a/README
+++ b/README
@@ -160,6 +160,12 @@ Furthermore we recommend the following:
 - Use lexical-binding if it all possible.
 - Try and fix the warnings emitted when compiling the package with a recent 
Emacs.
 
+The Copyright notice should specify "Free Software Foundation, Inc." as
+the copyright holder.  Ensure that all the code has the proper copyright:
+if it is not your own code, make sure the author has signed the relevant
+copyright papers (for non-trivial contributions), and indicate the author
+correctly in the commit.
+
 ** External branches
 
 The above instructions are enough to add regular packages, those that
@@ -228,15 +234,28 @@ In the `external' case, the copy of the code is not kept 
in `master` but in the
 `externals/<pkg-name>' branch in the `elpa.git' repository.
 
 To add a new externals package, first add this `elpa.git' repository as a
-new remote in your existing repository.  Then push a local branch to a
+new remote in your existing repository.
+
+Then push a local branch to a
 new remote branch in `elpa.git', named `externals/<pkgname>`.  For example:
 
    git push elpa <mybranch>:externals/<pkgname>
 
-Then edit the `externals-list' file as mentioned above, and push that
-change to `elpa's master branch.  After it's added to the `externals-list'
-file, the package can be maintained just by pushing changes to the
-`externals/<pkgname>` branch.
+For example, let's say that you want to add `realgud-ipdb` which is currently
+checked out in `$HOME/github/realgud-ipdb`:
+
+   cd $HOME/github/realgud-ipdb
+   git remote add elpa ${USER}@git.sv.gnu.org:/srv/git/emacs/elpa.git
+   git push elpa master:refs/heads/externals/realgud-ipdb
+
+
+Then edit the `externals-list' file as mentioned above, add the line
+
+   ("realgud-ipdb" :external "https://github.com/realgud/realgud-ipdb";)
+
+and push that change to `elpa's master branch.  After it's added to
+the `externals-list' file, the package can be maintained just by
+pushing changes to the `externals/<pkgname>` branch.
 
 If you wish to check out all the external packages into the `packages'
 directory, you can run the command:
diff --git a/admin/archive-contents.el b/admin/archive-contents.el
index 3024543..56f2b27 100644
--- a/admin/archive-contents.el
+++ b/admin/archive-contents.el
@@ -145,18 +145,38 @@ Currently only refreshes the ChangeLog files."
             (when (file-directory-p pkg)
               (archive--make-changelog pkg (expand-file-name "packages/"
                                                              srcdir)))
-          (error (message "Error: %S" v)))))
+          (error (message
+                 "Error in archive-prepare-packages for package %S:\n  %S"
+                  pkg v)))))
     (write-region new-revno nil wit nil 'quiet)
     ;; Also update the ChangeLog of external packages.
     (let ((default-directory (expand-file-name "packages/")))
       (dolist (dir (directory-files "."))
         (and (not (member dir '("." "..")))
              (file-directory-p dir)
-             (let ((index (expand-file-name
-                           (concat "packages/" dir "/.git/index")
-                           srcdir))
-                   (cl (expand-file-name "ChangeLog" dir)))
-               (and (file-exists-p index)
+             (let* ((gitdir (expand-file-name
+                             (concat "packages/" dir "/.git")
+                             srcdir))
+                    (index (cond
+                            ((file-directory-p gitdir)
+                             (expand-file-name
+                              (concat "packages/" dir "/.git/index")
+                              srcdir))
+                            ((file-readable-p gitdir)
+                             (with-temp-buffer
+                               (insert-file-contents gitdir)
+                               (goto-char (point-min))
+                               (if (looking-at "gitdir:[ \t]*")
+                                   (progn
+                                     (delete-region (match-beginning 0)
+                                                    (match-end 0))
+                                     (expand-file-name "index" 
(buffer-string)))
+                                 (message "Can't find gitdir in %S" gitdir)
+                                 nil)))
+                            (t nil)))
+                    (cl (expand-file-name "ChangeLog" dir)))
+               (and index
+                    (file-exists-p index)
                     (or (not (file-exists-p cl))
                         (file-newer-than-file-p index cl))))
              (archive--make-changelog
@@ -184,30 +204,28 @@ PKG is the name of the package and DIR is the directory 
where it is."
       (with-temp-buffer
        (insert-file-contents mainfile)
        (goto-char (point-min))
-       (if (not (looking-at ";;;.*---[ \t]*\\(.*?\\)[ \t]*\\(-\\*-.*-\\*-[ 
\t]*\\)?$"))
-            (error "Can't parse first line of %s" mainfile)
-          ;; Grab the other fields, which are not mandatory.
-          (let* ((description (match-string 1))
-                 (version
-                  (or (lm-header "package-version")
-                      (lm-header "version")
-                      (unless (equal pkg "org")
-                        (error "Missing `version' header"))))
-                 (_ (archive--version-to-list version)) ; Sanity check!
-                 (requires-str (lm-header "package-requires"))
-                 (pt (lm-header "package-type"))
-                 (simple (if pt (equal pt "simple") (= (length files) 1)))
-                 (keywords (lm-keywords-list))
-                 (url (or (lm-header "url")
-                          (format archive-default-url-format pkg)))
-                 (req
-                  (and requires-str
-                       (mapcar #'archive--convert-require
-                               (car (read-from-string requires-str))))))
-            (list simple version description req
-                  ;; extra parameters
-                  (list (cons :url url)
-                        (cons :keywords keywords)))))))
+        (let* ((pkg-desc (package-buffer-info))
+               (extras (package-desc-extras pkg-desc))
+               (version (package-desc-version pkg-desc))
+               (keywords (lm-keywords-list))
+               ;; (_ (archive--version-to-list version)) ; Sanity check!
+               (pt (lm-header "package-type"))
+               (simple (if pt (equal pt "simple") (= (length files) 1)))
+               (found-url (alist-get :url extras))
+               (found-keywords (alist-get :keywords extras)))
+
+          (when (and keywords (not found-keywords))
+            ;; Using an old package-buffer-info which doesn't include
+            ;; keywords.  Fix it by hand.
+            (push (cons :keywords keywords) extras))
+          (unless found-url
+            ;; Provide a good default URL.
+            (push (cons :url (format archive-default-url-format pkg)) extras))
+          (list simple
+               (package-version-join version)
+               (package-desc-summary pkg-desc)
+                (package-desc-reqs pkg-desc)
+                extras))))
      (t
       (error "Can't find main file %s file in %s" mainfile dir)))))
 
@@ -323,18 +341,20 @@ Rename DIR/ to PKG-VERS/, and return the descriptor."
       (error "File not found: %s" pkg-file))
     (archive--form-from-file-contents pkg-file)))
 
-(defun archive--refresh-pkg-file ()
+(defun archive-refresh-pkg-file ()
+  ;; Note: Used via --batch by GNUmakefile rule.
   (let* ((dir (directory-file-name default-directory))
          (pkg (file-name-nondirectory dir)))
     (archive--write-pkg-file dir pkg (archive--metadata dir pkg))))
 
 (defun archive--write-pkg-file (pkg-dir name metadata)
+  ;; FIXME: Use package-generate-description-file!
   (let ((pkg-file (expand-file-name (concat name "-pkg.el") pkg-dir))
        (print-level nil)
         (print-quoted t)
        (print-length nil))
     (write-region
-     (concat (format ";; Generated package description from %s.el\n"
+     (concat (format ";; Generated package description from %s.el  -*- 
no-byte-compile: t -*-\n"
                     name)
             (prin1-to-string
               (cl-destructuring-bind (version desc requires extras)
@@ -358,7 +378,7 @@ Rename DIR/ to PKG-VERS/, and return the descriptor."
 
 ;;; Make the HTML pages for online browsing.
 
-(defun archive--html-header (title)
+(defun archive--html-header (title &optional header)
   (format "<!DOCTYPE HTML PUBLIC>
 <html>
     <head>
@@ -383,20 +403,18 @@ Rename DIR/ to PKG-VERS/, and return the descriptor."
             </div>
 
             <div class=\"container\">\n"
-          title title title))
+          title (or header title)))
 
 (defun archive--html-bytes-format (bytes) ;Aka memory-usage-format.
   (setq bytes (/ bytes 1024.0))
-  (let ((units '(;; "B"
-                 "kB" "MB" "GB" "TB")))
+  (let ((units '("KiB" "MiB" "GiB" "TiB")))
     (while (>= bytes 1024)
       (setq bytes (/ bytes 1024.0))
       (setq units (cdr units)))
     (cond
-     ;; ((integerp bytes) (format "%4d%s" bytes (car units)))
-     ((>= bytes 100) (format "%4.0f%s" bytes (car units)))
-     ((>= bytes 10) (format "%4.1f%s" bytes (car units)))
-     (t (format "%4.2f%s" bytes (car units))))))
+     ((>= bytes 100) (format "%4.0f&nbsp;%s" bytes (car units)))
+     ((>= bytes 10) (format "%4.1f&nbsp;%s" bytes (car units)))
+     (t (format "%4.2f&nbsp;%s" bytes (car units))))))
 
 (defun archive--get-prop (prop name srcdir mainsrcfile)
   (let ((kprop (intern (format ":%s" (downcase prop)))))
@@ -497,7 +515,9 @@ Rename DIR/ to PKG-VERS/, and return the descriptor."
          (mainsrcfile (expand-file-name (format "%s.el" name) srcdir))
          (desc (aref (cdr pkg) 2)))
     (with-temp-buffer
-      (insert (archive--html-header (format "GNU ELPA - %s" name)))
+      (insert (archive--html-header
+               (format "GNU ELPA - %s" name)
+               (format "<a href=\"index.html\">GNU ELPA</a> - %s" name)))
       (insert (format "<h2 class=\"package\">%s</h2>" name))
       (insert "<dl>")
       (insert (format "<dt>Description</dt><dd>%s</dd>\n" (archive--quote 
desc)))
@@ -536,7 +556,8 @@ Rename DIR/ to PKG-VERS/, and return the descriptor."
                   "\n</pre>\n")))
       (unless (< (length files) (if (zerop (length latest)) 1 2))
         (insert (format "<h2>Old versions</h2><table>\n"))
-        (dolist (file files)
+        (dolist (file
+                 (sort files (lambda (f1 f2) (version< (car f2) (car f1)))))
           (unless (equal (pop file) latest)
             (let ((attrs (file-attributes file)))
               (insert (format "<tr><td><a 
href=%S>%s</a></td><td>%s</td><td>%s</td>\n"
@@ -676,7 +697,7 @@ Return non-nil if there's an \"emacs\" repository present."
     nil))
 
 (defun archive--cleanup-packages (externals-list with-core)
-  "Remove subdirectories of `packages/' that do not correspond to known 
packages.
+  "Remove unknown subdirectories of `packages/'.
 This is any subdirectory inside `packages/' that's not under
 version control nor listed in EXTERNALS-LIST.
 If WITH-CORE is non-nil, it means we manage :core packages as well."
@@ -738,7 +759,7 @@ If WITH-CORE is non-nil, it means we manage :core packages 
as well."
                    (with-temp-buffer
                      (if (archive--use-worktree-p)
                          (archive-call t "git" "worktree" "add"
-                                       "-b" branch
+                                       "-B" branch
                                        name (concat "origin/" branch))
                        (archive-call t "git" "clone"
                                      "--reference" ".." "--single-branch"
@@ -759,17 +780,27 @@ If WITH-CORE is non-nil, it means we manage :core 
packages as well."
   "Link file from SOURCE to DEST ensuring subdirectories."
   (unless (string-match-p exclude-regexp source)
     (let* ((absolute-package-file-name
-            (expand-file-name dest package-root))
+           (if (equal "" dest)
+               ;; Calling expand-file-name would remove the trailing / !
+               package-root
+              (expand-file-name dest package-root)))
            (absolute-core-file-name
             (expand-file-name source emacs-repo-root))
            (directory (file-name-directory absolute-package-file-name)))
+      (when (fboundp 'file-name-quote)  ;Not yet available on elpa.gnu.org
+        (setq directory (file-name-quote directory)))
       (unless (file-directory-p directory)
         (make-directory directory t))
-      (condition-case nil
+      (condition-case err
          (make-symbolic-link absolute-core-file-name
                              absolute-package-file-name t)
        (file-error
-        (copy-file absolute-core-file-name absolute-package-file-name))))
+         (message "Error: can't symlink to %S from %S:\n  %S"
+                  absolute-core-file-name absolute-package-file-name err)
+        (copy-file absolute-core-file-name
+                   (if (file-directory-p absolute-package-file-name)
+                       (file-name-as-directory absolute-package-file-name)
+                     absolute-package-file-name)))))
     (message "  %s -> %s" source (if (archive--core-package-empty-dest-p dest)
                                      (file-name-nondirectory source)
                                    dest))))
@@ -805,7 +836,8 @@ If WITH-CORE is non-nil, it means we manage :core packages 
as well."
   (pcase-let*
       ((`(,name . (:core ,file-patterns :excludes ,excludes)) definition)
        (emacs-repo-root (expand-file-name "emacs"))
-       (package-root (expand-file-name name "packages"))
+       (package-root (file-name-as-directory
+                     (expand-file-name name "packages")))
        (default-directory package-root)
        (exclude-regexp
         (mapconcat #'identity
diff --git a/copyright_exceptions b/copyright_exceptions
index fc321b3..0f2d2f6 100644
--- a/copyright_exceptions
+++ b/copyright_exceptions
@@ -72,6 +72,8 @@
 ./mmm-mode/mmm-rpm.el:;; Copyright (C) 2000 by Marcus Harnisch <address@hidden>
 ./muse/htmlize-hack.el
 ./rudel/rudel-loaddefs.el
+./tramp/tramp-loaddefs.el
+./tramp/tramp-sh.el:;; (copyright statements below in code to be updated with 
the above notice)
 ./uni-confusables/gen-confusables.el:;; Copyright (C) 1991-2009, 2010 Unicode, 
Inc.
 ./uni-confusables/gen-confusables.el:;; gen-confusables.el.  The copyright and 
permissions are the same
 ./uni-confusables/gen-confusables.el:;; list (covered by the Unicode copyright 
terms in copyright.html)
diff --git a/externals-list b/externals-list
index cedce15..e8dcc1b 100644
--- a/externals-list
+++ b/externals-list
@@ -34,7 +34,8 @@
  ("aggressive-indent"  :subtree 
"https://github.com/Malabarba/aggressive-indent-mode";)
  ("auctex"             :external "git://git.sv.gnu.org/auctex.git")
  ("bbdb"               :external "git://git.savannah.nongnu.org/bbdb.git")
- ("buffer-expose" :external "https://github.com/clemera/buffer-expose";)
+ ("bnf-mode"           :external "https://github.com/sergeyklay/bnf-mode";)
+ ("buffer-expose"      :external "https://github.com/clemera/buffer-expose";)
  ("bug-hunter"         :subtree 
"https://github.com/Malabarba/elisp-bug-hunter";)
  ;;FIXME:("cedet"      :external "??")
  ;; ("cc-mode"         :core ("lisp/progmodes/cc-align.el"
@@ -68,12 +69,13 @@
  ("delight"            :subtree "http://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";)
- ("dired-git-info" :external "https://github.com/clemera/dired-git-info";)
+ ("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";)
  ("easy-kill"          :subtree "https://github.com/leoliu/easy-kill";)
  ("ebdb"                :external "https://github.com/girzel/ebdb.git";)
+ ("eev"                        :external "https://github.com/edrx/eev.git";)
  ("eglot"               :external "https://github.com/joaotavora/eglot.git";)
  ("eldoc-eval"         :subtree 
"https://github.com/thierryvolpiatto/eldoc-eval.git";)
  ("enwc"               :subtree 
"bzr::bzr://bzr.savannah.nongnu.org/enwc/trunk")
@@ -82,7 +84,7 @@
  ("f90-interface-browser" :subtree "https://github.com/wence-/f90-iface";)
  ("flymake"            :core "lisp/progmodes/flymake.el")
  ("fountain-mode"      :external "https://github.com/rnkn/fountain-mode";)
- ("frog-menu" :external "https://github.com/clemera/frog-menu";)
+ ("frog-menu"          :external "https://github.com/clemera/frog-menu";)
  ("ggtags"             :subtree "https://github.com/leoliu/ggtags";)
  ("gnome-c-style"      :subtree "https://github.com/ueno/gnome-c-style.git";)
  ("gnorb"               :subtree "https://github.com/girzel/gnorb";)
@@ -99,9 +101,11 @@
  ("map"                 :core "lisp/emacs-lisp/map.el")
  ("math-symbol-lists"  :subtree 
"https://github.com/vspinu/math-symbol-lists.git";)
  ("mmm-mode"            :external "https://github.com/purcell/mmm-mode.git";)
+ ("muse"               :subtree "https://github.com/alexott/muse";)
  ("nameless"           :subtree "https://github.com/Malabarba/Nameless";)
  ("names"              :subtree "http://github.com/Malabarba/names";)
  ("objed"              :external "https://github.com/clemera/objed";)
+ ("olivetti"           :external "https://github.com/rnkn/olivetti";)
  ("omn-mode"            :external nil)
  ("orgalist"            :external nil)
  ("ntlm"               :core "lisp/net/ntlm.el")
@@ -109,58 +113,41 @@
  ("pabbrev"             :external "https://github.com/phillord/pabbrev.git";)
  ("parsec"              :subtree 
"https://github.com/cute-jumper/parsec.el.git";)
  ("peg"                        :external) ;Was in 
"https://github.com/ellerh/peg.el";
+ ("persist"             :external "https://gitlab.com/phillord/persist.git";)
  ("pinentry"           :subtree "https://github.com/ueno/pinentry-el.git";)
  ("posframe"           :external "https://github.com/tumashu/posframe";)
  ("psgml"               :external "https://github.com/lenst/psgml.git";)
  ("python"             :core "lisp/progmodes/python.el")
  ;;FIXME:("org"                :external ??) ;; Need to introduce snapshots!!
+ ("realgud"             :external "https://github.com/realgud/realgud";)
+ ("realgud-ipdb"        :external "https://github.com/realgud/realgud-ipdb";)
+ ("realgud-jdb"         :external "https://github.com/realgud/jdb";)
+ ("realgud-lldb"        :external "https://github.com/realgud/realgud-lldb";)
+ ("realgud-node-debug"  :external 
"https://github.com/realgud/realgud-node-debug";)
+ ("realgud-node-inspect" :external 
"https://github.com/realgud/realgud-node-inspect";)
+ ("realgud-trepan-ni"   :external "https://github.com/realgud/realgud-ni";)
+ ("relint"             :external "https://github.com/mattiase/relint";)
  ("rich-minority"      :subtree "https://github.com/Malabarba/rich-minority";)
  ("rudel"              :external nil) ;; Was 
bzr::bzr://rudel.bzr.sourceforge.net/bzrroot/rudel/trunk
+ ("smalltalk-mode"     :external "git://git.sv.gnu.org/smalltalk")
  ("soap-client"                :core ("lisp/net/soap-client.el" 
"lisp/net/soap-inspect.el"))
  ("sotlisp"            :subtree 
"https://github.com/Malabarba/speed-of-thought-lisp";)
  ("spinner"            :subtree "https://github.com/Malabarba/spinner.el";)
  ("sql-indent"          :external 
"https://github.com/alex-hhh/emacs-sql-indent";)
  ("ssh-deploy"         :external 
"https://github.com/cjohansson/emacs-ssh-deploy";)
+ ("svg"                        :core ("lisp/svg.el"))
  ("system-packages"    :external 
"https://gitlab.com/jabranham/system-packages";)
  ("temp-buffer-browse"  :subtree 
"https://github.com/leoliu/temp-buffer-browse";)
  ("test-simple"         :subtree "https://github.com/rocky/emacs-test-simple";)
  ("vdiff"               :subtree "https://github.com/justbur/emacs-vdiff";)
  ("vcl-mode"           :subtree "git://git.gnu.org.ua/vcl-mode")
- ;;("tramp"            :core
- ;;                      (;; FIXME: elpa.gnu.org doesn't know where to get from
- ;;                       ;;"README.md"
- ;;                       ;; FIXME: elpa.gnu.org doesn't know where to get from
- ;;                       ;;"dir"
- ;;                       "lisp/net/tramp.el"
- ;;                       "lisp/net/tramp-archive.el"
- ;;                       "lisp/net/tramp-adb.el"
- ;;                       "lisp/net/tramp-cache.el"
- ;;                       "lisp/net/tramp-cmds.el"
- ;;                       "lisp/net/tramp-compat.el"
- ;;                       "lisp/net/tramp-ftp.el"
- ;;                       "lisp/net/tramp-gvfs.el"
- ;;                       ;; FIXME: elpa.gnu.org doesn't know how to build
- ;;                       "lisp/net/tramp-loaddefs.el"
- ;;                       "lisp/net/tramp-sh.el"
- ;;                       "lisp/net/tramp-smb.el"
- ;;                       "lisp/net/tramp-uu.el"
- ;;                       "lisp/net/trampver.el"
- ;;                       ("doc/misc/tramp.texi" "doc/tramp.texi")
- ;;                       ("doc/misc/trampver.texi" "doc/trampver.texi")
- ;;                       ;; FIXME: elpa.gnu.org doesn't know how to build
- ;;                       "info/tramp.info"
- ;;                       ("test/lisp/net/tramp-tests.el"
- ;;                        "test/tramp-tests.el")
- ;;                       ("test/lisp/net/tramp-archive-tests.el"
- ;;                        "test/tramp-archive-tests.el")
- ;;                       ("test/lisp/net/tramp-archive-resources/foo.tar.gz"
- ;;                        "test/tramp-archive-resources/foo.tar.gz")
- ;;                       ("test/lisp/net/tramp-archive-resources/foo.iso/foo"
- ;;                        "test/tramp-archive-resources/foo.iso/foo")))
+ ("tramp"              :external 
"https://git.savannah.gnu.org/cgit/tramp.git/?h=elpa";)
  ;;FIXME:("vlf"                :subtree ??)
+ ("verilog-mode"        :core "lisp/progmodes/verilog-mode.el")
  ("w3"                 :external nil)
  ("wcheck-mode"                :subtree 
"https://github.com/tlikonen/wcheck-mode.git";)
  ("web-server"         :subtree 
"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";)
  ("which-key"           :subtree "https://github.com/justbur/emacs-which-key";)
  ("xelb"               :external "https://github.com/ch11ng/xelb.git";)
diff --git a/packages/ada-mode/ada-mode.el b/packages/ada-mode/ada-mode.el
index 046af9d..ff5edfc 100644
--- a/packages/ada-mode/ada-mode.el
+++ b/packages/ada-mode/ada-mode.el
@@ -2651,7 +2651,7 @@ compiler-specific compilation filters."
        ))
     ))
 
-(defvar ada-goto-declaration-start nil
+(defvar ada-goto-declaration-start #'ignore
   ;; Supplied by indentation engine.
   ;;
   ;; This is run from ff-pre-load-hook, so ff-function-name may have
@@ -3092,4 +3092,4 @@ simple: indent to previous line.")
 (when (featurep 'imenu)
   (require 'ada-imenu))
 
-;;; end of file
+;;; ada-mode.el ends here
diff --git a/packages/advice-patch/advice-patch.el 
b/packages/advice-patch/advice-patch.el
new file mode 100644
index 0000000..df0e2f5
--- /dev/null
+++ b/packages/advice-patch/advice-patch.el
@@ -0,0 +1,124 @@
+;;; advice-patch.el --- Use patches to advise the inside of functions  -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2019  Free Software Foundation, Inc.
+
+;; Author: Stefan Monnier <address@hidden>
+;; Package-requires: ((emacs "24.4"))
+;; Version: 0.1
+;; 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:
+
+;; This package builds on `advice-add' but instead of letting you add code
+;; before/after/around the body of the advised function, it lets you directly
+;; patch the inside of that function.
+
+;; This is inspired from [el-patch](https://github.com/raxod502/el-patch),
+;; but stripped down to its barest essentials.  `el-patch' provides many more
+;; features, especially to be notified when the advised function is modified
+;; and to help you update your patches accordingly.
+
+;; Beware: this can eat your lunch and can misbehave unexpectedly in many
+;; legitimate cases.
+
+;;;; TODO:
+
+;; - Lots of cases to fix and features to add.  See FIXMEs in the code.
+
+;;; Code:
+
+;; Changing the *internals* of a function.
+;; Inspired by https://github.com/raxod502/el-patch
+
+(defun advice--patch (form newcode oldcodes)
+  "Return FORM where one occurrence of one of OLDCODES is replaced with 
NEWCODE."
+  ;; FIXME: Maybe provide fancier "patch specifications" than just
+  ;; "newcode <-> oldcodes" (e.g. like el-search-query-replace).
+  ;; E.g. maybe it would be good to allow specifying
+  ;; how many occurrences to expect/replace.  Or to specify a *sequence* of
+  ;; oldcodes to replace.  But this is at least "good enough" in the sense that
+  ;; in the worst case, you can just provide the full original function body
+  ;; along with its replacement.
+  (let ((counter 0))
+    (letrec ((patch (lambda (x)
+                      (cond
+                       ((member x oldcodes)
+                        (setq counter (1+ counter))
+                        newcode)
+                       ((consp x)
+                        (cons (funcall patch (car x))
+                              (funcall patch (cdr x))))
+                       (t x)))))
+      (let ((new-form (funcall patch form)))
+        (cond
+         ((= counter 0)
+          (error "Old code not found!"))
+         ((> counter 1)
+          (error "Not sure which of %d copies of oldcode to patch" counter))
+         (t new-form))))))
+
+;;;###autoload
+(defun advice-patch (name newcode oldcode)
+  "Replace OLDCODE with NEWCODE in the definition of NAME.
+OLDCODE is an S-expression to replace in the source code.
+It can also be a vector of S-expressions, so that you can specify the various 
original source codes found in various Emacs versions."
+  ;; FIXME: We probably want to *name* the override, so as to be able to
+  ;; remove/update it.
+  ;; FIXME: Provide a docstring that describes the effect of the patch!
+  ;; FIXME: Make it work on functions that aren't defined yet!
+  ;; FIXME: Make it possible to combine several "overrides".
+  ;; FIXME: Should this be a macro, so that `newcode' can refer to lexical
+  ;; variables defined in the context?
+  (pcase-let* ((`(,buf . ,pos)
+                (let ((enable-local-variables :safe))
+                  (or (find-function-noselect name 'lisp-only)
+                      (error "Can't find source file of %S" name))))
+               (pos (or pos
+                        (error "Can't find original definition of %S" name)))
+               (form (with-current-buffer buf
+                       (save-excursion
+                         (goto-char pos)
+                         (read (current-buffer)))))
+               (orig-body
+                (if (and (equal name (nth 1 form))
+                         (listp (nth 2 form)))
+                    (nthcdr 3 form)
+                  (error "Don't know how to extract the original body of %S"
+                         name)))
+               (new-body
+                (advice--patch orig-body newcode
+                               (if (vectorp oldcode)
+                                   (mapcar #'identity oldcode)
+                                 (list oldcode))))
+               ;; FIXME: This new function is incorrect if `form' is something
+               ;; like a `define-derived-mode' or `define-minor-mode', ...
+               ;; Basically, this works for `defun' (and with luck maybe a few
+               ;; other cases as well).
+               (fundef `(lambda ,(nth 2 form) . ,new-body))
+               (funval (let ((lexical-binding (with-current-buffer buf
+                                                lexical-binding)))
+                         (byte-compile fundef))))
+    ;; FIXME: `C-h o' on the function will show the docstring twice!
+    ;; FIXME: This doesn't keep track of the source of the override, we should
+    ;; indirect through a symbol and add it to current-load-list.
+    ;; FIXME: There's no easy way to un-override the function!
+    (advice-add name :override funval
+                ;; Only override the original definition, not the various
+                ;; pieces of advice that might have been applied to it.
+                '((depth . 100)))))
+
+(provide 'advice-patch)
+;;; advice-patch.el ends here
diff --git a/packages/arbitools/arbitools.el b/packages/arbitools/arbitools.el
index ca3a70e..b0fd83b 100644
--- a/packages/arbitools/arbitools.el
+++ b/packages/arbitools/arbitools.el
@@ -1,9 +1,9 @@
 ;;; arbitools.el --- Package for chess tournaments administration
 
-;; Copyright 2016 Free Software Foundation, Inc.
+;; Copyright 2016-2019 Free Software Foundation, Inc.
 
 ;; Author: David Gonzalez Gandara <address@hidden>
-;; Version: 0.97
+;; Version: 0.977
 ;; Package-Requires: ((cl-lib "0.5"))
 
 ;; This program is free software: you can redistribute it and/or modify
@@ -17,7 +17,7 @@
 ;; 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/>.
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
@@ -30,8 +30,8 @@
 ;;            It is distributed under a GPL license.
 ;;            https://www.tug.org/applications/pdftex/
 ;;
-;; "bbpPairings.exe" by Bierema Boyz Programming is necessary to do the 
-;;                   pairings. Copy the file to an executable folder, 
+;; "bbpPairings.exe" by Bierema Boyz Programming is necessary to do the
+;;                   pairings. Copy the file to an executable folder,
 ;;                   for example /usr/bin.
 ;;                   Find bbpPairings in
 ;;                   https://github.com/BieremaBoyzProgramming/bbpPairings
@@ -50,11 +50,11 @@
 ;; manual edition of the files.
 ;;
 ;; - Updating the players ratings. - with python
-;; 
+;;
 ;; - Adding players to an existing file. - with python
 ;;
 ;; - Getting standings from a tournament file. -with python
-;; 
+;;
 ;; - Getting IT3 Tournament report form. - with python
 ;;
 ;; - Deleting a round. - Native
@@ -90,42 +90,38 @@
 ;; ---------------------------------
 ;;
 ;; - Write the add players from file function in ELISP.
-;;
 ;; - Insert results from a results file created with a pairing program.
 ;;   Add the date in the "132" line and the results in the "001" lines.
-;;
 ;; - Add empty round. Ask for date create empty space in the players lines.
 ;;   Add the date in the "132" line.
-;; 
 ;; - Add the rank number and the position automatically when adding players.
-;;
 ;; - Add team.
-;;
 ;; - Add player to team. Prompt for team and player number.
-;;
 ;; - Generate pgn file for a round or the whole tournament.
-;;
 ;; - Reorder the players list
-;;
 ;; - Error handling
-;;
 ;; - Make the interface more friendly
-;;
 ;; You will find more information in www.dggandara.eu/arbitools.htm
 
 ;;; Code:
 
 (eval-when-compile (require 'cl-lib))
+(require 'seq)
 
 (defvar arbitools-verbose nil)
-(defvar arbitools-performancetable (list -800 -677 -589 -538 -501 -470 -444 
-422 -401 -383 -366 -351 -336 -322 -309 -296 -284 -273 -262 -251 -240 -230 -220 
-211 -202 -193 -184 -175 -166 -158 -149 -141 -133 -125 -117 -110 -102 -95 -87 
-80 -72 -65 -57 -50 -43 -36 -29 -21 -14 -7 0 7 14 21 29 36 43 50 57 65 72 80 87 
95 102 110 117 125 133 141 149 158 166 175 184 193 202 211 220 230 240 251 262 
273 284 296 309 322 336 351 366 383 401 422 444 470 501 538 589 677 800))
-(defvar arbitools-players-info nil)
+(defvar arbitools-elo-floor 1000 "Rating floor for calculations")
+(defvar arbitools-arpo-cutworst t "Cut the worst result for ARPO calculations")
+(defvar arbitools-arpo-cutbest t "Cut the best results for ARPO calculations")
+(defvar arbitools-performancetable (list -800 -677 -589 -538 -501 -470 -444 
-422 -401 -383 -366 -351 -336 -322 -309 -296 -284 -273 -262 -251 -240 -230 -220 
-211 -202 -193 -184 -175 -166 -158 -149 -141 -133 -125 -117 -110 -102 -95 -87 
-80 -72 -65 -57 -50 -43 -36 -29 -21 -14 -7 0 7 14 21 29 36 43 50 57 65 72 80 87 
95 102 110 117 125 133 141 149 158 166 175 184 193 202 211 220 230 240 251 262 
273 284 296 309 322 336 351 366 383 401 422 444 470 501 538 589 677 800)
+  "Table of expected results according to FIDE ratings rules")
+(defvar arbitools-players-info nil
+  "Table to store rank numbers, names, ratings and expected results")
 
 ;; TODO Implement a hashtable to parse the file and store the data
 ;; TODO Implement the performance table as a vector variable
 
 (defun arbitools-fill-players-info ()
-  "Fill arbitools-players-info with the information from the main buffer"
+  "Fill `arbitools-players-info' with the information from the main buffer"
   (save-excursion
     (goto-char (point-min))
     (setq arbitools-players-info nil)
@@ -135,89 +131,88 @@
             (namestring (substring-no-properties linestring 14 47))
             (elostring (substring-no-properties linestring 48 52))
             (playerinfo))
-         (add-to-list 'playerinfo rankstring)
-         (add-to-list 'playerinfo namestring t)
-         (add-to-list 'playerinfo elostring t)
-          (add-to-list 'arbitools-players-info playerinfo t)))))
+       
+        (push rankstring playerinfo)
+        (push namestring playerinfo)
+        (push elostring playerinfo)
+        (push '0 playerinfo)
+         (add-to-list 'arbitools-players-info (reverse playerinfo) t)))))
 
 (defun arbitools-do-pairings (round)
   "Use bbpPairings to do the pairings for the next round.
    You need a XXR section followed by the number of rounds.
-   If you have any players that are not going to be paired, 
-   insert 0000 - H in the column, for a half point bye and 
+   If you have any players that are not going to be paired,
+   insert 0000 - H in the column, for a half point bye and
    0000 - F for full point bye. You can do that with
    arbitools-insert-bye. For the first round you will need a
    XXC section followed by white1 or black1, which will force
    the corresponding colour.
-   If the program throws an error you will find it in the 
+   If the program throws an error you will find it in the
    Pairings-output buffer."
   ;; TODO: if there is no XXR entry, error and prompt to write one.
   ;; TODO: right now, the program writes "0" as an opponent for allocated bye:
   ;;       replace this with "0000 - U".
   (interactive "sWhich round do you need to generate the pairings for?: ")
-  (save-excursion
-     (with-current-buffer "Pairings-output"
-        (erase-buffer)))
+  (with-current-buffer "Pairings-output"
+    (erase-buffer))
   (call-process "bbpPairings.exe" nil "Pairings-output" nil  "--dutch" 
buffer-file-name "-p")
-    
-  (let* ((actualround (arbitools-actual-round))
-         (numberofrounds (arbitools-number-of-rounds))
-         (numberoftables 0)
+
+  (let* ((numberoftables 0)
          (actualtable 0)
          (white 0)
          (black 0)
          (positiontowrite (+ 89 (* (- (string-to-number round) 1) 10)))
          (endoflinecolumn 0))
-       
-       (save-excursion
-         (with-current-buffer "Pairings-output"
-           (goto-char (point-min))
-           (setq numberoftables (string-to-number (thing-at-point 'word)))))
-       (while (<= actualtable numberoftables)
-         (save-excursion
-           (with-current-buffer "Pairings-output"
-                 (forward-line)
-                 (setq actualtable (+ actualtable 1))
-                 (setq white (thing-at-point 'word))
-                 (forward-word)
-                 (forward-word)
-                 (setq black (thing-at-point 'word))))
-         (save-excursion
-           (goto-char (point-min))
-           (while (re-search-forward "^001" nil t)
-             (forward-char 4) ;; go to rank number
-             (when (string= white (thing-at-point 'word))
-               (end-of-line)
-               (setq endoflinecolumn (current-column))
-               (beginning-of-line)
-               (forward-char positiontowrite)
-               (unless (= positiontowrite endoflinecolumn) ;; check if there 
is something and 
-                 (delete-char (- endoflinecolumn positiontowrite)))   ;; erase 
it
-               (insert "     ") ;; replace the first positions with spaces
-               (cond ((= 2 (length black)) (backward-char 1));; make room for 
bigger numbers
-                 ((= 3 (length black)) (backward-char 2)))
-               (insert (format "%s w  " black))
-               (cond ((= 2 (length black)) (delete-char 1));; adjust when 
numbers are longer
-                 ((= 3 (length black)) (delete-char 2))))
-             (when (string= black (thing-at-point 'word))
-               (end-of-line)
-               (setq endoflinecolumn (current-column))
-               (beginning-of-line)
-               (forward-char positiontowrite)
-               (unless (= positiontowrite endoflinecolumn) ;; check if there 
is something and 
-                 (delete-char (- endoflinecolumn positiontowrite)))   ;; erase 
it
-               (insert "     ") ;; replace the first positions with spaces
-               (cond ((= 2 (length white)) (backward-char 1)) ;; make room for 
bigger numbers
-                 ((= 3 (length white)) (backward-char 2)))
-               (insert (format "%s b  " white))
-               (cond ((= 2 (length white)) (delete-char 1));; adjust when 
numbers are longer
-                 ((= 3 (length white)) (delete-char 2)))))))))
+
+    (with-current-buffer "Pairings-output"
+      (goto-char (point-min))
+      (setq numberoftables (string-to-number (thing-at-point 'word))))
+    (while (<= actualtable numberoftables)
+      (with-current-buffer "Pairings-output"
+        (forward-line)
+        (setq actualtable (+ actualtable 1))
+        (setq white (thing-at-point 'word))
+        (forward-word)
+        (forward-word)
+        (setq black (thing-at-point 'word)))
+      (save-excursion
+        (goto-char (point-min))
+        (while (re-search-forward "^001" nil t)
+          (forward-char 4) ;; go to rank number
+          (when (string= white (thing-at-point 'word))
+            (end-of-line)
+            (setq endoflinecolumn (current-column))
+            (beginning-of-line)
+            (forward-char positiontowrite)
+            (unless (= positiontowrite endoflinecolumn) ;; check if there is 
something and
+              (delete-char (- endoflinecolumn positiontowrite))) ;; erase it
+            (insert "     ") ;; replace the first positions with spaces
+            (cond ((= 2 (length black)) (backward-char 1)) ;; make room for 
bigger numbers
+                  ((= 3 (length black)) (backward-char 2)))
+            (insert (format "%s w  " black))
+            (cond ((= 2 (length black)) (delete-char 1)) ;; adjust when 
numbers are longer
+                  ((= 3 (length black)) (delete-char 2))))
+          (when (string= black (thing-at-point 'word))
+            (end-of-line)
+            (setq endoflinecolumn (current-column))
+            (beginning-of-line)
+            (forward-char positiontowrite)
+            (unless (= positiontowrite endoflinecolumn) ;; check if there is 
something and
+              (delete-char (- endoflinecolumn positiontowrite))) ;; erase it
+            (insert "     ") ;; replace the first positions with spaces
+            (cond ((= 2 (length white)) (backward-char 1)) ;; make room for 
bigger numbers
+                  ((= 3 (length white)) (backward-char 2)))
+            (insert (format "%s b  " white))
+            (cond ((= 2 (length white)) (delete-char 1)) ;; adjust when 
numbers are longer
+                  ((= 3 (length white)) (delete-char 2)))))))))
 
 (defun arbitools-prepare-file-DOS ()
   "Prepare file for DOS: add carriage return at the end of lines.
    For some administrators, like the ones in FEDA, the files need
    to be in this format or they will not allow them."
   (interactive)
+  ;; FIXME: Most likely this should be replaced by something like
+  ;; (set-buffer-file-coding-system 'dos)
   (save-excursion
     (goto-char (point-min))
     (while (search-forward "\n" nil t)
@@ -247,13 +242,16 @@
               s))
 
 (defun arbitools-arpo-vega ()
-  "Create userTB.txt file for file generated with ARPO app. 
-   Use in crosstable.txt generated in Vega. 
+  "Create userTB.txt file for file generated with ARPO app.
+   Use in crosstable.txt generated in Vega.
    You need to open the ARPO1.txt file in another buffer."
+
+  ;; FIXME: Right now the buffer is modified to perform the operations.
+  ;; It should be done without modifying
   (interactive)
   (save-excursion
     (goto-char (point-min))
-    (forward-line 7) ;; where the data starts in crosstable.txt
+    (forward-line 7) ;; where the data starts in crosstable.txt. This can be 
improved with regex
     (let* ((continue t)
           (arpodata "data")
           (arpopoint "point")
@@ -261,7 +259,16 @@
           namesplit)
 
       (when (not (get-buffer "userTB.txt")) (generate-new-buffer "userTB.txt"))
-      (save-excursion (with-current-buffer "userTB.txt" (erase-buffer) (insert 
"  User Tie-Break  ;")))
+      (with-current-buffer "userTB.txt"
+        (erase-buffer) (insert "  User Tie-Break  ;"))
+      (let ((case-fold-search t)) ;; removing the string "(W)" in players who 
withdrew. This should be replaced afterwards
+
+       (goto-char (point-min))
+       (forward-line 7)
+       (while (search-forward "(W)" nil t)
+         (replace-match "   "))
+       (goto-char (point-min))
+       (forward-line 7))
       (while continue ;; loop over crosstable.txt
         (beginning-of-line) (forward-word)
        (if (thing-at-point 'word)
@@ -270,28 +277,28 @@
              (clear-string name)
              (setq name (substring-no-properties (thing-at-point 'line) 4 24)) 
;; read the players name
              (setq namesplit (split-string name ",")) ;; remove the comma, 
which is not in ARPO1
-             (setq name (mapconcat 'identity namesplit "" )) ;; remove the 
comma
+             (setq name (mapconcat #'identity namesplit "" )) ;; remove the 
comma
              (setq name (arbitools-trim-right name)) ;; remove the comma
-             
-             (save-excursion (with-current-buffer "ARPO1.txt"
-                 (goto-char (point-min))
-                               
-                 (if (search-forward name) ;; find the name from crosstable
+
+             (with-current-buffer "ARPO1.txt"
+               (goto-char (point-min))
+
+               (if (search-forward name) ;; find the name from crosstable
                    ;; then
                    (progn
                       (end-of-line)(backward-word) ;; go to the end of line, 
where the ARPO is
                      (setq arpopoint (thing-at-point 'word))(backward-word) ;; 
get decimal figures
                      (setq arpodata (thing-at-point 'word)) ;;get integer part
-       
-                     (save-excursion (with-current-buffer "userTB.txt"
+
+                      (with-current-buffer "userTB.txt"
                        (insert arpodata)(insert ".")
-                       (insert arpopoint) (insert ";")))) ;; insert the ARPO 
in userTB.txt
-                    ;; else
-                   (save-excursion (with-current-buffer "userTB.txt"
-                       (insert "0.0;")))))) ;; in case the player has not got 
an ARPO, write a 0
-           (forward-line)) 
-           ;;else statement
-           (setq continue nil)))))) ;; if no more players, tell the while to 
stop
+                       (insert arpopoint) (insert ";"))) ;; insert the ARPO in 
userTB.txt
+                  ;; else
+                 (with-current-buffer "userTB.txt"
+                   (insert "0.0;")))) ;; in case the player has not got an 
ARPO, write a 0
+             (forward-line))
+         ;;else statement
+         (setq continue nil)))))) ;; if no more players, tell the while to stop
 
 
 (defun arbitools-list-pairing (round)
@@ -313,27 +320,25 @@
            (saveposition)
            (savepositionstandings)
            (namestring nil)
-           (playerlinestring nil)
-           (opponentlinestring "- ")
            (opponentstring nil)
            (rankstring nil)
            (fideidstring nil)
            (opponent nil)
            (color nil)
            (result nil))
-      
+
       (goto-char (point-min))
       (re-search-forward "^012" nil t)
       (setq tournamentnamestring (substring-no-properties (thing-at-point 
'line) 4 (end-of-line)))
       (goto-char (point-min))
       (re-search-forward "^062" nil t)
-      (setq numberofplayers (string-to-number (substring-no-properties 
+      (setq numberofplayers (string-to-number (substring-no-properties
         (thing-at-point 'line) 4 (end-of-line))))
       (with-current-buffer "Pairings List"
         (erase-buffer)
         (insert (format "%s" tournamentnamestring))
         (insert (format "Pairings for round %s\n\n" round)))
-      (with-current-buffer "Standings" 
+      (with-current-buffer "Standings"
         (goto-char (point-min)) (forward-line 4) (setq savepositionstandings 
(point)))
       (while (>= numberofplayers 1)
          (with-current-buffer "Standings"
@@ -345,13 +350,13 @@
          (search-forward fideidstring)
          (setq rankstring (arbitools-trim-left (substring-no-properties 
(thing-at-point 'line) 4 8)))
          (setq namestring (substring-no-properties (thing-at-point 'line) 14 
46))
-         (setq opponent (arbitools-trim-left (substring-no-properties 
(thing-at-point 'line) 
+         (setq opponent (arbitools-trim-left (substring-no-properties 
(thing-at-point 'line)
                         (+ 91 (* (- (string-to-number round) 1)10 ))
                         (+ 95(* (- (string-to-number round) 1) 10 )))))
-         (setq color (substring-no-properties (thing-at-point 'line) 
+         (setq color (substring-no-properties (thing-at-point 'line)
                         (+ 96 (* (- (string-to-number round) 1)10 ))
                         (+ 97(* (- (string-to-number round) 1) 10 ))))
-         (setq result (substring-no-properties (thing-at-point 'line) 
+         (setq result (substring-no-properties (thing-at-point 'line)
                         (+ 98 (* (- (string-to-number round) 1)10 ))
                         (+ 99(* (- (string-to-number round) 1) 10 ))))
 
@@ -362,61 +367,61 @@
            (when (string= (arbitools-trim-left opponent) (thing-at-point 
'word))
              (setq opponentstring (substring-no-properties (thing-at-point 
'line) 14 46))
              (with-current-buffer "Arbitools-output" (insert (format "%s" 
opponentstring)))))
-         (goto-char saveposition)      
+         (goto-char saveposition)
          (unless (or (member rankstring paired) (member opponent paired))
-           (cl-pushnew rankstring paired :test #'equal)         
+           (cl-pushnew rankstring paired :test #'equal)
            (with-current-buffer "Pairings List"
              (setq tablenumberstring (number-to-string tablenumber))
-             (when (< (length tablenumberstring)  2) 
+             (when (< (length tablenumberstring)  2)
                (setq tablenumberstring (concat " " tablenumberstring)))
-             (when (< (length rankstring)  2) 
+             (when (< (length rankstring)  2)
                (setq rankstring (concat rankstring " ")))
-             (when (< (length opponent)  2) 
+             (when (< (length opponent)  2)
                (setq opponent (concat opponent " ")))
              (cond ((string= color "w")
                      (cond ((string= result "1")
-                             (insert (format "%s. %s %s 1-0 %s %s\n" 
tablenumberstring rankstring 
+                             (insert (format "%s. %s %s 1-0 %s %s\n" 
tablenumberstring rankstring
                               namestring opponent opponentstring)))
                            ((string= result "0")
-                             (insert (format "%s. %s %s 0-1 %s %s\n" 
tablenumberstring rankstring 
+                             (insert (format "%s. %s %s 0-1 %s %s\n" 
tablenumberstring rankstring
                               namestring opponent opponentstring)))
                            ((string= result "+")
-                             (insert (format "%s. %s %s + - %s %s\n" 
tablenumberstring rankstring 
+                             (insert (format "%s. %s %s + - %s %s\n" 
tablenumberstring rankstring
                               namestring opponent opponentstring)))
                            ((string= result "-")
-                             (insert (format "%s. %s %s - + %s %s\n" 
tablenumberstring rankstring 
+                             (insert (format "%s. %s %s - + %s %s\n" 
tablenumberstring rankstring
                               namestring opponent opponentstring)))
                            ((string= result " ")
-                             (insert (format "%s. %s %s  -  %s %s\n" 
tablenumberstring rankstring 
+                             (insert (format "%s. %s %s  -  %s %s\n" 
tablenumberstring rankstring
                               namestring opponent opponentstring)))
                            ((string= result "=")
-                             (insert (format "%s. %s %s 1/2 %s %s\n" 
tablenumberstring rankstring 
+                             (insert (format "%s. %s %s 1/2 %s %s\n" 
tablenumberstring rankstring
                               namestring opponent opponentstring)))))
                    ((string= color "b")
                      (cond ((string= result "1")
-                           (insert (format "%s. %s %s 0-1 %s %s\n" 
tablenumberstring opponent opponentstring 
+                           (insert (format "%s. %s %s 0-1 %s %s\n" 
tablenumberstring opponent opponentstring
                             rankstring namestring)))
                           ((string= result "0")
-                           (insert (format "%s. %s %s 1-0 %s %s\n" 
tablenumberstring opponent opponentstring 
+                           (insert (format "%s. %s %s 1-0 %s %s\n" 
tablenumberstring opponent opponentstring
                             rankstring namestring)))
                           ((string= result "+")
-                           (insert (format "%s. %s %s - + %s %s\n" 
tablenumberstring opponent opponentstring 
+                           (insert (format "%s. %s %s - + %s %s\n" 
tablenumberstring opponent opponentstring
                             rankstring namestring)))
                           ((string= result "-")
-                           (insert (format "%s. %s %s + - %s %s\n" 
tablenumberstring opponent opponentstring 
+                           (insert (format "%s. %s %s + - %s %s\n" 
tablenumberstring opponent opponentstring
                             rankstring namestring)))
                           ((string= result " ")
-                           (insert (format "%s. %s %s  -  %s %s\n" 
tablenumberstring opponent opponentstring  
+                           (insert (format "%s. %s %s  -  %s %s\n" 
tablenumberstring opponent opponentstring
                             rankstring namestring)))
                           ((string= result "=")
-                           (insert (format "%s. %s %s 1/2 %s %s\n" 
tablenumberstring opponent opponentstring 
+                           (insert (format "%s. %s %s 1/2 %s %s\n" 
tablenumberstring opponent opponentstring
                             rankstring namestring))))))))
          (setq tablenumber (+ tablenumber 1))
          (setq numberofplayers (- numberofplayers 1)))))
    (switch-to-buffer "Pairings List"))
 
 (defun arbitools-list-players ()
-  "Put the list of players in two buffers, one in plain text and another 
+  "Put the list of players in two buffers, one in plain text and another
    in a beautiful LaTeX.
    You will also find a list in the List of players buffer."
   ;; TODO: the beautiful LaTeX
@@ -427,19 +432,19 @@
    (while (re-search-forward "^001" nil t)
      (let* ((linestring (thing-at-point 'line))
            (rankstring (substring linestring 5 8)))
-       
+
        (with-current-buffer "List of players"
          (insert (format " %s " rankstring))))
 
      (let* ((linestring (thing-at-point 'line))
            (namestring (substring linestring 14 47)))
-       
+
        (with-current-buffer "List of players"
          (insert (format "%s " namestring))))
 
      (let* ((linestring (thing-at-point 'line))
             (elostring (substring linestring 48 52)))
-       
+
        (with-current-buffer "List of players"
          (insert (format "%s\n" elostring))))))
   (with-current-buffer "List of players"
@@ -447,6 +452,7 @@
 
 (defun arbitools-new-trf ()
   "Create an empty trf file"
+  ;; TODO prompt for the data of the tournament to create the structure
   (interactive)
   (generate-new-buffer "New trf")
   (switch-to-buffer "New trf")
@@ -467,22 +473,22 @@
   (insert "XXC COLOR FOR THE FIRST ROUND (white1 or black1)\n")
   (insert "XXR NUMBER OF ROUNDS\n")
   (insert "132 DATES                                                           
                       YY/MM/DD  YY/MM/DD\n")
-  ;; (insert "001  000 GTIT NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN RAT. FED   
0000000000 YYYY/MM/DD 00.0  RNK  0000 C R  0000 C R\n")
+  (insert "001  000 GTIT NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN RAT. FED   
0000000000 YYYY/MM/DD 00.0  RNK  0000 C R  0000 C R\n")
   ;; (insert "013 NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN  0000 0000\n")
 )
 
  (defun arbitools-number-of-rounds ()
-   "Get the number of rounds in the tournament. It has to be executed in the 
+   "Get the number of rounds in the tournament. It has to be executed in the
     principal buffer."
    (let* ((numberofrounds 0))
-     
+
      (save-excursion
        (if (re-search-forward "^XXR" nil t)
-         (progn 
+         (progn
             (beginning-of-line)
             (forward-char 5)
             (setq numberofrounds (string-to-number (thing-at-point 'word))))
-       
+
          (goto-char (point-min))
          (re-search-forward "^132" nil t)
          (let* ((linestringrounds (thing-at-point 'line))
@@ -491,17 +497,19 @@
               (continue t))
             (while continue
               (if (< end-of-round (length linestringrounds))
-                
+
                 (progn
                    (setq numberofrounds (+ numberofrounds 1))
                    (setq beginning-of-round (+ beginning-of-round 10))
                    (setq end-of-round (+ end-of-round 10)))
-                  
+
                    (setq continue nil))))))
      numberofrounds))
 
 (defun arbitools-actual-round ()
   "Calculate the actual round. It has to be run on the principal buffer."
+  ;; TODO this function can be improved by checking all the players lines
+  ;; instead of just the first one
   (let* ((actualround 0))
     (save-excursion
       (goto-char (point-min))
@@ -513,17 +521,15 @@
         (setq actualround (/ (current-column) 10)))
       (when (< actualround 0)
         (setq actualround 0)))
-      ;;(when arbitool-verbose (save-excursion (with-current-buffer 
"Arbitools-output"  
-        ;;  (insert (format "column: %d -" actualround)))))
     actualround))
 
 (defun arbitools-calculate-points (round)
-  "Automatically calculate the points of each player and adjust the 
-   corresponding column. 
+  "Automatically calculate the points of each player and adjust the
+   corresponding column.
    Don't use this function when the round doesn't include all the results."
   (interactive "sUp to which round?: ")
   (save-excursion
-    (let ( (numberofrounds (arbitools-number-of-rounds))
+    (let ( ;; (numberofrounds (arbitools-number-of-rounds))
            (points         0.0)
            (pointstosum    0.0)
            (roundcount     1))
@@ -534,16 +540,21 @@
         (while (<= roundcount (string-to-number round))
           (beginning-of-line)
          (forward-char (+ 98 (* (- roundcount 1) 10))) ;; go to where the 
result is for each round
-          (cond ((string= (thing-at-point 'symbol) "1") (setq pointstosum 1.0))
-                ((string= (thing-at-point 'symbol) "+") (setq pointstosum 1.0))
-                ((string= (thing-at-point 'symbol) "=") (setq pointstosum 0.5))
-                ((string= (thing-at-point 'symbol) "0") (setq pointstosum 0.0))
-                ((string= (thing-at-point 'symbol) "-") (setq pointstosum 0.0))
-                ((string= (thing-at-point 'symbol) "F") (setq pointstosum 1.0))
-                ((string= (thing-at-point 'symbol) "H") (setq pointstosum 0.5))
-                ((string= (thing-at-point 'symbol) "Z") (setq pointstosum 0.0))
-                ((string= (thing-at-point 'symbol) "U") (setq pointstosum 1.0))
-                ((string= (thing-at-point 'symbol) nil) (setq pointstosum 
0.0)))
+          (let ((sym (thing-at-point 'symbol)))
+            ;; FIXME: If `sym' doesn't match any of those, we keep the previous
+            ;; value of `pointstosum', which seems wrong.
+           ;; ::: pointstosum should stay the same if none of the conditions
+           ;;     is met
+            (cond ((string= sym "1") (setq pointstosum 1.0))
+                  ((string= sym "+") (setq pointstosum 1.0))
+                  ((string= sym "=") (setq pointstosum 0.5))
+                  ((string= sym "0") (setq pointstosum 0.0))
+                  ((string= sym "-") (setq pointstosum 0.0))
+                  ((string= sym "F") (setq pointstosum 1.0))
+                  ((string= sym "H") (setq pointstosum 0.5))
+                  ((string= sym "Z") (setq pointstosum 0.0))
+                  ((string= sym "U") (setq pointstosum 1.0))
+                  ((string= sym nil) (setq pointstosum 0.0))))
           (setq points (+ points pointstosum))
           (setq roundcount (+ roundcount 1)))
         (beginning-of-line)
@@ -554,29 +565,27 @@
         (insert (format "%s" points))))))
 
 (defun arbitools-calculate-standings ()
-  "Write the standings in the Standings buffer. Update the POS field in the 
+  "Write the standings in the Standings buffer. Update the POS field in the
    file.
    You might need to run arbitools-calculate-points before using this
    function."
-  ;; TODO: Write tiebreaks. Write a new function that organize the standings 
according 
+  ;; TODO: Write tiebreaks. Write a new function that organize the standings 
according
   ;; to a given tiebreak.
   ;; Also, make it possible to print standings for past rounds.
   (interactive)
   (save-excursion
-    (save-excursion (with-current-buffer "Standings"
-      (erase-buffer)))
+    (with-current-buffer "Standings"
+      (erase-buffer))
     (arbitools-list-players)
-    (let* ((linestring)
-          (tournamentnamestring)
-          (numberofplayers 0)
-          (round "round")
-          (datachunk "")
-         (name)
-         (arpo)
-          (newpos 0)
-          (idfide "")
-          (beg)
-          (end))
+    (let* ((tournamentnamestring)
+           (numberofplayers 0)
+           (round "round")
+           (datachunk "")
+          (name)
+          (arpo)
+           (newpos 0)
+           (beg)
+           (end))
       (goto-char (point-min))
       (re-search-forward "^062" nil t)
       (forward-char 1)
@@ -584,11 +593,11 @@
       (goto-char (point-min))
       (re-search-forward "^012" nil t) ;; Get the name of the tournament
       (setq tournamentnamestring (thing-at-point 'line))
-      (save-excursion (with-current-buffer "Standings" ;; write the headings
-       (erase-buffer)          
+      (with-current-buffer "Standings" ;; write the headings
+       (erase-buffer)
         (insert (format "%s" tournamentnamestring))
         (insert (format "Standings for round %s\n\n" round))
-        (insert (format "POS. PTS.   No. Name                              ID  
       ARPO\n"))))
+        (insert (format "POS. PTS.   No. Name                              ID  
       ARPO\n")))
       (goto-char (point-min))
       (while (re-search-forward "^001" nil t) ;; loop the players in the main 
buffer
         (beginning-of-line)
@@ -610,24 +619,23 @@
           (insert " "))
         (beginning-of-line)
         (forward-char 67)
-        (setq datachunk (thing-at-point 'word)) ;; get idfide 
+        (setq datachunk (thing-at-point 'word)) ;; get idfide
         (with-current-buffer "Standings"
           (insert (format "%s" datachunk))
           (insert-char ?\s (- 10 (length datachunk)))
          (insert " "))
-       (save-excursion (with-current-buffer "ARPO"
+       (with-current-buffer "ARPO"
          (goto-char (point-min))
          (re-search-forward name nil t)
          (forward-word)
          (setq arpo (thing-at-point 'word))
          (forward-word)
-         (setq arpo (format "%s.%s" arpo (thing-at-point 'word)))))
+         (setq arpo (format "%s.%s" arpo (thing-at-point 'word))))
        (with-current-buffer "Standings"
-         ;;(insert "2350.01234")
           (insert (format "%s" arpo)) ;; fix tabs for sorting to work fine
          (insert "\n"))
-     )
-     (save-excursion (with-current-buffer "Standings" ;;  sorting
+        )
+      (with-current-buffer "Standings" ;;  sorting
         (goto-char (point-min))
         (forward-line 4)
         (setq beg (point))
@@ -648,15 +656,15 @@
         (setq beg (point))
         (goto-char (point-max))
         (setq end (point))
-        (reverse-region beg end))) ;; get this to sort in reverse
+        (reverse-region beg end)) ;; get this to sort in reverse
       (goto-char (point-min))
       (while (re-search-forward "^001" nil t)
        (setq datachunk (substring-no-properties (thing-at-point 'line) 14 47))
-        (save-excursion (with-current-buffer "Standings"
+        (with-current-buffer "Standings"
           (goto-char (point-min))
           (search-forward datachunk nil t)
-          (setq newpos (- (line-number-at-pos) 4)))) ;; the number of gives as 
the pos field
-                                              ;; minus 4 because of the first 
two lines
+          (setq newpos (- (line-number-at-pos) 4))) ;; the number of gives as 
the pos field
+        ;; minus 4 because of the first two lines
         (beginning-of-line)
         (forward-char 89) ;; go to POS field
         (forward-char -3)
@@ -669,12 +677,11 @@
    (interactive "sInsert rank number of the player: ")
    (let ((numberofrounds 0)
          (elo            ""))
-    
+
     (save-excursion
       (goto-char (point-min))
       (re-search-forward "^132" nil t)
         (let* ((linestringrounds   (thing-at-point 'line))
-               ;; (actualround        " ")
                (beginning-of-round 91)
                (end-of-round       99)
                (continue           t))
@@ -684,7 +691,7 @@
                   ;; (setq actualround (substring-no-properties 
linestringrounds beginning-of-round end-of-round))
                   (setq numberofrounds (+ numberofrounds 1))
                   (setq beginning-of-round (+ beginning-of-round 10))
-                  (setq end-of-round (+ end-of-round 10)))   
+                  (setq end-of-round (+ end-of-round 10)))
                (setq continue nil)))))
     (save-excursion
      (goto-char (point-min))
@@ -716,7 +723,7 @@
                       (insert (format "%s" (- (string-to-number rankstring) 
1))))
                     (setq roundcount (+ roundcount 1))))
                ;;(condition-case nil ;; TODO: fix teams info
-                 (save-excursion 
+                 (save-excursion
                    (while (re-search-forward "^013" nil t)
                     (let* ((linestringteam (thing-at-point 'line))
                           (integrantcount 0)
@@ -734,7 +741,7 @@
                          (insert-char ?\s (- 4 (length (format "%s" (- 
(string-to-number rankstring) 1)))))
                          (insert (format "%s" (- (string-to-number rankstring) 
1))))
                        (setq integrantcount (+ integrantcount 1))))))))))))
-             
+
      (save-excursion  ;; Actually delete the player's line
        (goto-char (point-min))
        (while (re-search-forward "^001  DEL" nil t)
@@ -749,14 +756,14 @@
        (goto-char (point-min))
        (re-search-forward "^062 ")
        (let* ((linestring      (thing-at-point 'line))
-              (numberofplayers (substring linestring 4))) 
+              (numberofplayers (substring linestring 4)))
         (delete-char (length numberofplayers))
         (setq numberofplayers (string-to-number numberofplayers))
         (setq numberofplayers (- numberofplayers 1))
         (insert (concat (number-to-string numberofplayers) "\n")))
        (re-search-forward "^072 ")
        (let* ((linestring           (thing-at-point 'line))
-              (numberofratedplayers (substring linestring 4))) 
+              (numberofratedplayers (substring linestring 4)))
         (unless (< (length elo) 2) ;; if elo is 0 or nonexistent
           (delete-char (length numberofratedplayers))
           (setq numberofratedplayers (string-to-number numberofratedplayers))
@@ -765,7 +772,7 @@
 
 (defun arbitools-delete-round (round)
    "Delete a round."
-   ;; TODO: It seems that it doesn't delete a previous bye inserted. 
+   ;; TODO: It seems that it doesn't delete a previous bye inserted.
    (interactive "sround: ")
    (save-excursion
     (goto-char (point-min))
@@ -805,7 +812,7 @@
           (insert-char ?\s (- 3 (length (format "%s" points)))) ;; write extra 
empty spaces
           (insert (format "%s" points)) ;; write the points
           (beginning-of-line)
-          (forward-char pointtowrite) 
+          (forward-char pointtowrite)
           (insert (format "  0000 - %s" type)))))))
 
 (defun arbitools-replace-empty ()
@@ -821,11 +828,11 @@
    ;; TODO: automatically insert the player in a team
    (interactive "ssex: \nstitle: \nsname: \nselo: \nsfed: \nsidfide: \nsyear: 
")
   (let ((playerlinelength nil)
-        (thislinelength nil)) 
+        (thislinelength nil))
      (save-excursion
        (goto-char (point-min))
        (re-search-forward "^001 ")
-       (let* ((linestring (thing-at-point 'line))) 
+       (let* ((linestring (thing-at-point 'line)))
          (setq playerlinelength (length linestring))))
      (save-excursion
        (goto-char (point-min))
@@ -858,25 +865,33 @@
          (insert-char ?\s (- 4 (length (format "%s" (+ (string-to-number 
rankstring) 1)))))
          (insert (format "%s" (+ (string-to-number rankstring) 1)))
          (setq thislinelength (length (thing-at-point 'line)))
-         (insert-char ?\s (- playerlinelength thislinelength)))))   
+         (insert-char ?\s (- playerlinelength thislinelength)))))
   (save-excursion
     (goto-char (point-min))
     (re-search-forward "^062 ")
     (let* ((linestring (thing-at-point 'line))
-           (numberofplayers (substring linestring 4))) 
+           (numberofplayers (substring linestring 4)))
       (delete-char (length numberofplayers))
       (setq numberofplayers (string-to-number numberofplayers))
       (setq numberofplayers (+ 1 numberofplayers))
       (insert (concat (number-to-string numberofplayers) "\n")))
     (re-search-forward "^072 ")
     (let* ((linestring (thing-at-point 'line))
-        (numberofratedplayers (substring linestring 4))) 
+        (numberofratedplayers (substring linestring 4)))
       (unless (< (length elo) 2)
         (delete-char (length numberofratedplayers))
         (setq numberofratedplayers (string-to-number numberofratedplayers))
         (setq numberofratedplayers (+ 1 numberofratedplayers))
         (insert (concat (number-to-string numberofratedplayers) "\n"))))))
 
+(defun arbitools--verbose-output (buffer msg &rest args)
+  "Insert MSG (formatted with ARGS) into BUFFER.
+Only do it if `arbitools-verbose' is non-nil."
+  (declare (indent 1))
+  (when arbitools-verbose
+    (with-current-buffer buffer
+      (insert (apply #'format msg args)))))
+
 (defun arbitools-insert-result (round white black result)
    "Insert a result. You will be prompetd for the white and black players
     rank numbers and the result (1, 0, =, +, -)"
@@ -894,7 +909,7 @@
          (setq positionendofline (current-column))
          (beginning-of-line)
          (forward-char pointtowrite)
-         (unless (= pointtowrite positionendofline) ;; check if there is 
something and 
+         (unless (= pointtowrite positionendofline) ;; check if there is 
something and
            (delete-char (- positionendofline pointtowrite)))   ;; erase it
          (insert "     ") ;; replace the first positions with spaces
          ;; make room for bigger numbers
@@ -902,15 +917,15 @@
            (backward-char 1))
            ((= 3 (length black))
            (backward-char 2)))
-         (insert (format "%s w %s" black result))) 
+         (insert (format "%s w %s" black result)))
        (when (string= black (thing-at-point 'word))
          ;; go to first round taking into account the cursor is in the rank 
number
          (end-of-line)
          (setq positionendofline (current-column))
          (beginning-of-line)
          (forward-char pointtowrite)
-         (unless (= pointtowrite positionendofline) ;; check if there is 
something and 
-           (when arbitools-verbose (save-excursion (with-current-buffer 
"Arbitools-output" (insert "yes"))))
+         (unless (= pointtowrite positionendofline) ;; check if there is 
something and
+           (arbitools--verbose-output "Arbitools-output" "yes")
            (delete-char (- positionendofline pointtowrite)))   ;; erase it
          (insert "     ") ;; replace the first positions with spaces
          ;; make room for bigger numbers
@@ -922,109 +937,121 @@
            ((string= "-" result) (insert (format "%s b +" white)))
            ((string= "0" result) (insert (format "%s b 1" white)))))))))
 
-(defun arbitools-get-player-opponents (player &rest cutworst)
-  "Takes the player's rank as argument. Returns a list which contains the rank 
number 
+(defun arbitools-get-player-opponents-average (player)
+  "Takes the player's rank as argument. Returns the average rating of the 
opponents"
+  (save-excursion
+    (let*((eloaverage 0.0)
+         (opponents (arbitools-get-player-opponents player)))
+      (dolist (opponent opponents)
+       (let* ((rating (string-to-number (nth 2
+         (nth (- (string-to-number opponent) 1) arbitools-players-info)))))
+         (when (not rating) (setq rating arbitools-elo-floor))
+         (when (not (numberp rating)) (setq rating arbitools-elo-floor))    ;; 
floor rating here
+         (when (= rating 0) (setq rating arbitools-elo-floor))              ;; 
floor rating here
+         (setq eloaverage (+ eloaverage rating))))
+      (setq eloaverage (/ eloaverage (length opponents)))
+      eloaverage)))
+
+(defun arbitools-get-player-ci (player)
+  "Takes the player's rank as argument. Returns the re-scaling of diff"
+  (save-excursion
+    (let*((sum_mi_ci  0.0)
+         (sum_mi     0.0)
+         (ci         0.0)
+         (opponents (arbitools-get-player-opponents player)))
+      (dolist (opponent opponents)
+        (setq sum_mi (+ sum_mi (length (arbitools-get-player-opponents 
(string-to-number opponent)))))
+       (setq sum_mi_ci (+ sum_mi_ci (* (nth 3 (nth (- (string-to-number 
opponent) 1) arbitools-players-info)) (length (arbitools-get-player-opponents 
(string-to-number opponent))))))
+       )
+      (setq ci (- (nth 3 (nth (- player 1) arbitools-players-info)) (/ 
sum_mi_ci sum_mi)))
+      (arbitools--verbose-output "Arbitools-output"
+       "Player %d sum_mi_ci %d sum_mi %d ci %d\n"
+       player sum_mi_ci sum_mi ci)
+      ci)))
+
+(defun arbitools-get-player-opponents (player)
+  "Takes the player's rank as argument. Returns a list which contains the rank 
number
    of player opponents in the tournament. Worst passes the number of worst 
opponents
    to remove from the list"
   (save-excursion
     (let*((opps nil)
-         (oppspoints)
-         (opponent 000)
-          (roundcount 1))
+         (oppspoints nil)
+         (opponent 000))
       (goto-char (point-min))
-      (while (re-search-forward "^001" nil t)
-        (let* ((linestring (thing-at-point 'line))
-              (maxlength 0)
-              (numberofrounds)
-              (offset 0)
-              (rankstring (substring-no-properties linestring 5 8))
-              (rank (string-to-number rankstring)))
-         
-          (when (= rank player)
-           (end-of-line)
-           (setq maxlength (+ maxlength (current-column)))
-           (setq numberofrounds (/ (- maxlength 89) 10))
-           (dotimes (number numberofrounds)
-             (setq offset (+ 94 (* (- roundcount 1) 10)))
-             (beginning-of-line)
-             (forward-char offset)
-              (setq opponent (thing-at-point 'word))
-              (when (and (not (string= opponent " "))(not (string= opponent 
""))(not (string= opponent nil))(not (string= opponent "0000")))
-               (add-to-list 'opps opponent))
-             (setq roundcount (+ roundcount 1))))))
+
+      (re-search-forward (format "^001[[:space:]]\\{1,4\\}%d" player))
+      (end-of-line)
+
+      (let* ((maxlength (current-column))
+            (numberofrounds (/ (- maxlength 89) 10))
+            (offset 0))
+
+        (dotimes (roundcount-1 numberofrounds)
+         (setq offset (+ 94 (* roundcount-1 10)))
+          (beginning-of-line)
+         (forward-char offset)
+          (setq opponent (thing-at-point 'word))
+          (when (not (member opponent '(" " "" nil "nil" "0000")))
+           (cl-pushnew opponent opps :test #'equal))))
+
       ;;do list opponents, create an alist with the points of each opponent
       (dolist (opp opps)
-       ;;while players
-             (goto-char (point-min))
-             (while (re-search-forward "^001" nil t)
-                (let* ((linestring (thing-at-point 'line))
-                     (maxlength 0)
-                     (numberofrounds)
-                     (offset 0)
-                     (rankstring (substring-no-properties linestring 5 8 ))
-                     (rank (string-to-number rankstring))
-                     (points 0.0))
-                 (when (= rank (string-to-number opp))
-                   (setq points (arbitools-get-player-played-points 
(string-to-number opp)))
-                   (add-to-list 'oppspoints (cons opp points))))))
-      (sort oppspoints (lambda (a b) (< (cdr a) (cdr b))))
-      (when (not (car cutworst)) (setq cutworst nil))
-      (when (and (> (length opps) (- (arbitools-number-of-rounds) 2)) cutworst)
-       (setq opps (delete (car (car oppspoints)) opps))                        
    ;; cut worst opponent
+       (let* ((points (arbitools-get-player-played-points
+                        (string-to-number opp))))
+         (cl-pushnew (cons opp points) oppspoints :test #'equal)))
+
+      ;; Beware: `sort' "consumes" its argument, so it's indispensable to use
+      ;; its return value.
+      (setq oppspoints (sort oppspoints (lambda (a b) (< (cdr a) (cdr b)))))
+      (when (and (> (length opps) 4) arbitools-arpo-cutworst)
+       (setq opps (delete (car (car oppspoints)) opps))) ;; cut worst opponent
+      (when (and (> (length opps) 4) arbitools-arpo-cutbest)
        (setq opps (delete (car (nth (- (length oppspoints) 1) oppspoints)) 
opps))) ;; cut best opponent
-      (when arbitools-verbose (save-excursion (with-current-buffer 
"Arbitools-output"
-       (insert (format "opponents: %s oppspoints %s Cutting %s and %s 
cutworst:%s %s\n"
-            opps oppspoints (car (car oppspoints)) (car (nth (- (length 
oppspoints) 1) oppspoints)) (car cutworst) (type-of cutworst))))))
+      (arbitools--verbose-output "Arbitools-output"
+       "Player: %d opponents: %d: %s oppspoints %d: %s worst %s best %s\n"
+       player
+        (length opps) opps
+        (length oppspoints) oppspoints
+        (car (car oppspoints))
+        (car (nth (- (length oppspoints) 1) oppspoints)))
       opps)))
 
 
 (defun arbitools-get-player-played-points (player)
-  "Takes the player's rank as argument. Returns points got by player in actual 
games"
+  "Take the player's rank as argument. Return points got by player in actual 
games"
   ;; TODO manage results such as 0000 - =
   (save-excursion
     (let*((points     0.0)
-         (result     0)
-         (roundcount 1))
-      
+         (result     0))
+
       (goto-char (point-min))
-      (while (re-search-forward "^001" nil t)
-        (let* ((linestring     (thing-at-point 'line))
-              (maxlength      0)
-              (numberofrounds)
-              (offset         0)
-              (rankstring     (substring-no-properties linestring 5 8))
-              (rank           (string-to-number rankstring)))
-         
-          (when (= rank player)
-           (end-of-line)
-           (setq maxlength (+ maxlength (current-column)))
-           (setq numberofrounds (/ (- maxlength 89) 10))
-           (dotimes (number numberofrounds)
-              (setq offset (+ 98 (* (- roundcount 1) 10)))
-             (beginning-of-line)
-             (forward-char offset)
-              (setq result (thing-at-point 'symbol))
-              (when (and (and (and (and (not (string= result nil))
-                                   (not (string= result "H")))
-                                   (not (string= result "-")))
-                                   (not (string= result "F")))
-                                   (not (string= result "Z")))
-               (cond
-                ((string= result "1")(setq points (+ 1 points)))
-                ((string= result "+")(setq points (+ 1 points)))
-                ((string= result "=")(setq points (+ 0.5 points)))))
-             (setq roundcount (+ roundcount 1)))))
-       )
+      (let* ((maxlength 0)
+            (numberofrounds)
+            (offset 0))
+
+        (re-search-forward (format "^001[[:space:]]\\{1,4\\}%d" player))
+       (end-of-line)
+        (setq maxlength (+ maxlength (current-column)))
+        (setq numberofrounds (/ (- maxlength 89) 10))
+        (dotimes (roundcount-1 numberofrounds)
+         (setq offset (+ 98 (* roundcount-1 10)))
+         (beginning-of-line)
+         (forward-char offset)
+         (setq result (thing-at-point 'symbol))
+          (when (not (member result '(nil "nil" "-" "F" "H" "Z")))
+           (cond
+            ((string= result "1")(setq points (+ 1 points)))
+            ((string= result "+")(setq points (+ 1 points)))
+            ((string= result "=")(setq points (+ 0.5 points)))))))
       points)))
 
-
-(defun arbitools-get-player-performance (player &rest cutworst)
-  "Takes the player's rank as argument. Returns the performance of the player 
+(defun arbitools-get-player-performance (player)
+  "Take the player's rank as argument. Return the performance of the player
    in the tournament"
   ;; TODO for some reason, get-player-opponents gets cutworst at always true
   (save-excursion
-    (let* ((opponents         (arbitools-get-player-opponents player (car 
cutworst))) ;; get opponents
-          (points            (arbitools-get-player-played-points player)) ;; 
get points
+    (let* ((opponents         (arbitools-get-player-opponents player))
+          (points            (arbitools-get-player-played-points player))
           (discard           0.0) ;;points to discard
           (percentage        0.0)
           (diff              0)
@@ -1033,118 +1060,108 @@
           (numberofopponents 0))
       ;; discard points against discarded opponents
       (goto-char (point-min))
-      (while (re-search-forward "^001" nil t)
-       (let* ((linestring (thing-at-point 'line))
-              (maxlength 0)
-              (numberofrounds)
-              (roundcount 1)
-              (opp 000)
-              (offset 0)
-              (rankstring (substring-no-properties linestring 5 8))
-              (rank (string-to-number rankstring)))
-           
-           (when (= rank player)
-             (end-of-line)
-             (setq maxlength (+ maxlength (current-column)))
-             (setq numberofrounds (/ (- maxlength 89) 10))
-             (dotimes (number numberofrounds)
-               (setq offset (+ 94 (* (- roundcount 1) 10)))
-               (beginning-of-line)
-               (forward-char offset)
-               (setq opp (thing-at-point 'word))
-               (when (not (member opp opponents))
-                 
-                  (forward-char 4)
-                 (when (string= (thing-at-point 'symbol) "1")(setq discard (+ 
discard 1.0)))
-                 (when (string= (thing-at-point 'symbol) "=")(setq discard (+ 
discard 0.5))))
-               (setq roundcount (+ roundcount 1))))))
+      (let* ((maxlength 0)
+            (numberofrounds)
+            (opp 000)
+            (offset 0))
+
+       (re-search-forward (format "^001[[:space:]]\\{1,4\\}%d" player))
+       (end-of-line)
+       (setq maxlength (+ maxlength (current-column)))
+       (setq numberofrounds (/ (- maxlength 89) 10))
+       (dotimes (roundcount-1 numberofrounds)
+         (setq offset (+ 94 (* roundcount-1 10)))
+         (beginning-of-line)
+         (forward-char offset)
+         (setq opp (thing-at-point 'word))
+         (when (not (member opp opponents))
+
+            (forward-char 4)
+           (when (string= (thing-at-point 'symbol) "1")
+             (setq discard (+ discard 1.0)))
+           (when (string= (thing-at-point 'symbol) "+")
+             (setq discard (+ discard 1.0)))
+           (when (string= (thing-at-point 'symbol) "=")
+             (setq discard (+ discard 0.5))))))
+
       ;; loop over opponents and get their elo average
       (dolist (opponent opponents)
-       (let* ((rating (string-to-number (nth 2 (nth (- (string-to-number 
opponent) 1) arbitools-players-info)))))
-         (when (not (numberp rating)) (setq rating 1000))
-         (when (= rating 0) (setq rating 1000))
+       (let* ((rating (string-to-number (nth 2
+                                             (nth (- (string-to-number 
opponent) 1) arbitools-players-info)))))
+         (when (not rating) (setq rating arbitools-elo-floor))
+         (when (not (numberp rating)) (setq rating arbitools-elo-floor)) ;; 
floor rating here
+         (when (= rating 0) (setq rating arbitools-elo-floor)) ;; floor rating 
here
          (setq eloaverage (+ eloaverage rating))
-         (setq numberofopponents (+ numberofopponents 1)))
-                 
-       ;;(goto-char (point-min))                                               
        ;; old code
-       ;;(while (re-search-forward "^001" nil t)                               
        ;; old code
-       ;;  (let* ((linestring (thing-at-point 'line))                          
        ;; old code
-       ;;       (rankstring (substring-no-properties linestring 5 8))          
        ;; old code
-       ;;       (ratingstring (substring-no-properties linestring 48 52))      
        ;; old code
-       ;;       (rating (string-to-number ratingstring)))                      
        ;; old code
-        
-       ;;    (when (= (string-to-number rankstring) (string-to-number 
opponent))       ;; old code
-       ;;      (when (= rating 0)  (setq rating 1000))                         
        ;; old code
-       ;;      (when (not (numberp rating)) (setq rating 1000))                
        ;; old code
-       ;;      (setq eloaverage (+ eloaverage rating))                         
        ;; old code
-       ;;      (setq numberofopponents (+ numberofopponents 1)))))             
        ;; old code
-
-
-      )
+         (setq numberofopponents (+ numberofopponents 1))))
       ;; calculate performance
       (setq eloaverage (/ eloaverage numberofopponents))
       (setq points (- points discard))
       (setq percentage (/ points numberofopponents))
       (setq diff (nth (truncate (* 100 percentage)) 
arbitools-performancetable))
-      (when (and diff arbitools-verbose) (save-excursion (with-current-buffer 
"Arbitools-output" (insert (format "Correct! player %d eloaverage: %d points:%d 
numberofopponents:%d  percentage: %d cutworst:%s\n" player eloaverage points 
numberofopponents (* percentage 100) cutworst)))))
-      (when (not diff) (setq diff 0)
-           (save-excursion (with-current-buffer "Arbitools-output" (insert 
(format "Warning! player %d diff=0 eloaverage: %d points:%d 
numberofopponents:%d percentage: %d\n" player eloaverage points 
numberofopponents (* 100 percentage))))))
+      (setf (nth 3 (nth (- player 1) arbitools-players-info)) diff)
+      (when diff
+        (arbitools--verbose-output "Arbitools-output"
+          "Correct! player %d eloaverage: %d points:%f numberofopponents:%d  
percentage: %d\n"
+          player eloaverage points numberofopponents (* percentage 100))
+        (arbitools--verbose-output "Arbitools-output"
+          "Players's info player %s diff %d\n"
+          (nth 1 (nth (- player 1) arbitools-players-info)) diff))
+      (when (not diff)
+        (setq diff 0)
+       (with-current-buffer "Arbitools-output"
+          (insert (format "Warning! player %d diff=0 eloaverage: %d points:%d 
numberofopponents:%d percentage: %d\n" player eloaverage points 
numberofopponents (* 100 percentage)))))
       (setq performance (+ eloaverage diff))
-    performance)))
+      performance)))
 
-(defun arbitools-calculate-players-performance (&rest cutworst)
+
+
+(defun arbitools-calculate-players-performance ()
   "Calculates the performance for all the players in the tourmanent and writes 
them in a buffer,
    ordered by player rank."
   (save-excursion
-    (let*((performance 0.0)
-         (performances))
-      
-      (when arbitools-verbose (save-excursion (with-current-buffer "Players 
performance"
-                        (delete-region (point-min)(point-max))
-                        (insert "rank Name                           
Performance\n"))))
-       ;; Loop over players and calculate performances
-       (dotimes (iter (length arbitools-players-info))                         
       ;; test code
-       (let* ((rating (string-to-number (nth 2 (nth iter 
arbitools-players-info))))         ;; test code
-              (name (nth 1 (nth iter arbitools-players-info))))         ;; 
test code
-
-         (setq performance (arbitools-get-player-performance (+ iter 1) 
cutworst))          ;; test code  
-         (add-to-list 'performances performance)                               
            ;; test code
-         (when arbitools-verbose (save-excursion (with-current-buffer "Players 
performance" ;; test code
-            (goto-char (point-max))                                            
             ;; test code
-            (insert (format "%d %s %s\n" (+ iter 1)    name performance))))))) 
             ;; test code
-       
-      ;;(goto-char (point-min))
-      ;;(while (re-search-forward "^001" nil t)
-       ;;(let* ((linestring (thing-at-point 'line))
-       ;;       (rankstring (substring linestring 5 8))
-       ;;       (namestring (substring linestring 14 47))
-       ;;       (rank (string-to-number rankstring)))
-
-         ;;(setq performance (arbitools-get-player-performance rank cutworst))
-         ;;(add-to-list 'performances performance)    
-          ;;(when arbitools-verbose (save-excursion (with-current-buffer 
"Players performance"
-       ;;      (goto-char (point-max))
-       ;;      (insert (format "%s %s %s\n" rankstring namestring 
performance)))))))
-    performances)))
-
-(defun arbitools-calculate-arpo (&rest cutworst)
-  "Calculates the ARPO for all the players and writes the results to a buffer. 
+    (let* ((performance 0.0)
+          (performances))
+
+      (when arbitools-verbose
+        (with-current-buffer "Players performance"
+          ;; FIXME: can't use arbitools--verbose-output here because of this
+          ;; `delete-region'.
+         (delete-region (point-min)(point-max))
+         (insert "rank Name                           Performance\n")))
+      ;; Loop over players and calculate performances
+      (dotimes (iter (length arbitools-players-info))
+       (let* (;; (rating (string-to-number
+               ;;          (nth 2 (nth iter arbitools-players-info))))
+              (name (nth 1 (nth iter arbitools-players-info))))
+
+         (setq performance (arbitools-get-player-performance (+ iter 1)))
+         (push performance performances)
+         (when arbitools-verbose
+            (with-current-buffer "Players performance"
+              ;; FIXME: can't use arbitools--verbose-output here because of
+              ;; this `goto-char': is it really needed here?
+             (goto-char (point-max))
+             (insert (format "%d %s %s\n" (+ iter 1)   name performance))))))
+      performances)))
+
+(defun arbitools-calculate-arpo ()
+  "Calculates the ARPO for all the players and writes the results to a buffer.
    also it creates a userTB.txt buffer, so that it can be used in Vega."
   ;; TODO This algorythm is terribly inefficient, it should be improved
   (interactive)
-  (or cutworst (setq cutworst t)) ;; TODO allow to call the function with 
cutworst nil
-  (arbitools-fill-players-info)
+  
   (save-excursion
-    (let* ((iterand)
-          (iterand_1)
-          (converges nil)
-          (iterations 0)
-          (opponents)
-          (percentage 0.0)
-          (diff 0)
-          (points 0.0)
-          (discard 0.0)
-          (performances (reverse (arbitools-calculate-players-performance 
cutworst))) ;;calculate performances
+    (let* ((iterand              )
+          (iterand_1            )
+          (sumiterand           0.0)
+          (converges            nil)
+          (iterations           0)
+          (opponents            )
+          (percentage           0.0)
+          (diff                 0)
+          (points               0.0)
+          (discard              0.0)
+          (performances (reverse (arbitools-calculate-players-performance))) 
;;calculate performances
           (performancesopponents)
           (opponentsperformance 0.0)
           (averageperformanceofopponents 0.0)
@@ -1153,121 +1170,113 @@
           (continue t)
           numberofplayers
           numberofopponents)
-      
-        (setq iterand_1 performances)              ;; store performance list 
in iterand_1 for the first iteration
-        (setq numberofplayers (length performances))
-       (while continue                            ;; iterate performances 
until the check is true
-         (setq iterand iterand_1)                 ;; fill iterand with 
iterand_1
-         (setq iterand_1 nil)                     ;; reset iterand_1
-         (dotimes (number numberofplayers)        ;; loop the list of 
performances
-           (setq opponents (arbitools-get-player-opponents (+ number 1) 
cutworst)) ;; get opponents list
-           (setq numberofopponents (length opponents))
-
-            ;; get opponents performances from iterand list, store in a list. 
Reset performances list
-           (setq performancesopponents nil)
-           (setq averageperformanceofopponents 0.0)
-            (dolist (opponent opponents)           ;; loope the opponents of 
each player
-             (setq opponentsperformance (nth (- (string-to-number opponent) 1) 
iterand))
-             (setq averageperformanceofopponents (+ 
averageperformanceofopponents opponentsperformance))
-             (add-to-list 'performancesopponents opponentsperformance))
-
-           ;; calculate average of opponents performance + dp
-            (setq averageperformanceofopponents (/ 
averageperformanceofopponents numberofopponents))
-
-           ;; calculate points to discard (points against discarded opponents)
-           (setq discard 0.0)
-           (goto-char (point-min))
-            (while (re-search-forward "^001" nil t)
-             (let* ((linestring    (thing-at-point 'line))
-                   (maxlength      0)
-                   (numberofrounds)
-                   (roundcount     1)
-                   (opp            000)
-                   (offset         0)
-                   (rankstring     (substring linestring 5 8))
-                   (rank           (string-to-number rankstring)))
-           
-               (when (= rank (+ number 1))
-                   (end-of-line)
-                   (setq maxlength (+ maxlength (current-column)))
-                   (setq numberofrounds (/ (- maxlength 89) 10))
-                   (dotimes (number_1 numberofrounds)
-                     (setq offset (+ 94 (* (- roundcount 1) 10)))
-                     (beginning-of-line)
-                     (forward-char offset)
-                     (setq opp (thing-at-point 'word))
-                     (when (not (member opp opponents))
-                        (forward-char 4)
-                       (when (string= (thing-at-point 'symbol) "1")(setq 
discard (+ discard 1.0)))
-                       (when (string= (thing-at-point 'symbol) "=")(setq 
discard (+ discard 0.5))))
-                     (setq roundcount (+ roundcount 1))))))
-           
-            ;; calculate percentage of points
-           (setq points (arbitools-get-player-played-points (+ number 1)))
-           (setq points (- points discard))
-           (when (> (length opponents) 0) (setq percentage (/ points 
numberofopponents)))
-           (setq diff (nth (truncate (* 100 percentage)) 
arbitools-performancetable))
-           (setq averageperformanceofopponents (+ 
averageperformanceofopponents diff))
-           (when arbitools-verbose (save-excursion (with-current-buffer 
"Arbitools-output"
-                 (insert (format "Success! player %d run %d points %f discard 
%f opponents %d: %s percentage %f ARPO averageperformanceofopponents %f 
performances %s\n"
-                 (+ number 1) iterations points discard numberofopponents 
opponents percentage averageperformanceofopponents performancesopponents)))))
-     
-            (add-to-list 'iterand_1 averageperformanceofopponents)) ;; write 
the performance in iterand_1
-         
-         (setq iterand_1 (reverse iterand_1)) ;; reverse iterand_1
-         (setq differences nil)
-         
-         ;; write difference in a list to check for convergence
-         (dotimes (number numberofplayers)
-           (setq difference (- (nth number iterand) (nth number iterand_1)))
-           (add-to-list 'differences difference))
-         
-         ;; check if the model converges
-         (when (and (< (abs (- (nth 1 differences) (nth 0 differences))) 
0.009) ;; define here the value of epsilon
-                 (< (abs (- (nth (- numberofplayers 1) differences) (nth 0 
differences))) 0.001))
-           (setq converges t)) ;;improve this to check more members
-         
-         (setq iterations (+ iterations 1))
-         (when (or converges (= iterations 50)) (setq continue nil)))  ;; 
define here maximum number of iterations
-
-         ;; write a buffer with rank, name and the value from the last list 
obtained
-         (when arbitools-verbose (save-excursion (with-current-buffer 
"Arbitools-output"
-               (insert (format "difference: %f differences: %s converges: %s"
-                               (- (nth 1 differences) (nth 0 differences))
-                               differences converges)))))
-
-          ;; write the results in the corresponding buffer
-         (save-excursion (with-current-buffer "ARPO"
-                           (goto-char (point-min))
-                           (delete-region (point-min)(point-max))
-                           (insert "rank Name                           
ARPO\n")))
-         (save-excursion (with-current-buffer "UserTB.txt"
-                            (goto-char (point-min))
-                           (delete-region (point-min)(point-max))
-                           (insert "  User Tie-Break   ;")))
-
-          (dotimes (iter (length iterand_1))
-           (let* ((rating (string-to-number (nth 2 (nth iter 
arbitools-players-info))))
-                  (name (nth 1 (nth iter arbitools-players-info)))
-                  (arpo (nth iter iterand_1)))
-              (save-excursion (with-current-buffer "ARPO" (insert (format "%d 
%s %s\n" (+ iter 1) name arpo))))
-             (save-excursion (with-current-buffer "UserTB.txt" (insert (format 
"%s;" arpo))))))
-
-         
-         ;;(goto-char (point-min))                                             
   ;; old code
-         ;;(while (re-search-forward "^001" nil t)                             
   ;; old code
-         ;;  (let* ((linestring (thing-at-point 'line))                        
   ;; old code
-               ;;   (rankstring (substring-no-properties linestring 5 8))      
   ;; old code
-               ;;   (namestring (substring-no-properties linestring 14 47))    
   ;; old code
-               ;;   (rank (string-to-number rankstring))                       
   ;; old code
-               ;;   (arpo (nth (- rank 1) iterand_1)))                         
   ;; old code
-          ;;   (save-excursion (with-current-buffer "ARPO"                     
   ;; old code
-          ;;       (insert (format "%s %s %s\n" rankstring namestring arpo)))) 
   ;; old code
-           ;;   (save-excursion (with-current-buffer "UserTB.txt"              
    ;; old code
-           ;;       (insert (format "%s;" arpo))))))                           
    ;; old code
-
-
-         )))
+
+      (setq iterand_1 performances) ;; store performance list in iterand_1 for 
the first iteration
+      (setq numberofplayers (length performances))
+      (while continue ;; iterate performances until the check is true
+       (setq iterand iterand_1)               ;; fill iterand with iterand_1
+       (setq iterand_1 nil)                   ;; reset iterand_1
+       (setq sumiterand (apply #'+ iterand))  ;; sum elements in iterand
+       (arbitools--verbose-output "Arbitools-output"
+          "Starting run %d; iterand: %s sum_iterand: %d\n"
+         iterations iterand sumiterand)
+       (dotimes (number numberofplayers) ;; loop the list of performances
+         (setq opponents (arbitools-get-player-opponents (+ number 1)))
+         (setq numberofopponents (length opponents))
+
+          ;; get opponents performances from iterand list, store in a list. 
Reset performances list
+         (setq performancesopponents nil)
+         (setq averageperformanceofopponents 0.0)
+          (dolist (opponent opponents) ;; loop the opponents of each player
+           (setq opponentsperformance (nth (- (string-to-number opponent) 1) 
iterand))
+
+           (setq averageperformanceofopponents (+ 
averageperformanceofopponents opponentsperformance))
+
+           (push opponentsperformance performancesopponents))
+
+         ;; calculate average of opponents performance + dp
+          (setq averageperformanceofopponents (/ averageperformanceofopponents 
numberofopponents))
+
+         ;; calculate points to discard (points against discarded opponents)
+         (setq discard 0.0)
+         (goto-char (point-min))
+         (let* ((maxlength      0)
+                (numberofrounds)
+                (opp            000)
+                (offset         0))
+
+           (re-search-forward (format "^001[[:space:]]\\{1,4\\}%d" (+ number 
1)))
+           (end-of-line)
+           (setq maxlength (+ maxlength (current-column)))
+           (setq numberofrounds (/ (- maxlength 89) 10))
+           (dotimes (roundcount-1 numberofrounds)
+             (setq offset (+ 94 (* roundcount-1 10)))
+             (beginning-of-line)
+             (forward-char offset)
+             (setq opp (thing-at-point 'word))
+             (when (not (member opp opponents))
+                (forward-char 4)
+                (cond
+                ((member (thing-at-point 'symbol) '("1" "+" "F"))
+                  (setq discard (+ discard 1.0)))
+                ((member (thing-at-point 'symbol) '("H" "="))
+                  (setq discard (+ discard 0.5)))))))
+
+          ;; calculate percentage of points
+         (setq points (arbitools-get-player-played-points (+ number 1)))
+         (setq points (- points discard))
+         (when (> (length opponents) 0) (setq percentage (/ points 
numberofopponents)))
+         (setq diff (arbitools-get-player-ci (+ number 1)))
+         (setq averageperformanceofopponents (+ averageperformanceofopponents 
diff))
+         (arbitools--verbose-output "Arbitools-output" " c %d----\n" diff)
+
+         (arbitools--verbose-output "Arbitools-output"
+           "Success! player %d run %d points %f discard %f opponents %d: %s 
percentage %f ARPO averageperformanceofopponents %f performances %s diff %d\n"
+           (+ number 1) iterations points discard numberofopponents opponents 
percentage averageperformanceofopponents performancesopponents diff)
+
+         (push averageperformanceofopponents iterand_1))
+
+       (setq iterand_1 (reverse iterand_1)) ;; reverse iterand_1
+       (setq differences nil)
+
+       ;; write difference in a list to check for convergence
+       (dotimes (number numberofplayers)
+         (setq difference (- (nth number iterand) (nth number iterand_1)))
+         (push difference differences))
+
+       ;; check if the model converges
+       ;;(when (and (< (abs (- (nth 1 differences) (nth 0 differences))) 
0.0000000001) ;; define here the value of epsilon
+       ;;         (< (abs (- (nth (- numberofplayers 1) differences) (nth 0 
differences))) 0.0000000001))
+       ;;  (setq converges t)) ;; TODO: improve this to check more members
+       (when (< (- (seq-max differences)(seq-min differences)) 0.0000000001)
+         (setq converges t))
+
+       (setq iterations (+ iterations 1))
+       (when (or converges (= iterations 300)) (setq continue nil))) ;; define 
here maximum number of iterations
+
+      ;; write a buffer with rank, name and the value from the last list 
obtained
+      (arbitools--verbose-output "Arbitools-output"
+       "difference: %f differences: %s converges: %s"
+       (- (nth 1 differences) (nth 0 differences))
+       differences converges)
+
+      ;; write the results in the corresponding buffer
+      (with-current-buffer "ARPO"
+       (goto-char (point-min))
+       (delete-region (point-min)(point-max))
+       (insert "rank Name                           ARPO\n"))
+      (with-current-buffer "userTB.txt"
+        (goto-char (point-min))
+       (delete-region (point-min)(point-max))
+       (insert "  User Tie-Break   ;"))
+
+      (dotimes (iter (length iterand_1))
+       (let* ((name (nth 1 (nth iter arbitools-players-info)))
+              (arpo (nth iter iterand_1)))
+          (with-current-buffer "ARPO"
+            (insert (format "%d %s %s\n" (+ iter 1) name arpo)))
+         (with-current-buffer "userTB.txt"
+            (insert (format "%s;" arpo))))))))
 
 (defun arbitools-it3 ()
    "Get the IT3 tournament report. You will get a .tex file, and a pdf
@@ -1386,21 +1395,23 @@
   "Arbitools"
   "Major mode for Chess Tournament Management."
   ;(setq font-lock-defaults '(arbitools-highlights))
-  (use-local-map arbitools-mode-map)
-  (generate-new-buffer "Arbitools-output")
-  (generate-new-buffer "List of players")
-  (generate-new-buffer "Pairings List")
-  (generate-new-buffer "Standings")
-  (generate-new-buffer "Pairings-output")
-  (generate-new-buffer "Players performance")
-  (generate-new-buffer "ARPO")
-  (generate-new-buffer "UserTB.txt")
+  
+  (get-buffer-create "Arbitools-output")
+  (get-buffer-create "List of players")
+  (get-buffer-create "Pairings List")
+  (get-buffer-create "Standings")
+  (get-buffer-create "Pairings-output")
+  (get-buffer-create "Players performance")
+  (get-buffer-create "ARPO")
+  (get-buffer-create "userTB.txt")
   (column-number-mode)
+  (arbitools-fill-players-info)
   (set (make-local-variable 'font-lock-defaults) '(arbitools-highlights)))
 
 ;;;###autoload
 (add-to-list 'auto-mode-alist '("\\.trf?\\'" . arbitools-mode))
 
+
 (provide 'arbitools)
 
 ;;; arbitools.el ends here
diff --git a/packages/avy/Makefile b/packages/avy/Makefile
index 9303c7c..430da88 100644
--- a/packages/avy/Makefile
+++ b/packages/avy/Makefile
@@ -3,13 +3,16 @@ emacs ?= emacs
 
 LOAD = -l avy.el -l avy-test.el
 
-.PHONY: all test clean
+.PHONY: all test clean checkdoc
 
-all: compile test
+all: compile test checkdoc
 
 test:
        $(emacs) -batch $(LOAD) -f ert-run-tests-batch-and-exit
 
+checkdoc:
+       $(emacs) -batch -l targets/checkdoc.el
+
 compile:
        $(emacs) -batch -l targets/avy-init.el
 
diff --git a/packages/avy/README.md b/packages/avy/README.md
index 9df0ce2..76455de 100644
--- a/packages/avy/README.md
+++ b/packages/avy/README.md
@@ -1,3 +1,6 @@
+[![MELPA](https://melpa.org/packages/avy-badge.svg)](https://melpa.org/#/avy)
+[![MELPA 
Stable](https://stable.melpa.org/packages/avy-badge.svg)](https://stable.melpa.org/#/avy)
+
 ## Introduction
 
 `avy` is a GNU Emacs package for jumping to visible text using a char-based 
decision tree.  See also 
[ace-jump-mode](https://github.com/winterTTr/ace-jump-mode) and 
[vim-easymotion](https://github.com/Lokaltog/vim-easymotion) - `avy` uses the 
same idea.
@@ -34,6 +37,13 @@ After <kbd>C-' bu</kbd>:
 
 ![avy-goto-char-2](http://oremacs.com/download/avi-goto-char-2.png)
 
+### `avy-goto-char-timer`
+
+> Input an arbitrary amount of consecutive chars, jump to the first one with a 
tree.
+
+This is a more flexible version of `avy-goto-char-2`. First part works 
similarly to `isearch`: you type a query and it's highlighted dynamically on 
the screen.  When you stop typing for `avy-timeout-seconds` (0.5s by default), 
you'll be able to select one of the candidates with `avy`. As you're inputting 
characters, you can use `C-h` (backspace) or `DEL` (delete) to
+forget the last typed character and `RET` to end the input sequence 
immediately and select a candidate.
+
 ### `avy-goto-line`
 
 > Input zero chars, jump to a line start with a tree.
@@ -74,6 +84,10 @@ After <kbd>M-g e</kbd>:
 
 ![avy-goto-word-0](http://oremacs.com/download/avi-goto-word-0.png)
 
+### Org-mode commands
+
+  * `avy-org-goto-heading-timer`: Type part of an Org heading.  When you stop 
typing, if only one heading on the screen matches, it will be jumped to; if 
more than one matches, you can jump to a heading with Avy.  This is like 
`avy-goto-char-timer` but for Org headings.
+  * `avy-org-refile-as-child`: With point in an entry you want to refile, run 
this command, select a heading with Avy, and the entry will be refiled as its 
first child heading.  This makes it quick and easy to refile to headings that 
are visible on-screen, even to other windows or buffers.
 
 ### Other commands
 
@@ -85,6 +99,7 @@ You add this to your config to bind some stuff:
 
 ```elisp
 (avy-setup-default)
+(global-set-key (kbd "C-c C-j") 'avy-resume)
 ```
 
 It will bind, for example, `avy-isearch` to <kbd>C-'</kbd> in 
`isearch-mode-map`, so that you can select one of the currently visible 
`isearch` candidates using `avy`.
@@ -107,6 +122,6 @@ The copyright assignment isn't a big deal, it just says 
that the copyright for y
 
 The basic code style guide is to use `(setq indent-tabs-mode nil)`. It is 
provided for you in 
[.dir-locals.el](https://github.com/abo-abo/avy/blob/master/.dir-locals.el), 
please obey it.
 
-Before submitting the change, run `make compile` and `make test` to make sure 
that it doesn't introduce new compile warnings or test failures. Also run 
<kbd>M-x</kbd> `checkdoc` to see that your changes obey the documentation 
guidelines.
+Before submitting the change, run `make compile` and `make test` to make sure 
that it doesn't introduce new compile warnings or test failures. Also run `make 
checkdoc` to see that your changes obey the documentation guidelines.
 
 Use your own judgment for the commit messages, I recommend a verbose style 
using `magit-commit-add-log`.
diff --git a/packages/avy/avy-test.el b/packages/avy/avy-test.el
index 339d8a0..bb03599 100644
--- a/packages/avy/avy-test.el
+++ b/packages/avy/avy-test.el
@@ -66,3 +66,7 @@
       (108 (97 leaf . 8)
        (115 leaf . 9)
        (100 leaf . 10))))))
+
+(provide 'avy-test)
+
+;;; avy-test.el ends here
diff --git a/packages/avy/avy.el b/packages/avy/avy.el
index 593dbb0..8b258da 100644
--- a/packages/avy/avy.el
+++ b/packages/avy/avy.el
@@ -1,10 +1,10 @@
-;;; avy.el --- tree-based completion -*- lexical-binding: t -*-
+;;; avy.el --- Jump to arbitrary positions in visible text and select text 
quickly. -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015  Free Software Foundation, Inc.
+;; Copyright (C) 2015-2019  Free Software Foundation, Inc.
 
 ;; Author: Oleh Krehel <address@hidden>
 ;; URL: https://github.com/abo-abo/avy
-;; Version: 0.4.0
+;; Version: 0.5.0
 ;; Package-Requires: ((emacs "24.1") (cl-lib "0.5"))
 ;; Keywords: point, location
 
@@ -25,15 +25,23 @@
 
 ;;; Commentary:
 ;;
-;; This package provides a generic completion method based on building
-;; a balanced decision tree with each candidate being a leaf.  To
-;; traverse the tree from the root to a desired leaf, typically a
-;; sequence of `read-key' can be used.
+;; With Avy, you can move point to any position in Emacs – even in a
+;; different window – using very few keystrokes. For this, you look at
+;; the position where you want point to be, invoke Avy, and then enter
+;; the sequence of characters displayed at that position.
 ;;
-;; In order for `read-key' to make sense, the tree needs to be
-;; visualized appropriately, with a character at each branch node.  So
-;; this completion method works only for things that you can see on
-;; your screen, all at once:
+;; If the position you want to jump to can be determined after only
+;; issuing a single keystroke, point is moved to the desired position
+;; immediately after that keystroke. In case this isn't possible, the
+;; sequence of keystrokes you need to enter is comprised of more than
+;; one character. Avy uses a decision tree where each candidate position
+;; is a leaf and each edge is described by a character which is distinct
+;; per level of the tree. By entering those characters, you navigate the
+;; tree, quickly arriving at the desired candidate position, such that
+;; Avy can move point to it.
+;;
+;; Note that this only makes sense for positions you are able to see
+;; when invoking Avy. These kinds of positions are supported:
 ;;
 ;; * character positions
 ;; * word or subword start positions
@@ -62,27 +70,80 @@ key (letters, digits, punctuation, etc.) or a symbol 
denoting a
 non-printing key like an arrow key (left, right, up, down).  For
 non-printing keys, a corresponding entry in
 `avy-key-to-char-alist' must exist in order to visualize the key
-in the avy overlays."
-  :type '(repeat :tag "Keys" (choice (character :tag "char")
+in the avy overlays.
+
+If `avy-style' is set to words, make sure there are at least three
+keys different than the following: a, e, i, o, u, y"
+  :type '(repeat :tag "Keys" (choice
+                              (character :tag "char")
                               (symbol :tag "non-printing key"))))
 
+(defconst avy--key-type
+  '(choice :tag "Command"
+    (const avy-goto-char)
+    (const avy-goto-char-2)
+    (const avy-isearch)
+    (const avy-goto-line)
+    (const avy-goto-subword-0)
+    (const avy-goto-subword-1)
+    (const avy-goto-word-0)
+    (const avy-goto-word-1)
+    (const avy-copy-line)
+    (const avy-copy-region)
+    (const avy-move-line)
+    (const avy-move-region)
+    (const avy-kill-whole-line)
+    (const avy-kill-region)
+    (const avy-kill-ring-save-whole-line)
+    (const avy-kill-ring-save-region)
+    (function :tag "Other command")))
+
 (defcustom avy-keys-alist nil
   "Alist of avy-jump commands to `avy-keys' overriding the default `avy-keys'."
-  :type '(alist
-          :key-type (choice :tag "Command"
-                     (const avy-goto-char)
-                     (const avy-goto-char-2)
-                     (const avy-isearch)
-                     (const avy-goto-line)
-                     (const avy-goto-subword-0)
-                     (const avy-goto-subword-1)
-                     (const avy-goto-word-0)
-                     (const avy-goto-word-1)
-                     (const avy-copy-line)
-                     (const avy-copy-region)
-                     (const avy-move-line))
+  :type `(alist
+          :key-type ,avy--key-type
           :value-type (repeat :tag "Keys" character)))
 
+(defcustom avy-orders-alist '((avy-goto-char . avy-order-closest))
+  "Alist of candidate ordering functions.
+Usually, candidates appear in their point position order."
+  :type `(alist
+          :key-type ,avy--key-type
+          :value-type function))
+
+(defcustom avy-words
+  '("am" "by" "if" "is" "it" "my" "ox" "up"
+    "ace" "act" "add" "age" "ago" "aim" "air" "ale" "all" "and" "ant" "any"
+    "ape" "apt" "arc" "are" "arm" "art" "ash" "ate" "awe" "axe" "bad" "bag"
+    "ban" "bar" "bat" "bay" "bed" "bee" "beg" "bet" "bid" "big" "bit" "bob"
+    "bot" "bow" "box" "boy" "but" "cab" "can" "cap" "car" "cat" "cog" "cop"
+    "cow" "cry" "cup" "cut" "day" "dew" "did" "die" "dig" "dim" "dip" "dog"
+    "dot" "dry" "dub" "dug" "dye" "ear" "eat" "eel" "egg" "ego" "elf" "eve"
+    "eye" "fan" "far" "fat" "fax" "fee" "few" "fin" "fit" "fix" "flu" "fly"
+    "foe" "fog" "for" "fox" "fry" "fun" "fur" "gag" "gap" "gas" "gel" "gem"
+    "get" "gig" "gin" "gnu" "god" "got" "gum" "gun" "gut" "guy" "gym" "had"
+    "hag" "ham" "has" "hat" "her" "hid" "him" "hip" "his" "hit" "hop" "hot"
+    "how" "hub" "hue" "hug" "hut" "ice" "icy" "imp" "ink" "inn" "ion" "ire"
+    "ivy" "jab" "jam" "jar" "jaw" "jet" "job" "jog" "joy" "key" "kid" "kit"
+    "lag" "lap" "lay" "let" "lid" "lie" "lip" "lit" "lob" "log" "lot" "low"
+    "mad" "man" "map" "mat" "may" "men" "met" "mix" "mob" "mop" "mud" "mug"
+    "nag" "nap" "new" "nil" "nod" "nor" "not" "now" "nun" "oak" "odd" "off"
+    "oil" "old" "one" "orb" "ore" "ork" "our" "out" "owl" "own" "pad" "pan"
+    "par" "pat" "paw" "pay" "pea" "pen" "pet" "pig" "pin" "pit" "pod" "pot"
+    "pry" "pub" "pun" "put" "rag" "ram" "ran" "rat" "raw" "ray" "red" "rib"
+    "rim" "rip" "rob" "rod" "rot" "row" "rub" "rug" "rum" "run" "sad" "sat"
+    "saw" "say" "sea" "see" "sew" "she" "shy" "sin" "sip" "sit" "six" "ski"
+    "sky" "sly" "sob" "son" "soy" "spy" "sum" "sun" "tab" "tad" "tag" "tan"
+    "tap" "tar" "tax" "tea" "the" "tie" "tin" "tip" "toe" "ton" "too" "top"
+    "toy" "try" "tub" "two" "urn" "use" "van" "war" "was" "wax" "way" "web"
+    "wed" "wet" "who" "why" "wig" "win" "wit" "woe" "won" "wry" "you" "zap"
+    "zip" "zoo")
+  "Words to use in case `avy-style' is set to `words'.
+Every word should contain at least one vowel i.e. one of the following
+characters: a, e, i, o, u, y
+They do not have to be sorted but no word should be a prefix of another one."
+  :type '(repeat string))
+
 (defcustom avy-style 'at-full
   "The default method of displaying the overlays.
 Use `avy-styles-alist' to customize this per-command."
@@ -91,7 +152,8 @@ Use `avy-styles-alist' to customize this per-command."
           (const :tag "At" at)
           (const :tag "At Full" at-full)
           (const :tag "Post" post)
-          (const :tag "De Bruijn" de-bruijn)))
+          (const :tag "De Bruijn" de-bruijn)
+          (const :tag "Words" words)))
 
 (defcustom avy-styles-alist nil
   "Alist of avy-jump commands to the style for each command.
@@ -108,18 +170,30 @@ If the commands isn't on the list, `avy-style' is used."
                      (const avy-goto-word-1)
                      (const avy-copy-line)
                      (const avy-copy-region)
-                     (const avy-move-line))
+                     (const avy-move-line)
+                     (const avy-move-region)
+                     (const avy-kill-whole-line)
+                     (const avy-kill-region)
+                     (const avy-kill-ring-save-whole-line)
+                     (const avy-kill-ring-save-region)
+                     (function :tag "Other command"))
           :value-type (choice
                        (const :tag "Pre" pre)
                        (const :tag "At" at)
                        (const :tag "At Full" at-full)
                        (const :tag "Post" post)
-                       (const :tag "De Bruijn" de-bruijn))))
+                       (const :tag "De Bruijn" de-bruijn)
+                       (const :tag "Words" words))))
 
 (defcustom avy-dispatch-alist
-  '((?x . avy-action-kill)
+  '((?x . avy-action-kill-move)
+    (?X . avy-action-kill-stay)
+    (?t . avy-action-teleport)
     (?m . avy-action-mark)
-    (?n . avy-action-copy))
+    (?n . avy-action-copy)
+    (?y . avy-action-yank)
+    (?i . avy-action-ispell)
+    (?z . avy-action-zap-to-char))
   "List of actions for `avy-handler-default'.
 
 Each item is (KEY . ACTION).  When KEY not on `avy-keys' is
@@ -131,7 +205,8 @@ pressed during the dispatch, ACTION is set to replace the 
default
     :value-type (choice
                  (const :tag "Mark" avy-action-mark)
                  (const :tag "Copy" avy-action-copy)
-                 (const :tag "Kill" avy-action-kill))))
+                 (const :tag "Kill and move point" avy-action-kill-move)
+                 (const :tag "Kill" avy-action-kill-stay))))
 
 (defcustom avy-background nil
   "When non-nil, a gray background will be added during the selection."
@@ -156,9 +231,31 @@ When nil, punctuation chars will not be matched.
 \"[!-/:-@[-\\=`{-~]\" will match all printable punctuation chars."
   :type 'regexp)
 
+(defcustom avy-goto-word-0-regexp "\\b\\sw"
+  "Regexp that determines positions for `avy-goto-word-0'."
+  :type '(choice
+          (const :tag "Default" "\\b\\sw")
+          (const :tag "Symbol" "\\_<\\(\\sw\\|\\s_\\)")
+          (const :tag "Not whitespace" "[^ \r\n\t]+")
+          (regexp :tag "Regex")))
+
 (defcustom avy-ignored-modes '(image-mode doc-view-mode pdf-view-mode)
   "List of modes to ignore when searching for candidates.
-Typically, these modes don't use the text representation.")
+Typically, these modes don't use the text representation."
+  :type 'list)
+
+(defcustom avy-single-candidate-jump t
+  "In case there is only one candidate jumps directly to it."
+  :type 'boolean)
+
+(defcustom avy-del-last-char-by '(8 127)
+  "List of event types, i.e. key presses, that delete the last
+character read.  The default represents `C-h' and `DEL'.  See
+`event-convert-list'."
+  :type 'list)
+
+(defvar avy-ring (make-ring 20)
+  "Hold the window and point history.")
 
 (defvar avy-translate-char-function #'identity
   "Function to translate user input key into another key.
@@ -225,16 +322,16 @@ self-inserting keys and thus aren't read as characters.")
          (a (make-list (* n k) 0))
          sequence)
     (cl-labels ((db (T p)
-                    (if (> T n)
-                        (if (eq (% n p) 0)
-                            (setq sequence
-                                  (append sequence
-                                          (cl-subseq a 1 (1+ p)))))
-                      (setf (nth T a) (nth (- T p) a))
-                      (db (1+ T) p)
-                      (cl-loop for j from (1+ (nth (- T p) a)) to (1- k) do
-                               (setf (nth T a) j)
-                               (db (1+ T) T)))))
+                  (if (> T n)
+                      (if (eq (% n p) 0)
+                          (setq sequence
+                                (append sequence
+                                        (cl-subseq a 1 (1+ p)))))
+                    (setf (nth T a) (nth (- T p) a))
+                    (db (1+ T) p)
+                    (cl-loop for j from (1+ (nth (- T p) a)) to (1- k) do
+                         (setf (nth T a) j)
+                         (db (1+ T) T)))))
       (db 1 1)
       (mapcar (lambda (n)
                 (nth n keys))
@@ -268,9 +365,10 @@ SEQ-LEN is how many elements of KEYS it takes to identify 
a match."
                            (when (and (> diff 0) (< diff seq-len))
                              (while (and (nth (1- seq-len) db-seq)
                                          (not
-                                          (eq 0 (cl-search
-                                                 (cl-subseq prev-seq diff)
-                                                 (cl-subseq db-seq 0 
seq-len)))))
+                                          (eq 0
+                                              (cl-search
+                                               (cl-subseq prev-seq diff)
+                                               (cl-subseq db-seq 0 seq-len)))))
                                (pop db-seq)))
                            (subseq-and-pop))
                        (subseq-and-pop))))
@@ -284,11 +382,22 @@ SEQ-LEN is how many elements of KEYS it takes to identify 
a match."
                   lst (cdr lst))))))
     (nreverse path-alist)))
 
+(defun avy-order-closest (x)
+  (abs (- (caar x) (point))))
+
+(defvar avy-command nil
+  "Store the current command symbol.
+E.g. 'avy-goto-line or 'avy-goto-char.")
+
 (defun avy-tree (lst keys)
   "Coerce LST into a balanced tree.
 The degree of the tree is the length of KEYS.
 KEYS are placed appropriately on internal nodes."
-  (let ((len (length keys)))
+  (let* ((len (length keys))
+         (order-fn (cdr (assq avy-command avy-orders-alist)))
+         (lst (if order-fn
+                  (cl-sort lst #'< :key order-fn)
+                lst)))
     (cl-labels
         ((rd (ls)
            (let ((ln (length ls)))
@@ -341,12 +450,33 @@ KEYS is the path from the root of `avy-tree' to LEAF."
 (defun avy-handler-default (char)
   "The default handler for a bad CHAR."
   (let (dispatch)
-    (if (setq dispatch (assoc char avy-dispatch-alist))
-        (progn
-          (setq avy-action (cdr dispatch))
-          (throw 'done 'restart))
-      (signal 'user-error (list "No such candidate" char))
-      (throw 'done nil))))
+    (cond ((setq dispatch (assoc char avy-dispatch-alist))
+           (setq avy-action (cdr dispatch))
+           (throw 'done 'restart))
+          ((memq char '(27 ?\C-g))
+           ;; exit silently
+           (throw 'done 'exit))
+          ((eq char ??)
+           (avy-show-dispatch-help)
+           (throw 'done 'restart))
+          ((mouse-event-p char)
+           (signal 'user-error (list "Mouse event not handled" char)))
+          (t
+           (message "No such candidate: %s, hit `C-g' to quit."
+                    (if (characterp char) (string char) char))))))
+
+(defun avy-show-dispatch-help ()
+  "Display action shortucts in echo area."
+  (let ((len (length "avy-action-")))
+    (message "%s" (mapconcat
+                   (lambda (x)
+                     (format "%s: %s"
+                             (propertize
+                              (char-to-string (car x))
+                              'face 'aw-key-face)
+                             (substring (symbol-name (cdr x)) len)))
+                   avy-dispatch-alist
+                   " "))))
 
 (defvar avy-handler-function 'avy-handler-default
   "A function to call for a bad `read-key' in `avy-read'.")
@@ -354,15 +484,25 @@ KEYS is the path from the root of `avy-tree' to LEAF."
 (defvar avy-current-path ""
   "Store the current incomplete path during `avy-read'.")
 
+(defun avy-mouse-event-window (char)
+  "If CHAR is a mouse event, return the window of the event if any or the 
selected window.
+Return nil if not a mouse event."
+  (when (mouse-event-p char)
+    (cond ((windowp (posn-window (event-start char)))
+           (posn-window (event-start char)))
+          ((framep (posn-window (event-start char)))
+           (frame-selected-window (posn-window (event-start char))))
+          (t (selected-window)))))
+
 (defun avy-read (tree display-fn cleanup-fn)
-  "Select a leaf from TREE using consecutive `read-char'.
+  "Select a leaf from TREE using consecutive `read-key'.
 
 DISPLAY-FN should take CHAR and LEAF and signify that LEAFs
 associated with CHAR will be selected if CHAR is pressed.  This is
 commonly done by adding a CHAR overlay at LEAF position.
 
 CLEANUP-FN should take no arguments and remove the effects of
-multiple DISPLAY-FN invokations."
+multiple DISPLAY-FN invocations."
   (catch 'done
     (setq avy-current-path "")
     (while tree
@@ -373,14 +513,19 @@ multiple DISPLAY-FN invokations."
         (dolist (x avy--leafs)
           (funcall display-fn (car x) (cdr x))))
       (let ((char (funcall avy-translate-char-function (read-key)))
+            window
             branch)
         (funcall cleanup-fn)
-        (if (setq branch (assoc char tree))
-            (if (eq (car (setq tree (cdr branch))) 'leaf)
-                (throw 'done (cdr tree))
-              (setq avy-current-path
-                    (concat avy-current-path (string (avy--key-to-char 
char)))))
-          (funcall avy-handler-function char))))))
+        (if (setq window (avy-mouse-event-window char))
+            (throw 'done (cons char window))
+          ;; Ensure avy-current-path stores the full path prior to
+          ;; exit so other packages can utilize its value.
+          (setq avy-current-path
+                (concat avy-current-path (string (avy--key-to-char char))))
+          (if (setq branch (assoc char tree))
+              (if (eq (car (setq tree (cdr branch))) 'leaf)
+                  (throw 'done (cdr tree)))
+            (funcall avy-handler-function char)))))))
 
 (defun avy-read-de-bruijn (lst keys)
   "Select from LST dispatching on KEYS."
@@ -417,6 +562,56 @@ multiple DISPLAY-FN invokations."
               (funcall avy-handler-function char))))
         (cdar alist)))))
 
+(defun avy-read-words (lst words)
+  "Select from LST using WORDS."
+  (catch 'done
+    (let ((num-words (length words))
+          (num-entries (length lst))
+          alist)
+      ;; If there are not enough words to cover all the candidates,
+      ;; we use a De Bruijn sequence to generate the remaining ones.
+      (when (< num-words num-entries)
+        (let ((keys avy-keys)
+              (bad-keys '(?a ?e ?i ?o ?u ?y))
+              (path-len 1)
+              (num-remaining (- num-entries num-words))
+              tmp-alist)
+          ;; Delete all keys which could lead to duplicates.
+          ;; We want at least three keys left to work with.
+          (dolist (x bad-keys)
+            (when (memq x keys)
+              (setq keys (delq ?a keys))))
+          (when (< (length keys) 3)
+            (signal 'user-error
+                    '("Please add more keys to the variable `avy-keys'.")))
+          ;; Generate the sequence and add the keys to the existing words.
+          (while (not tmp-alist)
+            (cl-incf path-len)
+            (setq tmp-alist (avy--path-alist-1 lst path-len keys)))
+          (while (>= (cl-decf num-remaining) 0)
+            (push (mapconcat 'string (caar tmp-alist) nil) (cdr (last words)))
+            (setq tmp-alist (cdr tmp-alist)))))
+      (dolist (x lst)
+        (push (cons (string-to-list (pop words)) x) alist))
+      (setq avy-current-path "")
+      (while (or (> (length alist) 1)
+                 (caar alist))
+        (dolist (x (reverse alist))
+          (avy--overlay-at-full (reverse (car x)) (cdr x)))
+        (let ((char (funcall avy-translate-char-function (read-key))))
+          (avy--remove-leading-chars)
+          (setq alist
+                (delq nil
+                      (mapcar (lambda (x)
+                                (when (eq (caar x) char)
+                                  (cons (cdr (car x)) (cdr x))))
+                              alist)))
+          (setq avy-current-path
+                (concat avy-current-path (string (avy--key-to-char char))))
+          (unless alist
+            (funcall avy-handler-function char))))
+      (cdar alist))))
+
 ;;** Rest
 (defun avy-window-list ()
   "Return a list of windows depending on `avy-all-windows'."
@@ -432,9 +627,10 @@ multiple DISPLAY-FN invokations."
         (t
          (error "Unrecognized option: %S" avy-all-windows))))
 
-(defcustom avy-all-windows-alt t
+(defcustom avy-all-windows-alt nil
   "The alternative `avy-all-windows' for use with \\[universal-argument]."
   :type '(choice
+          (const :tag "Current window" nil)
           (const :tag "All windows on the current frame" t)
           (const :tag "All windows on all frames" all-frames)))
 
@@ -450,6 +646,11 @@ multiple DISPLAY-FN invokations."
          (unless (memq major-mode avy-ignored-modes)
            ,@body)))))
 
+(defun avy-resume ()
+  "Stub to hold last avy command.
+Commands using `avy-with' macro can be resumed."
+  (interactive))
+
 (defmacro avy-with (command &rest body)
   "Set `avy-keys' according to COMMAND and execute BODY.
 Set `avy-style' according to COMMMAND as well."
@@ -458,82 +659,218 @@ Set `avy-style' according to COMMMAND as well."
   `(let ((avy-keys (or (cdr (assq ',command avy-keys-alist))
                        avy-keys))
          (avy-style (or (cdr (assq ',command avy-styles-alist))
-                        avy-style)))
+                        avy-style))
+         (avy-command ',command))
      (setq avy-action nil)
+     (setf (symbol-function 'avy-resume)
+           (lambda ()
+             (interactive)
+             ,@body))
      ,@body))
 
 (defun avy-action-goto (pt)
   "Goto PT."
-  (goto-char pt))
+  (let ((frame (window-frame (selected-window))))
+    (unless (equal frame (selected-frame))
+      (select-frame-set-input-focus frame)
+      (raise-frame frame))
+    (goto-char pt)))
+
+(defun avy-forward-item ()
+  (if (eq avy-command 'avy-goto-line)
+      (end-of-line)
+    (forward-sexp))
+  (point))
 
 (defun avy-action-mark (pt)
   "Mark sexp at PT."
   (goto-char pt)
   (set-mark (point))
-  (forward-sexp))
+  (avy-forward-item))
 
 (defun avy-action-copy (pt)
   "Copy sexp starting on PT."
   (save-excursion
     (let (str)
       (goto-char pt)
-      (forward-sexp)
+      (avy-forward-item)
       (setq str (buffer-substring pt (point)))
       (kill-new str)
-      (message "Copied: %s" str))))
-
-(defun avy-action-kill (pt)
-  "Kill sexp at PT."
+      (message "Copied: %s" str)))
+  (let ((dat (ring-ref avy-ring 0)))
+    (select-frame-set-input-focus
+     (window-frame (cdr dat)))
+    (select-window (cdr dat))
+    (goto-char (car dat))))
+
+(defun avy-action-yank (pt)
+  "Yank sexp starting at PT at the current point."
+  (avy-action-copy pt)
+  (yank)
+  t)
+
+(defun avy-action-kill-move (pt)
+  "Kill sexp at PT and move there."
   (goto-char pt)
-  (forward-sexp)
+  (avy-forward-item)
   (kill-region pt (point))
-  (message "Killed: %s" (current-kill 0)))
+  (message "Killed: %s" (current-kill 0))
+  (point))
 
-(defun avy--process (candidates overlay-fn)
+(defun avy-action-kill-stay (pt)
+  "Kill sexp at PT."
+  (save-excursion
+    (goto-char pt)
+    (avy-forward-item)
+    (kill-region pt (point))
+    (just-one-space))
+  (message "Killed: %s" (current-kill 0))
+  (select-window
+   (cdr
+    (ring-ref avy-ring 0)))
+  t)
+
+(defun avy-action-zap-to-char (pt)
+  "Kill from point up to PT."
+  (if (> pt (point))
+      (kill-region (point) pt)
+    (kill-region pt (point))))
+
+(defun avy-action-teleport (pt)
+  "Kill sexp starting on PT and yank into the current location."
+  (avy-action-kill-stay pt)
+  (select-window
+   (cdr
+    (ring-ref avy-ring 0)))
+  (save-excursion
+    (yank))
+  t)
+
+(declare-function flyspell-correct-word-before-point "flyspell")
+
+(defun avy-action-ispell (pt)
+  "Auto correct word at PT."
+  (save-excursion
+    (goto-char pt)
+    (cond
+      ((eq avy-command 'avy-goto-line)
+       (ispell-region
+        (line-beginning-position)
+        (line-end-position)))
+      ((bound-and-true-p flyspell-mode)
+       (flyspell-correct-word-before-point))
+      ((looking-at-p "\\b")
+       (ispell-word))
+      (t
+       (progn
+         (backward-word)
+         (when (looking-at-p "\\b")
+           (ispell-word)))))))
+
+(defvar avy-pre-action #'avy-pre-action-default
+  "Function to call before `avy-action' is called.")
+
+(defun avy-pre-action-default (res)
+  (avy-push-mark)
+  (when (and (consp res)
+             (windowp (cdr res)))
+    (let* ((window (cdr res))
+           (frame (window-frame window)))
+      (unless (equal frame (selected-frame))
+        (select-frame-set-input-focus frame))
+      (select-window window))))
+
+(defun avy--process-1 (candidates overlay-fn &optional cleanup-fn)
+  (let ((len (length candidates)))
+    (cond ((= len 0)
+           nil)
+          ((and (= len 1) avy-single-candidate-jump)
+           (car candidates))
+          (t
+           (unwind-protect
+                (progn
+                  (avy--make-backgrounds
+                   (avy-window-list))
+                  (cond ((eq avy-style 'de-bruijn)
+                         (avy-read-de-bruijn
+                          candidates avy-keys))
+                        ((eq avy-style 'words)
+                         (avy-read-words
+                          candidates avy-words))
+                        (t
+                         (avy-read (avy-tree candidates avy-keys)
+                                   overlay-fn
+                                   (or cleanup-fn 
#'avy--remove-leading-chars)))))
+             (avy--done))))))
+
+(defvar avy-last-candidates nil
+  "Store the last candidate list.")
+
+(defun avy--last-candidates-cycle (advancer)
+  (let* ((avy-last-candidates
+          (cl-remove-if-not
+           (lambda (x) (equal (cdr x) (selected-window)))
+           avy-last-candidates))
+         (min-dist
+          (apply #'min
+                 (mapcar (lambda (x) (abs (- (caar x) (point)))) 
avy-last-candidates)))
+         (pos
+          (cl-position-if
+           (lambda (x)
+             (= (- (caar x) (point)) min-dist))
+           avy-last-candidates)))
+    (funcall advancer pos avy-last-candidates)))
+
+(defun avy-prev ()
+  "Go to the previous candidate of the last `avy-read'."
+  (interactive)
+  (avy--last-candidates-cycle
+   (lambda (pos lst)
+     (when (> pos 0)
+       (goto-char (caar (nth (1- pos) lst)))))))
+
+(defun avy-next ()
+  "Go to the next candidate of the last `avy-read'."
+  (interactive)
+  (avy--last-candidates-cycle
+   (lambda (pos lst)
+     (when (< pos (1- (length lst)))
+       (goto-char (caar (nth (1+ pos) lst)))))))
+
+(defun avy-process (candidates &optional overlay-fn cleanup-fn)
   "Select one of CANDIDATES using `avy-read'.
-Use OVERLAY-FN to visualize the decision overlay."
+Use OVERLAY-FN to visualize the decision overlay.
+CLEANUP-FN should take no arguments and remove the effects of
+multiple OVERLAY-FN invocations."
+  (setq overlay-fn (or overlay-fn (avy--style-fn avy-style)))
+  (setq cleanup-fn (or cleanup-fn #'avy--remove-leading-chars))
   (unless (and (consp (car candidates))
                (windowp (cdar candidates)))
     (setq candidates
           (mapcar (lambda (x) (cons x (selected-window)))
                   candidates)))
-  (let ((len (length candidates))
-        (cands (copy-sequence candidates))
-        res)
-    (if (= len 0)
-        (message "zero candidates")
-      (if (= len 1)
-          (setq res (car candidates))
-        (unwind-protect
-             (progn
-               (avy--make-backgrounds
-                (avy-window-list))
-               (setq res (if (eq avy-style 'de-bruijn)
-                             (avy-read-de-bruijn
-                              candidates avy-keys)
-                           (avy-read (avy-tree candidates avy-keys)
-                                     overlay-fn
-                                     #'avy--remove-leading-chars))))
-          (avy--done)))
-      (cond ((eq res 'restart)
-             (avy--process cands overlay-fn))
-            ;; ignore exit from `avy-handler-function'
-            ((eq res 'exit))
-            (t
-             (avy-push-mark)
-             (when (and (consp res)
-                        (windowp (cdr res)))
-               (let* ((window (cdr res))
-                      (frame (window-frame window)))
-                 (unless (equal frame (selected-frame))
-                   (select-frame-set-input-focus frame))
-                 (select-window window))
-               (setq res (car res)))
-
-             (funcall (or avy-action 'avy-action-goto)
-                      (if (consp res)
-                          (car res)
-                        res)))))))
+  (setq avy-last-candidates (copy-sequence candidates))
+  (let ((original-cands (copy-sequence candidates))
+        (res (avy--process-1 candidates overlay-fn cleanup-fn)))
+    (cond
+      ((null res)
+       (message "zero candidates")
+       t)
+      ((eq res 'restart)
+       (avy-process original-cands overlay-fn cleanup-fn))
+      ;; ignore exit from `avy-handler-function'
+      ((eq res 'exit))
+      (t
+       (funcall avy-pre-action res)
+       (setq res (car res))
+       (funcall (or avy-action 'avy-action-goto)
+                (if (consp res)
+                    (car res)
+                  res))
+       res))))
+
+(define-obsolete-function-alias 'avy--process 'avy-process
+  "0.4.0")
 
 (defvar avy--overlays-back nil
   "Hold overlays for when `avy-background' is t.")
@@ -558,18 +895,24 @@ Use OVERLAY-FN to visualize the decision overlay."
   (setq avy--overlays-back nil)
   (avy--remove-leading-chars))
 
+(defun avy--visible-p (s)
+  (let ((invisible (get-char-property s 'invisible)))
+    (or (null invisible)
+        (eq t buffer-invisibility-spec)
+        (null (assoc invisible buffer-invisibility-spec)))))
+
 (defun avy--next-visible-point ()
   "Return the next closest point without `invisible' property."
   (let ((s (point)))
-    (while (and (not (= (point-max) (setq s (next-overlay-change s))))
-                (get-char-property s 'invisible)))
+    (while (and (not (= (point-max) (setq s (next-char-property-change s))))
+                (not (avy--visible-p s))))
     s))
 
 (defun avy--next-invisible-point ()
   "Return the next closest point with `invisible' property."
   (let ((s (point)))
-    (while (and (not (= (point-max) (setq s (next-overlay-change s))))
-                (not (get-char-property s 'invisible))))
+    (while (and (not (= (point-max) (setq s (next-char-property-change s))))
+                (avy--visible-p s)))
     s))
 
 (defun avy--find-visible-regions (rbeg rend)
@@ -604,7 +947,7 @@ When GROUP is non-nil, (BEG . END) should delimit that 
regex group."
         (save-excursion
           (goto-char (car pair))
           (while (re-search-forward regex (cdr pair) t)
-            (unless (get-char-property (1- (point)) 'invisible)
+            (when (avy--visible-p (1- (point)))
               (when (or (null pred)
                         (funcall pred))
                 (push (cons (cons (match-beginning group)
@@ -669,10 +1012,11 @@ Do this even when the char is terminating."
 
 (defun avy--key-to-char (c)
   "If C is no character, translate it using `avy-key-to-char-alist'."
-  (if (characterp c)
-      c
-    (or (cdr (assoc c avy-key-to-char-alist))
-        (error "Unknown key %s" c))))
+  (cond ((characterp c) c)
+        ((cdr (assoc c avy-key-to-char-alist)))
+        ((mouse-event-p c) c)
+        (t
+         (error "Unknown key %s" c))))
 
 (defun avy-candidate-beg (leaf)
   "Return the start position for LEAF."
@@ -750,7 +1094,7 @@ LEAF is normally ((BEG . END) . WND)."
          (wnd (cdr leaf))
          end)
     (dotimes (i len)
-      (set-text-properties (- len i 1) (- len i)
+      (set-text-properties i (1+ i)
                            `(face ,(nth i avy-lead-faces))
                            str))
     (when (eq avy-style 'de-bruijn)
@@ -767,6 +1111,10 @@ LEAF is normally ((BEG . END) . WND)."
                           (end-of-visual-line)
                           (point))
                       (line-end-position)))
+               ;; `end-of-visual-line' is bugged sometimes
+               (lep (if (< lep beg)
+                        (line-end-position)
+                      lep))
                (len-and-str (avy--update-offset-and-str len str lep)))
           (setq len (car len-and-str))
           (setq str (cdr len-and-str))
@@ -871,20 +1219,37 @@ exist."
     (at-full 'avy--overlay-at-full)
     (post #'avy--overlay-post)
     (de-bruijn #'avy--overlay-at-full)
+    (words #'avy--overlay-at-full)
+    (ignore #'ignore)
     (t (error "Unexpected style %S" style))))
 
-(defun avy--generic-jump (regex window-flip style &optional beg end)
+(cl-defun avy-jump (regex &key window-flip beg end action pred)
   "Jump to REGEX.
+The window scope is determined by `avy-all-windows'.
 When WINDOW-FLIP is non-nil, do the opposite of `avy-all-windows'.
-STYLE determines the leading char overlay style.
-BEG and END delimit the area where candidates are searched."
+BEG and END narrow the scope where candidates are searched.
+ACTION is a function that takes point position as an argument.
+When PRED is non-nil, it's a filter for matching point positions."
+  (setq avy-action (or action avy-action))
   (let ((avy-all-windows
          (if window-flip
              (not avy-all-windows)
            avy-all-windows)))
-    (avy--process
-     (avy--regex-candidates regex beg end)
-     (avy--style-fn style))))
+    (avy-process
+     (avy--regex-candidates regex beg end pred))))
+
+(defun avy--generic-jump (regex window-flip &optional beg end)
+  "Jump to REGEX.
+The window scope is determined by `avy-all-windows'.
+When WINDOW-FLIP is non-nil, do the opposite of `avy-all-windows'.
+BEG and END narrow the scope where candidates are searched."
+  (declare (obsolete avy-jump "0.4.0"))
+  (let ((avy-all-windows
+         (if window-flip
+             (not avy-all-windows)
+           avy-all-windows)))
+    (avy-process
+     (avy--regex-candidates regex beg end))))
 
 ;;* Commands
 ;;;###autoload
@@ -894,37 +1259,72 @@ The window scope is determined by `avy-all-windows' (ARG 
negates it)."
   (interactive (list (read-char "char: " t)
                      current-prefix-arg))
   (avy-with avy-goto-char
-    (avy--generic-jump
+    (avy-jump
      (if (= 13 char)
          "\n"
        (regexp-quote (string char)))
-     arg
-     avy-style)))
+     :window-flip arg)))
 
 ;;;###autoload
 (defun avy-goto-char-in-line (char)
   "Jump to the currently visible CHAR in the current line."
   (interactive (list (read-char "char: " t)))
   (avy-with avy-goto-char
-    (avy--generic-jump
+    (avy-jump
      (regexp-quote (string char))
-     avy-all-windows
-     avy-style
-     (line-beginning-position)
-     (line-end-position))))
+     :beg (line-beginning-position)
+     :end (line-end-position))))
 
 ;;;###autoload
-(defun avy-goto-char-2 (char1 char2 &optional arg)
+(defun avy-goto-char-2 (char1 char2 &optional arg beg end)
   "Jump to the currently visible CHAR1 followed by CHAR2.
-The window scope is determined by `avy-all-windows' (ARG negates it)."
+The window scope is determined by `avy-all-windows'.
+When ARG is non-nil, do the opposite of `avy-all-windows'.
+BEG and END narrow the scope where candidates are searched."
   (interactive (list (read-char "char 1: " t)
                      (read-char "char 2: " t)
-                     current-prefix-arg))
+                     current-prefix-arg
+                     nil nil))
+  (when (eq char1 ?
)
+    (setq char1 ?\n))
+  (when (eq char2 ?
)
+    (setq char2 ?\n))
   (avy-with avy-goto-char-2
-    (avy--generic-jump
+    (avy-jump
      (regexp-quote (string char1 char2))
-     arg
-     avy-style)))
+     :window-flip arg
+     :beg beg
+     :end end)))
+
+;;;###autoload
+(defun avy-goto-char-2-above (char1 char2 &optional arg)
+  "Jump to the currently visible CHAR1 followed by CHAR2.
+This is a scoped version of `avy-goto-char-2', where the scope is
+the visible part of the current buffer up to point.
+The window scope is determined by `avy-all-windows'.
+When ARG is non-nil, do the opposite of `avy-all-windows'."
+  (interactive (list (read-char "char 1: " t)
+                     (read-char "char 2: " t)
+                     current-prefix-arg))
+  (avy-with avy-goto-char-2-above
+    (avy-goto-char-2
+     char1 char2 arg
+     (window-start) (point))))
+
+;;;###autoload
+(defun avy-goto-char-2-below (char1 char2 &optional arg)
+  "Jump to the currently visible CHAR1 followed by CHAR2.
+This is a scoped version of `avy-goto-char-2', where the scope is
+the visible part of the current buffer following point.
+The window scope is determined by `avy-all-windows'.
+When ARG is non-nil, do the opposite of `avy-all-windows'."
+  (interactive (list (read-char "char 1: " t)
+                     (read-char "char 2: " t)
+                     current-prefix-arg))
+  (avy-with avy-goto-char-2-below
+    (avy-goto-char-2
+     char1 char2 arg
+     (point) (window-end (selected-window) t))))
 
 ;;;###autoload
 (defun avy-isearch ()
@@ -932,23 +1332,48 @@ The window scope is determined by `avy-all-windows' (ARG 
negates it)."
   (interactive)
   (avy-with avy-isearch
     (let ((avy-background nil))
-      (avy--process
-       (avy--regex-candidates isearch-string)
-       (avy--style-fn avy-style))
+      (avy-process
+       (avy--regex-candidates (if isearch-regexp
+                                  isearch-string
+                                (regexp-quote isearch-string))))
       (isearch-done))))
 
 ;;;###autoload
-(defun avy-goto-word-0 (arg)
+(defun avy-goto-word-0 (arg &optional beg end)
   "Jump to a word start.
-The window scope is determined by `avy-all-windows' (ARG negates it)."
+The window scope is determined by `avy-all-windows'.
+When ARG is non-nil, do the opposite of `avy-all-windows'.
+BEG and END narrow the scope where candidates are searched."
+  (interactive "P")
+  (avy-with avy-goto-word-0
+    (avy-jump avy-goto-word-0-regexp
+              :window-flip arg
+              :beg beg
+              :end end)))
+
+(defun avy-goto-word-0-above (arg)
+  "Jump to a word start between window start and point.
+The window scope is determined by `avy-all-windows'.
+When ARG is non-nil, do the opposite of `avy-all-windows'."
   (interactive "P")
   (avy-with avy-goto-word-0
-    (avy--generic-jump "\\b\\sw" arg avy-style)))
+    (avy-goto-word-0 arg (window-start) (point))))
+
+(defun avy-goto-word-0-below (arg)
+  "Jump to a word start between point and window end.
+The window scope is determined by `avy-all-windows'.
+When ARG is non-nil, do the opposite of `avy-all-windows'."
+  (interactive "P")
+  (avy-with avy-goto-word-0
+    (avy-goto-word-0 arg (point) (window-end (selected-window) t))))
 
 ;;;###autoload
-(defun avy-goto-word-1 (char &optional arg)
+(defun avy-goto-word-1 (char &optional arg beg end symbol)
   "Jump to the currently visible CHAR at a word start.
-The window scope is determined by `avy-all-windows' (ARG negates it)."
+The window scope is determined by `avy-all-windows'.
+When ARG is non-nil, do the opposite of `avy-all-windows'.
+BEG and END narrow the scope where candidates are searched.
+When SYMBOL is non-nil, jump to symbol start instead of word start."
   (interactive (list (read-char "char: " t)
                      current-prefix-arg))
   (avy-with avy-goto-word-1
@@ -958,11 +1383,74 @@ The window scope is determined by `avy-all-windows' (ARG 
negates it)."
                         ((and avy-word-punc-regexp
                               (string-match avy-word-punc-regexp str))
                          (regexp-quote str))
+                        ((<= char 26)
+                         str)
                         (t
                          (concat
-                          "\\b"
+                          (if symbol "\\_<" "\\b")
                           str)))))
-      (avy--generic-jump regex arg avy-style))))
+      (avy-jump regex
+                :window-flip arg
+                :beg beg
+                :end end))))
+
+;;;###autoload
+(defun avy-goto-word-1-above (char &optional arg)
+  "Jump to the currently visible CHAR at a word start.
+This is a scoped version of `avy-goto-word-1', where the scope is
+the visible part of the current buffer up to point.
+The window scope is determined by `avy-all-windows'.
+When ARG is non-nil, do the opposite of `avy-all-windows'."
+  (interactive (list (read-char "char: " t)
+                     current-prefix-arg))
+  (avy-with avy-goto-word-1
+    (avy-goto-word-1 char arg (window-start) (point))))
+
+;;;###autoload
+(defun avy-goto-word-1-below (char &optional arg)
+  "Jump to the currently visible CHAR at a word start.
+This is a scoped version of `avy-goto-word-1', where the scope is
+the visible part of the current buffer following point.
+The window scope is determined by `avy-all-windows'.
+When ARG is non-nil, do the opposite of `avy-all-windows'."
+  (interactive (list (read-char "char: " t)
+                     current-prefix-arg))
+  (avy-with avy-goto-word-1
+    (avy-goto-word-1 char arg (point) (window-end (selected-window) t))))
+
+;;;###autoload
+(defun avy-goto-symbol-1 (char &optional arg)
+  "Jump to the currently visible CHAR at a symbol start.
+The window scope is determined by `avy-all-windows'.
+When ARG is non-nil, do the opposite of `avy-all-windows'."
+  (interactive (list (read-char "char: " t)
+                     current-prefix-arg))
+  (avy-with avy-goto-symbol-1
+    (avy-goto-word-1 char arg nil nil t)))
+
+;;;###autoload
+(defun avy-goto-symbol-1-above (char &optional arg)
+  "Jump to the currently visible CHAR at a symbol start.
+This is a scoped version of `avy-goto-symbol-1', where the scope is
+the visible part of the current buffer up to point.
+The window scope is determined by `avy-all-windows'.
+When ARG is non-nil, do the opposite of `avy-all-windows'."
+  (interactive (list (read-char "char: " t)
+                     current-prefix-arg))
+  (avy-with avy-goto-symbol-1-above
+    (avy-goto-word-1 char arg (window-start) (point) t)))
+
+;;;###autoload
+(defun avy-goto-symbol-1-below (char &optional arg)
+  "Jump to the currently visible CHAR at a symbol start.
+This is a scoped version of `avy-goto-symbol-1', where the scope is
+the visible part of the current buffer following point.
+The window scope is determined by `avy-all-windows'.
+When ARG is non-nil, do the opposite of `avy-all-windows'."
+  (interactive (list (read-char "char: " t)
+                     current-prefix-arg))
+  (avy-with avy-goto-symbol-1-below
+    (avy-goto-word-1 char arg (point) (window-end (selected-window) t) t)))
 
 (declare-function subword-backward "subword")
 (defvar subword-backward-regexp)
@@ -973,13 +1461,14 @@ This variable is used by `avy-goto-subword-0' and 
`avy-goto-subword-1'."
   :type '(repeat character))
 
 ;;;###autoload
-(defun avy-goto-subword-0 (&optional arg predicate)
+(defun avy-goto-subword-0 (&optional arg predicate beg end)
   "Jump to a word or subword start.
-
 The window scope is determined by `avy-all-windows' (ARG negates it).
 
 When PREDICATE is non-nil it's a function of zero parameters that
-should return true."
+should return true.
+
+BEG and END narrow the scope where candidates are searched."
   (interactive "P")
   (require 'subword)
   (avy-with avy-goto-subword-0
@@ -992,19 +1481,24 @@ should return true."
           (dolist (char avy-subword-extra-word-chars)
             (modify-syntax-entry char "w" syn-tbl))
           (with-syntax-table syn-tbl
-            (let ((ws (window-start))
+            (let ((ws (or beg (window-start)))
                   window-cands)
               (save-excursion
-                (goto-char (window-end (selected-window) t))
+                (goto-char (or end (window-end (selected-window) t)))
                 (subword-backward)
                 (while (> (point) ws)
                   (when (or (null predicate)
                             (and predicate (funcall predicate)))
-                    (unless (get-char-property (point) 'invisible)
+                    (unless (not (avy--visible-p (point)))
                       (push (cons (point) (selected-window)) window-cands)))
-                  (subword-backward)))
+                  (subword-backward))
+                (and (= (point) ws)
+                     (or (null predicate)
+                         (and predicate (funcall predicate)))
+                     (not (get-char-property (point) 'invisible))
+                     (push (cons (point) (selected-window)) window-cands)))
               (setq candidates (nconc candidates window-cands))))))
-      (avy--process candidates (avy--style-fn avy-style)))))
+      (avy-process candidates))))
 
 ;;;###autoload
 (defun avy-goto-subword-1 (char &optional arg)
@@ -1016,7 +1510,9 @@ The case of CHAR is ignored."
   (avy-with avy-goto-subword-1
     (let ((char (downcase char)))
       (avy-goto-subword-0
-       arg (lambda () (eq (downcase (char-after)) char))))))
+       arg (lambda ()
+             (and (char-after)
+                  (eq (downcase (char-after)) char)))))))
 
 ;;;###autoload
 (defun avy-goto-word-or-subword-1 ()
@@ -1029,10 +1525,16 @@ Which one depends on variable `subword-mode'."
 
 (defvar visual-line-mode)
 
-(defun avy--line (&optional arg beg end)
-  "Select a line.
-The window scope is determined by `avy-all-windows' (ARG negates it).
-Narrow the scope to BEG END."
+(defcustom avy-indent-line-overlay nil
+  "When non-nil, `avy-goto-line' will display the line overlay next to the 
first non-whitespace character of each line."
+  :type 'boolean)
+
+(defun avy--line-cands (&optional arg beg end bottom-up)
+  "Get candidates for selecting a line.
+The window scope is determined by `avy-all-windows'.
+When ARG is non-nil, do the opposite of `avy-all-windows'.
+BEG and END narrow the scope where candidates are searched.
+When BOTTOM-UP is non-nil, display avy candidates from top to bottom"
   (let (candidates)
     (avy-dowindows arg
       (let ((ws (or beg (window-start))))
@@ -1041,20 +1543,122 @@ Narrow the scope to BEG END."
             (narrow-to-region ws (or end (window-end (selected-window) t)))
             (goto-char (point-min))
             (while (< (point) (point-max))
-              (unless (get-char-property
-                       (max (1- (point)) ws) 'invisible)
+              (when (member (get-char-property
+                             (max (1- (point)) ws) 'invisible) '(nil org-link))
                 (push (cons
                        (if (eq avy-style 'post)
                            (line-end-position)
-                         (point))
+                         (save-excursion
+                           (when avy-indent-line-overlay
+                             (skip-chars-forward " \t"))
+                           (point)))
                        (selected-window)) candidates))
               (if visual-line-mode
                   (progn
                     (setq temporary-goal-column 0)
                     (line-move-visual 1 t))
                 (forward-line 1)))))))
-    (let ((avy-action #'identity))
-      (avy--process (nreverse candidates) (avy--style-fn avy-style)))))
+    (if bottom-up
+        candidates
+      (nreverse candidates))))
+
+(defun avy--linum-strings ()
+  "Get strings for `avy-linum-mode'."
+  (let* ((lines (mapcar #'car (avy--line-cands)))
+         (line-tree (avy-tree lines avy-keys))
+         (line-list nil))
+    (avy-traverse
+     line-tree
+     (lambda (path _leaf)
+       (let ((str (propertize (apply #'string (reverse path))
+                              'face 'avy-lead-face)))
+         (when (> (length str) 1)
+           (set-text-properties 0 1 '(face avy-lead-face-0) str))
+         (push str line-list))))
+    (nreverse line-list)))
+
+(defvar linum-available)
+(defvar linum-overlays)
+(defvar linum-format)
+(declare-function linum--face-width "linum")
+
+(define-minor-mode avy-linum-mode
+  "Minor mode that uses avy hints for `linum-mode'."
+  :group 'avy
+  (if avy-linum-mode
+      (progn
+        (require 'linum)
+        (advice-add 'linum-update-window :around 'avy--linum-update-window)
+        (linum-mode 1))
+    (advice-remove 'linum-update-window 'avy--linum-update-window)
+    (linum-mode -1)))
+
+(defun avy--linum-update-window (_ win)
+  "Update line numbers for the portion visible in window WIN."
+  (goto-char (window-start win))
+  (let ((line (line-number-at-pos))
+        (limit (window-end win t))
+        (fmt (cond ((stringp linum-format) linum-format)
+                   ((eq linum-format 'dynamic)
+                    (let ((w (length (number-to-string
+                                      (count-lines (point-min) (point-max))))))
+                      (concat "%" (number-to-string w) "d")))))
+        (width 0)
+        (avy-strs (when avy-linum-mode
+                    (avy--linum-strings))))
+    (run-hooks 'linum-before-numbering-hook)
+    ;; Create an overlay (or reuse an existing one) for each
+    ;; line visible in this window, if necessary.
+    (while (and (not (eobp)) (< (point) limit))
+      (let* ((str
+              (cond (avy-linum-mode
+                     (pop avy-strs))
+                    (fmt
+                     (propertize (format fmt line) 'face 'linum))
+                    (t
+                     (funcall linum-format line))))
+             (visited (catch 'visited
+                        (dolist (o (overlays-in (point) (point)))
+                          (when (equal-including-properties
+                                 (overlay-get o 'linum-str) str)
+                            (unless (memq o linum-overlays)
+                              (push o linum-overlays))
+                            (setq linum-available (delq o linum-available))
+                            (throw 'visited t))))))
+        (setq width (max width (length str)))
+        (unless visited
+          (let ((ov (if (null linum-available)
+                        (make-overlay (point) (point))
+                      (move-overlay (pop linum-available) (point) (point)))))
+            (push ov linum-overlays)
+            (overlay-put ov 'before-string
+                         (propertize " " 'display `((margin left-margin) 
,str)))
+            (overlay-put ov 'linum-str str))))
+      ;; Text may contain those nasty intangible properties, but that
+      ;; shouldn't prevent us from counting those lines.
+      (let ((inhibit-point-motion-hooks t))
+        (forward-line))
+      (setq line (1+ line)))
+    (when (display-graphic-p)
+      (setq width (ceiling
+                   (/ (* width 1.0 (linum--face-width 'linum))
+                      (frame-char-width)))))
+    (set-window-margins win width (cdr (window-margins win)))))
+
+(defun avy--line (&optional arg beg end bottom-up)
+  "Select a line.
+The window scope is determined by `avy-all-windows'.
+When ARG is non-nil, do the opposite of `avy-all-windows'.
+BEG and END narrow the scope where candidates are searched.
+When BOTTOM-UP is non-nil, display avy candidates from top to bottom"
+  (let ((avy-action #'identity)
+        (avy-style (if avy-linum-mode
+                       (progn
+                         (message "Goto line:")
+                         'ignore)
+                     avy-style)))
+    (avy-process
+     (avy--line-cands arg beg end bottom-up))))
 
 ;;;###autoload
 (defun avy-goto-line (&optional arg)
@@ -1074,11 +1678,12 @@ Otherwise, forward to `goto-line' with ARG."
         (goto-char (point-min))
         (forward-line (1- arg)))
     (avy-with avy-goto-line
-      (let* ((avy-handler-function
+      (let* ((avy-handler-old avy-handler-function)
+             (avy-handler-function
               (lambda (char)
                 (if (or (< char ?0)
                         (> char ?9))
-                    (avy-handler-default char)
+                    (funcall avy-handler-old char)
                   (let ((line (read-from-minibuffer
                                "Goto line: " (string char))))
                     (when line
@@ -1093,23 +1698,35 @@ Otherwise, forward to `goto-line' with ARG."
           (avy-action-goto r))))))
 
 ;;;###autoload
-(defun avy-goto-line-above ()
-  "Goto visible line above the cursor."
+(defun avy-goto-line-above (&optional offset bottom-up)
+  "Goto visible line above the cursor.
+OFFSET changes the distance between the closest key to the cursor and
+the cursor
+When BOTTOM-UP is non-nil, display avy candidates from top to bottom"
   (interactive)
+  (if offset
+    (setq offset (+ 2 (- offset))))
   (let* ((avy-all-windows nil)
          (r (avy--line nil (window-start)
-                       (line-beginning-position))))
+                       (line-beginning-position (or offset 1))
+                      bottom-up)))
     (unless (eq r t)
       (avy-action-goto r))))
 
 ;;;###autoload
-(defun avy-goto-line-below ()
-  "Goto visible line below the cursor."
+(defun avy-goto-line-below (&optional offset bottom-up)
+  "Goto visible line below the cursor.
+OFFSET changes the distance between the closest key to the cursor and
+the cursor
+When BOTTOM-UP is non-nil, display avy candidates from top to bottom"
   (interactive)
+  (if offset
+    (setq offset (+ offset 1)))
   (let* ((avy-all-windows nil)
          (r (avy--line
-             nil (line-beginning-position 2)
-             (window-end (selected-window) t))))
+             nil (line-beginning-position (or offset 2))
+             (window-end (selected-window) t)
+            bottom-up)))
     (unless (eq r t)
       (avy-action-goto r))))
 
@@ -1120,6 +1737,13 @@ Otherwise, forward to `goto-line' with ARG."
           (const :tag "Below" below)))
 
 ;;;###autoload
+(defun avy-goto-end-of-line (&optional arg)
+  "Call `avy-goto-line' and move to the end of the line."
+  (interactive "p")
+  (avy-goto-line arg)
+  (end-of-line))
+
+;;;###autoload
 (defun avy-copy-line (arg)
   "Copy a selected line above the current line.
 ARG lines can be used."
@@ -1201,29 +1825,177 @@ The window scope is determined by `avy-all-windows' or
                (user-error "Unexpected `avy-line-insert-style'")))))))
 
 ;;;###autoload
+(defun avy-move-region ()
+  "Select two lines and move the text between them above the current line."
+  (interactive)
+  (avy-with avy-move-region
+    (let* ((initial-window (selected-window))
+           (beg (avy--line))
+           (end (avy--line))
+           text)
+      (when (> beg end)
+        (cl-rotatef beg end))
+      (setq end (save-excursion
+                  (goto-char end)
+                  (1+ (line-end-position))))
+      (setq text (buffer-substring beg end))
+      (move-beginning-of-line nil)
+      (delete-region beg end)
+      (select-window initial-window)
+      (insert text))))
+
+;;;###autoload
+(defun avy-kill-region (arg)
+  "Select two lines and kill the region between them.
+
+The window scope is determined by `avy-all-windows' or
+`avy-all-windows-alt' when ARG is non-nil."
+  (interactive "P")
+  (let ((initial-window (selected-window)))
+    (avy-with avy-kill-region
+      (let* ((beg (save-selected-window
+                    (list (avy--line arg) (selected-window))))
+             (end (list (avy--line arg) (selected-window))))
+        (cond
+          ((not (numberp (car beg)))
+           (user-error "Fail to select the beginning of region"))
+          ((not (numberp (car end)))
+           (user-error "Fail to select the end of region"))
+          ;; Restrict operation to same window. It's better if it can be
+          ;; different windows but same buffer; however, then the cloned
+          ;; buffers with different narrowed regions might cause problem.
+          ((not (equal (cdr beg) (cdr end)))
+           (user-error "Selected points are not in the same window"))
+          ((< (car beg) (car end))
+           (save-excursion
+             (kill-region
+              (car beg)
+              (progn (goto-char (car end)) (forward-visible-line 1) (point)))))
+          (t
+           (save-excursion
+             (kill-region
+              (progn (goto-char (car beg)) (forward-visible-line 1) (point))
+              (car end)))))))
+    (select-window initial-window)))
+
+;;;###autoload
+(defun avy-kill-ring-save-region (arg)
+  "Select two lines and save the region between them to the kill ring.
+The window scope is determined by `avy-all-windows'.
+When ARG is non-nil, do the opposite of `avy-all-windows'."
+  (interactive "P")
+  (let ((initial-window (selected-window)))
+    (avy-with avy-kill-ring-save-region
+      (let* ((beg (save-selected-window
+                    (list (avy--line arg) (selected-window))))
+             (end (list (avy--line arg) (selected-window))))
+        (cond
+          ((not (numberp (car beg)))
+           (user-error "Fail to select the beginning of region"))
+          ((not (numberp (car end)))
+           (user-error "Fail to select the end of region"))
+          ((not (equal (cdr beg) (cdr end)))
+           (user-error "Selected points are not in the same window"))
+          ((< (car beg) (car end))
+           (save-excursion
+             (kill-ring-save
+              (car beg)
+              (progn (goto-char (car end)) (forward-visible-line 1) (point)))))
+          (t
+           (save-excursion
+             (kill-ring-save
+              (progn (goto-char (car beg)) (forward-visible-line 1) (point))
+              (car end)))))))
+    (select-window initial-window)))
+
+;;;###autoload
+(defun avy-kill-whole-line (arg)
+  "Select line and kill the whole selected line.
+
+With a numerical prefix ARG, kill ARG line(s) starting from the
+selected line.  If ARG is negative, kill backward.
+
+If ARG is zero, kill the selected line but exclude the trailing
+newline.
+
+\\[universal-argument] 3 \\[avy-kil-whole-line] kill three lines
+starting from the selected line.  \\[universal-argument] -3
+
+\\[avy-kill-whole-line] kill three lines backward including the
+selected line."
+  (interactive "P")
+  (let ((initial-window (selected-window)))
+    (avy-with avy-kill-whole-line
+      (let* ((start (avy--line)))
+        (if (not (numberp start))
+            (user-error "Fail to select the line to kill")
+          (save-excursion (goto-char start)
+                          (kill-whole-line arg)))))
+    (select-window initial-window)))
+
+;;;###autoload
+(defun avy-kill-ring-save-whole-line (arg)
+  "Select line and save the whole selected line as if killed, but don’t kill 
it.
+
+This command is similar to `avy-kill-whole-line', except that it
+saves the line(s) as if killed, but does not kill it(them).
+
+With a numerical prefix ARG, kill ARG line(s) starting from the
+selected line.  If ARG is negative, kill backward.
+
+If ARG is zero, kill the selected line but exclude the trailing
+newline."
+  (interactive "P")
+  (let ((initial-window (selected-window)))
+    (avy-with avy-kill-ring-save-whole-line
+      (let* ((start (avy--line)))
+        (if (not (numberp start))
+            (user-error "Fail to select the line to kill")
+          (save-excursion
+            (let ((kill-read-only-ok t)
+                  (buffer-read-only t))
+              (goto-char start)
+              (kill-whole-line arg))))))
+    (select-window initial-window)))
+
+;;;###autoload
 (defun avy-setup-default ()
   "Setup the default shortcuts."
   (eval-after-load "isearch"
     '(define-key isearch-mode-map (kbd "C-'") 'avy-isearch)))
 
 (defcustom avy-timeout-seconds 0.5
-  "How many seconds to wait for the second char.")
+  "How many seconds to wait for the second char."
+  :type 'float)
+
+(defcustom avy-enter-times-out t
+  "Whether enter exits avy-goto-char-timer early. If nil it matches newline"
+  :type 'boolean)
 
-(defun avy--read-candidates ()
-  "Read as many chars as possible and return their occurences.
+(defun avy--read-candidates (&optional re-builder)
+  "Read as many chars as possible and return their occurrences.
 At least one char must be read, and then repeatedly one next char
 may be read if it is entered before `avy-timeout-seconds'.  DEL
 deletes the last char entered, and RET exits with the currently
 read string immediately instead of waiting for another char for
 `avy-timeout-seconds'.
 The format of the result is the same as that of `avy--regex-candidates'.
-This function obeys `avy-all-windows' setting."
-  (let ((str "") char break overlays regex)
+This function obeys `avy-all-windows' setting.
+RE-BUILDER is a function that takes a string and returns a regex.
+When nil, `regexp-quote' is used.
+If a group is captured, the first group is highlighted.
+Otherwise, the whole regex is highlighted."
+  (let ((str "")
+        (re-builder (or re-builder #'regexp-quote))
+        char break overlays regex)
     (unwind-protect
          (progn
+           (avy--make-backgrounds
+            (avy-window-list))
            (while (and (not break)
                        (setq char
-                             (read-char (format "char%s: "
+                             (read-char (format "%d  char%s: "
+                                                (length overlays)
                                                 (if (string= str "")
                                                     str
                                                   (format " (%s)" str)))
@@ -1237,12 +2009,17 @@ This function obeys `avy-all-windows' setting."
              (cond
                ;; Handle RET
                ((= char 13)
-                (setq break t))
-               ;; Handle DEL
-               ((= char 127)
+                (if avy-enter-times-out
+                    (setq break t)
+                  (setq str (concat str (list ?\n)))))
+               ;; Handle C-h, DEL
+               ((memq char avy-del-last-char-by)
                 (let ((l (length str)))
                   (when (>= l 1)
                     (setq str (substring str 0 (1- l))))))
+               ;; Handle ESC
+               ((= char 27)
+                (keyboard-quit))
                (t
                 (setq str (concat str (list char)))))
              ;; Highlight
@@ -1256,16 +2033,18 @@ This function obeys `avy-all-windows' setting."
                                   (window-end (selected-window) t)))
                      (save-excursion
                        (goto-char (car pair))
-                       (setq regex (regexp-quote str))
+                       (setq regex (funcall re-builder str))
                        (while (re-search-forward regex (cdr pair) t)
-                         (unless (get-char-property (1- (point)) 'invisible)
-                           (let ((ov (make-overlay
-                                      (match-beginning 0)
-                                      (match-end 0))))
+                         (unless (not (avy--visible-p (1- (point))))
+                           (let* ((idx (if (= (length (match-data)) 4) 1 0))
+                                  (ov (make-overlay
+                                       (match-beginning idx) (match-end idx))))
                              (setq found t)
                              (push ov overlays)
-                             (overlay-put ov 'window (selected-window))
-                             (overlay-put ov 'face 
'avy-goto-char-timer-face)))))))
+                             (overlay-put
+                              ov 'window (selected-window))
+                             (overlay-put
+                              ov 'face 'avy-goto-char-timer-face)))))))
                  ;; No matches at all, so there's surely a typo in the input.
                  (unless found (beep)))))
            (nreverse (mapcar (lambda (ov)
@@ -1274,7 +2053,8 @@ This function obeys `avy-all-windows' setting."
                                      (overlay-get ov 'window)))
                              overlays)))
       (dolist (ov overlays)
-        (delete-overlay ov)))))
+        (delete-overlay ov))
+      (avy--done))))
 
 ;;;###autoload
 (defun avy-goto-char-timer (&optional arg)
@@ -1285,19 +2065,16 @@ The window scope is determined by `avy-all-windows' 
(ARG negates it)."
                              (not avy-all-windows)
                            avy-all-windows)))
     (avy-with avy-goto-char-timer
-      (avy--process
-       (avy--read-candidates)
-       (avy--style-fn avy-style)))))
-
-(defvar avy-ring (make-ring 20)
-  "Hold the window and point history.")
+      (avy-process
+       (avy--read-candidates)))))
 
 (defun avy-push-mark ()
   "Store the current point and window."
-  (ring-insert avy-ring
-               (cons (point) (selected-window)))
-  (unless (region-active-p)
-    (push-mark)))
+  (let ((inhibit-message t))
+    (ring-insert avy-ring
+                 (cons (point) (selected-window)))
+    (unless (region-active-p)
+      (push-mark))))
 
 (defun avy-pop-mark ()
   "Jump back to the last location of `avy-push-mark'."
@@ -1317,12 +2094,48 @@ The window scope is determined by `avy-all-windows' 
(ARG negates it)."
       (error
        (set-mark-command 4)))))
 
-(define-obsolete-function-alias
-    'avy--goto 'identity "0.3.0"
-    "Don't use this function any more.
-`avy--process' will do the jump all by itself.")
+;; ** Org-mode
+(defvar org-reverse-note-order)
+(declare-function org-refile "org")
+(declare-function org-back-to-heading "org")
+(declare-function org-reveal "org")
+
+(defvar org-after-refile-insert-hook)
 
-(define-obsolete-function-alias 'avy--with-avy-keys 'avy-with "0.3.0")
+(defun avy-org-refile-as-child ()
+  "Refile current heading as first child of heading selected with `avy.'"
+  ;; Inspired by `org-teleport': 
http://kitchingroup.cheme.cmu.edu/blog/2016/03/18/Org-teleport-headlines/
+  (interactive)
+  (let* ((org-reverse-note-order t)
+         (marker (save-excursion
+                   (avy-with avy-goto-line
+                     (unless (eq 't (avy-jump (rx bol (1+ "*") (1+ space))))
+                       ;; `avy-jump' returns t when aborted with C-g.
+                       (point-marker)))))
+         (filename (buffer-file-name (or (buffer-base-buffer (marker-buffer 
marker))
+                                         (marker-buffer marker))))
+         (rfloc (list nil filename nil marker))
+         ;; Ensure the refiled heading is visible.
+         (org-after-refile-insert-hook (if (member 'org-reveal 
org-after-refile-insert-hook)
+                                           org-after-refile-insert-hook
+                                         (cons #'org-reveal 
org-after-refile-insert-hook))))
+    (when marker
+      ;; Only attempt refile if avy session was not aborted.
+      (org-refile nil nil rfloc))))
+
+(defun avy-org-goto-heading-timer (&optional arg)
+  "Read one or many characters and jump to matching Org headings.
+The window scope is determined by `avy-all-windows' (ARG negates it)."
+  (interactive "P")
+  (let ((avy-all-windows (if arg
+                             (not avy-all-windows)
+                           avy-all-windows)))
+    (avy-with avy-goto-char-timer
+      (avy-process
+       (avy--read-candidates
+        (lambda (input)
+          (format "^\\*+ .*\\(%s\\)" input))))
+      (org-back-to-heading))))
 
 (provide 'avy)
 
diff --git a/packages/avy/doc/Changelog.org b/packages/avy/doc/Changelog.org
index 6d5b80c..1c9ea2f 100644
--- a/packages/avy/doc/Changelog.org
+++ b/packages/avy/doc/Changelog.org
@@ -141,7 +141,7 @@ Pros and cons of =de-bruijn= over other styles:
   clumped up chars, which is truncated for other styles
 - a con is that the decision path is of the same length (e.g. 2 or 3)
   for all candidates, while with other styles it's possible to have a
-  few candidets with a shorter path.
+  few candidates with a shorter path.
 
 See [[https://github.com/abo-abo/avy/issues/51][#51]] and 
[[https://github.com/abo-abo/avy/issues/5][#5]].
 
@@ -323,3 +323,176 @@ Allows to customize the behavior of =avy-goto-subword-0= 
and
 =avy-goto-subword-1= by adding extra chars that should match as word
 constituents.
 See [[https://github.com/abo-abo/avy/issues/116][#116]].
+* 0.5.0
+** Fixes
+*** el:avy-action-copy
+Save selected window and frame. See 
[[https://github.com/abo-abo/avy/issues/133][#133]].
+
+Copy line for el:avy-goto-line. See 
[[https://github.com/abo-abo/avy/issues/191][#191]].
+*** el:avy-read
+Make ~C-g~ and ~ESC~ fail silently when reading char. See 
[[https://github.com/abo-abo/avy/issues/137][#137]].
+
+Display error message on mouse clicks. See 
[[https://github.com/abo-abo/avy/issues/226][#226]].
+
+Update el:avy-current-path before returning. See 
[[https://github.com/abo-abo/avy/issues/226][#226]].
+
+Quit on ~ESC~. See [[https://github.com/abo-abo/avy/issues/249][#249]].
+
+Fix for el:org-toggle-link-display. See 
[[https://github.com/abo-abo/avy/issues/261][#261]].
+
+Fix for el:buffer-invisibility-spec being t. See 
[[https://github.com/abo-abo/avy/issues/264][#264]].
+
+Allow "invisible" 'org-link. See 
[[https://github.com/abo-abo/avy/issues/269][#269]].
+*** el:avy-goto-word-1
+Works for "^A"-"^Z", see [[https://github.com/abo-abo/avy/issues/167][#167]].
+*** el:avy-goto-subword-0
+Add char at window start if empty, See 
[[https://github.com/abo-abo/avy/issues/145][#145]].
+
+Add option to limit scope. See 
[[https://github.com/abo-abo/avy/issues/235][#235]].
+*** el:avy-goto-subword-1
+Check el:char-after. See [[https://github.com/abo-abo/avy/issues/163][#163]].
+*** el:avy-isearch
+Escape regex. See [[https://github.com/abo-abo/avy/issues/147][#147]].
+*** el:avy-goto-char-2
+Translate ~RET~ to ~C-j~. See 
[[https://github.com/abo-abo/avy/issues/153][#153]].
+*** el:avy-action-goto
+Add el:raise-frame.
+*** el:avy-goto-char-timer
+Allow ~C-h~ to delete. See [[https://github.com/abo-abo/avy/issues/193][#193]].
+
+Obey el:avy-background for the initial search. See 
[[https://github.com/abo-abo/avy/issues/259][#259]].
+*** el:avy-goto-line
+Fix for empty buffer. See [[https://github.com/abo-abo/avy/issues/238][#238]].
+
+Add ability to display candidates from bottom to top. See 
[[https://github.com/abo-abo/avy/issues/236][#236]].
+*** el:avy--overlay-at-full
+More consistent face order.
+See [[https://github.com/abo-abo/avy/issues/270][#270]].
+*** documentation
+See [[https://github.com/abo-abo/avy/issues/223][#223]], 
[[https://github.com/abo-abo/avy/issues/226][#226]], 
[[https://github.com/abo-abo/avy/issues/218][#218]], 
[[https://github.com/abo-abo/avy/issues/245][#245]], 
[[https://github.com/abo-abo/avy/issues/262][#262]].
+
+** New Features
+*** API
+New functions have been added as drop-in replacements of double-dash (private) 
avy
+functions that were used in other packages and configs. Please replace the 
references to
+the obsolete functions.
+
+**** el:avy-jump
+New API function to replace el:avy--generic-jump. See 
[[https://github.com/abo-abo/avy/issues/265][#265]], 
[[https://github.com/abo-abo/avy/issues/267][#267]].
+**** el:avy-process
+New API function to replace el:avy--process. See 
[[https://github.com/abo-abo/avy/issues/266][#266]].
+
+*** New actions
+**** el:avy-action-kill-stay
+Kill a word with el:avy-goto-char without moving there.
+Bound to ~X~.
+**** el:avy-action-ispell
+Auto-correct word at point. See 
[[https://github.com/abo-abo/avy/issues/142][#142]], 
[[https://github.com/abo-abo/avy/issues/160][#160]], 
[[https://github.com/abo-abo/avy/issues/161][#161]].
+Bound to ~i~.
+**** el:avy-action-yank
+Yank sexp starting at selected point at the current point. See 
[[https://github.com/abo-abo/avy/issues/183][#183]].
+Bound to ~y~.
+**** el:avy-action-teleport
+Kill sexp starting on selected point and yank into the current location. See 
[[https://github.com/abo-abo/avy/issues/207][#207]].
+Bound to ~t~.
+**** el:avy-action-zap-to-char
+Kill from point up to selected point. See 
[[https://github.com/abo-abo/avy/issues/234][#234]].
+Bound to ~z~.
+
+*** New defcustoms
+**** New el:avy-style setting: 'words
+Use this setting:
+#+begin_src elisp
+(setq avy-style 'words)
+#+end_src
+And you'll see overlays like "by", "if", "is", "it", "my" for 2-letter 
sequences, and
+"can", "car", "cog" for 3-letter sequences. You might find them easier to type 
than "hla",
+"lls" and "jhl". But you will have to adjust your el:avy-dispatch-alist, e.g. 
to use only
+upper case characters.
+
+See [[https://github.com/abo-abo/avy/issues/210][#210]], 
[[https://github.com/abo-abo/avy/issues/219][#219]].
+**** el:avy-orders-alist
+Use it to customize the order of candidates with relation to point.  The 
default is for
+el:avy-goto-char to have the shortest overlay for candidates closest to point.
+See [[https://github.com/abo-abo/avy/issues/242][#242]].
+**** el:avy-indent-line-overlay
+When non-nil el:avy-goto-line will display the line overlay next to the first
+non-whitespace character of each line. See 
[[https://github.com/abo-abo/avy/issues/244][#244]].
+**** el:avy-single-candidate-jump
+When non-nil, and there is only one candidate, jump there. See 
[[https://github.com/abo-abo/avy/issues/250][#250]].
+**** el:avy-del-last-char-by
+Customize keys which delete the last read char. The defaults are ~C-h~ and 
~DEL~. See [[https://github.com/abo-abo/avy/issues/251][#251]].
+**** el:avy-goto-word-0-regexp
+Customize el:avy-goto-word-0. See 
[[https://github.com/abo-abo/avy/issues/136][#136]], 
[[https://github.com/abo-abo/avy/issues/156][#156]].
+**** el:avy-pre-action
+Function to all before el:avy-action. See 
[[https://github.com/abo-abo/avy/issues/260][#260]].
+**** el:avy-enter-times-out
+When non-nil (the default), ~RET~ exists el:avy-goto-char-timer early.
+When nil, it matches a newline.
+See [[https://github.com/abo-abo/avy/issues/220][#220]], 
[[https://github.com/abo-abo/avy/issues/225][#225]].
+
+*** New commands
+**** el:avy-move-region
+Select two lines and move the text between them above the current line.
+See [[https://github.com/abo-abo/avy/issues/75][#75]], 
[[https://github.com/abo-abo/avy/issues/187][#187]], 
[[https://github.com/abo-abo/avy/issues/188][#188]].
+**** el:avy-goto-end-of-line
+Call el:avy-goto-line and move to the end of the line. See 
[[https://github.com/abo-abo/avy/issues/240][#240]].
+
+**** el:avy-linum-mode
+Minor mode that uses avy hints for el:linum-mode.
+
+**** el:avy-resume
+Holds last command avy command after user input. This is a quick way to bring 
back the
+same markers after a jump. See 
[[https://github.com/abo-abo/avy/issues/157][#157]], 
[[https://github.com/abo-abo/avy/issues/165][#165]].
+**** el:avy-next
+Go to the next candidate after el:avy-read.
+Example config:
+
+#+begin_src elisp
+(defhydra hydra-avy-cycle ()
+  ("j" avy-next "next")
+  ("k" avy-prev "prev")
+  ("q" nil "quit"))
+
+(global-set-key (kbd "C-M-'") 'hydra-avy-cycle/body)
+#+end_src
+
+After e.g. el:avy-goto-char or el:avy-goto-char-timer, use the above hydra to 
cycle
+between the last candidates.  See 
[[https://github.com/abo-abo/avy/issues/254][#254]].
+**** *-above and *-below variants
+Command versions restricted to matches before or after the point.
+
+See [[https://github.com/abo-abo/avy/issues/148][#148]]:
+- el:avy-goto-char-2-above
+- el:avy-goto-char-2-below
+
+See [[https://github.com/abo-abo/avy/issues/151][#151]]:
+- el:avy-goto-word-1-above
+- el:avy-goto-word-1-below
+
+See [[https://github.com/abo-abo/avy/issues/156][#156]]:
+- el:avy-goto-symbol-1-above
+- el:avy-goto-symbol-1-below
+
+See [[https://github.com/abo-abo/avy/issues/186][#186]]:
+- el:avy-goto-word-0-below
+- el:avy-goto-word-0-above
+**** kill and save region functionality
+New avy-enabled commands:
+- el:avy-kill-whole-line
+- el:avy-kill-region
+- el:avy-kill-ring-save-whole-line
+- el:avy-kill-ring-save-region
+
+See [[https://github.com/abo-abo/avy/issues/158][#158]].
+**** org-mode functionality
+New avy-enabled commands:
+- el:avy-org-refile-as-child
+- el:avy-org-goto-heading-timer
+See [[https://github.com/abo-abo/avy/issues/214][#214]], 
[[https://github.com/abo-abo/avy/issues/258][#258]].
+*** el:avy-goto-char-timer
+Show the number of matches so far in the prompt. See 
[[https://github.com/abo-abo/avy/issues/253][#253]].
+*** el:avy-read
+Ignore mistyping when no candidates are available. See 
[[https://github.com/abo-abo/avy/issues/256][#256]].
+
+When the overlays are shown, press ~?~ to get dispatch help.
diff --git a/packages/avy/targets/avy-init.el b/packages/avy/targets/avy-init.el
index 9ce46bb..6751b74 100644
--- a/packages/avy/targets/avy-init.el
+++ b/packages/avy/targets/avy-init.el
@@ -22,11 +22,5 @@
 (add-to-list 'load-path default-directory)
 (mapc #'byte-compile-file '("avy.el"))
 (require 'avy)
-(if (fboundp 'checkdoc-file)
-    (checkdoc-file "avy.el")
-  (require 'checkdoc)
-  (with-current-buffer (find-file "avy.el")
-    (checkdoc-current-buffer t)))
-
 (global-set-key (kbd "C-c j") 'avy-goto-char)
 (global-set-key (kbd "C-'") 'avy-goto-char-2)
diff --git a/packages/avy/targets/checkdoc.el b/packages/avy/targets/checkdoc.el
new file mode 100644
index 0000000..eb2e9f6
--- /dev/null
+++ b/packages/avy/targets/checkdoc.el
@@ -0,0 +1,4 @@
+;; Copyright (C) 2019 Free Software Foundation, Inc.
+
+(checkdoc-file "avy-test.el")
+(checkdoc-file "avy.el")
diff --git a/packages/cl-lib/cl-lib.el b/packages/cl-lib/cl-lib.el
index 421e0ac..0f05c3e 100644
--- a/packages/cl-lib/cl-lib.el
+++ b/packages/cl-lib/cl-lib.el
@@ -1,6 +1,6 @@
-;;; cl-lib.el --- Properly prefixed CL functions and macros  -*- coding: utf-8 
-*-
+;;; cl-lib.el --- Forward cl-lib compatibility library for Emacs<24.3  -*- 
coding: utf-8 -*-
 
-;; Copyright (C) 2012, 2013, 2014, 2017  Free Software Foundation, Inc.
+;; Copyright (C) 2012-2019  Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; vcomment: Emacs-24.3's version is 1.0 so this has to stay below.
diff --git a/packages/cobol-mode/cobol-mode.el 
b/packages/cobol-mode/cobol-mode.el
index 27485af..f7dcab8 100644
--- a/packages/cobol-mode/cobol-mode.el
+++ b/packages/cobol-mode/cobol-mode.el
@@ -1958,14 +1958,14 @@ The next key typed is executed unless it is SPC."
   "^.\\{6\\}"
   "Regexp matching a complete sequence area.")
 
-(defconst cobol--fixed-comment-indicators-re
-  "\\*/"
-  "Regexp containing COBOL fixed-form comment indicators.")
+(defconst cobol--fixed-comment-indicators
+  "*/"
+  "String containing COBOL fixed-form comment indicator characters.")
 
 (defconst cobol--fixed-form-comment-re
   (concat cobol--complete-sequence-area-re
           "\\(["
-          cobol--fixed-comment-indicators-re
+          cobol--fixed-comment-indicators
           "]\\)")
   "Regexp matching a fixed-form source comment.")
 
@@ -1975,7 +1975,7 @@ The next key typed is executed unless it is SPC."
   "Regexp matching a continuation or debugging line indicator.")
 
 (defconst cobol--non-fixed-comment-indicators-re
-  (concat "[^" cobol--fixed-comment-indicators-re "]")
+  (concat "[^" cobol--fixed-comment-indicators "]")
   "Regexp matching non-fixed-form-comment-indicator characters.")
 
 (defconst cobol--fixed-non-comment-sequence-area-re
@@ -2022,7 +2022,7 @@ lines.")
 
 (defun cobol--with-opt-whitespace-line (&rest strs)
   "Return STRS concatenated after 
`cobol--optional-leading-whitespace-line-re'."
-  (apply #'concat (cons cobol--optional-leading-whitespace-line-re strs))))
+  (apply #'concat cobol--optional-leading-whitespace-line-re strs)))
 
 (defconst cobol--free-form-comment-line-re
   (cobol--with-opt-whitespace-line cobol--free-form-comment-re)
@@ -2033,12 +2033,14 @@ lines.")
   "Regexp matching an identifier in a separate group preceded by whitespace.")
 
 (defconst cobol--mf-set-directive
-  (cobol--with-opt-whitespace-line "$SET\\s-+\\w+")
+  (cobol--with-opt-whitespace-line "\\$SET\\s-+\\w+")
   "Regexp matching MF compiler directive with optional whitespace.")
 
 (defconst cobol--mf-compiler-directive-re
   (if (not (eq cobol-source-format 'free))
       (concat cobol--fixed-form-sequence-area-re
+              ;; FIXME: cobol--mf-set-directive starts with "^" so it can't
+              ;; match after cobol--fixed-form-sequence-area-re!
               cobol--mf-set-directive)
     (concat "^" cobol--mf-set-directive))
   "Regexp matching Micro Focus compiler directives.")
@@ -3045,11 +3047,7 @@ start of area A, if fixed-format)."
 (defvar cobol-mode-map
   (let ((map (make-sparse-keymap)))
     (define-key map [remap back-to-indentation] 'cobol-back-to-indentation)
-    ;; FIXME: I strongly suspect this was a user-preference rather than
-    ;; something which belongs in a major mode.  And now that
-    ;; electric-indent-mode is enabled by default, this should probably be
-    ;; removed altogether.
-    (define-key map (kbd "RET") #'newline-and-indent)
+    ;;(define-key map (kbd "RET") #'newline-and-indent)
     map))
 
 (defvar cobol-mode-syntax-table
@@ -3069,7 +3067,6 @@ start of area A, if fixed-format)."
 ;;;###autoload
 (define-derived-mode cobol-mode prog-mode "COBOL"
   "COBOL mode is a major mode for handling COBOL files."
-  :group 'cobol
 
   (set (make-local-variable 'font-lock-defaults) cobol-font-lock-defaults)
 
diff --git a/packages/company-math/company-math.el 
b/packages/company-math/company-math.el
index 49d3028..c55a717 100644
--- a/packages/company-math/company-math.el
+++ b/packages/company-math/company-math.el
@@ -4,8 +4,8 @@
 ;; Author: Vitalie Spinu <address@hidden>
 ;; URL: https://github.com/vspinu/company-math
 ;; Keywords:  Unicode, symbols, completion
-;; Version: 1.1
-;; Package-Requires: ((company "0.8.0") (math-symbol-lists "1.0"))
+;; Version: 1.3
+;; Package-Requires: ((company "0.8.0") (math-symbol-lists "1.2"))
 ;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
@@ -29,7 +29,7 @@
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;;; Commentary:
-
+;;
 ;;; Code:
 
 (require 'math-symbol-lists)
@@ -41,13 +41,47 @@
   :group 'company
   :prefix "company-math-")
 
-(defcustom company-math-prefix-regexp "\\\\\\([^ \t]+\\)"
-  "Regexp matching the prefix of the company-math symbol.
-First subgroup must match the actual symbol to be used in the
-completion."
+(defcustom company-math-symbol-prefix "\\"
+  "Prefix to use for latex and unicode symbols."
   :group 'company-math
   :type 'string)
 
+(defcustom company-math-subscript-prefix "__"
+  "Prefix for unicode subscripts.
+When nil, no custom prefix is active.  Irrespective of the value
+of this variable, prefix composed of `company-math-symbol-prefix'
+and \"_\" is always active (\"\\_\").  This variable takes effect
+in a new Emacs session."
+  :group 'company-math
+  :type '(choice (const :tag "No Custom Prefix" nil)
+                 string))
+
+(defcustom company-math-superscript-prefix "^^"
+  "Prefix for unicode superscripts.
+When nil, no custom prefix is active.  Irrespective of the value
+of this variable, prefix composed of `company-math-symbol-prefix'
+and \"^\" is always active (\"\\^\").  This variable takes effect
+in a new Emacs session."
+  :group 'company-math
+  :type '(choice (const :tag "No Custom Prefix" nil)
+                 string))
+
+;; no more custom since since v.1.2
+(when (boundp 'company-math-prefix-regexp)
+  (warn "`company-math-prefix-regexp' is deprecated, please remove from your 
custom settings."))
+
+(defvar company-math--latex-prefix-regexp
+  (concat (regexp-quote company-math-symbol-prefix)
+          "[^ \t\n]+"))
+
+(let ((psym (regexp-quote company-math-symbol-prefix))
+      (psub (when company-math-symbol-prefix
+              (concat "\\|" (regexp-quote company-math-subscript-prefix))))
+      (psup (when company-math-superscript-prefix
+              (concat "\\|" (regexp-quote company-math-superscript-prefix)))))
+  (setq company-math--unicode-prefix-regexp
+        (concat "\\(" psym psub psup "\\)[^ \t\n]*")))
+
 (defcustom company-math-allow-unicode-symbols-in-faces t
   "List of faces to allow the insertion of Unicode symbols.
 When set to special value t, allow on all faces except those in
@@ -56,7 +90,7 @@ When set to special value t, allow on all faces except those 
in
   :type '(choice (const t)
                  (repeat :tag "Faces" symbol)))
 
-(defcustom company-math-allow-latex-symbols-in-faces '(tex-math 
font-latex-math-face)
+(defcustom company-math-allow-latex-symbols-in-faces '(tex-math 
font-latex-math-face org-latex-and-related)
   "List of faces to disallow the insertion of latex mathematical symbols.
 When set to special value t, allow on all faces except those in
 `company-math-disallow-latex-symbols-in-faces'."
@@ -77,27 +111,46 @@ When set to special value t, allow on all faces except 
those in
 
 ;;; INTERNALS
 
-(defun company-math--make-candidates (alist)
-  "Build a list of math symbols ready to be used in ac source.
-ALIST is one of the defined alist in package `symbols'.  Return a
-list of LaTeX symbols with text property :symbol being the
+(defun company-math--make-candidates (alist prefix)
+  "Build a list of math symbols ready to be used in a company backend.
+ALIST is one of the defined alist in package `math-symbol-lists'.
+PREFIX is a string to be prefixed to each symbol.  Return a list
+of LaTeX symbols with text property :symbol being the
 corresponding unicode symbol."
   (delq nil
         (mapcar
-         #'(lambda (el)
-             (let* ((tex (substring (nth 1 el) 1))
-                    (ch (and (nth 2 el) (decode-char 'ucs (nth 2 el))))
-                    (symb (and ch (char-to-string ch))))
-               (propertize tex :symbol symb)))
+         (lambda (el)
+           (let* ((tex (concat prefix (substring (nth 1 el) 1)))
+                  (ch (and (nth 2 el) (decode-char 'ucs (nth 2 el))))
+                  (symb (and ch (char-to-string ch))))
+             (propertize tex :symbol symb)))
          alist)))
 
+(defconst company-math--latex-commands
+  (mapcar (lambda (c) (concat company-math-symbol-prefix c)) 
math-symbol-list-latex-commands)
+  "List of LaTeX math completion candidates.")
+
 (defconst company-math--symbols
   (delete-dups
-   (append (company-math--make-candidates math-symbol-list-basic)
-           (company-math--make-candidates math-symbol-list-extended)))
-  "List of math completion candidates.")
-
-(defun company-math--prefix (allow-faces disallow-faces)
+   (append (company-math--make-candidates math-symbol-list-basic 
company-math-symbol-prefix)
+           (company-math--make-candidates math-symbol-list-extended 
company-math-symbol-prefix)))
+  "List of LaTeX math completion candidates.")
+
+(defconst company-math--unicode
+  (append
+   (append (when company-math-subscript-prefix
+             (company-math--make-candidates math-symbol-list-subscripts 
company-math-subscript-prefix))
+           (company-math--make-candidates math-symbol-list-subscripts (concat 
company-math-symbol-prefix "_"))
+           (when company-math-superscript-prefix
+             (company-math--make-candidates math-symbol-list-superscripts 
company-math-superscript-prefix))
+           (company-math--make-candidates math-symbol-list-superscripts 
(concat company-math-symbol-prefix "^")))
+   company-math--symbols)
+  "List of math completion candidates for unicode backend.")
+
+(defun company-math--prefix (regexp allow-faces disallow-faces)
+  "Response to company prefix command.
+REGEXP is the regexp, ALLOW-FACES and DISALLOW-FACES are list of
+various faces to allow or disallow completion on."
   (let* ((face (get-text-property (point) 'face))
          (face (or (car-safe face) face))
          (insertp (and (not (memq face disallow-faces))
@@ -105,65 +158,83 @@ corresponding unicode symbol."
                            (memq face allow-faces)))))
     (when insertp
       (save-excursion
-        (when (looking-back company-math-prefix-regexp (point-at-bol))
-          (match-string 1))))))
+        (let* ((ppss (syntax-ppss))
+               (min-point (if (nth 3 ppss)
+                              (max (nth 8 ppss) (point-at-bol))
+                            (point-at-bol))))
+          (when (looking-back regexp min-point 'greedy)
+            (match-string 0)))))))
 
 (defun company-math--substitute-unicode (symbol)
   "Substitute preceding latex command with with SYMBOL."
   (let ((pos (point))
         (inhibit-point-motion-hooks t))
-    (when (re-search-backward company-math-prefix-regexp)
-      (delete-region (match-beginning 0) pos)
+    (when (re-search-backward company-math--unicode-prefix-regexp) ; should 
always match
+      (goto-char (match-beginning 0))
+      ;; allow subsups to start with \
+      (let ((start (max (point-min) (- (point) (length 
company-math-symbol-prefix)))))
+        (when (string= (buffer-substring-no-properties start (point))
+                       company-math-symbol-prefix)
+          (goto-char start)))
+      (delete-region (point) pos)
       (insert symbol))))
 
 
 ;;; BACKENDS
 
 ;;;###autoload
-(defun company-latex-commands (command &optional arg &rest ignored)
-  "Company backend for latex commands."
+(defun company-latex-commands (command &optional arg &rest _ignored)
+  "Company backend for latex commands.
+COMMAND and ARG is as required by company backends."
   (interactive (list 'interactive))
   (cl-case command
     (interactive (company-begin-backend 'company-latex-commands))
     (prefix (unless (company-in-string-or-comment)
-              (company-math--prefix t '())))
-    (candidates (all-completions arg math-symbol-list-latex-commands))
+              (company-math--prefix company-math--latex-prefix-regexp t '())))
+    (candidates (all-completions arg company-math--latex-commands))
     (sorted t)))
 
 ;;;###autoload
-(defun company-math-symbols-latex (command &optional arg &rest ignored)
-  "Company backend for LaTeX mathematical symbols."
+(defun company-math-symbols-latex (command &optional arg &rest _ignored)
+  "Company backend for LaTeX mathematical symbols.
+COMMAND and ARG is as required by company backends."
   (interactive (list 'interactive))
   (cl-case command
     (interactive (company-begin-backend 'company-math-symbols-latex))
     (prefix (unless (company-in-string-or-comment)
-              (company-math--prefix company-math-allow-latex-symbols-in-faces
+              (company-math--prefix company-math--latex-prefix-regexp
+                                    company-math-allow-latex-symbols-in-faces
                                     
company-math-disallow-latex-symbols-in-faces)))
     (annotation (concat " " (get-text-property 0 :symbol arg)))
     (candidates (all-completions arg company-math--symbols))))
 
 ;;;###autoload
-(defun company-math-symbols-unicode (command &optional arg &rest ignored)
+(defun company-math-symbols-unicode (command &optional arg &rest _ignored)
   "Company backend for insertion of Unicode mathematical symbols.
+COMMAND and ARG is as required by company backends.
 See the unicode-math page [1] for a list of fonts that have a
-good support for mathematical symbols.
+good support for mathematical symbols. Unicode provides only a
+limited range of sub(super)scripts; see the wikipedia page [2]
+for details.
 
  [1] 
http://ftp.snt.utwente.nl/pub/software/tex/help/Catalogue/entries/unicode-math.html
-"
+ [2] https://en.wikipedia.org/wiki/Unicode_subscripts_and_superscripts";
   (interactive (list 'interactive))
   (cl-case command
     (interactive (company-begin-backend 'company-math-symbols-unicode))
-    (prefix (company-math--prefix company-math-allow-unicode-symbols-in-faces
+    (prefix (company-math--prefix company-math--unicode-prefix-regexp
+                                  company-math-allow-unicode-symbols-in-faces
                                   
company-math-disallow-unicode-symbols-in-faces))
     (annotation (concat " " (get-text-property 0 :symbol arg)))
     ;; Space added to ensure that completions are never typed in full.
     ;; See https://github.com/company-mode/company-mode/issues/476
-    (candidates (mapcar (lambda (candidate)
-                          (concat candidate " "))
-                        (all-completions arg company-math--symbols)))
+    (candidates (delq nil
+                      (mapcar (lambda (candidate)
+                                (when (get-text-property 0 :symbol candidate)
+                                  (concat candidate " ")))
+                              (all-completions arg company-math--unicode))))
     (post-completion (company-math--substitute-unicode
                       (get-text-property 0 :symbol arg)))))
 
-
 (provide 'company-math)
 ;;; company-math.el ends here
diff --git a/packages/company-math/readme.md b/packages/company-math/readme.md
index fa80258..bd780f6 100644
--- a/packages/company-math/readme.md
+++ b/packages/company-math/readme.md
@@ -2,11 +2,11 @@ This add-on defines three 
*[company-mode](http://company-mode.github.io/)* backe
 
 * `company-math-symbols-latex` - math latex tags (_by default, active only on 
latex math faces_)
 
-      
![symbols](https://raw.github.com/vspinu/company-math/master/img/latex-symbols.png)
+   
![symbols](https://raw.github.com/vspinu/company-math/master/img/latex-symbols.png)
 
-* `company-math-symbols-unicode`       - unicode symbols (_by default, active 
everywhere except math faces_)
+* `company-math-symbols-unicode`       - math unicode symbols and 
sub(super)scripts (_by default, active everywhere except math faces_)
 
-      
![math](https://raw.github.com/vspinu/company-math/master/img/unicode-symbols.png)
+   
![math](https://raw.github.com/vspinu/company-math/master/img/unicode-symbols.png)
 
 * `company-latex-commands`             - latex commands 
 
@@ -14,27 +14,32 @@ This add-on defines three 
*[company-mode](http://company-mode.github.io/)* backe
 
 Start math completion by typing the prefix <kbd>`\`</kbd> key. To select the
 completion type <kbd>RET</kbd>. Depending on the context and your configuration
-unicode symbol or latex tag will be inserted.
+unicode symbol or latex tag will be inserted. 
+
+Since version 1.2 sub(super)script completion is available for the
+`company-math-symbols-unicode` backend. Subscripts are inserted with either 
`__`
+or `\_` prefixes. Superscripts with `^^` or `\^`. Customize
+`company-math-subscript-prefix` and `company-math-superscript-prefix` if you
+don't like this default.
 
 ## Activation ##
 
-Install from [MELPA](http://melpa.milkbox.net/) repository.
+Install from ELPA or MELPA repositories.
 
 You can either register each backend globally:
 
 
-```lisp
+```elisp
 
 ;; global activation of the unicode symbol completion 
 (add-to-list 'company-backends 'company-math-symbols-unicode)
 
-
 ```
 
 or locally per emacs mode:
 
 
-```lisp
+```elisp
 
 ;; local configuration for TeX modes
 (defun my-latex-mode-setup ()
@@ -48,20 +53,20 @@ or locally per emacs mode:
 
 If you are using `AUCTeX` you might need to use `TeX-mode-hook` instead:
 
-```
-(add-hook TeX-mode-hook 'my-latex-mode-setup)
+```elisp
+(add-hook 'TeX-mode-hook 'my-latex-mode-setup)
 ```
 
-## Customization ##
+## Further Customization ##
 
-Set `company-tooltip-align-annotations` to t in order to allin symbols to the
-right as in the above previews.
+Set `company-tooltip-align-annotations` to t in order to align symbols to the
+right as in the snapshots from above.
 
 By default unicode symbols backend (`company-math-symbols-unicode`) is not
 active in latex math environments and latex math symbols
 (`company-math-symbols-latex`) is not available outside of math latex
-environmnts. You can use the following variables to adjust this behavior to 
your
-liking: `company-math-disallow-unicode-symbols-in-faces`,
+environments. You can use the following custom lists of faces to change this
+behavior: `company-math-disallow-unicode-symbols-in-faces`,
 `company-math-allow-unicode-symbols-in-faces`,
 `company-math-disallow-latex-symbols-in-faces`,
 `company-math-allow-latex-symbols-in-faces`.
diff --git a/packages/company/NEWS.md b/packages/company/NEWS.md
index 72f86d7..8404398 100644
--- a/packages/company/NEWS.md
+++ b/packages/company/NEWS.md
@@ -1,5 +1,23 @@
 # History of user-visible changes
 
+## 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.
diff --git a/packages/company/company-clang.el 
b/packages/company/company-clang.el
index d43eebb..c0899b6 100644
--- a/packages/company/company-clang.el
+++ b/packages/company/company-clang.el
@@ -1,6 +1,6 @@
 ;;; company-clang.el --- company-mode completion backend for Clang  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2009, 2011, 2013-2017  Free Software Foundation, Inc.
+;; Copyright (C) 2009, 2011, 2013-2019  Free Software Foundation, Inc.
 
 ;; Author: Nikolaj Schumacher
 
@@ -111,7 +111,7 @@ or automatically through a custom 
`company-clang-prefix-guesser'."
 ;; 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_:]*\\)\\(?: : \\(.*\\)$\\)?$")
+  "^COMPLETION: \\_<\\(%s[a-zA-Z0-9_:]*\\)\\(?:\\(?: (InBase)\\)? : 
\\(.*\\)$\\)?$")
 
 (defconst company-clang--error-buffer-name "*clang-error*")
 
@@ -134,12 +134,11 @@ or automatically through a custom 
`company-clang-prefix-guesser'."
           (when (string-match ":" match)
             (setq match (substring match 0 (match-beginning 0)))))
         (let ((meta (match-string-no-properties 2)))
-          (unless (equal match meta)
-            (when meta
-              (put-text-property 0 1 'meta
-                                 (company-clang--strip-formatting meta)
-                                 match))
-            (push match lines)))))
+          (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)
diff --git a/packages/company/company-tng.el b/packages/company/company-tng.el
index a1d7173..9b495c6 100644
--- a/packages/company/company-tng.el
+++ b/packages/company/company-tng.el
@@ -63,6 +63,26 @@
 ;;
 ;; 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 use
+;; `post-completion' (for actions such as expanding snippets in
+;; company-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 disables
+;; `post-completion' in all backends.
+;;
+;; 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:
 
diff --git a/packages/company/company.el b/packages/company/company.el
index 47f353e..44177e7 100644
--- a/packages/company/company.el
+++ b/packages/company/company.el
@@ -1,11 +1,11 @@
 ;;; company.el --- Modular text completion framework  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2009-2018  Free Software Foundation, Inc.
+;; Copyright (C) 2009-2019  Free Software Foundation, Inc.
 
 ;; Author: Nikolaj Schumacher
 ;; Maintainer: Dmitry Gutov <address@hidden>
 ;; URL: http://company-mode.github.io/
-;; Version: 0.9.9
+;; Version: 0.9.10
 ;; Keywords: abbrev, convenience, matching
 ;; Package-Requires: ((emacs "24.3"))
 
@@ -584,6 +584,7 @@ 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
@@ -632,6 +633,14 @@ commands in the `company-' namespace, abort completion."
   :type '(choice (const :tag "off" nil)
                  (const :tag "on" t)))
 
+(defcustom company-show-numbers-function #'company--show-numbers
+  "Function called to get custom quick-access numbers for the first then 
candidates.
+
+If nil falls back to default function that generates 1...8, 9, 0. The function 
get
+the number of candidates (from 1 to 10 means 1st to 10th candidate) 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)
@@ -832,7 +841,7 @@ means that `company-mode' is always turned on except in 
`message-mode' buffers."
 (defun company--company-command-p (keys)
   "Checks if the keys are part of company's overriding keymap"
   (or (equal [company-dummy-event] keys)
-      (lookup-key company-my-keymap keys)))
+      (commandp (lookup-key company-my-keymap keys))))
 
 ;; Hack:
 ;; Emacs calculates the active keymaps before reading the event.  That means we
@@ -1207,9 +1216,8 @@ can retrieve meta-data for them."
                   common))
             (car company-candidates)))))
 
-(defun company-calculate-candidates (prefix)
-  (let ((candidates (cdr (assoc prefix company-candidates-cache)))
-        (ignore-case (company-call-backend 'ignore-case)))
+(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))
@@ -1227,17 +1235,17 @@ can retrieve meta-data for them."
           ;; Save in cache.
           (push (cons prefix candidates) company-candidates-cache)))
     ;; Only now apply the predicate and transformers.
-    (setq candidates (company--postprocess-candidates candidates))
-    (when candidates
-      (if (or (cdr candidates)
-              (not (eq t (compare-strings (car candidates) nil nil
-                                          prefix nil nil ignore-case))))
-          candidates
-        ;; Already completed and unique; don't start.
-        t))))
+    (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.
@@ -1246,8 +1254,7 @@ can retrieve meta-data for them."
               (company-call-backend-raw 'candidates prefix))))
     (if (not (eq (car c) :async))
         c
-      (let ((res 'none)
-            (inhibit-redisplay t))
+      (let ((res 'none))
         (funcall
          (cdr c)
          (lambda (candidates)
@@ -1538,14 +1545,14 @@ prefix match (same case) will be prioritized."
     ;; 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))))
+              (company-calculate-candidates new-prefix ignore-case))))
     (cond
-     ((eq c t)
-      ;; t means complete/unique.
+     ((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.
@@ -1583,23 +1590,29 @@ prefix match (same case) will be prioritized."
               (company--multi-backend-adapter backend 'prefix)))
       (when prefix
         (when (company--good-prefix-p prefix)
-          (setq company-prefix (company--prefix-str prefix)
-                company-backend backend
-                c (company-calculate-candidates company-prefix))
-          (if (not (consp c))
-              (progn
-                (when company--manual-action
-                  (message "No completion found"))
-                (when (eq c t)
-                  ;; t means complete/unique.
-                  ;; Run the hooks anyway, to e.g. clear the cache.
-                  (company-cancel 'unique)))
-            (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)))
+          (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 ()
@@ -1636,8 +1649,6 @@ prefix match (same case) will be prioritized."
     (company-call-frontends 'hide)
     (company-enable-overriding-keymap nil)
     (when prefix
-      ;; FIXME: RESULT can also be e.g. `unique'.  We should call
-      ;; `company-completion-finished-hook' in that case, with right argument.
       (if (stringp result)
           (let ((company-backend backend))
             (run-hook-with-args 'company-completion-finished-hook result)
@@ -1692,25 +1703,28 @@ prefix match (same case) will be prioritized."
               (company--perform)))
           (if company-candidates
               (company-call-frontends 'post-command)
-            (and (or (numberp company-idle-delay)
-                     ;; Deprecated.
-                     (eq company-idle-delay t))
-                 (not defining-kbd-macro)
-                 (company--should-begin)
-                 (setq company-timer
-                       (run-with-timer (company--idle-delay) nil
-                                       'company-idle-begin
-                                       (current-buffer) (selected-window)
-                                       (buffer-chars-modified-tick) 
(point))))))
+            (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 ()
-  (if (memql company-idle-delay '(t 0 0.0))
-      0.01
-    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
@@ -1817,7 +1831,8 @@ each one wraps a part of the input string."
           (and (not (string= re ""))
                company-search-filtering
                (lambda (candidate) (string-match re candidate))))
-         (cc (company-calculate-candidates company-prefix)))
+         (cc (company-calculate-candidates company-prefix
+                                           (company-call-backend 
'ignore-case))))
     (unless cc (user-error "No match"))
     (company-update-candidates cc)))
 
@@ -2173,10 +2188,12 @@ inserted."
   (interactive)
   (when (company-manual-begin)
     (if (or company-selection-changed
-            (eq last-command 'company-complete-common))
+            (and (eq real-last-command 'company-complete)
+                 (eq last-command 'company-complete-common)))
         (call-interactively 'company-complete-selection)
       (call-interactively 'company-complete-common)
-      (setq this-command '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.
@@ -2632,6 +2649,9 @@ If SHOW-VERSION is non-nil, show the version in the echo 
area."
           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))
@@ -2784,7 +2804,7 @@ If SHOW-VERSION is non-nil, show the version in the echo 
area."
           (when (< numbered 10)
             (cl-decf width 2)
             (cl-incf numbered)
-            (setq right (concat (format " %d" (mod numbered 10)) right)))
+            (setq right (concat (funcall company-show-numbers-function 
numbered) right)))
           (push (concat
                  (company-fill-propertize str annotation
                                           width (equal i selection)
@@ -3047,6 +3067,9 @@ Delay is determined by `company-tooltip-idle-delay'."
 (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))))
 
diff --git a/packages/company/test/capf-tests.el 
b/packages/company/test/capf-tests.el
index c8d4202..80a204d 100644
--- a/packages/company/test/capf-tests.el
+++ b/packages/company/test/capf-tests.el
@@ -26,6 +26,7 @@
 
 (require 'company-tests)
 (require 'company-capf)
+(require 'cl-lib)
 
 (defmacro company-capf-with-buffer (contents &rest body)
   (declare (indent 0) (debug (sexp &rest form)))
@@ -55,6 +56,19 @@
     (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
@@ -66,10 +80,8 @@
            (render
             (and cand
                  (company-fill-propertize cand nil (length cand) nil nil 
nil))))
-      ;; remove `font-lock-face' and `mouse-face' text properties that aren't
-      ;; relevant to our test
-      (remove-list-of-text-properties
-       0 (length cand) '(font-lock-face mouse-face) render)
+      ;; remove text properties that aren't relevant to our test
+      (company--remove-but-these-properties render '(face))
       (should
        (ert-equal-including-properties
         render
@@ -99,10 +111,8 @@
            (render
             (and cand
                  (company-fill-propertize cand nil (length cand) nil nil 
nil))))
-      ;; remove `font-lock-face' and `mouse-face' text properties that aren't
-      ;; relevant to our test
-      (remove-list-of-text-properties
-       0 (length cand) '(font-lock-face mouse-face) render)
+      ;; remove text properties that aren't relevant to our test
+      (company--remove-but-these-properties render '(face))
       (should
        (ert-equal-including-properties
         render
@@ -125,10 +135,8 @@
            (render
             (and cand
                  (company-fill-propertize cand nil (length cand) nil nil 
nil))))
-      ;; remove `font-lock-face' and `mouse-face' text properties that aren't
-      ;; relevant to our test
-      (remove-list-of-text-properties
-       0 (length cand) '(font-lock-face mouse-face) render)
+      ;; remove text properties that aren't relevant to our test
+      (company--remove-but-these-properties render '(face))
       (should
        (ert-equal-including-properties
         render
diff --git a/packages/company/test/core-tests.el 
b/packages/company/test/core-tests.el
index 2e0c77f..d7f0103 100644
--- a/packages/company/test/core-tests.el
+++ b/packages/company/test/core-tests.el
@@ -48,6 +48,32 @@
       (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)
@@ -127,7 +153,7 @@
                    (annotation "3")
                    (candidates '("e"))
                    (post-completion "74"))))))
-    (let ((candidates (company-calculate-candidates nil)))
+    (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))))
diff --git a/packages/debbugs/Debbugs.wsdl b/packages/debbugs/Debbugs.wsdl
index 24ef93b..c50d78a 100644
--- a/packages/debbugs/Debbugs.wsdl
+++ b/packages/debbugs/Debbugs.wsdl
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<!-- Copyright (C) 2011-2018  Free Software Foundation, Inc.
+<!-- Copyright (C) 2011-2019  Free Software Foundation, Inc.
 
 This file is not part of GNU Emacs.
 
diff --git a/packages/debbugs/debbugs-browse.el 
b/packages/debbugs/debbugs-browse.el
index ee00926..5839bd5 100644
--- a/packages/debbugs/debbugs-browse.el
+++ b/packages/debbugs/debbugs-browse.el
@@ -1,6 +1,6 @@
 ;; debbugs-browse.el --- browse bug URLs with debbugs-gnu or debbugs-org
 
-;; Copyright (C) 2015-2018 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2019 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <address@hidden>
 ;; Keywords: comm, hypermedia, maint
@@ -28,7 +28,7 @@
 
 ;;; Code:
 
-(defcustom debbugs-browse-function 'debbugs-gnu-bugs
+(defcustom debbugs-browse-function #'debbugs-gnu-bugs
   "The debbugs function used for showing bugs.
 This can be either `debbugs-gnu-bugs' or `debbugs-org-bugs'."
   :group 'debbugs-gnu
@@ -59,13 +59,11 @@ positive, and disable it otherwise.  If called from Lisp, 
enable
 the mode if ARG is omitted or nil.
 The customer option `debbugs-browse-function' controls, which of
 the two packages is used for showing bugs."
-  nil
-  ""
-  nil
+  :global nil
   (if debbugs-browse-mode
       (add-function
-       :before-until (local 'browse-url-browser-function) 'debbugs-browse-url)
-    (remove-function (local 'browse-url-browser-function) 
'debbugs-browse-url)))
+       :before-until (local 'browse-url-browser-function) #'debbugs-browse-url)
+    (remove-function (local 'browse-url-browser-function) 
#'debbugs-browse-url)))
 
 (provide 'debbugs-browse)
 ;;; debbugs-browse.el ends here
diff --git a/packages/debbugs/debbugs-gnu.el b/packages/debbugs/debbugs-gnu.el
index 5466d65..272441b 100644
--- a/packages/debbugs/debbugs-gnu.el
+++ b/packages/debbugs/debbugs-gnu.el
@@ -1,6 +1,6 @@
 ;;; debbugs-gnu.el --- interface for the GNU bug tracker  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2011-2018 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2019 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <address@hidden>
 ;;         Michael Albinus <address@hidden>
@@ -91,6 +91,7 @@
 
 ;;   RET: Show corresponding messages in Gnus/Rmail
 ;;   "C": Send a control message
+;;   "E": Make (but don't yet send) a control message
 ;;   "t": Mark the bug locally as tagged
 ;;   "b": Show bugs this bug is blocked by
 ;;   "B": Show bugs this bug is blocking
@@ -107,7 +108,8 @@
 ;;   "w": Display all the currently selected bug reports
 
 ;; When you visit the related bug messages in Gnus or Rmail, you could
-;; also send control messages by keystroke "C".
+;; also send or make control messages by keystroke "C" or "E" in the
+;; message summary buffer.
 
 ;; In the header line of every bug list page, you can toggle sorting
 ;; per column by selecting a column with the mouse.  The sorting
@@ -149,6 +151,13 @@
 ;; presented, and in the latter case the last 10 bugs are shown,
 ;; counting from the highest bug number in the repository.
 
+;; For posting commit to bugs, or constructing a bug closing message
+;; based on a pushed commit, use the command
+;;
+;;   M-x debbugs-gnu-pick-commits
+;;
+;; (bound to "c" in *vc-change-log* buffers).  Then follow the prompts.
+
 ;;; Code:
 
 (require 'debbugs)
@@ -168,13 +177,19 @@
 (autoload 'gnus-summary-show-article "gnus-sum")
 (autoload 'log-edit-insert-changelog "log-edit")
 (autoload 'mail-header-subject "nnheader")
+(autoload 'message-add-header "message")
 (autoload 'message-goto-body "message")
 (autoload 'message-make-from "message")
+(autoload 'message-narrow-to-headers "message")
 (autoload 'rmail-get-new-mail "rmail")
 (autoload 'rmail-show-message "rmail")
 (autoload 'rmail-summary "rmailsum")
 (autoload 'vc-dir-hide-up-to-date "vc-dir")
 (autoload 'vc-dir-mark "vc-dir")
+(autoload 'vc-git--call "vc-git")
+
+(declare-function log-view-current-entry "log-view" (&optional pos move))
+(declare-function log-view-current-tag "log-view" (&optional pos))
 
 (defvar compilation-in-progress)
 (defvar diff-file-header-re)
@@ -182,6 +197,7 @@
 (defvar gnus-posting-styles)
 (defvar gnus-save-duplicate-list)
 (defvar gnus-suppress-duplicates)
+(defvar message-sent-message-via)
 (defvar rmail-current-message)
 (defvar rmail-mode-map)
 (defvar rmail-summary-mode-map)
@@ -205,7 +221,6 @@
   ;; <https://debbugs.gnu.org/Developer.html#severities>
   ;; /ssh:debbugs:/etc/debbugs/config @gSeverityList
   ;; We don't use "critical" and "grave".
-  :group 'debbugs-gnu
   :type '(set (const "serious")
              (const "important")
              (const "normal")
@@ -230,20 +245,19 @@ If nil, the value of `send-mail-function' is used 
instead."
 
 (defcustom debbugs-gnu-suppress-closed t
   "If non-nil, don't show closed bugs."
-  :group 'debbugs-gnu
   :type 'boolean
   :version "25.1")
 
 (defconst debbugs-gnu-all-severities
-  (mapcar 'cadr (cdr (get 'debbugs-gnu-default-severities 'custom-type)))
+  (mapcar #'cadr (cdr (get 'debbugs-gnu-default-severities 'custom-type)))
   "List of all possible severities.")
 
 (defcustom debbugs-gnu-default-packages '("emacs")
   "The list of packages to be searched for."
   ;; <https://debbugs.gnu.org/Packages.html>
   ;; <https://debbugs.gnu.org/cgi/pkgindex.cgi>
-  :group 'debbugs-gnu
-  :type `(set (const "adns")
+  :type `(set (const "ada-mode")
+             (const "adns")
              (const "auctex")
              (const "automake")
              (const "cc-mode")
@@ -274,10 +288,10 @@ If nil, the value of `send-mail-function' is used 
instead."
                      'help-echo "This is a pseudo-package for test."))
              (const "vc-dwim")
              (const "woodchuck"))
-  :version "25.2")
+  :version "27.1")
 
 (defconst debbugs-gnu-all-packages
-  (mapcar 'cadr (cdr (get 'debbugs-gnu-default-packages 'custom-type)))
+  (mapcar #'cadr (cdr (get 'debbugs-gnu-default-packages 'custom-type)))
   "List of all possible package names.")
 
 (defcustom debbugs-gnu-default-suppress-bugs
@@ -287,7 +301,6 @@ An element of this list is a cons cell \(KEY . REGEXP\), 
with key
 being returned by `debbugs-get-status', and REGEXP a regular
 expression matching the corresponding value, a string.  Showing
 suppressed bugs is toggled by `debbugs-gnu-toggle-suppress'."
-  :group 'debbugs-gnu
   :type '(alist :key-type symbol :value-type regexp)
   :version "24.1")
 
@@ -295,7 +308,6 @@ suppressed bugs is toggled by 
`debbugs-gnu-toggle-suppress'."
   "The email backend to use for reading bug report email exchange.
 If this is `gnus', the default, use Gnus.
 If this is `rmail', use Rmail instead."
-  :group 'debbugs-gnu
   :type '(radio (function-item :tag "Use Gnus" gnus)
                (function-item :tag "Use Rmail" rmail))
   :version "25.1")
@@ -359,7 +371,6 @@ The specification which bugs shall be suppressed is taken 
from
 
 (defcustom debbugs-gnu-emacs-current-release "25.2"
   "The current Emacs relase developped for."
-  :group 'debbugs-gnu
   :type '(choice (const "24.5")
                 (const "25.1")
                 (const "25.2")
@@ -404,7 +415,11 @@ marked as \"client-side filter\"."
   (interactive)
 
   (unwind-protect
-      (let ((date-format 
"\\([[:digit:]]\\{4\\}\\)-\\([[:digit:]]\\{1,2\\}\\)-\\([[:digit:]]\\{1,2\\}\\)")
+      (let ((date-format
+            (eval-when-compile
+              (concat"\\([[:digit:]]\\{4\\}\\)-"
+                     "\\([[:digit:]]\\{1,2\\}\\)-"
+                     "\\([[:digit:]]\\{1,2\\}\\)")))
            key val1 val2 phrase severities packages archivedp)
 
        ;; Check for the phrase.
@@ -454,14 +469,14 @@ marked as \"client-side filter\"."
               severities
               (completing-read-multiple
                "Enter severities: " debbugs-gnu-all-severities nil t
-               (mapconcat 'identity debbugs-gnu-default-severities ","))))
+               (mapconcat #'identity debbugs-gnu-default-severities ","))))
 
             ((equal key "package")
              (setq
               packages
               (completing-read-multiple
                "Enter packages: " debbugs-gnu-all-packages nil t
-               (mapconcat 'identity debbugs-gnu-default-packages ","))))
+               (mapconcat #'identity debbugs-gnu-default-packages ","))))
 
             ((equal key "archive")
              ;; We simplify, by assuming just archived bugs are requested.
@@ -553,7 +568,9 @@ marked as \"client-side filter\"."
             (t (throw :finished nil)))))
 
        ;; Do the search.
-       (debbugs-gnu severities packages archivedp))))
+       (debbugs-gnu severities packages archivedp)
+       (when (called-interactively-p 'interactive)
+         (message "Search finished")))))
 
 ;;;###autoload
 (defun debbugs-gnu-patches ()
@@ -571,12 +588,12 @@ marked as \"client-side filter\"."
       (setq severities
            (completing-read-multiple
             "Severities: " debbugs-gnu-all-severities nil t
-            (mapconcat 'identity debbugs-gnu-default-severities ",")))
+            (mapconcat #'identity debbugs-gnu-default-severities ",")))
       ;; The next parameters are asked only when there is a prefix.
       (if current-prefix-arg
          (completing-read-multiple
           "Packages: " debbugs-gnu-all-packages nil t
-          (mapconcat 'identity debbugs-gnu-default-packages ","))
+          (mapconcat #'identity debbugs-gnu-default-packages ","))
        debbugs-gnu-default-packages)
       (when current-prefix-arg
        (setq archivedp (y-or-n-p "Show archived bugs?")))
@@ -593,7 +610,7 @@ marked as \"client-side filter\"."
                   (not debbugs-gnu-local-tags))
          (with-temp-buffer
            (insert-file-contents debbugs-gnu-persistency-file)
-           (eval (read (current-buffer)))))
+           (eval (read (current-buffer)) t)))
        ;; Per default, we suppress retrieved unwanted bugs.
        (when (and (called-interactively-p 'any)
                   debbugs-gnu-suppress-closed)
@@ -668,13 +685,13 @@ marked as \"client-side filter\"."
      (phrase
       (mapcar
        (lambda (x) (cdr (assoc "id" x)))
-       (apply 'debbugs-search-est args)))
+       (apply #'debbugs-search-est args)))
      ;; User tags.
      (tags
       (setq args (mapcar (lambda (x) (if (eq x :package) :user x)) args))
-      (apply 'debbugs-get-usertag args))
+      (apply #'debbugs-get-usertag args))
      ;; Otherwise, we retrieve the bugs from the server.
-     (t (apply 'debbugs-get-bugs args)))))
+     (t (apply #'debbugs-get-bugs args)))))
 
 (defun debbugs-gnu-show-reports (&optional offline)
   "Show bug reports.
@@ -700,7 +717,7 @@ are taken from the cache instead."
     (dolist (status
             (let ((debbugs-cache-expiry (if offline nil debbugs-cache-expiry))
                   ids)
-              (apply 'debbugs-get-status
+              (apply #'debbugs-get-status
                      (if offline
                          (progn
                            (maphash (lambda (key _elem)
@@ -725,17 +742,19 @@ are taken from the cache instead."
             merged)
        (unless (equal (cdr (assq 'pending status)) "pending")
          (setq words (append words (list (cdr (assq 'pending status))))))
+       (when (cdr (assq 'fixed status))
+         (setq words (append words '("fixed"))))
        (let ((packages (cdr (assq 'package status))))
          (dolist (elt packages)
            (when (member elt debbugs-gnu-default-packages)
              (setq packages (delete elt packages))))
          (setq words (append words packages)))
        (when (setq merged (cdr (assq 'mergedwith status)))
-         (setq words (append (mapcar 'number-to-string merged) words)))
+         (setq words (append (mapcar #'number-to-string merged) words)))
        ;; `words' could contain the same word twice, for example
        ;; "fixed" from `keywords' and `pending'.
        (setq words (mapconcat
-                    'identity (cl-delete-duplicates words :test 'equal) ","))
+                    #'identity (cl-delete-duplicates words :test 'equal) ","))
        (when (or (not merged)
                  (not (let ((found nil))
                         (dolist (id (if (listp merged)
@@ -914,6 +933,7 @@ Used instead of `tabulated-list-print-entry'."
     (define-key map "g" 'debbugs-gnu-rescan)
     (define-key map "R" 'debbugs-gnu-show-all-blocking-reports)
     (define-key map "C" 'debbugs-gnu-send-control-message)
+    (define-key map "E" 'debbugs-gnu-make-control-message)
 
     (define-key map "s" 'debbugs-gnu-toggle-sort)
     (define-key map "t" 'debbugs-gnu-toggle-tag)
@@ -1144,7 +1164,7 @@ Used instead of `tabulated-list-print-entry'."
        (status (debbugs-gnu-current-status)))
     (if (null (cdr (assq 'blockedby status)))
        (message "Bug %d is not blocked by any other bug" id)
-      (apply 'debbugs-gnu-bugs (cdr (assq 'blockedby status))))))
+      (apply #'debbugs-gnu-bugs (cdr (assq 'blockedby status))))))
 
 (defun debbugs-gnu-show-blocking-reports ()
   "Display all bug reports this report is blocking."
@@ -1153,7 +1173,7 @@ Used instead of `tabulated-list-print-entry'."
        (status (debbugs-gnu-current-status)))
     (if (null (cdr (assq 'blocks status)))
        (message "Bug %d is not blocking any other bug" id)
-      (apply 'debbugs-gnu-bugs (cdr (assq 'blocks status))))))
+      (apply #'debbugs-gnu-bugs (cdr (assq 'blocks status))))))
 
 (defun debbugs-gnu-show-all-blocking-reports (&optional release)
   "Narrow the display to just the reports that are blocking an Emacs release."
@@ -1162,7 +1182,7 @@ Used instead of `tabulated-list-print-entry'."
     (if current-prefix-arg
        (completing-read
         "Emacs release: "
-        (mapcar 'identity debbugs-gnu-emacs-blocking-reports)
+        (mapcar #'identity debbugs-gnu-emacs-blocking-reports)
         nil t debbugs-gnu-emacs-current-release)
       debbugs-gnu-emacs-current-release)))
 
@@ -1270,7 +1290,10 @@ interest to you."
           (error "No bug on the current line"))))
 
 (defun debbugs-gnu-current-status ()
-  (get-text-property (line-beginning-position) 'tabulated-list-id))
+  ;; FIXME: `debbugs-org-mode' shouldn't be mentioned here.
+  (when (or (derived-mode-p 'debbugs-gnu-mode)
+           (bound-and-true-p debbugs-org-mode))
+    (get-text-property (line-beginning-position) 'tabulated-list-id)))
 
 (defun debbugs-gnu-display-status (query filter status)
   "Display the query, filter and status of the report on the current line."
@@ -1321,18 +1344,26 @@ MERGED is the list of bugs merged with this one."
         (format "Re: bug#%d: %s" id (cdr (assq 'subject status))))
     (rmail-summary)
     (define-key rmail-summary-mode-map "C" 'debbugs-gnu-send-control-message)
+    (define-key rmail-summary-mode-map "E" 'debbugs-gnu-make-control-message)
     (set-window-text-height nil 10)
     (other-window 1)
     (define-key rmail-mode-map "C" 'debbugs-gnu-send-control-message)
+    (define-key rmail-mode-map "E" 'debbugs-gnu-make-control-message)
     (rmail-show-message 1)))
 
+(defcustom debbugs-gnu-lars-workflow nil
+  "If non-nil, set some Gnus vars as preferred by Lars."
+  :type 'boolean
+  :version "27.1")
+
 (defun debbugs-read-emacs-bug-with-gnus (id status merged)
   "Read email exchange for debbugs bug ID.
 STATUS is the bug's status list.
 MERGED is the list of bugs merged with this one."
   (require 'gnus-dup)
-  (setq gnus-suppress-duplicates t
-       gnus-save-duplicate-list t)
+  (when debbugs-gnu-lars-workflow
+    (setq gnus-suppress-duplicates t
+         gnus-save-duplicate-list t))
   ;; Use Gnus.
   (gnus-read-ephemeral-emacs-bug-group
    (cons id (if (listp merged) merged (list merged)))
@@ -1365,6 +1396,7 @@ MERGED is the list of bugs merged with this one."
 (defvar debbugs-gnu-summary-mode-map
   (let ((map (make-sparse-keymap)))
     (define-key map "C" 'debbugs-gnu-send-control-message)
+    (define-key map "E" 'debbugs-gnu-make-control-message)
     (define-key map [(meta m)] 'debbugs-gnu-apply-patch)
     map))
 
@@ -1453,15 +1485,46 @@ returned by `debbugs-gnu-bugs'."
          ((string-equal from "")
           (append
            (mapcar
-            'number-to-string
+            #'number-to-string
             (debbugs-newest-bugs (string-to-number to)))
            result))
          (t (append
              (mapcar
-              'number-to-string
+              #'number-to-string
               (number-sequence (string-to-number from) (string-to-number to)))
              result))))))))
 
+
+(defconst debbugs-gnu-control-message-keywords
+  '("serious" "important" "normal" "minor" "wishlist"
+    "done" "donenotabug" "donewontfix" "doneunreproducible"
+    "invalid" ; done+notabug+wontfix
+    "unarchive" "unmerge" "reopen" "close"
+    "merge" "forcemerge"
+    "block" "unblock"
+    "owner" "noowner"
+    "reassign"
+    "retitle"
+    "forwarded" "notforwarded"
+    ;; 'notfixed <bugnum> <version>' works, even though it's
+    ;; undocumented at debbugs.gnu.org.
+    "fixed" "found" "notfound" "notfixed"
+    "patch" "wontfix" "moreinfo" "unreproducible" "notabug"
+    "pending" "help" "security" "confirmed" "easy"
+    "usertag"
+    "documentation" ;; usertag:emacs.documentation
+    ))
+
+(defconst debbugs-gnu-control-message-commands-regexp
+  (concat "^" (regexp-opt (cl-list* "#" "tags" "severity" "user"
+                                    debbugs-gnu-control-message-keywords))
+          " .*$"))
+
+(defconst debbugs-gnu-control-message-end-regexp
+  (concat "^" (regexp-opt '("--" "quit" "stop"
+                            "thank" "thanks" "thankyou" "thank you"))
+          "$"))
+
 (defun debbugs-gnu-send-control-message (message &optional reverse)
   "Send a control message for the current bug report.
 You can set the severity or add a tag, or close the report.  If
@@ -1472,124 +1535,486 @@ If given a prefix, and given a tag to set, the tag 
will be
 removed instead."
   (interactive
    (list (completing-read
-         "Control message: "
-         '("serious" "important" "normal" "minor" "wishlist"
-           "done" "donenotabug" "donewontfix" "doneunreproducible"
-           "unarchive" "unmerge" "reopen" "close"
-           "merge" "forcemerge"
-           "block" "unblock"
-           "owner" "noowner"
-           "forwarded" "notforwarded"
-           "invalid"
-           "reassign"
-           "retitle"
-           "patch" "wontfix" "moreinfo" "unreproducible" "fixed" "notabug"
-           "pending" "help" "security" "confirmed" "easy"
-           "usertag")
-         nil t)
+          "Control message: " debbugs-gnu-control-message-keywords nil t)
         current-prefix-arg))
-  (let* ((id (or (debbugs-gnu-current-id t)
-                debbugs-gnu-bug-number ; Set on group entry.
-                (debbugs-gnu-guess-current-id)))
-        (status (debbugs-gnu-current-status))
-        (version
-         (when (and
-                (member message '("close" "done"))
-                (member "emacs" (cdr (assq 'package status))))
-           (read-string
-            "Version: "
-            (cond
-             ;; Emacs development versions.
-             ((if (boundp 'emacs-build-number)
-                  (string-match
-                   "^\\([0-9]+\\)\\.\\([0-9]+\\)\\.\\([0-9]+\\)" emacs-version)
-                (string-match
-                 "^\\([0-9]+\\)\\.\\([0-9]+\\)\\.\\([0-9]+\\)\\." 
emacs-version))
-              (format "%s.%d"
-                      (match-string 1 emacs-version)
-                      (1+ (string-to-number (match-string 2 emacs-version)))))
-             ;; Emacs release versions.
-             ((if (boundp 'emacs-build-number)
-                  (string-match
-                   "^\\([0-9]+\\)\\.\\([0-9]+\\)$" emacs-version)
-                (string-match
-                 "^\\([0-9]+\\)\\.\\([0-9]+\\)\\.\\([0-9]+\\)$" emacs-version))
-              (format "%s.%s"
-                      (match-string 1 emacs-version)
-                      (match-string 2 emacs-version)))
-             (t emacs-version))))))
+  (let ((id (or (debbugs-gnu-current-id t)
+                debbugs-gnu-bug-number       ; Set on group entry.
+                (debbugs-gnu-guess-current-id))))
     (with-temp-buffer
-      (insert "To: address@hidden\n"
-             "From: " (message-make-from) "\n"
-             (format "Subject: control message for bug #%d\n" id)
-             mail-header-separator
-             "\n"
-             (cond
-              ((member message '("unarchive" "unmerge" "reopen"
-                                 "noowner" "notforwarded"))
-               (format "%s %d\n" message id))
-              ((member message '("merge" "forcemerge"))
-               (format
-                "%s %d %s\n" message id
-                (mapconcat
-                 'identity
-                 (debbugs-gnu-expand-bug-number-list
-                  (completing-read-multiple
-                   (format "%s with bug(s) #: " (capitalize message))
-                   debbugs-gnu-completion-table))
-                 " ")))
-              ((member message '("block" "unblock"))
-               (format
-                "%s %d by %s\n" message id
-                (mapconcat
-                 'identity
-                 (debbugs-gnu-expand-bug-number-list
-                  (completing-read-multiple
-                   (format "%s with bug(s) #: " (capitalize message))
-                   (if (equal message "unblock")
-                       (mapcar 'number-to-string
-                               (cdr (assq 'blockedby status)))
-                     debbugs-gnu-completion-table)
-                   nil (and (equal message "unblock") status)))
-                 " ")))
-              ((equal message "owner")
-               (format "owner %d !\n" id))
-              ((equal message "retitle")
-               (format "retitle %d %s\n" id (read-string "New title: ")))
-              ((equal message "reassign")
-               (format "reassign %d %s\n" id (read-string "Package(s): ")))
-              ((equal message "forwarded")
-               (format "forwarded %d %s\n" id (read-string "Forwarded to: ")))
-              ((equal message "close")
-               (format "close %d %s\n" id (or version "")))
-              ((equal message "done")
-               (format "tags %d fixed\nclose %d %s\n" id id (or version "")))
-              ((member message '("donenotabug" "donewontfix"
-                                 "doneunreproducible"))
-               (format "tags %d %s\nclose %d\n" id (substring message 4) id))
-              ((member message '("serious" "important" "normal"
-                                 "minor" "wishlist"))
-               (format "severity %d %s\n" id message))
-              ((equal message "invalid")
-               (format "tags %d notabug\ntags %d wontfix\nclose %d\n"
-                       id id id))
-              ((equal message "usertag")
-               (format "user %s\nusertag %d %s\n"
-                       (completing-read
-                        "Package name or email address: "
-                        (append
-                         debbugs-gnu-all-packages (list user-mail-address))
-                        nil nil (car debbugs-gnu-default-packages))
-                       id (read-string "User tag: ")))
-              (t
-               (format "tags %d%s %s\n"
-                       id (if reverse " -" "")
-                       message))))
+      (debbugs-gnu-make-control-message
+       message id reverse (current-buffer))
       (funcall (or debbugs-gnu-send-mail-function send-mail-function))
-      (remhash id debbugs-cache-data)
       (message-goto-body)
       (message "Control message sent:\n%s"
-              (buffer-substring-no-properties (point) (1- (point-max)))))))
+               (buffer-substring-no-properties (point) (1- (point-max)))))))
+
+(defun debbugs-gnus-implicit-ids ()
+  "Return a list of bug IDs guessed from the current buffer."
+  (delq nil (delete-dups
+             (list (debbugs-gnu-current-id t)
+                   debbugs-gnu-bug-number ; Set on group entry.
+                   (debbugs-gnu-guess-current-id)
+                   (let ((bugnum-re
+                         "\\([0-9]+\\)\\(?:-done\\)?@debbugs.gnu.org"))
+                     (when (derived-mode-p 'message-mode)
+                       (save-excursion
+                         (save-restriction
+                           (message-narrow-to-headers)
+                           (or (let ((addr (message-fetch-field "to")))
+                                 (and addr (string-match bugnum-re addr)
+                                      (string-to-number (match-string 1 
addr))))
+                               (let ((addr (message-fetch-field "cc")))
+                                 (and addr (string-match bugnum-re addr)
+                                      (string-to-number
+                                      (match-string 1 addr)))))))))))))
+
+(defun debbugs-gnu-make-control-message
+    (message bugid &optional reverse buffer noversion)
+  "Make a control message for the current bug report.
+The message is inserted into BUFFER, and mail headers are adjust
+so that it will be sent to address@hidden (via Bcc if
+there is already a To address).  If BUFFER omitted, create and
+display a new buffer.  If optional NOVERSION is non-nil, suppress
+query for version number on \"close\", \"fixed\", etc messages.
+Otherwise, the version is queried for bugs whose package is
+\"emacs\".
+
+When called interactively, choose the current buffer if it is in
+`message-mode', or create a new buffer otherwise.
+
+You can set the severity or add a tag, or close the report.  If
+you use the special \"done\" MESSAGE, the report will be marked as
+fixed, and then closed.
+
+If given a prefix, and given a tag to set, the tag will be
+removed instead."
+  (interactive
+   (save-excursion                 ; Point can change while prompting!
+     (list (completing-read
+            "Control message: " debbugs-gnu-control-message-keywords nil t)
+           (let* ((implicit-ids (mapcar #'prin1-to-string
+                                        (debbugs-gnus-implicit-ids)))
+                  (default-id (car implicit-ids)))
+             (string-to-number
+              (completing-read (if default-id
+                                   (format "Bug # (default %s): " default-id)
+                                 "Bug #: ")
+                               implicit-ids
+                               (lambda (s) (string-match-p "\\`[0-9]+\\'" s))
+                               nil nil nil (car implicit-ids))))
+           current-prefix-arg
+           (when (derived-mode-p 'message-mode)
+             (current-buffer)))))
+  (let* ((status (or (debbugs-gnu-current-status)
+                     (car (debbugs-get-status bugid))))
+         (version
+          (if (and
+               (not noversion)
+               (member message '("close" "done"
+                                 "fixed" "notfixed" "found" "notfound"))
+               (member "emacs" (cdr (assq 'package status))))
+              (save-excursion
+                (read-string
+                 "Version: "
+                 (pcase (nbutlast (version-to-list emacs-version)
+                                  ;; Chop off build number, if needed.
+                                  (if (boundp 'emacs-build-number)
+                                      0 1))
+                   (`(,major ,minor ,_micro) ; Development version.
+                    (format "%d.%d" major
+                            (if (member
+                                message '("notfixed" "found" "notfound"))
+                                minor
+                              (1+ minor))))
+                   (`(,major ,minor)    ; Release version.
+                    (format "%d.%d" major minor))
+                   ;; Unexpected version format?
+                   (_ emacs-version))))
+            ;; Don't put a version.
+            "")))
+    (unless buffer
+      (setq buffer
+            (pop-to-buffer
+             (get-buffer-create
+              (format "*Debbugs Control Message for #%d*" bugid)))))
+    (set-buffer buffer)
+    (when (= (buffer-size) 0)
+      (insert "To: address@hidden\n"
+              "From: " (message-make-from) "\n"
+              (format "Subject: control message for bug #%d\n" bugid)
+              mail-header-separator
+              "\n"))
+    (unless (or (derived-mode-p 'message-mode)
+                ;; `message-mode' associates buffer with file, we
+                ;; don't want to do that for temp buffers.
+                (eq (aref (buffer-name) 0) ?\s))
+      (message-mode))
+    (save-restriction
+      (message-narrow-to-headers)
+      (let* ((ctrl-addr "address@hidden")
+             (ctrl-re (regexp-quote ctrl-addr))
+             (to-addr (message-fetch-field "to"))
+             (bcc-addr (message-fetch-field "bcc")))
+        (unless (or (and  to-addr (string-match-p ctrl-re to-addr))
+                    (and bcc-addr (string-match-p ctrl-re bcc-addr)))
+          (message-add-header
+           (format "%s: %s" (if to-addr "Bcc" "To") ctrl-addr)))))
+    (message-goto-body)
+    (while (looking-at-p debbugs-gnu-control-message-commands-regexp)
+      (forward-line))
+    (insert
+     (save-excursion             ; Point can change while prompting!
+       (cond
+        ((member message '("unarchive" "unmerge" "noowner" "notforwarded"))
+         (format "%s %d\n" message bugid))
+        ((equal message "reopen")
+         (format "reopen %d\ntags %d - fixed patch\n" bugid bugid))
+        ((member message '("merge" "forcemerge"))
+         (format
+          "%s %d %s\n" message bugid
+          (mapconcat
+           #'identity
+           (debbugs-gnu-expand-bug-number-list
+            (completing-read-multiple
+             (format "%s with bug(s) #: " (capitalize message))
+             debbugs-gnu-completion-table))
+           " ")))
+        ((member message '("block" "unblock"))
+         (format
+          "%s %d by %s\n" message bugid
+          (mapconcat
+           #'identity
+           (debbugs-gnu-expand-bug-number-list
+            (completing-read-multiple
+             (format "%s with bug(s) #: " (capitalize message))
+             (if (equal message "unblock")
+                 (mapcar #'number-to-string
+                         (cdr (assq 'blockedby status)))
+               debbugs-gnu-completion-table)
+             nil (and (equal message "unblock") status)))
+           " ")))
+        ((equal message "owner")
+         (format "owner %d !\n" bugid))
+        ((equal message "retitle")
+         (format "retitle %d %s\n" bugid (read-string "New title: ")))
+        ((equal message "forwarded")
+         (format "forwarded %d %s\n" bugid (read-string "Forward to: ")))
+        ((equal message "reassign")
+         (format "reassign %d %s\n" bugid (read-string "Package(s): ")))
+        ((equal message "close")
+         (format "close %d %s\n" bugid version))
+        ((equal message "done")
+         (format "tags %d fixed\nclose %d %s\n" bugid bugid version))
+        ((member message '("found" "notfound" "fixed" "notfixed"))
+         (format "%s %d %s\n" message bugid version))
+        ((member message '("donenotabug" "donewontfix"
+                           "doneunreproducible"))
+         (format "tags %d %s\nclose %d\n" bugid (substring message 4) bugid))
+        ((member message '("serious" "important" "normal"
+                           "minor" "wishlist"))
+         (format "severity %d %s\n" bugid message))
+        ((equal message "invalid")
+         (format "tags %d notabug wontfix\nclose %d\n"
+                 bugid bugid))
+        ((equal message "documentation")
+         (format "user emacs\nusertag %d %s\n" bugid "documentation"))
+        ((equal message "usertag")
+         (format "user %s\nusertag %d %s\n"
+                 (completing-read
+                  "Package name or email address: "
+                  (append
+                   debbugs-gnu-all-packages (list user-mail-address))
+                  nil nil (car debbugs-gnu-default-packages))
+                 bugid (read-string "User tag: ")))
+       ;; "patch", "wontfix", "moreinfo", "unreproducible", "notabug",
+       ;; "pending", "help", "security", "confirmed", "easy"
+        (t
+         (format "tags %d %c %s\n"
+                 bugid (if reverse ?- ?+)
+                 message)))))
+    (unless (looking-at-p debbugs-gnu-control-message-end-regexp)
+      (insert "quit\n\n"))
+    (add-hook 'message-send-actions
+              (lambda () (remhash bugid debbugs-cache-data))
+              nil t)))
+
+(defun debbugs-gnus-jump-to-bug (bugid)
+  "Display buffer associated with BUGID with `pop-to-buffer'.
+Use `gnus-read-ephemeral-emacs-bug-group' instead if there is no such buffer."
+  (let ((bug-buf nil)
+        ;; By reverse order of preference.  FIXME: `rmail' buffers?
+        (preferred-modes '(gnus-summary-mode gnus-article-mode message-mode)))
+    (save-current-buffer
+      (cl-loop
+       for buf in (buffer-list)
+       while preferred-modes do
+       (set-buffer buf)
+       (when-let (((memql bugid (debbugs-gnus-implicit-ids)))
+                  (mode (cl-loop
+                         for mode in preferred-modes
+                         thereis (and (derived-mode-p mode)
+                                      ;; Don't choose sent message buffers.
+                                      (or (not (eq mode 'message-mode))
+                                          (not message-sent-message-via))
+                                      mode))))
+         (setq preferred-modes (cdr (memq mode preferred-modes)))
+         (setq bug-buf buf))))
+    (if bug-buf
+        (pop-to-buffer bug-buf '(display-buffer-reuse-window
+                                 . ((reusable-frames . visible))))
+      (gnus-read-ephemeral-emacs-bug-group
+       bugid (cons (current-buffer) (current-window-configuration))))))
+
+(defcustom debbugs-gnu-git-remote-info-alist
+  '(("git.sv.gnu.org\\(?::/srv/git\\)/emacs.git" .
+     ((commit-url
+       . "https://git.savannah.gnu.org/cgit/emacs.git/commit/?id=%H";)
+      (ref-globs . ("/emacs-*" "/master"))))
+    ("git.sv.gnu.org\\(?::/srv/git\\)/emacs/elpa" .
+     ((commit-url
+       . "https://git.savannah.gnu.org/cgit/emacs/elpa.git/commit/?id=%H";))))
+  "Nest alist for repository-specific information.
+Each element has the form (REMOTE-REGEXP . INFO-ALIST), where
+INFO-ALIST is an alist containing the repository attributes.
+
+Supported keys of INFO-ALIST are
+
+* `commit-url': Format of a URL for a given commit hash, using
+  format specifiers supported by `git show'.  Used by
+  `debbugs-gnu-announce-commit' as a supplement to
+  `debbugs-gnu-commit-description-format'.
+
+* `ref-globs': List of glob patterns matching branches of
+  interest, used by `debbugs-gnu-announce-commit' to make the
+  \"Pushed to X\" message."
+  :version "27.1"
+  :type '(alist :key-type string :value-type (alist :key-type symbol)))
+
+(defcustom debbugs-gnu-commit-description-format
+  "%h %cI \"%s\""
+  "Format used for describing commits in `debbugs-gnu-announce-commit'.
+It is passed as --format argument to `git show', see its manual
+page for formatting specifier meanings."
+  :version "27.1"
+  :type 'string)
+
+(defun debbugs-gnu--git-insert (&rest args)
+  "Insert output of running git with ARGS.
+Throws error if git returns non-zero."
+  (unless (eql 0 (apply #'vc-git--call '(t t) args))
+    (error "git %s failed: %s" (car args) (buffer-string))))
+
+(defun debbugs-gnu--git-remote-info ()
+  "Return (REMOTE . INFO-ALIST).
+Where REMOTE is a string naming a git remote which matches the
+REMOTE-REGEXP key of a `debbugs-gnu-git-remote-info-alist' entry.
+INFO-ALIST is the correponding value of the entry.  If no entry
+matches, return nil."
+  (with-temp-buffer
+    (debbugs-gnu--git-insert "remote" "-v")
+    (catch 'found-remote
+      (dolist (remote-info debbugs-gnu-git-remote-info-alist)
+        (goto-char (point-min))
+        (and (re-search-forward (car remote-info) nil t)
+             (progn (beginning-of-line)
+                    (looking-at "[^ \t]+"))
+             (throw 'found-remote
+                    (cons (match-string 0) (cdr remote-info))))))))
+
+(defun debbugs-gnu--git-get-pushed-to (commit-range remote-info)
+  "Return the branch name which COMMIT-RANGE was pushed to.
+REMOTE-INFO is return value of `debbugs-gnu--git-remote-info'."
+  (let* ((last-commit
+          (with-temp-buffer
+            (debbugs-gnu--git-insert
+             ;; %H: commit hash.
+             "log" "-1" "--format=%H" commit-range)
+            (goto-char (point-min))
+            (buffer-substring (point-min) (line-end-position))))
+         (remote (pop remote-info)))
+    (let ((ref-globs (cdr (assq 'ref-globs remote-info))))
+      (with-temp-buffer
+        (apply
+         #'debbugs-gnu--git-insert
+         "branch" "--remote" "--contains" last-commit
+         (mapcar (lambda (glob) (concat remote glob))
+                 ref-globs))
+        ;; First 2 characters are current branch indicator.
+        (goto-char (+ (point-min) 2))
+        (and (looking-at (concat (regexp-quote remote) "/\\(.+\\)$"))
+             (match-string 1))))))
+
+(defun debbugs-gnu-announce-commit (commit-range bugnum &optional _args)
+  "Insert info about COMMIT-RANGE into message.
+Optionally call `debbugs-gnu-make-control-message' to close BUGNUM."
+  (let* ((status (car (debbugs-get-status bugnum)))
+         (packages (cdr (assq 'package status)))
+         (remote-info (debbugs-gnu--git-remote-info)))
+    (insert "\nPushed to "
+            (or (debbugs-gnu--git-get-pushed-to commit-range remote-info) "")
+            ".\n\n")
+    (debbugs-gnu--git-insert
+     "show" "--no-patch"
+     (concat "--format=" debbugs-gnu-commit-description-format
+             "\n" (cdr (assq 'commit-url remote-info)) "\n")
+     commit-range)
+    (when (y-or-n-p "Close bug? ")
+      (let ((emacs-version
+             (and (member "emacs" packages)
+                  (file-exists-p "configure.ac")
+                  (with-temp-buffer
+                    (insert-file-contents "configure.ac")
+                    (and (re-search-forward "\
+^ *AC_INIT(GNU Emacs, *\\([0-9.]+\\), *address@hidden"
+                                            nil t)
+                         (match-string 1))))))
+        (debbugs-gnu-make-control-message
+         "done" bugnum nil (current-buffer) (not emacs-version))))))
+
+(defun debbugs-gnu-post-patch (commit-range bugnum &optional format-patch-args)
+  "Attach COMMIT-RANGE as patches into current message.
+Optionally call `debbugs-gnu-make-control-message'' to tag BUGNUM
+with `patch'."
+  (letrec ((disposition
+           (completing-read "disposition: " '("inline" "attachment")))
+           ;; Make attachments text/plain for better compatibility
+           ;; (e.g., opening in browser instead of downloading).
+           (type (if (equal disposition "inline") "text/x-diff" "text/plain"))
+           (dir (make-temp-file (format "patches-for-bug%d" bugnum) t))
+           (deldir (lambda ()
+                     (delete-directory dir t)
+                     (remove-hook 'message-exit-actions deldir t)
+                     (remove-hook 'kill-buffer-hook deldir t))))
+    (add-hook 'message-send-actions deldir nil t)
+    (add-hook 'kill-buffer-hook deldir nil t)
+    (with-temp-buffer
+      (apply #'debbugs-gnu--git-insert
+             "format-patch" (concat "--output-directory=" dir)
+             (append format-patch-args
+                     (list commit-range))))
+    (dolist (patch (directory-files dir t "\\`[^.]"))
+      (mml-attach-file patch type "patch" disposition))
+    (when (and (not (member
+                     "patch" (assq 'tags (car (debbugs-get-status
+                                               bugnum)))))
+               (y-or-n-p "Tag + patch? "))
+      (debbugs-gnu-make-control-message
+       "patch" bugnum nil (current-buffer)))))
+
+(defvar debbugs-gnu-read-commit-range-hook nil
+  "Used by `debbugs-gnu-pick-commits'.
+Each function receives no arguments, and should return an
+argument compatible with `debbugs-gnu-pick-commits'.  If the
+function can't function in the current buffer, it should return
+nil to let the next function try.")
+
+(defun debbugs-gnu-read-commit-range-from-vc-log ()
+  "Read commit range from a VC log buffer.
+Return commit at point, or commit range in region if it is
+active.  This function is suitable for use in
+`debbugs-gnu-read-commit-range-hook'."
+  (when (derived-mode-p 'vc-git-log-view-mode)
+    (list (if (use-region-p)
+              (let ((beg (log-view-current-entry (region-beginning)))
+                    (end (log-view-current-entry (region-end))))
+                (if (= (car beg) (car end))
+                    ;; Region spans only a single entry.
+                    (cadr beg)
+                  ;; Later revs are at the top of buffer.
+                  (format "%s~1..%s" (cadr end) (cadr beg))))
+            (log-view-current-tag)))))
+(add-hook 'debbugs-gnu-read-commit-range-hook
+          #'debbugs-gnu-read-commit-range-from-vc-log)
+
+(defvar debbugs-gnu-picked-commits nil
+  "List of commits selected in `debbugs-gnu-pick-commits'.
+Format of each element is (BUGNUMBERS REPO-DIR COMMIT-RANGE).")
+
+(defun debbugs-gnu-pick-commits (commit-range)
+  "Select COMMIT-RANGE to post as patches or announce as pushed.
+COMMIT-RANGE is read using `debbugs-gnu-read-commit-range-hook',
+or `read-string' if none of its functions apply.  Add entry to
+`debbugs-gnu-pick-commits' and jump to read bug in preparation for
+user to call `debbugs-gnu-maybe-use-picked-commits'."
+  (interactive
+   (or (run-hook-with-args-until-success
+        'debbugs-gnu-read-commit-range-hook)
+       (list (read-string "Commit (or range): "))))
+  (let ((bugnum nil)
+        (repo-dir default-directory))
+    (with-temp-buffer
+      ;; %B = raw body (unwrapped subject and body)
+      (debbugs-gnu--git-insert
+       ;; %B: raw body (unwrapped subject and body).
+       "show" "--no-patch" "--format=%B" commit-range)
+      (goto-char (point-min))
+      (while (re-search-forward "[bB]ug ?#\\([0-9]+\\)" nil t)
+        (push (match-string 1) bugnum)))
+    (let ((read-bugnum
+           (string-to-number
+            (completing-read
+             (if bugnum
+                 (format "Bug # (default %s): " (car bugnum))
+               "Bug #: ")
+             debbugs-gnu-completion-table nil t nil nil bugnum))))
+      (debbugs-gnus-jump-to-bug read-bugnum)
+      (cl-callf2 mapcar #'string-to-number bugnum)
+      (unless (memql read-bugnum bugnum)
+        (push read-bugnum bugnum)))
+    (push (list bugnum repo-dir commit-range)
+          debbugs-gnu-picked-commits)
+    (if (derived-mode-p 'message-mode)
+        (debbugs-gnu-maybe-use-picked-commits)
+      (message "Reply to a message to continue"))))
+
+(defun debbugs-gnu-maybe-use-picked-commits ()
+  "Add commit corresponding to current message's bug number.
+Calls `debbugs-gnu-announce-commit' or `debbugs-gnu-post-patch'
+on an entry with a matching bug number from
+`debbugs-gnu-picked-commits'.  Remove entry after message is
+successfully sent."
+  (interactive)
+  (when (derived-mode-p 'message-mode)
+    (cl-loop with id = (car (debbugs-gnus-implicit-ids))
+             for pcomm-entry in debbugs-gnu-picked-commits
+             for (bugnum repo-dir commit-range) = pcomm-entry
+             when (memql id bugnum)
+             do
+             (goto-char (point-max))
+             (let ((default-directory repo-dir))
+               (pcase (read-char-choice
+                       (format "[a]nnounce commit, or [p]ost patch? (%s)"
+                               commit-range)
+                       '(?a ?p))
+                 (?a (debbugs-gnu-announce-commit commit-range id) )
+                 (?p (debbugs-gnu-post-patch commit-range id))))
+             (add-hook 'message-send-actions
+                       (lambda ()
+                         (cl-callf2 delq pcomm-entry
+                                    debbugs-gnu-picked-commits))
+                       nil t)
+             (remove-hook 'post-command-hook
+                          #'debbugs-gnu-maybe-use-picked-commits)
+             (cl-return))))
+
+;; We need to daisy chain the hooks because `message-setup-hook' runs
+;; too early (before `message-yank-original').
+(defun debbugs-gnu--prepare-to-use-picked-commits ()
+  (add-hook 'post-command-hook #'debbugs-gnu-maybe-use-picked-commits))
+(add-hook 'message-setup-hook #'debbugs-gnu--prepare-to-use-picked-commits)
+
+(defvar debbugs-gnu-pick-vc-log-commit-mode-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map "c" 'debbugs-gnu-pick-commits)
+    map))
+
+(define-minor-mode debbugs-gnu-pick-vc-log-commit-mode
+  "Minor mode for sending commits from *vc-change-log* buffers to debbugs.
+
+\\{debbugs-gnu-pick-vc-log-commit-mode}"
+  :lighter " Debbugs")
+
+(add-hook 'vc-git-log-view-mode-hook #'debbugs-gnu-pick-vc-log-commit-mode)
 
 (defvar debbugs-gnu-usertags-mode-map
   (let ((map (make-sparse-keymap)))
@@ -1614,7 +2039,7 @@ removed instead."
        (completing-read-multiple
        "Package name(s) or email address: "
        (append debbugs-gnu-all-packages (list user-mail-address)) nil nil
-       (mapconcat 'identity debbugs-gnu-default-packages ","))
+       (mapconcat #'identity debbugs-gnu-default-packages ","))
      debbugs-gnu-default-packages))
 
   (unwind-protect
@@ -1622,14 +2047,14 @@ removed instead."
            (debbugs-port "gnu.org")
            (buffer-name "*Emacs User Tags*")
            (user-tab-length
-            (1+ (apply 'max (length "User") (mapcar 'length users)))))
+            (1+ (apply #'max (length "User") (mapcar #'length users)))))
 
        ;; Initialize variables.
        (when (and (file-exists-p debbugs-gnu-persistency-file)
                   (not debbugs-gnu-local-tags))
          (with-temp-buffer
            (insert-file-contents debbugs-gnu-persistency-file)
-           (eval (read (current-buffer)))))
+           (eval (read (current-buffer)) t)))
 
        ;; Create buffer.
        (when (get-buffer buffer-name)
@@ -1673,14 +2098,13 @@ removed instead."
   (when (mouse-event-p last-input-event) (mouse-set-point last-input-event))
   ;; We open the bug reports.
   (let ((args (get-text-property (line-beginning-position) 
'tabulated-list-id)))
-    (when args (apply 'debbugs-gnu args))))
+    (when args (apply #'debbugs-gnu args))))
 
 (defcustom debbugs-gnu-default-bug-number-list
   (propertize "-10" 'help-echo "The 10 most recent bugs.")
   "The default value used in interactive call of `debbugs-gnu-bugs'.
 It must be a string, containing a comma separated list of bugs or bug ranges.
 A negative value, -N, means the newest N bugs."
-  :group 'debbugs-gnu
   :type 'string
   :version "25.2")
 
@@ -1691,7 +2115,7 @@ In interactive calls, prompt for a comma separated list 
of bugs
 or bug ranges, with default to `debbugs-gnu-default-bug-number-list'."
   (interactive
    (mapcar
-    'string-to-number
+    #'string-to-number
     (debbugs-gnu-expand-bug-number-list
      (or
       (completing-read-multiple
@@ -1707,13 +2131,11 @@ or bug ranges, with default to 
`debbugs-gnu-default-bug-number-list'."
 
 (defcustom debbugs-gnu-trunk-directory "~/src/emacs/trunk/"
   "The directory where the main source tree lives."
-  :group 'debbugs-gnu
   :type 'directory
   :version "25.2")
 
 (defcustom debbugs-gnu-branch-directory "~/src/emacs/emacs-25/"
   "The directory where the previous source tree lives."
-  :group 'debbugs-gnu
   :type 'directory
   :version "25.2")
 
@@ -1733,13 +2155,15 @@ or bug ranges, with default to 
`debbugs-gnu-default-bug-number-list'."
           "Emacs repository location: "
           debbugs-gnu-current-directory nil t nil 'file-directory-p))))
 
-(defun debbugs-gnu-apply-patch (&optional branch)
+(defun debbugs-gnu-apply-patch (&optional branch selectively)
   "Apply the patch from the current message.
-If given a prefix, patch in the branch directory instead."
+If given a prefix, patch in the branch directory instead.
+
+If SELECTIVELY, query the user before applying the patch."
   (interactive "P")
-  (add-hook 'emacs-lisp-mode-hook 'debbugs-gnu-lisp-mode)
-  (add-hook 'diff-mode-hook 'debbugs-gnu-diff-mode)
-  (add-hook 'change-log-mode-hook 'debbugs-gnu-change-mode)
+  (add-hook 'emacs-lisp-mode-hook #'debbugs-gnu-lisp-mode)
+  (add-hook 'diff-mode-hook #'debbugs-gnu-diff-mode)
+  (add-hook 'change-log-mode-hook #'debbugs-gnu-change-mode)
   (debbugs-gnu-init-current-directory branch)
   (let ((rej (expand-file-name "debbugs-gnu.rej" temporary-file-directory))
        (output-buffer (get-buffer-create "*debbugs patch*"))
@@ -1752,15 +2176,16 @@ If given a prefix, patch in the branch directory 
instead."
     ;; The patches are either in MIME attachements or the main article
     ;; buffer.  Determine which.
     (with-current-buffer gnus-article-buffer
-      (dolist (handle (mapcar 'cdr (gnus-article-mime-handles)))
+      (dolist (handle (mapcar #'cdr (gnus-article-mime-handles)))
        (when
-           (string-match "diff\\|patch\\|plain" (mm-handle-media-type handle))
+           (string-match "diff\\|patch\\|plain\\|octet" (mm-handle-media-type 
handle))
          (push (cons (mm-handle-encoding handle)
                      (mm-handle-buffer handle))
                patch-buffers))))
     (unless patch-buffers
       (gnus-summary-show-article 'raw)
-      (article-decode-charset)
+      (with-current-buffer gnus-article-buffer
+       (article-decode-charset))
       (push (cons nil gnus-article-buffer) patch-buffers))
     (dolist (elem patch-buffers)
       (with-current-buffer (generate-new-buffer "*debbugs input patch*")
@@ -1769,14 +2194,21 @@ If given a prefix, patch in the branch directory 
instead."
               (base64-decode-region (point-min) (point-max)))
              ((eq (car elem) 'quoted-printable)
               (quoted-printable-decode-region (point-min) (point-max))))
+       (goto-char (point-min))
+       (while (search-forward "\r\n" nil t)
+         (replace-match "\n" t t))
        (debbugs-gnu-fix-patch debbugs-gnu-current-directory)
-       (call-process-region (point-min) (point-max)
-                            "patch" nil output-buffer nil
-                            "-r" rej "--no-backup-if-mismatch"
-                            "-l" "-f"
-                            "-d" (expand-file-name
-                                  debbugs-gnu-current-directory)
-                            "-p1")))
+       (when (or (not selectively)
+                 (y-or-n-p (format "%s\nApply?"
+                                   (buffer-substring (point-min)
+                                                     (min 200 (point-max))))))
+         (call-process-region (point-min) (point-max)
+                              "patch" nil output-buffer nil
+                              "-r" rej "--no-backup-if-mismatch"
+                              "-l" "-f"
+                              "-d" (expand-file-name
+                                    debbugs-gnu-current-directory)
+                              "-p1"))))
     (set-buffer output-buffer)
     (when (file-exists-p rej)
       (goto-char (point-max))
@@ -1784,7 +2216,7 @@ If given a prefix, patch in the branch directory instead."
     (goto-char (point-max))
     (save-some-buffers t)
     (require 'compile)
-    (mapc 'kill-process compilation-in-progress)
+    (mapc #'kill-process compilation-in-progress)
     (compile
      (format
       "cd %s; make -k" (expand-file-name "lisp" 
debbugs-gnu-current-directory)))
@@ -1808,35 +2240,51 @@ If given a prefix, patch in the branch directory 
instead."
     (switch-to-buffer "*vc-diff*")
     (goto-char (point-min))))
 
+(defun debbugs-gnu-diff-hunk-target-name (dir)
+  (let ((names nil))
+    (dolist (name (diff-hunk-file-names))
+      ;; The function above may return names like
+      ;; "lisp/custom.el 2013-06-14 12:10:30 +0000"
+      (setq name (car (split-string name " ")))
+      (unless (string-match "[ #<>]" name)
+       (when (string-match "\\`/" name)
+         ;; This is an absolute path, so try to find the target.
+         (while (and (not (file-exists-p (expand-file-name name dir)))
+                     (string-match "\\`[^/]*/" name))
+           (setq name (replace-match "" t t name))))
+       ;; See whether we can find the file.
+       (when (or (not (string-match "/" name))
+                 (and (string-match "^[ab]/" name)
+                      (not (file-exists-p
+                            (expand-file-name (substring name 2)
+                                              dir))))
+                 (file-exists-p (expand-file-name name dir)))
+         ;; We have a simple patch that refers to a file somewhere in the
+         ;; tree.  Find it.
+         (setq name (car (sort (directory-files-recursively
+                                dir
+                                (concat "^" (regexp-quote
+                                             (file-name-nondirectory name))
+                                        "$"))
+                               #'string>))))
+       (when name
+         (push name names))))
+    ;; Return any of the guessed names.
+    (car names)))
+
 (defun debbugs-gnu-fix-patch (dir)
   (require 'diff-mode)
   (setq dir (directory-file-name (expand-file-name dir)))
   (goto-char (point-min))
   (while (re-search-forward diff-file-header-re nil t)
     (goto-char (match-beginning 0))
-    (let ((target-name (car (diff-hunk-file-names))))
-      (when (and target-name
-                (or (not (string-match "/" target-name))
-                    (and (string-match "^[ab]/" target-name)
-                         (not (file-exists-p
-                               (expand-file-name (substring target-name 2)
-                                                 dir))))
-                    (file-exists-p (expand-file-name target-name dir))))
-       ;; We have a simple patch that refers to a file somewhere in the
-       ;; tree.  Find it.
-       (when-let ((files (directory-files-recursively
-                          dir
-                          (concat "^" (regexp-quote
-                                       (file-name-nondirectory target-name))
-                                      "$"))))
-         (when (re-search-forward (concat "^[+]+ "
-                                          (regexp-quote target-name)
-                                          "\\([ \t\n]\\)")
-                                  nil t)
-           (replace-match (concat "+++ a"
-                                  (substring (car files) (length dir))
-                                  (match-string 1))
-                          nil t)))))
+    (when-let ((target-name (debbugs-gnu-diff-hunk-target-name dir)))
+      (when (and (string-match "^/" target-name)
+                (re-search-forward "^\\([+]+\\|-+\\) .*" nil t))
+       (replace-match (concat (match-string 1)
+                              " a"
+                              (substring target-name (length dir)))
+                      nil t)))
     (forward-line 2)))
 
 (defun debbugs-gnu-find-contributor (string)
@@ -1870,7 +2318,7 @@ If given a prefix, patch in the branch directory instead."
       (setq from (gnus-fetch-field "from")
            subject (gnus-fetch-field "subject"))
       ;; If it's a patch formatted the right way, extract that data.
-      (dolist (handle (mapcar 'cdr (gnus-article-mime-handles)))
+      (dolist (handle (mapcar #'cdr (gnus-article-mime-handles)))
        (when (string-match "diff\\|patch\\|plain"
                            (mm-handle-media-type handle))
          (with-temp-buffer
@@ -1895,8 +2343,7 @@ If given a prefix, patch in the branch directory instead."
     (let ((add-log-full-name (car from))
          (add-log-mailing-address (cadr from)))
       (add-change-log-entry-other-window)
-      (when patch-subject
-       (setq-local debbugs-gnu-patch-subject patch-subject))
+      (setq-local debbugs-gnu-patch-subject patch-subject)
       (when changelog
        (delete-region (line-beginning-position) (point-max))
        (save-restriction
@@ -1988,9 +2435,14 @@ If given a prefix, patch in the branch directory 
instead."
     (switch-to-buffer "*vc-diff*")
     (other-window 1)
     (when patch-subject
-      (insert "Summary: "
-             (replace-regexp-in-string "^ *\\[PATCH\\] *" "" patch-subject)
-             "\n"))))
+      (goto-char (point-min))
+      (unless (re-search-forward "^Summary: ")
+       (insert "Summary: \n")
+       (forward-line -1)
+       (end-of-line))
+      (insert (replace-regexp-in-string "^ *\\[PATCH\\] *" "" patch-subject))
+      (beginning-of-line)
+      (search-forward ": " nil t))))
 
 (defun debbugs-gnu-save-cache ()
   "Save the bugs cache to a file."
@@ -2012,15 +2464,6 @@ If given a prefix, patch in the branch directory 
instead."
 ;; * Extend SOAP interface to get existing package names on the
 ;;  server, in order not to hardcode them.
 
-;; * Add debbugs commands to commit messages.
-;;   It'd be nice if the language would be something along the lines of
-;;
-;;   bug#45 done
-;;   bug#45 tags 25.1 fixed
-;;
-;;   That is, that you could drop arbitrary debbugs commands into
-;;   commit messages.
-
 ;; * The bug tracker should be aware of repositories, branches,
 ;;   commits, contributors, and ticket links or mentions in commit
 ;;   messages.
diff --git a/packages/debbugs/debbugs-org.el b/packages/debbugs/debbugs-org.el
index 8020fed..ecdcaa7 100644
--- a/packages/debbugs/debbugs-org.el
+++ b/packages/debbugs/debbugs-org.el
@@ -1,6 +1,6 @@
 ;;; debbugs-org.el --- Org-mode interface for the GNU bug tracker  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2013-2018 Free Software Foundation, Inc.
+;; Copyright (C) 2013-2019 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <address@hidden>
 ;; Keywords: comm, hypermedia, maint, outlines
@@ -82,6 +82,7 @@
 ;; keystrokes:
 
 ;;   "C-c # C": Send a debbugs control message
+;;   "C-c # E": Make (but don't yet send) a debbugs control message
 ;;   "C-c # t": Mark the bug locally as tagged
 ;;   "C-c # d": Show bug attributes
 
@@ -293,6 +294,7 @@ the corresponding buffer (e.g. by closing Emacs)."
   (let ((map (make-sparse-keymap)))
     (define-key map (kbd "C-c # t") 'debbugs-gnu-toggle-tag)
     (define-key map (kbd "C-c # C") 'debbugs-gnu-send-control-message)
+    (define-key map (kbd "C-c # E") 'debbugs-gnu-make-control-message)
     (define-key map (kbd "C-c # d") 'debbugs-gnu-display-status)
     map)
   "Keymap for the `debbugs-org-mode' minor mode.")
diff --git a/packages/debbugs/debbugs-ug.info b/packages/debbugs/debbugs-ug.info
index 7823ebe..4ac9cbc 100644
--- a/packages/debbugs/debbugs-ug.info
+++ b/packages/debbugs/debbugs-ug.info
@@ -1,7 +1,7 @@
 This is debbugs-ug.info, produced by makeinfo version 6.5 from
 debbugs-ug.texi.
 
-Copyright (C) 2015-2018 Free Software Foundation, Inc.
+Copyright (C) 2015-2019 Free Software Foundation, Inc.
 
      Permission is granted to copy, distribute and/or modify this
      document under the terms of the GNU Free Documentation License,
@@ -302,6 +302,7 @@ tabulated list, and 'debbugs-org-*' return a list of TODO 
items in
 * TODO Items::                  TODO Items.
 * Control Messages::            Control Messages.
 * Applying Patches::            Applying Patches in the Emacs Repository.
+* Posting Patches::             Posting Patches to Debbugs from the Emacs 
Repository.
 
 
 File: debbugs-ug.info,  Node: Tabulated Lists,  Next: TODO Items,  Up: 
Presenting Bugs
@@ -378,6 +379,10 @@ This enables the following key strokes:
                Send a control message for this bug,
                *note Control Messages::.
                
+'E'            'debbugs-gnu-make-control-message'
+               Make (but don't yet send) a control message for this
+               bug, *note Control Messages::.
+               
 
    The user option 'debbugs-gnu-suppress-closed' controls, whether
 closed bugs are shown in the initial list.
@@ -416,9 +421,14 @@ This enables the following key strokes:
 'C-c # C'   'debbugs-gnu-send-control-message'
             Send a control message for this bug, *note Control Messages::.
             
+'C-c # E'   'debbugs-gnu-make-control-message'
+            Make (but don't yet send) a control message for this bug, *note 
Control Messages::.
+            
 
    When the bug attributes are shown by 'org-cycle', there is a link
-'Messages' which opens a GNUS ephemeral group for that bug.
+'Messages' which opens the messages for that bug.  The user options
+'debbugs-gnu-suppress-closed' and 'debbugs-gnu-mail-backend' have the
+same meaning as in *note Tabulated Lists::.
 
 
 File: debbugs-ug.info,  Node: Control Messages,  Next: Applying Patches,  
Prev: TODO Items,  Up: Presenting Bugs
@@ -456,7 +466,6 @@ meaning of the control messages, *Note Mail Command Index::.
 
 'confirmed'
 'easy'
-'fixed'
 'help'
 'moreinfo'
 'notabug'
@@ -465,7 +474,7 @@ meaning of the control messages, *Note Mail Command Index::.
 'security'
 'unreproducible'
 'wontfix'
-     "tags 12345 confirmed|easy|fixed|help|moreinfo|notabug"
+     "tags 12345 confirmed|easy|help|moreinfo|notabug"
 
      "tags 12345 patch|pending|security|unreproducible|wontfix"
 
@@ -484,6 +493,15 @@ meaning of the control messages, *Note Mail Command 
Index::.
      The second argument in the close message, the Emacs version, is
      read interactively if the bug belongs to the '"emacs"' package.
 
+'found'
+'notfound'
+'fixed'
+'notfixed'
+     "found|notfound|fixed|notfixed 12345 25.1"
+
+     The second argument, the Emacs version, is read interactively if
+     the bug belongs to the '"emacs"' package.
+
 'forwarded'
      "forwarded 12345 ADDRESS"
 
@@ -541,6 +559,10 @@ meaning of the control messages, *Note Mail Command 
Index::.
      The username, read interactively, is either a package name or an
      email address.  The tag to be set is also read interactively.
 
+'documentation'
+     "user emacs"
+     "usertag 12345 documentation"
+
    How the control messages are sent is controlled by the
 'debbugs-gnu-send-mail-function' variable.  If it is 'nil' (the
 default value), the value of 'send-mail-function' is used.  This could
@@ -548,7 +570,7 @@ be inconvenient, for example when an external interactive 
mail client
 is configured.
 
 
-File: debbugs-ug.info,  Node: Applying Patches,  Prev: Control Messages,  Up: 
Presenting Bugs
+File: debbugs-ug.info,  Node: Applying Patches,  Next: Posting Patches,  Prev: 
Control Messages,  Up: Presenting Bugs
 
 3.4 Applying Patches in the Emacs Repository
 ============================================
@@ -577,6 +599,69 @@ a ChangeLog entry with all needed information.  A final 
'M-m' in the
 'ChangeLog' buffer commits the patch via '*vc-log*'.
 
 
+File: debbugs-ug.info,  Node: Posting Patches,  Prev: Applying Patches,  Up: 
Presenting Bugs
+
+3.5 Posting Patches to Debbugs from the Emacs Repository
+========================================================
+
+Once you have committed a patch locally to fix a bug you usually want
+to post it to the bug thread for review and testing.  And when the
+patch is deemed satisfactory and pushed to the official repository,
+the bug should be marked closed.
+
+   The query for commit (or commit range) to use is controlled by
+'debbugs-gnu-read-commit-range-hook'.  Initially it has an entry which
+operates in '*vc-change-log*' buffers, but additional entries may be
+added to give sensible results for other modes that work with git.
+
+   The command 'debbugs-gnu-pick-commits' (bound to 'c' in
+'*vc-change-log*' buffers by default) helps automate both these
+processes: it queries for a commit (or commit range), and a bug number
+(defaulting to the bug number mentioned in the commit message).  It
+then jumps you to a buffer associated with the bug.  When you reply to
+a message in the bug thread, you are asked whether to post the commits
+as patches (optionally tagging the bug with '"patch"'), or announce
+that the bug has been fixed by the selected commits (optionally
+closing the bug and marking as closed in the Emacs version
+corresponding to the patch).
+
+   For example, suppose you are reading the message of "Bug#12345:
+foo-mode fails to call frobnicate on startup" in a message buffer.
+You decide to fix it, so you switch to the source code, add in the
+missing call and commit locally, with the commit message "*
+lisp/foo-mode.el (foo-mode): Call frobnicate (Bug#12345)."  Use 'C-x v
+l' to run 'vc-print-log', and navigate to the new commit.  Press 'c'
+and then '<RET>' to accept the default bug number (which will be 12345
+since it's in the commit message) in response to the prompt.  You are
+then popped to the message buffer, and when you reply to the message,
+press 'p' to post the git formatted patch as an attachment for review,
+and then answer 'y' to tag the bug with '"patch"' when the message is
+sent.  Assuming you get favorable reviews, you then push it, and again
+hit 'c' but this time press 'a' (for "announce") after replying to the
+relevant bug thread message.  This will insert some text describing
+the commit and where it was pushed to, and answering 'y' will arrange
+for the bug to be closed when the message is sent.
+
+* Menu:
+
+* Customizing debbugs-gnu-pick-commits::
+
+
+File: debbugs-ug.info,  Node: Customizing debbugs-gnu-pick-commits,  Up: 
Posting Patches
+
+3.5.1 Customizing debbugs-gnu-pick-commits
+------------------------------------------
+
+The string inserted to describe an announced commit is controlled by
+the user option 'debbugs-gnu-commit-description-format', it is a
+format string passed to the '--format' argument of 'git show'.
+Additionally, if the remote url matches an entry in
+'debbugs-gnu-git-remote-info-alist', then its 'commit-url' subitem is
+appended to the commit description.  By default this user option is
+configured for the GNU Emacs and GNU ELPA repositories, more entries
+may be added to work with other repositories of other packages.
+
+
 File: debbugs-ug.info,  Node: Minor Mode,  Next: Command Index,  Prev: 
Presenting Bugs,  Up: Top
 
 4 Minor Mode
@@ -613,6 +698,7 @@ Command Index
 * debbugs-gnu:                           Retrieving Bugs.    (line 15)
 * debbugs-gnu-bugs:                      Retrieving Bugs.    (line 69)
 * debbugs-gnu-patches:                   Retrieving Bugs.    (line 86)
+* debbugs-gnu-pick-commits:              Posting Patches.    (line 16)
 * debbugs-gnu-search:                    Searching Bugs.     (line 15)
 * debbugs-org:                           Retrieving Bugs.    (line 17)
 * debbugs-org-bugs:                      Retrieving Bugs.    (line 70)
@@ -632,13 +718,18 @@ Variable Index
 * debbugs-gnu-all-packages:              Retrieving Bugs.   (line  36)
 * debbugs-gnu-all-severities:            Retrieving Bugs.   (line  27)
 * debbugs-gnu-branch-directory:          Applying Patches.  (line  18)
+* debbugs-gnu-commit-description-format: Customizing debbugs-gnu-pick-commits.
+                                                            (line   6)
 * debbugs-gnu-default-bug-number-list:   Retrieving Bugs.   (line  81)
 * debbugs-gnu-default-packages:          Retrieving Bugs.   (line  63)
 * debbugs-gnu-default-severities:        Retrieving Bugs.   (line  63)
 * debbugs-gnu-default-suppress-bugs:     Retrieving Bugs.   (line  44)
-* debbugs-gnu-mail-backend:              Tabulated Lists.   (line  79)
-* debbugs-gnu-send-mail-function:        Control Messages.  (line 121)
-* debbugs-gnu-suppress-closed:           Tabulated Lists.   (line  76)
+* debbugs-gnu-git-remote-info-alist:     Customizing debbugs-gnu-pick-commits.
+                                                            (line   6)
+* debbugs-gnu-mail-backend:              Tabulated Lists.   (line  83)
+* debbugs-gnu-read-commit-range-hook:    Posting Patches.   (line  11)
+* debbugs-gnu-send-mail-function:        Control Messages.  (line 133)
+* debbugs-gnu-suppress-closed:           Tabulated Lists.   (line  80)
 * debbugs-gnu-trunk-directory:           Applying Patches.  (line  18)
 * debbugs-org-severity-priority:         TODO Items.        (line  10)
 
@@ -657,15 +748,17 @@ Key Index
 * C:                                     Tabulated Lists.    (line 71)
 * C-c # C:                               TODO Items.         (line 25)
 * C-c # d:                               TODO Items.         (line 19)
+* C-c # E:                               TODO Items.         (line 28)
 * C-c # t:                               TODO Items.         (line 22)
 * d:                                     Tabulated Lists.    (line 33)
+* E:                                     Tabulated Lists.    (line 75)
 * g:                                     Tabulated Lists.    (line 52)
 * M-m:                                   Applying Patches.   (line 10)
 * <mouse-1>:                             Tabulated Lists.    (line 30)
 * <mouse-2>:                             Tabulated Lists.    (line 31)
 * R:                                     Tabulated Lists.    (line 42)
 * <RET>:                                 Tabulated Lists.    (line 29)
-* <RET> <1>:                             Tabulated Lists.    (line 79)
+* <RET> <1>:                             Tabulated Lists.    (line 83)
 * s:                                     Tabulated Lists.    (line 62)
 * t:                                     Tabulated Lists.    (line 65)
 * <TAB>:                                 TODO Items.         (line 16)
@@ -688,6 +781,12 @@ Debbugs control mailserver commands
      If you supply a version, the bug tracking system will note that
      the bug affects that version of the newly-assigned package.
 
+     You can assign a bug to two packages at once by separating the
+     package names with a comma.  However, you should only do this if
+     the bug can be fixed by a change to either package.  If this is
+     not the case, you should clone the bug and reassign the clone to
+     the other package.
+
 'reopen bugnumber [ originator-address | = | ! ]'
      Reopens #bugnumber if it is closed.
 
@@ -746,6 +845,29 @@ Debbugs control mailserver commands
      about that version will be known.  It is intended for fixing
      mistakes in the record of when a bug was found.
 
+'fixed bugnumber version'
+     Indicate that bug #bugnumber was fixed in the given version of
+     the package to which it is assigned.  version may be a fully
+     qualified version, of the form sourcepackagename/version.
+
+     This does not cause the bug to be marked as closed, it merely
+     adds another version in which the bug was fixed.  Use the
+     bugnumber-done address to close a bug and mark it fixed in a
+     particular version.
+
+'notfixed bugnumber version'
+     Remove the record that bug #bugnumber has been fixed in the given
+     version.  version may be a fully qualified version, of the form
+     sourcepackagename/version.
+
+     This command is equivalent to found followed by notfound (the
+     found removes the fixed at a particular version, and notfound
+     removes the found) with the exception that the bug is not
+     reopened if the found version is greater than any existing fixed
+     version.  It is intended for fixing mistakes in the record of
+     when a bug was fixed; in most cases, you actually want found, not
+     notfixed.
+
 'submitter bugnumber originator-address | !'
      Changes the originator of #bugnumber to originator-address.
 
@@ -761,7 +883,14 @@ Debbugs control mailserver commands
      maintainer at address.  This does not actually forward the
      report.  This can be used to change an existing incorrect
      forwarded-to address, or to record a new one for a bug that
-     wasn't previously noted as having been forwarded.
+     wasn't previously noted as having been forwarded.  address should
+     generally be a URI, or possibly an email address.  Using a URI
+     where possible allows tools to query a remote bug tracking system
+     (such as bugzilla) for a bug's status.
+
+     Example usage:
+
+          forwarded 12345 http://bugz.illa.foo/cgi/54321
 
 'notforwarded bugnumber'
      Forgets any idea that bugnumber has been forwarded to any
@@ -781,6 +910,8 @@ Debbugs control mailserver commands
      Set the severity level for bug report #bugnumber to severity.  No
      notification is sent to the user who reported the bug.
 
+     Severities are serious, important, normal, minor, wishlist.
+
      For their meanings please consult the general developers'
      documentation for the bug system.
 
@@ -834,10 +965,14 @@ Debbugs control mailserver commands
 
 'forcemerge bugnumber bugnumber ...'
      Forcibly merges two or more bug reports.  The first bug is chosen
-     as the master bug, and its seetings are assigned to the bugs
+     as the master bug, and its settings are assigned to the bugs
      listed next in the command.  See the text above for a description
      of what merging means.
 
+     Note that this makes it possible to close bugs by merging; you
+     are responsible for notifying submitters with an appropriate
+     close message if you do this.
+
 'unmerge bugnumber'
      Disconnects a bug report from any other reports with which it may
      have been merged.  If the report listed is merged with several
@@ -878,14 +1013,13 @@ Debbugs control mailserver commands
           tags 123456 = moreinfo unreproducible
 
      Available tags currently include patch, wontfix, moreinfo,
-     unreproducible, help, pending, fixed, security, upstream, potato,
-     woody, sarge, sid and experimental.
+     unreproducible, help, pending, fixed, security, notabug and easy.
 
      For their meanings please consult the general developers'
      documentation for the bug system.
 
-'block bugnumber by|with bug [ bug ... ]'
-'unblock bugnumber by|with bug [ bug ... ]'
+'block bugnumber by bug [ bug ... ]'
+'unblock bugnumber by bug [ bug ... ]'
      Use to note that one bug blocks another bug from being fixed.
      The first listed bug is the one being blocked, and it is followed
      by the bug or bugs that are blocking it.  Use unblock to unblock
@@ -983,44 +1117,48 @@ Node: Searching Bugs6937
 Ref: Searching Bugs-Footnote-111250
 Ref: Searching Bugs-Footnote-211338
 Node: Presenting Bugs11429
-Node: Tabulated Lists12005
-Node: TODO Items15680
-Node: Control Messages16736
-Node: Applying Patches19989
-Node: Minor Mode21355
-Node: Command Index22411
-Node: Variable Index23200
-Node: Key Index24274
-Node: Mail Command Index25840
-Ref: Mail Command Index: reassign25993
-Ref: Mail Command Index: reopen26457
-Ref: Mail Command Index: found27611
-Ref: Mail Command Index: notfound28692
-Ref: Mail Command Index: submitter29101
-Ref: Mail Command Index: forwarded29495
-Ref: Mail Command Index: notforwarded29834
-Ref: Mail Command Index: retitle30035
-Ref: Mail Command Index: severity30419
-Ref: Mail Command Index: clone30684
-Ref: Mail Command Index: merge31448
-Ref: Mail Command Index: forcemerge32835
-Ref: Mail Command Index: unmerge33109
-Ref: Mail Command Index: tags33812
-Ref: Mail Command Index: block34919
-Ref: Mail Command Index: unblock34961
-Ref: Mail Command Index: close35451
-Ref: Mail Command Index: package36101
-Ref: Mail Command Index: owner36713
-Ref: Mail Command Index: noowner37076
-Ref: Mail Command Index: archive37249
-Ref: Mail Command Index: unarchive37390
-Ref: Mail Command Index: #37683
-Ref: Mail Command Index: quit37943
-Ref: Mail Command Index: stop37950
-Ref: Mail Command Index: thank37957
-Ref: Mail Command Index: thanks37965
-Ref: Mail Command Index: thankyou37974
-Ref: Mail Command Index: thank you37985
-Ref: Mail Command Index: --37997
+Node: Tabulated Lists12091
+Node: TODO Items15946
+Node: Control Messages17280
+Node: Applying Patches20794
+Node: Posting Patches22184
+Node: Customizing debbugs-gnu-pick-commits24669
+Node: Minor Mode25369
+Node: Command Index26425
+Node: Variable Index27285
+Node: Key Index28730
+Node: Mail Command Index30438
+Ref: Mail Command Index: reassign30591
+Ref: Mail Command Index: reopen31357
+Ref: Mail Command Index: found32511
+Ref: Mail Command Index: notfound33592
+Ref: Mail Command Index: fixed34001
+Ref: Mail Command Index: notfixed34447
+Ref: Mail Command Index: submitter35070
+Ref: Mail Command Index: forwarded35464
+Ref: Mail Command Index: notforwarded36081
+Ref: Mail Command Index: retitle36282
+Ref: Mail Command Index: severity36666
+Ref: Mail Command Index: clone36997
+Ref: Mail Command Index: merge37761
+Ref: Mail Command Index: forcemerge39148
+Ref: Mail Command Index: unmerge39592
+Ref: Mail Command Index: tags40295
+Ref: Mail Command Index: block41361
+Ref: Mail Command Index: unblock41398
+Ref: Mail Command Index: close41883
+Ref: Mail Command Index: package42533
+Ref: Mail Command Index: owner43145
+Ref: Mail Command Index: noowner43508
+Ref: Mail Command Index: archive43681
+Ref: Mail Command Index: unarchive43822
+Ref: Mail Command Index: #44115
+Ref: Mail Command Index: quit44375
+Ref: Mail Command Index: stop44382
+Ref: Mail Command Index: thank44389
+Ref: Mail Command Index: thanks44397
+Ref: Mail Command Index: thankyou44406
+Ref: Mail Command Index: thank you44417
+Ref: Mail Command Index: --44429
 
 End Tag Table
diff --git a/packages/debbugs/debbugs-ug.texi b/packages/debbugs/debbugs-ug.texi
index ea6d51e..1a1f02e 100644
--- a/packages/debbugs/debbugs-ug.texi
+++ b/packages/debbugs/debbugs-ug.texi
@@ -8,7 +8,7 @@
 @end direntry
 
 @copying
-Copyright @copyright{} 2015-2018 Free Software Foundation, Inc.
+Copyright @copyright{} 2015-2019 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -313,6 +313,7 @@ in @code{org-mode}.
 * TODO Items::                  TODO Items.
 * Control Messages::            Control Messages.
 * Applying Patches::            Applying Patches in the Emacs Repository.
+* Posting Patches::             Posting Patches to Debbugs from the Emacs 
Repository.
 @end menu
 
 
@@ -426,6 +427,13 @@ Toggle showing of closed bugs.
 @code{debbugs-gnu-send-control-message} @*
 Send a control message for this bug, @ref{Control Messages}.
 
+@item
+@kindex @kbd{E}
+@kbd{E} @tab
+@code{debbugs-gnu-make-control-message} @*
+Make (but don't yet send) a control message for this bug, @ref{Control
+Messages}.
+
 @end multitable
 
 @vindex debbugs-gnu-suppress-closed
@@ -482,10 +490,20 @@ Toggle local tag of bugs.
 @code{debbugs-gnu-send-control-message} @*
 Send a control message for this bug, @ref{Control Messages}.
 
+@item
+@kindex @kbd{C-c # E}
+@kbd{C-c # E} @tab
+@code{debbugs-gnu-make-control-message} @*
+Make (but don't yet send) a control message for this bug, @ref{Control
+Messages}.
+
 @end multitable
 
 When the bug attributes are shown by @code{org-cycle}, there is a link
-@code{Messages} which opens a GNUS ephemeral group for that bug.@c 
(@pxref{xxx}).
+@code{Messages} which opens the messages for that bug.  @c (@pxref{xxx}).
+The user options @code{debbugs-gnu-suppress-closed} and
+@code{debbugs-gnu-mail-backend} have the same meaning as in
+@ref{Tabulated Lists}.
 
 
 @node Control Messages
@@ -522,7 +540,6 @@ bug belongs to the @code{"emacs"} package.
 
 @item confirmed
 @itemx easy
-@itemx fixed
 @itemx help
 @itemx moreinfo
 @itemx notabug
@@ -531,7 +548,7 @@ bug belongs to the @code{"emacs"} package.
 @itemx security
 @itemx unreproducible
 @itemx wontfix
-"tags 12345 confirmed|easy|fixed|help|moreinfo|notabug"
+"tags 12345 confirmed|easy|help|moreinfo|notabug"
 
 "tags 12345 patch|pending|security|unreproducible|wontfix"
 
@@ -550,6 +567,15 @@ If the command invoking the control message has been 
prefixed with
 The second argument in the close message, the Emacs version, is read
 interactively if the bug belongs to the @code{"emacs"} package.
 
+@item found
+@itemx notfound
+@itemx fixed
+@itemx notfixed
+"found|notfound|fixed|notfixed 12345 25.1"
+
+The second argument, the Emacs version, is read interactively if the
+bug belongs to the @code{"emacs"} package.
+
 @item forwarded
 "forwarded 12345 @var{address}"
 
@@ -606,6 +632,11 @@ The new bug title is read interactively.
 
 The username, read interactively, is either a package name or an email
 address.  The tag to be set is also read interactively.
+
+@item documentation
+"user emacs" @*
+"usertag 12345 documentation"
+
 @end table
 
 @vindex debbugs-gnu-send-mail-function
@@ -647,6 +678,66 @@ creates a ChangeLog entry with all needed information.  A 
final
 @kbd{M-m} in the @samp{ChangeLog} buffer commits the patch via
 @samp{*vc-log*}.
 
+@node Posting Patches
+@section Posting Patches to Debbugs from the Emacs Repository
+
+Once you have committed a patch locally to fix a bug you usually want
+to post it to the bug thread for review and testing.  And when the
+patch is deemed satisfactory and pushed to the official repository,
+the bug should be marked closed.
+
+@vindex debbugs-gnu-read-commit-range-hook
+The query for commit (or commit range) to use is controlled by
+@code{debbugs-gnu-read-commit-range-hook}.  Initially it has an entry
+which operates in @samp{*vc-change-log*} buffers, but additional
+entries may be added to give sensible results for other modes that
+work with git.
+
+@findex debbugs-gnu-pick-commits
+The command @code{debbugs-gnu-pick-commits} (bound to @kbd{c} in
+@code{*vc-change-log*} buffers by default) helps automate both these
+processes: it queries for a commit (or commit range), and a bug number
+(defaulting to the bug number mentioned in the commit message).  It
+then jumps you to a buffer associated with the bug.  When you reply to
+a message in the bug thread, you are asked whether to post the commits
+as patches (optionally tagging the bug with @code{"patch"}), or
+announce that the bug has been fixed by the selected commits
+(optionally closing the bug and marking as closed in the Emacs version
+corresponding to the patch).
+
+For example, suppose you are reading the message of ``Bug#12345:
+foo-mode fails to call frobnicate on startup'' in a message buffer.
+You decide to fix it, so you switch to the source code, add in the
+missing call and commit locally, with the commit message ``*
+lisp/foo-mode.el (foo-mode): Call frobnicate (Bug#12345).''  Use
+@kbd{C-x v l} to run @code{vc-print-log}, and navigate to the new
+commit.  Press @kbd{c} and then @kbd{@key{RET}} to accept the default
+bug number (which will be 12345 since it's in the commit message) in
+response to the prompt.  You are then popped to the message buffer,
+and when you reply to the message, press @kbd{p} to post the git
+formatted patch as an attachment for review, and then answer @kbd{y}
+to tag the bug with @code{"patch"} when the message is sent.  Assuming
+you get favorable reviews, you then push it, and again hit @kbd{c} but
+this time press @kbd{a} (for ``announce'') after replying to the
+relevant bug thread message.  This will insert some text describing
+the commit and where it was pushed to, and answering @kbd{y} will
+arrange for the bug to be closed when the message is sent.
+
+@node Customizing debbugs-gnu-pick-commits
+@subsection Customizing debbugs-gnu-pick-commits
+
+@vindex debbugs-gnu-commit-description-format
+@vindex debbugs-gnu-git-remote-info-alist
+The string inserted to describe an announced commit is controlled by
+the user option @code{debbugs-gnu-commit-description-format}, it is a
+format string passed to the @code{--format} argument of @code{git
+show}.  Additionally, if the remote url matches an entry in
+@code{debbugs-gnu-git-remote-info-alist}, then its @code{commit-url}
+subitem is appended to the commit description.  By default this
+user option is configured for the GNU Emacs and GNU ELPA repositories,
+more entries may be added to work with other repositories of other
+packages.
+
 
 @node Minor Mode
 @chapter Minor Mode
diff --git a/packages/debbugs/debbugs.el b/packages/debbugs/debbugs.el
index 2959911..bf4c95e 100644
--- a/packages/debbugs/debbugs.el
+++ b/packages/debbugs/debbugs.el
@@ -1,12 +1,12 @@
 ;;; debbugs.el --- SOAP library to access debbugs servers  -*- 
lexical-binding:t -*-
 
-;; Copyright (C) 2011-2018 Free Software Foundation, Inc.
+;; Copyright (C) 2011-2019 Free Software Foundation, Inc.
 
 ;; Author: Michael Albinus <address@hidden>
 ;; Keywords: comm, hypermedia
 ;; Package: debbugs
-;; Version: 0.16
-;; Package-Requires: ((soap-client "3.1.5") (cl-lib "0.5"))
+;; Version: 0.19
+;; Package-Requires: ((emacs "25.1") (soap-client "3.1.5") (cl-lib "0.5"))
 
 ;; This file is not part of GNU Emacs.
 
@@ -61,7 +61,6 @@ with bug logs.
 
 The list initially contains two predefined and configured Debbugs
 servers: \"gnu.org\" and \"debian.org\"."
-  :group 'debbugs
   :link '(custom-manual "(debbugs)Debbugs server specifiers")
   :type '(choice
          (const nil)
@@ -81,7 +80,6 @@ servers: \"gnu.org\" and \"debian.org\"."
 This corresponds to the Debbugs server to be accessed, either
 \"gnu.org\", or \"debian.org\", or user defined port name."
   ;; Maybe we should create an own group?
-  :group 'debbugs
   :type '(choice :tag "Debbugs server" (const "gnu.org") (const "debian.org")
                 (string :tag "user defined port name")))
 
@@ -109,7 +107,6 @@ This corresponds to the Debbugs server to be accessed, 
either
 (defcustom debbugs-cache-expiry (* 60 60)
   "How many seconds debbugs query results are cached.
 t or 0 disables caching, nil disables expiring."
-  :group 'debbugs
   :type '(choice (const :tag "Always" t)
                 (const :tag "Never" nil)
                 (integer :tag "Seconds")))
diff --git a/packages/debbugs/debbugs.info b/packages/debbugs/debbugs.info
index 4755e43..fdcd79c 100644
--- a/packages/debbugs/debbugs.info
+++ b/packages/debbugs/debbugs.info
@@ -1,7 +1,7 @@
 This is debbugs.info, produced by makeinfo version 6.5 from
 debbugs.texi.
 
-Copyright (C) 2011-2018 Free Software Foundation, Inc.
+Copyright (C) 2011-2019 Free Software Foundation, Inc.
 
      Permission is granted to copy, distribute and/or modify this
      document under the terms of the GNU Free Documentation License,
diff --git a/packages/debbugs/debbugs.texi b/packages/debbugs/debbugs.texi
index 898fdb6..13d0501 100644
--- a/packages/debbugs/debbugs.texi
+++ b/packages/debbugs/debbugs.texi
@@ -8,7 +8,7 @@
 @end direntry
 
 @copying
-Copyright @copyright{} 2011-2018 Free Software Foundation, Inc.
+Copyright @copyright{} 2011-2019 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
diff --git a/packages/debbugs/instructions.texi 
b/packages/debbugs/instructions.texi
index ba51807..6117351 100644
--- a/packages/debbugs/instructions.texi
+++ b/packages/debbugs/instructions.texi
@@ -1,3 +1,6 @@
+@c This is a texi-fied version of
+@c @url{https://debbugs.gnu.org/server-control.html}.  Add-ons are
+@c taken from @url{https://www.debian.org/Bugs/server-control}.
 @table @samp
 @anchor{Mail Command Index: reassign}
 @item reassign bugnumber package [ version ]
@@ -9,6 +12,12 @@ change an earlier assignment. No notifications are sent to 
anyone
 If you supply a version, the bug tracking system will note that
 the bug affects that version of the newly-assigned package.
 
+@c @url{https://www.debian.org/Bugs/server-control}
+You can assign a bug to two packages at once by separating the package
+names with a comma. However, you should only do this if the bug can be
+fixed by a change to either package. If this is not the case, you
+should clone the bug and reassign the clone to the other package.
+
 @anchor{Mail Command Index: reopen}
 @item reopen bugnumber [ originator-address | = | ! ]
 Reopens #bugnumber if it is closed.
@@ -70,6 +79,31 @@ is not listed as fixed in that version either; no information
 about that version will be known. It is intended for fixing
 mistakes in the record of when a bug was found.
 
+@c @url{https://www.debian.org/Bugs/server-control}
+@anchor{Mail Command Index: fixed}
+@item fixed bugnumber version
+Indicate that bug #bugnumber was fixed in the given version of the
+package to which it is assigned. version may be a fully qualified
+version, of the form sourcepackagename/version.
+
+This does not cause the bug to be marked as closed, it merely adds
+another version in which the bug was fixed. Use the bugnumber-done
+address to close a bug and mark it fixed in a particular version.
+
+@c @url{https://www.debian.org/Bugs/server-control}
+@anchor{Mail Command Index: notfixed}
+@item notfixed bugnumber version
+Remove the record that bug #bugnumber has been fixed in the given
+version. version may be a fully qualified version, of the form
+sourcepackagename/version.
+
+This command is equivalent to found followed by notfound (the found
+removes the fixed at a particular version, and notfound removes the
+found) with the exception that the bug is not reopened if the found
+version is greater than any existing fixed version. It is intended for
+fixing mistakes in the record of when a bug was fixed; in most cases,
+you actually want found, not notfixed.
+
 @anchor{Mail Command Index: submitter}
 @item submitter bugnumber originator-address | !
 Changes the originator of #bugnumber to originator-address.
@@ -83,11 +117,20 @@ merged bugs.
 
 @anchor{Mail Command Index: forwarded}
 @item forwarded bugnumber address
-Notes that bugnumber has been forwarded to the upstream maintainer
-at address. This does not actually forward the report. This can be
-used to change an existing incorrect forwarded-to address, or to
-record a new one for a bug that wasn't previously noted as having
-been forwarded.
+@c @url{https://www.debian.org/Bugs/server-control}
+Notes that bugnumber has been forwarded to the upstream maintainer at
+address. This does not actually forward the report. This can be used
+to change an existing incorrect forwarded-to address, or to record a
+new one for a bug that wasn't previously noted as having been
+forwarded. address should generally be a URI, or possibly an email
+address. Using a URI where possible allows tools to query a remote bug
+tracking system (such as bugzilla) for a bug's status.
+
+Example usage:
+
+@example
+forwarded 12345 http://bugz.illa.foo/cgi/54321
+@end example
 
 @anchor{Mail Command Index: notforwarded}
 @item notforwarded bugnumber
@@ -110,6 +153,9 @@ merged.
 Set the severity level for bug report #bugnumber to severity. No
 notification is sent to the user who reported the bug.
 
+@c @url{https://www.debian.org/Bugs/server-control}
+Severities are serious, important, normal, minor, wishlist.
+
 For their meanings please consult the general developers'
 documentation for the bug system.
 
@@ -168,10 +214,15 @@ of the reports each separately meet the criteria for 
expiry.
 @anchor{Mail Command Index: forcemerge}
 @item forcemerge bugnumber bugnumber @dots{}
 Forcibly merges two or more bug reports. The first bug is chosen
-as the master bug, and its seetings are assigned to the bugs
+as the master bug, and its settings are assigned to the bugs
 listed next in the command. See the text above for a description
 of what merging means.
 
+@c @url{https://www.debian.org/Bugs/server-control}
+Note that this makes it possible to close bugs by merging; you are
+responsible for notifying submitters with an appropriate close message
+if you do this.
+
 @anchor{Mail Command Index: unmerge}
 @item unmerge bugnumber
 Disconnects a bug report from any other reports with which it may
@@ -216,16 +267,15 @@ tags 123456 = moreinfo unreproducible
 @end example
 
 Available tags currently include patch, wontfix, moreinfo,
-unreproducible, help, pending, fixed, security, upstream, potato,
-woody, sarge, sid and experimental.
+unreproducible, help, pending, fixed, security, notabug and easy.
 
 For their meanings please consult the general developers'
 documentation for the bug system.
 
 @anchor{Mail Command Index: block}
-@item block bugnumber by|with bug [ bug @dots{} ]
+@item block bugnumber by bug [ bug @dots{} ]
 @anchor{Mail Command Index: unblock}
-@itemx unblock bugnumber by|with bug [ bug @dots{} ]
+@itemx unblock bugnumber by bug [ bug @dots{} ]
 Use to note that one bug blocks another bug from being fixed. The
 first listed bug is the one being blocked, and it is followed by
 the bug or bugs that are blocking it. Use unblock to unblock a
diff --git a/packages/diff-hl/diff-hl.el b/packages/diff-hl/diff-hl.el
index c467729..22bb816 100644
--- a/packages/diff-hl/diff-hl.el
+++ b/packages/diff-hl/diff-hl.el
@@ -5,7 +5,7 @@
 ;; Author:   Dmitry Gutov <address@hidden>
 ;; URL:      https://github.com/dgutov/diff-hl
 ;; Keywords: vc, diff
-;; Version:  1.8.6
+;; Version:  1.8.7
 ;; Package-Requires: ((cl-lib "0.2") (emacs "24.3"))
 
 ;; This file is part of GNU Emacs.
@@ -248,17 +248,17 @@ the end position as its only argument."
                diff-hl-reference-revision))))
 
 (defun diff-hl-changes-buffer (file backend)
+  ;; FIXME: To diff against the staging area, call 'git diff-files -p'.
   (let ((buf-name " *diff-hl* "))
     (condition-case err
         (diff-hl-with-diff-switches
-         ;; FIXME: To diff against the staging area, call 'git diff-files -p'.
          (vc-call-backend backend 'diff (list file)
                           diff-hl-reference-revision nil
                           buf-name))
       (error
+       ;; https://github.com/dgutov/diff-hl/issues/117
        (when (string-match-p "\\`Failed (status 128)" (error-message-string 
err))
          (diff-hl-with-diff-switches
-          ;; FIXME: To diff against the staging area, call 'git diff-files -p'.
           (vc-call-backend backend 'diff (list file)
                            "4b825dc642cb6eb9a060e54bf8d69288fbee4904"
                            nil
@@ -546,7 +546,6 @@ The value of this variable is a mode line template as in
         ;; Magit versions 2.0-2.3 don't do the above and call this
         ;; instead, but only when they dosn't call `revert-buffer':
         (add-hook 'magit-not-reverted-hook 'diff-hl-update nil t)
-        (add-hook 'auto-revert-mode-hook 'diff-hl-update nil t)
         (add-hook 'text-scale-mode-hook 'diff-hl-maybe-redefine-bitmaps nil t))
     (remove-hook 'after-save-hook 'diff-hl-update t)
     (remove-hook 'after-change-functions 'diff-hl-edit t)
@@ -555,7 +554,6 @@ The value of this variable is a mode line template as in
     (remove-hook 'after-revert-hook 'diff-hl-update t)
     (remove-hook 'magit-revert-buffer-hook 'diff-hl-update t)
     (remove-hook 'magit-not-reverted-hook 'diff-hl-update t)
-    (remove-hook 'auto-revert-mode-hook 'diff-hl-update t)
     (remove-hook 'text-scale-mode-hook 'diff-hl-maybe-redefine-bitmaps t)
     (diff-hl-remove-overlays)))
 
diff --git a/packages/djvu/djvu.el b/packages/djvu/djvu.el
index 098a1dc..1f20102 100644
--- a/packages/djvu/djvu.el
+++ b/packages/djvu/djvu.el
@@ -4,7 +4,7 @@
 
 ;; Author: Roland Winkler <address@hidden>
 ;; Keywords: files, wp
-;; Version: 1.0.1
+;; Version: 1.1
 
 ;; This program is free software; you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
@@ -43,24 +43,10 @@
 ;;
 ;; A normal work flow is as follows:
 ;;
-;; To visit a djvu file type M-x djvu-find-file.  This command is the
-;; only entry point to this package.  You can bind this command to a key,
-;; for example
-;;
-;;   (global-set-key "\C-cd" 'djvu-find-file)
-;;
-;; Or you can use something more general like
-;;
-;;   (defun djvu-find-file-noselect (f-f-n filename &rest args)
-;;     "If FILENAME is a Djvu file call `djvu-find-file'."
-;;     (if (string-match "\\.djvu\\'" (file-name-sans-versions filename))
-;;         (djvu-find-file filename nil nil t)
-;;       (apply f-f-n filename args)))
-;;   (advice-add 'find-file-noselect :around #'djvu-find-file-noselect)
-;;
-;; If you use `djvu-find-file' to visit the file foo.djvu, it puts you into
-;; the (read-only) buffer foo.djvu.  Normally, this buffer (plus possibly
-;; the outline buffer) is all you need.
+;; Djvu files are assumed to have the file extension ".djvu".
+;; When you visit the file foo.djvu, it puts you into the (read-only)
+;; buffer foo.djvu.  Normally, this buffer (plus possibly the outline buffer)
+;; is all you need.
 ;;
 ;; The menu bar of this buffer lists most of the commands with their
 ;; respective key bindings.  For example, you can:
@@ -149,6 +135,24 @@
 
 ;;; News:
 
+;; v1.1:
+;; - Use `auto-mode-alist' with file extension ".djvu".
+;;
+;; - Support bookmarks.
+;;
+;; - Display total number of pages in mode line.
+;;
+;; - New option `djvu-rect-area-nodups'.
+;;
+;; - User options `djvu-save-after-edit' and `djvu-region-history' removed
+;;   (obsolete).
+;;
+;; - More robust code for merging lines in text layer.
+;;
+;; - Clean up handling of editing positions in a djvu document.
+;;
+;; - Bug fixes.
+;;
 ;; v1.0.1:
 ;; - Use `create-file-buffer' instead of `generate-new-buffer'
 ;;   for compatibility with uniquify.
@@ -171,6 +175,19 @@
 ;;
 ;; - Font locking.
 
+;;; To do:
+
+;; - Auto-save script buffers.  How can we recover these buffers
+;;   in a meaningful way?
+;;
+;; - Use `replace-buffer-contents'?
+;;
+;; - New command that makes line breaks in text layer better searchable:
+;;   Scan text layer for lines ending with hyphenated words "xxx-".
+;;   If the first word of the next line is "yyy" and ispell knows
+;;   the word "xxxyyy", replace "yyy" with that string.  A search
+;;   for the word "xxxyyy" will then succeed.
+
 ;;; Code:
 
 ;;; Djvu internals (see Sec. 8.3.4.2.3.1 of djvu3spec.djvu)
@@ -185,6 +202,8 @@
 ;;
 ;; c = #RRGGBB   t = thickness (1..32)
 ;; o = opacity = 0..200 (yes)
+;;
+;; zones: page, column, region, para, line, word, and char
 
 (require 'button)
 (eval-when-compile
@@ -274,13 +293,6 @@ This is a list with six elements (READ TEXT ANNOT SHARED 
BOOKMARKS OUTLINE)."
   :group 'djvu
   :type 'integer)
 
-;; FIXME: The proper and efficient alternative to saving the changes
-;; is to update the read buffer so that these buffers are consistent.
-(defcustom djvu-save-after-edit t
-  "If non-nil save Djvu document after each call of a text editing command."
-  :group 'djvu
-  :type 'boolean)
-
 (defcustom djvu-inherit-input-method t
   "If non-nil calls of `read-string' inherit the input method."
   :group 'djvu
@@ -302,11 +314,6 @@ These extensions include the period."
   :group 'djvu
   :type 'regexp)
 
-(defcustom djvu-region-history t
-  "If non-nil `djvu-read-string' pushes region to `minibuffer-history'."
-  :group 'djvu
-  :type 'boolean)
-
 (defcustom djvu-read-prop-newline 2
   "Number of newline characters in Read buffer for consecutive region."
   :group 'djvu
@@ -332,6 +339,11 @@ Used by `djvu-region-string'."
   :group 'djvu
   :type '(repeat (cons (regexp) (string))))
 
+(defcustom djvu-rect-area-nodups nil
+  "If non-nil `djvu-rect-area' does not create multiple rects for same areas."
+  :group 'djvu
+  :type 'boolean)
+
 ;; Internal variables
 
 (defvar djvu-test nil
@@ -345,6 +357,7 @@ Used by `djvu-region-string'."
   "Expanded rect list for propertizing the Read buffer.
 This is a list with elements (COORDS URL TEXT COLOR ID) stored
 in `djvu-doc-rect-list'.")
+
 (defvar djvu-last-rect nil
   "Last rect used for propertizing the Read buffer.
 This is a list (BEG END COORDS URL TEXT COLOR).")
@@ -435,11 +448,14 @@ Each element is a cons pair (PAGE-NUM . FILE-ID).")
 (defvar-local djvu-doc-pagesize nil
   "Size of current page of a Djvu document.")
 
-(defvar-local djvu-doc-dpos nil
-  "The current editing position in a Djvu document.")
+(defvar-local djvu-doc-read-pos nil
+  "The current editing position in the Read buffer (image coordinates).
+This is either a list (X Y) or a list or vector (XMIN YMIN XMAX YMAX).
+Used in `djvu-image-mode' when we cannot go to this position.")
 
 (defvar-local djvu-doc-image nil
-  "Image of current page of a Djvu document.")
+  "Image of current page of a Djvu document.
+This is a list (PAGE-NUM MAGNIFICATION IMAGE).")
 
 ;;; Helper functions and macros
 
@@ -514,21 +530,19 @@ Preserve FILE if `djvu-test' is non-nil."
   "Switch to Djvu Read buffer."
   (interactive (list nil (djvu-dpos)))
   (switch-to-buffer (djvu-ref read-buf doc))
-  (if dpos (djvu-goto-read dpos)))
+  (djvu-goto-read dpos))
 
 (defun djvu-switch-text (&optional doc dpos)
   "Switch to Djvu Text buffer."
   (interactive (list nil (djvu-dpos)))
   (switch-to-buffer (djvu-ref text-buf doc))
-  (if dpos (djvu-goto-dpos 'word dpos)))
+  (djvu-goto-dpos 'word dpos))
 
 (defun djvu-switch-annot (&optional doc dpos)
   "Switch to Djvu Annotations buffer."
   (interactive (list nil (djvu-dpos)))
   (switch-to-buffer (djvu-ref annot-buf doc))
-  (if (and dpos
-           (or (djvu-goto-dpos 'rect dpos)
-               (djvu-goto-dpos 'text dpos)))
+  (if (djvu-goto-dpos "\\(?:rect\\|text\\)" dpos)
       ;; If we have matching buffer position in the annotations buffer,
       ;; put point at the end of the annotations string.
       (re-search-backward "\"")))
@@ -566,13 +580,12 @@ Preserve FILE if `djvu-test' is non-nil."
 
 (defun djvu-dpos (&optional doc)
   "Djvu position in current Djvu buffer."
-  (let ((dpos (cond ((eq djvu-buffer 'read)
-                     (djvu-read-dpos nil doc))
-                    ((eq djvu-buffer 'text)
-                     (djvu-text-dpos nil doc))
-                    ((eq djvu-buffer 'annot)
-                     (djvu-annot-dpos nil doc)))))
-    (if dpos (djvu-set dpos dpos doc))))
+  (cond ((eq djvu-buffer 'read)
+         (djvu-read-dpos nil doc))
+        ((eq djvu-buffer 'text)
+         (djvu-text-dpos nil doc))
+        ((eq djvu-buffer 'annot)
+         (djvu-annot-dpos nil doc))))
 
 (defun djvu-read-page ()
   "Read page number interactively."
@@ -644,6 +657,7 @@ This relies on `djvu-kill-doc-all' for doing the real work."
 
 (defvar djvu-in-kill-doc nil
   "Non-nil if we are running `djvu-kill-doc-all'.")
+
 (defun djvu-kill-doc-all ()
   "Kill all buffers visiting `djvu-doc' except for the current buffer.
 This function is added to `kill-buffer-hook' of all buffers visiting `djvu-doc'
@@ -671,7 +685,6 @@ so that killing the current buffer kills all buffers 
visiting `djvu-doc'."
   (interactive)
   (unless doc (setq doc djvu-doc))
   (let ((afile (abbreviate-file-name (djvu-ref file doc)))
-        (dpos (djvu-read-dpos nil doc))
         (text-modified  (buffer-modified-p (djvu-ref text-buf doc)))
         (annot-modified (buffer-modified-p (djvu-ref annot-buf doc)))
         (shared-modified (buffer-modified-p (djvu-ref shared-buf doc)))
@@ -685,16 +698,13 @@ so that killing the current buffer kills all buffers 
visiting `djvu-doc'."
       (djvu-with-temp-file script
         (if annot-modified (djvu-save-annot script doc))
         (if shared-modified (djvu-save-annot script doc t))
-        (if text-modified (djvu-save-text script doc)) ; updates Read buffer
+        (if text-modified (djvu-save-text doc script)) ; updates Read buffer
         (if bookmarks-modified (djvu-save-bookmarks script doc))
         (djvu-djvused doc nil "-f" script "-s"))
       (if (and annot-modified (not text-modified))
           (djvu-init-read (djvu-read-text doc) doc))
       (djvu-all-buffers doc
-        (set-buffer-modified-p nil))
-      ;; Update the buffer position in the Read buffer that was lost
-      ;; when updating the Read buffer.
-      (if text-modified (djvu-goto-read dpos)))))
+        (set-buffer-modified-p nil)))))
 
 (defun djvu-modified ()
   "Mark Djvu Read and Outline buffers as modified if necessary.
@@ -785,6 +795,7 @@ the purpose of calling djvused is to update the Djvu file."
 
 (defvar djvu-color-attributes '(border hilite lineclr backclr textclr)
   "List of color attributes known to Djvu.")
+
 (defvar djvu-color-re
   (concat "(" (regexp-opt (mapcar 'symbol-name djvu-color-attributes) t)
           "[ \t\n]+\\(%s\\(%s[[:xdigit:]][[:xdigit:]]"
@@ -846,11 +857,8 @@ If INITIAL-INPUT is non-nil use string from REGION as 
initial input."
       ;; Make the string in REGION the initial input.
       (read-string prompt (djvu-region-string region)
                    nil nil djvu-inherit-input-method)
-    ;; Let `minibuffer-history' know the string in REGION.
-    ;; Should we remove this string afterwards?
-    (if djvu-region-history
-        (add-to-history 'minibuffer-history (djvu-region-string region)))
-    (read-string prompt nil nil nil djvu-inherit-input-method)))
+    (read-string prompt nil nil (djvu-region-string region)
+                 djvu-inherit-input-method)))
 
 (defun djvu-interactive-color (color)
   "Return color specification for use in interactive calls.
@@ -1034,13 +1042,21 @@ This is a child of `special-mode-map'.")
     ["Quit Viewing" djvu-quit-window t]
     ["Kill Djvu buffers" djvu-kill-doc t]))
 
+(defvar bookmark-make-record-function)
+
 (define-derived-mode djvu-read-mode special-mode "Djview"
   "Mode for reading Djvu files."
-  (setq djvu-buffer 'read
-        buffer-undo-list t
-        mode-line-buffer-identification
-        (list 24 '(:eval (format "%s  p%d" (buffer-name) (djvu-ref page)))))
-  (set (make-local-variable 'revert-buffer-function) 'djvu-revert-buffer))
+  ;; The Read buffer is not editable.  So do not create auto-save files.
+  (setq buffer-auto-save-file-name nil ; permanent buffer-local
+        djvu-buffer 'read
+        buffer-undo-list t)
+  (let ((fmt (concat (car (propertized-buffer-identification "%s"))
+                     "  p%d/%d")))
+    (setq mode-line-buffer-identification
+          `(24 (:eval (format ,fmt (buffer-name) (djvu-ref page)
+                              (djvu-ref pagemax))))))
+  (setq-local revert-buffer-function #'djvu-revert-buffer)
+  (setq-local bookmark-make-record-function #'djvu-bookmark-make-record))
 
 (defvar djvu-script-mode-map
   (let ((km (make-sparse-keymap)))
@@ -1101,7 +1117,8 @@ This is a child of `lisp-mode-map'.")
 (defvar djvu-font-lock-keywords
   `((,(concat "^[ \t]*("
               (regexp-opt '("background" "zoom" "mode" "align"
-                            "maparea" "metadata" "bookmarks" "xmp") t))
+                            "maparea" "metadata" "bookmarks" "xmp")
+                          t))
      1 font-lock-keyword-face)
     (,(concat "\\(?:[ \t]+\\|^\\|(\\)("
               (regexp-opt '("url" "rect" "oval" "poly" "text" "line"
@@ -1118,14 +1135,23 @@ This is a child of `lisp-mode-map'.")
   "Font lock keywords for Djvu buffers.")
 
 (define-derived-mode djvu-script-mode lisp-mode "Djvu Script"
-  "Mode for editing Djvu scripts."
-  (setq mode-line-buffer-identification
-        (list 24 '(:eval (if djvu-doc
-                             (format "%s  p%d" (buffer-name)
-                                     (djvu-ref page)) "")))
+  "Mode for editing Djvu scripts.
+The annotations, shared annotations and bookmark buffers use this mode."
+  ;; Fixme: we should create auto-save files for the script buffers.
+  ;; This requires suitable names for the auto-save files that should
+  ;; be derived from `buffer-file-name'.
+  (setq buffer-auto-save-file-name nil ; permanent buffer-local
         fill-column djvu-fill-column
         font-lock-defaults '(djvu-font-lock-keywords))
-  (set (make-local-variable 'revert-buffer-function) 'djvu-revert-buffer))
+  (let* ((fmt1 (car (propertized-buffer-identification "%s")))
+         (fmt2 (concat fmt1 "  p%d/%d")))
+    (setq mode-line-buffer-identification
+          `(24 (:eval (if djvu-doc
+                          (format ,fmt2 (buffer-name) (djvu-ref page)
+                                  (djvu-ref pagemax))
+                        (format ,fmt1 (buffer-name)))))))
+  (setq-local revert-buffer-function #'djvu-revert-buffer)
+  (setq-local bookmark-make-record-function #'djvu-bookmark-make-record))
 
 (defvar djvu-outline-mode-map
   (let ((km (make-sparse-keymap)))
@@ -1186,14 +1212,31 @@ This is a child of `special-mode-map'.")
 
 (define-derived-mode djvu-outline-mode special-mode "Djvu OL"
   "Mode for reading the outline of Djvu files."
-  (setq djvu-buffer 'outline
-        buffer-undo-list t
-        mode-line-buffer-identification
-        (list 24 '(:eval (format "%s  p%d" (buffer-name) (djvu-ref page)))))
-  (set (make-local-variable 'revert-buffer-function) 'djvu-revert-buffer))
+  ;; The Outline buffer is not editable.  So do not create auto-save files.
+  (setq buffer-auto-save-file-name nil ; permanent buffer-local
+        djvu-buffer 'outline
+        buffer-undo-list t)
+  (let ((fmt (concat (car (propertized-buffer-identification "%s"))
+                     "  p%d/%d")))
+    (setq mode-line-buffer-identification
+          `(24 (:eval (format ,fmt (buffer-name) (djvu-ref page)
+                              (djvu-ref pagemax))))))
+  (setq-local revert-buffer-function #'djvu-revert-buffer)
+  (setq-local bookmark-make-record-function #'djvu-bookmark-make-record))
 
 ;;; General Setup
 
+;;;###autoload
+(add-to-list 'auto-mode-alist '("\\.djvu\\'" . djvu-dummy-mode))
+
+;;;###autoload
+(defun djvu-dummy-mode ()
+  "Djvu dummy mode for `auto-mode-alist'."
+  (djvu-find-file buffer-file-name nil nil t))
+
+;; FIXME: Add entry for `change-major-mode-hook'.
+;; How should this handle the plethora of buffers per djvu document?
+
 (defun djvu-read-file-name ()
   "Read file name of Djvu file.
 The numeric value of `current-prefix-arg' is the page number."
@@ -1227,10 +1270,12 @@ from file."
          (file-number (nthcdr 10 (file-attributes file)))
          (dir (file-name-directory file))
          (read-only (not (file-writable-p file)))
-         (doc (let ((old-buf (find-buffer-visiting file-truename)))
-                (and old-buf (buffer-local-value 'djvu-doc old-buf))))
+         (old-buf (if (equal buffer-file-truename file-truename)
+                      (current-buffer)
+                    (find-buffer-visiting file-truename)))
+         (doc (and old-buf (buffer-local-value 'djvu-doc old-buf)))
          (old-bufs (and doc (mapcar 'buffer-live-p (djvu-buffers doc)))))
-    ;; Sanity check (we should never need this)
+    ;; Sanity check.  We should never need this.
     (when (and old-bufs (memq nil old-bufs))
       (message "Killing dangling Djvu buffers...")
       (djvu-kill-doc doc)
@@ -1264,7 +1309,19 @@ from file."
                          (concat buf-basename
                                  (nth n djvu-buffer-name-extensions))
                          dir))))
-          (setq doc (fun 0))
+          (if old-buf
+              ;; This applies if `find-file-noselect' created OLD-BUF
+              ;; in order to visit FILE.  Hence recycle OLD-BUF as Read
+              ;; buffer so that `find-file-noselect' can do its job.
+              ;; FIXME: this ignores `djvu-buffer-name-extensions'
+              ;; because renaming OLD-BUF would break `uniquify'.
+              (with-current-buffer old-buf
+                (let ((inhibit-read-only t)
+                      (buffer-undo-list t))
+                  (erase-buffer))
+                (setq buffer-file-coding-system 'prefer-utf-8)
+                (setq doc old-buf))
+            (setq doc (fun 0)))
           (djvu-set read-buf doc doc)
           (djvu-set text-buf (fun 1) doc)
           (djvu-set annot-buf (fun 2) doc)
@@ -1272,7 +1329,7 @@ from file."
           (djvu-set bookmarks-buf (fun 4) doc)
           (djvu-set outline-buf (fun 5) doc)))
       ;; Of course, we have
-      ;; `djvu-doc' = `djvu-doc-read-buf'
+      ;; `djvu-doc-read-buf' = `djvu-doc'
       ;; `djvu-doc-file' = `buffer-file-name'.  Bother?
       ;; It seems Emacs does not like aliases for buffer-local variables.
       (djvu-set file file doc)
@@ -1311,8 +1368,8 @@ from file."
               ;; We assume that all buffers for a Djvu document have the same
               ;; read-only status.  Should we allow different values for the
               ;; buffers of one document?  Or do we need a 
`djvu-read-only-mode'?
-              buffer-read-only read-only)
-        (cd-absolute dir)
+              buffer-read-only read-only
+              default-directory dir)
         (set-visited-file-modtime)
         (add-hook 'post-command-hook 'djvu-modified nil t)
         (add-hook 'kill-buffer-hook 'djvu-kill-doc-all nil t))
@@ -1421,7 +1478,6 @@ PAGE is re-initialized if we are already viewing it."
   (if (or (buffer-modified-p (djvu-ref text-buf doc))
           (buffer-modified-p (djvu-ref annot-buf doc)))
       (djvu-save doc t))
-  (djvu-set dpos nil doc)
   ;; We process PAGE unconditionally, even if it equals the page
   ;; currently displayed.  Most often, PAGE equals the current page
   ;; if we want to redisplay PAGE.
@@ -1439,6 +1495,8 @@ PAGE is re-initialized if we are already viewing it."
                   doc))
     (djvu-set history-forward nil doc)
     (djvu-set page page doc)
+    ;; Fix me: Restore buffer positions if we revisit the same page.
+    (djvu-set read-pos nil doc)
     (with-temp-buffer
       (djvu-djvused doc t "-e"
                     (format "select %d; size; print-txt; print-ant;"
@@ -1462,22 +1520,18 @@ PAGE is re-initialized if we are already viewing it."
       (skip-chars-forward " \t\n")
       (let ((object (if (looking-at 
"(\\(page\\|column\\|region\\|para\\|line\\|word\\|char\\)")
                         (read (current-buffer)))))
-        (with-current-buffer (djvu-ref text-buf doc)
-          (let (buffer-read-only)
-            (erase-buffer)
-            (djvu-insert-text object "")
-            (insert "\n")
-            (goto-char (point-min))
-            (set-buffer-modified-p nil)
-            (setq buffer-undo-list nil)))
-
-        ;; Set up annotations buffer:
+        ;; Set up annotations buffer.
+        ;; This also initializes `djvu-doc-rect-list' that we need
+        ;; for propertizing the read buffer.
         (save-restriction
           (narrow-to-region (point) (point-max))
           (djvu-init-annot (djvu-ref annot-buf doc) doc))
 
+        ;; Set up text buffer
+        (djvu-init-text object doc t)
+
         ;; Set up read buffer
-        (djvu-init-read object doc)))))
+        (djvu-init-read object doc t)))))
 
 (defalias 'djvu-goto-page 'djvu-init-page
   "Goto PAGE of Djvu document DOC.")
@@ -1703,7 +1757,7 @@ The command `djvu-re-search-forward-continue' continues 
to search forward."
                      (looking-at (regexp-quote (prin1-to-string old)))))
         (error "`%s' not found" old))
       (replace-match (prin1-to-string new) t t)))
-  (if djvu-save-after-edit (djvu-save) (djvu-goto-read)))
+  (djvu-save-text))
 
 (defun djvu-split-word (bpos)
   "Split word at buffer position BPOS.
@@ -1711,11 +1765,10 @@ This command operates on the read buffer."
   (interactive "d")
   (let ((beg (djvu-property-beg bpos 'word))
         (dpos (djvu-read-dpos bpos)))
-    (djvu-set dpos dpos)
     (with-current-buffer (djvu-ref text-buf)
       (djvu-split-word-internal (djvu-goto-dpos 'word dpos)
                                 (- bpos beg))))
-  (if djvu-save-after-edit (djvu-save) (djvu-goto-read)))
+  (djvu-save-text))
 
 (defun djvu-split-word-internal (wpos split)
   "Split word at position WPOS at character position SPLIT.
@@ -1759,11 +1812,10 @@ This command operates on the read buffer."
   (interactive "r")
   (let ((bpos (djvu-read-dpos beg))
         (epos (djvu-read-dpos (1- end))))
-    (djvu-set dpos bpos)
     (with-current-buffer (djvu-ref text-buf)
       (djvu-merge-words-internal (djvu-goto-dpos 'word bpos)
                                  (djvu-goto-dpos 'word epos))))
-  (if djvu-save-after-edit (djvu-save) (djvu-goto-read)))
+  (djvu-save-text))
 
 (defun djvu-merge-words-internal (beg end)
   "Merge words between positions BEG and END.
@@ -1776,11 +1828,10 @@ This command operates on the text buffer."
     (beginning-of-line)
     (skip-chars-forward " \t")
     (setq beg (point))
-    (condition-case nil
-        (while (< (point) end)
-          (push (read (current-buffer)) words)
-          (unless (eq 'word (caar words)) (error "Invalid")))
-      (error (error "Syntax error in raw text")))
+    (while (< (point) end)
+      (push (read (current-buffer)) words)
+      (unless (eq 'word (caar words))
+        (error "Syntax error in raw text")))
     (delete-region beg (point))
     (let ((object (apply 'list 'word 0 0 0 0 (nreverse words))))
       (djvu-text-zone object 0 (make-vector 3 nil))
@@ -1798,11 +1849,10 @@ This command operates on the read buffer."
   ;; merely run `djvu-merge-lines-internal' in the text buffer.
   (let ((bpos (djvu-read-dpos beg))
         (epos (djvu-read-dpos (1- end))))
-    (djvu-set dpos bpos)
     (with-current-buffer (djvu-ref text-buf)
       (djvu-merge-lines-internal (djvu-goto-dpos 'word bpos)
                                  (djvu-goto-dpos 'word epos))))
-  (if djvu-save-after-edit (djvu-save) (djvu-goto-read)))
+  (djvu-save-text))
 
 (defun djvu-merge-lines-internal (beg end)
   "Merge lines between positions BEG and END.
@@ -1810,45 +1860,55 @@ This command operates on the text buffer."
   (interactive "r")
   ;; Calculate proper value of END
   (goto-char end)
-  (beginning-of-line)
-  (unless (looking-at "[ \t]*(line ")
-    (re-search-backward "^[ \t]*(line ")
-    (forward-sexp)
-    (setq end (point)))
+  (unless (looking-at "[ \t]*(word ")
+    (re-search-backward "^[ \t]*(word "))
+  (forward-sexp)
+  (setq end (point))
   ;; Calculate proper value of BEG
   (goto-char beg)
-  (beginning-of-line)
-  (unless (looking-at "[ \t]*(line ")
-    (re-search-backward "^[ \t]*(line "))
+  (unless (looking-at "[ \t]*(word ")
+    (re-search-backward "^[ \t]*(word "))
   (skip-chars-forward " \t")
   (setq beg (point))
-  (unless (< beg end) (error "Nothing to merge"))
-  ;; Parsing fails if the words belong to different paragraphs,
-  ;; regions or columns.  We would have to determine the lowest common
-  ;; object level of these words.  Then we could possibly merge
-  ;; everything (!) within this level
-  (if (re-search-forward "^[ \t]*\\(?:para\\|region\\|column\\)" end t)
-      (user-error "Cannot merge paragraphs, regions or columns"))
-  (let (words)
-    ;; Collect all words, ignore line headers
-    (condition-case nil
-        (while (<= (point) end)
-          (cond ((looking-at "[ \t]*(word ")
-                 (push (read (current-buffer)) words))
-                ((not (looking-at "[ \t]*(line "))
-                 (error "Invalid")))
-          (forward-line))
-      (error (error "Syntax error in raw text")))
-    ;; Remove old words
-    (goto-char beg)
-    (delete-region beg end)
-    ;; Re-insert words
-    (let ((indent (delete-and-extract-region
-                   (line-beginning-position) (point)))
-          (object (apply 'list 'line 0 0 0 0 (nreverse words))))
-      (djvu-text-zone object 0 (make-vector 3 nil))
-      (djvu-insert-text object indent)))
-  (undo-boundary))
+  (unless (< beg end) (user-error "Nothing to merge"))
+  ;; The following fails if the zone levels of the lines we want to merge
+  ;; are different.  For example:
+  ;; (line X X X X
+  ;;  (word X X X X string)
+  ;;  (word X X X X string))
+  ;; (para X X X X
+  ;;  (line X X X X
+  ;;   (word X X X X string)
+  ;;   (word X X X X string)))
+  (atomic-change-group
+    (save-restriction
+      (narrow-to-region beg end)
+      (mapc (lambda (zone)
+              (goto-char (point-min))
+              (let ((re (format ")[\n\t\s]+(%s [0-9]+ [0-9]+ [0-9]+ [0-9]+" 
zone)))
+                (while (re-search-forward re nil t)
+                  (replace-match ""))))
+            '("column" "region" "para" "line"))
+      ;; Check that we got what we want.
+      (goto-char (point-min))
+      (while (> (point-max) (progn (skip-chars-forward "\n\t\s") (point)))
+        (if (looking-at "(word ")
+            (forward-sexp) ; may signal `scan-error'
+          (error "Syntax error: cannot merge"))))))
+
+(defun djvu-init-text (object &optional doc reset)
+  "Initialize Text buffer."
+  (with-current-buffer (djvu-ref text-buf doc)
+    (let ((dpos (unless reset (djvu-text-dpos nil doc)))
+          buffer-read-only)
+      (erase-buffer)
+      (djvu-insert-text object "")
+      (insert "\n")
+      (if (not reset)
+          (djvu-goto-dpos 'word dpos)
+        (goto-char (point-min))
+        (set-buffer-modified-p nil)
+        (setq buffer-undo-list nil)))))
 
 (defun djvu-insert-text (object indent)
   "Insert OBJECT into Djvu text buffer recursively using indentation INDENT."
@@ -1905,23 +1965,37 @@ This command operates on the text buffer."
               (error "Syntax error in raw text (end of buffer)"))))))
     object))
 
-(defun djvu-save-text (script &optional doc)
-  "Save text of the Djvu document DOC.
-This dumps the content of DOC's text buffer into the djvused script
-file SCRIPT.  DOC defaults to the current Djvu document."
+(defun djvu-save-text (&optional doc script)
+  "Save text of the Djvu document DOC.  This updates the Read buffer for DOC.
+DOC defaults to the current Djvu document.
+If SCRIPT is non-nil, dump the text buffer into the djvused script file 
SCRIPT."
+  (interactive)
   (unless doc (setq doc djvu-doc))
-  (let ((object (djvu-read-text doc)))
-    (djvu-text-zone object 0 (make-vector 7 nil))
-    ;; Update read buffer
-    (djvu-init-read object doc)
-    ;; FIXME: Update the higher text zones displayed in the text buffer
-    ;; if we modified lower-level zones.
-    (with-temp-buffer
-      (setq buffer-file-coding-system 'utf-8)
-      (insert (format "select %d\nremove-txt\nset-txt\n" (djvu-ref page doc)))
-      (djvu-insert-text object "")
-      (insert "\n.\n") ; see djvused command set-txt
-      (write-region nil nil script t 0)))) ; append to SCRIPT
+  (let ((object1 (djvu-read-text doc))
+        (object2 (djvu-read-text doc))) ; true recursive copy of OBJECT1
+    ;; Re-initializing the text buffer blows up the undo list of this buffer.
+    ;; This step is only needed if we changed the text zones (e.g., when
+    ;; merging lines).  So we check whether `djvu-text-zone' has changed
+    ;; OBJECT.  For this, it is easier to read OBJECT twice than copying it
+    ;; recursively.
+    (djvu-text-zone object1 0 (make-vector 7 nil))
+    (unless (equal object1 object2)
+      (djvu-init-text object1 doc))
+    ;; Update read buffer.  We do this even if the text buffer is not
+    ;; modified, as we may have undone a change in the text buffer that
+    ;; previously propagated also into the read buffer.  The Read buffer
+    ;; has no undo list.
+    (djvu-init-read object1 doc)
+    ;; It is a bit of a hack to use this command for two rather different
+    ;; purposes.  But we do not want to read OBJECT one more time.
+    (if script
+        (with-temp-buffer
+          (setq buffer-file-coding-system 'utf-8)
+          (insert (format "select %d\nremove-txt\nset-txt\n"
+                          (djvu-ref page doc)))
+          (djvu-insert-text object1 "")
+          (insert "\n.\n") ; see djvused command set-txt
+          (write-region nil nil script t 0))))) ; append to SCRIPT
 
 (defun djvu-text-zone (object depth zones)
   "Evaluate zones for text OBJECT recursively."
@@ -2012,16 +2086,19 @@ BUFFER defaults to `djvu-script-buffer'.  If BUFFER is 
t, use current buffer."
 
 ;;; Djvu Read mode
 
-(defun djvu-init-read (object &optional doc)
+(defun djvu-init-read (object &optional doc reset)
   (with-current-buffer (djvu-ref read-buf doc)
     (let ((djvu-rect-list (djvu-ref rect-list doc))
+          (dpos (unless reset (djvu-read-dpos nil doc)))
           buffer-read-only djvu-last-rect)
       (erase-buffer)
       (djvu-insert-read object)
-      (djvu-insert-read-prop))
+      (djvu-insert-read-prop)
+      (if reset
+          (goto-char (point-min))
+        (djvu-goto-read dpos)))
     (set-buffer-modified-p nil)
     (setq buffer-read-only t)
-    (djvu-goto-read (djvu-ref dpos doc))
     (djvu-image)))
 
 (defun djvu-insert-read (object)
@@ -2100,7 +2177,8 @@ BUFFER defaults to `djvu-script-buffer'.  If BUFFER is t, 
use current buffer."
   "Return Djvu position of POINT in Djvu Read buffer.
 This is either a list (XMIN YMIN XMAX YMAX) or (X Y)."
   (with-current-buffer (djvu-ref read-buf doc)
-    (cond ((and djvu-image-mode (djvu-ref dpos doc)))
+    (cond ((and djvu-image-mode
+                (djvu-ref read-pos doc)))
           ((= (point-min) (point-max))
            ;; An empty djvu page gives us something like (page 0 0 0 0 "")
            ;; Take the center of an empty page
@@ -2108,7 +2186,7 @@ This is either a list (XMIN YMIN XMAX YMAX) or (X Y)."
                  (/ (cdr (djvu-ref pagesize doc)) 2)))
           (t
            (unless point
-             (setq point (if djvu-image-mode (point-min) (point))))
+             (setq point (point)))
            ;; Things get rather complicated if the text does not contain
            ;; separate words.
            (or (get-text-property point 'word)
@@ -2123,69 +2201,88 @@ This is either a list (XMIN YMIN XMAX YMAX) or (X Y)."
                      (/ (cdr (djvu-ref pagesize doc)) 2)))))))
 
 (defun djvu-mean-dpos (dpos)
-  "For Djvu position DPOS return mean coordinates (X Y)."
-  ;; This works both for DPOS being vectors and lists.
+  "For Djvu position DPOS return mean coordinates (X Y).
+DPOS is a list or vector (XMIN YMIN XMAX YMAX)."
   (if (elt dpos 2)
       (list (/ (+ (elt dpos 0) (elt dpos 2)) 2)
             (/ (+ (elt dpos 1) (elt dpos 3)) 2))
     dpos))
 
+(defsubst djvu-dist (width height)
+  (+ (* width width) (* height height)))
+
 (defun djvu-goto-dpos (object dpos)
   "Go to OBJECT at position DPOS in the text or annotation buffer.
 If found, return corresponding buffer position.
-Otherwise, go to beginning of buffer and return nil."
+Otherwise, do nothing and return nil."
   ;; This code relies on the fact that we have all coordinates
   ;; in the format (xmin ymin xmax ymax) instead of the format
   ;; (xmin ymin width height) used by djvused for maparea annotations.
-  (goto-char (point-min))
-  (or (and (elt dpos 2)
-           (re-search-forward (concat "\\<" (symbol-name object) "\\>[ \t\n]+"
-                                      (mapconcat 'number-to-string dpos "[ 
\t\n+]")
-                                      "\\( +\"\\)?") nil t))
-      (let* ((re (concat "\\<" (symbol-name object) "\\> +"
-                         (mapconcat 'identity
-                                    (make-list 4 "\\([[:digit:]]+\\)") " +")
-                         "\\( +\"\\)?"))
-             (dpos (djvu-mean-dpos dpos))
-             (x (nth 0 dpos))
-             (y (nth 1 dpos))
-             done)
-        (goto-char (point-min))
-        (while (and (not done)
-                    (re-search-forward re nil t))
-          (let ((x1 (djvu-match-number 1))
-                (x2 (djvu-match-number 3))
-                (y1 (djvu-match-number 2))
-                (y2 (djvu-match-number 4)))
-            (setq done (and (<= x1 x x2)
-                            (<= y1 y y2)))))
-        (if done (point)
-          (goto-char (point-min))
-          nil))))
-
-(defsubst djvu-dist (width height)
-  (+ (* width width) (* height height)))
+  (cond ((not dpos) nil) ; DPOS is nil, do nothing, return nil
+
+        ((elt dpos 2) ; DPOS is a list or vector (XMIN YMIN XMAX YMAX)
+         (goto-char (point-min))
+         (or (re-search-forward (format "\\<%s\\>[ \t\n]+%s\\([ \t\n]+\"\\)?"
+                                        object
+                                        (mapconcat 'number-to-string dpos
+                                                   "[ \t\n]+"))
+                                nil t)
+             ;; try again, using the mean value of DPOS
+             (djvu-goto-dpos object (djvu-mean-dpos dpos))))
+
+        (t ; DPOS is a list (X Y)
+         ;; Look for OBJECT with either
+         ;; - DPOS inside OBJECT -> exact match
+         ;; - OBJECT nearest to DPOS -> approximate match
+         ;; The latter always succeeds.
+         (let* ((re (format "\\<%s\\>[ \t\n]+%s\\([ \t\n]+\"\\)?"
+                            object
+                            (mapconcat 'identity
+                                       (make-list 4 "\\([[:digit:]]+\\)")
+                                       "[ \t\n]+")))
+                (x (nth 0 dpos)) (y (nth 1 dpos))
+                (x2 (- (* 2 x))) (y2 (- (* 2 y)))
+                (good-dist (* 4 (djvu-dist (car (djvu-ref pagesize))
+                                           (cdr (djvu-ref pagesize)))))
+                (good-pnt (point-min))
+                pnt dist)
+           (goto-char (point-min))
+           (while (and (not (zerop good-dist))
+                       (setq pnt (re-search-forward re nil t)))
+             (let ((xmin (djvu-match-number 1)) (ymin (djvu-match-number 2))
+                   (xmax (djvu-match-number 3)) (ymax (djvu-match-number 4)))
+               (if (and (<= xmin x xmax) (<= ymin y ymax))
+                   (setq good-dist 0 good-pnt pnt) ; exact match
+                 (setq dist (djvu-dist (+ xmin xmax x2) (+ ymin ymax y2)))
+                 (if (< dist good-dist)
+                     (setq good-pnt pnt good-dist dist))))) ; approximate match
+           (goto-char good-pnt)
+           (if (/= good-pnt (point-min)) good-pnt)))))
 
 (defun djvu-goto-read (&optional dpos)
   "Go to buffer position in Read buffer corresponding to Djvu position DPOS.
 Return corresponding buffer position."
-  (unless dpos (setq dpos (djvu-ref dpos)))
   (with-current-buffer (djvu-ref read-buf)
-    (goto-char (point-min))
-    (cond ((not dpos) nil) ; DPOS is nil, do nothing, return nil
+    (cond (djvu-image-mode
+           (djvu-set read-pos dpos)
+           (point-min))
+          ((not dpos) nil) ; DPOS is nil, do nothing, return nil
 
-          ((elt dpos 2) ; DPOS is a list (XMIN YMIN XMAX YMAX)
+          ((elt dpos 2) ; DPOS is a list or vector (XMIN YMIN XMAX YMAX)
            ;; Go to the buffer position of the first word inside DPOS.
            (let ((pnt (point-min))
                  (xmin (elt dpos 0)) (ymin (elt dpos 1))
                  (xmax (elt dpos 2)) (ymax (elt dpos 3))
                  word done)
-             (while (if (and (setq word (djvu-mean-dpos
-                                         (get-text-property pnt 'word)))
-                             (<= xmin (nth 0 word)) (<= (nth 0 word) xmax)
-                             (<= ymin (nth 1 word)) (<= (nth 1 word) ymax))
-                        (not (setq done t)) ; terminate successfully
-                      (setq pnt (next-single-property-change pnt 'word))))
+             (goto-char (point-min))
+             (while (progn ; Do while
+                      (setq done
+                            (and (setq word (djvu-mean-dpos
+                                             (get-text-property pnt 'word)))
+                                 (<= xmin (nth 0 word) xmax)
+                                 (<= ymin (nth 1 word) ymax)))
+                      (and (not done)
+                           (setq pnt (next-single-property-change pnt 
'word)))))
              (if done
                  (goto-char pnt)
                ;; try again, using the mean value of DPOS
@@ -2195,23 +2292,27 @@ Return corresponding buffer position."
            ;; Look for word with either
            ;; - DPOS inside word -> exact match
            ;; - word nearest to DPOS -> approximate match
-           (let ((hpos (nth 0 dpos)) (vpos (nth 1 dpos))
-                 (good-dist (djvu-dist (car (djvu-ref pagesize))
-                                       (cdr (djvu-ref pagesize))))
-                 (pnt (point-min)) (good-pnt (point-min))
-                 word dist)
-             (while (progn
+           ;; The latter always succeeds.
+           (let* ((x (nth 0 dpos)) (y (nth 1 dpos))
+                  (x2 (- (* 2 x))) (y2 (- (* 2 y)))
+                  (good-dist (* 4 (djvu-dist (car (djvu-ref pagesize))
+                                             (cdr (djvu-ref pagesize)))))
+                  (pnt (point-min)) (good-pnt (point-min))
+                  word dist)
+             (goto-char (point-min))
+             (while (progn ; Do while
                       (when (setq word (get-text-property pnt 'word))
-                        (if (and (<= (aref word 0) hpos (aref word 2))
-                                 (<= (aref word 1) vpos (aref word 3)))
+                        (if (and (<= (aref word 0) x (aref word 2))
+                                 (<= (aref word 1) y (aref word 3)))
                             (setq good-dist 0 good-pnt pnt) ; exact match
-                          (setq dist (djvu-dist (- (/ (+ (aref word 0) (aref 
word 2)) 2) hpos)
-                                                (- (/ (+ (aref word 1) (aref 
word 3)) 2) vpos)))
+                          (setq dist (djvu-dist (+ (aref word 0) (aref word 2) 
x2)
+                                                (+ (aref word 1) (aref word 3) 
y2)))
                           (if (< dist good-dist)
                               (setq good-pnt pnt good-dist dist)))) ; 
approximate match
                       (and (not (zerop good-dist))
                            (setq pnt (next-single-property-change pnt 
'word)))))
-             (goto-char good-pnt))))))
+             (goto-char good-pnt)
+             (if (/= good-pnt (point-min)) good-pnt))))))
 
 ;;; Djvu Annotation mode
 
@@ -2416,8 +2517,6 @@ Interactively, the command `djvu-mouse-text-area' in 
`djvu-image-mode'
 is usually easier to use."
   (interactive (djvu-interactive-text-area))
   (setq area (djvu-bound-area area))
-  ;; Record position where annotation was made.
-  (djvu-set dpos (djvu-mean-dpos area))
   (with-current-buffer (djvu-ref annot-buf)
     (goto-char (point-max))
     (insert (format "(maparea %S\n %S\n "
@@ -2483,7 +2582,7 @@ With prefix LEFT mark left of beginning of line."
   (let ((dpos (djvu-dpos))
         (doc djvu-doc))
     (with-current-buffer (djvu-ref annot-buf doc)
-      (if (and dpos (djvu-goto-dpos 'rect dpos))
+      (if (djvu-goto-dpos 'rect dpos)
           (djvu-update-url-internal url color opacity border)
         (user-error "No object to update")))))
 
@@ -2609,22 +2708,13 @@ these elements are merged into one."
           (pop areas)))))
   areas)
 
-(defvar djvu-rect-area-nodups nil
-  "If non-nil `djvu-rect-area' does not create multiple rects for same areas.")
-
 (defun djvu-rect-area (url comment rects &optional color opacity border)
   "Using URL and COMMENT, highlight RECTS.
 The elements in the list RECTS are 4-element sequences of coordinates
 each defining a rect area for djvused."
-  (setq rects (mapcar 'djvu-bound-area (djvu-merge-areas rects)))
-  ;; Record position where annotation was made.
-  (let ((posl (mapcar 'djvu-mean-dpos rects))
-        (n (length rects)))
-    (djvu-set dpos (list (/ (apply '+ (mapcar 'car posl)) n)
-                         (/ (apply '+ (mapcar 'cadr posl)) n))))
   (setq rects (mapcar (lambda (rect) (apply 'format "(rect %d %d %d %d)"
-                                            rect))
-                      rects))
+                                            (djvu-bound-area rect)))
+                      (djvu-merge-areas rects)))
   ;; Insert in Annotations buffer.
   (with-current-buffer (djvu-ref annot-buf)
     (unless (and djvu-rect-area-nodups
@@ -2934,8 +3024,8 @@ file SCRIPT.  DOC defaults to the current Djvu document."
         (djvu-convert-hash t)
         (write-region nil nil script t 0) ; append to SCRIPT
         ;; It is not all correct to ignore rect-list for shared
-        ;; annotations.  It should really go into a separate slot
-        ;; shared-rect-list of djvu-doc, so that then we can merge
+        ;; annotations.  It should really go into a separate variable
+        ;; `djvu-doc-shared-rect-list', so that then we can merge
         ;; these for all pages.
         (unless shared
           (djvu-set rect-list (apply 'nconc rect-list) doc))))))
@@ -3037,9 +3127,9 @@ Return nil if no such object can be found."
   (let ((dpos (djvu-dpos))
         (doc djvu-doc))
     (with-current-buffer (djvu-ref annot-buf doc)
-      (if (and dpos (djvu-goto-dpos 'rect dpos))
+      (if (djvu-goto-dpos 'rect dpos)
           (djvu-update-color-internal color)
-        (error "No object to update")))))
+        (user-error "No object to update")))))
 
 (defun djvu-update-color-internal (color)
   "Update color attribute of Djvu maparea to COLOR.
@@ -3383,11 +3473,6 @@ file SCRIPT. DOC defaults to the current Djvu document."
 
 ;;; Image minor mode
 
-;; The image slot of `djvu-doc' is a list:
-;; the first element is the page number corresponding to the image,
-;; the second element is the magnification
-;; the remaining elements specify the image itself.
-
 (defmacro djvu-with-event-buffer (event &rest body)
   "With buffer of EVENT current, evaluate BODY."
   (declare (indent 1))
@@ -3431,7 +3516,16 @@ file SCRIPT. DOC defaults to the current Djvu document."
             ;;
             ("+" . djvu-image-zoom-in)
             ("-" . djvu-image-zoom-out))
-  (djvu-image))
+  (if (and djvu-image-mode
+           (not (get-text-property (point-min) 'display)))
+      ;; Remember DPOS if we enable `djvu-image-mode'.
+      (djvu-set read-pos (let (djvu-image-mode)
+                           (djvu-read-dpos))))
+  (let ((tmp (and (not djvu-image-mode)
+                  (get-text-property (point-min) 'display))))
+    (djvu-image)
+    ;; Go to DPOS if we disable `djvu-image-mode'.
+    (if tmp (djvu-goto-read (djvu-ref read-pos)))))
 
 (defun djvu-image (&optional isize)
   "If `djvu-image-mode' is enabled, display image of current Djvu page.
@@ -3441,13 +3535,9 @@ Otherwise remove the image."
   ;; in particular, for the "bare" calls of `djvu-image' by
   ;; `djvu-image-zoom-in' and `djvu-image-zoom-out'.
   (if (not djvu-image-mode)
-      (let (buffer-read-only)
-        (remove-text-properties (point-min) (point-max) '(display nil))
-        (djvu-goto-read))
-    (unless (get-text-property (point-min) 'display)
-      ;; Remember buffer position
-      (let (djvu-image-mode)
-        (djvu-set dpos (djvu-read-dpos))))
+      (if (get-text-property (point-min) 'display)
+          (let (buffer-read-only)
+            (remove-text-properties (point-min) (point-max) '(display nil))))
     ;; Update image if necessary.
     (if (or (not (eq (djvu-ref page) (car (djvu-ref image))))
             (and isize
@@ -3593,11 +3683,14 @@ Otherwise remove the image."
          (_ (if (equal size '(0 . 0))
                 (error "See Emacs bug#18839 (GNU Emacs 24.4)")))
          (width  (/ (float (car (djvu-ref pagesize))) (car size)))
-         (height (/ (float (cdr (djvu-ref pagesize))) (cdr size))))
-    (list (round (* (if sorted (min x1 x2) x1) width))
-          (round (* (- (cdr size) (if sorted (max y1 y2) y1)) height))
-          (round (* (if sorted (max x1 x2) x2) width))
-          (round (* (- (cdr size) (if sorted (min y1 y2) y2)) height)))))
+         (height (/ (float (cdr (djvu-ref pagesize))) (cdr size)))
+         (area
+          (list (round (* (if sorted (min x1 x2) x1) width))
+                (round (* (- (cdr size) (if sorted (max y1 y2) y1)) height))
+                (round (* (if sorted (max x1 x2) x2) width))
+                (round (* (- (cdr size) (if sorted (min y1 y2) y2)) height)))))
+    (djvu-set read-pos (djvu-mean-dpos area))
+    area))
 
 (defun djvu-mouse-rect-area (event)
   (interactive "e")
@@ -3659,7 +3752,6 @@ Otherwise remove the image."
 
 (defun djvu-line-area (url text line &optional border arrow width lineclr)
   ;; Record position where annotation was made.
-  (djvu-set dpos (djvu-mean-dpos line))
   (with-current-buffer (djvu-ref annot-buf)
     (goto-char (point-max))
     ;; It seems that TEXT is ignored by djview.
@@ -3841,7 +3933,8 @@ This uses the command \"djvused doc.djvu -e ls\"."
         (erase-buffer)
         (djvu-djvused doc t "-e" "ls"))
       (set-buffer-modified-p nil)
-      (setq buffer-read-only t))
+      (setq buffer-read-only t)
+      (goto-char (point-min)))
     (pop-to-buffer buffer)))
 
 ;;;###autoload
@@ -3918,6 +4011,65 @@ With prefix OUTLINE non-nil remove Outline, too."
                   "-s")
     (djvu-init-page nil doc)))
 
+;;;; Emacs bookmark integration (inspired by doc-view.el)
+
+(declare-function bookmark-make-record-default "bookmark"
+                  (&optional no-file no-context posn))
+(declare-function bookmark-prop-get "bookmark" (bookmark prop))
+(declare-function bookmark-get-filename "bookmark" (bookmark))
+(declare-function bookmark-get-front-context-string "bookmark" (bookmark))
+(declare-function bookmark-get-rear-context-string "bookmark" (bookmark))
+(declare-function bookmark-get-position "bookmark" (bookmark))
+
+(defun djvu-bookmark-make-record ()
+  (nconc (bookmark-make-record-default)
+         `((page . ,(djvu-ref page))
+           (d-buffer . ,djvu-buffer)
+           (handler . djvu-bookmark-handler))))
+
+;; Adapted from `bookmark-default-handler'.
+;;;###autoload
+(defun djvu-bookmark-handler (bmk)
+  "Handler to jump to a particular bookmark location in a djvu document.
+BMK is a bookmark record, not a bookmark name (i.e., not a string).
+Changes current buffer and point and returns nil, or signals a `file-error'."
+  (let ((file          (bookmark-get-filename bmk))
+       (buf           (bookmark-prop-get bmk 'buffer))
+        (d-buffer      (bookmark-prop-get bmk 'd-buffer))
+        (page          (bookmark-prop-get bmk 'page))
+        (forward-str   (bookmark-get-front-context-string bmk))
+        (behind-str    (bookmark-get-rear-context-string bmk))
+        (pos           (bookmark-get-position bmk)))
+    (set-buffer
+     (cond
+      ((and file (file-readable-p file) (not (buffer-live-p buf)))
+       (find-file-noselect file))
+      ;; No file found.  See if buffer BUF has been created.
+      ((and buf (get-buffer buf)))
+      (t ;; If not, raise error.
+       (signal 'bookmark-error-no-filename (list 'stringp file)))))
+    (if page (djvu-goto-page page))
+    (if d-buffer
+        (set-buffer
+         (pcase d-buffer
+           (`read (djvu-ref read-buf))
+           (`text (djvu-ref text-buf))
+           (`annot (djvu-ref annot-buf))
+           (`shared (djvu-ref shared-buf))
+           (`bookmarks (djvu-ref bookmarks-buf))
+           (`outline (djvu-ref outline-buf)))))
+    (if pos (goto-char pos))
+    ;; Go searching forward first.  Then, if forward-str exists and
+    ;; was found in the file, we can search backward for behind-str.
+    ;; Rationale is that if text was inserted between the two in the
+    ;; file, it's better to be put before it so you can read it,
+    ;; rather than after and remain perhaps unaware of the changes.
+    (when (and forward-str (search-forward forward-str (point-max) t))
+      (goto-char (match-beginning 0)))
+    (when (and behind-str (search-backward behind-str (point-min) t))
+      (goto-char (match-end 0)))
+    nil))
+
 
 (provide 'djvu)
 ;;; djvu.el ends here
diff --git a/packages/ebdb-i18n-chn/ebdb-i18n-chn.el 
b/packages/ebdb-i18n-chn/ebdb-i18n-chn.el
index 141b550..f6a26ce 100644
--- a/packages/ebdb-i18n-chn/ebdb-i18n-chn.el
+++ b/packages/ebdb-i18n-chn/ebdb-i18n-chn.el
@@ -1,6 +1,6 @@
-;;; ebdb-chn.el --- China-specific internationalization support for EBDB  -*- 
lexical-binding: t; -*-
+;;; ebdb-i18n-chn.el --- China-specific internationalization support for EBDB  
-*- lexical-binding: t; -*-
 
-;; Copyright (C) 2016-2017  Free Software Foundation, Inc.
+;; Copyright (C) 2016-2019  Free Software Foundation, Inc.
 
 ;; Author: Eric Abrahamsen <address@hidden>
 ;; Maintainer: Eric Abrahamsen <address@hidden>
diff --git a/packages/el-search/NEWS b/packages/el-search/NEWS
index d23058d..6fa1dd4 100644
--- a/packages/el-search/NEWS
+++ b/packages/el-search/NEWS
@@ -1,6 +1,56 @@
 Some of the user visible news were:
 
 
+Version: 1.12.5
+
+  The prefix argument of 'el-search-pattern' provides now analogue
+  functionalities as for 'el-search-query-replace': It normally
+  resumes the last search; 0 restarts the search and a negative or C-u
+  C-u prefix arg lets you choose an older search to resume.
+
+  'el-search-jump-to-search-head' has been renamed to
+  'el-search-jump'.  The meaning of the prefix arg has been limited to
+  the jump-by-matches applications, everything else can now be
+  accomplished with 'el-search-pattern'.
+
+Version: 1.12.4
+
+  Key syntax cleanup: In some cases the code used to bind some keys
+  twice: it bound events E1 and E2 where in some environments hitting
+  a certain key generates E1 in in others E2 where E2 is normally
+  translated into E1.  For example, the code created bindings for
+  "\C-j" and also for [(meta return)], although binding only "\C-j"
+  would suffice because in environments where [(meta return)] is
+  created it would be immediately translated to "\C-j".
+
+  That means that should you add a binding for the event that is
+  generated only in some environments like [(meta return)] in the
+  respective key map you would get the effect that your binding
+  shadows the el-search binding in some environments and in others
+  not.  If you experience something like that, check your init file if
+  you do something like that.
+
+Version: 1.12.2
+
+  Some changes to the 'el-search-query-replace' prompt to make it
+  shorter.  The keys o and e to show and ediff the replacement changed
+  to e and E ("edit", "Ediff").
+
+Version: 1.12.1
+
+  Like searches, 'el-search-query-replace' sessions are now also
+  internally represented by objects with state, which means you can do
+  similar things: Resuming or restarting sessions can be achieved by
+  calling the command `el-search-query-replace' with a prefix arg.
+  The new command 'el-search-query-replace-to-register' lets you save
+  the current session to a register.
+
+  The 'el-search-query-replace' user interface also got a new key "/"
+  that replaces all remaining matches in the current buffer
+  automatically and then suspends the session.  This gives you the
+  chance to check if everything is alright in that buffer before you
+  continue with the next file or buffer by resuming that session.
+
 Version: 1.11.3
 
   When copying large parts of an *El Occur* buffer to the kill ring
diff --git a/packages/el-search/el-search.el b/packages/el-search/el-search.el
index 2485558..f49e945 100644
--- a/packages/el-search/el-search.el
+++ b/packages/el-search/el-search.el
@@ -7,7 +7,7 @@
 ;; Created: 29 Jul 2015
 ;; Keywords: lisp
 ;; Compatibility: GNU Emacs 25
-;; Version: 1.11.4
+;; Version: 1.12.5
 ;; Package-Requires: ((emacs "25") (stream "2.2.4") (cl-print "1.0"))
 
 
@@ -90,6 +90,10 @@
 ;;     hit RET to exit or C-g to abort and jump back to where you
 ;;     started.
 ;;
+;;     By using the prefix arg this command can be used to reactivate
+;;     the last or a former search and to restart searches from the
+;;     beginning.
+;;
 ;;   C-h (aka the `help-char')
 ;;
 ;;     C-h offers access to some help commands special to el-search
@@ -100,7 +104,8 @@
 ;;     Search backward.
 ;;
 ;;   C-%, M-s e % (`el-search-query-replace')
-;;     Do a query-replace.
+;;     Start a query-replace session.  Resume or restart sessions with
+;;     prefix arg.
 ;;
 ;;   M-x el-search-directory
 ;;     Prompt for a directory name and start a multi el-search for all
@@ -127,23 +132,18 @@
 ;;     located under this directory.
 ;;
 ;;   C-A, M-s e a, M-s e < (`el-search-from-beginning')
-;;     Go back to the first match in this buffer or (with positive
-;;     prefix arg) completely restart the current search from the
-;;     first file or buffer.
-;;
-;;     With negative prefix arg, or with >, go to the last match in
+;;     Go back to the first match in this buffer.
+;;     With prefix arg or with M-s e >, go to the last match in
 ;;     the current buffer.
 ;;
-;;   C-J, M-s e j (`el-search-jump-to-search-head')
-;;     Resume the last search from the position of the last visited
-;;     match.
+;;   C-J, M-s e j (`el-search-jump')
+;;     Convenience command to move by matches.  Resumes the last
+;;     search if necessary.
+;;     Without prefix arg, jump (back) to the current match.
 ;;     With prefix arg 0, resume from the position of the match
-;;     following point instead.  With prefix arg 1 or -1, jump to the
-;;     first or last match visible in the selected window.  This can
-;;     be useful even when a search is current, e.g. after scrolling
-;;     the searched buffer.
-;;     With a plain C-u prefix arg, prompt for a former search to
-;;     resume.
+;;     following point instead.
+;;     With prefix arg 1 or -1, jump to the first or last match
+;;     visible in the selected window.
 ;;
 ;;   C-S-next, v   when search is active (`el-search-scroll-down')
 ;;   C-S-prior, V  when search is active (`el-search-scroll-up')
@@ -156,14 +156,15 @@
 ;;     for other occurrences.
 ;;
 ;;   M-x el-search-to-register
-;;     Save the current search to an Emacs register.  Use C-x r j
-;;     (`jump-to-register') to make that search current and jump to
-;;     the latest position.
+;;   M-x el-search-query-replace-to-register
+;;     Save the current el-search or el-search-query-replace session
+;;     to an Emacs register.  Use `jump-to-register' (C-x r j) to
+;;     continue that search or query-replace session.
 ;;
 ;;
 ;; The setup you need for your init file is trivial: you only need to
-;; install the key bindings you want to use.  All important commands
-;; are autoloaded.
+;; install key bindings if you want some (see above).  All important
+;; commands are autoloaded.
 ;;
 ;;
 ;; Usage
@@ -246,8 +247,7 @@
 ;; You can pause any search by just doing something different (no
 ;; explicit quitting needed); the state of the search is automatically
 ;; saved.  You can later continue searching by calling
-;; `el-search-jump-to-search-head' (C-J; M-s e j): this command jumps
-;; to the last match and re-activates the search.
+;; `el-search-pattern' (C-S; M-s e s) with a prefix arg.
 ;;
 ;; `el-search-continue-in-next-buffer' (C-X; x) skips all remaining
 ;; matches in the current buffer and continues searching in the next
@@ -277,13 +277,11 @@
 ;; Multiple multi searches
 ;; =======================
 ;;
-;; Every search is collected in a history.  You can resume older
-;; searches from the position of the last match by calling
-;; `el-search-jump-to-search-head' (C-J; M-s e j) with a prefix
-;; argument.  That let's you select an older search to resume and
-;; switches to the buffer and position where this search had been
-;; suspended.  Like any search you can restart the search driving an
-;; `el-search-query-replace' with C-u C-A or C-u M-s e a respectively.
+;; Every search is stored in a history.  You can resume older searches
+;; from the position of the last match by calling `el-search-pattern'
+;; (C-S; M-s e s) with a prefix argument.  That let's you select an
+;; older search to resume and switches to the buffer and position
+;; where this search had been suspended.
 ;;
 ;;
 ;; Query-replace
@@ -319,22 +317,27 @@
 ;;
 ;; It is possible to replace a match with an arbitrary number of
 ;; expressions using "splicing mode".  When it is active, the
-;; replacement expression must evaluate to a list, and is spliced into
-;; the buffer for any match.  Hit s from the prompt to toggle splicing
-;; mode in an `el-search-query-replace' session.
+;; replacement expression must evaluate to a list, and this list is
+;; spliced into the buffer for any match.  Hit s from the prompt to
+;; toggle splicing mode in an `el-search-query-replace' session.
+;;
+;; Much like `el-search' sessions, `el-search-query-replace' sessions
+;; are also internally represented as objects with state, and are also
+;; collected in a history.  That means you can pause, resume and
+;; restart query-replace sessions, store them in registers, etc.
 ;;
 ;; There are two ways to edit replacements directly while performing
 ;; an el-search-query-replace:
 ;;
-;; (1) Without suspending the search: hit o at the prompt to show the
+;; (1) Without suspending the search: hit e at the prompt to show the
 ;; replacement of the current match in a separate buffer.  You can
 ;; edit the replacement in this buffer.  Confirming with C-c C-c will
 ;; make el-search replace the current match with this buffer's
 ;; contents.
 ;;
 ;; (2) At any time you can interrupt a query-replace session by
-;; hitting RET.  Make your edits, then resume the query-replace
-;; session by hitting C-S-j C-% or M-s e j %.
+;; hitting RET.  You can resume the query-replace session by calling
+;; `el-search-query-replace' with a prefix argument.
 ;;
 ;;
 ;; Multi query-replace
@@ -347,14 +350,6 @@
 ;; search to drive the query-replace.  The user interface is
 ;; self-explanatory.
 ;;
-;; It is always possible to resume an aborted query-replace session
-;; even if you did other stuff in the meantime (including other
-;; `el-search-query-replace' invocations).  Since internally every
-;; query-replace is driven by a search, call
-;; `el-search-jump-to-search-head' to make that search current, and
-;; invoke `el-search-query-replace'.  This will continue the
-;; query-replace session from where you left.
-;;
 ;;
 ;; Advanced usage: Replacement rules for semi-automatic code rewriting
 ;; ===================================================================
@@ -614,7 +609,7 @@ following cases from the prompt."
   )
 
 (defvar el-search-keep-transient-map-commands
-  ;; Commands that may read input (`el-search-jump-to-search-head',
+  ;; Commands that may read input (`el-search-jump',
   ;; `el-search-skip-directory') need to be omitted here and should
   ;; explicitly install the transient map themselves.
   '(el-search-pattern
@@ -640,7 +635,7 @@ of these commands will keep the
   "Whether scrolling is allowed during el-search.
 When non-nil, scrolling commands don't deactivate the current
 search.  Unlike isearch, it's possible to scroll the current
-match offscreen.  Use `el-search-jump-to-search-head' 
(\\[el-search-jump-to-search-head])
+match offscreen.  Use `el-search-jump' (\\[el-search-jump])
 to go back to the position of the current match.
 
 When nil, scrolling commands deactivate the search (like any
@@ -660,11 +655,10 @@ whole match visible whenever possible."
 (defvar el-search-read-expression-map
   (let ((map (make-sparse-keymap)))
     (set-keymap-parent map read-expression-map)
-    (define-key map [(control ?g)] #'abort-recursive-edit)
+    (define-key map "\C-g" #'abort-recursive-edit)
     (define-key map [up]   nil)
     (define-key map [down] nil)
-    (define-key map [(control ?j)] #'newline)
-    (define-key map [(meta return)] #'el-search-set-occur-flag-exit-minibuffer)
+    (define-key map "\C-j" #'newline)
     (define-key map (kbd "M-RET")   #'el-search-set-occur-flag-exit-minibuffer)
     map)
   "Keymap for reading input with `el-search-read-expression'.")
@@ -719,6 +713,8 @@ useful for debugging.")
 
 (defvar el-search--search-origin nil)
 
+(defvar el-search--current-query-replace nil)
+
 (defvar-local el-search--temp-buffer-flag nil
   "Non-nil tags file visiting buffers as temporarily opened for searching.")
 
@@ -738,6 +734,18 @@ The non-nil value should be one of the symbols `forward' 
and
 (defvar el-search-occur-flag nil
   "Non-nil when next search should be performed as occur.")
 
+(defvar-local el-search--get-buffer-fun nil
+  "How to recreate current buffer when non-nil.
+
+This buffer-local helper variable can be set in buffers that the
+get-buffer-stream method of el-search-objects returns to specify
+how to recreate that buffer.  This is useful when the search
+domain contains places that are neither buffers nor files -
+former revisions of files for example.  In this case
+`el-search-occur' can remember the value of this variable in
+the (temporary) buffers to implement to-match jumping after these
+buffers have been killed.")
+
 (defun el-search-true (&rest _args)
   "Ignore the arguments and return t."
   t)
@@ -898,21 +906,39 @@ nil."
 (defvar el-search-query-replace-history ()
   "History of input strings from `el-search-query-replace'.")
 
+(defun el-search--read-history-entry (hist-ring description-fun)
+  (let ((l (ring-length hist-ring)))
+    (ring-ref hist-ring
+              (let ((input
+                     (completing-read
+                      "Resume previous session: "
+                      (mapcar
+                       (lambda (n) (format (format "%%0%dd - %%s" (1+ (floor 
(log l 10))))
+                                           n
+                                           (funcall description-fun
+                                                    (ring-ref hist-ring (1- n))
+                                                    'verbose)))
+                       (number-sequence 1 l)))))
+                (string-match (rx bos (group (1+ (any "0-9"))) " - ") input)
+                (1- (string-to-number (match-string 1 input)))))))
+
 (defvar el-search--initial-mb-contents nil)
 
+(defvar el-search-query-replace-object-history (make-ring 15)
+  "History of previous `el-search-query-replace' sessions.")
+
 (defun el-search--pushnew-to-history (input histvar)
   ;; Push string INPUT to HISTVAR unless empty or equal to the head
   ;; element modulo `read'.  Reindent INPUT when multiline.
   (let ((hist-head (car (symbol-value histvar))))
-    (unless (or (string-match-p "\\`\\'" input)
+    (unless (or (string-match-p (rx bos eos) input)
                 (and (stringp hist-head)
                      (or (string= input hist-head)
                          (ignore-errors (equal (el-search-read input) 
(el-search-read hist-head))))))
-      (push (if (string-match-p "\\`.+\n" input)
+      (push (if (string-match-p (rx bos (+ nonl) "\n") input)
                 (with-temp-buffer
                   (emacs-lisp-mode)
-                  (unless (string-match-p "\\`\n" input)
-                    (insert "\n"))
+                  (insert "\n")
                   (insert input)
                   (indent-region 1 (point))
                   (buffer-string))
@@ -1159,7 +1185,7 @@ error."
 
            ;; FIXME: can the rest be done more generically?
            ((and (looking-at (rx (or (syntax symbol) (syntax word))))
-                 (not (looking-at "\\_<"))
+                 (not (looking-at (rx symbol-start)))
                  (not (funcall looking-at-from-back ",@" 2)))
             (forward-symbol 1))
            ((or (and (looking-at "'") (funcall looking-at-from-back "#" 1))
@@ -1207,7 +1233,8 @@ In addition to the standard `pcase' patterns the following
 pattern types are defined:")
       (mapc
        (pcase-lambda (`(,symbol . ,fun))
-         (unless (string-match-p "\\`[-_]\\|--" (symbol-name symbol)) ;Let's 
consider these "internal"
+         (unless (string-match-p (rx (or (seq bos (any "-" "_")) "--")) ;Let's 
consider these "internal"
+                                 (symbol-name symbol))
            (when-let ((doc (documentation fun)))
              (insert "\n\n\n-- ")
              (setq doc (help-fns--signature symbol doc fun fun nil))
@@ -1863,7 +1890,7 @@ Unlike `count-matches' matches \"inside\" other matches 
also count."
                (end-of-buffer nil))
              (or (= here (point))
                  (and allow-leading-whitespace
-                      (string-match-p "\\`[[:space:]]*\\'" (buffer-substring 
here (point)))))
+                      (string-match-p (rx bos (+ space) eos) (buffer-substring 
here (point)))))
              (el-search--match-p matcher current-sexp))))))
 
 ;;;###autoload
@@ -1980,7 +2007,7 @@ in, in order, when called with no arguments."
     (keybind emacs-lisp-mode-map           ?p #'el-search-pattern-backward)
     (keybind emacs-lisp-mode-map           ?% #'el-search-query-replace)
     (keybind emacs-lisp-mode-map           ?h #'el-search-this-sexp) ;h like 
in "highlight" or "here"
-    (keybind global-map                    ?j #'el-search-jump-to-search-head)
+    (keybind global-map                    ?j #'el-search-jump)
     (keybind global-map                    ?a #'el-search-from-beginning)
     (keybind global-map                    ?< #'el-search-from-beginning)
     (keybind emacs-lisp-mode-map           ?> #'el-search-last-buffer-match)
@@ -2043,13 +2070,13 @@ Go back to the place where the search had been started."
 
 (defvar el-search-basic-transient-map
   (let ((map (make-sparse-keymap)))
-    (define-key map [return]       #'el-search-pause-search)
     (define-key map (kbd "RET")    #'el-search-pause-search)
-    (define-key map [(control ?g)] #'el-search-keyboard-quit)
+    (define-key map "\C-g"         #'el-search-keyboard-quit)
     (define-key map [??]           #'el-search-help-list-bindings)
     (define-key map `[,help-char]  el-search-help-map)
     (define-key map [help]         el-search-help-map)
     (define-key map [f1]           el-search-help-map)
+    ;; (define-key map [remap point-to-register] #'el-search-to-register)
     map))
 
 (defvar el-search-prefix-key-transient-map
@@ -2058,7 +2085,7 @@ Go back to the place where the search had been started."
      (lambda (_map key command)
        (when (memq command '(el-search-pattern
                              el-search-pattern-backward
-                             el-search-jump-to-search-head
+                             el-search-jump
                              el-search-query-replace
                              el-search-from-beginning
                              el-search-last-buffer-match
@@ -2163,7 +2190,7 @@ that contain a file named \".nosearch\" are excluded as 
well."
                             el-search-ignored-directory-regexps)
                    (and
                     el-search-respect-nosearch
-                    (directory-files dir-name nil "\\`\\.nosearch\\'" t))))))
+                    (directory-files dir-name nil (rx bos ".nosearch" eos) 
t))))))
    t #'el-search--elisp-file-p))
 
 
@@ -2173,7 +2200,7 @@ that contain a file named \".nosearch\" are excluded as 
well."
   "Type a help option: [bmikp] or ?"
   "You have typed %THIS-KEY%, the help character.  Type a Help option:
 \(Type \\<help-map>\\[help-quit] to exit or \
-\\<help-map>\\[help-quit] \\[el-search-jump-to-search-head] to \
+\\<help-map>\\[help-quit] \\[el-search-jump] to \
 continue searching.)
 
 b           Display el-search key bindings.
@@ -2223,7 +2250,7 @@ map until you finished el-searching."
                               "`" (symbol-name cmd-name) "'"
                               " (" (keys-string cmd-name) ")\n"
                               (when-let ((docstring (documentation cmd-name)))
-                                (string-match "\\(\\`.*$\\)" docstring)
+                                (string-match (rx (group bos (0+ nonl) eol)) 
docstring)
                                 (concat (match-string 1 docstring) "\n"))
                               "\n")
                            (concat "  "
@@ -2238,7 +2265,7 @@ map until you finished el-searching."
     (cmd-help 'el-search-pause-search)
     (cmd-help 'el-search-keyboard-quit)
     (cmd-help 'el-search-occur)
-    (cmd-help 'el-search-jump-to-search-head)
+    (cmd-help 'el-search-jump)
     (cmd-help 'el-search-from-beginning)
     (cmd-help 'el-search-last-buffer-match)
     (cmd-help 'el-search-scroll-down)
@@ -2613,9 +2640,9 @@ absolute name must be matched by all of them."
   "Non-nil indicates we should not remove any highlighting.")
 
 (defun el-search--scroll-sexp-in-view (bounds)
-  ;; Try to make the sexp bounded by BOUNDS better visible.
-  ;; This tries to scroll (cdr BOUNDS) into view when necessary, and to
-  ;; center the sexp.
+  ;; Try to make the sexp bounded by BOUNDS (which is a list (BEG END))
+  ;; better visible.  This tries to scroll (cadr BOUNDS) into view when
+  ;; necessary, and to center the sexp.
   (when el-search-fancy-scrolling
     (let ((wheight (window-height)))
       ;; FIXME: make the following integer constants customizable,
@@ -2909,45 +2936,45 @@ With argument STOP non-nil, force cleanup."
   (interactive)
   (el-search--skip-to-next-buffer))
 
-(defun el-search-jump-to-search-head (&optional arg)
-  "Resume a search or jump to the specified match.
-Resume the last active search and select the last match found.
-With plain C-u prefix argument, prompt for a former search to
-resume, and make that the current search.  Any other numeric
-prefix arg has the following meaning:
+(defun el-search--goto-char-maybe-barf (pos)
+  (when (and (buffer-narrowed-p)
+             (or (< pos (point-min))
+                 (< (point-max) pos)))
+    (unless (y-or-n-p "\
+Position not accessible in narrowed buffer - really continue?")
+      (user-error "Abort")))
+  (goto-char pos))
+
+(define-obsolete-function-alias 'el-search-jump-to-search-head
+  'el-search-jump "el-search 1.12.5")
 
+(defun el-search-jump (&optional arg)
+  "Jump by matches.
+Select a match, resuming the last search if necessary.  The
+prefix argument decides which match is selected:
+
+ no prefix arg: select the (last) current match
  0: go to the match following point
  N: go to the Nth match after `window-start'
 -N: go to the Nth match before `window-end'
 
 In a non-interactive call, ARG should be an integer, having the
 same meaning as a numeric prefix arg, or an el-search-object to
-make current."
+make current, or the symbol t, in which case the user is prompted
+for an older search to resume."
   (interactive "P")
   (el-search--set-search-origin-maybe)
   (when (integerp arg)
     (el-search-barf-if-not-search-buffer
      (current-buffer)
-     "Numeric ARG only allowed in current search's current buffer"))
-  (when (or (el-search-object-p arg) (consp arg))
+     "Prefix ARG only allowed in current search's current buffer"))
+  (when (or (el-search-object-p arg) (eq arg t))
     ;; FIXME: would it be better to include some context around the search
     ;; head - or to even use an overview buffer for selection?
     (setq el-search--current-search
           (if (el-search-object-p arg) arg
-            (ring-ref
-             el-search-history
-             (let ((input
-                    (completing-read
-                     "Resume previous search: "
-                     (mapcar
-                      (lambda (n) (format "%d - %s"
-                                          n
-                                          
(el-search--get-search-description-string
-                                           (ring-ref el-search-history n)
-                                           t)))
-                      (number-sequence 0 (1- (ring-length 
el-search-history)))))))
-               (string-match "\\`\\([0-9]+\\) - " input)
-               (string-to-number (match-string 1 input))))))
+            (el-search--read-history-entry
+             el-search-history #'el-search--get-search-description-string)))
     (setq el-search--success t)
     (el-search--set-wrap-flag nil))
   (el-search-compile-pattern-in-search el-search--current-search)
@@ -2989,11 +3016,12 @@ make current."
              (setq arg (prefix-numeric-value arg))
              (goto-char (window-end)))
             ((not (numberp arg))
-             (goto-char (if (not (and last-match
-                                      ;; this should only happen for bad 
search patterns
-                                      (eq (marker-buffer last-match) 
(current-buffer))))
-                            (el-search-head-position current-head)
-                          last-match)))
+             (el-search--goto-char-maybe-barf
+              (if (not (and last-match
+                            ;; this should only happen for bad search patterns
+                            (eq (marker-buffer last-match) (current-buffer))))
+                  (el-search-head-position current-head)
+                last-match)))
             ((zerop arg) (setq arg 1))
             (t (goto-char (window-start))))
            (let ((match-pos
@@ -3063,7 +3091,8 @@ continued."
                (while (and (el-search-head-buffer head)
                            (not (setq match (with-current-buffer 
(el-search-head-buffer head)
                                               (save-excursion
-                                                (goto-char 
(el-search-head-position head))
+                                                
(el-search--goto-char-maybe-barf
+                                                 (el-search-head-position 
head))
                                                 (el-search--search-pattern-1
                                                  matcher t nil 
heuristic-matcher))))))
                  (el-search--next-buffer el-search--current-search))
@@ -3101,7 +3130,7 @@ continued."
                              (with-current-buffer new-buffer
                                (setq-local el-search--temp-buffer-flag t)))))))
                    (pop-to-buffer (el-search-head-buffer head) 
el-search-display-next-buffer-action)
-                   (goto-char match-start))
+                   (el-search--goto-char-maybe-barf match-start))
                  (setf (el-search-object-last-match el-search--current-search)
                        (copy-marker (point)))
                  (setf (el-search-head-position head)
@@ -3132,7 +3161,7 @@ continued."
      (or (bufferp buffer-or-file-name)
          ;; `file-in-directory-p' would be perfect here, but it calls
          ;; file-truename on both args what we don't want, so we use this:
-         (string-match-p "\\`\\.\\." (file-relative-name buffer-or-file-name 
directory)))))
+         (string-match-p (rx bos "..") (file-relative-name buffer-or-file-name 
directory)))))
   (el-search-prefix-key-maybe-set-transient-map))
 
 (defun el-search-pattern--interactive (&optional prompt display-match-count)
@@ -3153,6 +3182,10 @@ PATTERN.  When called from the current search's current 
search
 buffer, continue that search from point.  Otherwise or when a new
 PATTERN is given, start a new single-buffer search from point.
 
+With prefix arg, generally resume the last search.  With prefix
+arg 0, restart it.  With C-u C-u or negative prefix arg, prompt
+for an older search to resume.
+
 The minibuffer is put into `emacs-lisp-mode' for reading the
 input pattern, and there are some special key bindings:
 \\<el-search-read-expression-map>\\[newline] inserts a newline,
@@ -3166,29 +3199,45 @@ types defined with `el-search-defpattern'.
 
 See `el-search-defined-patterns' for a list of defined patterns."
   (declare (interactive-only el-search-forward))
-  (interactive (el-search-pattern--interactive nil 'display-match-count))
-  (cond
-   ((eq el-search--wrap-flag 'forward)
-    (progn
-      (el-search--set-wrap-flag nil)
-      (el-search--message-no-log "[Wrapped search]")
-      (sit-for .7)
-      (el-search-from-beginning 1)))
-   ((or
-     (el-search--pending-search-p)
-     (and (eq this-command last-command)
-          (eq pattern (el-search--current-pattern))))
-    (progn
-      (el-search--skip-expression nil t)
-      (el-search-continue-search 'from-here)))
-   (t ;create a new search single-buffer search
-    (let ((current-buffer (current-buffer)))
-      (el-search-setup-search
-       pattern
-       (lambda () (stream (list current-buffer)))
-       (lambda (search) (setf (alist-get 'is-single-buffer 
(el-search-object-properties search))
-                              current-buffer))
-       'from-here)))))
+  (interactive (if current-prefix-arg (list current-prefix-arg)
+                 (el-search-pattern--interactive nil 'display-match-count)))
+  (cl-flet ((restart-search
+             (lambda ()
+               (el-search-reset-search el-search--current-search)
+               (setq el-search--success nil)
+               (el-search-continue-search))))
+    (if (and current-prefix-arg (called-interactively-p 'any))
+        (let ((numerical-arg (prefix-numeric-value current-prefix-arg)))
+          (el-search--set-search-origin-maybe)
+          (cond
+           ((or (equal current-prefix-arg '(16)) (< numerical-arg 0)) ;resume 
older search
+            (el-search-jump t))
+           ((= numerical-arg 0) ;restart
+            (restart-search))
+           (t ;resume current search
+            (el-search-jump))))
+      (cond
+       ((eq el-search--wrap-flag 'forward)
+        (progn
+          (el-search--set-wrap-flag nil)
+          (el-search--message-no-log "[Wrapped search]")
+          (sit-for .7)
+          (restart-search)))
+       ((or
+         (el-search--pending-search-p)
+         (and (eq this-command last-command)
+              (eq pattern (el-search--current-pattern))))
+        (progn
+          (el-search--skip-expression nil t)
+          (el-search-continue-search 'from-here)))
+       (t ;create a new search single-buffer search
+        (let ((current-buffer (current-buffer)))
+          (el-search-setup-search
+           pattern
+           (lambda () (stream (list current-buffer)))
+           (lambda (search) (setf (alist-get 'is-single-buffer 
(el-search-object-properties search))
+                                  current-buffer))
+           'from-here)))))))
 
 ;;;###autoload
 (defalias 'el-search #'el-search-pattern)
@@ -3214,23 +3263,17 @@ executed, and nil else."
 
 (defun el-search-from-beginning (&optional arg)
   "Go to the first of this buffer's matches.
-With prefix ARG, restart the current search when positive; go to the
-last match in the current buffer when negative."
+With prefix ARG, go to the last match in the current buffer."
   (interactive "P")
   (el-search--set-search-origin-maybe)
+  (el-search-barf-if-not-search-buffer)
   (cond
-   ((< (prefix-numeric-value arg) 0)
-    (el-search-last-buffer-match))
-   ((not arg)
-    (el-search-barf-if-not-search-buffer)
+   (arg (el-search-last-buffer-match))
+   (t
     (el-search--unless-no-buffer-match
       (setf (el-search-head-position (el-search-object-head 
el-search--current-search))
             (point-min))
-      (el-search-continue-search)))
-   (t
-    (el-search-reset-search el-search--current-search)
-    (setq el-search--success nil)
-    (el-search-continue-search))))
+      (el-search-continue-search)))))
 
 (defun el-search-last-buffer-match ()
   "Go to the last of this buffer's matches."
@@ -3369,7 +3412,7 @@ See the command `el-search-pattern' for more information."
         (setf (el-search-object-last-match el-search--current-search)
               (copy-marker (point)))
         (el-search-hl-sexp)
-        (unless (eq last-command 'el-search-pattern)
+        (unless (and (eq last-command 'el-search-pattern) el-search--success)
           (el-search-hl-other-matches (el-search--current-matcher)))
         (setq el-search--success t))
     (el-search--unless-no-buffer-match
@@ -3382,9 +3425,9 @@ See the command `el-search-pattern' for more information."
       (el-search--set-wrap-flag 'backward))))
 
 (define-obsolete-function-alias 'el-search-previous-match
-  'el-search-pattern-backward "since el-search-1.3")
+  'el-search-pattern-backward "el-search 1.3")
 (define-obsolete-function-alias 'el-search-pattern-backwards
-  'el-search-pattern-backward "since el-search-1.6.7")
+  'el-search-pattern-backward "el-search 1.6.7")
 
 
 
@@ -3437,7 +3480,7 @@ Use the normal search commands to seize the search."
     (goto-char (window-end))
     (if (el-search--search-pattern-1 (el-search--current-matcher) t nil
                                      (el-search--current-heuristic-matcher))
-        (el-search-jump-to-search-head 0)
+        (el-search-jump 0)
       (goto-char here)
       (el-search--message-no-log "[No more matches after here]")
       (sit-for 1))))
@@ -3451,7 +3494,7 @@ Use the normal search commands to seize the search."
     (goto-char (window-start))
     (if (el-search--search-backward-1 (el-search--current-matcher) t nil
                                       (el-search--current-heuristic-matcher))
-        (el-search-jump-to-search-head 0)
+        (el-search-jump 0)
       (goto-char here)
       (el-search--message-no-log "[No more matches before here]")
       (sit-for 1))))
@@ -3481,6 +3524,7 @@ Prompt for a new pattern and revert."
   (revert-buffer))
 
 (defvar el-search-occur-match-ov-prop 'el-occur-match-data)
+(defvar el-search-occur-headline-prop 'el-search-occur-headline)
 
 (defun el-search-occur-jump-to-match ()
   (interactive)
@@ -3525,9 +3569,12 @@ Prompt for a new pattern and revert."
 
 (cl-defun el-search--occur-button-action
     (filename-or-buffer &optional match-pos do-fun (display-buffer-action nil 
action-specified))
-  (let ((buffer (if (bufferp filename-or-buffer)
-                    filename-or-buffer
-                  (find-file-noselect filename-or-buffer)))
+  (let ((buffer (cond
+                 ((bufferp filename-or-buffer)
+                  filename-or-buffer)
+                 ((functionp filename-or-buffer)
+                  (funcall filename-or-buffer))
+                 (t (find-file-noselect filename-or-buffer))))
         (search-pattern (el-search-object-pattern 
el-search-occur-search-object)))
     (with-selected-window (display-buffer
                            buffer
@@ -3626,12 +3673,9 @@ Prompt for a new pattern and revert."
 
 (defvar el-search-occur-mode-map-1
   (let ((map (make-sparse-keymap)))
-    (define-key map [tab]           #'el-search-occur-tab-command)
     (define-key map "\t"            #'el-search-occur-tab-command)
-    (define-key map [return]        #'el-search-occur-jump-to-match)
     (define-key map "\r"            #'el-search-occur-jump-to-match)
-    (define-key map [S-iso-lefttab] #'el-search-occur-cycle)
-    (define-key map [(shift tab)]   #'el-search-occur-cycle)
+    (define-key map [backtab]       #'el-search-occur-cycle)
     (define-key map [?p]            #'el-search-occur-previous-match)
     (define-key map [?n]            #'el-search-occur-next-match)
     (define-key map [?r]            #'el-search-occur-previous-match)
@@ -3670,9 +3714,7 @@ When nil, all such treatment is disabled."
 (defun el-search-occur-filter-buffer-substring (beg end &optional delete)
   (if (or delete
           (not el-search-occur-match-markers)
-          (not (save-excursion
-                 (goto-char beg)
-                 (search-forward-regexp outline-regexp end t))))
+          (eq end (next-single-char-property-change beg 
el-search-occur-headline-prop nil end)))
       (buffer-substring--filter beg end delete)
     (let ((contents '())
           p)
@@ -3712,7 +3754,7 @@ addition from `special-mode-map':
   (setq buffer-read-only t)
   (setq-local hs-hide-comments-when-hiding-all nil)
   (hs-minor-mode +1)
-  (setq outline-regexp "^;;;\\ \\*+")
+  (setq outline-regexp (rx bol ";;; " (+ "*")))
   (outline-minor-mode +1)
   (add-hook 'write-contents-functions 'el-search-occur-write-file nil t)
   (setq-local filter-buffer-substring-function 
#'el-search-occur-filter-buffer-substring))
@@ -3811,12 +3853,23 @@ addition from `special-mode-map':
                   (while (setq stream-of-buffer-matches (stream-pop 
stream-of-matches))
                     (setq buffer-matches (seq-length stream-of-buffer-matches))
                     (cl-incf overall-matches buffer-matches)
-                    (pcase-let ((`(,buffer ,_ ,file) (stream-first 
stream-of-buffer-matches)))
+                    (pcase-let* ((`(,buffer ,_ ,file)
+                                  ;; This always binds BUFFER to a live buffer
+                                  (stream-first stream-of-buffer-matches))
+                                 (get-buffer (with-current-buffer buffer 
el-search--get-buffer-fun)))
+                      (when get-buffer
+                        (let ((real-get-buffer get-buffer)
+                              (buffer-name (buffer-name buffer)))
+                          (setq get-buffer
+                                (lambda (&optional arg)
+                                  (if arg buffer-name (funcall 
real-get-buffer))))))
                       (if file (cl-incf matching-files) (cl-incf 
matching-buffers))
                       (insert "\n\n;;; *** ")
                       (insert-button
                        (or file (format "%S" buffer))
-                       'action (lambda (_) (el-search--occur-button-action (or 
file buffer))))
+                       'action
+                       (lambda (_) (el-search--occur-button-action (or 
get-buffer file buffer)))
+                       el-search-occur-headline-prop t)
                       (insert (format "  (%d match%s)\n"
                                       buffer-matches
                                       (if (> buffer-matches 1) "es" "")))
@@ -3873,7 +3926,7 @@ addition from `special-mode-map':
                                              (overlay-put ov 'face 
'el-search-occur-match)
                                              (overlay-put
                                               ov el-search-occur-match-ov-prop
-                                              `(,buffer ,match-beg ,file 
,nbr)))
+                                              `(,(or get-buffer buffer) 
,match-beg ,file ,nbr)))
                                            (with-current-buffer buffer 
(point)))))
                                 (insert (format "\n;;;; Line %d\n"
                                                 (with-current-buffer buffer
@@ -3899,7 +3952,7 @@ addition from `special-mode-map':
                                                       (el-search--end-of-sexp 
mb)))
                                                  nil 'front-advance) ;f-a is 
needed for later indenting
                                                 el-search-occur-match-ov-prop
-                                                `(,buffer ,mb ,file ,nbr)))
+                                                `(,(or get-buffer buffer) ,mb 
,file ,nbr)))
                                              (stream-pop matches)
                                              t)))))
                                   (insert
@@ -4106,7 +4159,7 @@ clone with an individual state."
   (set-register register (copy-el-search-object (or el-search-object 
el-search--current-search))))
 
 (cl-defmethod register-val-jump-to ((val el-search-object) _arg)
-  (el-search-jump-to-search-head val))
+  (el-search-jump val))
 
 (cl-defmethod register-val-describe ((val el-search-object) _verbose) ;VERBOSE 
is only used by C-x r v
   (let ((print-circle nil)) ;bug#30070
@@ -4115,6 +4168,57 @@ clone with an individual state."
 
 ;;;; Query-replace
 
+(cl-defstruct el-search-query-replace-object
+  search-object from-pattern to-expr textual-to splice)
+
+(defun el-search--get-q-r-description-string (qr-object &optional verbose 
dont-propertize)
+  (let ((qr-search (el-search-query-replace-object-search-object qr-object)))
+    (concat
+     "Replace"
+     (let ((printed-rule
+            (concat
+             (let ((printed-pattern (el-search--pp-to-string 
(el-search-object-pattern qr-search))))
+               (format (if (string-match-p "\n" printed-pattern) ":\n%s" " %s")
+                       printed-pattern))
+             " -> "
+             (el-search--pp-to-string (el-search-query-replace-object-to-expr 
qr-object)))))
+       (if dont-propertize printed-rule
+         (propertize printed-rule 'face 'shadow)))
+     (and verbose
+          (let ((search-head (el-search-object-head qr-search)))
+            (format "  [%s %s]"
+                    (if (alist-get 'is-single-buffer 
(el-search-object-properties qr-search))
+                        "single-buffer" "paused")
+                    (if-let ((buffer (el-search-head-buffer search-head)))
+                        (concat "in "(if (buffer-live-p buffer)
+                                         (buffer-name buffer)
+                                       (if-let ((head-file 
(el-search-head-file search-head)))
+                                           (file-name-nondirectory head-file)
+                                         "killed buffer")))
+                      "(completed)")))))))
+
+(cl-defmethod cl-print-object ((object el-search-query-replace-object) stream)
+  (princ "#s(el-search-query-replace " stream)
+  (prin1 (el-search--get-q-r-description-string object 'verbose 
'dont-propertize) stream)
+  (princ ")" stream))
+
+(defun el-search-query-replace-to-register (register &optional 
el-search-query-replace-object)
+  "Prompt for a register and save the EL-SEARCH-QUERY-REPLACE-OBJECT to it.
+In an interactive call or when EL-SEARCH-QUERY-REPLACE-OBJECT is
+nil, the last active `el-search-query-replace' session object is
+used."
+  (interactive (list (if el-search--current-query-replace
+                         (register-read-with-preview "Save current 
query-replace to register: ")
+                       (user-error "No el-search-query-replace has been 
started yet"))))
+  (set-register register (or el-search-query-replace-object 
el-search--current-query-replace)))
+
+(cl-defmethod register-val-jump-to ((val el-search-query-replace-object) _arg)
+  (el-search-query-replace val nil))
+
+(cl-defmethod register-val-describe ((val el-search-query-replace-object) 
_verbose)
+  (let ((print-circle nil)) ;bug#30070
+    (cl-prin1 val)))
+
 (defun el-search--replace-hunk (region to-insert)
   "Replace the text in REGION in current buffer with string TO-INSERT.
 Add line breaks before and after TO-INSERT when appropriate and
@@ -4130,8 +4234,10 @@ text."
                             (goto-char (car region))
                             (apply #'delete-region region)))
            ;; care about other sexps in this line
-           (sexp-before-us (not (looking-back "\(\\|^\\s-*" 
(line-beginning-position))))
-           (sexp-after-us  (not (looking-at "\\s-*[;\)]\\|$")))
+           (sexp-before-us (not (looking-back
+                                 (rx (or "(" (seq bol (zero-or-more (syntax 
whitespace)))))
+                                 (line-beginning-position))))
+           (sexp-after-us  (not (looking-at (rx (or (seq (* (syntax 
whitespace)) (any ";)")) eol)))))
            (insert-newline-before
             (or
              (and (string-match-p "\n" to-insert)
@@ -4150,7 +4256,7 @@ text."
              ))
            (insert-newline-after (and insert-newline-before sexp-after-us)))
       (when insert-newline-before
-        (when (looking-back "\\s-+" (line-beginning-position))
+        (when (looking-back (rx (+ (syntax whitespace))) 
(line-beginning-position) 'greedy)
           (delete-region (match-beginning 0) (match-end 0)))
         (insert "\n"))
       (insert to-insert)
@@ -4287,7 +4393,7 @@ exactly you did?  Thanks!"))))
             (with-current-buffer buffer-b
               (save-excursion
                 (goto-char (point-min))
-                (while (looking-at "^;;\\|^$")
+                (while (looking-at (rx (or (seq bol ";;") (seq bol eol))))
                   (forward-line))
                 (list (current-buffer) (point) (point-max))))
             (list (apply #'list
@@ -4326,22 +4432,40 @@ exactly you did?  Thanks!"))))
 
 (defun el-search--search-and-replace-pattern
     (pattern replacement &optional splice to-input-string use-current-search)
-  (unless use-current-search
-    (let ((current-buffer (current-buffer)))
-      (el-search-setup-search-1 pattern
-                                (lambda () (stream (list current-buffer)))
-                                t
-                                (let ((here (copy-marker (point))))
-                                  (lambda (search)
-                                    (setf (alist-get 'is-single-buffer
-                                                     
(el-search-object-properties search))
-                                          current-buffer)
-                                    (setf (alist-get 'description 
(el-search-object-properties search))
-                                          "Search created by 
`el-search-query-replace'")
-                                    (let ((inhibit-message t))
-                                      (el-search--next-buffer search)
-                                      (setf (el-search-head-position 
(el-search-object-head search))
-                                            here)))))))
+  (if-let ((qr-object (and (el-search-query-replace-object-p pattern) 
pattern)))
+      (setq
+       el-search--current-query-replace qr-object
+       pattern                   (el-search-query-replace-object-from-pattern  
qr-object)
+       replacement               (el-search-query-replace-object-to-expr       
qr-object)
+       splice                    (el-search-query-replace-object-splice        
qr-object)
+       to-input-string           (el-search-query-replace-object-textual-to    
qr-object)
+       el-search--current-search (el-search-query-replace-object-search-object 
qr-object)
+       use-current-search        t)
+    (unless use-current-search
+      (let ((current-buffer (current-buffer)))
+        (el-search-setup-search-1
+         pattern
+         (lambda () (stream (list current-buffer)))
+         t
+         (let ((here (copy-marker (point))))
+           (lambda (search)
+             (setf (alist-get 'is-single-buffer
+                              (el-search-object-properties search))
+                   current-buffer)
+             (setf (alist-get 'description (el-search-object-properties 
search))
+                   "Search created by `el-search-query-replace'")
+             (let ((inhibit-message t))
+               (el-search--next-buffer search)
+               (setf (el-search-head-position (el-search-object-head search))
+                     here)))))))
+    (ring-insert el-search-query-replace-object-history
+                 (setq el-search--current-query-replace
+                       (make-el-search-query-replace-object
+                        :search-object el-search--current-search
+                        :from-pattern pattern
+                        :to-expr replacement
+                        :textual-to to-input-string
+                        :splice nil))))
   (catch 'done
     (let ((replace-all nil) (replace-all-and-following nil)
           nbr-replaced nbr-skipped (nbr-replaced-total 0) (nbr-changed-buffers 
0)
@@ -4353,7 +4477,11 @@ exactly you did?  Thanks!"))))
           (save-all-answered nil)
           (should-quit nil)
           (stop-for-comments el-search-query-replace-stop-for-comments)
-          (stopped-for-comments nil))
+          (stopped-for-comments nil)
+          (message-continue
+           (lambda ()
+             (message "%s" (substitute-command-keys "Resume with C-u 
\\[el-search-query-replace]"))
+             (sit-for 2))))
       (let ((replace-in-current-buffer
              (lambda ()
                (setq nbr-replaced 0)
@@ -4425,6 +4553,7 @@ exactly you did?  Thanks!"))))
                                           (el-search-head-buffer head))
                                       (/ (* 100 (- (point) start-point -1))
                                          (- (point-max) start-point -1)))))))
+                              (accepted-replacement nil)
                               (edit-replacement
                                (lambda (&optional ediff-only)
                                  (save-excursion ;user may copy stuff from 
base buffer etc.
@@ -4433,8 +4562,8 @@ exactly you did?  Thanks!"))))
 ;; This buffer shows the individual replacement for the current match.
 ;; You may edit it here while query-replace is interrupted by a
 ;; `recursive-edit'.
-;; Type C-c C-q to quit, dismissing changes in this buffer, or C-c C-c
-;; to confirm.
+;; Type C-c C-c to confirm, or C-c C-q to quit, dismissing
+;; changes in this buffer.
 ;; Type C-c C-e to Ediff the current match with this buffer's content.
 ;; Type C-c C-r to revert this buffer."
                                                        'read-only t 'field t
@@ -4476,10 +4605,15 @@ exactly you did?  Thanks!"))))
                                                         
(exit-recursive-edit)))))
                                           (set-keymap-parent map 
(current-local-map))
                                           (define-key map [(control ?c) 
(control ?c)]
-                                            (funcall make-cleanup-fun 
#'exit-recursive-edit))
+                                            (funcall make-cleanup-fun
+                                                     (lambda ()
+                                                       (setq 
accepted-replacement t)
+                                                       (exit-recursive-edit))))
                                           (define-key map [(control ?c) 
(control ?q)]
                                             abort)
-                                          (define-key map [(control ?c) 
(control ?a)] ;"Abort"
+                                          (define-key map [(control ?c) 
(control ?k)]
+                                            abort)
+                                          (define-key map [(control ?c) 
(control ?a)]
                                             abort)
                                           (define-key map [(control ?c) 
(control ?e)]
                                             (lambda ()
@@ -4514,6 +4648,7 @@ exactly you did?  Thanks!"))))
                                      (kill-buffer buffer))
                                    (el-search--after-scroll (selected-window) 
(window-start))
                                    nil)))
+                              (use-dialog-box nil)
                               (query
                                (lambda ()
                                  (if stopped-for-comments
@@ -4527,7 +4662,7 @@ exactly you did?  Thanks!"))))
                                        (format "[%d/%d] %s"
                                                (if replaced-this nbr-done (1+ 
nbr-done))
                                                (+ nbr-done nbr-to-do)
-                                               (if replaced-this "*" "-")))
+                                               (if replaced-this (propertize 
"*" 'face 'success) "-")))
                                      (delq nil
                                            (list
                                             `(?y "y"
@@ -4538,23 +4673,25 @@ exactly you did?  Thanks!"))))
                                                  '(?n "n" "Move to the next 
match"))
                                             '(?r "r" "\
 Replace match but don't move or restore match if already replaced")
-                                            '(?! "all" "Replace all remaining 
matches in this buffer")
+                                            '(?! "!" "Replace all remaining 
matches in this buffer")
                                             '(?b "skip buf"
                                                  "Skip this buffer and any 
remaining matches in it")
                                             (and buffer-file-name
-                                                 '(?d "skip dir"
+                                                 '(?d "dir"
                                                       "Skip a parent directory 
of current file"))
                                             (and (not replaced-this)
-                                                 (list ?s (concat (if splice 
"disable" "enable")
-                                                                  " splice")
+                                                 (list ?s (concat (if splice 
"no " "")
+                                                                  "splice")
                                                        
(substitute-command-keys "\
 Toggle splicing mode (\\[describe-function] el-search-query-replace for 
details)")))
-                                            '(?o "show" "\
+                                            '(?e "edit" "\
 Show current replacement in a separate buffer - you can modify it there")
-                                            '(?e "ediff" "\
+                                            '(?E "Ediff" "\
 Ediff match with replacement")
                                             '(?q  "quit")
-                                            '(?\r "quit")))))))))
+                                            '(?\r "quit")
+                                            '(?S "S" "\
+Switch to driving search.  Useful to reposition search head.")))))))))
                          (when (and
                                 stop-for-comments
                                 (not 
(el-search-query-replace--comments-preserved-p
@@ -4604,14 +4741,17 @@ Ediff match with replacement")
                                    (lambda (&optional ediff-only)
                                      (let ((old-to-insert to-insert))
                                        (funcall edit-replacement ediff-only)
-                                       (unless (string= old-to-insert 
to-insert)
+                                       (unless (and (string= old-to-insert 
to-insert)
+                                                    (not accepted-replacement))
                                          (if (not replaced-this)
                                              (progn
                                                (funcall replace-or-restore)
                                                (undo-boundary))
-                                           (el-search--message-no-log
-                                            "Already replaced this match - hit 
r r to update")
-                                           (sit-for 2))))
+                                           ;; (el-search--message-no-log
+                                           ;;  "Already replaced this match - 
hit r r to update")
+                                           ;; (sit-for 2)
+                                           (funcall replace-or-restore)
+                                           (funcall replace-or-restore))))
                                      nil)))
                              (unwind-protect
                                  (while (not (pcase (funcall query)
@@ -4624,22 +4764,26 @@ Ediff match with replacement")
                                                 (cl-incf nbr-skipped)
                                                 t)
                                                (?!
+                                                (setq replace-all t)
                                                 (when (and use-current-search
-                                                           (not (alist-get 
'is-single-buffer
-                                                                           
(el-search-object-properties
-                                                                            
el-search--current-search)))
-                                                           (eq (car 
(read-multiple-choice
-                                                                     "\
+                                                           (not (alist-get
+                                                                 
'is-single-buffer
+                                                                 
(el-search-object-properties
+                                                                  
el-search--current-search))))
+                                                  (pcase (car 
(read-multiple-choice
+                                                               "\
 Also replace in all following buffers?"
-                                                                     '((?! 
"Only this"
-                                                                           "\
+                                                               '((?! "Only 
this"
+                                                                     "\
 Replace only remaining matches in this buffer")
-                                                                       (?A 
"All buffers"
-                                                                           "\
+                                                                 (?/ "This 
then pause"
+                                                                     "\
+Replace all in this buffer then terminate to resume session later")
+                                                                 (?A "All 
buffers"
+                                                                     "\
 Replace all matches in all buffers"))))
-                                                               ?A))
-                                                  (setq 
replace-all-and-following t))
-                                                (setq replace-all t)
+                                                    (?A (setq 
replace-all-and-following t))
+                                                    (?/ (setq replace-all 
'stop))))
                                                 (unless replaced-this (funcall 
do-replace))
                                                 t)
                                                (?b (goto-char (point-max))
@@ -4652,12 +4796,23 @@ Replace all matches in all buffers"))))
                                                (?s
                                                 (setq splice    (not splice)
                                                       to-insert (funcall 
get-replacement-string))
+                                                (setf 
(el-search-query-replace-object-splice
+                                                       
el-search--current-query-replace)
+                                                      splice)
                                                 nil)
-                                               (?o (funcall edit-and-update)
+                                               (?e (funcall edit-and-update)
                                                    nil)
-                                               (?e (funcall edit-and-update 
'ediff-only)
+                                               (?E (funcall edit-and-update 
'ediff-only)
                                                    nil)
-                                               ((or ?q ?\C-g ?\r) (signal 
'quit t)))))
+                                               ((or ?q ?\C-g ?\r) (signal 
'quit t))
+                                               (?S
+                                                (run-with-timer
+                                                 0 nil
+                                                 (lambda ()
+                                                   (message "Activating 
driving search...")
+                                                   (sit-for 1.)
+                                                   (el-search-jump 
el-search--current-search)))
+                                                (signal 'quit t)))))
                                (when handle (accept-change-group handle))))
                            (when (and replaced-this (not replace-all))
                              (undo-boundary)))
@@ -4682,22 +4837,22 @@ Replace all matches in all buffers"))))
                                             (propertize
                                              "Skip the matches in the 
replacement? "
                                              'face 
'el-search-highlight-in-prompt-face)
-                                            '((?y "yes"
+                                            '((?s "skip"
                                                   "Skip any matches in this 
replacement")
-                                              (?n "no"
+                                              (?d "don't"
                                                   "Continue with the matches 
in the replacement")
-                                              (?Y "always Yes"
+                                              (?S "always Skip"
                                                   "Skip now and for the rest 
of this session")
-                                              (?N "always No"
+                                              (?D "always Don't"
                                                   "Don't skip now and for the 
rest of this session")
                                               (?q "quit"
                                                   "Abort this query-replace 
session"))))
-                                 ((and (or ?y ?Y) answer)
-                                  (when (= answer ?Y) (setq 
skip-matches-in-replacement t))
+                                 ((and (or ?s ?S) answer)
+                                  (when (= answer ?S) (setq 
skip-matches-in-replacement t))
                                   (funcall skip-replacement))
                                  (?q (signal 'quit t))
                                  (answer
-                                  (when (= answer ?N) (setq 
skip-matches-in-replacement nil))
+                                  (when (= answer ?D) (setq 
skip-matches-in-replacement nil))
                                   (when replace-all
                                     (setq replace-all nil)
                                     ;; FIXME: can this be annoying?  Problem: 
we need to catch possibly
@@ -4710,7 +4865,10 @@ Replace all matches in all buffers"))))
                (el-search-hl-remove)
                (when should-quit
                  (remove-hook 'post-command-hook 
'el-search-hl-post-command-fun t)
-                 (if (functionp should-quit) (funcall should-quit) (throw 
'done t)))
+                 (if (functionp should-quit)
+                     (funcall should-quit)
+                   (funcall message-continue)
+                   (throw 'done t)))
                (setf (el-search-head-position (el-search-object-head 
el-search--current-search))
                      (point-max))
                (goto-char opoint)
@@ -4754,83 +4912,121 @@ Don't save this buffer and all following buffers; 
don't ask again"))))
                             nbr-replaced
                             (if (zerop nbr-skipped)  ""
                               (format "   (%d skipped)" nbr-skipped))))))))
-        (while (progn (el-search-continue-search)
-                      (and el-search--success (not el-search--wrap-flag))) 
;FIXME: do it better
-          (funcall replace-in-current-buffer)
-          (unless replace-all-and-following (setq replace-all nil)))
+        (let ((stop nil))
+          (while (and (not stop)
+                       ;FIXME: do it better.
+                      (progn (el-search-continue-search)
+                             (and el-search--success (not 
el-search--wrap-flag))))
+            (funcall replace-in-current-buffer)
+            (when (eq replace-all 'stop)
+              (setq stop t)
+              (el-search-hl-post-command-fun 'stop)
+              (funcall message-continue))
+            (unless replace-all-and-following (setq replace-all nil))))
         (message "Replaced %d matches in %d buffers" nbr-replaced-total 
nbr-changed-buffers)))))
 
 (defun el-search-query-replace--read-args ()
   (barf-if-buffer-read-only)
-  (let ((from-input
-         (let ((el-search--initial-mb-contents
-                (or el-search--initial-mb-contents
-                    (and (or (eq last-command 'el-search-pattern)
-                             (el-search--pending-search-p))
-                         (if (equal (el-search-read (car 
el-search-pattern-history))
-                                    (el-search-read (car 
el-search-query-replace-history)))
-                             (car el-search-query-replace-history)
-                           (car el-search-pattern-history))))))
-           ;; We only want error hints so we don't bind 
el-search--display-match-count-in-prompt
-           (unwind-protect (minibuffer-with-setup-hook 
#'el-search-read-pattern-setup-mb
-                             (let ((el-search--reading-input-for-query-replace 
t))
-                               (el-search--read-pattern "Query replace 
pattern: " nil
-                                                        
'el-search-query-replace-history)))
-             (when (timerp el-search--mb-hints-timer)
-               (cancel-timer el-search--mb-hints-timer)))))
-        from to read-from read-to)
-    (with-temp-buffer
-      (emacs-lisp-mode)
-      (insert from-input)
-      (goto-char 1)
-      (forward-sexp)
-      (skip-chars-forward " \t\n")
-      ;; FIXME: maybe more sanity tests here...
-      (if (not (looking-at "->\\|=>\\|>"))
-          (setq from from-input
-                to (let ((el-search--initial-mb-contents nil))
-                     (el-search--read-pattern "Replace with result of 
evaluation of: " from)))
-        (delete-region (point) (match-end 0))
-        (goto-char 1)
-        (forward-sexp)
-        (setq from (buffer-substring 1 (point)))
-        (skip-chars-forward " \t\n")
-        (setq to (buffer-substring (point) (progn (forward-sexp) (point))))))
-    (unless (and el-search-query-replace-history
-                 (not (string= from from-input))
-                 (string= from-input (car el-search-query-replace-history)))
-      (push (with-temp-buffer
-              (emacs-lisp-mode)
-              (insert (let ((newline-in-from (string-match-p "\n" from))
-                            (newline-in-to   (string-match-p "\n" to)))
-                        (format "%s%s%s ->%s%s"
-                                (if (and (or newline-in-from newline-in-to)
-                                         (not (string-match-p "\\`\n" from))) 
"\n" "")
-                                (if     newline-in-from                       
"\n" "" ) from
-                                (if (and (or newline-in-from newline-in-to)
-                                         (not (string-match-p "\\`\n" to)))   
"\n" " ") to)))
-              (indent-region 1 (point-max))
-              (buffer-string))
-            el-search-query-replace-history))
-    (el-search--pushnew-to-history from 'el-search-pattern-history)
-    (setq read-from (el-search-read from))
-    (setq read-to   (el-search-read to))
-    (el-search--maybe-warn-about-unquoted-symbol read-from)
-    (when (and (symbolp read-to)
-               (not (el-search--contains-p (el-search-make-matcher `',read-to) 
read-from))
-               (not (eq read-to t))
-               (not (eq read-to nil)))
-      (el-search--maybe-warn-about-unquoted-symbol read-to))
-    (list read-from read-to to)))
+  (if (not current-prefix-arg)
+      (let ((from-input
+             (let ((el-search--initial-mb-contents
+                    (or el-search--initial-mb-contents
+                        (and (or (eq last-command 'el-search-pattern)
+                                 (el-search--pending-search-p))
+                             (if (equal (el-search--current-pattern)
+                                        (el-search-read (car 
el-search-query-replace-history)))
+                                 (car el-search-query-replace-history)
+                               (el-search--pp-to-string 
(el-search--current-pattern)))))))
+               ;; We only want error hints so we don't bind 
el-search--display-match-count-in-prompt
+               (unwind-protect (minibuffer-with-setup-hook 
#'el-search-read-pattern-setup-mb
+                                 (let 
((el-search--reading-input-for-query-replace t))
+                                   (el-search--read-pattern "Query replace 
pattern: " nil
+                                                            
'el-search-query-replace-history)))
+                 (when (timerp el-search--mb-hints-timer)
+                   (cancel-timer el-search--mb-hints-timer)))))
+            from to read-from read-to)
+        (with-temp-buffer
+          (emacs-lisp-mode)
+          (insert from-input)
+          (goto-char 1)
+          (forward-sexp)
+          (skip-chars-forward " \t\n")
+          ;; FIXME: maybe more sanity tests here...
+          (if (not (looking-at (rx (or "->" "=>" ">"))))
+              (setq from from-input
+                    to (let ((el-search--initial-mb-contents nil))
+                         (el-search--read-pattern "Replace with result of 
evaluation of: " from)))
+            (delete-region (point) (match-end 0))
+            (goto-char 1)
+            (forward-sexp)
+            (setq from (buffer-substring 1 (point)))
+            (skip-chars-forward " \t\n")
+            (setq to (buffer-substring (point) (progn (forward-sexp) 
(point))))))
+        (unless (and el-search-query-replace-history
+                     (not (string= from from-input))
+                     (string= from-input (car 
el-search-query-replace-history)))
+          (push (with-temp-buffer
+                  (emacs-lisp-mode)
+                  (insert (let ((newline-in-from (string-match-p "\n" from))
+                                (newline-in-to   (string-match-p "\n" to)))
+                            (format "%s%s%s ->%s%s"
+                                    (if (and (or newline-in-from newline-in-to)
+                                             (not (string-match-p (rx bos 
"\n") from))) "\n" "")
+                                    (if     newline-in-from                    
         "\n" "" ) from
+                                    (if (and (or newline-in-from newline-in-to)
+                                             (not (string-match-p (rx bos 
"\n") to)))   "\n" " ") to)))
+                  (indent-region 1 (point-max))
+                  (buffer-string))
+                el-search-query-replace-history))
+        (el-search--pushnew-to-history from 'el-search-pattern-history)
+        (setq read-from (el-search-read from))
+        (setq read-to   (el-search-read to))
+        (el-search--maybe-warn-about-unquoted-symbol read-from)
+        (when (and (symbolp read-to)
+                   (not (el-search--contains-p (el-search-make-matcher 
`',read-to) read-from))
+                   (not (eq read-to t))
+                   (not (eq read-to nil)))
+          (el-search--maybe-warn-about-unquoted-symbol read-to))
+        (list read-from read-to to))
+    (unless el-search--current-query-replace
+      (error "No pending query-replace session"))
+    (let ((numeric-prefix (prefix-numeric-value current-prefix-arg)))
+      (when (or (< numeric-prefix 0) (equal current-prefix-arg '(16)))
+        (setq el-search--current-query-replace
+              (el-search--read-history-entry
+               el-search-query-replace-object-history
+               #'el-search--get-q-r-description-string)))
+      (let ((query-restart (lambda () (y-or-n-p "Restart current query-replace 
session? ")))
+            (restart (lambda () (el-search-reset-search
+                                 (el-search-query-replace-object-search-object
+                                  el-search--current-query-replace)))))
+        (unless (or (= numeric-prefix 0)
+                    (el-search-head-buffer
+                     (el-search-object-head
+                      (el-search-query-replace-object-search-object
+                       el-search--current-query-replace)))
+                    (and (funcall query-restart)
+                         (prog1 t (funcall restart))))
+          (user-error "%s" (substitute-command-keys "\
+Session terminated - C-u 0 \\[el-search-query-replace] to restart")))
+        (when (and (= numeric-prefix 0)
+                   (or (funcall query-restart)
+                       (user-error "Abort")))
+          (funcall restart)))
+      (list el-search--current-query-replace nil))))
 
 ;;;###autoload
 (defun el-search-query-replace (from-pattern to-expr &optional textual-to)
   "Replace some matches of \"el-search\" pattern FROM-PATTERN.
 
-TO-EXPR is an Elisp expression that is evaluated repeatedly for
-each match with bindings created in FROM-PATTERN in effect to
-produce a replacement expression.  Operate from point
-to (point-max).
+With prefix arg, generally resume the last session; but with
+prefix arg 0 restart the last session, and with negative or plain
+C-u C-u prefix arg, prompt for an older session to resume.
+
+FROM-PATTERN is an el-search pattern to match.  TO-EXPR is an
+Elisp expression that is evaluated repeatedly for each match with
+bindings created in FROM-PATTERN in effect to produce a
+replacement expression.
 
 As each match is found, the user must type a character saying
 what to do with it.  For directions, type ? at that time.
@@ -4844,38 +5040,37 @@ you can also give an input of the form
 prompt and specify both expressions at once.  This format is also
 used for history entries.
 
-When called directly after a search command, use the current
-search to drive query-replace (like in isearch).  You get a
-multi-buffer query-replace this way when the current search is
-multi-buffer.  When not called after a search command,
-query-replace all matches following point in the current buffer.
+Operate from point to (point-max), unless when called directly
+after a search command; then use the current search to drive
+query-replace (similar to isearch).  You get a multi-buffer
+query-replace this way when the current search is multi-buffer.
 
-It is also possible to replace matches with an arbitrary number
-of expressions (even with zero expressions, effectively deleting
+It is possible to replace matches with an arbitrary number of
+expressions (even with zero expressions, effectively deleting
 matches) by using the \"splicing\" submode that can be toggled
 from the prompt with \"s\".  When splicing mode is on (default
 off), the replacement expression must evaluate to a list, and all
 of the list's elements are inserted in order.
 
-The optional argument TEXTUAL-TO is bound by the interactive form
-to the text form of the replacement expression specified.  It is
-consulted to construct the text form of each replacement."
+In a non-interactive call, FROM-PATTERN can be an
+el-search-query-replace-object to resume.  In this case the remaining
+arguments are ignored."
   (interactive (el-search-query-replace--read-args)) ;this binds the optional 
argument
   (setq this-command 'el-search-query-replace) ;in case we come from isearch
-  (barf-if-buffer-read-only)
   (el-search--search-and-replace-pattern
    from-pattern to-expr nil textual-to
-   (let ((search-head (and el-search--current-search
-                           (el-search-object-head el-search--current-search))))
-     (and
-      search-head
-      (eq (el-search-head-buffer search-head) (current-buffer))
-      (equal from-pattern (el-search-object-pattern el-search--current-search))
-      (or (eq last-command 'el-search-pattern)
-          (el-search--pending-search-p))
-      (prog1 t
-        (el-search--message-no-log "Using the current search to drive 
query-replace...")
-        (sit-for 1.))))))
+   (or (el-search-query-replace-object-p from-pattern)
+       (let ((search-head (and el-search--current-search
+                               (el-search-object-head 
el-search--current-search))))
+         (and
+          search-head
+          (eq (el-search-head-buffer search-head) (current-buffer))
+          (equal from-pattern (el-search-object-pattern 
el-search--current-search))
+          (or (eq last-command 'el-search-pattern)
+              (el-search--pending-search-p))
+          (prog1 t
+            (el-search--message-no-log "Using the current search to drive 
query-replace...")
+            (sit-for 1.)))))))
 
 (defun el-search--take-over-from-isearch (&optional goto-left-end)
   (let ((other-end (and goto-left-end isearch-other-end))
@@ -4906,7 +5101,7 @@ Reuse already given input."
     (call-interactively #'el-search-pattern-backward)))
 
 (define-obsolete-function-alias 'el-search-search-backwards-from-isearch
-  'el-search-search-backward-from-isearch "since el-search-1.6.7")
+  'el-search-search-backward-from-isearch "el-search 1.6.7")
 
 ;;;###autoload
 (defun el-search-replace-from-isearch ()
@@ -4950,10 +5145,13 @@ Reuse already given input."
      ["Forward"  el-search-pattern]
      ["Backward" el-search-pattern-backward]
      ["Sexp at Point" el-search-this-sexp]
-     ["Resume Last Search" el-search-jump-to-search-head :enable 
el-search--current-search]
-     ["Resume Former Search" ,(lambda () (interactive) 
(el-search-jump-to-search-head '(4)))
+     ["Resume Last Search" el-search-jump :enable el-search--current-search]
+     ["Resume Former Search" ,(lambda () (interactive) (el-search-jump '(4)))
       :enable (cdr (ring-elements el-search-history))]
      ["Query-Replace" el-search-query-replace :enable (not buffer-read-only)]
+     ["Resume Query-Replace"
+      ,(lambda () (interactive) (el-search-query-replace 
el-search--current-query-replace nil))
+      :enable el-search--current-query-replace]
      ["Occur" ,(lambda () (interactive)
                  (defvar el-search-occur-flag)
                  (let ((el-search-occur-flag t)) (call-interactively 
#'el-search-pattern)))])))
diff --git a/packages/excorporate/NEWS b/packages/excorporate/NEWS
index e85e1f0..2322e9d 100644
--- a/packages/excorporate/NEWS
+++ b/packages/excorporate/NEWS
@@ -1,5 +1,25 @@
 GNU Emacs Excorporate NEWS -- history of user-visible changes.
 
+* Excorporate 0.8.3
+
+Released 2019-06-18
+
+** Fix appt percent-encoded URL printing
+
+** Update HTTP debugging steps in Info manual
+
+* Excorporate 0.8.2
+
+Released 2019-06-14
+
+** Enable multiple connections
+
+The excorporate-configuration variable can now be a list representing
+multiple servers.  The excorporate function will create one connection
+per server configured.  Connections to additional servers can be
+dynamically created by passing a prefix argument to the excorporate
+function.
+
 * Excorporate 0.8.1
 
 Released 2018-09-15
diff --git a/packages/excorporate/excorporate-diary.el 
b/packages/excorporate/excorporate-diary.el
index c4c94e1..833df30 100644
--- a/packages/excorporate/excorporate-diary.el
+++ b/packages/excorporate/excorporate-diary.el
@@ -1,6 +1,6 @@
 ;;; excorporate-diary.el --- Diary integration        -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2018 Free Software Foundation, Inc.
+;; Copyright (C) 2018-2019 Free Software Foundation, Inc.
 
 ;; Author: Thomas Fitzsimmons <address@hidden>
 ;; Keywords: calendar
@@ -33,7 +33,9 @@
 (require 'excorporate)
 (require 'nadvice)
 
-;; FIXME: Add something like this to diary-lib.el.
+;; For Emacs versions less than 27.1, which do not have the fix for
+;; Bug#35645, work around the issue where `icalendar-import-buffer'
+;; pops up the diary file buffer.
 (defun exco-diary-diary-make-entry (string &optional nonmarking file)
   "Insert a diary entry STRING which may be NONMARKING in FILE.
 If omitted, NONMARKING defaults to nil and FILE defaults to
@@ -55,12 +57,12 @@ If omitted, NONMARKING defaults to nil and FILE defaults to
      (if nonmarking diary-nonmarking-symbol "")
      string)))
 
-;; FIXME: Have icalendar--add-diary-entry use the new diary-lib
-;; function instead of diary-make-entry.
 (defun exco-diary-icalendar--add-diary-entry-around (original &rest arguments)
   "Prevent whitespace workaround from selecting diary buffer.
 Also prevent `diary-make-entry' from putting the diary file
-where (other-buffer (current-buffer)) will return it."
+where (other-buffer (current-buffer)) will return it.  ORIGINAL
+and ARGUMENTS are the original function and arguments
+respectively."
   (cl-letf (((symbol-function #'find-file)
             (symbol-function #'find-file-noselect))
            ;; This override suppresses diary-make-entry's window
@@ -68,8 +70,10 @@ where (other-buffer (current-buffer)) will return it."
            ((symbol-function #'diary-make-entry)
             (symbol-function #'exco-diary-diary-make-entry)))
     (apply original arguments)))
-(advice-add #'icalendar--add-diary-entry :around
-           #'exco-diary-icalendar--add-diary-entry-around)
+
+(unless (string-match "omit-trailing-space" (documentation 'diary-make-entry))
+  (advice-add #'icalendar--add-diary-entry :around
+             #'exco-diary-icalendar--add-diary-entry-around))
 
 (defvar excorporate-diary-today-file
   "~/.emacs.d/excorporate/diary-excorporate-today"
@@ -107,6 +111,27 @@ initialize for today's date, nil otherwise."
          ;; connnection-callback loop.
          (basic-save-buffer-1))))))
 
+;; Literal percent signs (%) are not supported in a diary entry since
+;; they're interpreted as format strings by `diary-sexp-entry', so
+;; encode them during entry insertion, then unescape them during
+;; display.  This is needed so that, e.g., encoded meeting URLs that
+;; contain literal percent signs (%) work with `browse-url'.
+(defun exco-diary--fix-percent-signs ()
+  "Replace percent-sign placeholders with percent signs."
+  (goto-char (point-min))
+  (let ((inhibit-read-only t))
+    (while (re-search-forward "<EXCO_PERCENT_SIGN>" nil t)
+      (replace-match "%"))))
+
+(defun exco-diary-appt-disp-window (min-to-app new-time appt-msg)
+  "Replace Excorporate diary percent signs.
+For MIN-TO-APP, NEW-TIME and APPT-MSG documentation, see
+`appt-disp-window'."
+  (appt-disp-window min-to-app new-time appt-msg)
+  (with-current-buffer (get-buffer-create appt-buffer-name)
+    (let ((inhibit-read-only t))
+      (exco-diary--fix-percent-signs))))
+
 (defun exco-diary-insert-meeting (finalize
                                  subject start _end _location
                                  _main-invitees _optional-invitees
@@ -123,7 +148,7 @@ Call FINALIZE after the meeting has been inserted."
   (when (not (string-match "^Cancel[l]?ed: " subject))
     ;; FIXME: Sometimes meetings are duplicated if they have
     ;; overlapping (and (diary-cyclic ...) (diary-block ...)) ranges,
-    ;; e.g., on in the today file and one in the transient file.
+    ;; e.g., one in the today file and one in the transient file.
     ;; Maybe we should de-duplicate them in the final display.  If the
     ;; meeting start time is sometime today then put it in today's
     ;; diary file, otherwise put it in the transient one.
@@ -136,6 +161,33 @@ Call FINALIZE after the meeting has been inserted."
                   excorporate-diary-transient-file)))
       (with-temp-buffer
        (insert icalendar-text)
+
+       ;; FIXME: Maybe some users of multiple calendars will want to
+       ;; know the source calendar's name for each diary entry.
+       ;; There is no great way to achieve that right now, but one
+       ;; idea is to add X-WR-CALNAME support to
+       ;; icalendar-import-buffer, replace the
+       ;; exco-diary-insert-meeting argument to
+       ;; exco-calendar-item-with-details-iterate with:
+       ;;
+       ;; (lambda (&rest arguments)
+       ;;  (apply #'exco-diary-insert-meeting identifier arguments))
+       ;;
+       ;; and uncomment the following code.
+       ;;
+       ;; (goto-char (point-min))
+       ;; (while (re-search-forward
+       ;;      "^SUMMARY\\([^:]*\\):\\(.*\\(\n[        ].*\\)*\\)" nil t)
+       ;;   (insert (format "\nX-WR-CALNAME: (%s)" identifier)))
+
+       ;; Escape literal percent signs (%).  Use less-than sign (<)
+       ;; and greater-than sign (>) which are forbidden URL
+       ;; characters, so that in the plain text diary file,
+       ;; percent-encoded URLs become completely invalid rather than
+       ;; slightly wrong.
+       (goto-char (point-min))
+       (while (re-search-forward "%" nil t)
+         (replace-match "<EXCO_PERCENT_SIGN>"))
        (icalendar-import-buffer file t))))
   (funcall finalize))
 
@@ -216,14 +268,32 @@ ARGUMENTS are the arguments to `diary-view-entries'."
        (goto-char (point-min))
        (when (not (re-search-forward
                    (concat "^ *" diary-include-string " *\"" file "\"") nil t))
-         (exco-diary-diary-make-entry
-          (concat diary-include-string " \"" file "\""))
+         (let ((include-string (concat diary-include-string " \"" file "\"")))
+           (if (string-match "omit-trailing-space"
+                             (documentation 'diary-make-entry))
+               (with-no-warnings
+                 (diary-make-entry include-string nil nil t t))
+             (exco-diary-diary-make-entry include-string)))
          (save-buffer)))))
   (advice-add #'diary :around #'exco-diary-diary-around)
   (advice-add #'diary-view-entries :override
              #'exco-diary-diary-view-entries-override)
   (add-hook 'diary-list-entries-hook #'diary-sort-entries)
   (add-hook 'diary-list-entries-hook #'diary-include-other-diary-files)
+  (add-hook 'diary-fancy-display-mode-hook #'exco-diary--fix-percent-signs)
+  (unless (eq appt-disp-window-function 'exco-diary-appt-disp-window)
+    (if (eq appt-disp-window-function 'appt-disp-window)
+       ;; exco-diary-appt-disp-window is compatible with
+       ;; appt-disp-window, so override it.
+       (setq appt-disp-window-function 'exco-diary-appt-disp-window)
+      (warn (format (concat "Excorporate diary support needs appt-disp-window"
+                           " but appt-disp-window-function is currently %S")
+                   appt-disp-window-function))))
+  (unless (eq diary-display-function 'diary-fancy-display)
+    (warn (format
+          (concat "Excorporate diary support needs diary-fancy-display"
+                  " but diary-display-function is currently %S")
+          diary-display-function)))
   (appt-activate 1)
   (message "Excorporate diary support enabled."))
 
@@ -232,6 +302,9 @@ ARGUMENTS are the arguments to `diary-view-entries'."
   (interactive)
   (advice-remove #'diary #'exco-diary-diary-around)
   (advice-remove #'diary-view-entries #'exco-diary-diary-view-entries-override)
+  (remove-hook 'diary-fancy-display-mode-hook #'exco-diary--fix-percent-signs)
+  (when (eq appt-disp-window-function 'exco-diary-appt-disp-window)
+    (setq appt-disp-window-function 'appt-disp-window))
   (with-current-buffer (find-file-noselect diary-file)
     (dolist (file (list excorporate-diary-transient-file
                        excorporate-diary-today-file))
diff --git a/packages/excorporate/excorporate-org.el 
b/packages/excorporate/excorporate-org.el
index 2266161..8e951d0 100644
--- a/packages/excorporate/excorporate-org.el
+++ b/packages/excorporate/excorporate-org.el
@@ -1,6 +1,6 @@
 ;;; excorporate-org.el --- Exchange Org Mode view     -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2016 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2019 Free Software Foundation, Inc.
 
 ;; Author: Thomas Fitzsimmons <address@hidden>
 ;; Keywords: calendar
@@ -20,7 +20,7 @@
 
 ;;; Commentary:
 
-;; Use the Org Mode to display daily meetings.
+;; Use Org Mode to display daily meetings.
 
 ;;; Code:
 
@@ -30,8 +30,12 @@
 (defvar excorporate-org-buffer-name "*Excorporate*"
   "The buffer into which Org Mode output is inserted.")
 
+(defvar exco-org--temporary-buffers '()
+  "A list of per-connection result buffers.")
+
 (defun exco-org-initialize-buffer ()
   "Add initial text to the destination buffer."
+  (setq exco-org--temporary-buffers '())
   (with-current-buffer (get-buffer-create excorporate-org-buffer-name)
       (setq buffer-read-only t)
       ;; Some Org mode configurations need `buffer-file-name' to be
@@ -47,7 +51,7 @@
       (display-buffer (current-buffer))
       (let ((inhibit-read-only t))
        (delete-region (point-min) (point-max))
-       (goto-char 1)
+       (goto-char (point-min))
        (insert "# Updated...\n"))))
 
 (defun exco-org-format-headline (identifier)
@@ -77,13 +81,21 @@ by `current-time'."
   (dolist (invitee invitees)
     (insert (format "  + %s\n" invitee))))
 
+(defun exco-org--identifier-buffer (identifier)
+  "Return a hidden buffer with a name based on IDENTIFIER."
+  (get-buffer-create
+   (format " *exco-org-%S*" identifier)))
+
 (defun exco-org-insert-headline (identifier month day year)
   "Insert Org headline for IDENTIFIER on date MONTH DAY YEAR."
-  (with-current-buffer (get-buffer-create excorporate-org-buffer-name)
-    (let ((inhibit-read-only t))
-      (insert (exco-org-format-headline identifier))
-      (org-insert-time-stamp (encode-time 0 0 0 day month year)
-                            nil t "  + Date " "\n"))))
+  (let ((temporary-buffer (exco-org--identifier-buffer identifier)))
+    (push temporary-buffer exco-org--temporary-buffers)
+    (with-current-buffer temporary-buffer
+      (let ((inhibit-read-only t))
+       (delete-region (point-min) (point-max))
+       (insert (exco-org-format-headline identifier))
+       (org-insert-time-stamp (encode-time 0 0 0 day month year)
+                              nil t "  + Date " "\n")))))
 
 (defun exco-org-insert-meeting (subject start end location
                                        main-invitees optional-invitees)
@@ -107,21 +119,23 @@ are the requested participants."
 (defun exco-org-insert-meetings (identifier response)
   "Insert the connection IDENTIFIER's meetings from RESPONSE."
   (with-current-buffer (get-buffer-create excorporate-org-buffer-name)
-    (let ((inhibit-read-only t)
-         (name-regexp (concat "\\" (exco-org-format-headline identifier))))
-      (goto-char 1)
+    (let ((inhibit-read-only t))
+      (goto-char (point-min))
       (end-of-line)
-      (insert (format "%s..." identifier))
-      (goto-char (point-max))
-      (re-search-backward name-regexp nil)
-      (forward-line 2)
+      (insert (format "%s..." identifier))))
+  (with-current-buffer (exco-org--identifier-buffer identifier)
+    (let ((inhibit-read-only t))
       (org-insert-time-stamp (current-time) t t "  + Last checked " "\n")
-      (exco-calendar-item-iterate response #'exco-org-insert-meeting)
-      (re-search-backward name-regexp nil)
+      (exco-calendar-item-iterate
+       response (lambda (&rest arguments)
+                 (with-current-buffer (exco-org--identifier-buffer identifier)
+                   (org-mode)
+                   (apply #'exco-org-insert-meeting arguments))))
+      (goto-char (point-min))
       (if (save-excursion (org-goto-first-child))
          (org-sort-entries t ?s)
        (forward-line 3)
-       (insert "`♘")))))
+       (insert "`♘\n")))))
 
 (defun exco-org-finalize-buffer ()
   "Finalize text in buffer after all connections have responded."
@@ -130,8 +144,11 @@ are the requested participants."
     (let ((inhibit-read-only t))
       (goto-char (point-min))
       (end-of-line)
-      (insert "done.")
-      (org-sort-entries t ?a))))
+      (insert "done.\n")
+      (dolist (result-buffer (nreverse exco-org--temporary-buffers))
+       (insert-buffer-substring result-buffer)
+       (kill-buffer result-buffer))
+      (setq exco-org--temporary-buffers '()))))
 
 ;;;###autoload
 (defun exco-org-show-day (month day year)
diff --git a/packages/excorporate/excorporate.el 
b/packages/excorporate/excorporate.el
index ce72fcd..15c5eac 100644
--- a/packages/excorporate/excorporate.el
+++ b/packages/excorporate/excorporate.el
@@ -1,14 +1,14 @@
-;;; excorporate.el --- Exchange integration           -*- lexical-binding: t 
-*-
+;;; excorporate.el --- Exchange Web Services (EWS) integration -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2014-2018 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2019 Free Software Foundation, Inc.
 
 ;; Author: Thomas Fitzsimmons <address@hidden>
 ;; Maintainer: Thomas Fitzsimmons <address@hidden>
 ;; Created: 2014-09-19
-;; Version: 0.8.1
+;; Version: 0.8.3
 ;; Keywords: calendar
 ;; Homepage: https://www.fitzsim.org/blog/
-;; Package-Requires: ((emacs "24.1") (fsm "0.2") (soap-client "3.1.4") 
(url-http-ntlm "2.0.3") (nadvice "0.3"))
+;; Package-Requires: ((emacs "24.1") (fsm "0.2.1") (soap-client "3.1.5") 
(url-http-ntlm "2.0.4") (nadvice "0.3"))
 
 ;; This program is free software: you can redistribute it and/or modify
 ;; it under the terms of the GNU General Public License as published by
@@ -117,6 +117,8 @@
 (require 'excorporate-calendar)
 (require 'org)
 
+;; For Office 365, URLs containing autodiscover-s.outlook.com do not
+;; seem to work properly (the returned XML gives ErrorCode 600).
 (defconst exco--autodiscovery-templates
   '("https://%s/autodiscover/autodiscover.svc";
     "https://autodiscover.%s/autodiscover/autodiscover.svc";)
@@ -265,60 +267,64 @@ the FSM should transition to on success."
 (define-state-machine exco--fsm :start
   ((identifier)
    "Start an Excorporate finite state machine."
-   (if (stringp identifier)
-       (let ((domain (cadr (split-string identifier "@"))))
-        (unless (and domain (not (equal domain "")))
-          (error "Invalid domain for address %s" identifier))
-        (list :retrieving-autodiscovery-xml
-              (list
-               ;; State machine data.
-               ;; Unique finite state machine identifier.  Either mail-address
-               ;; or (mail-address . service-url).  The latter allows multiple
-               ;; state machines to operate on the same service URL.  Login
-               ;; credentials are handled separately by auth-source and url,
-               ;; so these should be the only two identifier types needed here.
-               :identifier identifier
-               ;; User data.
-               :mail-address identifier
-               ;; Error recovery data.
-               :retrying nil
-               ;; Autodiscovery data.
-               :autodiscovery-urls
-               (append (mapcar (lambda (template)
-                                 (format template domain))
-                               exco--autodiscovery-templates)
-                       ;; Handle the address@hidden =>
-                       ;; autodiscover.domain.com case reported by a
-                       ;; user.  Only try one extra level.
-                       (let ((domain-parts (split-string domain "\\.")))
-                         (when (> (length domain-parts) 2)
-                           (mapcar (lambda (template)
-                                     (format template
-                                             (mapconcat
-                                              'identity
-                                              (cdr domain-parts) ".")))
-                                   exco--autodiscovery-templates))))
-               ;; Service data.
-               :service-url nil
-               :service-xml nil
-               :service-wsdl nil
-               ;; State data.
-               :next-state-after-success nil
-               :failure-message nil
-               :server-version nil)
-              ;; No timeout.
-              nil))
-     ;; Go directly to :retrieving-service-xml, skipping autodiscovery.
-     (list :retrieving-service-xml
+   (let* ((autodiscover (stringp identifier))
+         (mail (if autodiscover identifier (car identifier)))
+         (url (unless autodiscover (cdr identifier)))
+         (autodiscovery-urls
+          (when autodiscover
+            (let ((domain (cadr (split-string mail "@"))))
+              (unless (and domain (not (equal domain "")))
+                (error "Invalid domain for address %s" mail))
+              (append (mapcar (lambda (template)
+                                (format template domain))
+                              exco--autodiscovery-templates)
+                      ;; Handle the address@hidden =>
+                      ;; autodiscover.domain.com case reported by a
+                      ;; user.  Only try one extra level.
+                      (let ((domain-parts (split-string domain "\\.")))
+                        (when (> (length domain-parts) 2)
+                          (mapcar (lambda (template)
+                                    (format template
+                                            (mapconcat
+                                             'identity
+                                             (cdr domain-parts) ".")))
+                                  exco--autodiscovery-templates)))))))
+         (service-url (unless autodiscover url))
+         (next-state (if autodiscover
+                         :retrieving-autodiscovery-xml
+                       ;; Go directly to :retrieving-service-xml,
+                       ;; skipping autodiscovery.
+                       :retrieving-service-xml)))
+     (list next-state
           (list
+           ;; State machine data.
+           ;;
+           ;; Unique finite state machine identifier, either a
+           ;; string, mail-address (which implies the URL is
+           ;; autodiscovered) or a pair of strings, (mail-address
+           ;; . service-url).  This format allows multiple state
+           ;; machines to operate on the same mail address or service
+           ;; URL.  Login credentials are handled separately by
+           ;; auth-source and url, so it should be possible for one
+           ;; Emacs process to have simultaneous Excorporate
+           ;; connections for, e.g.: ("mail-1" . "url-1") and
+           ;; ("mail-2" . "url-1") or even: "mail-1" and ("mail-1"
+           ;; . "url-2") if that's ever desirable.
            :identifier identifier
-           :mail-address (car identifier)
+           ;; User data.
+           :mail-address mail
+           ;; Error recovery data.
            :retrying nil
-           :autodiscovery-urls nil
-           ;; Use service-url field from identifier.
-           :service-url (cdr identifier)
+           ;; Autodiscovery data.
+           ;; This is nil when not doing autodiscovery.
+           :autodiscovery-urls autodiscovery-urls
+           ;; Service data.
+           ;; When doing autodiscovery this is nil, otherwise
+           ;; it is the service-url field from `identifier'.
+           :service-url service-url
            :service-xml nil
            :service-wsdl nil
+           ;; State data.
            :next-state-after-success nil
            :failure-message nil
            :server-version nil)
@@ -595,22 +601,27 @@ is subject to change."
 
 (defun exco-connect (identifier)
   "Connect or reconnect to a web service.
-IDENTIFIER is the mail address to use for autodiscovery or a
-pair (mail-address . service-url)."
-  (if (stringp identifier)
-      (message "Excorporate: Starting autodiscovery for %S"
-              identifier))
-  (let ((fsm (start-exco--fsm identifier)))
-    (unless exco--connections
-      (setq exco--connections (make-hash-table :test 'equal)))
-    (when (gethash identifier exco--connections)
-      (exco-disconnect identifier))
-    (puthash identifier fsm exco--connections)
-    (push identifier exco--connection-identifiers)
-    (if (stringp identifier)
-       (fsm-send fsm :try-next-url)
-      (fsm-send fsm :retrieve-xml))
-    nil))
+IDENTIFIER is either a string representing a mail address or a
+pair of strings, representing a mail address and a service URL.
+
+If IDENTIFIER is a mail address, `exco-connect' will use it to
+autodiscover the service URL to use.  If IDENTIFIER is a pair,
+`exco-connect' will not perform autodiscovery, but will instead
+use the `cdr' of the pair as the service URL."
+  (let ((autodiscover (stringp identifier)))
+    (when autodiscover
+      (message "Excorporate: Starting autodiscovery for %s" identifier))
+    (let ((fsm (start-exco--fsm identifier)))
+      (unless exco--connections
+       (setq exco--connections (make-hash-table :test 'equal)))
+      (when (gethash identifier exco--connections)
+       (exco-disconnect identifier))
+      (puthash identifier fsm exco--connections)
+      (push identifier exco--connection-identifiers)
+      (if autodiscover
+         (fsm-send fsm :try-next-url)
+       (fsm-send fsm :retrieve-xml))
+      nil)))
 
 (defun exco-operate (identifier name arguments callback)
   "Execute a service operation asynchronously.
@@ -885,33 +896,87 @@ callback needs to make a recursive asynchronous call."
 ;; future it could allow a list of strings and pairs.
 (defcustom excorporate-configuration nil
   "Excorporate configuration.
-The mail address to use for autodiscovery."
-  :type '(choice
-         (const
-          :tag "Prompt for Exchange mail address to use for autodiscovery" nil)
-         (string :tag "Exchange mail address to use for autodiscovery")
-         (cons :tag "Skip autodiscovery"
-               (string :tag "Exchange mail address (e.g., address@hidden)")
-               (string :tag "Exchange Web Services URL\
- (e.g., https://mail.gnu.org/ews/exchange.asmx)"))))
+
+This is the account information that Excorporate uses to connect
+to one or more Exchange servers.  No secrets are stored here.  To
+manage passwords, Excorporate will either use `auth-source' or
+prompt for them in the minibuffer.
+
+This customization variable can hold a string representing an
+Exchange email address, or a pair of strings representing an
+Exchange email address and an Exchange Web Services (EWS) URL, or
+a list of such strings and pairs of strings.
+
+Specifying just an email address implies that Excorporate should
+attempt to autodiscover the service URL for the account.
+
+Examples:
+
+\"address@hidden\"
+=> Excorporate will attempt to autodiscover the EWS URL
+
+\(\"address@hidden\" . \"https://mail.gnu.org/ews/exchange.asmx\";)
+=> Excorporate will use the provided EWS URL
+
+Other Excorporate documentation refers to the email address as
+the \"mail address\", and the EWS URL as the \"service URL\"."
+  :type
+  '(choice
+    (const
+     :tag "Prompt for Exchange account information" nil)
+    #1=(string
+       :tag "Exchange email address (autodiscover settings)")
+    #2=(cons
+       :tag "Exchange email address and EWS URL (no autodiscovery)"
+       (string :tag "Exchange mail address (e.g., address@hidden)")
+       (string :tag "EWS URL (e.g., https://mail.gnu.org/ews/exchange.asmx)"))
+    (repeat :tag "List of configurations"
+           (choice #1# #2#))))
+
+(defun exco--string-or-string-pair-p (value)
+  "Return t if VALUE is a string or a pair of strings."
+  (or (stringp value)
+      ;; A single dotted pair with neither element nil.
+      (and (consp value)
+          (not (consp (cdr value)))
+          (not (null (car value)))
+          (not (null (cdr value))))))
 
 ;;;###autoload
-(defun excorporate ()
+(defun excorporate (&optional argument)
   "Start Excorporate.
-Prompt for a mail address to use for autodiscovery, with an
-initial suggestion of `user-mail-address'.  However, if
-`excorporate-configuration' is non-nil, `excorporate' will use
-that without prompting."
-  (interactive)
+If `excorporate-configuration' is non-nil, use it without
+prompting, otherwise prompt for Exchange account information, starting
+with an email address.
+
+Prefixed with one \\[universal-argument], always prompt for
+Exchange account information for a new web service connection.
+ARGUMENT is the prefix argument."
+  (interactive "P")
   (cond
-   ((eq excorporate-configuration nil)
-    (exco-connect (completing-read "Exchange mail address: "
-                                  (list user-mail-address)
-                                  nil nil user-mail-address)))
-   ((stringp excorporate-configuration)
-    (exco-connect excorporate-configuration))
-   ((null (consp (cdr excorporate-configuration)))
+   ((or (equal argument '(4))
+       (eq excorporate-configuration nil))
+    ;; Prompt.
+    (let* ((url "https://mail.gnu.org/ews/exchange.asmx";)
+          (suggestion user-mail-address)
+          (ask-1 "Exchange mail address: ")
+          (ask-2 "Attempt settings autodiscovery ('n' for Office 365)?")
+          (ask-3 "EWS URL: ")
+          (mail (completing-read ask-1 (list suggestion) nil nil suggestion))
+          (identifier
+           (if (y-or-n-p ask-2)
+               mail
+             (cons mail(completing-read ask-3 (list url) nil nil url)))))
+      (exco-connect identifier)))
+   ((exco--string-or-string-pair-p excorporate-configuration)
+    ;; A single string or a single pair.
     (exco-connect excorporate-configuration))
+   ((consp (cdr excorporate-configuration))
+    ;; A proper list.
+    (dolist (configuration excorporate-configuration)
+      (if (exco--string-or-string-pair-p configuration)
+         (exco-connect configuration)
+       (warn "Skipping invalid configuration: %s" configuration))))
    (t
     (error "Excorporate: Invalid configuration"))))
 
diff --git a/packages/excorporate/excorporate.info 
b/packages/excorporate/excorporate.info
index 1b15e48..77fd4a5 100644
--- a/packages/excorporate/excorporate.info
+++ b/packages/excorporate/excorporate.info
@@ -1,4 +1,4 @@
-This is excorporate.info, produced by makeinfo version 6.4 from
+This is excorporate.info, produced by makeinfo version 6.5 from
 excorporate.texi.
 
 Copyright (C) 2016 Free Software Foundation, Inc.
@@ -72,29 +72,29 @@ File: excorporate.info,  Node: Configuration,  Next: Usage, 
 Prev: Installation,
 2 Configuration
 ***************
 
-Ideally you won't need to configure Excorporate at all.  On friendly
-Exchange setups, Excorporate can discover the EWS URL automatically.
+Ideally you won't need to configure Excorporate beyond providing your
+account email address.  On friendly Exchange setups, Excorporate can
+discover the EWS URL automatically.
 
-First try:
+Run:
 
    'M-x excorporate'
 
-which will prompt you for the Exchange account email address.  Follow
+which will prompt you for the Exchange account configuration.  Follow
 the prompts and if all goes well, you'll see a message in the minibuffer
-or in *Messages* saying that the connection is ready.
+or in *Messages* saying that the connection is ready.  Using the
+prompts, you can first try with autodiscovery.  If autodiscovery runs
+out of URLs to try, re-run 'excorporate', saying 'n' to the
+autodiscovery attempt, at which point you will be asked for the EWS URL.
 
-If autodiscovery runs out of URLs to try, then customize
-'excorporate-configuration':
+To save a working configuration, customize 'excorporate-configuration':
 
    'M-x customize-variable RET excorporate-configuration'
 
-From the value menu select "Skip autodiscovery".  This allows you to
-enter the Exchange account email address and the EWS URL directly.  The
-EWS URL is of the form 'https://mail.gnu.org/ews/exchange.asmx'.
-
 After saving the configuration, try 'M-x excorporate' again.
 
-If that doesn't work, *note Troubleshooting::.
+If neither autodiscovery nor specifying the EWS URL work, *note
+Troubleshooting::.
 
 
 File: excorporate.info,  Node: Usage,  Next: Troubleshooting,  Prev: 
Configuration,  Up: Top
@@ -177,23 +177,22 @@ message about having created a service.
 
 When this works, it will show a bunch of WSDL (XML) in *Messages*.
 
-Debug the above URL retrievals with (setq url-debug t), and with this
-patch:
-
-     diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el
-     index d49e527..0f1c8ae 100644
-     --- a/lisp/url/url-http.el
-     +++ b/lisp/url/url-http.el
-     @ -869,6 +869,7 @ url-http-parse-headers
-            (url-handle-content-transfer-encoding))
-          (url-http-debug "Finished parsing HTTP headers: %S" success)
-          (widen)
-     +    (url-http-debug "Response: %s" (buffer-string))
-          (goto-char (point-min))
-          success))
+Debug the above URL retrievals with 'M-:' in an 'emacs -Q' run:
 
+     (progn
+       (setq url-debug 1)
+       (url-retrieve-synchronously URL-STRING)
+       (dolist (p (seq-filter
+                   (lambda (b) (string-match " *http*" (buffer-name b)))
+                   (buffer-list)))
+         (message "HTTP result buffer: \"%s\"\n%s"
+                  (buffer-name p)
+                  (with-current-buffer p (buffer-string))))
+       "check *Messages*")
 
-(Beware that HTTP responses are out-of-order with this patch.)
+Beware that HTTP responses can be out-of-order, and that if you set
+'url-debug' to a number or 't', Emacs may hang for a while if it
+attempts to print a very large data structure.
 
 Once you're sure the above steps are working, try 'M-x excorporate'.
 
@@ -230,8 +229,8 @@ Tag Table:
 Node: Top1103
 Node: Installation2222
 Node: Configuration2485
-Node: Usage3445
-Node: Troubleshooting4863
-Node: Reporting Bugs7698
+Node: Usage3505
+Node: Troubleshooting4923
+Node: Reporting Bugs7796
 
 End Tag Table
diff --git a/packages/excorporate/excorporate.texi 
b/packages/excorporate/excorporate.texi
index 43c4943..f3451b4 100644
--- a/packages/excorporate/excorporate.texi
+++ b/packages/excorporate/excorporate.texi
@@ -79,36 +79,35 @@ Install @code{excorporate} from the GNU ELPA repository:
 @chapter Configuration
 
 @noindent
-Ideally you won't need to configure Excorporate at all.  On friendly
-Exchange setups, Excorporate can discover the EWS URL automatically.
+Ideally you won't need to configure Excorporate beyond providing your
+account email address.  On friendly Exchange setups, Excorporate can
+discover the EWS URL automatically.
 
 @noindent
-First try:
+Run:
 
 @code{M-x excorporate}
 
 @noindent
-which will prompt you for the Exchange account email address.  Follow
-the prompts and if all goes well, you'll see a message in the
-minibuffer or in *Messages* saying that the connection is ready.
+which will prompt you for the Exchange account configuration.  Follow
+the prompts and if all goes well, you'll see a message in the minibuffer
+or in *Messages* saying that the connection is ready.  Using the
+prompts, you can first try with autodiscovery.  If autodiscovery runs
+out of URLs to try, re-run @code{excorporate}, saying 'n' to the
+autodiscovery attempt, at which point you will be asked for the EWS URL.
 
 @noindent
-If autodiscovery runs out of URLs to try, then customize
+To save a working configuration, customize
 @code{excorporate-configuration}:
 
 @code{M-x customize-variable RET excorporate-configuration}
 
 @noindent
-From the value menu select ``Skip autodiscovery''.  This allows you to
-enter the Exchange account email address and the EWS URL directly.
-The EWS URL is of the form
-@code{https://mail.gnu.org/ews/exchange.asmx}.
-
-@noindent
 After saving the configuration, try @code{M-x excorporate} again.
 
 @noindent
-If that doesn't work, @pxref{Troubleshooting}.
+If neither autodiscovery nor specifying the EWS URL work,
+@pxref{Troubleshooting}.
 
 @node Usage
 @chapter Usage
@@ -202,26 +201,26 @@ message about having created a service.
 When this works, it will show a bunch of WSDL (XML) in *Messages*.
 
 @noindent
-Debug the above URL retrievals with (setq url-debug t), and with this
-patch:
+Debug the above URL retrievals with @code{M-:} in an @code{emacs -Q}
+run:
 
 @example
-diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el
-index d49e527..0f1c8ae 100644
---- a/lisp/url/url-http.el
-+++ b/lisp/url/url-http.el
-@@ -869,6 +869,7 @@ url-http-parse-headers
-       (url-handle-content-transfer-encoding))
-     (url-http-debug "Finished parsing HTTP headers: %S" success)
-     (widen)
-+    (url-http-debug "Response: %s" (buffer-string))
-     (goto-char (point-min))
-     success))
-
+(progn
+  (setq url-debug 1)
+  (url-retrieve-synchronously URL-STRING)
+  (dolist (p (seq-filter
+              (lambda (b) (string-match " *http*" (buffer-name b)))
+              (buffer-list)))
+    (message "HTTP result buffer: \"%s\"\n%s"
+             (buffer-name p)
+             (with-current-buffer p (buffer-string))))
+  "check *Messages*")
 @end example
 
 @noindent
-(Beware that HTTP responses are out-of-order with this patch.)
+Beware that HTTP responses can be out-of-order, and that if you set
+@code{url-debug} to a number or @code{t}, Emacs may hang for a while if
+it attempts to print a very large data structure.
 
 @noindent
 Once you're sure the above steps are working, try @code{M-x
diff --git a/packages/gnorb/gnorb-utils.el b/packages/gnorb/gnorb-utils.el
index cc9b7da..48af465 100644
--- a/packages/gnorb/gnorb-utils.el
+++ b/packages/gnorb/gnorb-utils.el
@@ -185,9 +185,9 @@ window."
   (let* ((sum-buffer (gnus-summary-buffer-name group))
         (target-buffer
          (cond
-          ((gnus-buffer-exists-p sum-buffer)
+          ((gnus-buffer-live-p sum-buffer)
            sum-buffer)
-          ((gnus-buffer-exists-p gnus-group-buffer)
+          ((gnus-buffer-live-p gnus-group-buffer)
            gnus-group-buffer)
           (t nil)))
         (target-window (when target-buffer
@@ -202,7 +202,7 @@ window."
       (if target-buffer
          (switch-to-buffer target-buffer)))
     (message "Following link...")
-    (if (gnus-buffer-exists-p sum-buffer)
+    (if (gnus-buffer-live-p sum-buffer)
        (gnus-summary-goto-article id nil t)
       (gnorb-open-gnus-link group id))))
 
diff --git a/packages/gnu-elpa-keyring-update/etc/gnu-elpa.gpg-keyring 
b/packages/gnu-elpa-keyring-update/etc/gnu-elpa.gpg-keyring
new file mode 100644
index 0000000..490dee4
Binary files /dev/null and 
b/packages/gnu-elpa-keyring-update/etc/gnu-elpa.gpg-keyring differ
diff --git a/packages/gnu-elpa-keyring-update/gnu-elpa-keyring-update.el 
b/packages/gnu-elpa-keyring-update/gnu-elpa-keyring-update.el
new file mode 100644
index 0000000..6485a9d
--- /dev/null
+++ b/packages/gnu-elpa-keyring-update/gnu-elpa-keyring-update.el
@@ -0,0 +1,110 @@
+;;; gnu-elpa-keyring-update.el --- Update Emacs's GPG keyring for GNU ELPA  
-*- lexical-binding: t; -*-
+
+;; Copyright (C) 2019  Free Software Foundation, Inc.
+
+;; Author: Stefan Monnier <address@hidden>
+;; Keywords: maint, tools
+;; Package-Type: multi
+;; Version: 2019.3
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This package updates the GPG keys used by the ELPA package manager
+;; (a.k.a `package.el') to verify authenticity of packages downloaded
+;; from the GNU ELPA archive.
+;;
+;; Those keys have a limited validity in time (for example, the first key was
+;; valid until Sep 2019 only), so you need to install and keep this package up
+;; to date to make sure signature verification does not spuriously fail when
+;; installing packages.
+;; 
+;; If your keys are already too old, causing signature verification errors when
+;; installing packages, then in order to install this package you can do the
+;; following:
+;;
+;; - Fetch the new key manually, e.g. with something like:
+;;
+;;       gpg --homedir ~/.emacs.d/elpa/gnupg --receive-keys 066DAFCB81E42C40
+;;
+;; - Modify the expiration date of the old key, e.g. with something like:
+;;
+;;       gpg --homedir ~/.emacs.d/elpa/gnupg \
+;;           --quick-set-expire 474F05837FBDEF9B 1y
+;;
+;; - temporarily disable signature verification (see variable
+;;   `package-check-signature').
+
+;;; Code:
+
+;;;###autoload
+(defvar gnu-elpa-keyring-update--keyring
+  ;; FIXME: Avoid using a `.gpg' extension, because it triggers a bug in
+  ;; tar-untar-buffer (which is used internally by `package.el' when installing
+  ;; the package).
+  (let ((kr (expand-file-name "etc/gnu-elpa.gpg-keyring"
+                              (file-name-directory load-file-name))))
+    (if (and load-file-name (file-readable-p kr))
+        kr
+      "etc/gnu-elpa.gpg-keyring")))
+
+(defun gnu-elpa-keyring-update--keyring (&optional noerror)
+  (if (and (file-name-absolute-p gnu-elpa-keyring-update--keyring)
+           (file-readable-p gnu-elpa-keyring-update--keyring))
+      gnu-elpa-keyring-update--keyring
+    (let ((kr (expand-file-name
+               gnu-elpa-keyring-update--keyring
+               (file-name-directory
+                (or (locate-library "gnu-elpa-keyring-update")
+                    (error
+                     "Can't find the gnu-elpa-keyring-update package"))))))
+      (if (file-readable-p kr)
+          (setq gnu-elpa-keyring-update--keyring kr)
+        (unless noerror
+          (error "Can't find the gpg-keyring file with the new keys"))))))
+
+;;;###autoload
+(defun gnu-elpa-keyring-update ()
+  "Import new GNU ELPA keys (if any) into package.el's keyring."
+  (let ((gnupghome-dir (or (bound-and-true-p package-gnupghome-dir)
+                           (expand-file-name "gnupg"
+                                             package-user-dir))))
+    (if (not (file-directory-p gnupghome-dir))
+        (error "No keyring to update!")
+      (package-import-keyring (gnu-elpa-keyring-update--keyring))
+      (write-region "" nil (expand-file-name "gnu-elpa.timestamp" 
gnupghome-dir)
+                    nil 'silent))))
+
+;;;###autoload (eval-after-load 'package
+;;;###autoload   `(and (bound-and-true-p package-user-dir)
+;;;###autoload         (file-directory-p package-user-dir)
+;;;###autoload         (let ((ts (expand-file-name
+;;;###autoload                    "gnu-elpa.timestamp"
+;;;###autoload                    (or (bound-and-true-p package-gnupghome-dir)
+;;;###autoload                        (expand-file-name "gnupg"
+;;;###autoload                                          package-user-dir))))
+;;;###autoload               (kr gnu-elpa-keyring-update--keyring))
+;;;###autoload           (and (file-writable-p ts)
+;;;###autoload                (file-readable-p kr)
+;;;###autoload                (file-newer-than-file-p kr ts)
+;;;###autoload                (gnu-elpa-keyring-update)))))
+
+(eval-when-compile
+  (condition-case err
+      (gnu-elpa-keyring-update)
+    (error (message "Skipping update: %s" (error-message-string err)))))
+
+(provide 'gnu-elpa-keyring-update)
+;;; gnu-elpa-keyring-update.el ends here
diff --git a/packages/gnus-mock/data/.newsrc.eld 
b/packages/gnus-mock/data/.newsrc.eld
index 1feefc2..43dcc61 100644
--- a/packages/gnus-mock/data/.newsrc.eld
+++ b/packages/gnus-mock/data/.newsrc.eld
@@ -6,6 +6,6 @@
 
 (setq gnus-newsrc-last-checked-date '"Tue, 01 May 2018 12:15:27 -0700")
 
-(setq gnus-newsrc-alist '(("nndraft:queue" 3 nil nil (nndraft "")) ("Welcome" 
3 ((1)) nil) ("mails" 3 nil nil) ("incoming" 3 nil nil nil) ("nndraft:drafts" 1 
nil nil (nndraft "") ((gnus-dummy (gnus-draft-mode))))))
+(setq gnus-newsrc-alist '(("nndraft:queue" 3 nil nil (nndraft "")) ("Welcome" 
3 ((1)) nil) ("mails" 3 nil nil) ("incoming" 3 nil nil nil) 
("nnml:\343\203\206\343\202\271\343\203\210" 3 (1) nil (nnml "")) 
("nndraft:drafts" 1 nil nil (nndraft "") ((gnus-dummy (gnus-draft-mode))))))
 
 (setq gnus-server-alist '(("archive" nnfolder "archive" (nnfolder-directory 
"REPLACE_ME/archive") (nnfolder-active-file "REPLACE_ME/archive/active") 
(nnfolder-get-new-mail nil) (nnfolder-inhibit-expiry t))))
diff --git a/packages/gnus-mock/data/active b/packages/gnus-mock/data/active
new file mode 100644
index 0000000..be5c767
--- /dev/null
+++ b/packages/gnus-mock/data/active
@@ -0,0 +1 @@
+テスト 1 1 y
diff --git a/packages/gnus-mock/data/gnus-mock-tests.el 
b/packages/gnus-mock/data/gnus-mock-tests.el
new file mode 100644
index 0000000..58fb796
--- /dev/null
+++ b/packages/gnus-mock/data/gnus-mock-tests.el
@@ -0,0 +1,93 @@
+;;; gnus-mock-tests.el --- Interactive tests for Gnus Mock  -*- 
lexical-binding: t; -*-
+
+;; Copyright (C) 2019  Free Software Foundation, Inc.
+
+;; Author: Eric Abrahamsen <address@hidden>
+;; Keywords: mail
+
+;; 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:
+
+;; This library provides ERT-based interactive tests for Gnus Mock.
+
+;; "Normal" tests for Gnus are part of the Emacs codebase, and are run
+;; in batch mode via the "make" script.  They test Gnus' functions and
+;; data structures, but it would be impractical/impossible for them to
+;; start up an actual Gnus instance and test its behavior.  That's
+;; what this library is for: it contains a test suite that is
+;; initiated interactively from a running Gnus Mock instance.  It's
+;; meant to ensure that actions like group sorting, thread toggling,
+;; and article moving/copying/deleting not only don't raise an error,
+;; but result in a Gnus state that _looks_ like it ought to.
+
+;; The tests can be run in two modes: "top-speed", and
+;; "stop-and-look".  The former programmatically checks that the
+;; results of various operations have produced the desired results;
+;; the latter additionally inserts `sit-for' calls between tests, so
+;; that the user can visually confirm that nothing weird has happened.
+
+;; The entry point for the "top-speed" mode is `gnus-mock-run-tests';
+;; for the "stop-and-look" mode, it's `gnus-mock-run-tests-halt'.
+
+;;; Code:
+
+(require 'ert)
+
+(defcustom gnus-mock-halt-seconds 1
+  "In `gnus-mock-run-tests-halt', halt for this many seconds."
+  :group 'gnus-mock
+  :type '(integer
+         :tag "Number of seconds to halt for"
+         :validate
+         ;; Should be a positive integer.
+         (lambda (widg)
+           (let ((val (widget-value widg)))
+             (unless (> val 0)
+               (widget-put widg :error "Must be a positive integer")
+               widg)))))
+
+(defvar gnus-mock-halt nil
+  "When non-nil, pause at key points during the testing processs.
+This gives the user a chance to confirm that everything looks the
+way it ought to.
+
+This variable shouldn't be set directly, it is let-bound inside
+`gnus-mock-run-tests-halt'.")
+
+(defsubst gnus-mock-maybe-halt ()
+  (when gnus-mock-halt
+    (sit-for gnus-mock-halt-seconds)))
+
+(defun gnus-mock-run-tests ()
+  (interactive)
+  (require 'gnus)
+  (unless (gnus-alive-p) ;; Why does this make a *Group* buffer?
+    (user-error "Start Gnus before running tests"))
+  (call-interactively #'ert))
+
+(defun gnus-mock-run-tests-halt ()
+  (interactive)
+  (let ((gnus-mock-halt t))
+    (call-interactively #'gnus-mock-run-tests)))
+
+(ert-deftest gnus-mock-test-sanity ()
+  "Sanity test."
+  (let ((g-num (hash-table-count gnus-newsrc-hashtb)))
+    (message "Hi there, you're testing.")
+    (gnus-mock-maybe-halt)
+    (message "You have %s groups" g-num)))
+
+(provide 'gnus-mock-tests)
+;;; gnus-mock-tests.el ends here
diff --git 
a/packages/gnus-mock/data/test/mails/cur/1557249518.M173117P12100Q0.slip:2, 
b/packages/gnus-mock/data/test/mails/cur/1557249518.M173117P12100Q0.slip:2,
new file mode 100644
index 0000000..6d4577d
--- /dev/null
+++ b/packages/gnus-mock/data/test/mails/cur/1557249518.M173117P12100Q0.slip:2,
@@ -0,0 +1,184 @@
+To: address@hidden
+From: Paul Eggert <address@hidden>
+Subject: Gnus mojibakifies UTF-8 text/x-patch attachments from Thunderbird
+Openpgp: preference=signencrypt
+Autocrypt: addr=address@hidden; prefer-encrypt=mutual; keydata=
+ xsFNBEyAcmQBEADAAyH2xoTu7ppG5D3a8FMZEon74dCvc4+q1XA2J2tBy2pwaTqfhpxxdGA9
+ Jj50UJ3PD4bSUEgN8tLZ0san47l5XTAFLi2456ciSl5m8sKaHlGdt9XmAAtmXqeZVIYX/UFS
+ 96fDzf4xhEmm/y7LbYEPQdUdxu47xA5KhTYp5bltF3WYDz1Ygd7gx07Auwp7iw7eNvnoDTAl
+ KAl8KYDZzbDNCQGEbpY3efZIvPdeI+FWQN4W+kghy+P6au6PrIIhYraeua7XDdb2LS1en3Ss
+ mE3QjqfRqI/A2ue8JMwsvXe/WK38Ezs6x74iTaqI3AFH6ilAhDqpMnd/msSESNFt76DiO1ZK
+ QMr9amVPknjfPmJISqdhgB1DlEdw34sROf6V8mZw0xfqT6PKE46LcFefzs0kbg4GORf8vjG2
+ Sf1tk5eU8MBiyN/bZ03bKNjNYMpODDQQwuP84kYLkX2wBxxMAhBxwbDVZudzxDZJ1C2VXujC
+ OJVxq2kljBM9ETYuUGqd75AW2LXrLw6+MuIsHFAYAgRr7+KcwDgBAfwhPBYX34nSSiHlmLC+
+ KaHLeCLF5ZI2vKm3HEeCTtlOg7xZEONgwzL+fdKo+D6SoC8RRxJKs8a3sVfI4t6CnrQzvJbB
+ n6gxdgCu5i29J1QCYrCYvql2UyFPAK+do99/1jOXT4m2836j1wARAQABzSBQYXVsIEVnZ2Vy
+ dCA8ZWdnZXJ0QGNzLnVjbGEuZWR1PsLBfgQTAQIAKAUCTIByZAIbAwUJEswDAAYLCQgHAwIG
+ FQgCCQoLBBYCAwECHgECF4AACgkQ7ZfpDmKqfjRRGw/+Ij03dhYfYl/gXVRiuzV1gGrbHk+t
+ nfrI/C7fAeoFzQ5tVgVinShaPkZo0HTPf18x6IDEdAiO8Mqo1yp0CtHmzGMCJ50o4Grgfjlr
+ 6g/+vtEOKbhleszN2XpJvpwM2QgGvn/laTLUu8PH9aRWTs7qJJZKKKAb4sxYc92FehPu6FOD
+ 0dDiyhlDAq4lOV2mdBpzQbiojoZzQLMQwjpgCTK2572eK9EOEQySUThXrSIz6ASenp4NYTFH
+ s9tuJQvXk9gZDdPSl3bp+47dGxlxEWLpBIM7zIONw4ks4azgT8nvDZxA5IZHtvqBlJLBObYY
+ 0Le61Wp0y3TlBDh2qdK8eYL426W4scEMSuig5gb8OAtQiBW6k2sGUxxeiv8ovWu8YAZgKJfu
+ oWI+uRnMEddruY8JsoM54KaKvZikkKs2bg1ndtLVzHpJ6qFZC7QVjeHUh6/BmgvdjWPZYFTt
+ N+KA9CWX3GQKKgN3uu988yznD7LnB98T4EUH1HA/GnfBqMV1gpzTvPc4qVQinCmIkEFp83zl
+ +G5fCjJJ3W7ivzCnYo4KhKLpFUm97okTKR2LW3xZzEW4cLSWO387MTK3CzDOx5qe6s4a91Zu
+ ZM/j/TQdTLDaqNn83kA4Hq48UHXYxcIh+Nd8k/3w6lFuoK0wrOFiywjLx+0ur5jmmbecBGHc
+ 1xdhAFHOwU0ETIByZAEQAKaF678T9wyH4wjTrV1Pz3cDEoSnV/0ZUrOT37p1dcGyj/IXq1x6
+ 70HRVahAmk0sZpYc25PF9D5GPYHFWlNjuPU96rDndXB3hedmBRhLdC4bAXjI4DV+bmdVe+q/
+ IMnlZRaVlm9EiMCVAR6w13sReu7qXkW9r3RwY2AzXskp/tAe4BRKr1Zmbvi2nbnQ6epEC42r
+ Rbx0B1EhjbIQZ5JHGk24iPT7LdBgnNmos5wYjzwNlkMQD5T0Ydzhk7J+UxwA5m46mOhRDC2r
+ FV/A0gm5TLy8DXjv/Esc4gYnYai6SQqnUEVh5LuV8YCJBnijs+Tiw71x1icmn6xGI45EugJO
+ gec+rLypYgpVp4x0HI5T88qBRYCkxH3Kg8Qo+EWNA9A4LRQ9DX8njona0gf0s03tocK8kBN6
+ 6UoqqPtHBnc4eMgBymCflK12eKfd2YYxnyg9cZazWA5VslvTxpm76hbg5oiAEH/Vg/8MxHyA
+ nPhfrgwyPrmJEcVBafdspJnYQxBYNco2LFPIhlOvWh8r4at+s+M3Lb26oUTczlgdW1Sf3SDA
+ 77BMRnF0FQyE+7AzV79MBN4ykiqaezQxtaF1Fy/tvkhffSo8u+dwG0EgJh+te38gTcISVr0G
+ IPplLz6YhjrbHrPRF1CN5UuL9DBGjxuN35RLNVEfta6RUFlR6NctTjvrABEBAAHCwWUEGAEC
+ AA8FAkyAcmQCGwwFCRLMAwAACgkQ7ZfpDmKqfjSrHA/+KzAKvTxRhA9MWNLxIyJ7S5uJ16gs
+ T3oCjZrBKGEhKMOGX4O0GA6VOEryO7QRCCYah3oxSG38IAnNeiwJXgU9Bzkk85UGbPEd7HGF
+ /VSeHCQwWou6jqUDTSDvn9YhNTdG0KXPM74aC+xr2Zow1O2mhXihgWKD0Dw+0LYPnUOsQ0KO
+ FxHXXYHmRrS1OZPU59BLvc+TRhIhafSHKLwbXK+6ckkxBx6h8z5ccpG0Qs4bFhdFYnFrEieD
+ LoGmnE2YLhdV6swJ9VNCS6pLiEohT3fm7aXm15tZOIyzMZhHRSAPblXxQ0ZSWjq8oRrcYNFx
+ c4W1URpAkBCOYJoXvQfD5L3lqAl8TCqDUzYxhH/tJhbDdHrqHH767jaDaTB1+Talp/2AMKwc
+ XNOdiklGxbmHVG6YGl6g8Lrbsu9NZEI4yLlHzuikthJWgz+3vZhVGyNlt+HNIoF6CjDL2omu
+ 5cEq4RDHM44QqPk6l7O0pUvN1mT4B+S1b08RKpqm/ff015E37HNV/piIvJlxGAYz8PSfuGCB
+ 1thMYqlmgdhd9/BabGFbGGYHA6U4/T5zqU+f6xHy1SsAQZ1MSKlLwekBIT+4/cLRGqCHjnV0
+ q5H/T6a7t5mPkbzSrOLSo4puj+IToNjYyYIDBWzhlA19avOa+rvUjmHtD3sFN7cXWtkGoi8b
+ uNcby4U=
+Organization: UCLA Computer Science Department
+Message-ID: <address@hidden>
+Date: Tue, 30 Apr 2019 12:20:58 -0700
+User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
+ Thunderbird/60.6.1
+MIME-Version: 1.0
+Content-Type: multipart/mixed;
+ boundary="------------774ADBE11107067D28CE4369"
+Content-Language: en-US
+
+This is a multi-part message in MIME format.
+--------------774ADBE11107067D28CE4369
+Content-Type: text/plain; charset=utf-8
+Content-Transfer-Encoding: quoted-printable
+
+Package: emacs,gnus
+Version: 27
+
+When I send email from Thunderbird with a patch attachment, Thunderbird
+puts something like the following into the email:
+
+=C2=A0 --------------AA6C74B60F40E0D600CCD03A
+=C2=A0 Content-Type: text/x-patch;
+=C2=A0=C2=A0 name=3D"0001-Fix-decode-time-encode-time-roundtrip-on-macOS.=
+patch"
+=C2=A0 Content-Transfer-Encoding: 8bit
+=C2=A0 Content-Disposition: attachment;
+=C2=A0=C2=A0 filename*0=3D"0001-Fix-decode-time-encode-time-roundtrip-on-=
+macOS.patch"
+
+=C2=A0 From 325f51c84d9ad4d9776784bd324b347ffe4fe51b Mon Sep 17 00:00:00 =
+2001
+=C2=A0 From: Paul Eggert <address@hidden>
+=C2=A0 Date: Tue, 30 Apr 2019 10:45:48 -0700
+=C2=A0 Subject: [PATCH] Fix decode-time/encode-time roundtrip on macOS
+=C2=A0 MIME-Version: 1.0
+=C2=A0 Content-Type: text/plain; charset=3DUTF-8
+=C2=A0 Content-Transfer-Encoding: 8bit
+
+=C2=A0 * src/timefns.c (Fencode_time): Ignore DST flag when the zone is
+=C2=A0 ...
+
+The attachment has a text/* media type but it has no charset parameter.
+The patch itself (output by git format-patch) says its charset is UTF-8.
+Unfortunately, Gnus doesn't recognize the patch as UTF-8 and so
+mishandles the non-ASCII characters in the attachment. To reproduce the
+problem, read this email with Gnus; the full attachment is attached to
+this email in the Thunderbird way.
+
+Although Internet RFC 2046 section 4.1.2 says the default charset for
+text/* media types is US-ASCII, Internet RFC 6557 section 3 amends this
+to say that registered text/* media types should require a charset
+specification (or should say it's not needed because the payload has
+that info, which obviously doesn't apply here). It later says that if
+there is a strong reason to have a charset default, the default should
+be UTF-8.
+
+Unfortunately Gnus apparently doesn't default to UTF-8 for such
+attachments, which means that sending a text/x-patch attachment from
+Thunderbird to Gnus messes up if the attachment contains non-ASCII
+characters. This has been causing problems on the Emacs mailing list for
+years and it bit a correspondent of mine again today; see
+<https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D35502#35>.
+
+I have filed a Thunderbird bug report for this, as Thunderbird should
+specify a charset; see
+<https://bugzilla.mozilla.org/show_bug.cgi?id=3D1167982>. However, Gnus
+should be a polite citizen and handle these attachments nicely rather
+than converting the non-ASCII UTF-8 characters to mojibake.
+
+
+--------------774ADBE11107067D28CE4369
+Content-Type: text/x-patch;
+ name="0001-Fix-decode-time-encode-time-roundtrip-on-macOS.patch"
+Content-Disposition: attachment;
+ filename*0="0001-Fix-decode-time-encode-time-roundtrip-on-macOS.patch"
+Content-Transfer-Encoding: quoted-printable
+
+From 325f51c84d9ad4d9776784bd324b347ffe4fe51b Mon Sep 17 00:00:00 2001
+From: Paul Eggert <address@hidden>
+Date: Tue, 30 Apr 2019 10:45:48 -0700
+Subject: [PATCH] Fix decode-time/encode-time roundtrip on macOS
+MIME-Version: 1.0
+Content-Type: text/plain; charset=3DUTF-8
+Content-Transfer-Encoding: 8bit
+
+* src/timefns.c (Fencode_time): Ignore DST flag when the zone is
+numeric or is a cons, as the doc string says it=E2=80=99s ignored in that
+case, and not ignoring it causes encode-time to not invert
+decode-time on some platforms (Bug#35502).
+* test/src/timefns-tests.el (encode-time-dst-numeric-zone):
+New test.
+---
+ src/timefns.c             | 5 +++--
+ test/src/timefns-tests.el | 6 ++++++
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/src/timefns.c b/src/timefns.c
+index 5005c73b7f..7b5af6a5d2 100644
+--- a/src/timefns.c
++++ b/src/timefns.c
+@@ -1488,10 +1488,11 @@ usage: (encode-time &optional TIME FORM &rest OBS=
+OLESCENT-ARGUMENTS)  */)
+       tm.tm_mon  =3D check_tm_member (XCAR (a), 1); a =3D XCDR (a);
+       tm.tm_year =3D check_tm_member (XCAR (a), TM_YEAR_BASE); a =3D XCD=
+R (a);
+       a =3D XCDR (a);
+-      if (SYMBOLP (XCAR (a)))
+-      tm.tm_isdst =3D !NILP (XCAR (a));
++      Lisp_Object dstflag =3D XCAR (a);
+       a =3D XCDR (a);
+       zone =3D XCAR (a);
++      if (SYMBOLP (dstflag) && !FIXNUMP (zone) && !CONSP (zone))
++      tm.tm_isdst =3D !NILP (dstflag);
+     }
+   else if (nargs < 6)
+     xsignal2 (Qwrong_number_of_arguments, Qencode_time, make_fixnum (nar=
+gs));
+diff --git a/test/src/timefns-tests.el b/test/src/timefns-tests.el
+index 5c858ef3bd..2c90af757f 100644
+--- a/test/src/timefns-tests.el
++++ b/test/src/timefns-tests.el
+@@ -142,3 +142,9 @@ timefns-tests--have-leap-seconds
+                     (< 0.99 (/ x y) 1.01)
+                     (< 0.99 (/ (- (float-time a)) (float-time b))
+                        1.01))))))))
++
++(ert-deftest encode-time-dst-numeric-zone ()
++    "Check for Bug#35502."
++    (should (time-equal-p
++             (encode-time '(29 31 17 30 4 2019 2 t 7200))
++             '(23752 27217))))
+--=20
+2.20.1
+
+
+--------------774ADBE11107067D28CE4369--
diff --git 
"a/packages/gnus-mock/data/\343\203\206\343\202\271\343\203\210/.overview" 
"b/packages/gnus-mock/data/\343\203\206\343\202\271\343\203\210/.overview"
new file mode 100644
index 0000000..189eab8
--- /dev/null
+++ "b/packages/gnus-mock/data/\343\203\206\343\202\271\343\203\210/.overview"
@@ -0,0 +1 @@
+1      Re: Changes in emacs.el Michael Heerdegen <address@hidden>      Thu, 01 
Nov 2012 20:40:42 +0100 <address@hidden>        <address@hidden> 
<address@hidden> <address@hidden>      1855    51      Xref: slip テスト:1        
Cc: address@hidden      To: address@hidden      
diff --git "a/packages/gnus-mock/data/\343\203\206\343\202\271\343\203\210/1" 
"b/packages/gnus-mock/data/\343\203\206\343\202\271\343\203\210/1"
new file mode 100644
index 0000000..5a957e1
--- /dev/null
+++ "b/packages/gnus-mock/data/\343\203\206\343\202\271\343\203\210/1"
@@ -0,0 +1,108 @@
+X-From-Line: MAILER-DAEMON Thu Nov 01 15:40:25 2012
+Received: from list by lists.gnu.org with archive (Exim 4.71)
+       id 1TU0cr-0004nw-OT
+       for address@hidden; Thu, 01 Nov 2012 15:40:25 -0400
+Received: from eggs.gnu.org ([208.118.235.92]:33026)
+       by lists.gnu.org with esmtp (Exim 4.71)
+       (envelope-from <address@hidden>) id 1TU0cp-0004mq-BO
+       for address@hidden; Thu, 01 Nov 2012 15:40:24 -0400
+Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)
+       (envelope-from <address@hidden>) id 1TU0cm-0000XJ-Pz
+       for address@hidden; Thu, 01 Nov 2012 15:40:22 -0400
+Received: from mout.web.de ([212.227.15.3]:51276)
+       by eggs.gnu.org with esmtp (Exim 4.71)
+       (envelope-from <address@hidden>) id 1TU0cm-0000X5-GO
+       for address@hidden; Thu, 01 Nov 2012 15:40:20 -0400
+Received: from drachen.dragon ([89.204.130.4]) by smtp.web.de (mrweb001) with
+       ESMTPSA (Nemesis) id 0LfzgJ-1T11nG2TQB-00pTDm;
+       Thu, 01 Nov 2012 20:40:18 +0100
+From: Michael Heerdegen <address@hidden>
+To: address@hidden
+Subject: Re: Changes in emacs.el
+References: <address@hidden>
+       <address@hidden>
+       <address@hidden>
+Mail-Followup-To: address@hidden, address@hidden
+Date: Thu, 01 Nov 2012 20:40:42 +0100
+In-Reply-To: <address@hidden> (Cecil Westerhof's message of
+       "Wed, 31 Oct 2012 18:16:32 +0100")
+Message-ID: <address@hidden>
+User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.2.50 (gnu/linux)
+MIME-Version: 1.0
+Content-Type: text/plain
+X-Provags-ID: V02:K0:T/BBsqi86c+433tvzHjerevn47TSY59o7vUE3Y1STwK
+       PQB49yCbEFUL0YO0GFjRkT68iC40u+//44L7yYrMK/1N+0IaAN
+       DDSAgR9vsCGLT5OhXnaUK6gpAuiILpE9J8cGyHe282txZF+0B0
+       UMvvyzTJAk+GWmvhV5a1Rk/upFSpyvPR/K/vFR7chk543DBTDl
+       zbFo8dbhYjhJnblEKcIvVGX2a3KYmigzUS6RsmyLgs=
+X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic]
+X-Received-From: 212.227.15.3
+Cc: address@hidden
+X-BeenThere: address@hidden
+X-Mailman-Version: 2.1.14
+Precedence: list
+List-Id: "Announcements and discussions for GNUS,
+       the GNU Emacs Usenet newsreader \(in English\)"
+       <info-gnus-english.gnu.org>
+List-Unsubscribe: <https://lists.gnu.org/mailman/options/info-gnus-english>,
+       <mailto:address@hidden?subject=unsubscribe>
+List-Archive: <http://lists.gnu.org/archive/html/info-gnus-english>
+List-Post: <mailto:address@hidden>
+List-Help: <mailto:address@hidden?subject=help>
+List-Subscribe: <https://lists.gnu.org/mailman/listinfo/info-gnus-english>,
+       <mailto:address@hidden?subject=subscribe>
+X-List-Received-Date: Thu, 01 Nov 2012 19:40:24 -0000
+Lines: 51
+Xref: slip テスト:1
+
+Cecil Westerhof <address@hidden> writes:
+
+> I now added:
+>     (setq custom-file "~/.emacs.d/.emacs-custom.el")
+>     (load custom-file t nil t t)
+>
+> There is only one problem:
+>     ;; Your init file should contain only one such instance.
+>
+> Now there will be two. I will see if this is going to give problems.
+
+If you have a separate custom file, your init file can contain as much
+`custom-set-variables' or `custom-set-faces' as you want, AFAIK.  The
+limitation only exists so that Emacs can automatically edit it and can
+be sure it doesn't miss anything.  If you have a separate custom file,
+you can do what you want in your init file, because it's then not
+subject to automatic editing.
+
+Of course, it would be better style to avoid `custom-set-variables' in
+your init file and use standard Elisp instead (I mean `setq',
+`setq-default' etc.).
+
+> Also: why does Emacs do this? I never do anything with custom.
+
+I know that some code in vanilla Emacs or third party packages use the
+customization file for storing settings.  You need not use the
+customization interface for this to happen.  It is arguable if this is
+always necessary, but I can live with it.
+
+In your case, this was the apparently the cause:
+
+  Gnus supports Cancel Locks in News.
+ 
+  This means a header `Cancel-Lock' is inserted in news
+  posting.  It is used to determine if you wrote an article or
+  not (for canceling and superseding).  Gnus generates a random
+  password string the first time you post a message, and saves
+  it in your `~/.emacs' using the Custom system.  While the
+  variable is called `canlock-password', it is not security
+  sensitive data.  Publishing your canlock string on the web
+  will not allow anyone to be able to anything she could not
+  already do.  The behavior can be changed by customizing
+  `message-insert-canlock'.
+
+
+
+Regards,
+
+Michael.
+
+
diff --git a/packages/gnus-mock/gnus-mock.el b/packages/gnus-mock/gnus-mock.el
index 968bed2..dd4ed07 100644
--- a/packages/gnus-mock/gnus-mock.el
+++ b/packages/gnus-mock/gnus-mock.el
@@ -1,11 +1,11 @@
 ;;; gnus-mock.el --- Mock Gnus installation for testing  -*- lexical-binding: 
t; -*-
 
-;; Copyright (C) 2018  Free Software Foundation, Inc.
+;; Copyright (C) 2018-2019  Free Software Foundation, Inc.
 
 ;; Author: Eric Abrahamsen <address@hidden>
 ;; Maintainer: Eric Abrahamsen <address@hidden>
 ;; Package-Type: multi
-;; Version: 0.4.0
+;; Version: 0.4.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
@@ -76,7 +76,6 @@
   "Path to an additional Gnus config file for mock Gnus.
 The contents of this file will be appended to gnus-mock's Gnus
 init file, which will be loaded when Gnus is started."
-  :group 'gnus-mock
   :type 'file)
 
 (defcustom gnus-mock-init-file nil
@@ -84,24 +83,20 @@ init file, which will be loaded when Gnus is started."
 The contents of this file will be appended to gnus-mock's init
 file, which will be loaded when the child Emacs process is
 started."
-  :group 'gnus-mock
   :type 'file)
 
 (defcustom gnus-mock-emacs-program "emacs"
   "Name of the Emacs executable to use for the mock session."
-  :group 'gnus-mock
   :type 'string)
 
 (defcustom gnus-mock-cleanup-p t
   "When non-nil, delete temporary files after shutdown.
 Each Gnus mock session will create a unique temporary directory,
 so multiple sessions will not conflict if this option is nil."
-  :group 'gnus-mock
   :type 'boolean)
 
 (defcustom gnus-mock-use-images t
   "When non-nil, use some cute Gnus-mock-specific images."
-  :group 'gnus-mock
   :type 'boolean)
 
 (defcustom gnus-mock-sendmail-program
@@ -110,7 +105,6 @@ so multiple sessions will not conflict if this option is 
nil."
        "windows-sendmail-wrapper.cmd"
       "fakesendmail.py"))
   "Program used as the value of `sendmail-program'."
-  :group 'gnus-mock
   :type 'string)
 
 (defcustom gnus-mock-dovecot-imap-program nil
@@ -122,7 +116,6 @@ dovecot.  This executable isn't on the PATH, but often 
lives at
 
 If nil, no nnimap server will be added to the Gnus mock
 installation."
-  :group 'gnus-mock
   :type 'string)
 
 (defconst gnus-mock-data-dir
@@ -165,7 +158,13 @@ will start a mock Gnus session."
              ;; Constant that can be checked if we need to know it's a mock
              ;; session.
              (prin1 '(defconst gnus-mock-p t))
-             (princ "\n")
+             (princ "\n\n")
+             ;; Load our interactive testing file.  Does package.el
+             ;; compile these files by default?
+             (prin1 `(require
+                      'gnus-mock-tests
+                      ,(expand-file-name "gnus-mock-tests" mock-tmp-dir)))
+             (princ "\n\n")
              ;; Constant for use in `gnus-mock-reload', which is defined in
              ;; the .gnus.el startup file.
              (prin1 `(defconst gnus-mock-data-dir ,gnus-mock-data-dir))
@@ -184,7 +183,7 @@ will start a mock Gnus session."
           gnus-mock-data-dir
           (file-name-as-directory mock-tmp-dir) nil nil t)
          ;; Git doesn't let us commit empty directories, so create our
-         ;; necessary empty maildir bits.
+         ;; necessary empty maildir bits, and draft directories.
          (mapc (lambda (path) (make-directory path t))
                (mapcar (lambda (dir)
                          (format "%s/test/%s" mock-tmp-dir dir))
@@ -192,6 +191,8 @@ will start a mock Gnus session."
                          "incoming/tmp" "incoming/new" "incoming/cur"
                          "incoming/.nnmaildir/marks" "incoming/.nnmaildir/nov"
                          "mails/tmp" "mails/new" "mails/.nnmaildir/marks")))
+         (make-directory (format "%s/drafts/drafts" mock-tmp-dir) t)
+         (make-directory (format "%s/drafts/queue" mock-tmp-dir))
          ;; Possibly insert additional config.
          (when gnus-mock-init-file
            (with-temp-buffer
diff --git a/packages/ivy/.dir-locals.el b/packages/ivy/.dir-locals.el
index acba84e..3d5e818 100644
--- a/packages/ivy/.dir-locals.el
+++ b/packages/ivy/.dir-locals.el
@@ -1,6 +1,14 @@
 ;;; Directory Local Variables
 ;;; For more information see (info "(emacs) Directory Variables")
 
-((emacs-lisp-mode
+((nil
+  (bug-reference-bug-regexp . "#\\(?2:[[:digit:]]+\\)")
+  (bug-reference-url-format . "https://github.com/abo-abo/swiper/issues/%s";)
+  (copyright-names-regexp . "Free Software Foundation, Inc\\.")
+  (sentence-end-double-space . t))
+ (emacs-lisp-mode
   (indent-tabs-mode . nil)
-  (outline-regexp . ";;\\([;*]+ [^\s\t\n]\\|###autoload\\)\\|(")))
+  (outline-regexp . ";;[;*]+[\s\t]+")
+  ;; extra config here: 
https://github.com/abo-abo/oremacs/blob/github/modes/ora-elisp-style-guide.el
+  ;; (lisp-indent-function . common-lisp-indent-function)
+  ))
diff --git a/packages/ivy/.gitignore b/packages/ivy/.gitignore
new file mode 100644
index 0000000..a2fa335
--- /dev/null
+++ b/packages/ivy/.gitignore
@@ -0,0 +1,6 @@
+*.elc
+*~
+/doc/dir
+*.info
+*-autoloads.el
+.dir-locals-2.el
diff --git a/packages/ivy/CONTRIBUTING.org b/packages/ivy/CONTRIBUTING.org
index 9a7a823..8d30208 100644
--- a/packages/ivy/CONTRIBUTING.org
+++ b/packages/ivy/CONTRIBUTING.org
@@ -2,14 +2,14 @@
 
 Before reporting a bug, please take a look at:
 - the [[https://github.com/abo-abo/swiper/blob/master/README.md][FAQ]]
-- the [[http://oremacs.com/swiper/][manual]]
+- the [[https://oremacs.com/swiper/][manual]]
 - the [[https://github.com/abo-abo/swiper/wiki][wiki]]
 - the [[https://github.com/abo-abo/swiper/issues][open issues]]
 
-To understand what's going on, we need a reproducible bug scenario. It
-is important that we can rule out interference with other Emacs
-packages or customizations, therefore use =emacs -Q= to bypass your init
-file.
+To understand what's going on, we need a reproducible bug scenario.
+It is important that we can rule out interference with other Emacs
+packages or customizations, therefore use =emacs -Q= to bypass your
+init file.
 
 This shortcut will start =emacs -Q= for you with =ivy-mode= already
 loaded:
@@ -20,32 +20,53 @@ make plain
 #+end_src
 
 * Contributing code
-The basic code style guide is to use:
+Here are the important settings for code style:
 #+begin_src elisp
 (setq indent-tabs-mode nil)
+(require 'cl-indent)
+(setq lisp-indent-function #'common-lisp-indent-function)
+(put 'if 'common-lisp-indent-function 2)
+(put 'defface 'common-lisp-indent-function 1)
+(put 'defalias 'common-lisp-indent-function 1)
+(put 'define-minor-mode 'common-lisp-indent-function 1)
+(put 'define-derived-mode 'common-lisp-indent-function 3)
+(put 'cl-flet 'common-lisp-indent-function
+     (get 'flet 'common-lisp-indent-function))
+(put 'cl-labels 'common-lisp-indent-function
+     (get 'labels 'common-lisp-indent-function))
+#+end_src
+
+The setting for =indent-tabs-mode= is automatically applied by
+=.dir-locals.el=.  Emacs produces a warning when setting
+=lisp-indent-function= in =.dir-locals.el=, so that line is commented
+out.  Please uncomment it and add the following code to disable the
+warning:
+
+#+begin_src elisp
+(add-to-list 'safe-local-variable-values
+             '(lisp-indent-function . common-lisp-indent-function))
 #+end_src
-It is provided for you in 
[[https://github.com/abo-abo/swiper/blob/master/.dir-locals.el][.dir-locals.el]],
 please obey it.
 
 Before submitting a change, run:
 - =make compile= - check for new compilation warnings
 - =make test= - check for failing tests
-- =make checkdock= - check documentation guidelines
+- =make checkdoc= - check documentation guidelines
 
 Use your own judgment for the commit messages, I recommend a verbose
 style using =magit-commit-add-log=.
 
 * Copyright Assignment
-These packages are subject to the same 
[[http://www.gnu.org/prep/maintain/html_node/Copyright-Papers.html][Copyright 
Assignment]] policy as
-Emacs itself, org-mode, CEDET and other packages in 
[[http://elpa.gnu.org/packages/][GNU ELPA]].
+These packages are subject to the same 
[[https://www.gnu.org/prep/maintain/html_node/Copyright-Papers.html][Copyright 
Assignment]] policy as
+Emacs itself, org-mode, CEDET and other packages in 
[[https://elpa.gnu.org/packages/][GNU ELPA]].
 
-Any 
[[http://www.gnu.org/prep/maintain/html_node/Legally-Significant.html#Legally-Significant][legally
 significant]] contributions can only be accepted after the
-author has completed their paperwork. Please see 
[[http://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/Copyright/request-assign.future][the
 request form]] if
+Any 
[[https://www.gnu.org/prep/maintain/html_node/Legally-Significant.html#Legally-Significant][legally
 significant]] contributions can only be accepted after the
+author has completed their paperwork.  Please see 
[[https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/Copyright/request-assign.future][the
 request form]] if
 you want to proceed with the assignment.
 
 The copyright assignment isn't a big deal, it just says that the
-copyright for your submitted changes to Emacs belongs to the FSF. This
-assignment works for all projects related to Emacs. To obtain it you
-need to:
+copyright for your submitted changes to Emacs belongs to the FSF.
+This assignment works for all projects related to Emacs.  To obtain it
+you need to:
 - send one email
 - then send one letter (if you live in the US, it's digital)
 - wait for some time (in my case, I had to wait for one month; but
diff --git a/packages/ivy/README.md b/packages/ivy/README.md
index 9c296ca..43d4ce5 100644
--- a/packages/ivy/README.md
+++ b/packages/ivy/README.md
@@ -13,7 +13,8 @@ commands.
 
 # Ivy
 
-[![MELPA](http://melpa.org/packages/ivy-badge.svg)](http://melpa.org/#/ivy)
+[![MELPA](https://melpa.org/packages/ivy-badge.svg)](https://melpa.org/#/ivy)
+[![MELPA 
Stable](https://stable.melpa.org/packages/ivy-badge.svg)](https://stable.melpa.org/#/ivy)
 
 Ivy is a generic completion mechanism for Emacs. While it operates
 similarly to other completion schemes such as `icomplete-mode`, Ivy
@@ -28,10 +29,14 @@ buffer names.
 
 Install the `ivy` package from MELPA / GNU ELPA.
 
+Users of Debian ≥10 (and derivatives such as Ubuntu ≥18.04) can
+install Ivy, Counsel, and Swiper with `sudo apt install elpa-counsel`.
+To add Hydra support `sudo apt install elpa-ivy-hydra`.
+
 ## Documentation
 
 ### Manual
-The manual is available as [HTML](http://oremacs.com/swiper/).
+The manual is available as [HTML](https://oremacs.com/swiper/).
 
 After installing from MELPA, the manual is also available through the `(ivy)` 
Info node.
 
@@ -42,6 +47,7 @@ The source file for the Info page is
 Ivy and Swiper wiki is here: [the 
wiki](https://github.com/abo-abo/swiper/wiki).
 
 ### Small config example
+
 ```elisp
 (ivy-mode 1)
 (setq ivy-use-virtual-buffers t)
@@ -64,8 +70,13 @@ Ivy and Swiper wiki is here: [the 
wiki](https://github.com/abo-abo/swiper/wiki).
 (define-key minibuffer-local-map (kbd "C-r") 'counsel-minibuffer-history)
 ```
 
+Note: parts of this config can be replaced by using `counsel-mode`.
+
 # Counsel
 
+[![MELPA](https://melpa.org/packages/counsel-badge.svg)](https://melpa.org/#/counsel)
+[![MELPA 
Stable](https://stable.melpa.org/packages/counsel-badge.svg)](https://stable.melpa.org/#/counsel)
+
 `ivy-mode` ensures that any Emacs command using
 `completing-read-function` uses ivy for completion.
 
@@ -74,21 +85,44 @@ commands that are customised to make the best use of ivy. 
For example,
 `counsel-find-file` has some additional keybindings. Pressing
 <kbd>DEL</kbd> will move you to the parent directory.
 
+Enabling `counsel-mode` remaps built-in Emacs functions that have
+counsel replacements:
+
+| Emacs command            | Counsel equivalent         |
+|--------------------------|----------------------------|
+| execute-extended-command | counsel-M-x                |
+| describe-bindings        | counsel-descbinds          |
+| describe-function        | counsel-describe-function  |
+| describe-variable        | counsel-describe-variable  |
+| apropos-command          | counsel-apropos            |
+| describe-face            | counsel-describe-face      |
+| list-faces-display       | counsel-faces              |
+| find-file                | counsel-find-file          |
+| find-library             | counsel-find-library       |
+| imenu                    | counsel-imenu              |
+| load-library             | counsel-load-library       |
+| load-theme               | counsel-load-theme         |
+| yank-pop                 | counsel-yank-pop           |
+| info-lookup-symbol       | counsel-info-lookup-symbol |
+| pop-to-mark-command      | counsel-mark-ring          |
+| bookmark-jump            | counsel-bookmark           |
+
 # Swiper
 
 
[![MELPA](https://melpa.org/packages/swiper-badge.svg)](https://melpa.org/#/swiper)
+[![MELPA 
Stable](https://stable.melpa.org/packages/swiper-badge.svg)](https://stable.melpa.org/#/swiper)
 
 Swiper is an alternative to isearch that uses ivy to show an overview
 of all matches.
 
-![swiper.png](http://oremacs.com/download/swiper.png)
+![swiper.png](https://oremacs.com/download/swiper.png)
 
 A helm version of swiper is also available:
 [swiper-helm](https://github.com/abo-abo/swiper-helm).
 
 ## Screenshots
 
-![ivy-swiper-1.png](http://oremacs.com/download/ivy-swiper-1.png)
+![ivy-swiper-1.png](https://oremacs.com/download/ivy-swiper-1.png)
 
 There's also a ten minute [video 
demo](https://www.youtube.com/watch?v=VvnJQpTFVDc).
 
diff --git a/packages/ivy/colir.el b/packages/ivy/colir.el
index 210ec8f..9e61273 100644
--- a/packages/ivy/colir.el
+++ b/packages/ivy/colir.el
@@ -1,6 +1,6 @@
 ;;; colir.el --- Color blending library -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2017  Free Software Foundation, Inc.
+;; Copyright (C) 2015-2019  Free Software Foundation, Inc.
 
 ;; Author: Oleh Krehel <address@hidden>
 
@@ -17,28 +17,30 @@
 ;; GNU General Public License for more details.
 
 ;; For a full copy of the GNU General Public License
-;; see <http://www.gnu.org/licenses/>.
+;; see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
-;;
+
 ;; This package solves the problem of adding a face with a background
 ;; to text which may already have a background.  In all conflicting
 ;; areas, instead of choosing either the original or the new
 ;; background face, their blended sum is used.
 ;;
-;; The blend mode functions are taken from 
http://en.wikipedia.org/wiki/Blend_modes.
+;; The blend mode functions are taken from URL
+;; `https://en.wikipedia.org/wiki/Blend_modes'.
 
 ;;; Code:
 
+(require 'cl-lib)
 (require 'color)
 
-(defcustom colir-compose-method 'colir-compose-alpha
+(defcustom colir-compose-method #'colir-compose-alpha
   "Select a method to compose two color channels."
-  :type '(choice
-          (const colir-compose-alpha)
-          (const colir-compose-overlay)
-          (const colir-compose-soft-light))
-  :group 'ivy)
+  :group 'ivy
+  :type '(radio
+          (function-item colir-compose-alpha)
+          (function-item colir-compose-overlay)
+          (function-item colir-compose-soft-light)))
 
 (defun colir-compose-soft-light (a b)
   "Compose A and B channels."
@@ -81,32 +83,40 @@ C1 and C2 are triples of floats in [0.0 1.0] range."
     ;; from available color palette).
     (color-name-to-rgb color)))
 
+(defun colir--blend-background (start next prevn face object)
+  (let ((background-prev (face-background prevn)))
+    (progn
+      (put-text-property
+       start next 'face
+       (if background-prev
+           (cons `(background-color
+                   . ,(colir-blend
+                       (colir-color-parse background-prev)
+                       (colir-color-parse (face-background face nil t))))
+                 prevn)
+         (list face prevn))
+       object))))
+
 (defun colir-blend-face-background (start end face &optional object)
   "Append to the face property of the text from START to END the face FACE.
 When the text already has a face with a non-plain background,
 blend it with the background of FACE.
 Optional argument OBJECT is the string or buffer containing the text.
 See also `font-lock-append-text-property'."
-  (let (next prev)
+  (let (next prev prevn)
     (while (/= start end)
       (setq next (next-single-property-change start 'face object end))
       (setq prev (get-text-property start 'face object))
-      (when (listp prev)
-        (setq prev (cl-find-if #'atom prev)))
-      (if (facep prev)
-          (let ((background-prev (face-background prev)))
-            (progn
-              (put-text-property
-               start next 'face
-               (if background-prev
-                   (cons `(background-color
-                           . ,(colir-blend
-                               (colir-color-parse background-prev)
-                               (colir-color-parse (face-background face nil 
t))))
-                         prev)
-                 (list face prev))
-               object)))
-        (put-text-property start next 'face face object))
+      (setq prevn (if (listp prev)
+                      (cl-find-if #'atom prev)
+                    prev))
+      (cond
+        ((or (keywordp (car-safe prev)) (consp (car-safe prev)))
+         (put-text-property start next 'face (cons face prev) object))
+        ((facep prevn)
+         (colir--blend-background start next prevn face object))
+        (t
+         (put-text-property start next 'face face object)))
       (setq start next))))
 
 (provide 'colir)
diff --git a/packages/ivy/counsel.el b/packages/ivy/counsel.el
index af91d4d..97423ec 100644
--- a/packages/ivy/counsel.el
+++ b/packages/ivy/counsel.el
@@ -1,12 +1,12 @@
 ;;; counsel.el --- Various completion functions using Ivy -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2015-2017  Free Software Foundation, Inc.
+;; Copyright (C) 2015-2019  Free Software Foundation, Inc.
 
 ;; Author: Oleh Krehel <address@hidden>
 ;; URL: https://github.com/abo-abo/swiper
-;; Version: 0.10.0
-;; Package-Requires: ((emacs "24.3") (swiper "0.9.0"))
-;; Keywords: completion, matching
+;; Version: 0.11.0
+;; Package-Requires: ((emacs "24.3") (swiper "0.11.0"))
+;; Keywords: convenience, matching, tools
 
 ;; This file is part of GNU Emacs.
 
@@ -21,68 +21,74 @@
 ;; GNU General Public License for more details.
 
 ;; For a full copy of the GNU General Public License
-;; see <http://www.gnu.org/licenses/>.
+;; see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
-;;
+
 ;; Just call one of the interactive functions in this file to complete
 ;; the corresponding thing using `ivy'.
 ;;
 ;; Currently available:
-;; - Symbol completion for Elisp, Common Lisp, Python and Clojure.
+;; - Symbol completion for Elisp, Common Lisp, Python, Clojure, C, C++.
 ;; - Describe fuctions for Elisp: function, variable, library, command,
 ;;   bindings, theme.
-;; - Navigation functions: imenu, ace-line, semantic, outline
-;; - Git utilities: git-files, git-grep, git-log, git-stash.
-;; - Grep utitilies: grep, ag, pt, recoll.
+;; - Navigation functions: imenu, ace-line, semantic, outline.
+;; - Git utilities: git-files, git-grep, git-log, git-stash, git-checkout.
+;; - Grep utitilies: grep, ag, pt, recoll, ack, rg.
 ;; - System utilities: process list, rhythmbox, linux-app.
 ;; - Many more.
 
 ;;; Code:
 
 (require 'swiper)
-(require 'etags)
-(require 'esh-util)
 (require 'compile)
 (require 'dired)
 
+(defgroup counsel nil
+  "Completion functions using Ivy."
+  :group 'matching
+  :prefix "counsel-")
+
 ;;* Utility
-(defun counsel-more-chars (n)
-  "Return two fake candidates prompting for at least N input."
-  (list ""
-        (format "%d chars more" (- n (length ivy-text)))))
-
-(defun counsel-unquote-regex-parens (str)
-  "Unquote regex parenthesis in STR."
-  (if (consp str)
+(define-obsolete-variable-alias 'counsel-more-chars-alist 
'ivy-more-chars-alist "0.10.0")
+
+(define-obsolete-function-alias 'counsel-more-chars 'ivy-more-chars "0.10.0")
+
+(defun counsel--elisp-to-pcre (regex)
+  "Convert REGEX from Elisp format to PCRE format, on best-effort basis.
+REGEX may be of any format returned by an Ivy regex function,
+namely a string or a list.  The return value is always a string.
+
+Note that incorrect results may be returned for sufficiently
+complex regexes."
+  (if (consp regex)
       (mapconcat
-       #'car
-       (cl-remove-if-not #'cdr str)
+       (lambda (pair)
+         (let ((subexp (counsel--elisp-to-pcre (car pair))))
+           (if (string-match-p "|" subexp)
+               (format "(?:%s)" subexp)
+             subexp)))
+       (cl-remove-if-not #'cdr regex)
        ".*")
-    (let ((start 0)
-          ms)
-      (while (setq start (string-match "\\\\)\\|\\\\(\\|[()]" str start))
-        (setq ms (match-string-no-properties 0 str))
-        (cond ((equal ms "\\(")
-               (setq str (replace-match "(" nil t str))
-               (setq start (+ start 1)))
-              ((equal ms "\\)")
-               (setq str (replace-match ")" nil t str))
-               (setq start (+ start 1)))
-              ((equal ms "(")
-               (setq str (replace-match "\\(" nil t str))
-               (setq start (+ start 2)))
-              ((equal ms ")")
-               (setq str (replace-match "\\)" nil t str))
-               (setq start (+ start 2)))
-              (t
-               (error "Unexpected"))))
-      str)))
-
-(defun counsel-directory-parent (dir)
-  "Return the directory parent of directory DIR."
-  (concat (file-name-nondirectory
-           (directory-file-name dir)) "/"))
+    (replace-regexp-in-string
+     "\\\\[(){}|]\\|[()]"
+     (lambda (s)
+       (or (cdr (assoc s '(("\\(" . "(")
+                           ("\\)" . ")")
+                           ("(" . "\\(")
+                           (")" . "\\)")
+                           ("\\{" . "{")
+                           ("\\}" . "}")
+                           ("\\|" . "|"))))
+           (error
+            "Unexpected error in `counsel--elisp-to-pcre' (got match %S)" s)))
+     regex t t)))
+
+(defun counsel-directory-name (dir)
+  "Return the name of directory DIR with a slash."
+  (file-name-as-directory
+   (file-name-nondirectory
+    (directory-file-name dir))))
 
 (defun counsel-string-compose (prefix str)
   "Make PREFIX the display prefix of STR through text properties."
@@ -100,6 +106,23 @@
            (executable-find program))
       (user-error "Required program \"%s\" not found in your path" program)))
 
+(defun counsel-prompt-function-default ()
+  "Return prompt appended with a semicolon."
+  (declare (obsolete ivy-set-prompt "0.10.0"))
+  (ivy-add-prompt-count (concat (ivy-state-prompt ivy-last) ": ")))
+
+(declare-function eshell-split-path "esh-util")
+
+(defun counsel-prompt-function-dir ()
+  "Return prompt appended with the parent directory."
+  (require 'esh-util)
+  (let* ((dir (ivy-state-directory ivy-last))
+         (parts (nthcdr 3 (eshell-split-path dir)))
+         (dir (format " [%s]: " (if parts (apply #'concat "..." parts) dir))))
+    (ivy-add-prompt-count
+     (replace-regexp-in-string          ; Insert dir before any trailing colon.
+      "\\(?:: ?\\)?\\'" dir (ivy-state-prompt ivy-last) t t))))
+
 ;;* Async Utility
 (defvar counsel--async-time nil
   "Store the time when a new process was started.
@@ -113,101 +136,87 @@ Or the time of the last minibuffer update.")
   "Store the time a process takes to gather all its candidates.
 The time is measured in seconds.")
 
-(defvar counsel--async-exit-code-plist nil
-  "Associates exit codes with reasons.")
+(defvar counsel--async-exit-code-plist ()
+  "Associate commands with their exit code descriptions.
+This plist maps commands to a plist mapping their exit codes to
+descriptions.")
 
 (defun counsel-set-async-exit-code (cmd number str)
   "For CMD, associate NUMBER exit code with STR."
   (let ((plist (plist-get counsel--async-exit-code-plist cmd)))
     (setq counsel--async-exit-code-plist
-          (plist-put
-           counsel--async-exit-code-plist
-           cmd
-           (plist-put plist number str)))))
+          (plist-put counsel--async-exit-code-plist
+                     cmd
+                     (plist-put plist number str)))))
 
 (defvar counsel-async-split-string-re "\n"
   "Store the regexp for splitting shell command output.")
 
 (defvar counsel-async-ignore-re nil
-  "Candidates matched the regexp will be ignored by `counsel--async-command'.")
-
-(defun counsel--async-command (cmd &optional process-sentinel process-filter)
-  "Start new counsel process by calling CMD.
-If a counsel process is already running, kill it and its associated buffer
-before starting a new one.  If non-nil, use PROCESS-SENTINEL as the sentinel
-function instead of `counsel--async-sentinel'.  If non-nil, use PROCESS-FILTER
-for handling the output of the process instead of `counsel--async-filter'."
-  (let* ((counsel--process " *counsel*")
-         (proc (get-process counsel--process))
-         (buff (get-buffer counsel--process)))
-    (when proc
-      (delete-process proc))
-    (when buff
-      (kill-buffer buff))
-    (setq buff (generate-new-buffer counsel--process))
-    (setq proc (start-file-process-shell-command
-                counsel--process
-                counsel--process
-                cmd))
-    (setq counsel--async-start
-          (setq counsel--async-time (current-time)))
-    (set-process-sentinel proc (or process-sentinel #'counsel--async-sentinel))
-    (set-process-filter proc (or process-filter #'counsel--async-filter))))
+  "Regexp matching candidates to ignore in `counsel--async-filter'.")
+
+(defun counsel--async-command (cmd &optional sentinel filter name)
+  "Start and return new counsel process by calling CMD.
+CMD can be either a shell command as a string, or a list of the
+program name to be called directly, followed by its arguments.
+If the default counsel process or one with NAME already exists,
+kill it and its associated buffer before starting a new one.
+Give the process the functions SENTINEL and FILTER, which default
+to `counsel--async-sentinel' and `counsel--async-filter',
+respectively."
+  (counsel-delete-process name)
+  (setq name (or name " *counsel*"))
+  (when (get-buffer name)
+    (kill-buffer name))
+  (let* ((buf (get-buffer-create name))
+         (proc (if (listp cmd)
+                   (apply #'start-file-process name buf cmd)
+                 (start-file-process-shell-command name buf cmd))))
+    (setq counsel--async-time (current-time))
+    (setq counsel--async-start counsel--async-time)
+    (set-process-sentinel proc (or sentinel #'counsel--async-sentinel))
+    (set-process-filter proc (or filter #'counsel--async-filter))
+    proc))
 
 (defvar counsel-grep-last-line nil)
 
-(defun counsel--async-sentinel (process event)
-  "Sentinel function for an asynchronous counsel PROCESS.
-EVENT is a string describing the change."
-  (let ((cands
-         (cond ((string= event "finished\n")
-                (with-current-buffer (process-buffer process)
-                  (split-string
-                   (buffer-string)
-                   counsel-async-split-string-re
-                   t)))
-               ((string-match "exited abnormally with code \\([0-9]+\\)\n" 
event)
-                (let* ((exit-code-plist (plist-get 
counsel--async-exit-code-plist
-                                                   (ivy-state-caller 
ivy-last)))
-                       (exit-num (read (match-string 1 event)))
-                       (exit-code (plist-get exit-code-plist exit-num)))
-                  (list
-                   (or exit-code
-                       (format "error code %d" exit-num))))))))
-    (cond ((string= event "finished\n")
-           (ivy--set-candidates
-            (ivy--sort-maybe
-             cands))
-           (setq counsel-grep-last-line nil)
-           (when counsel--async-start
-             (setq counsel--async-duration
-                   (time-to-seconds (time-since counsel--async-start))))
-           (let ((re (funcall ivy--regex-function ivy-text)))
-             (unless (stringp re)
-               (setq re (caar re)))
-             (if (null ivy--old-cands)
-                 (unless (ivy-set-index
-                          (ivy--preselect-index
-                           (ivy-state-preselect ivy-last)
-                           ivy--all-candidates))
-                   (ivy--recompute-index
-                    ivy-text re ivy--all-candidates))
-               (ivy--recompute-index
-                ivy-text re ivy--all-candidates)))
-           (setq ivy--old-cands ivy--all-candidates)
-           (if (null ivy--all-candidates)
-               (ivy--insert-minibuffer "")
-             (ivy--exhibit)))
-          ((string-match "exited abnormally with code \\([0-9]+\\)\n" event)
-           (setq ivy--all-candidates cands)
-           (setq ivy--old-cands ivy--all-candidates)
-           (ivy--exhibit)))))
+(defun counsel--async-sentinel (process _msg)
+  "Sentinel function for an asynchronous counsel PROCESS."
+  (when (eq (process-status process) 'exit)
+    (if (zerop (process-exit-status process))
+        (progn
+          (ivy--set-candidates
+           (ivy--sort-maybe
+            (with-current-buffer (process-buffer process)
+              (split-string (buffer-string) counsel-async-split-string-re t))))
+          (setq counsel-grep-last-line nil)
+          (when counsel--async-start
+            (setq counsel--async-duration
+                  (time-to-seconds (time-since counsel--async-start))))
+          (let ((re (ivy-re-to-str (funcall ivy--regex-function ivy-text))))
+            (if ivy--old-cands
+                (ivy--recompute-index ivy-text re ivy--all-candidates)
+              (unless (ivy-set-index
+                       (ivy--preselect-index
+                        (ivy-state-preselect ivy-last)
+                        ivy--all-candidates))
+                (ivy--recompute-index ivy-text re ivy--all-candidates))))
+          (setq ivy--old-cands ivy--all-candidates)
+          (if ivy--all-candidates
+              (ivy--exhibit)
+            (ivy--insert-minibuffer "")))
+      (setq ivy--all-candidates
+            (let ((status (process-exit-status process))
+                  (plist (plist-get counsel--async-exit-code-plist
+                                    (ivy-state-caller ivy-last))))
+              (list (or (plist-get plist status)
+                        (format "error code %d" status)))))
+      (setq ivy--old-cands ivy--all-candidates)
+      (ivy--exhibit))))
 
 (defcustom counsel-async-filter-update-time 500000
-  "The amount of time in microseconds to wait until updating
-`counsel--async-filter'."
-  :type 'integer
-  :group 'ivy)
+  "The amount of microseconds to wait until updating `counsel--async-filter'."
+  :type 'integer)
 
 (defun counsel--async-filter (process str)
   "Receive from PROCESS the output STR.
@@ -215,53 +224,27 @@ Update the minibuffer with the amount of lines collected 
every
 `counsel-async-filter-update-time' microseconds since the last update."
   (with-current-buffer (process-buffer process)
     (insert str))
-  (let (size)
-    (when (time-less-p
-           `(0 0 ,counsel-async-filter-update-time 0)
-           (time-since counsel--async-time))
+  (when (time-less-p (list 0 0 counsel-async-filter-update-time)
+                     (time-since counsel--async-time))
+    (let (numlines)
       (with-current-buffer (process-buffer process)
-        (goto-char (point-min))
-        (setq size (- (buffer-size) (forward-line (buffer-size))))
+        (setq numlines (count-lines (point-min) (point-max)))
         (ivy--set-candidates
-         (let ((strings (split-string (buffer-string)
-                                      counsel-async-split-string-re
-                                      t)))
-           (if (and counsel-async-ignore-re
-                    (stringp counsel-async-ignore-re))
-               (cl-remove-if
-                (lambda (str)
-                  (string-match-p counsel-async-ignore-re str))
-                strings)
-             strings))))
-      (let ((ivy--prompt (format
-                          (concat "%d++ " (ivy-state-prompt ivy-last))
-                          size)))
-        (ivy--insert-minibuffer
-         (ivy--format ivy--all-candidates)))
+         (let ((lines (split-string (buffer-string)
+                                    counsel-async-split-string-re
+                                    t)))
+           (if (stringp counsel-async-ignore-re)
+               (cl-remove-if (lambda (line)
+                               (string-match-p counsel-async-ignore-re line))
+                             lines)
+             lines))))
+      (let ((ivy--prompt (format "%d++ %s" numlines (ivy-state-prompt 
ivy-last))))
+        (ivy--insert-minibuffer (ivy--format ivy--all-candidates)))
       (setq counsel--async-time (current-time)))))
 
-(defcustom counsel-prompt-function 'counsel-prompt-function-default
-  "A function to return a full prompt string from a basic prompt string."
-  :type
-  '(choice
-    (const :tag "Plain" counsel-prompt-function-default)
-    (const :tag "Directory" counsel-prompt-function-dir)
-    (function :tag "Custom"))
-  :group 'ivy)
-
-(make-obsolete-variable
- 'counsel-prompt-function
- "Use `ivy-set-prompt' instead"
- "0.8.0 <2016-06-20 Mon>")
-
-(defun counsel-prompt-function-default ()
-  "Return prompt appended with a semicolon."
-  (ivy-add-prompt-count
-   (format "%s: " (ivy-state-prompt ivy-last))))
-
-(defun counsel-delete-process ()
-  "Delete current counsel process."
-  (let ((process (get-process " *counsel*")))
+(defun counsel-delete-process (&optional name)
+  "Delete current counsel process or that with NAME."
+  (let ((process (get-process (or name " *counsel*"))))
     (when process
       (delete-process process))))
 
@@ -273,25 +256,17 @@ Update the minibuffer with the amount of lines collected 
every
   (interactive)
   (let* ((bnd (unless (and (looking-at ")")
                            (eq (char-before) ?\())
-                (bounds-of-thing-at-point
-                 'symbol)))
+                (bounds-of-thing-at-point 'symbol)))
          (str (if bnd
                   (buffer-substring-no-properties
                    (car bnd)
                    (cdr bnd))
                 ""))
-         (ivy-height 7)
          (pred (and (eq (char-before (car bnd)) ?\()
                     #'fboundp))
          symbol-names)
-    (if bnd
-        (progn
-          (setq ivy-completion-beg
-                (move-marker (make-marker) (car bnd)))
-          (setq ivy-completion-end
-                (move-marker (make-marker) (cdr bnd))))
-      (setq ivy-completion-beg nil)
-      (setq ivy-completion-end nil))
+    (setq ivy-completion-beg (car bnd))
+    (setq ivy-completion-end (cdr bnd))
     (if (string= str "")
         (mapatoms
          (lambda (x)
@@ -299,10 +274,13 @@ Update the minibuffer with the amount of lines collected 
every
              (push (symbol-name x) symbol-names))))
       (setq symbol-names (all-completions str obarray pred)))
     (ivy-read "Symbol name: " symbol-names
+              :caller 'counsel-el
               :predicate pred
               :initial-input str
               :action #'ivy-completion-in-region-action)))
 
+(add-to-list 'ivy-height-alist '(counsel-el . 7))
+
 ;;** `counsel-cl'
 (declare-function slime-symbol-start-pos "ext:slime")
 (declare-function slime-symbol-end-pos "ext:slime")
@@ -329,35 +307,28 @@ Update the minibuffer with the amount of lines collected 
every
   "Python completion at point."
   (interactive)
   (let ((bnd (bounds-of-thing-at-point 'symbol)))
-    (if bnd
-        (progn
-          (setq ivy-completion-beg (car bnd))
-          (setq ivy-completion-end (cdr bnd)))
-      (setq ivy-completion-beg nil)
-      (setq ivy-completion-end nil)))
+    (setq ivy-completion-beg (car bnd))
+    (setq ivy-completion-end (cdr bnd)))
   (deferred:sync!
       (jedi:complete-request))
   (ivy-read "Symbol name: " (jedi:ac-direct-matches)
             :action #'counsel--py-action))
 
-(defun counsel--py-action (symbol)
-  "Insert SYMBOL, erasing the previous one."
-  (when (stringp symbol)
+(defun counsel--py-action (symbol-name)
+  "Insert SYMBOL-NAME, erasing the previous one."
+  (when (stringp symbol-name)
     (with-ivy-window
       (when ivy-completion-beg
         (delete-region
          ivy-completion-beg
          ivy-completion-end))
-      (setq ivy-completion-beg
-            (move-marker (make-marker) (point)))
-      (insert symbol)
-      (setq ivy-completion-end
-            (move-marker (make-marker) (point)))
-      (when (equal (get-text-property 0 'symbol symbol) "f")
+      (setq ivy-completion-beg (point))
+      (insert symbol-name)
+      (setq ivy-completion-end (point))
+      (when (equal (get-text-property 0 'symbol symbol-name) "f")
         (insert "()")
-        (setq ivy-completion-end
-              (move-marker (make-marker) (point)))
-        (backward-char 1)))))
+        (setq ivy-completion-end (point))
+        (backward-char)))))
 
 ;;** `counsel-clj'
 (declare-function cider-sync-request:complete "ext:cider-client")
@@ -368,14 +339,16 @@ Update the minibuffer with the amount of lines collected 
every
          (str (buffer-substring-no-properties
                (car bnd) (cdr bnd)))
          (candidates (funcall completion-fn str))
-         (ivy-height 7)
          (res (ivy-read (format "pattern (%s): " str)
-                        candidates)))
+                        candidates
+                        :caller 'counsel--generic)))
     (when (stringp res)
       (when bnd
         (delete-region (car bnd) (cdr bnd)))
       (insert res))))
 
+(add-to-list 'ivy-height-alist '(counsel--generic . 7))
+
 ;;;###autoload
 (defun counsel-clj ()
   "Clojure completion at point."
@@ -386,53 +359,62 @@ Update the minibuffer with the amount of lines collected 
every
       #'cl-caddr
       (cider-sync-request:complete str ":same")))))
 
-;;** `counsel-unicode-char'
-(defvar counsel-unicode-char-history nil
-  "History for `counsel-unicode-char'.")
+;;** `counsel-company'
+(defvar company-candidates)
+(defvar company-point)
+(defvar company-common)
+(declare-function company-complete "ext:company")
+(declare-function company-mode "ext:company")
+(declare-function company-complete-common "ext:company")
+(declare-function company-abort "ext:company")
 
-(defun counsel--unicode-names ()
-  "Return formatted and sorted list of `ucs-names'.
-The result of `ucs-names' is mostly, but not completely, sorted,
-so this function ensures lexicographic order."
-  (let* (cands
-         (table (ucs-names))            ; Either hash map or alist
-         (fmt   (lambda (name code)     ; Common format function
-                  (push (propertize (format "%06X %-58s %c" code name code)
-                                    'code code)
-                        cands))))
-    (if (not (hash-table-p table))
-        ;; Support `ucs-names' returning an alist in Emacs < 26. The result of
-        ;; `ucs-names' comes pre-reversed so no need to repeat.
-        (dolist (entry table)
-          (funcall fmt (car entry) (cdr entry)))
-      (maphash fmt table)
-      ;; Reverse to speed up sorting
-      (setq cands (nreverse cands)))
-    (sort cands #'string-lessp)))
+;;;###autoload
+(defun counsel-company ()
+  "Complete using `company-candidates'."
+  (interactive)
+  (company-mode 1)
+  (unless company-candidates
+    (company-complete))
+  (when company-point
+    (when (looking-back company-common (line-beginning-position))
+      (setq ivy-completion-beg (match-beginning 0))
+      (setq ivy-completion-end (match-end 0)))
+    (ivy-read "company cand: " company-candidates
+              :action #'ivy-completion-in-region-action
+              :unwind #'company-abort)))
 
-(defvar counsel--unicode-table
-  (lazy-completion-table counsel--unicode-table counsel--unicode-names)
-  "Lazy completion table for `counsel-unicode-char'.
-Candidates comprise `counsel--unicode-names', which see.")
+;;** `counsel-irony'
+(declare-function irony-completion-candidates-async "ext:irony-completion")
+(declare-function irony-completion-symbol-bounds "ext:irony-completion")
+(declare-function irony-completion-annotation "ext:irony-completion")
 
 ;;;###autoload
-(defun counsel-unicode-char (&optional count)
-  "Insert COUNT copies of a Unicode character at point.
-COUNT defaults to 1."
-  (interactive "p")
-  (let ((ivy-sort-max-size (expt 256 6)))
-    (setq ivy-completion-beg (point))
-    (setq ivy-completion-end (point))
-    (ivy-read "Unicode name: " counsel--unicode-table
-              :action (lambda (name)
-                        (with-ivy-window
-                          (delete-region ivy-completion-beg ivy-completion-end)
-                          (setq ivy-completion-beg (point))
-                          (insert-char (get-text-property 0 'code name) count)
-                          (setq ivy-completion-end (point))))
-              :history 'counsel-unicode-char-history
-              :caller 'counsel-unicode-char
-              :sort t)))
+(defun counsel-irony ()
+  "Inline C/C++ completion using Irony."
+  (interactive)
+  (irony-completion-candidates-async 'counsel-irony-callback))
+
+(defun counsel-irony-callback (candidates)
+  "Callback function for Irony to search among CANDIDATES."
+  (interactive)
+  (let* ((symbol-bounds (irony-completion-symbol-bounds))
+         (beg (car symbol-bounds))
+         (end (cdr symbol-bounds))
+         (prefix (buffer-substring-no-properties beg end)))
+    (setq ivy-completion-beg beg
+          ivy-completion-end end)
+    (ivy-read "code: " (mapcar #'counsel-irony-annotate candidates)
+              :predicate (lambda (candidate)
+                           (string-prefix-p prefix (car candidate)))
+              :caller 'counsel-irony
+              :action #'ivy-completion-in-region-action)))
+
+(defun counsel-irony-annotate (x)
+  "Make Ivy candidate from Irony candidate X."
+  (cons (concat (car x) (irony-completion-annotation x))
+        (car x)))
+
+(add-to-list 'ivy-display-functions-alist '(counsel-irony . 
ivy-display-function-overlay))
 
 ;;* Elisp symbols
 ;;** `counsel-describe-variable'
@@ -447,8 +429,10 @@ COUNT defaults to 1."
  '(("I" counsel-info-lookup-symbol "info")
    ("d" counsel--find-symbol "definition")))
 
-(defvar counsel-describe-symbol-history nil
-  "History for `counsel-describe-variable' and `counsel-describe-function'.")
+(defvar counsel-describe-symbol-history ()
+  "History list for variable and function names.
+Used by commands `counsel-describe-variable' and
+`counsel-describe-function'.")
 
 (defun counsel-find-symbol ()
   "Jump to the definition of the current symbol."
@@ -460,11 +444,21 @@ COUNT defaults to 1."
   (interactive)
   (ivy-exit-with-action #'counsel-info-lookup-symbol))
 
+(defvar find-tag-marker-ring)
+(declare-function xref-push-marker-stack "xref")
+
+(defalias 'counsel--push-xref-marker
+  (if (require 'xref nil t)
+      #'xref-push-marker-stack
+    (require 'etags)
+    (lambda (&optional m)
+      (ring-insert (with-no-warnings find-tag-marker-ring) (or m 
(point-marker)))))
+  "Compatibility shim for `xref-push-marker-stack'.")
+
 (defun counsel--find-symbol (x)
   "Find symbol definition that corresponds to string X."
   (with-ivy-window
-    (with-no-warnings
-      (ring-insert find-tag-marker-ring (point-marker)))
+    (counsel--push-xref-marker)
     (let ((full-name (get-text-property 0 'full-name x)))
       (if full-name
           (find-library full-name)
@@ -489,20 +483,15 @@ COUNT defaults to 1."
 (define-obsolete-function-alias 'counsel-symbol-at-point
     'ivy-thing-at-point "0.7.0")
 
-(defun counsel-variable-list ()
-  "Return the list of all currently bound variables."
-  (let (cands)
-    (mapatoms
-     (lambda (vv)
-       (when (or (get vv 'variable-documentation)
-                 (and (boundp vv) (not (keywordp vv))))
-         (push (symbol-name vv) cands))))
-    (delete "" cands)))
-
-(defcustom counsel-describe-variable-function 'describe-variable
+(defun counsel--variable-p (symbol)
+  "Return non-nil if SYMBOL is a bound or documented variable."
+  (or (and (boundp symbol)
+           (not (keywordp symbol)))
+      (get symbol 'variable-documentation)))
+
+(defcustom counsel-describe-variable-function #'describe-variable
   "Function to call to describe a variable passed as parameter."
-  :type 'function
-  :group 'ivy)
+  :type 'function)
 
 (defun counsel-describe-variable-transformer (var)
   "Propertize VAR if it's a custom variable."
@@ -521,17 +510,16 @@ Variables declared using `defcustom' are highlighted 
according to
 `ivy-highlight-face'."
   (interactive)
   (let ((enable-recursive-minibuffers t))
-    (ivy-read
-     "Describe variable: "
-     (counsel-variable-list)
-     :keymap counsel-describe-map
-     :preselect (ivy-thing-at-point)
-     :history 'counsel-describe-symbol-history
-     :require-match t
-     :sort t
-     :action (lambda (x)
-               (funcall counsel-describe-variable-function (intern x)))
-     :caller 'counsel-describe-variable)))
+    (ivy-read "Describe variable: " obarray
+              :predicate #'counsel--variable-p
+              :require-match t
+              :history 'counsel-describe-symbol-history
+              :keymap counsel-describe-map
+              :preselect (ivy-thing-at-point)
+              :sort t
+              :action (lambda (x)
+                        (funcall counsel-describe-variable-function (intern 
x)))
+              :caller 'counsel-describe-variable)))
 
 ;;** `counsel-describe-function'
 (ivy-set-actions
@@ -539,10 +527,9 @@ Variables declared using `defcustom' are highlighted 
according to
  '(("I" counsel-info-lookup-symbol "info")
    ("d" counsel--find-symbol "definition")))
 
-(defcustom counsel-describe-function-function 'describe-function
+(defcustom counsel-describe-function-function #'describe-function
   "Function to call to describe a function passed as parameter."
-  :type 'function
-  :group 'ivy)
+  :type 'function)
 
 (defun counsel-describe-function-transformer (function-name)
   "Propertize FUNCTION-NAME if it's an interactive function."
@@ -557,33 +544,28 @@ Variables declared using `defcustom' are highlighted 
according to
   (let ((f (function-called-at-point)))
     (and f (symbol-name f))))
 
-(defcustom counsel-describe-function-preselect 'ivy-thing-at-point
+(defcustom counsel-describe-function-preselect #'ivy-thing-at-point
   "Determine what `counsel-describe-function' should preselect."
-  :type
-  '(choice
-    (const ivy-thing-at-point)
-    (const ivy-function-called-at-point))
-  :group 'ivy)
+  :type '(radio
+          (function-item ivy-thing-at-point)
+          (function-item ivy-function-called-at-point)))
 
 ;;;###autoload
 (defun counsel-describe-function ()
   "Forward to `describe-function'.
 
-Interactive functions \(i.e., commands) are highlighted according
+Interactive functions (i.e., commands) are highlighted according
 to `ivy-highlight-face'."
   (interactive)
   (let ((enable-recursive-minibuffers t))
-    (ivy-read "Describe function: "
-              (let (cands)
-                (mapatoms
-                 (lambda (x)
-                   (when (fboundp x)
-                     (push (symbol-name x) cands))))
-                cands)
+    (ivy-read "Describe function: " obarray
+              :predicate (lambda (sym)
+                           (or (fboundp sym)
+                               (get sym 'function-documentation)))
+              :require-match t
+              :history 'counsel-describe-symbol-history
               :keymap counsel-describe-map
               :preselect (funcall counsel-describe-function-preselect)
-              :history 'counsel-describe-symbol-history
-              :require-match t
               :sort t
               :action (lambda (x)
                         (funcall counsel-describe-function-function (intern 
x)))
@@ -630,49 +612,102 @@ X is an item of a radio- or choice-type defcustom."
                   (list 'quote x)
                 x))))))
 
+(declare-function lv-message "ext:lv")
+(declare-function lv-delete-window "ext:lv")
+(declare-function custom-variable-documentation "cus-edit")
+
 ;;;###autoload
-(defun counsel-set-variable ()
-  "Set a variable, with completion.
+(defface counsel-variable-documentation
+  '((t :inherit font-lock-comment-face))
+  "Face for displaying Lisp documentation."
+  :group 'ivy-faces)
+
+(defun counsel-set-variable (sym)
+  "Set a variable SYM, with completion.
 
 When the selected variable is a `defcustom' with the type boolean
 or radio, offer completion of all possible values.
 
 Otherwise, offer a variant of `eval-expression', with the initial
-input corresponding to the chosen variable."
-  (interactive)
-  (let ((sym (intern
-              (ivy-read "Variable: "
-                        (counsel-variable-list)
-                        :preselect (ivy-thing-at-point)
-                        :history 'counsel-set-variable-history)))
+input corresponding to the chosen variable.
+
+With a prefix arg, restrict list to variables defined using
+`defcustom'."
+  (interactive (list (intern
+                      (ivy-read "Set variable: " obarray
+                                :predicate (if current-prefix-arg
+                                               #'custom-variable-p
+                                             #'counsel--variable-p)
+                                :history 'counsel-set-variable-history
+                                :preselect (ivy-thing-at-point)))))
+  (let ((doc (and (require 'cus-edit)
+                  (require 'lv nil t)
+                  (not (string= "nil" (custom-variable-documentation sym)))
+                  (propertize (custom-variable-documentation sym)
+                              'face 'counsel-variable-documentation)))
         sym-type
         cands)
-    (if (and (boundp sym)
-             (setq sym-type (get sym 'custom-type))
-             (cond
-               ((and (consp sym-type)
-                     (memq (car sym-type) '(choice radio)))
-                (setq cands (delq nil (mapcar #'counsel--setq-doconst (cdr 
sym-type)))))
-               ((eq sym-type 'boolean)
-                (setq cands '(("nil" . nil) ("t" . t))))
-               (t nil)))
-        (let* ((sym-val (symbol-value sym))
-               ;; Escape '%' chars if present
-               (sym-val-str (replace-regexp-in-string "%" "%%" (format "%s" 
sym-val)))
-               (res (ivy-read (format "Set (%S <%s>): " sym sym-val-str)
-                              cands
-                              :preselect (prin1-to-string sym-val))))
-          (when res
-            (setq res
-                  (if (assoc res cands)
-                      (cdr (assoc res cands))
-                    (read res)))
-            (set sym (if (and (listp res) (eq (car res) 'quote))
-                         (cadr res)
-                       res))))
-      (unless (boundp sym)
-        (set sym nil))
-      (counsel-read-setq-expression sym))))
+    (unwind-protect
+         (progn
+           (when doc
+             (lv-message (ivy--quote-format-string doc)))
+           (if (and (boundp sym)
+                    (setq sym-type (get sym 'custom-type))
+                    (cond
+                      ((and (consp sym-type)
+                            (memq (car sym-type) '(choice radio)))
+                       (setq cands (delq nil (mapcar #'counsel--setq-doconst
+                                                     (cdr sym-type)))))
+                      ((eq sym-type 'boolean)
+                       (setq cands '(("nil" . nil) ("t" . t))))
+                      (t nil)))
+               (let* ((sym-val (symbol-value sym))
+                      (res (ivy-read (format "Set (%S <%s>): " sym sym-val)
+                                     cands
+                                     :preselect (prin1-to-string sym-val))))
+                 (when res
+                   (setq res
+                         (if (assoc res cands)
+                             (cdr (assoc res cands))
+                           (read res)))
+                   (set sym (if (and (listp res) (eq (car res) 'quote))
+                                (cadr res)
+                              res))))
+             (unless (boundp sym)
+               (set sym nil))
+             (counsel-read-setq-expression sym)))
+      (when doc
+        (lv-delete-window)))))
+
+;;** `counsel-apropos'
+;;;###autoload
+(defun counsel-apropos ()
+  "Show all matching symbols.
+See `apropos' for further information on what is considered
+a symbol and how to search for them."
+  (interactive)
+  (ivy-read "Search for symbol (word list or regexp): " obarray
+            :predicate (lambda (sym)
+                         (or (fboundp sym)
+                             (boundp sym)
+                             (facep sym)
+                             (symbol-plist sym)))
+            :history 'counsel-apropos-history
+            :preselect (ivy-thing-at-point)
+            :sort t
+            :action (lambda (pattern)
+                      (when (string= pattern "")
+                        (user-error "Please specify a pattern"))
+                      ;; If the user selected a candidate form the list, we use
+                      ;; a pattern which matches only the selected symbol.
+                      (if (memq this-command '(ivy-immediate-done 
ivy-alt-done))
+                          ;; Regexp pattern are passed verbatim, other input is
+                          ;; split into words.
+                          (if (string= (regexp-quote pattern) pattern)
+                              (apropos (split-string pattern "[ \t]+" t))
+                            (apropos pattern))
+                        (apropos (concat "\\`" pattern "\\'"))))
+            :caller 'counsel-apropos))
 
 ;;** `counsel-info-lookup-symbol'
 (defvar info-lookup-mode)
@@ -685,7 +720,8 @@ input corresponding to the chosen variable."
 
 ;;;###autoload
 (defun counsel-info-lookup-symbol (symbol &optional mode)
-  "Forward to `info-lookup-symbol' with ivy completion."
+  "Forward SYMBOL to `info-lookup-symbol' with ivy completion.
+With prefix arg MODE a query for the symbol help mode is offered."
   (interactive
    (progn
      (require 'info-look)
@@ -707,93 +743,34 @@ input corresponding to the chosen variable."
   (info-lookup-symbol symbol mode))
 
 ;;** `counsel-M-x'
-(ivy-set-actions
- 'counsel-M-x
- '(("d" counsel--find-symbol "definition")
-   ("h" (lambda (x) (describe-function (intern x))) "help")))
-
-(ivy-set-display-transformer
- 'counsel-M-x
- 'counsel-M-x-transformer)
-
-;;;###autoload
-(defun counsel-file-register ()
-  "Search file in register.
-
-You cannot use Emacs' normal register commands to create file
-registers.  Instead you must use the `set-register' function like
-so: `(set-register ?i \"/home/eric/.emacs.d/init.el\")'.  Now you
-can use `C-x r j i' to open that file."
-  (interactive)
-  (ivy-read "File Register: "
-            ;; Use the `register-alist' variable to filter out file
-            ;; registers.  Each entry for a file registar will have the
-            ;; following layout:
-            ;;
-            ;;     (NUMBER 'file . "string/path/to/file")
-            ;;
-            ;; So we go through each entry and see if the `cadr' is
-            ;; `eq' to the symbol `file'.  If so then add the filename
-            ;; (`cddr') which `ivy-read' will use for its choices.
-            (mapcar (lambda (register-alist-entry)
-                      (if (eq 'file (cadr register-alist-entry))
-                          (cddr register-alist-entry)))
-                      register-alist)
-            :sort t
-            :require-match t
-            :history 'counsel-file-register
-            :caller 'counsel-file-register
-            :action (lambda (register-file)
-                      (with-ivy-window (find-file register-file)))))
-
-(ivy-set-actions
- 'counsel-file-register
- '(("j" find-file-other-window "other window")))
-
-(declare-function bookmark-all-names "bookmark")
-(declare-function bookmark-location "bookmark")
-
-(defcustom counsel-bookmark-avoid-dired nil
-  "If non-nil, open directory bookmarks with `counsel-find-file'.
-By default `counsel-bookmark' opens a dired buffer for directories."
-  :type 'boolean
-  :group 'ivy)
-
-;;;###autoload
-(defun counsel-bookmark ()
-  "Forward to `bookmark-jump' or `bookmark-set' if bookmark doesn't exist."
-  (interactive)
-  (require 'bookmark)
-  (ivy-read "Create or jump to bookmark: "
-            (bookmark-all-names)
-            :action (lambda (x)
-                      (cond ((and counsel-bookmark-avoid-dired
-                                  (member x (bookmark-all-names))
-                                  (file-directory-p (bookmark-location x)))
-                             (with-ivy-window
-                               (let ((default-directory (bookmark-location x)))
-                                 (counsel-find-file))))
-                            ((member x (bookmark-all-names))
-                             (with-ivy-window
-                               (bookmark-jump x)))
-                            (t
-                             (bookmark-set x))))
-            :caller 'counsel-bookmark))
-
-(ivy-set-actions
- 'counsel-bookmark
- '(("d" bookmark-delete "delete")
-   ("e" bookmark-rename "edit")))
+(defface counsel-key-binding
+  '((t :inherit font-lock-keyword-face))
+  "Face used by `counsel-M-x' for key bindings."
+  :group 'ivy-faces)
 
 (defun counsel-M-x-transformer (cmd)
-  "Return CMD appended with the corresponding binding in the current window."
-  (let ((binding (substitute-command-keys (format "\\[%s]" cmd))))
-    (setq binding (replace-regexp-in-string "C-x 6" "<f2>" binding))
-    (if (string-match "^M-x" binding)
+  "Return CMD annotated with its active key binding, if any."
+  (let ((key (where-is-internal (intern cmd) nil t)))
+    (if (not key)
         cmd
-      (format "%s (%s)"
-              cmd (propertize binding 'face 'font-lock-keyword-face)))))
-
+      ;; Prefer `<f2>' over `C-x 6' where applicable
+      (let ((i (cl-search [?\C-x ?6] key)))
+        (when i
+          (let ((dup (vconcat (substring key 0 i) [f2] (substring key (+ i 
2))))
+                (map (current-global-map)))
+            (when (equal (lookup-key map key)
+                         (lookup-key map dup))
+              (setq key dup)))))
+      (setq key (key-description key))
+      (put-text-property 0 (length key) 'face 'counsel-key-binding key)
+      (format "%s (%s)" cmd key))))
+
+(defvar amx-initialized)
+(defvar amx-cache)
+(declare-function amx-initialize "ext:amx")
+(declare-function amx-detect-new-commands "ext:amx")
+(declare-function amx-update "ext:amx")
+(declare-function amx-rank "ext:amx")
 (defvar smex-initialized-p)
 (defvar smex-ido-cache)
 (declare-function smex-initialize "ext:smex")
@@ -801,19 +778,38 @@ By default `counsel-bookmark' opens a dired buffer for 
directories."
 (declare-function smex-update "ext:smex")
 (declare-function smex-rank "ext:smex")
 
+(defun counsel--M-x-externs ()
+  "Return `counsel-M-x' candidates from external packages.
+The return value is a list of strings.  The currently supported
+packages are, in order of precedence, `amx' and `smex'."
+  (cond ((require 'amx nil t)
+         (unless amx-initialized
+           (amx-initialize))
+         (when (amx-detect-new-commands)
+           (amx-update))
+         (mapcar (lambda (entry)
+                   (symbol-name (car entry)))
+                 amx-cache))
+        ((require 'smex nil t)
+         (unless smex-initialized-p
+           (smex-initialize))
+         (when (smex-detect-new-commands)
+           (smex-update))
+         smex-ido-cache)))
+
 (defun counsel--M-x-prompt ()
   "String for `M-x' plus the string representation of `current-prefix-arg'."
-  (if (not current-prefix-arg)
-      "M-x "
-    (concat
-     (if (eq current-prefix-arg '-)
-         "- "
-       (if (integerp current-prefix-arg)
-           (format "%d " current-prefix-arg)
-         (if (= (car current-prefix-arg) 4)
-             "C-u "
-           (format "%d " (car current-prefix-arg)))))
-     "M-x ")))
+  (concat (cond ((null current-prefix-arg)
+                 nil)
+                ((eq current-prefix-arg '-)
+                 "- ")
+                ((integerp current-prefix-arg)
+                 (format "%d " current-prefix-arg))
+                ((= (car current-prefix-arg) 4)
+                 "C-u ")
+                (t
+                 (format "%d " (car current-prefix-arg))))
+          "M-x "))
 
 (defvar counsel-M-x-history nil
   "History for `counsel-M-x'.")
@@ -821,53 +817,80 @@ By default `counsel-bookmark' opens a dired buffer for 
directories."
 ;;;###autoload
 (defun counsel-M-x (&optional initial-input)
   "Ivy version of `execute-extended-command'.
-Optional INITIAL-INPUT is the initial input in the minibuffer."
+Optional INITIAL-INPUT is the initial input in the minibuffer.
+This function integrates with either the `amx' or `smex' package
+when available, in that order of precedence."
   (interactive)
-  (let* ((cands obarray)
-         (pred 'commandp)
-         (sort t))
-    (when (require 'smex nil 'noerror)
-      (unless smex-initialized-p
-        (smex-initialize))
-      (when (smex-detect-new-commands)
-        (smex-update))
-      (setq cands smex-ido-cache)
-      (setq pred nil)
-      (setq sort nil))
-    ;; When `counsel-M-x' returns, `last-command' would be set to
-    ;; `counsel-M-x' because :action hasn't been invoked yet.
-    ;; Instead, preserve the old value of `this-command'.
-    (setq this-command last-command)
-    (setq real-this-command real-last-command)
-    (ivy-read (counsel--M-x-prompt) cands
-              :predicate pred
+  ;; When `counsel-M-x' returns, `last-command' would be set to
+  ;; `counsel-M-x' because :action hasn't been invoked yet.
+  ;; Instead, preserve the old value of `this-command'.
+  (setq this-command last-command)
+  (setq real-this-command real-last-command)
+  (let ((externs (counsel--M-x-externs)))
+    (ivy-read (counsel--M-x-prompt) (or externs obarray)
+              :predicate (and (not externs)
+                              (lambda (sym)
+                                (and (commandp sym)
+                                     (not (get sym 'byte-obsolete-info)))))
               :require-match t
               :history 'counsel-M-x-history
-              :action
-              (lambda (cmd)
-                (when (featurep 'smex)
-                  (smex-rank (intern cmd)))
-                (let ((prefix-arg current-prefix-arg))
-                  (setq real-this-command
-                        (setq this-command (intern cmd)))
-                  (command-execute (intern cmd) 'record)))
-              :sort sort
+              :action (lambda (cmd)
+                        (setq cmd (intern cmd))
+                        (cond ((bound-and-true-p amx-initialized)
+                               (amx-rank cmd))
+                              ((bound-and-true-p smex-initialized-p)
+                               (smex-rank cmd)))
+                        (setq prefix-arg current-prefix-arg)
+                        (setq this-command cmd)
+                        (setq real-this-command cmd)
+                        (command-execute cmd 'record))
+              :sort (not externs)
               :keymap counsel-describe-map
               :initial-input initial-input
               :caller 'counsel-M-x)))
 
+(ivy-set-actions
+ 'counsel-M-x
+ `(("d" counsel--find-symbol "definition")
+   ("h" ,(lambda (x) (describe-function (intern x))) "help")))
+
+(ivy-set-display-transformer
+ 'counsel-M-x
+ 'counsel-M-x-transformer)
+
+;;** `counsel-command-history'
+(defun counsel-command-history-action-eval (cmd)
+  "Eval the command CMD."
+  (eval (read cmd)))
+
+(defun counsel-command-history-action-edit-and-eval (cmd)
+  "Edit and eval the command CMD."
+  (edit-and-eval-command "Eval: " (read cmd)))
+
+(ivy-set-actions
+ 'counsel-command-history
+ '(("r" counsel-command-history-action-eval           "eval command")
+   ("e" counsel-command-history-action-edit-and-eval  "edit and eval 
command")))
+
+(defun counsel-command-history ()
+  "Show the history of commands."
+  (interactive)
+  (ivy-read "Command: " (mapcar #'prin1-to-string command-history)
+            :require-match t
+            :action #'counsel-command-history-action-eval
+            :caller 'counsel-command-history))
+
 ;;** `counsel-load-library'
 (defun counsel-library-candidates ()
   "Return a list of completion candidates for `counsel-load-library'."
-  (interactive)
-  (let ((dirs load-path)
-        (suffix (concat (regexp-opt '(".el" ".el.gz") t) "\\'"))
+  (let ((suffix (concat (regexp-opt '(".el" ".el.gz") t) "\\'"))
         (cands (make-hash-table :test #'equal))
         short-name
         old-val
         dir-parent
         res)
-    (dolist (dir dirs)
+    (dolist (dir load-path)
+      (setq dir (or dir default-directory)) ;; interpret nil in load-path as 
default-directory
       (when (file-directory-p dir)
         (dolist (file (file-name-all-completions "" dir))
           (when (string-match suffix file)
@@ -876,13 +899,13 @@ Optional INITIAL-INPUT is the initial input in the 
minibuffer."
               (if (setq old-val (gethash short-name cands))
                   (progn
                     ;; assume going up directory once will resolve name clash
-                    (setq dir-parent (counsel-directory-parent (cdr old-val)))
+                    (setq dir-parent (counsel-directory-name (cdr old-val)))
                     (puthash short-name
                              (cons
                               (counsel-string-compose dir-parent (car old-val))
                               (cdr old-val))
                              cands)
-                    (setq dir-parent (counsel-directory-parent dir))
+                    (setq dir-parent (counsel-directory-name dir))
                     (puthash (concat dir-parent short-name)
                              (cons
                               (propertize
@@ -895,7 +918,8 @@ Optional INITIAL-INPUT is the initial input in the 
minibuffer."
                          (cons (propertize
                                 short-name
                                 'full-name (expand-file-name file dir))
-                               dir) cands)))))))
+                               dir)
+                         cands)))))))
     (maphash (lambda (_k v) (push (car v) res)) cands)
     (nreverse res)))
 
@@ -916,6 +940,22 @@ The libraries are offered from `load-path'."
  '(("d" counsel--find-symbol "definition")))
 
 ;;** `counsel-find-library'
+(declare-function find-library-name "find-func")
+(defun counsel-find-library-other-window (library)
+  (let ((buf (find-file-noselect (find-library-name library))))
+    (pop-to-buffer buf 'other-window)))
+
+(defun counsel-find-library-other-frame (library)
+  (let ((buf (find-file-noselect (find-library-name library))))
+    (condition-case nil
+        (switch-to-buffer-other-frame buf)
+      (error (pop-to-buffer buf)))))
+
+(ivy-set-actions
+ 'counsel-find-library
+ '(("j" counsel-find-library-other-window "other window")
+   ("f" counsel-find-library-other-frame "other frame")))
+
 ;;;###autoload
 (defun counsel-find-library ()
   "Visit a selected the Emacs Lisp library.
@@ -924,7 +964,8 @@ The libraries are offered from `load-path'."
   (let ((cands (counsel-library-candidates)))
     (ivy-read "Find library: " cands
               :action #'counsel--find-symbol
-              :keymap counsel-describe-map)))
+              :keymap counsel-describe-map
+              :caller 'counsel-find-library)))
 
 ;;** `counsel-load-theme'
 (declare-function powerline-reset "ext:powerline")
@@ -989,7 +1030,7 @@ See `describe-buffer-bindings' for further information."
               (push
                (cons (format
                       "%-15s %s"
-                      (propertize key 'face 'font-lock-builtin-face)
+                      (propertize key 'face 'counsel-key-binding)
                       fun)
                      (cons key cmd))
                res))))
@@ -1024,26 +1065,85 @@ BUFFER defaults to the current one."
             :action #'counsel-descbinds-action-describe
             :history 'counsel-descbinds-history
             :caller 'counsel-descbinds))
+
 ;;** `counsel-describe-face'
+(defcustom counsel-describe-face-function #'describe-face
+  "Function to call to describe a face or face name argument."
+  :type 'function)
+
+(defun counsel--face-at-point ()
+  "Return name of face around point.
+Try detecting a face name in the text around point before falling
+back to the face of the character after point, and finally the
+`default' face."
+  (symbol-name (or (face-at-point t) 'default)))
+
 (defun counsel-describe-face ()
   "Completion for `describe-face'."
   (interactive)
-  (let (cands)
-    (mapatoms
-     (lambda (s)
-       (if (facep s)
-           (push (symbol-name s) cands))))
-    (ivy-read "Face: " cands
-              :preselect (symbol-name (face-at-point t))
-              :action #'describe-face)))
+  (ivy-read "Face: " (face-list)
+            :require-match t
+            :history 'face-name-history
+            :preselect (counsel--face-at-point)
+            :sort t
+            :action counsel-describe-face-function
+            :caller 'counsel-describe-face))
+
+(defun counsel-customize-face (name)
+  "Customize face with NAME."
+  (customize-face (intern name)))
+
+(defun counsel-customize-face-other-window (name)
+  "Customize face with NAME in another window."
+  (customize-face-other-window (intern name)))
+
+(ivy-set-actions
+ 'counsel-describe-face
+ '(("c" counsel-customize-face "customize")
+   ("C" counsel-customize-face-other-window "customize other window")))
+
+;;** `counsel-faces'
+(defun counsel--faces-format-function (format)
+  "Return an `ivy-format-function' for `counsel-faces'.
+Each candidate is formatted based on the given FORMAT string."
+  (let ((formatter (lambda (name)
+                     (format format name (propertize list-faces-sample-text
+                                                     'face (intern name))))))
+    (lambda (names)
+      (ivy--format-function-generic
+       (lambda (name)
+         (funcall formatter (ivy--add-face name 'ivy-current-match)))
+       formatter names "\n"))))
+
+;;;###autoload
+(defun counsel-faces ()
+  "Complete faces with preview.
+Actions are provided by default for describing or customizing the
+selected face."
+  (interactive)
+  (let* ((names (mapcar #'symbol-name (face-list)))
+         (ivy-format-function
+          (counsel--faces-format-function
+           (format "%%-%ds %%s"
+                   (apply #'max 0 (mapcar #'string-width names))))))
+    (ivy-read "Face: " names
+              :require-match t
+              :history 'face-name-history
+              :preselect (counsel--face-at-point)
+              :sort t
+              :action counsel-describe-face-function
+              :caller 'counsel-faces)))
+
+(ivy-set-actions
+ 'counsel-faces
+ '(("c" counsel-customize-face "customize")
+   ("C" counsel-customize-face-other-window "customize other window")))
+
 ;;* Git
 ;;** `counsel-git'
 (defvar counsel-git-cmd "git ls-files --full-name --"
   "Command for `counsel-git'.")
 
-(defvar counsel--git-dir nil
-  "Store the base git directory.")
-
 (ivy-set-actions
  'counsel-git
  '(("j" find-file-other-window "other window")
@@ -1060,15 +1160,12 @@ BUFFER defaults to the current one."
 INITIAL-INPUT can be given as the initial minibuffer input."
   (interactive)
   (counsel-require-program (car (split-string counsel-git-cmd)))
-  (ivy-set-prompt 'counsel-git counsel-prompt-function)
-  (setq counsel--git-dir (expand-file-name
-                          (counsel-locate-git-root)))
-  (let* ((default-directory counsel--git-dir)
+  (let* ((default-directory (expand-file-name (counsel-locate-git-root)))
          (cands (split-string
                  (shell-command-to-string counsel-git-cmd)
                  "\n"
                  t)))
-    (ivy-read "Find file" cands
+    (ivy-read "Find file: " cands
               :initial-input initial-input
               :action #'counsel-git-action
               :caller 'counsel-git)))
@@ -1076,43 +1173,43 @@ INITIAL-INPUT can be given as the initial minibuffer 
input."
 (defun counsel-git-action (x)
   "Find file X in current Git repository."
   (with-ivy-window
-    (let ((default-directory counsel--git-dir))
+    (let ((default-directory (ivy-state-directory ivy-last)))
       (find-file x))))
 
 (defun counsel-git-occur ()
   "Occur function for `counsel-git' using `counsel-cmd-to-dired'."
-  (cd counsel--git-dir)
+  (cd (ivy-state-directory ivy-last))
   (counsel-cmd-to-dired
-   (format "%s | grep -i -E '%s' | xargs ls"
-           counsel-git-cmd
-           (counsel-unquote-regex-parens ivy--old-re))))
+   (counsel--expand-ls
+    (format "%s | grep -i -E '%s' | xargs ls"
+            counsel-git-cmd
+            (counsel--elisp-to-pcre ivy--old-re)))))
 
 (defvar counsel-dired-listing-switches "-alh"
   "Switches passed to `ls' for `counsel-cmd-to-dired'.")
 
-(defun counsel-cmd-to-dired (cmd)
+(defun counsel-cmd-to-dired (full-cmd &optional filter)
   "Adapted from `find-dired'."
-  (let ((inhibit-read-only t)
-        (full-cmd (format "%s %s | sed -e 's/^/  /'"
-                          cmd
-                          counsel-dired-listing-switches)))
+  (let ((inhibit-read-only t))
     (erase-buffer)
     (dired-mode default-directory counsel-dired-listing-switches)
     (insert "  " default-directory ":\n")
     (let ((point (point)))
-      (insert "  " cmd "\n")
+      (insert "  " full-cmd "\n")
       (dired-insert-set-properties point (point)))
     (setq-local dired-sort-inhibit t)
     (setq-local revert-buffer-function
-                (lambda (_1 _2) (counsel-cmd-to-dired cmd)))
+                (lambda (_1 _2) (counsel-cmd-to-dired full-cmd)))
     (setq-local dired-subdir-alist
                 (list (cons default-directory (point-min-marker))))
     (let ((proc (start-process-shell-command
                  "counsel-cmd" (current-buffer) full-cmd)))
+      (set-process-filter proc filter)
       (set-process-sentinel
        proc
-       (lambda (_ state)
-         (when (equal state "finished\n")
+       (lambda (process _msg)
+         (when (and (eq (process-status process) 'exit)
+                    (zerop (process-exit-status process)))
            (goto-char (point-min))
            (forward-line 2)
            (dired-move-to-filename)))))))
@@ -1130,7 +1227,7 @@ INITIAL-INPUT can be given as the initial minibuffer 
input."
 (ivy-set-occur 'counsel-git-grep 'counsel-git-grep-occur)
 (ivy-set-display-transformer 'counsel-git-grep 'counsel-git-grep-transformer)
 
-(defvar counsel-git-grep-cmd-default "git --no-pager grep --full-name -n 
--no-color -i -e \"%s\""
+(defvar counsel-git-grep-cmd-default "git --no-pager grep --full-name -n 
--no-color -i -I -e \"%s\""
   "Initial command for `counsel-git-grep'.")
 
 (defvar counsel-git-grep-cmd nil
@@ -1139,6 +1236,9 @@ INITIAL-INPUT can be given as the initial minibuffer 
input."
 (defvar counsel--git-grep-count nil
   "Store the line count in current repository.")
 
+(defvar counsel--git-grep-count-threshold 20000
+  "The maximum threshold beyond which repositories are considered large.")
+
 (defvar counsel-git-grep-history nil
   "History for `counsel-git-grep'.")
 
@@ -1149,55 +1249,37 @@ INITIAL-INPUT can be given as the initial minibuffer 
input."
 (defcustom counsel-grep-post-action-hook nil
   "Hook that runs after the point moves to the next candidate.
 Typical value: '(recenter)."
-  :type 'hook
-  :group 'ivy)
+  :type 'hook)
 
-(defun counsel-prompt-function-dir ()
-  "Return prompt appended with the parent directory."
-  (ivy-add-prompt-count
-   (let ((directory counsel--git-dir))
-     (format "%s [%s]: "
-             (ivy-state-prompt ivy-last)
-             (let ((dir-list (eshell-split-path directory)))
-               (if (> (length dir-list) 3)
-                   (apply #'concat
-                          (append '("...")
-                                  (cl-subseq dir-list (- (length dir-list) 
3))))
-                 directory))))))
-
-(defcustom counsel-git-grep-skip-counting-lines nil
-  "If non-nil, don't count lines before grepping ina git repository."
-  :type 'boolean
-  :group 'ivy)
-
-(defun counsel-git-grep-function (string &optional _pred &rest _unused)
+(defun counsel-git-grep-function (str &optional _pred &rest _unused)
   "Grep in the current git repository for STRING."
-  (if (and (or counsel-git-grep-skip-counting-lines (> counsel--git-grep-count 
20000))
-           (< (length string) 3))
-      (counsel-more-chars 3)
-    (let* ((default-directory counsel--git-dir)
-           (cmd (format counsel-git-grep-cmd
-                        (setq ivy--old-re (ivy--regex string t)))))
-      (if (and (not counsel-git-grep-skip-counting-lines) (<= 
counsel--git-grep-count 20000))
-          (split-string (shell-command-to-string cmd) "\n" t)
-        (counsel--gg-candidates (ivy--regex string))
-        nil))))
+  (or
+   (and (> counsel--git-grep-count counsel--git-grep-count-threshold)
+        (ivy-more-chars))
+   (let* ((default-directory (ivy-state-directory ivy-last))
+          (cmd (format counsel-git-grep-cmd
+                       (setq ivy--old-re (ivy--regex str t)))))
+     (if (<= counsel--git-grep-count counsel--git-grep-count-threshold)
+         (split-string (shell-command-to-string cmd) "\n" t)
+       (counsel--gg-candidates (ivy--regex str))
+       nil))))
 
 (defun counsel-git-grep-action (x)
   "Go to occurrence X in current Git repository."
   (when (string-match "\\`\\(.*?\\):\\([0-9]+\\):\\(.*\\)\\'" x)
-    (with-ivy-window
-      (let ((file-name (match-string-no-properties 1 x))
-            (line-number (match-string-no-properties 2 x)))
-        (find-file (expand-file-name file-name counsel--git-dir))
-        (goto-char (point-min))
-        (forward-line (1- (string-to-number line-number)))
-        (re-search-forward (ivy--regex ivy-text t) (line-end-position) t)
-        (swiper--ensure-visible)
-        (run-hooks 'counsel-grep-post-action-hook)
-        (unless (eq ivy-exit 'done)
-          (swiper--cleanup)
-          (swiper--add-overlays (ivy--regex ivy-text)))))))
+    (let ((file-name (match-string-no-properties 1 x))
+          (line-number (match-string-no-properties 2 x)))
+      (find-file (expand-file-name
+                  file-name
+                  (ivy-state-directory ivy-last)))
+      (goto-char (point-min))
+      (forward-line (1- (string-to-number line-number)))
+      (re-search-forward (ivy--regex ivy-text t) (line-end-position) t)
+      (swiper--ensure-visible)
+      (run-hooks 'counsel-grep-post-action-hook)
+      (unless (eq ivy-exit 'done)
+        (swiper--cleanup)
+        (swiper--add-overlays (ivy--regex ivy-text))))))
 
 (defun counsel-git-grep-matcher (regexp candidates)
   "Return REGEXP matching CANDIDATES for `counsel-git-grep'."
@@ -1227,14 +1309,12 @@ Typical value: '(recenter)."
 (defun counsel-git-grep-transformer (str)
   "Higlight file and line number in STR."
   (when (string-match "\\`\\([^:]+\\):\\([^:]+\\):" str)
-    (add-face-text-property (match-beginning 1)
-                            (match-end 1)
-                            'compilation-info
-                            nil str)
-    (add-face-text-property (match-beginning 2)
-                            (match-end 2)
-                            'compilation-line-number
-                            nil str))
+    (ivy-add-face-text-property (match-beginning 1) (match-end 1)
+                                'ivy-grep-info
+                                str)
+    (ivy-add-face-text-property (match-beginning 2) (match-end 2)
+                                'ivy-grep-line-number
+                                str))
   str)
 
 (defvar counsel-git-grep-projects-alist nil
@@ -1264,6 +1344,52 @@ files in a project.")
        (setq cmd counsel-git-grep-cmd-default)))
     (cons proj cmd)))
 
+(defun counsel--call (&rest command)
+  "Synchronously call COMMAND and return its output as a string.
+COMMAND comprises the program name followed by its arguments, as
+in `make-process'.  Signal `file-error' and emit a warning if
+COMMAND fails.  Obey file handlers based on `default-directory'."
+  (let ((stderr (make-temp-file "counsel-call-stderr-"))
+        status)
+    (unwind-protect
+         (with-temp-buffer
+           (setq status (apply #'process-file (car command) nil
+                               (list t stderr) nil (cdr command)))
+           (if (eq status 0)
+               ;; Return all output except trailing newline.
+               (buffer-substring (point-min)
+                                 (- (point)
+                                    (if (eq (bobp) (bolp))
+                                        0
+                                      1)))
+             ;; Convert process status into error list.
+             (setq status (list 'file-error
+                                (mapconcat #'identity `(,@command "failed") " 
")
+                                status))
+             ;; Print stderr contents, if any, to *Warnings* buffer.
+             (let ((msg (condition-case err
+                            (unless (zerop (cadr (insert-file-contents
+                                                  stderr nil nil nil t)))
+                              (buffer-string))
+                          (error (error-message-string err)))))
+               (lwarn 'ivy :warning "%s" (apply #'concat
+                                                (error-message-string status)
+                                                (and msg (list "\n" msg)))))
+             ;; Signal `file-error' with process status.
+             (signal (car status) (cdr status))))
+      (delete-file stderr))))
+
+(defun counsel--git-grep-count-func-default ()
+  "Default function to calculate `counsel--git-grep-count'."
+  (or (unless (eq system-type 'windows-nt)
+        (ignore-errors
+          (let ((git-dir (counsel--call "git" "rev-parse" "--git-dir")))
+            (read (counsel--call "du" "-s" git-dir)))))
+      0))
+
+(defvar counsel--git-grep-count-func #'counsel--git-grep-count-func-default
+  "Defun to calculate `counsel--git-grep-count' for `counsel-git-grep'.")
+
 ;;;###autoload
 (defun counsel-git-grep (&optional cmd initial-input)
   "Grep for a string in the current git repository.
@@ -1271,20 +1397,11 @@ When CMD is a string, use it as a \"git grep\" command.
 When CMD is non-nil, prompt for a specific \"git grep\" command.
 INITIAL-INPUT can be given as the initial minibuffer input."
   (interactive "P")
-  (ivy-set-prompt 'counsel-git-grep counsel-prompt-function)
   (let ((proj-and-cmd (counsel--git-grep-cmd-and-proj cmd))
         proj)
     (setq proj (car proj-and-cmd))
     (setq counsel-git-grep-cmd (cdr proj-and-cmd))
     (counsel-require-program (car (split-string counsel-git-grep-cmd)))
-    (setq counsel--git-dir (if proj
-                               (car proj)
-                             (counsel-locate-git-root)))
-    (unless (or proj counsel-git-grep-skip-counting-lines)
-      (setq counsel--git-grep-count
-            (if (eq system-type 'windows-nt)
-                0
-              (counsel--gg-count "" t))))
     (let ((collection-function
            (if proj
                #'counsel-git-grep-proj-function
@@ -1295,25 +1412,33 @@ INITIAL-INPUT can be given as the initial minibuffer 
input."
                  (counsel-delete-process)
                  (swiper--cleanup))
              (lambda ()
-               (swiper--cleanup)))))
-      (ivy-read "git grep" collection-function
+               (swiper--cleanup))))
+          (default-directory (if proj
+                                 (car proj)
+                               (counsel-locate-git-root))))
+      (setq counsel--git-grep-count (funcall counsel--git-grep-count-func))
+      (ivy-read "git grep: " collection-function
                 :initial-input initial-input
                 :matcher #'counsel-git-grep-matcher
-                :dynamic-collection (or proj 
counsel-git-grep-skip-counting-lines (> counsel--git-grep-count 20000))
+                :dynamic-collection (or proj
+                                        (>
+                                         counsel--git-grep-count
+                                         counsel--git-grep-count-threshold))
                 :keymap counsel-git-grep-map
                 :action #'counsel-git-grep-action
                 :unwind unwind-function
                 :history 'counsel-git-grep-history
                 :caller 'counsel-git-grep))))
+(cl-pushnew 'counsel-git-grep ivy-highlight-grep-commands)
 
 (defun counsel-git-grep-proj-function (str)
   "Grep for STR in the current git repository."
-  (if (< (length str) 3)
-      (counsel-more-chars 3)
-    (let ((regex (setq ivy--old-re
-                       (ivy--regex str t))))
-      (counsel--async-command (format counsel-git-grep-cmd regex))
-      nil)))
+  (or
+   (ivy-more-chars)
+   (let ((regex (setq ivy--old-re
+                      (ivy--regex str t))))
+     (counsel--async-command (format counsel-git-grep-cmd regex))
+     nil)))
 
 (defun counsel-git-grep-switch-cmd ()
   "Set `counsel-git-grep-cmd' to a different value."
@@ -1334,87 +1459,78 @@ INITIAL-INPUT can be given as the initial minibuffer 
input."
   "Return git grep candidates for REGEX."
   (setq counsel-gg-state -2)
   (counsel--gg-count regex)
-  (let* ((default-directory counsel--git-dir)
-         (counsel-gg-process " *counsel-gg*")
-         (proc (get-process counsel-gg-process))
-         (buff (get-buffer counsel-gg-process)))
-    (when proc
-      (delete-process proc))
-    (when buff
-      (kill-buffer buff))
-    (setq proc (start-process-shell-command
-                counsel-gg-process
-                counsel-gg-process
-                (concat
-                 (format counsel-git-grep-cmd regex)
-                 " | head -n 200")))
-    (set-process-sentinel
-     proc
-     #'counsel--gg-sentinel)))
-
-(defun counsel--gg-sentinel (process event)
-  "Sentinel function for a `counsel-git-grep' PROCESS.
-EVENT is a string describing the change."
-  (if (member event '("finished\n"
-                      "exited abnormally with code 141\n"))
-      (progn
-        (with-current-buffer (process-buffer process)
-          (setq ivy--all-candidates
-                (or (split-string (buffer-string) "\n" t)
-                    '("")))
-          (setq ivy--old-cands ivy--all-candidates))
-        (when (= 0 (cl-incf counsel-gg-state))
-          (ivy--exhibit)))
-    (if (string= event "exited abnormally with code 1\n")
-        (progn
-          (setq ivy--all-candidates '("Error"))
-          (setq ivy--old-cands ivy--all-candidates)
-          (ivy--exhibit)))))
+  (let ((default-directory (ivy-state-directory ivy-last)))
+    (set-process-filter
+     (counsel--async-command (concat (format counsel-git-grep-cmd regex)
+                                     " | head -n 200")
+                             #'counsel--gg-sentinel)
+     nil)))
+
+(defun counsel--gg-sentinel (process _msg)
+  "Sentinel function for a `counsel-git-grep' PROCESS."
+  (when (eq (process-status process) 'exit)
+    (cl-case (process-exit-status process)
+      ((0 141)
+       (with-current-buffer (process-buffer process)
+         (setq ivy--all-candidates
+               (or (split-string (buffer-string) "\n" t)
+                   '("")))
+         (setq ivy--old-cands ivy--all-candidates))
+       (when (zerop (cl-incf counsel-gg-state))
+         (ivy--exhibit)))
+      (1
+       (setq ivy--all-candidates '("Error"))
+       (setq ivy--old-cands ivy--all-candidates)
+       (ivy--exhibit)))))
+
+(defun counsel--gg-count-sentinel (process _msg)
+  "Sentinel function for a `counsel--gg-count' PROCESS."
+  (when (and (eq (process-status process) 'exit)
+             (zerop (process-exit-status process)))
+    (with-current-buffer (process-buffer process)
+      (setq ivy--full-length (string-to-number (buffer-string))))
+    (when (zerop (cl-incf counsel-gg-state))
+      (ivy--exhibit))))
 
 (defun counsel--gg-count (regex &optional no-async)
   "Count the number of results matching REGEX in `counsel-git-grep'.
 The command to count the matches is called asynchronously.
 If NO-ASYNC is non-nil, do it synchronously instead."
-  (let ((default-directory counsel--git-dir)
-        (cmd
-         (concat
-          (format
-           (replace-regexp-in-string
-            "--full-name" "-c"
-            counsel-git-grep-cmd)
-           ;; "git grep -i -c '%s'"
-           (replace-regexp-in-string
-            "-" "\\\\-"
-            (replace-regexp-in-string "'" "''" regex)))
-          " | sed 's/.*:\\(.*\\)/\\1/g' | awk '{s+=$1} END {print s}'"))
-        (counsel-ggc-process " *counsel-gg-count*"))
+  (let ((default-directory (ivy-state-directory ivy-last))
+        (cmd (concat
+              (format (replace-regexp-in-string
+                       "--full-name" "-c"
+                       counsel-git-grep-cmd)
+                      ;; "git grep -i -c '%s'"
+                      (replace-regexp-in-string
+                       "-" "\\\\-"
+                       (replace-regexp-in-string "'" "''" regex)))
+              " | sed 's/.*:\\(.*\\)/\\1/g' | awk '{s+=$1} END {print s}'")))
     (if no-async
         (string-to-number (shell-command-to-string cmd))
-      (let ((proc (get-process counsel-ggc-process))
-            (buff (get-buffer counsel-ggc-process)))
-        (when proc
-          (delete-process proc))
-        (when buff
-          (kill-buffer buff))
-        (setq proc (start-process-shell-command
-                    counsel-ggc-process
-                    counsel-ggc-process
-                    cmd))
-        (set-process-sentinel
-         proc
-         #'(lambda (process event)
-             (when (string= event "finished\n")
-               (with-current-buffer (process-buffer process)
-                 (setq ivy--full-length (string-to-number (buffer-string))))
-               (when (= 0 (cl-incf counsel-gg-state))
-                 (ivy--exhibit)))))))))
+      (set-process-filter
+       (counsel--async-command cmd #'counsel--gg-count-sentinel
+                               nil " *counsel-gg-count*")
+       nil))))
+
+(defun counsel--normalize-grep-match (str)
+  ;; Prepend ./ if necessary:
+  (unless (ivy--starts-with-dotslash str)
+    (setq str (concat "./" str)))
+  ;; Remove column info if any:
+  (save-match-data
+    (when (string-match
+           "[^\n:]+?[^\n/:]:[\t ]*[1-9][0-9]*[\t ]*:\\([1-9][0-9]*:\\)"
+           str)
+      (setq str (replace-match "" t t str 1))))
+  str)
 
 (defun counsel-git-grep-occur ()
   "Generate a custom occur buffer for `counsel-git-grep'.
 When REVERT is non-nil, regenerate the current *ivy-occur* buffer."
   (unless (eq major-mode 'ivy-occur-grep-mode)
     (ivy-occur-grep-mode)
-    (setq default-directory counsel--git-dir))
+    (setq default-directory (ivy-state-directory ivy-last)))
   (setq ivy-text
         (and (string-match "\"\\(.*\\)\"" (buffer-name))
              (match-string 1 (buffer-name))))
@@ -1422,7 +1538,7 @@ When REVERT is non-nil, regenerate the current 
*ivy-occur* buffer."
          (positive-pattern (replace-regexp-in-string
                             ;; git-grep can't handle .*?
                             "\\.\\*\\?" ".*"
-                            (if (stringp regex) regex (caar regex))))
+                            (ivy-re-to-str regex)))
          (negative-patterns
           (if (stringp regex) ""
             (mapconcat (lambda (x)
@@ -1434,16 +1550,14 @@ When REVERT is non-nil, regenerate the current 
*ivy-occur* buffer."
          cands)
     (setq cands (split-string
                  (shell-command-to-string cmd)
-                 "\n"
+                 counsel-async-split-string-re
                  t))
     ;; Need precise number of header lines for `wgrep' to work.
     (insert (format "-*- mode:grep; default-directory: %S -*-\n\n\n"
                     default-directory))
     (insert (format "%d candidates:\n" (length cands)))
     (ivy--occur-insert-lines
-     (mapcar
-      (lambda (cand) (concat "./" cand))
-      cands))))
+     (mapcar #'counsel--normalize-grep-match cands))))
 
 (defun counsel-git-grep-query-replace ()
   "Start `query-replace' with string to replace from last search string."
@@ -1461,7 +1575,9 @@ When REVERT is non-nil, regenerate the current 
*ivy-occur* buffer."
            (when (string-match "\\`\\(.*?\\):\\([0-9]+\\):\\(.*\\)\\'" cand)
              (with-ivy-window
                (let ((file-name (match-string-no-properties 1 cand)))
-                 (setq file-name (expand-file-name file-name counsel--git-dir))
+                 (setq file-name (expand-file-name
+                                  file-name
+                                  (ivy-state-directory ivy-last)))
                  (unless (member file-name done-buffers)
                    (push file-name done-buffers)
                    (find-file file-name)
@@ -1479,14 +1595,14 @@ The git command applies the stash entry where candidate 
X was found in."
 (defun counsel-git-stash ()
   "Search through all available git stashes."
   (interactive)
-  (setq counsel--git-dir (counsel-locate-git-root))
-  (let ((cands (split-string (shell-command-to-string
-                              "IFS=$'\n'
+  (let* ((default-directory (counsel-locate-git-root))
+         (cands (split-string (shell-command-to-string
+                               "IFS=$'\n'
 for i in `git stash list --format=\"%gd\"`; do
     git stash show -p $i | grep -H --label=\"$i\" \"$1\"
 done") "\n" t)))
     (ivy-read "git stash: " cands
-              :action 'counsel-git-stash-kill-action
+              :action #'counsel-git-stash-kill-action
               :caller 'counsel-git-stash)))
 
 ;;** `counsel-git-log'
@@ -1496,49 +1612,43 @@ done") "\n" t)))
 (defvar counsel-git-log-split-string-re "\ncommit "
   "The `split-string' separates when split output of `counsel-git-log-cmd'.")
 
-(defun counsel-git-log-function (input)
-  "Search for INPUT in git log."
-  (if (< (length input) 3)
-      (counsel-more-chars 3)
-    ;; `counsel--yank-pop-format-function' uses this
-    (setq ivy--old-re (funcall ivy--regex-function input))
-    (counsel--async-command
-     ;; "git log --grep" likes to have groups quoted e.g. \(foo\).
-     ;; But it doesn't like the non-greedy ".*?".
-     (format counsel-git-log-cmd
-             (replace-regexp-in-string "\\.\\*\\?" ".*"
-                                       (ivy-re-to-str ivy--old-re))))
-    nil))
+(defun counsel-git-log-function (str)
+  "Search for STR in git log."
+  (or
+   (ivy-more-chars)
+   (progn
+     ;; `counsel--yank-pop-format-function' uses this
+     (setq ivy--old-re (funcall ivy--regex-function str))
+     (counsel--async-command
+      ;; "git log --grep" likes to have groups quoted e.g. \(foo\).
+      ;; But it doesn't like the non-greedy ".*?".
+      (format counsel-git-log-cmd
+              (replace-regexp-in-string "\\.\\*\\?" ".*"
+                                        (ivy-re-to-str ivy--old-re))))
+     nil)))
 
 (defun counsel-git-log-action (x)
   "Add candidate X to kill ring."
   (message "%S" (kill-new x)))
 
-(defcustom counsel-yank-pop-truncate-radius 2
-  "When non-nil, truncate the display of long strings."
-  :type 'integer
-  :group 'ivy)
-
 ;;** `counsel-git-change-worktree'
-(autoload 'string-trim-right "subr-x")
 (defun counsel-git-change-worktree-action (git-root-dir tree)
   "Find the corresponding file in the worktree located at tree.
 The current buffer is assumed to be in a subdirectory of GIT-ROOT-DIR.
 TREE is the selected candidate."
   (let* ((new-root-dir (counsel-git-worktree-parse-root tree))
-         (tree-filename (file-relative-name (buffer-file-name) git-root-dir))
+         (tree-filename (file-relative-name buffer-file-name git-root-dir))
          (file-name (expand-file-name tree-filename new-root-dir)))
     (find-file file-name)))
 
 (defun counsel-git-worktree-list ()
   "List worktrees in the git repository containing the current buffer."
-  (setq counsel--git-dir (counsel-locate-git-root))
-  (let ((cmd-output (shell-command-to-string "git worktree list")))
-    (delete "" (split-string (string-trim-right cmd-output) "\n"))))
+  (let ((default-directory (counsel-locate-git-root)))
+    (split-string (shell-command-to-string "git worktree list") "\n" t)))
 
 (defun counsel-git-worktree-parse-root (tree)
   "Return worktree from candidate TREE."
-  (substring tree 0 (string-match " " tree)))
+  (substring tree 0 (string-match-p " " tree)))
 
 (defun counsel-git-close-worktree-files-action (root-dir)
   "Close all buffers from the worktree located at ROOT-DIR."
@@ -1558,34 +1668,36 @@ TREE is the selected candidate."
 (defun counsel-git-change-worktree ()
   "Find the file corresponding to the current buffer on a different worktree."
   (interactive)
-  (setq counsel--git-dir (counsel-locate-git-root))
-  (ivy-read "Select worktree: "
-            (or (cl-delete counsel--git-dir (counsel-git-worktree-list)
-                           :key #'counsel-git-worktree-parse-root :test 
#'string=)
-                (error "No other worktrees!"))
-            :action (lambda (tree) (counsel-git-change-worktree-action 
counsel--git-dir tree))
-            :require-match t
-            :caller 'counsel-git-change-worktree))
+  (let ((default-directory (counsel-locate-git-root)))
+    (ivy-read "Select worktree: "
+              (or (cl-delete default-directory (counsel-git-worktree-list)
+                             :key #'counsel-git-worktree-parse-root :test 
#'string=)
+                  (error "No other worktrees!"))
+              :action (lambda (tree)
+                        (counsel-git-change-worktree-action
+                         (ivy-state-directory ivy-last) tree))
+              :require-match t
+              :caller 'counsel-git-change-worktree)))
 
 ;;** `counsel-git-checkout'
 (defun counsel-git-checkout-action (branch)
-  "Call the \"git checkout BRANCH\" command.
-
-BRANCH is a string whose first word designates the command argument."
+  "Switch branch by invoking git-checkout(1).
+The command is passed a single argument comprising all characters
+in BRANCH up to, but not including, the first space
+character (#x20), or the string's end if it lacks a space."
   (shell-command
-   (format "git checkout %s" (substring branch 0 (string-match " " branch)))))
+   (format "git checkout %s" (substring branch 0 (string-match-p " " 
branch)))))
 
 (defun counsel-git-branch-list ()
-  "List branches in the git repository containing the current buffer.
-
-Does not list the currently checked out one."
-  (setq counsel--git-dir (counsel-locate-git-root))
-  (let ((cmd-output (shell-command-to-string "git branch -vv --all")))
-    (cl-mapcan
-     (lambda (str)
-       (when (string-prefix-p " " str)
-         (list (substring str (string-match "[^[:blank:]]" str)))))
-     (split-string (string-trim-right cmd-output) "\n"))))
+  "Return list of branches in the current git repository.
+Value comprises all local and remote branches bar the one
+currently checked out."
+  (cl-mapcan (lambda (line)
+               (and (string-match "\\`[[:blank:]]+" line)
+                    (list (substring line (match-end 0)))))
+             (let ((default-directory (counsel-locate-git-root)))
+               (split-string (shell-command-to-string "git branch -vv --all")
+                             "\n" t))))
 
 ;;;###autoload
 (defun counsel-git-checkout ()
@@ -1595,6 +1707,8 @@ Does not list the currently checked out one."
             :action #'counsel-git-checkout-action
             :caller 'counsel-git-checkout))
 
+(defvar counsel-yank-pop-truncate-radius)
+
 ;;;###autoload
 (defun counsel-git-log ()
   "Call the \"git log --grep\" shell command."
@@ -1602,22 +1716,29 @@ Does not list the currently checked out one."
   (let ((counsel-async-split-string-re counsel-git-log-split-string-re)
         (counsel-async-ignore-re "^[ \n]*$")
         (counsel-yank-pop-truncate-radius 5)
-        (ivy-format-function #'counsel--yank-pop-format-function)
-        (ivy-height 4))
+        (ivy-format-function #'counsel--yank-pop-format-function))
     (ivy-read "Grep log: " #'counsel-git-log-function
               :dynamic-collection t
               :action #'counsel-git-log-action
               :unwind #'counsel-delete-process
               :caller 'counsel-git-log)))
 
+(add-to-list 'ivy-height-alist '(counsel-git-log . 4))
+
 ;;* File
 ;;** `counsel-find-file'
 (defvar counsel-find-file-map
   (let ((map (make-sparse-keymap)))
     (define-key map (kbd "C-DEL") 'counsel-up-directory)
     (define-key map (kbd "C-<backspace>") 'counsel-up-directory)
+    (define-key map (kbd "C-M-y") 'counsel-yank-directory)
     map))
 
+(defun counsel-yank-directory ()
+  "Yank the current directory into the minibuffer."
+  (interactive)
+  (insert ivy--directory))
+
 (when (executable-find "git")
   (add-to-list 'ivy-ffap-url-functions 'counsel-github-url-p)
   (add-to-list 'ivy-ffap-url-functions 'counsel-emacs-url-p))
@@ -1636,8 +1757,7 @@ Does not list the currently checked out one."
 
 (defcustom counsel-root-command "sudo"
   "Command to gain root privileges."
-  :type 'string
-  :group 'ivy)
+  :type 'string)
 
 (defun counsel-find-file-as-root (x)
   "Find file X with root privileges."
@@ -1656,17 +1776,60 @@ Does not list the currently checked out one."
         (find-alternate-file file-name)
       (find-file file-name))))
 
+(defun counsel--yes-or-no-p (fmt &rest args)
+  "Ask user a yes or no question created using FMT and ARGS.
+If Emacs 26 user option `read-answer-short' is bound, use it to
+choose between `yes-or-no-p' and `y-or-n-p'; otherwise default to
+`yes-or-no-p'."
+  (funcall (if (and (boundp 'read-answer-short)
+                    (cond ((eq read-answer-short t))
+                          ((eq read-answer-short 'auto)
+                           (eq (symbol-function 'yes-or-no-p) 'y-or-n-p))))
+               #'y-or-n-p
+             #'yes-or-no-p)
+           (apply #'format fmt args)))
+
+(defun counsel-find-file-delete (x)
+  "Delete file X."
+  (when (or delete-by-moving-to-trash
+            ;; `dired-delete-file', which see, already prompts for directories
+            (eq t (car (file-attributes x)))
+            (counsel--yes-or-no-p "Delete %s? " x))
+    (dired-delete-file x dired-recursive-deletes delete-by-moving-to-trash)
+    (dired-clean-up-after-deletion x)
+    (ivy--reset-state ivy-last)))
+
+(defun counsel-find-file-move (x)
+  "Move or rename file X."
+  (ivy-read "Rename file to: " #'read-file-name-internal
+            :matcher #'counsel--find-file-matcher
+            :action (lambda (new-name)
+                      (require 'dired-aux)
+                      (dired-rename-file x new-name 1))
+            :keymap counsel-find-file-map
+            :caller 'counsel-find-file-move))
+
+(defun counsel-find-file-mkdir-action (_x)
+  (make-directory (expand-file-name ivy-text ivy--directory)))
+
 (ivy-set-actions
  'counsel-find-file
  '(("j" find-file-other-window "other window")
+   ("f" find-file-other-frame "other frame")
    ("b" counsel-find-file-cd-bookmark-action "cd bookmark")
    ("x" counsel-find-file-extern "open externally")
-   ("r" counsel-find-file-as-root "open as root")))
+   ("r" counsel-find-file-as-root "open as root")
+   ("k" counsel-find-file-delete "delete")
+   ("m" counsel-find-file-move "move or rename")
+   ("d" counsel-find-file-mkdir-action "mkdir")))
 
 (defcustom counsel-find-file-at-point nil
   "When non-nil, add file-at-point to the list of candidates."
-  :type 'boolean
-  :group 'ivy)
+  :type 'boolean)
+
+(defcustom counsel-preselect-current-file nil
+  "When non-nil, preselect current file in list of candidates."
+  :type 'boolean)
 
 (defcustom counsel-find-file-ignore-regexp nil
   "A regexp of files to ignore while in `counsel-find-file'.
@@ -1680,7 +1843,6 @@ Choosing the dotfiles option, \"\\`\\.\", might be 
convenient,
 since you can still access the dotfiles if your input starts with
 a dot. The generic way to toggle ignored files is \\[ivy-toggle-ignore],
 but the leading dot is a lot faster."
-  :group 'ivy
   :type `(choice
           (const :tag "None" nil)
           (const :tag "Dotfiles" "\\`\\.")
@@ -1691,7 +1853,12 @@ but the leading dot is a lot faster."
 (defun counsel--find-file-matcher (regexp candidates)
   "Return REGEXP matching CANDIDATES.
 Skip some dotfiles unless `ivy-text' requires them."
-  (let ((res (ivy--re-filter regexp candidates)))
+  (let ((res
+         (ivy--re-filter
+          regexp candidates
+          (lambda (re-str)
+            (lambda (x)
+              (string-match re-str (directory-file-name x)))))))
     (if (or (null ivy-use-ignore)
             (null counsel-find-file-ignore-regexp)
             (string-match "\\`\\." ivy-text))
@@ -1709,26 +1876,39 @@ Skip some dotfiles unless `ivy-text' requires them."
 (defvar counsel-find-file-speedup-remote t
   "Speed up opening remote files by disabling `find-file-hook' for them.")
 
+(defun counsel-find-file-action (x)
+  "Find file X."
+  (with-ivy-window
+    (if (and counsel-find-file-speedup-remote
+             (file-remote-p ivy--directory))
+        (let ((find-file-hook nil))
+          (find-file (expand-file-name x ivy--directory)))
+      (find-file (expand-file-name x ivy--directory)))))
+
+(defun counsel--preselect-file ()
+  "Return candidate to preselect during filename completion.
+The preselect behaviour can be customized via user options
+`counsel-find-file-at-point' and
+`counsel-preselect-current-file', which see."
+  (or
+   (when counsel-find-file-at-point
+     (require 'ffap)
+     (let ((f (ffap-guesser)))
+       (when f (expand-file-name f))))
+   (and counsel-preselect-current-file
+        buffer-file-name
+        (file-name-nondirectory buffer-file-name))))
+
 ;;;###autoload
 (defun counsel-find-file (&optional initial-input)
   "Forward to `find-file'.
 When INITIAL-INPUT is non-nil, use it in the minibuffer during completion."
   (interactive)
-  (ivy-read "Find file: " 'read-file-name-internal
+  (ivy-read "Find file: " #'read-file-name-internal
             :matcher #'counsel--find-file-matcher
             :initial-input initial-input
-            :action
-            (lambda (x)
-              (with-ivy-window
-                (if (and counsel-find-file-speedup-remote
-                         (file-remote-p ivy--directory))
-                    (let ((find-file-hook nil))
-                      (find-file (expand-file-name x ivy--directory)))
-                  (find-file (expand-file-name x ivy--directory)))))
-            :preselect (when counsel-find-file-at-point
-                         (require 'ffap)
-                         (let ((f (ffap-guesser)))
-                           (when f (expand-file-name f))))
+            :action #'counsel-find-file-action
+            :preselect (counsel--preselect-file)
             :require-match 'confirm-after-completion
             :history 'file-name-history
             :keymap counsel-find-file-map
@@ -1736,12 +1916,46 @@ When INITIAL-INPUT is non-nil, use it in the minibuffer 
during completion."
 
 (ivy-set-occur 'counsel-find-file 'counsel-find-file-occur)
 
+(defvar counsel-find-file-occur-cmd "ls -a | grep -i -E '%s' | xargs -d '\\n' 
ls -d --group-directories-first"
+  "Format string for `counsel-find-file-occur'.")
+
+(defvar counsel-find-file-occur-use-find (not (eq system-type 'gnu/linux))
+  "When non-nil, `counsel-find-file-occur' will use \"find\" as the base cmd.")
+
+(defun counsel--expand-ls (cmd)
+  "Expand CMD that ends in \"ls\" with switches."
+  (concat cmd " " counsel-dired-listing-switches " | sed -e \"s/^/  /\""))
+
+(defun counsel--occur-cmd-find ()
+  (let* ((regex (counsel--elisp-to-pcre ivy--old-re))
+         (cmd (format
+               "find . -maxdepth 1 | grep -i -E '%s' | xargs -I {} find {} 
-maxdepth 0 -ls"
+               regex)))
+    (concat
+     (counsel--cmd-to-dired-by-type "d" cmd)
+     " && "
+     (counsel--cmd-to-dired-by-type "f" cmd))))
+
+(defun counsel--cmd-to-dired-by-type (type cmd)
+  (let ((exclude-dots
+         (if (string-match "^\\." ivy-text)
+             ""
+           " | grep -v '/\\\\.'")))
+    (replace-regexp-in-string
+     " | grep"
+     (concat " -type " type exclude-dots " | grep") cmd)))
+
 (defun counsel-find-file-occur ()
+  (require 'find-dired)
   (cd ivy--directory)
-  (counsel-cmd-to-dired
-   (format
-    "ls | grep -i -E '%s' | xargs -d '\n' ls"
-    (counsel-unquote-regex-parens ivy--old-re))))
+  (if counsel-find-file-occur-use-find
+      (counsel-cmd-to-dired
+       (counsel--occur-cmd-find)
+       'find-dired-filter)
+    (counsel-cmd-to-dired
+     (counsel--expand-ls
+      (format counsel-find-file-occur-cmd
+              (counsel--elisp-to-pcre ivy--old-re))))))
 
 (defun counsel-up-directory ()
   "Go to the parent directory preselecting the current one.
@@ -1766,6 +1980,11 @@ further, make the remote prefix editable"
       (setf (ivy-state-preselect ivy-last)
             (file-name-as-directory (file-name-nondirectory cur-dir))))))
 
+(defun counsel-down-directory ()
+  "Descend into the current directory."
+  (interactive)
+  (ivy--directory-enter))
+
 (defun counsel-at-git-issue-p ()
   "When point is at an issue in a Git-versioned file, return the issue string."
   (and (looking-at "#[0-9]+")
@@ -1802,7 +2021,7 @@ further, make the remote prefix editable"
       (let ((origin (shell-command-to-string
                      "git remote get-url origin")))
         (when (string-match "git.sv.gnu.org:/srv/git/emacs.git" origin)
-          (format "http://debbugs.gnu.org/cgi/bugreport.cgi?bug=%s";
+          (format "https://debbugs.gnu.org/cgi/bugreport.cgi?bug=%s";
                   (substring url 1)))))))
 
 (defvar counsel-url-expansions-alist nil
@@ -1827,7 +2046,7 @@ If the format element is a function, more powerful
 transformations are possible.  As an example,
   '(\"\\`issue\\([[:digit:]]+\\)\\'\" .
     (lambda (word)
-      (concat \"http://debbugs.gnu.org/cgi/bugreport.cgi?bug=\";
+      (concat \"https://debbugs.gnu.org/cgi/bugreport.cgi?bug=\";
               (match-string 1 word))))
 trims the \"issue\" prefix from the word at point before creating the URL.")
 
@@ -1861,13 +2080,128 @@ result as a URL."
   (ivy-read "Recentf: " (mapcar #'substring-no-properties recentf-list)
             :action (lambda (f)
                       (with-ivy-window
-                       (find-file f)))
+                        (find-file f)))
             :caller 'counsel-recentf))
 (ivy-set-actions
  'counsel-recentf
  '(("j" find-file-other-window "other window")
+   ("f" find-file-other-frame "other frame")
    ("x" counsel-find-file-extern "open externally")))
 
+;;** `counsel-bookmark'
+(defcustom counsel-bookmark-avoid-dired nil
+  "If non-nil, open directory bookmarks with `counsel-find-file'.
+By default `counsel-bookmark' opens a dired buffer for directories."
+  :type 'boolean)
+
+(defvar bookmark-alist)
+(declare-function bookmark-location "bookmark")
+(declare-function bookmark-all-names "bookmark")
+(declare-function bookmark-get-filename "bookmark")
+(declare-function bookmark-maybe-load-default-file "bookmark")
+
+;;;###autoload
+(defun counsel-bookmark ()
+  "Forward to `bookmark-jump' or `bookmark-set' if bookmark doesn't exist."
+  (interactive)
+  (require 'bookmark)
+  (ivy-read "Create or jump to bookmark: "
+            (bookmark-all-names)
+            :history 'bookmark-history
+            :action (lambda (x)
+                      (cond ((and counsel-bookmark-avoid-dired
+                                  (member x (bookmark-all-names))
+                                  (file-directory-p (bookmark-location x)))
+                             (with-ivy-window
+                               (let ((default-directory (bookmark-location x)))
+                                 (counsel-find-file))))
+                            ((member x (bookmark-all-names))
+                             (with-ivy-window
+                               (bookmark-jump x)))
+                            (t
+                             (bookmark-set x))))
+            :caller 'counsel-bookmark))
+
+(defun counsel--apply-bookmark-fn (fn)
+  "Return a function applyinig FN to a bookmark's location."
+  (lambda (bookmark)
+    (funcall fn (bookmark-location bookmark))))
+
+(ivy-set-actions
+ 'counsel-bookmark
+ `(("d" bookmark-delete "delete")
+   ("e" bookmark-rename "edit")
+   ("x" ,(counsel--apply-bookmark-fn #'counsel-find-file-extern)
+        "open externally")
+   ("r" ,(counsel--apply-bookmark-fn #'counsel-find-file-as-root)
+        "open as root")))
+
+;;** `counsel-bookmarked-directory'
+(defun counsel-bookmarked-directory--candidates ()
+  "Get a list of bookmarked directories sorted by file path."
+  (bookmark-maybe-load-default-file)
+  (sort (cl-remove-if-not
+         #'ivy--dirname-p
+         (delq nil (mapcar #'bookmark-get-filename bookmark-alist)))
+        #'string<))
+
+;;;###autoload
+(defun counsel-bookmarked-directory ()
+  "Ivy interface for bookmarked directories.
+
+With a prefix argument, this command creates a new bookmark which points to the
+current value of `default-directory'."
+  (interactive)
+  (require 'bookmark)
+  (ivy-read "Bookmarked directory: "
+            (counsel-bookmarked-directory--candidates)
+            :caller 'counsel-bookmarked-directory
+            :action #'dired))
+
+(ivy-set-actions 'counsel-bookmarked-directory
+                 '(("j" dired-other-window "other window")
+                   ("x" counsel-find-file-extern "open externally")
+                   ("r" counsel-find-file-as-root "open as root")
+                   ("f" (lambda (dir)
+                          (let ((default-directory dir))
+                            (call-interactively #'find-file)))
+                    "find-file")))
+
+;;** `counsel-file-register'
+;;;###autoload
+(defun counsel-file-register ()
+  "Search file in register.
+
+You cannot use Emacs' normal register commands to create file
+registers.  Instead you must use the `set-register' function like
+so: `(set-register ?i \"/home/eric/.emacs.d/init.el\")'.  Now you
+can use `C-x r j i' to open that file."
+  (interactive)
+  (ivy-read "File Register: "
+            ;; Use the `register-alist' variable to filter out file
+            ;; registers.  Each entry for a file registar will have the
+            ;; following layout:
+            ;;
+            ;;     (NUMBER 'file . "string/path/to/file")
+            ;;
+            ;; So we go through each entry and see if the `cadr' is
+            ;; `eq' to the symbol `file'.  If so then add the filename
+            ;; (`cddr') which `ivy-read' will use for its choices.
+            (mapcar (lambda (register-alist-entry)
+                      (if (eq 'file (cadr register-alist-entry))
+                          (cddr register-alist-entry)))
+                    register-alist)
+            :sort t
+            :require-match t
+            :history 'counsel-file-register
+            :caller 'counsel-file-register
+            :action (lambda (register-file)
+                      (with-ivy-window (find-file register-file)))))
+
+(ivy-set-actions
+ 'counsel-file-register
+ '(("j" find-file-other-window "other window")))
+
 ;;** `counsel-locate'
 (defcustom counsel-locate-cmd (cond ((eq system-type 'darwin)
                                      'counsel-locate-cmd-noregex)
@@ -1880,7 +2214,6 @@ result as a URL."
 
 The function takes a string - the current input, and returns a
 string - the full shell command to run."
-  :group 'ivy
   :type '(choice
           (const :tag "Default" counsel-locate-cmd-default)
           (const :tag "No regex" counsel-locate-cmd-noregex)
@@ -1890,6 +2223,7 @@ string - the full shell command to run."
 (ivy-set-actions
  'counsel-locate
  '(("x" counsel-locate-action-extern "xdg-open")
+   ("r" counsel-find-file-as-root "open as root")
    ("d" counsel-locate-action-dired "dired")))
 
 (counsel-set-async-exit-code 'counsel-locate 1 "Nothing found")
@@ -1898,22 +2232,20 @@ string - the full shell command to run."
   "History for `counsel-locate'.")
 
 (defun counsel-locate-action-extern (x)
-  "Use xdg-open shell command, or corresponding system command, on X."
+  "Pass X to `xdg-open' or equivalent command via the shell."
   (interactive "FFile: ")
   (if (and (eq system-type 'windows-nt)
            (fboundp 'w32-shell-execute))
       (w32-shell-execute "open" x)
-    (call-process shell-file-name nil
-                  nil nil
-                  shell-command-switch
-                  (format "%s %s"
-                          (cl-case system-type
-                            (darwin "open")
-                            (cygwin "cygstart")
-                            (t "xdg-open"))
-                          (shell-quote-argument x)))))
-
-(defalias 'counsel-find-file-extern 'counsel-locate-action-extern)
+    (call-process-shell-command (format "%s %s"
+                                        (cl-case system-type
+                                          (darwin "open")
+                                          (cygwin "cygstart")
+                                          (t "xdg-open"))
+                                        (shell-quote-argument x))
+                                nil 0)))
+
+(defalias 'counsel-find-file-extern #'counsel-locate-action-extern)
 
 (declare-function dired-jump "dired-x")
 
@@ -1925,7 +2257,7 @@ string - the full shell command to run."
   "Return a shell command based on INPUT."
   (counsel-require-program "locate")
   (format "locate -i --regex '%s'"
-          (counsel-unquote-regex-parens
+          (counsel--elisp-to-pcre
            (ivy--regex input))))
 
 (defun counsel-locate-cmd-noregex (input)
@@ -1941,17 +2273,18 @@ string - the full shell command to run."
 (defun counsel-locate-cmd-es (input)
   "Return a shell command based on INPUT."
   (counsel-require-program "es.exe")
-  (format "es.exe -i -r %s"
-          (counsel-unquote-regex-parens
+  (format "es.exe -i -r -p %s"
+          (counsel--elisp-to-pcre
            (ivy--regex input t))))
 
 (defun counsel-locate-function (input)
   "Call the \"locate\" shell command with INPUT."
-  (if (< (length input) 3)
-      (counsel-more-chars 3)
-    (counsel--async-command
-     (funcall counsel-locate-cmd input))
-    '("" "working...")))
+  (or
+   (ivy-more-chars)
+   (progn
+     (counsel--async-command
+      (funcall counsel-locate-cmd input))
+     '("" "working..."))))
 
 ;;;###autoload
 (defun counsel-locate (&optional initial-input)
@@ -1963,14 +2296,15 @@ INITIAL-INPUT can be given as the initial minibuffer 
input."
             :dynamic-collection t
             :history 'counsel-locate-history
             :action (lambda (file)
-                      (with-ivy-window
-                        (when file
-                          (find-file file))))
+                      (when file
+                        (with-ivy-window
+                          (find-file
+                           (concat (file-remote-p default-directory) file)))))
             :unwind #'counsel-delete-process
             :caller 'counsel-locate))
 
 ;;** `counsel-fzf'
-(defvar counsel-fzf-cmd "fzf -f %s"
+(defvar counsel-fzf-cmd "fzf -f \"%s\""
   "Command for `counsel-fzf'.")
 
 (defvar counsel--fzf-dir nil
@@ -1989,29 +2323,38 @@ INITIAL-INPUT can be given as the initial minibuffer 
input."
 
 (defun counsel-fzf-function (str)
   (let ((default-directory counsel--fzf-dir))
+    (setq ivy--old-re (ivy--regex-fuzzy str))
     (counsel--async-command
-     (format counsel-fzf-cmd
-             (if (string-equal str "")
-                 "\"\""
-               (progn
-                 (setq ivy--old-re (ivy--regex-fuzzy str))
-                 str)))))
+     (list "fzf" "-f" str)))
   nil)
 
 ;;;###autoload
-(defun counsel-fzf (&optional initial-input)
-  "Call the \"fzf\" shell command.
-INITIAL-INPUT can be given as the initial minibuffer input."
-  (interactive)
-  (counsel-require-program (car (split-string counsel-fzf-cmd)))
-  (setq counsel--fzf-dir (funcall counsel-fzf-dir-function))
-  (ivy-read "> " #'counsel-fzf-function
-            :initial-input initial-input
-            :re-builder #'ivy--regex-fuzzy
-            :dynamic-collection t
-            :action #'counsel-fzf-action
-            :unwind #'counsel-delete-process
-            :caller 'counsel-fzf))
+(defun counsel-fzf (&optional initial-input initial-directory fzf-prompt)
+  "Open a file using the fzf shell command.
+INITIAL-INPUT can be given as the initial minibuffer input.
+INITIAL-DIRECTORY, if non-nil, is used as the root directory for search.
+FZF-PROMPT, if non-nil, is passed as `ivy-read' prompt argument."
+  (interactive
+   (let ((fzf-basename (car (split-string counsel-fzf-cmd))))
+     (list nil
+           (when current-prefix-arg
+             (read-directory-name (concat
+                                   fzf-basename
+                                   " in directory: "))))))
+
+  (let ((fzf-basename (car (split-string counsel-fzf-cmd))))
+    (counsel-require-program fzf-basename)
+    (setq counsel--fzf-dir
+          (or initial-directory
+              (funcall counsel-fzf-dir-function)))
+    (ivy-read (or fzf-prompt (concat fzf-basename ": "))
+              #'counsel-fzf-function
+              :initial-input initial-input
+              :re-builder #'ivy--regex-fuzzy
+              :dynamic-collection t
+              :action #'counsel-fzf-action
+              :unwind #'counsel-delete-process
+              :caller 'counsel-fzf)))
 
 (defun counsel-fzf-action (x)
   "Find file X in current fzf directory."
@@ -2023,9 +2366,10 @@ INITIAL-INPUT can be given as the initial minibuffer 
input."
   "Occur function for `counsel-fzf' using `counsel-cmd-to-dired'."
   (cd counsel--fzf-dir)
   (counsel-cmd-to-dired
-   (format
-    "%s --print0 | xargs -0 ls"
-    (format counsel-fzf-cmd ivy-text))))
+   (counsel--expand-ls
+    (format
+     "%s --print0 | xargs -0 ls"
+     (format counsel-fzf-cmd ivy-text)))))
 
 (ivy-set-occur 'counsel-fzf 'counsel-fzf-occur)
 
@@ -2078,8 +2422,11 @@ INITIAL-INPUT can be given as the initial minibuffer 
input."
                         (message (cdr x)))
               :caller 'counsel-rpm)))
 
-;;** File Jump and Dired Jump
+(defcustom counsel-file-jump-args "* -type f -not -path '*\/.git*'"
+  "Arguments for the `find-command' when using `counsel-file-jump'."
+  :type 'string)
 
+;;** `counsel-file-jump'
 ;;;###autoload
 (defun counsel-file-jump (&optional initial-input initial-directory)
   "Jump to a file below the current directory.
@@ -2095,22 +2442,24 @@ INITIAL-DIRECTORY, if non-nil, is used as the root 
directory for search."
     (ivy-read "Find file: "
               (split-string
                (shell-command-to-string
-                (concat find-program " * -type f -not -path '*\/.git*'"))
+                (concat find-program " " counsel-file-jump-args))
                "\n" t)
               :matcher #'counsel--find-file-matcher
               :initial-input initial-input
               :action (lambda (x)
                         (with-ivy-window
                           (find-file (expand-file-name x ivy--directory))))
-              :preselect (when counsel-find-file-at-point
-                           (require 'ffap)
-                           (let ((f (ffap-guesser)))
-                             (when f (expand-file-name f))))
+              :preselect (counsel--preselect-file)
               :require-match 'confirm-after-completion
               :history 'file-name-history
               :keymap counsel-find-file-map
               :caller 'counsel-file-jump)))
 
+(defcustom counsel-dired-jump-args "* -type f -not -path '*\/.git*'"
+  "Arguments for the `find-command' when using `counsel-dired-jump'."
+  :type 'string)
+
+;;** `counsel-dired-jump'
 ;;;###autoload
 (defun counsel-dired-jump (&optional initial-input initial-directory)
   "Jump to a directory (in dired) below the current directory.
@@ -2126,7 +2475,7 @@ INITIAL-DIRECTORY, if non-nil, is used as the root 
directory for search."
     (ivy-read "Directory: "
               (split-string
                (shell-command-to-string
-                (concat find-program " * -type d -not -path '*\/.git*'"))
+                (concat find-program " " counsel-dired-jump-args))
                "\n" t)
               :initial-input initial-input
               :action (lambda (d) (dired-jump nil (expand-file-name d)))
@@ -2135,33 +2484,30 @@ INITIAL-DIRECTORY, if non-nil, is used as the root 
directory for search."
 ;;* Grep
 (defun counsel--grep-mode-occur (git-grep-dir-is-file)
   "Generate a custom occur buffer for grep like commands.
-If GIT-GREP-DIR-IS-FILE is t, then `counsel--git-dir' is treated as a full
+If GIT-GREP-DIR-IS-FILE is t, then `ivy-state-directory' is treated as a full
 path to a file rather than a directory (e.g. for `counsel-grep-occur').
 
 This function expects that the candidates have already been filtered.
 It applies no filtering to ivy--all-candidates."
   (unless (eq major-mode 'ivy-occur-grep-mode)
     (ivy-occur-grep-mode))
-  (let* ((directory
-          (if git-grep-dir-is-file
-              (file-name-directory counsel--git-dir)
-            counsel--git-dir))
-         (prepend
-          (if git-grep-dir-is-file
-              (concat (file-name-nondirectory counsel--git-dir) ":")
-            "")))
+  (let ((directory
+         (if git-grep-dir-is-file
+             (file-name-directory (ivy-state-directory ivy-last))
+           (ivy-state-directory ivy-last))))
     (setq default-directory directory)
     ;; Need precise number of header lines for `wgrep' to work.
     (insert (format "-*- mode:grep; default-directory: %S -*-\n\n\n" 
default-directory))
     (insert (format "%d candidates:\n" (length ivy--all-candidates)))
     (ivy--occur-insert-lines
-     (mapcar (lambda (cand) (concat "./" prepend cand)) ivy--all-candidates))))
+     (mapcar #'counsel--normalize-grep-match ivy--all-candidates))))
 
 ;;** `counsel-ag'
 (defvar counsel-ag-map
   (let ((map (make-sparse-keymap)))
     (define-key map (kbd "C-l") 'ivy-call-and-recenter)
     (define-key map (kbd "M-q") 'counsel-git-grep-query-replace)
+    (define-key map (kbd "C-'") 'swiper-avy)
     map))
 
 (defcustom counsel-ag-base-command
@@ -2171,38 +2517,57 @@ It applies no filtering to ivy--all-candidates."
   "Format string to use in `counsel-ag-function' to construct the command.
 The %s will be replaced by optional extra ag arguments followed by the
 regex string."
-  :type 'string
-  :group 'ivy)
+  :type 'string)
+
+(defvar counsel-ag-command nil)
 
 (counsel-set-async-exit-code 'counsel-ag 1 "No matches found")
 (ivy-set-occur 'counsel-ag 'counsel-ag-occur)
 (ivy-set-display-transformer 'counsel-ag 'counsel-git-grep-transformer)
 
-(defun counsel-ag-function (string base-cmd extra-ag-args)
-  "Grep in the current directory for STRING using BASE-CMD.
-If non-nil, append EXTRA-AG-ARGS to BASE-CMD."
-  (when (null extra-ag-args)
-    (setq extra-ag-args ""))
-  (if (< (length string) 3)
-      (counsel-more-chars 3)
-    (let ((default-directory counsel--git-dir)
-          (regex (counsel-unquote-regex-parens
-                  (setq ivy--old-re
-                        (ivy--regex string)))))
-      (let* ((args-end (string-match " -- " extra-ag-args))
-             (file (if args-end
-                       (substring-no-properties extra-ag-args (+ args-end 3))
-                     ""))
-             (extra-ag-args (if args-end
-                                (substring-no-properties extra-ag-args 0 
args-end)
-                              extra-ag-args))
-             (ag-cmd (format base-cmd
-                             (concat extra-ag-args
-                                     " -- "
-                                     (shell-quote-argument regex)
-                                     file))))
-        (counsel--async-command ag-cmd)
-        nil))))
+(defconst counsel--command-args-separator "-- ")
+
+(defun counsel--split-command-args (arguments)
+  "Split ARGUMENTS into its switches and search-term parts.
+Return pair of corresponding strings (SWITCHES . SEARCH-TERM)."
+  (let ((switches "")
+        (search-term arguments))
+    (when (string-prefix-p "-" arguments)
+      (let ((index (string-match counsel--command-args-separator arguments)))
+        (when index
+          (setq search-term
+                (substring arguments (+ (length 
counsel--command-args-separator) index)))
+          (setq switches (substring arguments 0 index)))))
+    (cons switches search-term)))
+
+(defun counsel--format-ag-command (extra-args needle)
+  "Construct a complete `counsel-ag-command' as a string.
+EXTRA-ARGS is a string of the additional arguments.
+NEEDLE is the search string."
+  (format counsel-ag-command
+          (if (string-match " \\(--\\) " extra-args)
+              (replace-match needle t t extra-args 1)
+            (concat extra-args " " needle))))
+
+(defun counsel--grep-regex (str)
+  (counsel--elisp-to-pcre
+   (setq ivy--old-re
+         (funcall ivy--regex-function str))))
+
+(defun counsel-ag-function (string)
+  "Grep in the current directory for STRING."
+  (let ((command-args (counsel--split-command-args string)))
+    (let ((switches (car command-args))
+          (search-term (cdr command-args)))
+      (or
+       (let ((ivy-text search-term))
+         (ivy-more-chars))
+       (let ((default-directory (ivy-state-directory ivy-last))
+             (regex (counsel--grep-regex search-term)))
+         (counsel--async-command (counsel--format-ag-command
+                                  switches
+                                  (shell-quote-argument regex)))
+         nil)))))
 
 ;;;###autoload
 (defun counsel-ag (&optional initial-input initial-directory extra-ag-args 
ag-prompt)
@@ -2212,66 +2577,71 @@ INITIAL-DIRECTORY, if non-nil, is used as the root 
directory for search.
 EXTRA-AG-ARGS string, if non-nil, is appended to `counsel-ag-base-command'.
 AG-PROMPT, if non-nil, is passed as `ivy-read' prompt argument."
   (interactive)
-  (counsel-require-program (car (split-string counsel-ag-base-command)))
+  (setq counsel-ag-command counsel-ag-base-command)
+  (counsel-require-program (car (split-string counsel-ag-command)))
   (when current-prefix-arg
     (setq initial-directory
           (or initial-directory
               (read-directory-name (concat
-                                    (car (split-string 
counsel-ag-base-command))
+                                    (car (split-string counsel-ag-command))
                                     " in directory: "))))
     (setq extra-ag-args
           (or extra-ag-args
-              (let* ((pos (cl-position ?  counsel-ag-base-command))
-                     (command (substring-no-properties counsel-ag-base-command 
0 pos))
-                     (ag-args (replace-regexp-in-string
-                               "%s" "" (substring-no-properties 
counsel-ag-base-command pos))))
-                (read-string (format "(%s) args:" command) ag-args)))))
-  (ivy-set-prompt 'counsel-ag counsel-prompt-function)
-  (setq counsel--git-dir (or initial-directory default-directory))
-  (ivy-read (or ag-prompt (car (split-string counsel-ag-base-command)))
-            (lambda (string)
-              (counsel-ag-function string counsel-ag-base-command 
extra-ag-args))
-            :initial-input initial-input
-            :dynamic-collection t
-            :keymap counsel-ag-map
-            :history 'counsel-git-grep-history
-            :action #'counsel-git-grep-action
-            :unwind (lambda ()
-                      (counsel-delete-process)
-                      (swiper--cleanup))
-            :caller 'counsel-ag))
+              (read-from-minibuffer (format
+                                     "%s args: "
+                                     (car (split-string 
counsel-ag-command)))))))
+  (setq counsel-ag-command (counsel--format-ag-command (or extra-ag-args "") 
"%s"))
+  (let ((default-directory (or initial-directory
+                               (locate-dominating-file default-directory 
".git")
+                               default-directory)))
+    (ivy-read (or ag-prompt
+                  (concat (car (split-string counsel-ag-command)) ": "))
+              #'counsel-ag-function
+              :initial-input initial-input
+              :dynamic-collection t
+              :keymap counsel-ag-map
+              :history 'counsel-git-grep-history
+              :action #'counsel-git-grep-action
+              :unwind (lambda ()
+                        (counsel-delete-process)
+                        (swiper--cleanup))
+              :caller 'counsel-ag)))
+
+(cl-pushnew 'counsel-ag ivy-highlight-grep-commands)
 
 (defun counsel-grep-like-occur (cmd-template)
   (unless (eq major-mode 'ivy-occur-grep-mode)
     (ivy-occur-grep-mode)
-    (setq default-directory counsel--git-dir))
+    (setq default-directory (ivy-state-directory ivy-last)))
   (setq ivy-text
         (and (string-match "\"\\(.*\\)\"" (buffer-name))
              (match-string 1 (buffer-name))))
-  (let* ((cmd (format cmd-template
-                      (shell-quote-argument
-                       (counsel-unquote-regex-parens
-                        (ivy--regex ivy-text)))))
-         (cands (split-string (shell-command-to-string cmd) "\n" t)))
+  (let* ((command-args (counsel--split-command-args ivy-text))
+         (cmd (format cmd-template
+                      (concat
+                       (car command-args)
+                       (shell-quote-argument
+                        (counsel--elisp-to-pcre
+                         (ivy--regex (cdr command-args)))))))
+         (cands (split-string (shell-command-to-string cmd)
+                              counsel-async-split-string-re
+                              t)))
     ;; Need precise number of header lines for `wgrep' to work.
     (insert (format "-*- mode:grep; default-directory: %S -*-\n\n\n"
                     default-directory))
     (insert (format "%d candidates:\n" (length cands)))
     (ivy--occur-insert-lines
-     (mapcar
-      (lambda (cand) (concat "./" cand))
-      cands))))
+     (mapcar #'counsel--normalize-grep-match cands))))
 
 (defun counsel-ag-occur ()
   "Generate a custom occur buffer for `counsel-ag'."
   (counsel-grep-like-occur
-   "ag --nocolor --nogroup -- %s"))
+   counsel-ag-command))
 
 ;;** `counsel-pt'
 (defcustom counsel-pt-base-command "pt --nocolor --nogroup -e %s"
   "Alternative to `counsel-ag-base-command' using pt."
-  :type 'string
-  :group 'ivy)
+  :type 'string)
 
 ;;;###autoload
 (defun counsel-pt (&optional initial-input)
@@ -2282,6 +2652,7 @@ This uses `counsel-ag' with `counsel-pt-base-command' 
instead of
   (interactive)
   (let ((counsel-ag-base-command counsel-pt-base-command))
     (counsel-ag initial-input)))
+(cl-pushnew 'counsel-pt ivy-highlight-grep-commands)
 
 ;;** `counsel-ack'
 (defcustom counsel-ack-base-command
@@ -2290,8 +2661,7 @@ This uses `counsel-ag' with `counsel-pt-base-command' 
instead of
     (or (executable-find "ack-grep") "ack"))
    " --nocolor --nogroup %s")
   "Alternative to `counsel-ag-base-command' using ack."
-  :type 'string
-  :group 'ivy)
+  :type 'string)
 
 ;;;###autoload
 (defun counsel-ack (&optional initial-input)
@@ -2305,15 +2675,14 @@ This uses `counsel-ag' with `counsel-ack-base-command' 
replacing
 
 
 ;;** `counsel-rg'
-(defcustom counsel-rg-base-command "rg -i --no-heading --line-number --color 
never %s ."
+(defcustom counsel-rg-base-command "rg -S --no-heading --line-number --color 
never %s ."
   "Alternative to `counsel-ag-base-command' using ripgrep.
 
 Note: don't use single quotes for the regex."
-  :type 'string
-  :group 'ivy)
+  :type 'string)
 
 (counsel-set-async-exit-code 'counsel-rg 1 "No matches found")
-(ivy-set-occur 'counsel-rg 'counsel-rg-occur)
+(ivy-set-occur 'counsel-rg 'counsel-ag-occur)
 (ivy-set-display-transformer 'counsel-rg 'counsel-git-grep-transformer)
 
 ;;;###autoload
@@ -2323,62 +2692,46 @@ INITIAL-INPUT can be given as the initial minibuffer 
input.
 INITIAL-DIRECTORY, if non-nil, is used as the root directory for search.
 EXTRA-RG-ARGS string, if non-nil, is appended to `counsel-rg-base-command'.
 RG-PROMPT, if non-nil, is passed as `ivy-read' prompt argument."
-  (interactive
-   (list nil
-         (when current-prefix-arg
-           (read-directory-name (concat
-                                 (car (split-string counsel-rg-base-command))
-                                 " in directory: ")))))
-  (counsel-require-program (car (split-string counsel-rg-base-command)))
-  (ivy-set-prompt 'counsel-rg counsel-prompt-function)
-  (setq counsel--git-dir (or initial-directory
-                             (locate-dominating-file default-directory ".git")
-                             default-directory))
-  (ivy-read (or rg-prompt (car (split-string counsel-rg-base-command)))
-            (lambda (string)
-              (counsel-ag-function string counsel-rg-base-command 
extra-rg-args))
-            :initial-input initial-input
-            :dynamic-collection t
-            :keymap counsel-ag-map
-            :history 'counsel-git-grep-history
-            :action #'counsel-git-grep-action
-            :unwind (lambda ()
-                      (counsel-delete-process)
-                      (swiper--cleanup))
-            :caller 'counsel-rg))
-
-(defun counsel-rg-occur ()
-  "Generate a custom occur buffer for `counsel-rg'."
-  (counsel-grep-like-occur
-   "rg -i --no-heading --line-number --color never -- %s ."))
+  (interactive)
+  (let ((counsel-ag-base-command counsel-rg-base-command))
+    (counsel-ag initial-input initial-directory extra-rg-args rg-prompt)))
+(cl-pushnew 'counsel-rg ivy-highlight-grep-commands)
 
 ;;** `counsel-grep'
+(defvar counsel-grep-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map (kbd "C-l") 'ivy-call-and-recenter)
+    (define-key map (kbd "M-q") 'swiper-query-replace)
+    (define-key map (kbd "C-'") 'swiper-avy)
+    map))
+
 (defcustom counsel-grep-base-command "grep -E -n -e %s %s"
   "Format string used by `counsel-grep' to build a shell command.
 It should contain two %-sequences (see function `format') to be
 substituted by the search regexp and file, respectively.  Neither
 %-sequence should be contained in single quotes."
-  :type 'string
-  :group 'ivy)
+  :type 'string)
 
 (defvar counsel-grep-command nil)
 
 (defun counsel-grep-function (string)
   "Grep in the current directory for STRING."
-  (if (< (length string) 2)
-      (counsel-more-chars 2)
-    (let ((regex (counsel-unquote-regex-parens
-                  (setq ivy--old-re
-                        (ivy--regex string)))))
-      (counsel--async-command
-       (format counsel-grep-command (shell-quote-argument regex)))
-      nil)))
+  (or
+   (ivy-more-chars)
+   (let ((regex (counsel--elisp-to-pcre
+                 (setq ivy--old-re
+                       (ivy--regex string)))))
+     (counsel--async-command
+      (format counsel-grep-command (shell-quote-argument regex)))
+     nil)))
 
 (defun counsel-grep-action (x)
   "Go to candidate X."
   (with-ivy-window
     (swiper--cleanup)
-    (let ((default-directory (file-name-directory counsel--git-dir))
+    (let ((default-directory
+           (file-name-directory
+            (ivy-state-directory ivy-last)))
           file-name line-number)
       (when (cond ((string-match "\\`\\([0-9]+\\):\\(.*\\)\\'" x)
                    (setq file-name (buffer-file-name (ivy-state-buffer 
ivy-last)))
@@ -2420,12 +2773,13 @@ substituted by the search regexp and file, 
respectively.  Neither
 
 ;;;###autoload
 (defun counsel-grep (&optional initial-input)
-  "Grep for a string in the current file.
+  "Grep for a string in the file visited by the current buffer.
 When non-nil, INITIAL-INPUT is the initial search pattern."
   (interactive)
+  (unless buffer-file-name
+    (user-error "Current buffer is not visiting a file"))
   (counsel-require-program (car (split-string counsel-grep-base-command)))
   (setq counsel-grep-last-line nil)
-  (setq counsel--git-dir default-directory)
   (setq counsel-grep-command
         (format counsel-grep-base-command
                 "%s" (shell-quote-argument buffer-file-name)))
@@ -2435,12 +2789,16 @@ When non-nil, INITIAL-INPUT is the initial search 
pattern."
          (setq res (ivy-read "grep: " 'counsel-grep-function
                              :initial-input initial-input
                              :dynamic-collection t
-                             :preselect (format "%d:%s"
-                                                (line-number-at-pos)
-                                                (regexp-quote
-                                                 
(buffer-substring-no-properties
-                                                  (line-beginning-position)
-                                                  (line-end-position))))
+                             :preselect
+                             (when (< (- (line-end-position) 
(line-beginning-position)) 300)
+                               (format "%d:%s"
+                                       (line-number-at-pos)
+                                       (regexp-quote
+                                        (buffer-substring-no-properties
+                                         (line-beginning-position)
+                                         (line-end-position)))))
+
+                             :keymap counsel-grep-map
                              :history 'counsel-git-grep-history
                              :update-fn (lambda ()
                                           (counsel-grep-action 
(ivy-state-current ivy-last)))
@@ -2455,9 +2813,10 @@ When non-nil, INITIAL-INPUT is the initial search 
pattern."
 
 ;;** `counsel-grep-or-swiper'
 (defcustom counsel-grep-swiper-limit 300000
-  "When the buffer is larger than this, use `counsel-grep' instead of 
`swiper'."
-  :type 'integer
-  :group 'ivy)
+  "Buffer size threshold for `counsel-grep-or-swiper'.
+When the number of characters in a buffer exceeds this threshold,
+`counsel-grep' will be used instead of `swiper'."
+  :type 'integer)
 
 ;;;###autoload
 (defun counsel-grep-or-swiper (&optional initial-input)
@@ -2478,18 +2837,19 @@ When non-nil, INITIAL-INPUT is the initial search 
pattern."
     (counsel-grep initial-input)))
 
 ;;** `counsel-recoll'
-(defun counsel-recoll-function (string)
-  "Run recoll for STRING."
-  (if (< (length string) 3)
-      (counsel-more-chars 3)
-    (counsel--async-command
-     (format "recoll -t -b %s"
-             (shell-quote-argument string)))
-    nil))
+(defun counsel-recoll-function (str)
+  "Run recoll for STR."
+  (or
+   (ivy-more-chars)
+   (progn
+     (counsel--async-command
+      (format "recoll -t -b %s"
+              (shell-quote-argument str)))
+     nil)))
 
 ;; This command uses the recollq command line tool that comes together
 ;; with the recoll (the document indexing database) source:
-;;     http://www.lesbonscomptes.com/recoll/download.html
+;;     https://www.lesbonscomptes.com/recoll/download.html
 ;; You need to build it yourself (together with recoll):
 ;;     cd ./query && make && sudo cp recollq /usr/local/bin
 ;; You can try the GUI version of recoll with:
@@ -2514,7 +2874,8 @@ INITIAL-INPUT can be given as the initial minibuffer 
input."
                             (swiper ivy-text)))))
             :unwind #'counsel-delete-process
             :caller 'counsel-recoll))
-;;* Misc Emacs
+
+;;* Org
 ;;** `counsel-org-tag'
 (defvar counsel-org-tags nil
   "Store the current list of tags.")
@@ -2524,11 +2885,20 @@ INITIAL-INPUT can be given as the initial minibuffer 
input."
 (defvar org-indent-indentation-per-level)
 (defvar org-tags-column)
 (declare-function org-get-tags-string "org")
+(declare-function org-get-tags "org")
+(declare-function org-make-tag-string "org")
 (declare-function org-move-to-column "org-compat")
 
+(defun counsel--org-make-tag-string ()
+  (if (fboundp #'org-make-tag-string)
+      ;; >= Org 9.2
+      (org-make-tag-string (counsel--org-get-tags))
+    (with-no-warnings
+      (org-get-tags-string))))
+
 (defun counsel-org-change-tags (tags)
   "Change tags of current org headline to TAGS."
-  (let ((current (org-get-tags-string))
+  (let ((current (counsel--org-make-tag-string))
         (col (current-column))
         level)
     ;; Insert new tags at the correct column
@@ -2540,7 +2910,7 @@ INITIAL-INPUT can be given as the initial minibuffer 
input."
       ((and (equal current "") (equal tags "")))
       ((re-search-forward
         (concat "\\([ \t]*" (regexp-quote current) "\\)[ \t]*$")
-        (point-at-eol) t)
+        (line-end-position) t)
        (if (equal tags "")
            (delete-region
             (match-beginning 0)
@@ -2606,8 +2976,7 @@ otherwise continue prompting for tags."
                        (goto-char m)
                        (setq counsel-org-tags
                              (delete-dups
-                              (append (split-string (org-get-tags-string) ":" 
t)
-                                      add-tags)))
+                              (append (counsel--org-get-tags) add-tags)))
                        (counsel-org--set-tags))))))
            (counsel-org--set-tags)))
         ((eq this-command 'ivy-call)
@@ -2631,8 +3000,14 @@ otherwise continue prompting for tags."
 (declare-function org-global-tags-completion-table "org")
 (declare-function org-agenda-files "org")
 (declare-function org-agenda-set-tags "org-agenda")
+(declare-function org-tags-completion-function "org")
 
 ;;;###autoload
+(defun counsel--org-get-tags ()
+  (delete "" (condition-case nil
+                 (org-get-tags nil t)
+               (error (org-get-tags)))))
+
 (defun counsel-org-tag ()
   "Add or remove tags in `org-mode'."
   (interactive)
@@ -2644,26 +3019,27 @@ otherwise continue prompting for tags."
                               (org-agenda-error))))
             (with-current-buffer (marker-buffer hdmarker)
               (goto-char hdmarker)
-              (setq counsel-org-tags
-                    (split-string (org-get-tags-string) ":" t)))))
+              (setq counsel-org-tags (counsel--org-get-tags)))))
       (unless (org-at-heading-p)
         (org-back-to-heading t))
-      (setq counsel-org-tags (split-string (org-get-tags-string) ":" t)))
-    (let ((org-setting-tags t)
-          (org-last-tags-completion-table
-           (append org-tag-persistent-alist
-                   (or org-tag-alist (org-get-buffer-tags))
-                   (and
-                    (or org-complete-tags-always-offer-all-agenda-tags
-                        (eq major-mode 'org-agenda-mode))
-                    (org-global-tags-completion-table
-                     (org-agenda-files))))))
+      (setq counsel-org-tags (counsel--org-get-tags)))
+    (let ((org-last-tags-completion-table
+           (append (and (or org-complete-tags-always-offer-all-agenda-tags
+                            (eq major-mode 'org-agenda-mode))
+                        (org-global-tags-completion-table
+                         (org-agenda-files)))
+                   (unless (boundp 'org-current-tag-alist)
+                     org-tag-persistent-alist)
+                   (or (if (boundp 'org-current-tag-alist)
+                           org-current-tag-alist
+                         org-tag-alist)
+                       (org-get-buffer-tags)))))
       (ivy-read (counsel-org-tag-prompt)
-                (lambda (str &rest _unused)
+                (lambda (str _pred _action)
                   (delete-dups
-                   (all-completions str 'org-tags-completion-function)))
+                   (all-completions str #'org-tags-completion-function)))
                 :history 'org-tags-history
-                :action 'counsel-org-tag-action
+                :action #'counsel-org-tag-action
                 :caller 'counsel-org-tag))))
 
 ;;;###autoload
@@ -2678,96 +3054,30 @@ otherwise continue prompting for tags."
            (org-agenda-set-tags nil nil))
       (fset 'org-set-tags store))))
 
-(defcustom counsel-org-goto-display-style 'path
-  "The style for displaying headlines in `counsel-org-goto' functions.
-
-If headline, the title and the leading stars are displayed.
-
-If path, the path hierarchy is displayed.  For each entry the title is shown.
-`counsel-org-goto-separator' is used as separator between entries.
+(define-obsolete-variable-alias 'counsel-org-goto-display-tags
+    'counsel-org-headline-display-tags "0.10.0")
 
-If title or any other value, only the title of the headline is displayed.
-
-Use `counsel-org-goto-display-tags' and `counsel-org-goto-display-todo' to
-display tags and todo keywords respectively."
-  :type '(choice
-          (const :tag "Title only" title)
-          (const :tag "Headline" headline)
-          (const :tag "Path" path))
-  :group 'ivy)
-
-(defcustom counsel-org-goto-separator "/"
-  "Character(s) to separate path entries in `counsel-org-goto' functions.
-This variable has no effect unless `counsel-org-goto-display-style' is
-set to path."
-  :type 'string
-  :group 'ivy)
-
-(defcustom counsel-org-goto-display-tags nil
-  "If non-nil, display tags in `counsel-org-goto' functions."
-  :type 'boolean
-  :group 'ivy)
-
-(defcustom counsel-org-goto-display-todo nil
-  "If non-nil, display todo keywords in `counsel-org-goto' functions."
-  :type 'boolean
-  :group 'ivy)
-
-(defcustom counsel-org-goto-face-style nil
-  "The face used for displaying headlines in `counsel-org-goto' functions.
-
-If org, the default faces from `org-mode' are applied, i.e. org-level-1
-through org-level-8.  Note that no cycling is in effect, therefore headlines
-on levels 9 and higher will not be styled.
-
-If verbatim, the face used in the buffer is applied.  For simple headlines
-this is usually the same as org except that it depends on how much of the
-buffer has been completely loaded.  If your buffer exceeds a certain size,
-headlines are styled lazily depending on which parts of the tree are visible.
-Headlines which are not styled yet in the buffer will appear unstyled in the
-minibuffer as well.  If your headlines contain parts which are fontified
-differently than the headline itself (eg. todo keywords, tags, links) and you
-want these parts to be styled properly, verbatim is the way to go, otherwise
-you are probably better off using org instead.
-
-If custom, the faces defined in `counsel-org-goto-custom-faces' are applied.
-Note that no cycling is in effect, therefore if there is no face defined
-for a certain level, headlines on that level will not be styled.
-
-If nil or any other value, no face is applied to the headline.
-
-See `counsel-org-goto-display-tags' and `counsel-org-goto-display-todo' if
-you want to display tags and todo keywords in your headlines."
-  :type '(choice
-          (const :tag "Same as org-mode" org)
-          (const :tag "Verbatim" verbatim)
-          (const :tag "Custom" custom))
-  :group 'ivy)
+(defcustom counsel-org-headline-display-tags nil
+  "If non-nil, display tags in matched `org-mode' headlines."
+  :type 'boolean)
 
-(defcustom counsel-org-goto-custom-faces nil
-  "Custom faces for displaying headlines in `counsel-org-goto' functions.
+(define-obsolete-variable-alias 'counsel-org-goto-display-todo
+    'counsel-org-headline-display-todo "0.10.0")
 
-The n-th entry is used for headlines on level n, starting with n = 1.  If
-a headline is an a level for which there is no entry in the list, it will
-not be styled.
+(defcustom counsel-org-headline-display-todo nil
+  "If non-nil, display todo keywords in matched `org-mode' headlines."
+  :type 'boolean)
 
-This variable has no effect unless `counsel-org-goto-face-style' is set
-to custom."
-  :type '(repeat face)
-  :group 'ivy)
+(defcustom counsel-org-headline-display-priority nil
+  "If non-nil, display priorities in matched `org-mode' headlines."
+  :type 'boolean)
 
 (declare-function org-get-heading "org")
 (declare-function org-goto-marker-or-bmk "org")
 (declare-function outline-next-heading "outline")
 
 ;;;###autoload
-(defun counsel-org-goto ()
-  "Go to a different location in the current file."
-  (interactive)
-  (ivy-read "Goto: " (counsel-org-goto--get-headlines)
-            :history 'counsel-org-goto-history
-            :action 'counsel-org-goto-action
-            :caller 'counsel-org-goto))
+(defalias 'counsel-org-goto #'counsel-outline)
 
 ;;;###autoload
 (defun counsel-org-goto-all ()
@@ -2777,106 +3087,112 @@ to custom."
     (dolist (b (buffer-list))
       (with-current-buffer b
         (when (derived-mode-p 'org-mode)
-          (setq entries (nconc entries (counsel-org-goto--get-headlines))))))
+          (setq entries (nconc entries (counsel-outline-candidates))))))
     (ivy-read "Goto: " entries
               :history 'counsel-org-goto-history
-              :action 'counsel-org-goto-action
+              :action #'counsel-org-goto-action
               :caller 'counsel-org-goto-all)))
 
 (defun counsel-org-goto-action (x)
   "Go to headline in candidate X."
   (org-goto-marker-or-bmk (cdr x)))
 
-(defun counsel-org-goto--get-headlines ()
-  "Get all headlines from the current org buffer."
-  (save-excursion
-    (let (entries
-          start-pos
-          stack
-          (stack-level 0))
-      (goto-char (point-min))
-      (setq start-pos (or (and (org-at-heading-p)
-                               (point))
-                          (outline-next-heading)))
-      (while start-pos
-        (let ((name (org-get-heading
-                     (not counsel-org-goto-display-tags)
-                     (not counsel-org-goto-display-todo)))
-              level)
-          (search-forward " ")
-          (setq level
-                (- (length (buffer-substring-no-properties start-pos (point)))
-                   1))
-          (cond ((eq counsel-org-goto-display-style 'path)
-                 ;; Update stack. The empty entry guards against incorrect
-                 ;; headline hierarchies e.g. a level 3 headline immediately
-                 ;; following a level 1 entry.
-                 (while (<= level stack-level)
-                   (pop stack)
-                   (cl-decf stack-level))
-                 (while (> level stack-level)
-                   (push "" stack)
-                   (cl-incf stack-level))
-                 (setf (car stack) (counsel-org-goto--add-face name level))
-                 (setq name (mapconcat
-                             #'identity
-                             (reverse stack)
-                             counsel-org-goto-separator)))
-                (t
-                 (when (eq counsel-org-goto-display-style 'headline)
-                   (setq name (concat (make-string level ?*) " " name)))
-                 (setq name (counsel-org-goto--add-face name level))))
-          (push (cons name (point-marker)) entries))
-        (setq start-pos (outline-next-heading)))
-      (nreverse entries))))
-
-(defun counsel-org-goto--add-face (name level)
-  "Add face to headline NAME on LEVEL.
-The face can be customized through `counsel-org-goto-face-style'."
-  (or (and (eq counsel-org-goto-face-style 'org)
-           (propertize
-            name
-            'face
-            (concat "org-level-" (number-to-string level))))
-      (and (eq counsel-org-goto-face-style 'verbatim)
-           name)
-      (and (eq counsel-org-goto-face-style 'custom)
-           (propertize
-            name
-            'face
-            (nth (1- level) counsel-org-goto-custom-faces)))
-      (propertize name 'face 'minibuffer-prompt)))
+(defvar org-version)
+
+(defun counsel--org-get-heading-args ()
+  "Return list of arguments for `org-get-heading'.
+Try to return the right number of arguments for the current Org
+version.  Argument values are based on the
+`counsel-org-headline-display-*' user options."
+  (nbutlast (mapcar #'not (list counsel-org-headline-display-tags
+                                counsel-org-headline-display-todo
+                                counsel-org-headline-display-priority))
+            (if (if (fboundp 'func-arity)
+                    (< (cdr (func-arity #'org-get-heading)) 3)
+                  (version< org-version "9.1.1"))
+                1 0)))
 
 ;;** `counsel-org-file'
-(defun counsel-org-file-ids ()
-  (let (cands)
-    (save-excursion
-      (goto-char (point-min))
-      (while (re-search-forward "^:ID: *\\([^ \n]+\\)$" nil t)
-        (push (match-string-no-properties 1) cands)))
-    (nreverse cands)))
+(declare-function org-attach-dir "org-attach")
+(declare-function org-attach-file-list "org-attach")
+(defvar org-attach-directory)
 
 (defun counsel-org-files ()
-  (mapcar 'file-relative-name
-          (cl-mapcan
-           (lambda (id)
-             (directory-files
-              (format "data/%s/%s"
-                      (substring id 0 2)
-                      (substring id 2))
-              t "^[^.]"))
-           (counsel-org-file-ids))))
+  "Return list of all files under current Org attachment directories.
+Filenames returned are relative to `default-directory'.  For each
+attachment directory associated with the current buffer, all
+contained files are listed, so the return value could conceivably
+include attachments of other Org buffers."
+  (require 'org-attach)
+  (let* ((ids (let (res)
+                (save-excursion
+                  (goto-char (point-min))
+                  (while (re-search-forward "^:ID:[\t ]+\\(.*\\)$" nil t)
+                    (push (match-string-no-properties 1) res))
+                  (nreverse res))))
+         (files
+          (cl-remove-if-not
+           #'file-exists-p
+           (mapcar (lambda (id)
+                     (expand-file-name
+                      (concat (substring id 0 2) "/" (substring id 2))
+                      org-attach-directory))
+                   ids))))
+    (cl-mapcan
+     (lambda (dir)
+       (mapcar (lambda (file)
+                 (file-relative-name (expand-file-name file dir)))
+               (org-attach-file-list dir)))
+     files)))
 
 ;;;###autoload
 (defun counsel-org-file ()
   "Browse all attachments for current Org file."
   (interactive)
   (ivy-read "file: " (counsel-org-files)
-            :action 'counsel-locate-action-dired
+            :action #'counsel-locate-action-dired
             :caller 'counsel-org-file))
 
+;;** `counsel-org-entity'
+(defvar org-entities)
+(defvar org-entities-user)
+
+;;;###autoload
+(defun counsel-org-entity ()
+  "Complete Org entities using Ivy."
+  (interactive)
+  (require 'org)
+  (ivy-read "Entity: " (cl-loop for element in (append org-entities 
org-entities-user)
+                          unless (stringp element)
+                          collect (cons
+                                   (format "%20s | %20s | %20s | %s"
+                                           (cl-first element)    ; name
+                                           (cl-second element)   ; latex
+                                           (cl-fourth element)   ; html
+                                           (cl-seventh element)) ; utf-8
+                                   element))
+            :require-match t
+            :action '(1
+                      ("u" (lambda (candidate)
+                             (insert (cl-seventh (cdr candidate)))) "utf-8")
+                      ("o" (lambda (candidate)
+                             (insert "\\" (cl-first (cdr candidate)))) 
"org-entity")
+                      ("l" (lambda (candidate)
+                             (insert (cl-second (cdr candidate)))) "latex")
+                      ("h" (lambda (candidate)
+                             (insert (cl-fourth (cdr candidate)))) "html")
+                      ("a" (lambda (candidate)
+                             (insert (cl-fifth (cdr candidate)))) "ascii")
+                      ("L" (lambda (candidate)
+                             (insert (cl-sixth (cdr candidate))) "Latin-1")))))
+
 ;;** `counsel-org-capture'
 (defvar org-capture-templates)
+(defvar org-capture-templates-contexts)
+(declare-function org-contextualize-keys "org")
+(declare-function org-capture-goto-last-stored "org-capture")
+(declare-function org-capture-goto-target "org-capture")
+(declare-function org-capture-upgrade-templates "org-capture")
 
 ;;;###autoload
 (defun counsel-org-capture ()
@@ -2889,7 +3205,11 @@ The face can be customized through 
`counsel-org-goto-face-style'."
                    (lambda (x)
                      (when (> (length x) 2)
                        (format "%-5s %s" (nth 0 x) (nth 1 x))))
-                   (or org-capture-templates
+                   ;; We build the list of capture templates as in
+                   ;; `org-capture-select-template':
+                   (or (org-contextualize-keys
+                        (org-capture-upgrade-templates org-capture-templates)
+                        org-capture-templates-contexts)
                        '(("t" "Task" entry (file+headline "" "Tasks")
                           "* TODO %?\n  %u\n  %a")))))
             :require-match t
@@ -2899,48 +3219,159 @@ The face can be customized through 
`counsel-org-goto-face-style'."
 
 (ivy-set-actions
  'counsel-org-capture
- '(("t" (lambda (x)
-          (org-capture-goto-target (car (split-string x))))
-    "go to target")
-   ("l" (lambda (_x)
-          (org-capture-goto-last-stored))
-    "go to last stored")
-   ("p" (lambda (x)
-          (org-capture 0 (car (split-string x))))
-    "insert template at point")
-   ("c" (lambda (_x)
-          (customize-variable 'org-capture-templates))
-    "customize org-capture-templates")))
+ `(("t" ,(lambda (x)
+           (org-capture-goto-target (car (split-string x))))
+        "go to target")
+   ("l" ,(lambda (_x)
+           (org-capture-goto-last-stored))
+        "go to last stored")
+   ("p" ,(lambda (x)
+           (org-capture 0 (car (split-string x))))
+        "insert template at point")
+   ("c" ,(lambda (_x)
+           (customize-variable 'org-capture-templates))
+        "customize org-capture-templates")))
 
-;;** `counsel-mark-ring'
-(defun counsel-mark-ring ()
-  "Browse `mark-ring' interactively.
-Obeys `widen-automatically', which see."
-  (interactive)
-  (let ((cands
-         (save-excursion
-           (save-restriction
-             ;; Widen, both to save `line-number-at-pos' the trouble
-             ;; and for `buffer-substring' to work.
-             (widen)
-             (let ((fmt (format "%%%dd %%s"
-                                (length (number-to-string
-                                         (line-number-at-pos (point-max)))))))
-               (mapcar (lambda (mark)
-                         (goto-char (marker-position mark))
-                         (let ((linum (line-number-at-pos))
-                               (line  (buffer-substring
-                                       (line-beginning-position)
-                                       (line-end-position))))
-                           (cons (format fmt linum line) (point))))
-                       (sort (delete-dups (copy-sequence mark-ring)) #'<)))))))
-    (if cands
-        (ivy-read "Mark: " cands
-                  :require-match t
-                  :action (lambda (cand)
-                            (let ((pos (cdr-safe cand)))
-                              (when pos
-                                (unless (<= (point-min) pos (point-max))
+;;** `counsel-org-agenda-headlines'
+(defvar org-odd-levels-only)
+(declare-function org-set-startup-visibility "org")
+(declare-function org-show-entry "org")
+(declare-function org-map-entries "org")
+(declare-function org-heading-components "org")
+
+(defun counsel-org-agenda-headlines-action-goto (headline)
+  "Go to the `org-mode' agenda HEADLINE."
+  (find-file (nth 1 headline))
+  (org-set-startup-visibility)
+  (goto-char (nth 2 headline))
+  (org-show-entry))
+
+(ivy-set-actions
+ 'counsel-org-agenda-headlines
+ '(("g" counsel-org-agenda-headlines-action-goto "goto headline")))
+
+(defvar counsel-org-agenda-headlines-history nil
+  "History for `counsel-org-agenda-headlines'.")
+
+(define-obsolete-variable-alias 'counsel-org-goto-display-style
+    'counsel-outline-display-style "0.10.0")
+(define-obsolete-variable-alias 'counsel-org-headline-display-style
+    'counsel-outline-display-style "0.10.0")
+
+(defcustom counsel-outline-display-style 'path
+  "The style used when displaying matched outline headings.
+
+If `headline', the title is displayed with leading stars
+indicating the outline level.
+
+If `path', the path hierarchy is displayed.  For each entry the
+title is shown.  Entries are separated with
+`counsel-outline-path-separator'.
+
+If `title' or any other value, only the title of the heading is
+displayed.
+
+For displaying tags and TODO keywords in `org-mode' buffers, see
+`counsel-org-headline-display-tags' and
+`counsel-org-headline-display-todo', respectively."
+  :type '(choice
+          (const :tag "Title only" title)
+          (const :tag "Headline" headline)
+          (const :tag "Path" path)))
+
+(define-obsolete-variable-alias 'counsel-org-goto-separator
+    'counsel-outline-path-separator "0.10.0")
+(define-obsolete-variable-alias 'counsel-org-headline-path-separator
+    'counsel-outline-path-separator "0.10.0")
+
+(defcustom counsel-outline-path-separator "/"
+  "String separating path entries in matched outline headings.
+This variable has no effect unless
+`counsel-outline-display-style' is set to `path'."
+  :type 'string)
+
+(declare-function org-get-outline-path "org")
+
+(defun counsel-org-agenda-headlines--candidates ()
+  "Return a list of completion candidates for `counsel-org-agenda-headlines'."
+  (org-map-entries
+   (lambda ()
+     (let* ((components (org-heading-components))
+            (level (and (eq counsel-outline-display-style 'headline)
+                        (make-string
+                         (if org-odd-levels-only
+                             (nth 1 components)
+                           (nth 0 components))
+                         ?*)))
+            (todo (and counsel-org-headline-display-todo
+                       (nth 2 components)))
+            (path (and (eq counsel-outline-display-style 'path)
+                       (org-get-outline-path)))
+            (priority (and counsel-org-headline-display-priority
+                           (nth 3 components)))
+            (text (nth 4 components))
+            (tags (and counsel-org-headline-display-tags
+                       (nth 5 components))))
+       (list
+        (mapconcat
+         'identity
+         (cl-remove-if 'null
+                       (list
+                        level
+                        todo
+                        (and priority (format "[#%c]" priority))
+                        (mapconcat 'identity
+                                   (append path (list text))
+                                   counsel-outline-path-separator)
+                        tags))
+         " ")
+        buffer-file-name
+        (point))))
+   nil
+   'agenda))
+
+;;;###autoload
+(defun counsel-org-agenda-headlines ()
+  "Choose from headers of `org-mode' files in the agenda."
+  (interactive)
+  (require 'org)
+  (let ((minibuffer-allow-text-properties t))
+    (ivy-read "Org headline: "
+              (counsel-org-agenda-headlines--candidates)
+              :action #'counsel-org-agenda-headlines-action-goto
+              :history 'counsel-org-agenda-headlines-history
+              :caller 'counsel-org-agenda-headlines)))
+
+;;* Misc. Emacs
+;;** `counsel-mark-ring'
+(defun counsel-mark-ring ()
+  "Browse `mark-ring' interactively.
+Obeys `widen-automatically', which see."
+  (interactive)
+  (let ((cands
+         (save-excursion
+           (save-restriction
+             ;; Widen, both to save `line-number-at-pos' the trouble
+             ;; and for `buffer-substring' to work.
+             (widen)
+             (let ((fmt (format "%%%dd %%s"
+                                (length (number-to-string
+                                         (line-number-at-pos (point-max)))))))
+               (mapcar (lambda (mark)
+                         (goto-char (marker-position mark))
+                         (let ((linum (line-number-at-pos))
+                               (line  (buffer-substring
+                                       (line-beginning-position)
+                                       (line-end-position))))
+                           (cons (format fmt linum line) (point))))
+                       (sort (delete-dups (copy-sequence mark-ring)) #'<)))))))
+    (if cands
+        (ivy-read "Mark: " cands
+                  :require-match t
+                  :action (lambda (cand)
+                            (let ((pos (cdr-safe cand)))
+                              (when pos
+                                (unless (<= (point-min) pos (point-max))
                                   (if widen-automatically
                                       (widen)
                                     (error "\
@@ -2955,76 +3386,75 @@ Position of selected mark outside accessible part of 
buffer")))
 (defvar package-archive-contents)
 (declare-function package-installed-p "package")
 (declare-function package-delete "package")
+(declare-function package-desc-extras "package")
+
+(defun counsel--package-candidates ()
+  "Return completion alist for `counsel-package'."
+  (unless package--initialized
+    (package-initialize t))
+  (unless package-archive-contents
+    (package-refresh-contents))
+  (sort (mapcar (lambda (entry)
+                  (cons (let ((pkg (car entry)))
+                          (concat (if (package-installed-p pkg) "-" "+")
+                                  (symbol-name pkg)))
+                        entry))
+                package-archive-contents)
+        #'counsel--package-sort))
 
 (defun counsel-package ()
   "Install or delete packages.
 
-Packages not currently installed have a \"+\" prepended.  Selecting one
-of these will try to install it.  Currently installed packages have a
-\"-\" prepended, and selecting one of these will delete the package.
+Packages not currently installed are prefixed with \"+\", and
+selecting one of these will try to install it.
+Packages currently installed are prefixed with \"-\", and
+selecting one of these will try to delete it.
 
-Additional Actions:
+Additional actions:\\<ivy-minibuffer-map>
 
-  \\<ivy-minibuffer-map>\\[ivy-dispatching-done] d: describe package"
+  \\[ivy-dispatching-done] d: Describe package
+  \\[ivy-dispatching-done] h: Visit package's homepage"
   (interactive)
-  (unless package--initialized
-    (package-initialize t))
-  (unless package-archive-contents
-    (package-refresh-contents))
-  (let ((cands (mapcar #'counsel-package-make-package-cell
-                       package-archive-contents)))
-    (ivy-read "Packages (install +pkg or delete -pkg): "
-              (cl-sort cands #'counsel--package-sort)
-              :action #'counsel-package-action
-              :initial-input "^+ "
-              :require-match t
-              :caller 'counsel-package)))
-
-(defun counsel-package-make-package-cell (pkg)
-  "Make candidate for package PKG."
-  (let* ((pkg-sym (car pkg))
-         (pkg-name (symbol-name pkg-sym)))
-    (cons (format "%s%s"
-                  (if (package-installed-p pkg-sym) "-" "+")
-                  pkg-name)
-          pkg)))
-
-(defun counsel-package-action (pkg-cons)
-  "Delete or install package in PKG-CONS."
-  (let ((pkg (cadr pkg-cons)))
-    (if (package-installed-p pkg)
-        (package-delete
-         (cadr (assoc pkg package-alist)))
-      (package-install pkg))))
-
-(defun counsel-package-action-describe (pkg-cons)
-  "Call `describe-package' for package in PKG-CONS."
-  (describe-package (cadr pkg-cons)))
+  (require 'package)
+  (ivy-read "Packages (install +pkg or delete -pkg): "
+            (counsel--package-candidates)
+            :action #'counsel-package-action
+            :require-match t
+            :caller 'counsel-package))
 
-(declare-function package-desc-extras "package")
+(cl-pushnew '(counsel-package . "^+ ") ivy-initial-inputs-alist :key #'car)
 
-(defun counsel-package-action-homepage (pkg-cons)
-  "Open homepage for package in PKG-CONS."
-  (let* ((desc-list (cddr pkg-cons))
-         (desc (if (listp desc-list) (car desc-list) desc-list))
-         (url (cdr (assoc :url (package-desc-extras desc)))))
-    (when url
-      (require 'browse-url)
-      (browse-url url))))
+(defun counsel-package-action (package)
+  "Delete or install PACKAGE."
+  (setq package (cadr package))
+  (if (package-installed-p package)
+      (package-delete (cadr (assq package package-alist)))
+    (package-install package)))
+
+(defun counsel-package-action-describe (package)
+  "Call `describe-package' on PACKAGE."
+  (describe-package (cadr package)))
+
+(defun counsel-package-action-homepage (package)
+  "Open homepage for PACKAGE in a WWW browser."
+  (let ((url (cdr (assq :url (package-desc-extras (nth 2 package))))))
+    (if url
+        (browse-url url)
+      (message "No homepage specified for package `%s'" (nth 1 package)))))
 
 (defun counsel--package-sort (a b)
-  "Sort function for `counsel-package'.
-A is the left hand side, B the right hand side."
+  "Sort function for `counsel-package' candidates."
   (let* ((a (car a))
          (b (car b))
-         (a-inst (equal (substring a 0 1) "+"))
-         (b-inst (equal (substring b 0 1) "+")))
+         (a-inst (= (string-to-char a) ?+))
+         (b-inst (= (string-to-char b) ?+)))
     (or (and a-inst (not b-inst))
         (and (eq a-inst b-inst) (string-lessp a b)))))
 
-(ivy-set-actions 'counsel-package
-                 '(("d" counsel-package-action-describe "describe package")
-                   ("h" counsel-package-action-homepage "open package 
homepage")))
+(ivy-set-actions
+ 'counsel-package
+ '(("d" counsel-package-action-describe "describe package")
+   ("h" counsel-package-action-homepage "open package homepage")))
 
 ;;** `counsel-tmm'
 (defvar tmm-km-list nil)
@@ -3064,6 +3494,10 @@ A is the left hand side, B the right hand side."
   (counsel-tmm-prompt (tmm-get-keybind [menu-bar])))
 
 ;;** `counsel-yank-pop'
+(defcustom counsel-yank-pop-truncate-radius 2
+  "Number of context lines around `counsel-yank-pop' candidates."
+  :type 'integer)
+
 (defun counsel--yank-pop-truncate (str)
   "Truncate STR for use in `counsel-yank-pop'."
   (condition-case nil
@@ -3091,8 +3525,19 @@ A is the left hand side, B the right hand side."
 
 (defcustom counsel-yank-pop-separator "\n"
   "Separator for the kill ring strings in `counsel-yank-pop'."
-  :group 'ivy
-  :type 'string)
+  :type '(choice
+          (const :tag "Plain" "\n")
+          (const :tag "Dashes" "\n----\n")
+          string))
+
+(make-obsolete-variable
+ 'counsel-yank-pop-height
+ 'ivy-height-alist
+ "<2018-04-14 Fri>") ;; TODO: Add version tag
+
+(defcustom counsel-yank-pop-height 5
+  "The `ivy-height' of `counsel-yank-pop'."
+  :type 'integer)
 
 (defun counsel--yank-pop-format-function (cand-pairs)
   "Transform CAND-PAIRS into a string for `counsel-yank-pop'."
@@ -3107,48 +3552,184 @@ A is the left hand side, B the right hand side."
    (lambda (str)
      (counsel--yank-pop-truncate str))
    cand-pairs
-   counsel-yank-pop-separator))
+   (propertize counsel-yank-pop-separator 'face 'ivy-separator)))
+
+(defun counsel--yank-pop-position (s)
+  "Return position of S in `kill-ring' relative to last yank."
+  (or (cl-position s kill-ring-yank-pointer :test #'equal-including-properties)
+      (cl-position s kill-ring-yank-pointer :test #'equal)
+      (+ (or (cl-position s kill-ring :test #'equal-including-properties)
+             (cl-position s kill-ring :test #'equal))
+         (- (length kill-ring-yank-pointer)
+            (length kill-ring)))))
+
+(defun counsel-string-non-blank-p (s)
+  "Return non-nil if S includes non-blank characters.
+Newlines and carriage returns are considered blank."
+  (not (string-match-p "\\`[\n\r[:blank:]]*\\'" s)))
+
+(defcustom counsel-yank-pop-filter #'counsel-string-non-blank-p
+  "Unary filter function applied to `counsel-yank-pop' candidates.
+All elements of `kill-ring' for which this function returns nil
+will be destructively removed from `kill-ring' before completion.
+All blank strings are deleted from `kill-ring' by default."
+  :type '(radio
+          (function-item counsel-string-non-blank-p)
+          (function-item identity)
+          (function :tag "Other")))
+
+(defun counsel--yank-pop-kills ()
+  "Return filtered `kill-ring' for `counsel-yank-pop' completion.
+Both `kill-ring' and `kill-ring-yank-pointer' may be
+destructively modifed to eliminate duplicates under
+`equal-including-properties', satisfy `counsel-yank-pop-filter',
+and incorporate `interprogram-paste-function'."
+  ;; Protect against `kill-ring' and result of
+  ;; `interprogram-paste-function' both being nil
+  (ignore-errors (current-kill 0))
+  ;; Keep things consistent with the rest of Emacs
+  (dolist (sym '(kill-ring kill-ring-yank-pointer))
+    (set sym (cl-delete-duplicates
+              (cl-delete-if-not counsel-yank-pop-filter (symbol-value sym))
+              :test #'equal-including-properties :from-end t)))
+  kill-ring)
+
+(defcustom counsel-yank-pop-after-point nil
+  "Whether `counsel-yank-pop' yanks after point.
+Nil means `counsel-yank-pop' puts point at the end of the yanked
+text and mark at its beginning, as per the default \\[yank].
+Non-nil means `counsel-yank-pop' swaps the resulting point and
+mark, as per \\[universal-argument] \\[yank]."
+  :type 'boolean)
 
 (defun counsel-yank-pop-action (s)
-  "Insert S into the buffer, overwriting the previous yank."
+  "Like `yank-pop', but insert the kill corresponding to S.
+Signal a `buffer-read-only' error if called from a read-only
+buffer position."
   (with-ivy-window
-    (delete-region ivy-completion-beg
-                   ivy-completion-end)
-    (insert (substring-no-properties s))
-    (setq ivy-completion-end (point))))
+    (barf-if-buffer-read-only)
+    (setq last-command 'yank)
+    (setq yank-window-start (window-start))
+    ;; Avoid unexpected additions to `kill-ring'
+    (let (interprogram-paste-function)
+      (yank-pop (counsel--yank-pop-position s)))
+    (when (funcall (if counsel-yank-pop-after-point #'> #'<)
+                   (point) (mark t))
+      (exchange-point-and-mark t))))
 
 (defun counsel-yank-pop-action-remove (s)
-  "Remove S from the kill ring."
-  (setq kill-ring (delete s kill-ring)))
+  "Remove all occurrences of S from the kill ring."
+  (dolist (sym '(kill-ring kill-ring-yank-pointer))
+    (set sym (cl-delete s (symbol-value sym)
+                        :test #'equal-including-properties)))
+  ;; Update collection and preselect for next `ivy-call'
+  (setf (ivy-state-collection ivy-last) kill-ring)
+  (setf (ivy-state-preselect ivy-last)
+        (nth (min ivy--index (1- (length kill-ring)))
+             kill-ring))
+  (ivy--reset-state ivy-last))
+
+(defun counsel-yank-pop-action-rotate (s)
+  "Rotate the yanking point to S in the kill ring.
+See `current-kill' for how this interacts with the window system
+selection."
+  (let ((i (counsel--yank-pop-position s)))
+    ;; Avoid unexpected additions to `kill-ring'
+    (let (interprogram-paste-function)
+      (setf (ivy-state-preselect ivy-last) (current-kill i)))
+    ;; Manually change window system selection because `current-kill' won't
+    (when (and (zerop i)
+               yank-pop-change-selection
+               interprogram-cut-function)
+      (funcall interprogram-cut-function (car kill-ring-yank-pointer))))
+  (ivy--reset-state ivy-last))
+
+(defcustom counsel-yank-pop-preselect-last nil
+  "Whether `counsel-yank-pop' preselects the last kill by default.
+
+The command `counsel-yank-pop' always preselects the same kill
+that `yank-pop' would have inserted, given the same prefix
+argument.
+
+When `counsel-yank-pop-preselect-last' is nil (the default), the
+prefix argument of `counsel-yank-pop' defaults to 1 (as per
+`yank-pop'), which causes the next-to-last kill to be
+preselected.  Otherwise, the prefix argument defaults to 0, which
+results in the most recent kill being preselected."
+  :type 'boolean)
+
+(autoload 'xor "array")
 
 ;;;###autoload
-(defun counsel-yank-pop ()
-  "Ivy replacement for `yank-pop'."
-  (interactive)
-  (if (eq last-command 'yank)
-      (progn
-        (setq ivy-completion-end (point))
-        (setq ivy-completion-beg
-              (save-excursion
-                (search-backward (car kill-ring))
-                (point))))
-    (setq ivy-completion-beg (point))
-    (setq ivy-completion-end (point)))
-  (let ((candidates
-         (mapcar #'ivy-cleanup-string
-                 (cl-remove-if
-                  (lambda (s)
-                    (string-match "\\`[\n[:blank:]]*\\'" s))
-                  (delete-dups kill-ring)))))
-    (let ((ivy-format-function #'counsel--yank-pop-format-function)
-          (ivy-height 5))
-      (ivy-read "kill-ring: " candidates
-                :action 'counsel-yank-pop-action
-                :caller 'counsel-yank-pop))))
+(defun counsel-yank-pop (&optional arg)
+  "Ivy replacement for `yank-pop'.
+With a plain prefix argument (\\[universal-argument]),
+temporarily toggle the value of `counsel-yank-pop-after-point'.
+Any other value of ARG has the same meaning as in `yank-pop', but
+`counsel-yank-pop-preselect-last' determines its default value.
+See also `counsel-yank-pop-filter' for how to filter candidates.
+
+Note: Duplicate elements of `kill-ring' are always deleted."
+  ;; Do not specify `*' to allow browsing `kill-ring' in read-only buffers
+  (interactive "P")
+  (let ((kills (or (counsel--yank-pop-kills)
+                   (error "Kill ring is empty or blank")))
+        (preselect (let (interprogram-paste-function)
+                     (current-kill (cond ((nlistp arg)
+                                          (prefix-numeric-value arg))
+                                         (counsel-yank-pop-preselect-last 0)
+                                         (t 1))
+                                   t)))
+        (counsel-yank-pop-after-point
+         (xor (consp arg) counsel-yank-pop-after-point))
+        (ivy-format-function #'counsel--yank-pop-format-function))
+    (unless (eq last-command 'yank)
+      (push-mark))
+    (ivy-read "kill-ring: " kills
+              :require-match t
+              :preselect preselect
+              :action #'counsel-yank-pop-action
+              :caller 'counsel-yank-pop)))
+
+(add-to-list 'ivy-height-alist '(counsel-yank-pop . 5))
 
 (ivy-set-actions
  'counsel-yank-pop
- '(("d" counsel-yank-pop-action-remove "delete")))
+ '(("d" counsel-yank-pop-action-remove "delete")
+   ("r" counsel-yank-pop-action-rotate "rotate")))
+
+;;** `counsel-evil-registers'
+(make-obsolete-variable
+ 'counsel-evil-registers-height
+ 'ivy-height-alist
+ "<2018-04-14 Fri>") ;; TODO: Add version tag
+
+(defcustom counsel-evil-registers-height 5
+  "The `ivy-height' of `counsel-evil-registers'."
+  :type 'integer)
+
+(defun counsel-evil-registers ()
+  "Ivy replacement for `evil-show-registers'."
+  (interactive)
+  (if (fboundp 'evil-register-list)
+      (let ((ivy-format-function #'counsel--yank-pop-format-function))
+        (ivy-read "evil-registers: "
+                  (cl-loop for (key . val) in (evil-register-list)
+                     collect (format "[%c]: %s" key (if (stringp val) val "")))
+                  :require-match t
+                  :action #'counsel-evil-registers-action
+                  :caller 'counsel-evil-registers))
+    (user-error "Required feature `evil' not installed.")))
+
+(add-to-list 'ivy-height-alist '(counsel-evil-registers . 5))
+
+(defun counsel-evil-registers-action (s)
+  "Paste contents of S, trimming the register part.
+
+S will be of the form \"[register]: content\"."
+  (with-ivy-window
+    (insert
+     (replace-regexp-in-string "\\`\\[.*?\\]: " "" s))))
 
 ;;** `counsel-imenu'
 (defvar imenu-auto-rescan)
@@ -3169,7 +3750,7 @@ PREFIX is used to create the key."
                  (let ((key (concat
                              (when prefix
                                (concat
-                                (propertize prefix 'face 'compilation-info)
+                                (propertize prefix 'face 'ivy-grep-info)
                                 ": "))
                              (car elm))))
                    (list (cons key
@@ -3184,6 +3765,14 @@ PREFIX is used to create the key."
     (define-key map (kbd "C-l") 'ivy-call-and-recenter)
     map))
 
+(defun counsel-imenu-categorize-functions (items)
+  "Categorize all the functions of imenu."
+  (let ((fns (cl-remove-if #'listp items :key #'cdr)))
+    (if fns
+        (nconc (cl-remove-if #'nlistp items :key #'cdr)
+               `(("Functions" ,@fns)))
+      items)))
+
 ;;;###autoload
 (defun counsel-imenu ()
   "Jump to a buffer position indexed by imenu."
@@ -3195,7 +3784,8 @@ PREFIX is used to create the key."
                                        (buffer-size)
                                      imenu-auto-rescan-maxout))
          (items (imenu--make-index-alist t))
-         (items (delete (assoc "*Rescan*" items) items)))
+         (items (delete (assoc "*Rescan*" items) items))
+         (items (counsel-imenu-categorize-functions items)))
     (ivy-read "imenu items: " (counsel-imenu-get-candidates-from items)
               :preselect (thing-at-point 'symbol)
               :require-match t
@@ -3229,7 +3819,8 @@ PREFIX is used to create the key."
 The default action deletes the selected process.
 An extra action allows to switch to the process buffer."
   (interactive)
-  (list-processes--refresh)
+  (with-temp-buffer
+    (list-processes--refresh))
   (ivy-read "Process: " (mapcar #'process-name (process-list))
             :require-match t
             :action
@@ -3267,47 +3858,52 @@ An extra action allows to switch to the process buffer."
                 :action (lambda (x) (funcall action (cdr x)))
                 :require-match t
                 :caller 'counsel-ace-link))))
-;;** `counsel-expression-history'
+
+;;** `counsel-minibuffer-history'
 ;;;###autoload
 (defun counsel-expression-history ()
   "Select an element of `read-expression-history'.
 And insert it into the minibuffer.  Useful during `eval-expression'."
+  (declare (obsolete counsel-minibuffer-history "0.10.0 <2017-11-13 Mon>"))
   (interactive)
   (let ((enable-recursive-minibuffers t))
-    (ivy-read "Expr: " (delete-dups read-expression-history)
-              :action #'insert)))
+    (ivy-read "Expression: "
+              (delete-dups (copy-sequence read-expression-history))
+              :action #'insert
+              :caller 'counsel-expression-history)))
 
-;;** `counsel-shell-command-history'
 ;;;###autoload
 (defun counsel-shell-command-history ()
   "Browse shell command history."
+  (declare (obsolete counsel-minibuffer-history "0.10.0 <2017-11-13 Mon>"))
   (interactive)
-  (ivy-read "cmd: " shell-command-history
+  (ivy-read "Command: " shell-command-history
             :action #'insert
             :caller 'counsel-shell-command-history))
 
-;;** `counsel-minibuffer-history'
 ;;;###autoload
 (defun counsel-minibuffer-history ()
   "Browse minibuffer history."
   (interactive)
   (let ((enable-recursive-minibuffers t))
-    (ivy-read "Reverse-i-search: " (symbol-value minibuffer-history-variable)
+    (ivy-read "History: "
+              (delete-dups (copy-sequence
+                            (symbol-value minibuffer-history-variable)))
               :action #'insert
               :caller 'counsel-minibuffer-history)))
-(make-obsolete 'counsel-expression-history 'counsel-minibuffer-history 
"20171011")
-(make-obsolete 'counsel-shell-command-history 'counsel-minibuffer-history 
"20171011")
 
 ;;** `counsel-esh-history'
 (defun counsel--browse-history (elements)
   "Use Ivy to navigate through ELEMENTS."
   (setq ivy-completion-beg (point))
   (setq ivy-completion-end (point))
-  (ivy-read "Symbol name: "
-            (delete-dups
-             (when (> (ring-size elements) 0)
-               (ring-elements elements)))
-            :action #'ivy-completion-in-region-action))
+  (let ((cands
+         (delete-dups
+          (when (> (ring-size elements) 0)
+            (ring-elements elements)))))
+    (ivy-read "Symbol name: " cands
+              :action #'ivy-completion-in-region-action
+              :caller 'counsel-shell-history)))
 
 (defvar eshell-history-ring)
 
@@ -3351,69 +3947,664 @@ And insert it into the minibuffer.  Useful during 
`eval-expression'."
               :action (lambda (x) (call-interactively (cdr x))))
     (hydra-keyboard-quit)))
 ;;** `counsel-semantic'
-(declare-function semantic-tag-start "tag")
-(declare-function semantic-tag-of-class-p "tag")
+(declare-function semantic-tag-start "semantic/tag")
+(declare-function semantic-tag-class "semantic/tag")
+(declare-function semantic-tag-name "semantic/tag")
+(declare-function semantic-tag-put-attribute "semantic/tag")
+(declare-function semantic-tag-get-attribute "semantic/tag")
 (declare-function semantic-fetch-tags "semantic")
+(declare-function semantic-format-tag-summarize "semantic/format")
+(declare-function semantic-active-p "semantic/fw")
 
-(defun counsel-semantic-action (tag)
+(defun counsel-semantic-action (x)
   "Got to semantic TAG."
-  (with-ivy-window
-    (goto-char (semantic-tag-start tag))))
+  (goto-char (semantic-tag-start (cdr x))))
+
+(defvar counsel-semantic-history nil
+  "History for `counsel-semantic'.")
+
+(defun counsel-semantic-format-tag (tag)
+  "Return a pretty string representation of TAG."
+  (let ((depth (or (semantic-tag-get-attribute tag :depth) 0))
+        (parent (semantic-tag-get-attribute tag :parent)))
+    (concat (make-string (* depth 2) ?\ )
+            (if parent
+                (concat "(" parent ") ")
+              "")
+            (semantic-format-tag-summarize tag nil t))))
+
+(defun counsel-flatten-forest (func treep forest)
+  "Use FUNC and TREEP to flatten FOREST.
+FUNC is applied to each node.
+TREEP is used to expand internal nodes."
+  (cl-labels ((reducer (forest out depth)
+                (dolist (tree forest)
+                  (let ((this (cons (funcall func tree depth) out))
+                        (leafs (funcall treep tree)))
+                    (setq out
+                          (if leafs
+                              (reducer leafs this (1+ depth))
+                            this))))
+                out))
+    (nreverse (reducer forest nil 0))))
+
+(defun counsel-semantic-tags ()
+  "Fetch semantic tags."
+  (counsel-flatten-forest
+   (lambda (tree depth)
+     (semantic-tag-put-attribute tree :depth depth))
+   (lambda (tag)
+     (when (eq (semantic-tag-class tag) 'type)
+       (let ((name (semantic-tag-name tag)))
+         (mapcar
+          (lambda (x) (semantic-tag-put-attribute x :parent name))
+          (semantic-tag-get-attribute tag :members)))))
+   (semantic-fetch-tags)))
 
 (defun counsel-semantic ()
   "Jump to a semantic tag in the current buffer."
   (interactive)
-  (let ((tags
-         (mapcar
-          (lambda (tag)
-            (if (semantic-tag-of-class-p tag 'function)
-                (cons
-                 (propertize
-                  (car tag)
-                  'face 'font-lock-function-name-face)
-                 (cdr tag))
-              tag))
-          (semantic-fetch-tags))))
+  (let ((tags (mapcar
+               (lambda (x)
+                 (cons
+                  (counsel-semantic-format-tag x)
+                  x))
+               (counsel-semantic-tags))))
     (ivy-read "tag: " tags
-              :action 'counsel-semantic-action)))
+              :action #'counsel-semantic-action
+              :history 'counsel-semantic-history
+              :caller 'counsel-semantic)))
+
+(defun counsel-semantic-or-imenu ()
+  (interactive)
+  (require 'semantic/fw)
+  (if (semantic-active-p)
+      (counsel-semantic)
+    (counsel-imenu)))
 
 ;;** `counsel-outline'
-(defun counsel-outline-candidates ()
-  "Return outline candidates."
-  (let (cands)
+(define-obsolete-variable-alias 'counsel-org-goto-face-style
+    'counsel-outline-face-style "0.10.0")
+
+(defcustom counsel-outline-face-style nil
+  "Determines how to style outline headings during completion.
+
+If `org', the faces `counsel-outline-1' through
+`counsel-outline-8' are applied in a similar way to Org.
+Note that no cycling is performed, so headings on levels 9 and
+higher are not styled.
+
+If `verbatim', the faces used in the buffer are applied.  For
+simple headlines in `org-mode' buffers, this is usually the same
+as the `org' setting, except that it depends on how much of the
+buffer has been completely fontified.  If your buffer exceeds a
+certain size, headlines are styled lazily depending on which
+parts of the tree are visible.  Headlines which are not yet
+styled in the buffer will appear unstyled in the minibuffer as
+well.  If your headlines contain parts which are fontified
+differently than the headline itself (e.g. TODO keywords, tags,
+links) and you want these parts to be styled properly, verbatim
+is the way to go; otherwise you are probably better off using the
+`org' setting instead.
+
+If `custom', the faces defined in `counsel-outline-custom-faces'
+are applied.  Note that no cycling is performed, so if there is
+no face defined for a certain level, headlines on that level will
+not be styled.
+
+If `nil', all headlines are highlighted using
+`counsel-outline-default'.
+
+For displaying tags and TODO keywords in `org-mode' buffers, see
+`counsel-org-headline-display-tags' and
+`counsel-org-headline-display-todo', respectively."
+  :type '(choice
+          (const :tag "Same as org-mode" org)
+          (const :tag "Verbatim" verbatim)
+          (const :tag "Custom" custom)
+          (const :tag "No style" nil)))
+
+(define-obsolete-variable-alias 'counsel-org-goto-custom-faces
+    'counsel-outline-custom-faces "0.10.0")
+
+(defcustom counsel-outline-custom-faces nil
+  "List of faces for custom display of outline headings.
+
+Headlines on level N are fontified with the Nth entry of this
+list, starting with N = 1.  Headline levels with no corresponding
+entry in this list will not be styled.
+
+This variable has no effect unless `counsel-outline-face-style'
+is set to `custom'."
+  :type '(repeat face))
+
+(defvar counsel-outline-settings
+  '((emacs-lisp-mode
+     :outline-regexp ";;[;*]+[\s\t]+"
+     :outline-level counsel-outline-level-emacs-lisp)
+    (org-mode
+     :outline-title counsel-outline-title-org
+     :action counsel-org-goto-action
+     :history counsel-org-goto-history
+     :caller counsel-org-goto)
+    (markdown-mode                      ; markdown-mode package
+     :outline-title counsel-outline-title-markdown)
+    (latex-mode                         ; Built-in mode or AUCTeX package
+     :outline-title counsel-outline-title-latex))
+  "Alist mapping major modes to their `counsel-outline' settings.
+
+Each entry is a pair (MAJOR-MODE . PLIST).  `counsel-outline'
+checks whether an entry exists for the current buffer's
+MAJOR-MODE and, if so, loads the settings specified by PLIST
+instead of the default settings.  The following settings are
+recognized:
+
+- `:outline-regexp' is a regexp to match the beggining of an
+  outline heading.  It is only checked at the start of a line and
+  so need not start with \"^\".
+  Defaults to the value of the variable `outline-regexp'.
+
+- `:outline-level' is a function of no arguments which computes
+  the level of an outline heading.  It is called with point at
+  the beginning of `outline-regexp' and with the match data
+  corresponding to `outline-regexp'.
+  Defaults to the value of the variable `outline-level'.
+
+- `:outline-title' is a function of no arguments which returns
+  the title of an outline heading.  It is called with point at
+  the end of `outline-regexp' and with the match data
+  corresponding to `outline-regexp'.
+  Defaults to the function `counsel-outline-title'.
+
+- `:action' is a function of one argument, the selected outline
+  heading to jump to.  This setting corresponds directly to its
+  eponymous `ivy-read' keyword, as used by `counsel-outline', so
+  the type of the function's argument depends on the value
+  returned by `counsel-outline-candidates'.
+  Defaults to the function `counsel-outline-action'.
+
+- `:history' is a history list, usually a symbol representing a
+  history list variable.  It corresponds directly to its
+  eponymous `ivy-read' keyword, as used by `counsel-outline'.
+  Defaults to the symbol `counsel-outline-history'.
+
+- `:caller' is a symbol to uniquely idendify the caller to
+  `ivy-read'.  It corresponds directly to its eponymous
+  `ivy-read' keyword, as used by `counsel-outline'.
+  Defaults to the symbol `counsel-outline'.
+
+- `:display-style' overrides the variable
+  `counsel-outline-display-style'.
+
+- `:path-separator' overrides the variable
+  `counsel-outline-path-separator'.
+
+- `:face-style' overrides the variable
+  `counsel-outline-face-style'.
+
+- `:custom-faces' overrides the variable
+  `counsel-outline-custom-faces'.")
+
+(defun counsel-outline-title ()
+  "Return title of current outline heading.
+Intended as a value for the `:outline-title' setting in
+`counsel-outline-settings', which see."
+  (buffer-substring (point) (line-end-position)))
+
+(defun counsel-outline-title-org ()
+  "Return title of current outline heading.
+Like `counsel-outline-title' (which see), but for `org-mode'
+buffers."
+  (apply #'org-get-heading (counsel--org-get-heading-args)))
+
+(defun counsel-outline-title-markdown ()
+  "Return title of current outline heading.
+Like `counsel-outline-title' (which see), but for
+`markdown-mode' (from the eponymous package) buffers."
+  ;; `outline-regexp' is set by `markdown-mode' to match both setext
+  ;; (underline) and atx (hash) headings (see
+  ;; `markdown-regex-header').
+  (or (match-string 1)                  ; setext heading title
+      (match-string 5)))                ; atx heading title
+
+(defun counsel-outline-title-latex ()
+  "Return title of current outline heading.
+Like `counsel-outline-title' (which see), but for `latex-mode'
+buffers."
+  ;; `outline-regexp' is set by `latex-mode' (see variable
+  ;; `latex-section-alist' for the built-in mode or function
+  ;; `LaTeX-outline-regexp' for the AUCTeX package) to match section
+  ;; macros, in which case we get the section name, as well as
+  ;; `\appendix', `\documentclass', `\begin{document}', and
+  ;; `\end{document}', in which case we simply return that.
+  (if (and (assoc (match-string 1)                             ; Macro name
+                  (or (bound-and-true-p LaTeX-section-list)    ; AUCTeX
+                      (bound-and-true-p latex-section-alist))) ; Built-in
+           (progn
+             ;; Point is at end of macro name, skip stars and optional args
+             (skip-chars-forward "*")
+             (while (looking-at-p "\\[")
+               (forward-list))
+             ;; First mandatory arg should be section title
+             (looking-at-p "{")))
+      (buffer-substring (1+ (point)) (1- (progn (forward-list) (point))))
+    (buffer-substring (line-beginning-position) (point))))
+
+(defun counsel-outline-level-emacs-lisp ()
+  "Return level of current outline heading.
+Like `lisp-outline-level', but adapted for the `:outline-level'
+setting in `counsel-outline-settings', which see."
+  (if (looking-at ";;\\([;*]+\\)")
+      (- (match-end 1) (match-beginning 1))
+    (funcall outline-level)))
+
+(defvar counsel-outline--preselect 0
+  "Index of the presected candidate in `counsel-outline'.")
+
+(defun counsel-outline-candidates (&optional settings)
+  "Return an alist of outline heading completion candidates.
+Each element is a pair (HEADING . MARKER), where the string
+HEADING is located at the position of MARKER.  SETTINGS is a
+plist entry from `counsel-outline-settings', which see."
+  (let ((bol-regex (concat "^\\(?:"
+                           (or (plist-get settings :outline-regexp)
+                               outline-regexp)
+                           "\\)"))
+        (outline-title-fn (or (plist-get settings :outline-title)
+                              #'counsel-outline-title))
+        (outline-level-fn (or (plist-get settings :outline-level)
+                              outline-level))
+        (display-style (or (plist-get settings :display-style)
+                           counsel-outline-display-style))
+        (path-separator (or (plist-get settings :path-separator)
+                            counsel-outline-path-separator))
+        (face-style (or (plist-get settings :face-style)
+                        counsel-outline-face-style))
+        (custom-faces (or (plist-get settings :custom-faces)
+                          counsel-outline-custom-faces))
+        (stack-level 0)
+        (orig-point (point))
+        cands name level marker stack)
     (save-excursion
+      (setq counsel-outline--preselect 0)
       (goto-char (point-min))
-      (while (re-search-forward outline-regexp nil t)
-        (skip-chars-forward " ")
-        (push (cons (buffer-substring-no-properties
-                     (point) (line-end-position))
-                    (line-beginning-position))
-              cands))
-      (nreverse cands))))
+      (while (re-search-forward bol-regex nil t)
+        (save-excursion
+          (setq name (or (save-match-data
+                           (funcall outline-title-fn))
+                         ""))
+          (goto-char (match-beginning 0))
+          (setq marker (point-marker))
+          (setq level (funcall outline-level-fn))
+          (cond ((eq display-style 'path)
+                 ;; Update stack.  The empty entry guards against incorrect
+                 ;; headline hierarchies, e.g. a level 3 headline
+                 ;; immediately following a level 1 entry.
+                 (while (<= level stack-level)
+                   (pop stack)
+                   (cl-decf stack-level))
+                 (while (> level stack-level)
+                   (push "" stack)
+                   (cl-incf stack-level))
+                 (setf (car stack)
+                       (counsel-outline--add-face
+                        name level face-style custom-faces))
+                 (setq name (mapconcat #'identity
+                                       (reverse stack)
+                                       path-separator)))
+                (t
+                 (when (eq display-style 'headline)
+                   (setq name (concat (make-string level ?*) " " name)))
+                 (setq name (counsel-outline--add-face
+                             name level face-style custom-faces))))
+          (push (cons name marker) cands))
+        (unless (or (string= name "")
+                    (< orig-point marker))
+          (cl-incf counsel-outline--preselect))))
+    (nreverse cands)))
+
+(defun counsel-outline--add-face (name level &optional face-style custom-faces)
+  "Set the `face' property on headline NAME according to LEVEL.
+FACE-STYLE and CUSTOM-FACES override `counsel-outline-face-style'
+and `counsel-outline-custom-faces', respectively, which determine
+the face to apply."
+  (let ((face (cl-case (or face-style counsel-outline-face-style)
+                (verbatim)
+                (custom (nth (1- level)
+                             (or custom-faces counsel-outline-custom-faces)))
+                (org (format "counsel-outline-%d" level))
+                (t 'counsel-outline-default))))
+    (when face
+      (put-text-property 0 (length name) 'face face name)))
+  name)
 
 (defun counsel-outline-action (x)
   "Go to outline X."
-  (with-ivy-window
-    (goto-char (cdr x))))
+  (goto-char (cdr x)))
 
+;;;###autoload
 (defun counsel-outline ()
-  "Jump to outline with completion."
+  "Jump to an outline heading with completion."
+  (interactive)
+  (let ((settings (cdr (assq major-mode counsel-outline-settings))))
+    (ivy-read "Outline: " (counsel-outline-candidates settings)
+              :action (or (plist-get settings :action)
+                          #'counsel-outline-action)
+              :history (or (plist-get settings :history)
+                           'counsel-outline-history)
+              :preselect (max (1- counsel-outline--preselect) 0)
+              :caller (or (plist-get settings :caller)
+                          'counsel-outline))))
+
+;;** `counsel-ibuffer'
+(defvar counsel-ibuffer--buffer-name nil
+  "Name of the buffer to use for `counsel-ibuffer'.")
+
+;;;###autoload
+(defun counsel-ibuffer (&optional name)
+  "Use ibuffer to switch to another buffer.
+NAME specifies the name of the buffer (defaults to \"*Ibuffer*\")."
+  (interactive)
+  (setq counsel-ibuffer--buffer-name (or name "*Ibuffer*"))
+  (ivy-read "Switch to buffer: " (counsel-ibuffer--get-buffers)
+            :history 'counsel-ibuffer-history
+            :action #'counsel-ibuffer-visit-buffer
+            :caller 'counsel-ibuffer))
+
+(declare-function ibuffer-update "ibuffer")
+(declare-function ibuffer-current-buffer "ibuffer")
+(declare-function ibuffer-forward-line "ibuffer")
+(defvar ibuffer-movement-cycle)
+
+(defun counsel-ibuffer--get-buffers ()
+  "Return list of buffer-related lines in Ibuffer as strings."
+  (let ((oldbuf (get-buffer counsel-ibuffer--buffer-name)))
+    (unless oldbuf
+      ;; Avoid messing with the user's precious window/frame configuration.
+      (save-window-excursion
+        (let ((display-buffer-overriding-action
+               '(display-buffer-same-window (inhibit-same-window . nil))))
+          (ibuffer nil counsel-ibuffer--buffer-name nil t))))
+    (with-current-buffer counsel-ibuffer--buffer-name
+      (when oldbuf
+        ;; Forcibly update possibly stale existing buffer.
+        (ibuffer-update nil t))
+      (goto-char (point-min))
+      (let ((ibuffer-movement-cycle nil)
+            entries)
+        (while (not (eobp))
+          (ibuffer-forward-line 1 t)
+          (let ((buf (ibuffer-current-buffer)))
+            ;; We are only interested in buffers we can actually visit.
+            ;; This filters out headings and other unusable entries.
+            (when (buffer-live-p buf)
+              (push (cons (buffer-substring-no-properties
+                           (line-beginning-position)
+                           (line-end-position))
+                          buf)
+                    entries))))
+        (nreverse entries)))))
+
+(defun counsel-ibuffer-visit-buffer (x)
+  "Switch to buffer of candidate X."
+  (switch-to-buffer (cdr x)))
+
+(defun counsel-ibuffer-visit-buffer-other-window (x)
+  "Switch to buffer of candidate X in another window."
+  (switch-to-buffer-other-window (cdr x)))
+
+(defun counsel-ibuffer-visit-ibuffer (_)
+  "Switch to Ibuffer buffer."
+  (switch-to-buffer counsel-ibuffer--buffer-name))
+
+(ivy-set-actions
+ 'counsel-ibuffer
+ '(("j" counsel-ibuffer-visit-buffer-other-window "other window")
+   ("v" counsel-ibuffer-visit-ibuffer "switch to Ibuffer")))
+
+;;** `counsel-switch-to-shell-buffer'
+(defun counsel--buffers-with-mode (mode)
+  "Return names of buffers with MODE as their `major-mode'."
+  (let (bufs)
+    (dolist (buf (buffer-list))
+      (when (eq (buffer-local-value 'major-mode buf) mode)
+        (push (buffer-name buf) bufs)))
+    (nreverse bufs)))
+
+(declare-function shell-mode "shell")
+
+;;;###autoload
+(defun counsel-switch-to-shell-buffer ()
+  "Switch to a shell buffer, or create one."
   (interactive)
-  (ivy-read "outline: " (counsel-outline-candidates)
-            :action #'counsel-outline-action))
+  (ivy-read "Shell buffer: " (counsel--buffers-with-mode #'shell-mode)
+            :action #'counsel--switch-to-shell
+            :caller 'counsel-switch-to-shell-buffer))
+
+(defun counsel--switch-to-shell (name)
+  "Display shell buffer with NAME and select its window.
+Reuse any existing window already displaying the named buffer.
+If there is no such buffer, start a new `shell' with NAME."
+  (if (get-buffer name)
+      (pop-to-buffer name '((display-buffer-reuse-window
+                             display-buffer-same-window)
+                            (inhibit-same-window . nil)
+                            (reusable-frames . visible)))
+    (shell name)))
+
+;;** `counsel-unicode-char'
+(defvar counsel-unicode-char-history nil
+  "History for `counsel-unicode-char'.")
+
+(defun counsel--unicode-names ()
+  "Return formatted and sorted list of `ucs-names'.
+The result of `ucs-names' is mostly, but not completely, sorted,
+so this function ensures lexicographic order."
+  (let* (cands
+         (table (ucs-names))            ; Either hash map or alist
+         (fmt (lambda (name code)       ; Common format function
+                (let ((cand (format "%06X %-58s %c" code name code)))
+                  (put-text-property 0 1 'code code cand)
+                  (push cand cands)))))
+    (if (not (hash-table-p table))
+        ;; Support `ucs-names' returning an alist in Emacs < 26.
+        ;; The result of `ucs-names' comes pre-reversed so no need to repeat.
+        (dolist (entry table)
+          (funcall fmt (car entry) (cdr entry)))
+      (maphash fmt table)
+      ;; Reverse to speed up sorting
+      (setq cands (nreverse cands)))
+    (sort cands #'string-lessp)))
+
+(defvar counsel--unicode-table
+  (lazy-completion-table counsel--unicode-table counsel--unicode-names)
+  "Lazy completion table for `counsel-unicode-char'.
+Candidates comprise `counsel--unicode-names', which see.")
 
-;;* Misc OS
+;;;###autoload
+(defun counsel-unicode-char (&optional count)
+  "Insert COUNT copies of a Unicode character at point.
+COUNT defaults to 1."
+  (interactive "p")
+  (let ((ivy-sort-max-size (expt 256 6)))
+    (setq ivy-completion-beg (point))
+    (setq ivy-completion-end (point))
+    (ivy-read "Unicode name: " counsel--unicode-table
+              :history 'counsel-unicode-char-history
+              :sort t
+              :action (lambda (name)
+                        (with-ivy-window
+                          (delete-region ivy-completion-beg ivy-completion-end)
+                          (setq ivy-completion-beg (point))
+                          (insert-char (get-text-property 0 'code name) count)
+                          (setq ivy-completion-end (point))))
+              :caller 'counsel-unicode-char)))
+
+;;** `counsel-colors'
+(defun counsel-colors-action-insert-hex (color)
+  "Insert the hexadecimal RGB value of COLOR."
+  (insert (get-text-property 0 'hex color)))
+
+(defun counsel-colors-action-kill-hex (color)
+  "Kill the hexadecimal RGB value of COLOR."
+  (kill-new (get-text-property 0 'hex color)))
+
+;;** `counsel-colors-emacs'
+(defvar counsel-colors-emacs-history ()
+  "History for `counsel-colors-emacs'.")
+
+(defun counsel-colors--name-to-hex (name)
+  "Return hexadecimal RGB value of color with NAME.
+
+Return nil if NAME does not designate a valid color."
+  (let ((rgb (color-name-to-rgb name)))
+    (when rgb
+      (apply #'color-rgb-to-hex rgb))))
+
+(defvar shr-color-visible-luminance-min)
+(declare-function shr-color-visible "shr-color")
+
+(defun counsel-colors--formatter (formatter)
+  "Turn FORMATTER into format function for `counsel-colors-*'.
+Return closure suitable for `ivy-format-function'."
+  (require 'shr-color)
+  (lambda (colors)
+    (ivy--format-function-generic
+     (lambda (color)
+       (let* ((hex (get-text-property 0 'hex color))
+              (shr-color-visible-luminance-min 100)
+              (fg (cadr (shr-color-visible hex "black" t))))
+         (propertize (funcall formatter color)
+                     'face (list :foreground fg :background hex))))
+     formatter colors "\n")))
+
+;;;###autoload
+(defun counsel-colors-emacs ()
+  "Show a list of all supported colors for a particular frame.
+
+You can insert or kill the name or hexadecimal RGB value of the
+selected color."
+  (interactive)
+  (let* ((colors
+          (delete nil
+                  (mapcar (lambda (cell)
+                            (let* ((name (car cell))
+                                   (dups (cdr cell))
+                                   (hex (counsel-colors--name-to-hex name)))
+                              (when hex
+                                (propertize name 'hex hex 'dups dups))))
+                          (list-colors-duplicates))))
+         (fmt (format "%%-%ds %%s %%s%%s"
+                      (apply #'max 0 (mapcar #'string-width colors))))
+         (blank (make-string 10 ?\s))
+         (ivy-format-function
+          (counsel-colors--formatter
+           (lambda (color)
+             (let ((fg (list :foreground color)))
+               (format fmt color
+                       (propertize (get-text-property 0 'hex color) 'face fg)
+                       (propertize blank 'face (list :background color))
+                       (propertize (mapconcat (lambda (dup)
+                                                (concat " " dup))
+                                              (get-text-property 0 'dups color)
+                                              ",")
+                                   'face fg)))))))
+    (ivy-read "Emacs color: " colors
+              :require-match t
+              :history 'counsel-colors-emacs-history
+              :action #'insert
+              :caller 'counsel-colors-emacs)))
+
+(ivy-set-actions
+ 'counsel-colors-emacs
+ '(("h" counsel-colors-action-insert-hex "insert hexadecimal value")
+   ("H" counsel-colors-action-kill-hex "kill hexadecimal value")))
+
+;;** `counsel-colors-web'
+(defvar shr-color-html-colors-alist)
+
+(defun counsel-colors--web-alist ()
+  "Return list of CSS colours for `counsel-colors-web'."
+  (require 'shr-color)
+  (let* ((alist (copy-alist shr-color-html-colors-alist))
+         (mp  (assoc "MediumPurple"  alist))
+         (pvr (assoc "PaleVioletRed" alist))
+         (rp  (assoc "RebeccaPurple" alist)))
+    ;; Backport GNU Emacs bug#30377
+    (when mp (setcdr mp "#9370db"))
+    (when pvr (setcdr pvr "#db7093"))
+    (unless rp (push (cons "rebeccapurple" "#663399") alist))
+    (sort (mapcar (lambda (cell)
+                    (propertize (downcase (car cell))
+                                'hex (downcase (cdr cell))))
+                  alist)
+          #'string-lessp)))
+
+(defvar counsel-colors-web-history ()
+  "History for `counsel-colors-web'.")
+
+;;;###autoload
+(defun counsel-colors-web ()
+  "Show a list of all W3C web colors for use in CSS.
+
+You can insert or kill the name or hexadecimal RGB value of the
+selected color."
+  (interactive)
+  (let* ((colors (counsel-colors--web-alist))
+         (blank (make-string 10 ?\s))
+         (fmt (format "%%-%ds %%s %%s"
+                      (apply #'max 0 (mapcar #'string-width colors))))
+         (ivy-format-function
+          (counsel-colors--formatter
+           (lambda (color)
+             (let ((hex (get-text-property 0 'hex color)))
+               (format fmt color
+                       (propertize hex 'face (list :foreground hex))
+                       (propertize blank 'face (list :background hex))))))))
+    (ivy-read "Web color: " colors
+              :require-match t
+              :history 'counsel-colors-web-history
+              :sort t
+              :action #'insert
+              :caller 'counsel-colors-web)))
+
+(ivy-set-actions
+ 'counsel-colors-web
+ '(("h" counsel-colors-action-insert-hex "insert hexadecimal value")
+   ("H" counsel-colors-action-kill-hex "kill hexadecimal value")))
+
+;;* Misc. OS
 ;;** `counsel-rhythmbox'
 (declare-function dbus-call-method "dbus")
 (declare-function dbus-get-property "dbus")
 
+(defun counsel--run (&rest program-and-args)
+  (let ((name (mapconcat #'identity program-and-args " ")))
+    (apply #'start-process name nil program-and-args)
+    name))
+
+(defun counsel--sl (cmd)
+  "Shell command to list."
+  (split-string (shell-command-to-string cmd) "\n" t))
+
 (defun counsel-rhythmbox-play-song (song)
   "Let Rhythmbox play SONG."
-  (let ((service "org.gnome.Rhythmbox3")
+  (let ((first (string= (shell-command-to-string "pidof rhythmbox") ""))
+        (service "org.gnome.Rhythmbox3")
         (path "/org/mpris/MediaPlayer2")
         (interface "org.mpris.MediaPlayer2.Player"))
+    (when first
+      (counsel--run "nohup" "rhythmbox")
+      (sit-for 1.5))
     (dbus-call-method :session service path interface
-                      "OpenUri" (cdr song))))
+                      "OpenUri" (cdr song))
+    (let ((id (and first
+                   (cdr (counsel--wmctrl-parse
+                         (shell-command-to-string
+                          "wmctrl -l -p | grep $(pidof rhythmbox)"))))))
+      (when id
+        (sit-for 0.2)
+        (counsel--run "wmctrl" "-ic" id)))))
 
 (defun counsel-rhythmbox-enqueue-song (song)
   "Let Rhythmbox enqueue SONG."
@@ -3423,6 +4614,21 @@ And insert it into the minibuffer.  Useful during 
`eval-expression'."
     (dbus-call-method :session service path interface
                       "AddToQueue" (cdr song))))
 
+(defun counsel-rhythmbox-toggle-shuffle (_song)
+  "Toggle Rhythmbox shuffle setting."
+  (let* ((old-order (counsel--call "dconf" "read" 
"/org/gnome/rhythmbox/player/play-order"))
+         (new-order (if (string= old-order "'shuffle'")
+                        "'linear'"
+                      "'shuffle'")))
+    (counsel--call
+     "dconf"
+     "write"
+     "/org/gnome/rhythmbox/player/play-order"
+     new-order)
+    (message (if (string= new-order "'shuffle'")
+                 "shuffle on"
+               "shuffle off"))))
+
 (defvar counsel-rhythmbox-history nil
   "History for `counsel-rhythmbox'.")
 
@@ -3443,11 +4649,11 @@ And insert it into the minibuffer.  Useful during 
`eval-expression'."
       (format "%s - %s - %s" artist album title))))
 
 ;;;###autoload
-(defun counsel-rhythmbox ()
+(defun counsel-rhythmbox (&optional arg)
   "Choose a song from the Rhythmbox library to play or enqueue."
-  (interactive)
+  (interactive "P")
   (require 'dbus)
-  (unless counsel-rhythmbox-songs
+  (when (or arg (null counsel-rhythmbox-songs))
     (let* ((service "org.gnome.Rhythmbox3")
            (path "/org/gnome/UPnP/MediaServer2/Library/all")
            (interface "org.gnome.UPnP.MediaContainer2")
@@ -3473,21 +4679,44 @@ And insert it into the minibuffer.  Useful during 
`eval-expression'."
             :action
             '(1
               ("p" counsel-rhythmbox-play-song "Play song")
-              ("e" counsel-rhythmbox-enqueue-song "Enqueue song"))
+              ("e" counsel-rhythmbox-enqueue-song "Enqueue song")
+              ("s" counsel-rhythmbox-toggle-shuffle "Shuffle on/off"))
             :caller 'counsel-rhythmbox))
 
 ;;** `counsel-linux-app'
+(require 'xdg nil t)
+
+(defalias 'counsel--xdg-data-home
+  (if (fboundp 'xdg-data-home)
+      #'xdg-data-home
+    (lambda ()
+      (let ((directory (getenv "XDG_DATA_HOME")))
+        (if (or (null directory) (string= directory ""))
+            "~/.local/share"
+          directory))))
+  "Compatibility shim for `xdg-data-home'.")
+
+(defalias 'counsel--xdg-data-dirs
+  (if (fboundp 'xdg-data-dirs)
+      #'xdg-data-dirs
+    (lambda ()
+      (let ((path (getenv "XDG_DATA_DIRS")))
+        (if (or (null path) (string= path ""))
+            '("/usr/local/share" "/usr/share")
+          (parse-colon-path path)))))
+  "Compatibility shim for `xdg-data-dirs'.")
+
 (defcustom counsel-linux-apps-directories
-  '("/usr/local/share/applications/" "/usr/share/applications/")
+  (mapcar (lambda (dir) (expand-file-name "applications" dir))
+          (cons (counsel--xdg-data-home)
+                (counsel--xdg-data-dirs)))
   "Directories in which to search for applications (.desktop files)."
-  :group 'ivy
-  :type '(list directory))
+  :type '(repeat directory))
 
-(defcustom counsel-linux-app-format-function 
'counsel-linux-app-format-function-default
+(defcustom counsel-linux-app-format-function 
#'counsel-linux-app-format-function-default
   "Function to format Linux application names the `counsel-linux-app' menu.
 The format function will be passed the application's name, comment, and command
 as arguments."
-  :group 'ivy
   :type '(choice
           (const :tag "Command : Name - Comment" 
counsel-linux-app-format-function-default)
           (const :tag "Name - Comment (Command)" 
counsel-linux-app-format-function-name-first)
@@ -3495,6 +4724,56 @@ as arguments."
           (const :tag "Command" counsel-linux-app-format-function-command-only)
           (function :tag "Custom")))
 
+(defface counsel-application-name
+  '((t :inherit font-lock-builtin-face))
+  "Face for displaying executable names."
+  :group 'ivy-faces)
+
+(defface counsel-outline-1
+  '((t :inherit org-level-1))
+  "Face for displaying level 1 headings."
+  :group 'ivy-faces)
+
+(defface counsel-outline-2
+  '((t :inherit org-level-2))
+  "Face for displaying level 2 headings."
+  :group 'ivy-faces)
+
+(defface counsel-outline-3
+  '((t :inherit org-level-3))
+  "Face for displaying level 3 headings."
+  :group 'ivy-faces)
+
+(defface counsel-outline-4
+  '((t :inherit org-level-4))
+  "Face for displaying level 4 headings."
+  :group 'ivy-faces)
+
+(defface counsel-outline-5
+  '((t :inherit org-level-5))
+  "Face for displaying level 5 headings."
+  :group 'ivy-faces)
+
+(defface counsel-outline-6
+  '((t :inherit org-level-6))
+  "Face for displaying level 6 headings."
+  :group 'ivy-faces)
+
+(defface counsel-outline-7
+  '((t :inherit org-level-7))
+  "Face for displaying level 7 headings."
+  :group 'ivy-faces)
+
+(defface counsel-outline-8
+  '((t :inherit org-level-8))
+  "Face for displaying level 8 headings."
+  :group 'ivy-faces)
+
+(defface counsel-outline-default
+  '((t :inherit minibuffer-prompt))
+  "Face for displaying headings."
+  :group 'ivy-faces)
+
 (defvar counsel-linux-apps-faulty nil
   "List of faulty desktop files.")
 
@@ -3515,7 +4794,9 @@ as arguments."
 NAME is the name of the application, COMMENT its comment and EXEC
 the command to launch it."
   (format "% -45s: %s%s"
-          (propertize exec 'face 'font-lock-builtin-face)
+          (propertize
+           (ivy--truncate-string exec 45)
+           'face 'counsel-application-name)
           name
           (if comment
               (concat " - " comment)
@@ -3529,7 +4810,7 @@ EXEC is the command to launch the application."
           (if comment
               (concat " - " comment)
             "")
-          (propertize exec 'face 'font-lock-builtin-face)))
+          (propertize exec 'face 'counsel-application-name)))
 
 (defun counsel-linux-app-format-function-name-only (name comment _exec)
   "Format Linux application names with the NAME (and COMMENT) only."
@@ -3554,11 +4835,61 @@ This function always returns its elements in a stable 
order."
         (let ((dir (file-name-as-directory dir)))
           (dolist (file (directory-files-recursively dir ".*\\.desktop$"))
             (let ((id (subst-char-in-string ?/ ?- (file-relative-name file 
dir))))
-              (unless (gethash id hash)
+              (when (and (not (gethash id hash)) (file-readable-p file))
                 (push (cons id file) result)
                 (puthash id file hash)))))))
     result))
 
+(defun counsel-linux-app--parse-file (file)
+  (with-temp-buffer
+    (insert-file-contents file)
+    (goto-char (point-min))
+    (let ((start (re-search-forward "^\\[Desktop Entry\\] *$" nil t))
+          (end (re-search-forward "^\\[" nil t))
+          (visible t)
+          name comment exec)
+      (catch 'break
+        (unless start
+          (push file counsel-linux-apps-faulty)
+          (message "Warning: File %s has no [Desktop Entry] group" file)
+          (throw 'break nil))
+
+        (goto-char start)
+        (when (re-search-forward "^\\(Hidden\\|NoDisplay\\) *= *\\(1\\|true\\) 
*$" end t)
+          (setq visible nil))
+        (setq name (match-string 1))
+
+        (goto-char start)
+        (unless (re-search-forward "^Type *= *Application *$" end t)
+          (throw 'break nil))
+        (setq name (match-string 1))
+
+        (goto-char start)
+        (unless (re-search-forward "^Name *= *\\(.+\\)$" end t)
+          (push file counsel-linux-apps-faulty)
+          (message "Warning: File %s has no Name" file)
+          (throw 'break nil))
+        (setq name (match-string 1))
+
+        (goto-char start)
+        (when (re-search-forward "^Comment *= *\\(.+\\)$" end t)
+          (setq comment (match-string 1)))
+
+        (goto-char start)
+        (unless (re-search-forward "^Exec *= *\\(.+\\)$" end t)
+          ;; Don't warn because this can technically be a valid desktop file.
+          (throw 'break nil))
+        (setq exec (match-string 1))
+
+        (goto-char start)
+        (when (re-search-forward "^TryExec *= *\\(.+\\)$" end t)
+          (let ((try-exec (match-string 1)))
+            (unless (locate-file try-exec exec-path nil #'file-executable-p)
+              (throw 'break nil))))
+        (propertize
+         (funcall counsel-linux-app-format-function name comment exec)
+         'visible visible)))))
+
 (defun counsel-linux-apps-parse (desktop-entries-alist)
   "Parse the given alist of Linux desktop entries.
 Each entry in DESKTOP-ENTRIES-ALIST is a pair of ((id . file-name)).
@@ -3567,56 +4898,11 @@ Any desktop entries that fail to parse are recorded in
   (let (result)
     (setq counsel-linux-apps-faulty nil)
     (dolist (entry desktop-entries-alist result)
-      (let ((id (car entry))
-            (file (cdr entry)))
-        (with-temp-buffer
-          (insert-file-contents file)
-          (goto-char (point-min))
-          (let ((start (re-search-forward "^\\[Desktop Entry\\] *$" nil t))
-                (end (re-search-forward "^\\[" nil t))
-                name comment exec)
-            (catch 'break
-              (unless start
-                (push file counsel-linux-apps-faulty)
-                (message "Warning: File %s has no [Desktop Entry] group" file)
-                (throw 'break nil))
-
-              (goto-char start)
-              (when (re-search-forward "^\\(Hidden\\|NoDisplay\\) *= 
*\\(1\\|true\\) *$" end t)
-                (throw 'break nil))
-              (setq name (match-string 1))
-
-              (goto-char start)
-              (unless (re-search-forward "^Type *= *Application *$" end t)
-                (throw 'break nil))
-              (setq name (match-string 1))
-
-              (goto-char start)
-              (unless (re-search-forward "^Name *= *\\(.+\\)$" end t)
-                (push file counsel-linux-apps-faulty)
-                (message "Warning: File %s has no Name" file)
-                (throw 'break nil))
-              (setq name (match-string 1))
-
-              (goto-char start)
-              (when (re-search-forward "^Comment *= *\\(.+\\)$" end t)
-                (setq comment (match-string 1)))
-
-              (goto-char start)
-              (unless (re-search-forward "^Exec *= *\\(.+\\)$" end t)
-                ;; Don't warn because this can technically be a valid desktop 
file.
-                (throw 'break nil))
-              (setq exec (match-string 1))
-
-              (goto-char start)
-              (when (re-search-forward "^TryExec *= *\\(.+\\)$" end t)
-                (let ((try-exec (match-string 1)))
-                  (unless (locate-file try-exec exec-path nil 
#'file-executable-p)
-                    (throw 'break nil))))
-
-              (push
-               (cons (funcall counsel-linux-app-format-function name comment 
exec) id)
-               result))))))))
+      (let* ((id (car entry))
+             (file (cdr entry))
+             (r (counsel-linux-app--parse-file file)))
+        (when r
+          (push (cons r id) result))))))
 
 (defun counsel-linux-apps-list ()
   "Return list of all Linux desktop applications."
@@ -3632,31 +4918,30 @@ Any desktop entries that fail to parse are recorded in
                        counsel--linux-apps-cache-timestamp
                        (nth 5 (file-attributes file))))
                     new-files)))
-      (setq counsel--linux-apps-cache (counsel-linux-apps-parse 
new-desktop-alist)
-            counsel--linux-apps-cache-format-function 
counsel-linux-app-format-function
-            counsel--linux-apps-cache-timestamp (current-time)
-            counsel--linux-apps-cached-files new-files)))
+      (setq counsel--linux-apps-cache (counsel-linux-apps-parse 
new-desktop-alist))
+      (setq counsel--linux-apps-cache-format-function 
counsel-linux-app-format-function)
+      (setq counsel--linux-apps-cache-timestamp (current-time))
+      (setq counsel--linux-apps-cached-files new-files)))
   counsel--linux-apps-cache)
 
 
 (defun counsel-linux-app-action-default (desktop-shortcut)
   "Launch DESKTOP-SHORTCUT."
-  (call-process "gtk-launch" nil nil nil (cdr desktop-shortcut)))
+  (call-process "gtk-launch" nil 0 nil (cdr desktop-shortcut)))
 
 (defun counsel-linux-app-action-file (desktop-shortcut)
   "Launch DESKTOP-SHORTCUT with a selected file."
-  (call-process "gtk-launch" nil nil nil
+  (call-process "gtk-launch" nil 0 nil
                 (cdr desktop-shortcut)
                 (read-file-name "File: ")))
 
 (defun counsel-linux-app-action-open-desktop (desktop-shortcut)
   "Open DESKTOP-SHORTCUT."
-  (setq desktop-shortcut (cdr desktop-shortcut))
-  (let ((file
-         (cdr (assoc desktop-shortcut 
(counsel-linux-apps-list-desktop-files)))))
+  (let* ((app (cdr desktop-shortcut))
+         (file (cdr (assoc app (counsel-linux-apps-list-desktop-files)))))
     (if file
         (find-file file)
-      (error "Could not find location of file %s" desktop-shortcut))))
+      (error "Could not find location of file %s" app))))
 
 (ivy-set-actions
  'counsel-linux-app
@@ -3664,544 +4949,42 @@ Any desktop entries that fail to parse are recorded in
    ("d" counsel-linux-app-action-open-desktop "open desktop file")))
 
 ;;;###autoload
-(defun counsel-linux-app ()
-  "Launch a Linux desktop application, similar to Alt-<F2>."
-  (interactive)
+(defun counsel-linux-app (&optional arg)
+  "Launch a Linux desktop application, similar to Alt-<F2>.
+When ARG is non-nil, ignore NoDisplay property in *.desktop files."
+  (interactive "P")
   (ivy-read "Run a command: " (counsel-linux-apps-list)
+            :predicate (unless arg (lambda (x) (get-text-property 0 'visible 
(car x))))
             :action #'counsel-linux-app-action-default
             :caller 'counsel-linux-app))
 
-;;** `counsel-company'
-(defvar company-candidates)
-(defvar company-point)
-(defvar company-common)
-(declare-function company-complete "ext:company")
-(declare-function company-mode "ext:company")
-(declare-function company-complete-common "ext:company")
-
-;;;###autoload
-(defun counsel-company ()
-  "Complete using `company-candidates'."
-  (interactive)
-  (company-mode 1)
-  (unless company-candidates
-    (company-complete))
-  (when company-point
-    (when (looking-back company-common (line-beginning-position))
-      (setq ivy-completion-beg (match-beginning 0))
-      (setq ivy-completion-end (match-end 0)))
-    (ivy-read "company cand: " company-candidates
-              :action #'ivy-completion-in-region-action)))
-
-;;;** `counsel-colors'
-(defun counsel-colors--best-contrast-color (color)
-  "Choose the best-contrast foreground color for a background color COLOR.
-
-Use the relative luminance formula to improve the perceived contrast.
-If the relative luminance is beyond a given threshold, in this case a
-midpoint, then the chosen color is black, otherwise is white.  This
-helps to improve the contrast and readability of a text regardless of
-the background color."
-  (let ((rgb (color-name-to-rgb color)))
-    (if rgb
-        (if (>
-             (+ (* (nth 0 rgb) 0.299)
-                (* (nth 1 rgb) 0.587)
-                (* (nth 2 rgb) 0.114))
-             0.5)
-            "#000000"
-          "#FFFFFF")
-      color)))
-
-(defun counsel-colors--update-highlight (cand)
-  "Update the highlight face for the current candidate CAND.
-
-This is necessary because the default `ivy-current-match' face
-background mask most of the colors and you can not see the current
-candidate color when is selected, which is counter-intuitive and not
-user friendly.  The default Emacs command `list-colors-display' have
-the same problem."
-  (when (> (length cand) 0)
-    (let ((color (substring-no-properties cand 26 33)))
-      (face-remap-add-relative
-       'ivy-current-match
-       :background color
-       ;; Another alternatives like use the attribute
-       ;; `distant-foreground' or the function `color-complement-hex'
-       ;; do not work well here because they use the absolute
-       ;; luminance difference between the colors, when the human eye
-       ;; does not perceive all the colors with the same brightness.
-       :foreground (counsel-colors--best-contrast-color color)))))
-
-(defun counsel-colors-action-insert-name (x)
-  "Insert the X color name."
-  (let ((color (car (split-string (substring x 0 25)))))
-    (insert color)))
-
-(defun counsel-colors-action-insert-hex (x)
-  "Insert the X color hexadecimal rgb value."
-  (let ((rgb (substring x 26 33)))
-    (insert rgb)))
-
-(defun counsel-colors-action-kill-name (x)
-  "Kill the X color name."
-  (let ((color (car (split-string (substring x 0 25)))))
-    (kill-new color)))
-
-(defun counsel-colors-action-kill-hex (x)
-  "Kill the X color hexadecimal rgb value."
-  (let ((rgb (substring x 26 33)))
-    (kill-new rgb)))
-
-;;** `counsel-colors-emacs'
-(ivy-set-actions
- 'counsel-colors-emacs
- '(("n" counsel-colors-action-insert-name "insert color name")
-   ("h" counsel-colors-action-insert-hex "insert color hexadecimal value")
-   ("N" counsel-colors-action-kill-name "kill color name")
-   ("H" counsel-colors-action-kill-hex "kill color hexadecimal value")))
-
-(defvar counsel-colors-emacs-history nil
-  "History for `counsel-colors-emacs'.")
-
-(defun counsel-colors--name-to-hex (color)
-  "Return hexadecimal rgb value of a color from his name COLOR."
-  (apply 'color-rgb-to-hex (color-name-to-rgb color)))
-
-;;;###autoload
-(defun counsel-colors-emacs ()
-  "Show a list of all supported colors for a particular frame.
-
-You can insert or kill the name or the hexadecimal rgb value of the
-selected candidate."
-  (interactive)
-  (let ((minibuffer-allow-text-properties t))
-    (ivy-read "%d Emacs color: "
-              (mapcar (lambda (x)
-                        (concat
-                         (propertize
-                          (format "%-25s" (car x))
-                          'result (car x))
-                         (propertize
-                          (format "%8s  "
-                                  (counsel-colors--name-to-hex (car x)))
-                          'face (list :foreground (car x)))
-                         (propertize
-                          (format "%10s" " ")
-                          'face (list :background (car x)))
-                         (propertize
-                          (format "  %-s" (mapconcat #'identity (cdr x) ", "))
-                          'face (list :foreground (car x)))))
-                      (list-colors-duplicates))
-              :require-match t
-              :update-fn (lambda ()
-                           (counsel-colors--update-highlight 
(ivy-state-current ivy-last)))
-              :action #'counsel-colors-action-insert-name
-              :history 'counsel-colors-emacs-history
-              :caller 'counsel-colors-emacs
-              :sort nil)))
-
-;;** `counsel-colors-web'
-(defvar counsel-colors--web-colors-alist
-  '(("aliceblue"            .  "#f0f8ff")
-    ("antiquewhite"         .  "#faebd7")
-    ("aqua"                 .  "#00ffff")
-    ("aquamarine"           .  "#7fffd4")
-    ("azure"                .  "#f0ffff")
-    ("beige"                .  "#f5f5dc")
-    ("bisque"               .  "#ffe4c4")
-    ("black"                .  "#000000")
-    ("blanchedalmond"       .  "#ffebcd")
-    ("blue"                 .  "#0000ff")
-    ("blueviolet"           .  "#8a2be2")
-    ("brown"                .  "#a52a2a")
-    ("burlywood"            .  "#deb887")
-    ("cadetblue"            .  "#5f9ea0")
-    ("chartreuse"           .  "#7fff00")
-    ("chocolate"            .  "#d2691e")
-    ("coral"                .  "#ff7f50")
-    ("cornflowerblue"       .  "#6495ed")
-    ("cornsilk"             .  "#fff8dc")
-    ("crimson"              .  "#dc143c")
-    ("cyan"                 .  "#00ffff")
-    ("darkblue"             .  "#00008b")
-    ("darkcyan"             .  "#008b8b")
-    ("darkgoldenrod"        .  "#b8860b")
-    ("darkgray"             .  "#a9a9a9")
-    ("darkgreen"            .  "#006400")
-    ("darkkhaki"            .  "#bdb76b")
-    ("darkmagenta"          .  "#8b008b")
-    ("darkolivegreen"       .  "#556b2f")
-    ("darkorange"           .  "#ff8c00")
-    ("darkorchid"           .  "#9932cc")
-    ("darkred"              .  "#8b0000")
-    ("darksalmon"           .  "#e9967a")
-    ("darkseagreen"         .  "#8fbc8f")
-    ("darkslateblue"        .  "#483d8b")
-    ("darkslategray"        .  "#2f4f4f")
-    ("darkturquoise"        .  "#00ced1")
-    ("darkviolet"           .  "#9400d3")
-    ("deeppink"             .  "#ff1493")
-    ("deepskyblue"          .  "#00bfff")
-    ("dimgray"              .  "#696969")
-    ("dodgerblue"           .  "#1e90ff")
-    ("firebrick"            .  "#b22222")
-    ("floralwhite"          .  "#fffaf0")
-    ("forestgreen"          .  "#228b22")
-    ("fuchsia"              .  "#ff00ff")
-    ("gainsboro"            .  "#dcdcdc")
-    ("ghostwhite"           .  "#f8f8ff")
-    ("goldenrod"            .  "#daa520")
-    ("gold"                 .  "#ffd700")
-    ("gray"                 .  "#808080")
-    ("green"                .  "#008000")
-    ("greenyellow"          .  "#adff2f")
-    ("honeydew"             .  "#f0fff0")
-    ("hotpink"              .  "#ff69b4")
-    ("indianred"            .  "#cd5c5c")
-    ("indigo"               .  "#4b0082")
-    ("ivory"                .  "#fffff0")
-    ("khaki"                .  "#f0e68c")
-    ("lavenderblush"        .  "#fff0f5")
-    ("lavender"             .  "#e6e6fa")
-    ("lawngreen"            .  "#7cfc00")
-    ("lemonchiffon"         .  "#fffacd")
-    ("lightblue"            .  "#add8e6")
-    ("lightcoral"           .  "#f08080")
-    ("lightcyan"            .  "#e0ffff")
-    ("lightgoldenrodyellow" .  "#fafad2")
-    ("lightgreen"           .  "#90ee90")
-    ("lightgrey"            .  "#d3d3d3")
-    ("lightpink"            .  "#ffb6c1")
-    ("lightsalmon"          .  "#ffa07a")
-    ("lightseagreen"        .  "#20b2aa")
-    ("lightskyblue"         .  "#87cefa")
-    ("lightslategray"       .  "#778899")
-    ("lightsteelblue"       .  "#b0c4de")
-    ("lightyellow"          .  "#ffffe0")
-    ("lime"                 .  "#00ff00")
-    ("limegreen"            .  "#32cd32")
-    ("linen"                .  "#faf0e6")
-    ("magenta"              .  "#ff00ff")
-    ("maroon"               .  "#800000")
-    ("mediumaquamarine"     .  "#66cdaa")
-    ("mediumblue"           .  "#0000cd")
-    ("mediumorchid"         .  "#ba55d3")
-    ("mediumpurple"         .  "#9370d8")
-    ("mediumseagreen"       .  "#3cb371")
-    ("mediumslateblue"      .  "#7b68ee")
-    ("mediumspringgreen"    .  "#00fa9a")
-    ("mediumturquoise"      .  "#48d1cc")
-    ("mediumvioletred"      .  "#c71585")
-    ("midnightblue"         .  "#191970")
-    ("mintcream"            .  "#f5fffa")
-    ("mistyrose"            .  "#ffe4e1")
-    ("moccasin"             .  "#ffe4b5")
-    ("navajowhite"          .  "#ffdead")
-    ("navy"                 .  "#000080")
-    ("oldlace"              .  "#fdf5e6")
-    ("olive"                .  "#808000")
-    ("olivedrab"            .  "#6b8e23")
-    ("orange"               .  "#ffa500")
-    ("orangered"            .  "#ff4500")
-    ("orchid"               .  "#da70d6")
-    ("palegoldenrod"        .  "#eee8aa")
-    ("palegreen"            .  "#98fb98")
-    ("paleturquoise"        .  "#afeeee")
-    ("palevioletred"        .  "#d87093")
-    ("papayawhip"           .  "#ffefd5")
-    ("peachpuff"            .  "#ffdab9")
-    ("peru"                 .  "#cd853f")
-    ("pink"                 .  "#ffc0cb")
-    ("plum"                 .  "#dda0dd")
-    ("powderblue"           .  "#b0e0e6")
-    ("purple"               .  "#800080")
-    ("rebeccapurple"        .  "#663399")
-    ("red"                  .  "#ff0000")
-    ("rosybrown"            .  "#bc8f8f")
-    ("royalblue"            .  "#4169e1")
-    ("saddlebrown"          .  "#8b4513")
-    ("salmon"               .  "#fa8072")
-    ("sandybrown"           .  "#f4a460")
-    ("seagreen"             .  "#2e8b57")
-    ("seashell"             .  "#fff5ee")
-    ("sienna"               .  "#a0522d")
-    ("silver"               .  "#c0c0c0")
-    ("skyblue"              .  "#87ceeb")
-    ("slateblue"            .  "#6a5acd")
-    ("slategray"            .  "#708090")
-    ("snow"                 .  "#fffafa")
-    ("springgreen"          .  "#00ff7f")
-    ("steelblue"            .  "#4682b4")
-    ("tan"                  .  "#d2b48c")
-    ("teal"                 .  "#008080")
-    ("thistle"              .  "#d8bfd8")
-    ("tomato"               .  "#ff6347")
-    ("turquoise"            .  "#40e0d0")
-    ("violet"               .  "#ee82ee")
-    ("wheat"                .  "#f5deb3")
-    ("white"                .  "#ffffff")
-    ("whitesmoke"           .  "#f5f5f5")
-    ("yellow"               .  "#ffff00")
-    ("yellowgreen"          .  "#9acd32"))
-  "These are the colors defined by the W3C consortium to use in CSS sheets.
-
-All of these colors are compatible with any common browser.  The
-colors gray, green, maroon and purple have alternative values as
-defined by the X11 standard, here they follow the W3C one.")
-
-(ivy-set-actions
- 'counsel-colors-web
- '(("n" counsel-colors-action-insert-name "insert name")
-   ("h" counsel-colors-action-insert-hex "insert hex")
-   ("N" counsel-colors-action-kill-name "kill rgb")
-   ("H" counsel-colors-action-kill-hex "kill hex")))
-
-(defvar counsel-colors-web-history nil
-  "History for `counsel-colors-web'.")
-
-;;;###autoload
-(defun counsel-colors-web ()
-  "Show a list of all W3C web colors for use in CSS.
-
-You can insert or kill the name or the hexadecimal rgb value of the
-selected candidate."
-  (interactive)
-  (let ((minibuffer-allow-text-properties t))
-    (ivy-read "%d Web color: "
-              (mapcar (lambda (x)
-                        (concat
-                         (propertize
-                          (format "%-25s" (car x)))
-                         (propertize
-                          (format "%8s  " (cdr x))
-                          'face (list :foreground (car x)))
-                         (propertize
-                          (format "%10s" " ")
-                          'face (list :background (cdr x)))))
-                      counsel-colors--web-colors-alist)
-              :require-match t
-              :action #'counsel-colors-action-insert-name
-              :update-fn (lambda ()
-                           (counsel-colors--update-highlight 
(ivy-state-current ivy-last)))
-              :history 'counsel-colors-web-history
-              :caller 'counsel-colors-web
-              :sort t)))
-
-
-;;** `counsel-faces'
-(defun counsel-faces-action-describe (x)
-  "Describe the face X."
-  (describe-face (intern x)))
-
-(defun counsel-faces-action-customize (x)
-  "Customize the face X."
-  (customize-face (intern x)))
-
-(ivy-set-actions
- 'counsel-faces
- '(("d" counsel-faces-action-describe "describe face")
-   ("c" counsel-faces-action-customize "customize face")
-   ("i" insert "insert face name")
-   ("k" kill-new "kill face name")))
-
-(defvar counsel-faces-history nil
-  "History for `counsel-faces'.")
-
-(defvar counsel-faces--sample-text
-  "abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789"
-  "Text string to display as the sample text for `counsel-faces'.")
-
-(defvar counsel--faces-fmt nil)
-
-(defun counsel--faces-format-function (cands)
-  "Transform CANDS into a string for `counsel-faces'."
-  (ivy--format-function-generic
-   (lambda (str)
-     (concat
-      (format counsel--faces-fmt
-              (ivy--add-face str 'ivy-current-match))
-      (propertize counsel-faces--sample-text 'face (intern str))))
-   (lambda (str)
-     (concat
-      (format counsel--faces-fmt
-              str)
-      (propertize counsel-faces--sample-text 'face (intern str))))
-   cands
-   "\n"))
-
-(defun counsel-faces ()
-  "Show a list of all defined faces.
-
-You can describe, customize, insert or kill the name or selected
-candidate."
+;;** `counsel-wmctrl'
+(defun counsel-wmctrl-action (x)
+  "Select the desktop window that corresponds to X."
+  (counsel--run "wmctrl" "-i" "-a" (cdr x)))
+
+(defvar counsel-wmctrl-ignore '("XdndCollectionWindowImp"
+                                "unity-launcher" "unity-panel" "unity-dash"
+                                "Hud" "Desktop")
+  "List of window titles to ignore for `counsel-wmctrl'.")
+
+(defun counsel--wmctrl-parse (s)
+  (when (string-match "\\`\\([0-9a-fx]+\\) +\\([-0-9]+\\) +\\(?:[0-9]+\\) 
+\\([^ ]+\\) \\(.+\\)$" s)
+    (let ((title (match-string 4 s))
+          (id (match-string 1 s)))
+      (unless (member title counsel-wmctrl-ignore)
+        (cons title id)))))
+
+(defun counsel-wmctrl ()
+  "Select a desktop window using wmctrl."
   (interactive)
-  (let* ((minibuffer-allow-text-properties t)
-         (max-length
-          (apply #'max
-                 (mapcar
-                  (lambda (x)
-                    (length (symbol-name x)))
-                  (face-list))))
-         (counsel--faces-fmt (format "%%-%ds  " max-length))
-         (ivy-format-function #'counsel--faces-format-function))
-    (ivy-read "%d Face: " (face-list)
-              :require-match t
-              :action #'counsel-faces-action-describe
-              :history 'counsel-faces-history
-              :caller 'counsel-faces
-              :sort t)))
+  (let* ((cands1 (counsel--sl "wmctrl -l -p"))
+         (cands2 (delq nil (mapcar #'counsel--wmctrl-parse cands1))))
+    (ivy-read "window: " cands2
+              :action #'counsel-wmctrl-action
+              :caller 'counsel-wmctrl)))
 
-;;** `counsel-command-history'
-(defun counsel-command-history-action-eval (cmd)
-  "Eval the command CMD."
-    (eval (read cmd)))
-
-(defun counsel-command-history-action-edit-and-eval (cmd)
-  "Edit and eval the command CMD."
-    (edit-and-eval-command "Eval: " (read cmd)))
-
-(ivy-set-actions
- 'counsel-command-history
- '(("r" counsel-command-history-action-eval           "eval command")
-   ("e" counsel-command-history-action-edit-and-eval  "edit and eval 
command")))
-
-(defun counsel-command-history ()
-  "Show the history of commands."
-  (interactive)
-  (ivy-read "%d Command: " (mapcar #'prin1-to-string command-history)
-          :require-match t
-          :action #'counsel-command-history-action-eval
-          :caller 'counsel-command-history))
-
-;;** `counsel-org-agenda-headlines'
-(defvar org-odd-levels-only)
-(declare-function org-set-startup-visibility "org")
-(declare-function org-show-entry "org")
-(declare-function org-map-entries "org")
-(declare-function org-heading-components "org")
-
-(defun counsel-org-agenda-headlines-action-goto (headline)
-  "Go to the `org-mode' agenda HEADLINE."
-  (find-file (nth 1 headline))
-  (org-set-startup-visibility)
-  (goto-char (nth 2 headline))
-  (org-show-entry))
-
-(ivy-set-actions
- 'counsel-org-agenda-headlines
- '(("g" counsel-org-agenda-headlines-action-goto "goto headline")))
-
-(defvar counsel-org-agenda-headlines-history nil
-  "History for `counsel-org-agenda-headlines'.")
-
-(defun counsel-org-agenda-headlines--candidates ()
-  "Return a list of completion candidates for `counsel-org-agenda-headlines'."
-  (org-map-entries
-   (lambda ()
-     (let* ((components (org-heading-components))
-            (level (make-string
-                    (if org-odd-levels-only
-                        (nth 1 components)
-                      (nth 0 components))
-                    ?*))
-            (todo (nth 2 components))
-            (priority (nth 3 components))
-            (text (nth 4 components))
-            (tags (nth 5 components)))
-       (list
-        (mapconcat
-         'identity
-         (cl-remove-if 'null
-                       (list
-                        level
-                        todo
-                        (if priority (format "[#%c]" priority))
-                        text
-                        tags))
-         " ")
-        (buffer-file-name) (point))))
-   nil
-   'agenda))
-
-;;;###autoload
-(defun counsel-org-agenda-headlines ()
-  "Choose from headers of `org-mode' files in the agenda."
-  (interactive)
-  (let ((minibuffer-allow-text-properties t))
-    (ivy-read "Org headline: "
-              (counsel-org-agenda-headlines--candidates)
-              :action #'counsel-org-agenda-headlines-action-goto
-              :history 'counsel-org-agenda-headlines-history
-              :caller 'counsel-org-agenda-headlines)))
-
-;;** `counsel-irony'
-;;;###autoload
-(defun counsel-irony ()
-  "Inline C/C++ completion using Irony."
-  (interactive)
-  (irony-completion-candidates-async 'counsel-irony-callback))
-
-(defun counsel-irony-callback (candidates)
-  "Callback function for Irony to search among CANDIDATES."
-  (interactive)
-  (let* ((symbol-bounds (irony-completion-symbol-bounds))
-         (beg (car symbol-bounds))
-         (end (cdr symbol-bounds))
-         (prefix (buffer-substring-no-properties beg end)))
-  (setq ivy-completion-beg beg
-        ivy-completion-end end)
-    (ivy-read "code: " (mapcar #'counsel-irony-annotate candidates)
-              :predicate (lambda (candidate)
-                           (string-prefix-p prefix (car candidate)))
-              :caller 'counsel-irony
-              :action 'ivy-completion-in-region-action)))
-
-(defun counsel-irony-annotate (x)
-  "Make Ivy candidate from Irony candidate X."
-  (cons (concat (car x) (irony-completion-annotation x))
-        (car x)))
-
-(add-to-list 'ivy-display-functions-alist '(counsel-irony . 
ivy-display-function-overlay))
-
-(declare-function irony-completion-candidates-async "ext:irony-completion")
-(declare-function irony-completion-symbol-bounds "ext:irony-completion")
-(declare-function irony-completion-annotation "ext:irony-completion")
-
-;;** `counsel-apropos'
-;;;###autoload
-(defun counsel-apropos ()
-  "Show all matching symbols.
-See `apropos' for further information about what is considered
-a symbol and how to search for them."
-  (interactive)
-  (ivy-read "Search for symbol (word list or regexp): "
-            (counsel-symbol-list)
-            :history 'counsel-apropos-history
-            :action (lambda (pattern)
-                      (when (= (length pattern) 0)
-                        (user-error "Please specify a pattern"))
-                      ;; If the user selected a candidate form the list, we use
-                      ;; a pattern which matches only the selected symbol.
-                      (if (memq this-command '(ivy-immediate-done 
ivy-alt-done))
-                          ;; Regexp pattern are passed verbatim, other input is
-                          ;; split into words.
-                          (if (string-equal (regexp-quote pattern) pattern)
-                              (apropos (split-string pattern "[ \t]+" t))
-                            (apropos pattern))
-                        (apropos (concat "^" pattern "$"))))
-            :caller 'counsel-apropos))
-
-(defun counsel-symbol-list ()
-  "Return a list of all symbols."
-  (let (cands)
-    (mapatoms
-     (lambda (symbol)
-       (when (or (boundp symbol) (fboundp symbol))
-         (push (symbol-name symbol) cands))))
-    (delete "" cands)))
-
-;;** `counsel-mode'
+;;* `counsel-mode'
 (defvar counsel-mode-map
   (let ((map (make-sparse-keymap)))
     (dolist (binding
@@ -4209,6 +4992,7 @@ a symbol and how to search for them."
                 (describe-bindings . counsel-descbinds)
                 (describe-function . counsel-describe-function)
                 (describe-variable . counsel-describe-variable)
+                (apropos-command . counsel-apropos)
                 (describe-face . counsel-describe-face)
                 (list-faces-display . counsel-faces)
                 (find-file . counsel-find-file)
@@ -4218,7 +5002,8 @@ a symbol and how to search for them."
                 (load-theme . counsel-load-theme)
                 (yank-pop . counsel-yank-pop)
                 (info-lookup-symbol . counsel-info-lookup-symbol)
-                (pop-to-mark-command . counsel-mark-ring)))
+                (pop-to-mark-command . counsel-mark-ring)
+                (bookmark-jump . counsel-bookmark)))
       (define-key map (vector 'remap (car binding)) (cdr binding)))
     map)
   "Map for `counsel-mode'.
@@ -4226,51 +5011,17 @@ Remaps built-in functions to counsel replacements.")
 
 (defcustom counsel-mode-override-describe-bindings nil
   "Whether to override `describe-bindings' when `counsel-mode' is active."
-  :group 'ivy
   :type 'boolean)
 
-(defun counsel-list-buffers-with-mode (mode)
-  "Return names of buffers with `major-mode' `eq' to MODE."
-  (let (bufs)
-    (dolist (buf (buffer-list))
-      (when (eq (buffer-local-value 'major-mode buf) mode)
-        (push (buffer-name buf) bufs)))
-    (nreverse bufs)))
-
-;;;###autoload
-(defun counsel-switch-to-shell-buffer ()
-  "Switch to a shell buffer, or create one."
-  (interactive)
-  (ivy-read "Switch to shell buffer: "
-            (counsel-list-buffers-with-mode 'shell-mode)
-            :action #'counsel-switch-to-buffer-or-window
-            :caller 'counsel-switch-to-shell-buffer))
-
-(defun counsel-switch-to-buffer-or-window (buffer-name)
-  "Display buffer BUFFER-NAME and select its window.
-
-This behaves as `switch-to-buffer', except when the buffer is
-already visible; in that case, select the window corresponding to
-the buffer."
-  (let ((buffer (get-buffer buffer-name)))
-    (if (not buffer)
-        (shell buffer-name)
-      (let (window-of-buffer-visible)
-        (catch 'found
-          (walk-windows (lambda (window)
-                          (and (equal (window-buffer window) buffer)
-                               (throw 'found (setq window-of-buffer-visible 
window))))))
-        (if window-of-buffer-visible
-            (select-window window-of-buffer-visible)
-          (switch-to-buffer buffer))))))
-
 ;;;###autoload
 (define-minor-mode counsel-mode
   "Toggle Counsel mode on or off.
 Turn Counsel mode on if ARG is positive, off otherwise. Counsel
 mode remaps built-in emacs functions that have counsel
-replacements. "
-  :group 'ivy
+replacements.
+
+Local bindings (`counsel-mode-map'):
+\\{counsel-mode-map}"
   :global t
   :keymap counsel-mode-map
   :lighter " counsel"
diff --git a/packages/ivy/doc/Changelog.org b/packages/ivy/doc/Changelog.org
index 05a69f5..4a15581 100644
--- a/packages/ivy/doc/Changelog.org
+++ b/packages/ivy/doc/Changelog.org
@@ -1,3 +1,4 @@
+#+TITLE: Ivy CHANGELOG
 #+OPTIONS: H:4 num:nil toc:3
 #+SETUPFILE: ~/git/org-html-themes/setup/theme-readtheorg.setup
 #+HTML_HEAD: <link rel="stylesheet" type="text/css" href="kbd-style.css"/>
@@ -417,7 +418,7 @@ candidates.
 :PROPERTIES:
 :CUSTOM_ID: 0-6-0-nc-counsel-rhythmbox
 :END:
-[[http://oremacs.com/2015/07/09/counsel-rhythmbox/][Control Rhythmbox from 
Emacs.]]
+[[https://oremacs.com/2015/07/09/counsel-rhythmbox/][Control Rhythmbox from 
Emacs.]]
 -----
 *** =ivy-dispatching-done=
 :PROPERTIES:
@@ -466,7 +467,7 @@ Interactively =ag= using Ivy completion.
 :CUSTOM_ID: 0-6-0-nc-counsel-recoll
 :END:
 Use =recoll= with Ivy completion.
-See [[http://oremacs.com/2015/07/27/counsel-recoll/][Using Recoll desktop 
search database with Emacs]].
+See [[https://oremacs.com/2015/07/27/counsel-recoll/][Using Recoll desktop 
search database with Emacs]].
 
 Install recoll with =sudo apt-get install recoll=.
 
@@ -1041,7 +1042,7 @@ have it and ~M-x~ =package-install ivy=.
 :PROPERTIES:
 :CUSTOM_ID: 0-8-0-documentation
 :END:
-HTML documentation is available at http://oremacs.com/swiper/.
+HTML documentation is available at [[https://oremacs.com/swiper/]].
 
 Texinfo documentation is in doc/ivy.texi.
 
@@ -3482,7 +3483,7 @@ Allow to quit with ~ESC~ for better work with evil, see 
[[https://github.com/abo
 :PROPERTIES:
 :CUSTOM_ID: 0-10-0-nf-ivy-rotate-preferred-builders
 :END:
-Bound to ~C-o m~. Customize with =ivy--preferred-re-builders=.
+Bound to ~C-o m~. Customize with =ivy-preferred-re-builders=.
 See [[https://github.com/abo-abo/swiper/issues/1093][#1093]], 
[[https://github.com/abo-abo/swiper/issues/1094][#1094]].
 -----
 *** ivy-switch-buffer
@@ -3570,7 +3571,7 @@ Supersedes =counsel-expression-history= and
 :PROPERTIES:
 :CUSTOM_ID: 0-10-0-nc-counsel-org-capture
 :END:
-Completion for [[http://orgmode.org/manual/Capture.html][org-capture]]. See 
[[https://github.com/abo-abo/swiper/issues/1320][#1320]].
+Completion for [[https://orgmode.org/manual/Capture.html][org-capture]]. See 
[[https://github.com/abo-abo/swiper/issues/1320][#1320]].
 -----
 *** counsel-org-file
 :PROPERTIES:
@@ -3610,6 +3611,891 @@ Switch to one of the window views stored by 
=ivy-push-view=.
 You can use it separately from =ivy-switch-buffer= now.
 See [[https://github.com/abo-abo/swiper/issues/929][#929]], 
[[https://github.com/abo-abo/swiper/issues/1109][#1109]].
 -----
+* 0.11.0
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0
+:END:
+-----
+** Fixes
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fixes
+:END:
+*** colir-blend-face-foreground
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-colir-blend-face-foreground
+:END:
+Add hack for =:foreground=. Related to =ansi-color-apply=. See 
[[https://github.com/abo-abo/swiper/issues/1293][#1293]].
+-----
+*** counsel
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel
+:END:
+Make process sentinels more robust. See 
[[https://github.com/abo-abo/swiper/issues/1483][#1483]].
+
+Fix behavior on remote. See 
[[https://github.com/abo-abo/swiper/issues/1522][#1522]].
+
+Extend unquote-regex-parens tests. See 
[[https://github.com/abo-abo/swiper/issues/1704][#1704]], 
[[https://github.com/abo-abo/swiper/issues/1708][#1708]], 
[[https://github.com/abo-abo/swiper/issues/1863][#1863]].
+
+Use =counsel-async-split-string-re= more. See 
[[https://github.com/abo-abo/swiper/issues/1384][#1384]], 
[[https://github.com/abo-abo/swiper/issues/1778][#1778]].
+
+Use =start-file-process= for =counsel--async-command=. See 
[[https://github.com/abo-abo/swiper/issues/1821][#1821]].
+
+=counsel--async-filter= should write candidates only in the
+minibuffer. See [[https://github.com/abo-abo/swiper/issues/1772][#1772]], 
[[https://github.com/abo-abo/swiper/issues/1837][#1837]], 
[[https://github.com/abo-abo/swiper/issues/1857][#1857]].
+
+Robustify grep-like ivy-occur. See 
[[https://github.com/abo-abo/swiper/issues/1845][#1845]], 
[[https://github.com/abo-abo/swiper/issues/1800][#1800]], 
[[https://github.com/abo-abo/swiper/issues/1835][#1835]].
+-----
+*** counsel-ag
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-ag
+:END:
+Allow no space before "--" when specifying extra args. See 
[[https://github.com/abo-abo/swiper/issues/1498][#1498]].
+
+Allow to override the minimum search term length. See 
[[https://github.com/abo-abo/swiper/issues/1780][#1780]].
+
+Fix "./" issue. See [[https://github.com/abo-abo/swiper/issues/1841][#1841]].
+-----
+*** counsel-bookmark
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-bookmark
+:END:
+Specify =:history=. See 
[[https://github.com/abo-abo/swiper/issues/1698][#1698]].
+-----
+*** counsel-colors-list
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-colors-list
+:END:
+Improve the display of the current candidate. See 
[[https://github.com/abo-abo/swiper/issues/921][#921]], 
[[https://github.com/abo-abo/swiper/issues/1436][#1436]].
+
+Protect against invalid input. See 
[[https://github.com/abo-abo/swiper/issues/1854][#1854]].
+-----
+*** counsel-company
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-company
+:END:
+Unwind with =company-abort=. See 
[[https://github.com/abo-abo/swiper/issues/1793][#1793]].
+-----
+*** counsel-describe-face
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-describe-face
+:END:
+Add caller. See [[https://github.com/abo-abo/swiper/issues/1619][#1619]].
+-----
+*** counsel-describe-function
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-describe-function
+:END:
+Fix erroring. See [[https://github.com/abo-abo/swiper/issues/1647][#1647]], 
[[https://github.com/abo-abo/swiper/issues/1649][#1649]].
+
+Describe also unbound but documented function symbols. See 
[[https://github.com/abo-abo/swiper/issues/1707][#1707]].
+-----
+*** counsel-find-file
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-find-file
+:END:
+Don't treat URLs as dirs. See 
[[https://github.com/abo-abo/swiper/issues/1398][#1398]].
+
+Allow use of "$" in dirs. See 
[[https://github.com/abo-abo/swiper/issues/1316][#1316]].
+
+Fix for ignore-order. See 
[[https://github.com/abo-abo/swiper/issues/1466][#1466]].
+
+Fix file expansion. See 
[[https://github.com/abo-abo/swiper/issues/1494][#1494]].
+
+Fix =ivy-resume= not working when the current candidate was a
+directory. See [[https://github.com/abo-abo/swiper/issues/1508][#1508]].
+
+=counsel-find-file-mkdir-action= should use =ivy-text=. See 
[[https://github.com/abo-abo/swiper/issues/1513][#1513]].
+
+Fix dir or file logic error. See 
[[https://github.com/abo-abo/swiper/issues/1103][#1103]], 
[[https://github.com/abo-abo/swiper/issues/1623][#1623]].
+
+Fix inability to create a file. See 
[[https://github.com/abo-abo/swiper/issues/1623][#1623]].
+
+Fix issue of minibuffer height 1. See 
[[https://github.com/abo-abo/swiper/issues/1667][#1667]].
+
+Remove the change to =post-command-hook= by ESS. See 
[[https://github.com/abo-abo/swiper/issues/1660][#1660]].
+
+Update minibuffer state after =counsel-find-file-delete=. See 
[[https://github.com/abo-abo/swiper/issues/1726][#1726]].
+
+Fix for partial match of TRAMP method.
+
+Fix Emacs26 regression when completing TRAMP methods. See 
[[https://github.com/abo-abo/swiper/issues/1733][#1733]].
+
+Fix Emacs25/26 compat for =ivy--cd=.
+
+Avoid TRAMP related errors in ZIP files. See 
[[https://github.com/abo-abo/swiper/issues/1797][#1797]].
+-----
+*** counsel-find-library
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-find-library
+:END:
+Check if dirs in =load-path= exist. See 
[[https://github.com/abo-abo/swiper/issues/1720][#1720]].
+-----
+*** counsel-fzf
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-fzf
+:END:
+Add quotes to =counsel-fzf-cmd=. See 
[[https://github.com/abo-abo/swiper/issues/1544][#1544]].
+
+Remove 2nd prompt colon. See 
[[https://github.com/abo-abo/swiper/issues/1768][#1768]].
+-----
+*** counsel-git-grep
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-git-grep
+:END:
+Fix conflicting directories in two ivy-occur buffers. See 
[[https://github.com/abo-abo/swiper/issues/1392][#1392]].
+
+Run count in base directory. See 
[[https://github.com/abo-abo/swiper/issues/1402][#1402]].
+
+Rely on =du -s= for repo size. See 
[[https://github.com/abo-abo/swiper/issues/1402][#1402]].
+
+Ignore =du= errors. See 
[[https://github.com/abo-abo/swiper/issues/1502][#1502]].
+
+Run =du= only on =.git=.
+
+Call =du= directly. See 
[[https://github.com/abo-abo/swiper/issues/1502][#1502]], 
[[https://github.com/abo-abo/swiper/issues/1827][#1827]].
+-----
+*** counsel-grep
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-grep
+:END:
+Reject file-less buffers. See 
[[https://github.com/abo-abo/swiper/issues/1343][#1343]].
+
+Don't pass too long lines as =:preselect=. See 
[[https://github.com/abo-abo/swiper/issues/1644][#1644]].
+
+Obey current matcher. See 
[[https://github.com/abo-abo/swiper/issues/1801][#1801]].
+-----
+*** counsel-list-processes
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-list-processes
+:END:
+Don't mess up the current buffer with a header line.
+-----
+*** counsel-locate
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-locate
+:END:
+Fix for es.exe. Fixes [[https://github.com/abo-abo/swiper/issues/1633][#1633]].
+
+Fix =xdg-open= on Ubuntu. See 
[[https://github.com/abo-abo/swiper/issues/863][#863]], 
[[https://github.com/abo-abo/swiper/issues/1401][#1401]], 
[[https://github.com/abo-abo/swiper/issues/1759][#1759]].
+
+Simplify =xdg-open= call. See 
[[https://github.com/abo-abo/swiper/issues/1537][#1537]], 
[[https://github.com/abo-abo/swiper/issues/1759][#1759]], 
[[https://github.com/abo-abo/swiper/issues/1760][#1760]].
+-----
+*** counsel-locate-action-extern
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-locate-action-extern
+:END:
+Use =start-process-shell-command=. See 
[[https://github.com/abo-abo/swiper/issues/1401][#1401]].
+-----
+*** counsel-minibuffer-history
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-minibuffer-history
+:END:
+Add =delete-dups=. See 
[[https://github.com/abo-abo/swiper/issues/1358][#1358]].
+-----
+*** counsel-M-x
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-m-x
+:END:
+Prefer "<f2>" over "C-x 6". See 
[[https://github.com/abo-abo/swiper/issues/1534][#1534]].
+
+Add =counsel-key-binding= face. See 
[[https://github.com/abo-abo/swiper/issues/1548][#1548]].
+-----
+*** counsel-org-agenda-headlines
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-org-agenda-headlines
+:END:
+Require org. See [[https://github.com/abo-abo/swiper/issues/1642][#1642]].
+-----
+*** counsel-org-capture
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-org-capture
+:END:
+Don't overlook templates contexts. See 
[[https://github.com/abo-abo/swiper/issues/1669][#1669]].
+-----
+*** counsel-org-files
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-org-files
+:END:
+Support =org-attach-directory= variable. See 
[[https://github.com/abo-abo/swiper/issues/1340][#1340]].
+
+Use =org-attach= API. See 
[[https://github.com/abo-abo/swiper/issues/1345][#1345]].
+-----
+*** counsel-org-goto
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-org-goto
+:END:
+Increase org-goto/org-agenda-headlines UI consistency. See 
[[https://github.com/abo-abo/swiper/issues/1324][#1324]].
+
+Support older Org. See 
[[https://github.com/abo-abo/swiper/issues/1422][#1422]], 1431.
+-----
+*** counsel-org-tag
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-org-tag
+:END:
+Fix for Org 9. See [[https://github.com/abo-abo/swiper/issues/1654][#1654]], 
[[https://github.com/abo-abo/swiper/issues/1656][#1656]], 
[[https://github.com/abo-abo/swiper/issues/1896][#1896]].
+
+No need to bind =org-setting-tags=. See 
[[https://github.com/abo-abo/swiper/issues/1656][#1656]].
+-----
+*** counsel-outline
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-outline
+:END:
+Only look for outline regexp at bol. See 
[[https://github.com/abo-abo/swiper/issues/1681][#1681]].
+-----
+*** counsel-rg
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-rg
+:END:
+Store command persistently. See 
[[https://github.com/abo-abo/swiper/issues/1474][#1474]].
+-----
+*** counsel-switch-to-shell-buffer
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-switch-to-shell-buffer
+:END:
+Various improvements. See 
[[https://github.com/abo-abo/swiper/issues/1570][#1570]].
+-----
+*** counsel-unicode-char
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-unicode-char
+:END:
+Optimize. See [[https://github.com/abo-abo/swiper/issues/1704][#1704]].
+-----
+*** counsel-yank-pop
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-counsel-yank-pop
+:END:
+Liken to =yank-pop=. Respects =kill-ring-yank-pointer=. See 
[[https://github.com/abo-abo/swiper/issues/1190][#1190]], 
[[https://github.com/abo-abo/swiper/issues/1356][#1356]].
+
+Interoperate better with =kill-ring=. See 
[[https://github.com/abo-abo/swiper/issues/1133][#1133]], 
[[https://github.com/abo-abo/swiper/issues/1360][#1360]].
+
+Save =window-start= to avoid recentering of the buffer. See 
[[https://github.com/abo-abo/swiper/issues/1370][#1370]].
+
+Make position more robust. See 
[[https://github.com/abo-abo/swiper/issues/1420][#1420]].
+
+Make it work in read-only buffers. See 
[[https://github.com/abo-abo/swiper/issues/1523][#1523]].
+
+Work with =interprogram-paste-function=. See 
[[https://github.com/abo-abo/swiper/issues/1523][#1523]].
+-----
+*** docs
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-docs
+:END:
+Fixed typos. See [[https://github.com/abo-abo/swiper/issues/1405][#1405]], 
[[https://github.com/abo-abo/swiper/issues/1412][#1412]], 
[[https://github.com/abo-abo/swiper/issues/1448][#1448]], 
[[https://github.com/abo-abo/swiper/issues/1477][#1477]], 
[[https://github.com/abo-abo/swiper/issues/1483][#1483]], 
[[https://github.com/abo-abo/swiper/issues/1519][#1519]], 
[[https://github.com/abo-abo/swiper/issues/1521][#1521]],
+[[https://github.com/abo-abo/swiper/issues/1535][#1535]], 
[[https://github.com/abo-abo/swiper/issues/1539][#1539]], 
[[https://github.com/abo-abo/swiper/issues/1540][#1540]], 
[[https://github.com/abo-abo/swiper/issues/1575][#1575]], 
[[https://github.com/abo-abo/swiper/issues/1602][#1602]], 
[[https://github.com/abo-abo/swiper/issues/1612][#1612]], 
[[https://github.com/abo-abo/swiper/issues/1620][#1620]], 
[[https://github.com/abo-abo/swiper/issues/1624][#1624]], 
[[https://github.com/abo-abo [...]
+[[https://github.com/abo-abo/swiper/issues/1629][#1629]], 
[[https://github.com/abo-abo/swiper/issues/1630][#1630]], 
[[https://github.com/abo-abo/swiper/issues/1672][#1672]], 
[[https://github.com/abo-abo/swiper/issues/1675][#1675]], 
[[https://github.com/abo-abo/swiper/issues/1677][#1677]], 
[[https://github.com/abo-abo/swiper/issues/1678][#1678]], 
[[https://github.com/abo-abo/swiper/issues/1682][#1682]], 
[[https://github.com/abo-abo/swiper/issues/1684][#1684]], 
[[https://github.com/abo-abo [...]
+[[https://github.com/abo-abo/swiper/issues/1715][#1715]], 
[[https://github.com/abo-abo/swiper/issues/1717][#1717]], 
[[https://github.com/abo-abo/swiper/issues/1738][#1738]], 
[[https://github.com/abo-abo/swiper/issues/1804][#1804]], 
[[https://github.com/abo-abo/swiper/issues/1816][#1816]], 1794, 
[[https://github.com/abo-abo/swiper/issues/1817][#1817]], 
[[https://github.com/abo-abo/swiper/issues/1828][#1828]], 
[[https://github.com/abo-abo/swiper/issues/1849][#1849]].
+-----
+*** ivy
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-ivy
+:END:
+Disable =ivy-auto-select-single-candidate= for user@host entry.
+See [[https://github.com/abo-abo/swiper/issues/1326][#1326]], 
[[https://github.com/abo-abo/swiper/issues/1338][#1338]].
+
+Handle =ivy-state-buffer= getting killed. See 
[[https://github.com/abo-abo/swiper/issues/572][#572]].
+
+Correct highlighting for negation, e.g. =counsel-M-x= "vi mo!ew".
+See [[https://github.com/abo-abo/swiper/issues/1418][#1418]].
+
+Fold case during index recomputation. See 
[[https://github.com/abo-abo/swiper/issues/1447][#1447]], 
[[https://github.com/abo-abo/swiper/issues/1449][#1449]].
+
+Simplify string splitting logic. See 
[[https://github.com/abo-abo/swiper/issues/1453][#1453]].
+
+Fix =:preselect= getting deselected with new input. When there's new
+input, and it still matches =:preselect=, the current candidate should
+not change.
+
+Handle fallback in =ivy--sort-function=. See 
[[https://github.com/abo-abo/swiper/issues/1561][#1561]], 
[[https://github.com/abo-abo/swiper/issues/1565][#1565]], 
[[https://github.com/abo-abo/swiper/issues/1567][#1567]].
+
+=ivy--sort-function= should handle anonymous fns. See 
[[https://github.com/abo-abo/swiper/issues/1574][#1574]].
+
+Use =ivy-sort-max-size= for collection functions. See 
[[https://github.com/abo-abo/swiper/issues/1592][#1592]].
+
+Use =copy-sequence= when sorting to avoid corrupting external data.
+See [[https://github.com/abo-abo/swiper/issues/1617][#1617]].
+
+Default =:caller= to =this-command=. See 
[[https://github.com/abo-abo/swiper/issues/1297][#1297]], 
[[https://github.com/abo-abo/swiper/issues/1606][#1606]], 
[[https://github.com/abo-abo/swiper/issues/1619][#1619]], 
[[https://github.com/abo-abo/swiper/issues/1621][#1621]].
+
+=ivy-call= should restore previous buffer. See 
[[https://github.com/abo-abo/swiper/issues/1607][#1607]].
+
+=ivy--insert-prompt= should use =ivy-add-face-text-property= for
+compat. See [[https://github.com/abo-abo/swiper/issues/1634][#1634]].
+
+Use compat shim for =add-face-text-property=. See 
[[https://github.com/abo-abo/swiper/issues/1635][#1635]].
+
+Move =colir= require to top-level to improve performance. See 
[[https://github.com/abo-abo/swiper/issues/1571][#1571]].
+
+Fix =:predicate= not getting applied. See 
[[https://github.com/abo-abo/swiper/issues/1158][#1158]].
+
+Drop preselected candidate after input. See 
[[https://github.com/abo-abo/swiper/issues/1563][#1563]], 
[[https://github.com/abo-abo/swiper/issues/1573][#1573]].
+
+Fix =ivy-left-pad= when there's horizontal scroll.
+
+Fix =ivy-state-collection= alist idx not in sync. See 
[[https://github.com/abo-abo/swiper/issues/1680][#1680]].
+
+Support :annotation-function of completion-extra-properties.
+See [[https://github.com/abo-abo/swiper/issues/1489][#1489]].
+
+Fix for alists that require sorting. See 
[[https://github.com/abo-abo/swiper/issues/1687][#1687]].
+
+Fontify completion annotations. See 
[[https://github.com/abo-abo/swiper/issues/1489][#1489]], 
[[https://github.com/abo-abo/swiper/issues/1702][#1702]].
+
+Filter sorted alist. See 
[[https://github.com/abo-abo/swiper/issues/1705][#1705]].
+
+Avoid modifying alist collection. See 
[[https://github.com/abo-abo/swiper/issues/1706][#1706]].
+
+Use =string-match-p= where applicable. See 
[[https://github.com/abo-abo/swiper/issues/1517][#1517]].
+
+Strip text properties from returned alist candidate. See 
[[https://github.com/abo-abo/swiper/issues/1706][#1706]], 
[[https://github.com/abo-abo/swiper/issues/1724][#1724]].
+
+Don't trigger =ivy--magic-file-slash= from ~TAB~. See 
[[https://github.com/abo-abo/swiper/issues/1716][#1716]].
+
+Fix for terminals. See [[https://github.com/abo-abo/swiper/issues/199][#199]], 
[[https://github.com/abo-abo/swiper/issues/1528][#1528]], 
[[https://github.com/abo-abo/swiper/issues/1728][#1728]].
+
+Fix overlay interacting with org-mode src blocks. See 
[[https://github.com/abo-abo/swiper/issues/1732][#1732]].
+
+Don't restore buffer after action. See 
[[https://github.com/abo-abo/swiper/issues/1766][#1766]], 
[[https://github.com/abo-abo/swiper/issues/1767][#1767]].
+
+Remove webjump =completing-read= handler. See 
[[https://github.com/abo-abo/swiper/issues/1802][#1802]], 
[[https://github.com/abo-abo/swiper/issues/1049][#1049]].
+
+Use =ivy-truncate-lines= also for non-graphical Emacs. See 
[[https://github.com/abo-abo/swiper/issues/1809][#1809]].
+
+For non-graphical Emacs set resize-mini-windows to 'grow-only.
+See [[https://github.com/abo-abo/swiper/issues/1809][#1809]].
+
+Fix minibuffer truncation and resizing. See 
[[https://github.com/abo-abo/swiper/issues/1811][#1811]].
+
+Work around void =Info-complete-menu-buffer=. See 
[[https://github.com/abo-abo/swiper/issues/1814][#1814]].
+
+Handle Windows path separator for =ivy-occur=. See 
[[https://github.com/abo-abo/swiper/issues/1817][#1817]].
+
+Don't switch to a killed buffer for =ivy-occur-press=.
+See [[https://github.com/abo-abo/swiper/issues/1834][#1834]], 
[[https://github.com/abo-abo/swiper/issues/1842][#1842]].
+
+Improve performance =ivy--select-occur-buffer= by avoiding
+=pop-to-buffer=.
+
+Use =all-completions= and add test. See 
[[https://github.com/abo-abo/swiper/issues/1832][#1832]].
+
+Do not let ivy virtual buffer faces creep into the recentf file. See 
[[https://github.com/abo-abo/swiper/issues/1898][#1898]].
+-----
+*** ivy-completing-read
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-ivy-completing-read
+:END:
+Add compat for non-string defaults. See 
[[https://github.com/abo-abo/swiper/issues/1526][#1526]], 
[[https://github.com/abo-abo/swiper/issues/1810][#1810]].
+
+Simplify. See [[https://github.com/abo-abo/swiper/issues/1606][#1606]].
+-----
+*** ivy-completion-in-region
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-ivy-completion-in-region
+:END:
+Expand =(s-c-t-s)= appropriately. See 
[[https://github.com/abo-abo/swiper/issues/1361][#1361]].
+
+Allow sorting. See [[https://github.com/abo-abo/swiper/issues/1432][#1432]].
+
+Don't apply predicate twice. See 
[[https://github.com/abo-abo/swiper/issues/1648][#1648]].
+-----
+*** ivy--kill-buffer-action
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-ivy--kill-buffer-action
+:END:
+Remove virtual buffers from =recentf-list=. See 
[[https://github.com/abo-abo/swiper/issues/1888][#1888]].
+-----*** ivy--magic-file-slash
+Misc fixes. See [[https://github.com/abo-abo/swiper/issues/1831][#1831]].
+-----
+*** ivy--occur-insert-lines
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-ivy--occur-insert-lines
+:END:
+Fix incorrect regexp. See 
[[https://github.com/abo-abo/swiper/issues/1846][#1846]].
+
+Speed up regex from 5s to 0.01s for 4000 cands.
+-----
+*** ivy-occur-press
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-ivy-occur-press
+:END:
+Don't hard-code =display-buffer=. See 
[[https://github.com/abo-abo/swiper/issues/1838][#1838]], 
[[https://github.com/abo-abo/swiper/issues/1865][#1865]].
+-----
+*** ivy-overlay-show-after
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-ivy-overlay-show-after
+:END:
+Don't inherit existing face.
+See [[https://github.com/abo-abo/swiper/issues/1488][#1488]], 
[[https://github.com/abo-abo/swiper/issues/1547][#1547]], 
[[https://github.com/abo-abo/swiper/issues/1016][#1016]], 1520, 
[[https://github.com/abo-abo/swiper/issues/1808][#1808]], 
[[https://github.com/abo-abo/swiper/issues/1825][#1825]].
+-----
+*** ivy-partial
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-ivy-partial
+:END:
+Can change current dir when completing files. See 
[[https://github.com/abo-abo/swiper/issues/86][#86]].
+-----
+*** ivy--regex-fuzzy
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-ivy--regex-fuzzy
+:END:
+Regexp-quote chars to improve performance for searches like
+".env.foo". See [[https://github.com/abo-abo/swiper/issues/1435][#1435]].
+
+Generalize. Fix =ivy-occur= highlighting. See 
[[https://github.com/abo-abo/swiper/issues/1795][#1795]].
+
+Optimize regex "(a).*?(b)" -> "(a)[^b]*(b)". See 
[[https://github.com/abo-abo/swiper/issues/848][#848]].
+-----
+*** ivy--regex-ignore-order
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-ivy--regex-ignore-order
+:END:
+Improve handling of invalid regexes. See 
[[https://github.com/abo-abo/swiper/issues/1545][#1545]].
+-----
+*** ivy--regex-plus
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-ivy--regex-plus
+:END:
+Update and add test for "add path!" input. See 
[[https://github.com/abo-abo/swiper/issues/1418][#1418]].
+
+Search "defun \([^ ]+\)" now works.
+-----
+*** ivy-rotate-preferred-builders
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-ivy-rotate-preferred-builders
+:END:
+Update in the documentation. See 
[[https://github.com/abo-abo/swiper/issues/1376][#1376]].
+-----
+*** ivy-string<
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-ivy-string<
+:END:
+Handle heterogeneous args. See 
[[https://github.com/abo-abo/swiper/issues/1743][#1743]], 
[[https://github.com/abo-abo/swiper/issues/1744][#1744]].
+-----
+*** ivy-thing-at-point
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-ivy-thing-at-point
+:END:
+Prevent error when =url-handler-mode= is on. See 
[[https://github.com/abo-abo/swiper/issues/1446][#1446]].
+
+Strip text properties. See 
[[https://github.com/abo-abo/swiper/issues/1594][#1594]].
+-----
+*** swiper
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-swiper
+:END:
+Fix history modified on each char. Fix history duplicate. See 
[[https://github.com/abo-abo/swiper/issues/1391][#1391]].
+
+Don't replace tabs with spaces (prevents =wgrep= from working
+correctly). See [[https://github.com/abo-abo/swiper/issues/1468][#1468]].
+
+Allow =scroll-other-window= use. See 
[[https://github.com/abo-abo/swiper/issues/1504][#1504]].
+
+Replace obsolete =isearch-lazy-highlight-face=. See 
[[https://github.com/abo-abo/swiper/issues/1591][#1591]].
+
+Highlight multiple regexps correctly.
+See [[https://github.com/abo-abo/swiper/issues/654][#654]], 
[[https://github.com/abo-abo/swiper/issues/1550][#1550]], 
[[https://github.com/abo-abo/swiper/issues/1551][#1551]], 
[[https://github.com/abo-abo/swiper/issues/1587][#1587]], 
[[https://github.com/abo-abo/swiper/issues/1600][#1600]].
+
+Fix when re-builder returns list. See 
[[https://github.com/abo-abo/swiper/issues/1692][#1692]].
+
+Add =inhibit-field-text-motion=. See 
[[https://github.com/abo-abo/swiper/issues/1713][#1713]].
+
+Fix incorrect jump to first match. See 
[[https://github.com/abo-abo/swiper/issues/1791][#1791]].
+-----
+*** swiper-avy
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-swiper-avy
+:END:
+Fix when there's scroll. See 
[[https://github.com/abo-abo/swiper/issues/1541][#1541]].
+
+Fix off-by-one. See [[https://github.com/abo-abo/swiper/issues/1775][#1775]].
+
+Fix for =ivy-format-function-arrow=. See 
[[https://github.com/abo-abo/swiper/issues/1885][#1885]].
+-----
+*** swiper-multi
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-fx-swiper-multi
+:END:
+Add text property =buffer= to candidates. See 
[[https://github.com/abo-abo/swiper/issues/1491][#1491]], 
[[https://github.com/abo-abo/swiper/issues/1492][#1492]].
+-----
+
+** New Features
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-new-features
+:END:
+*** counsel
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-counsel
+:END:
+New var =counsel-more-chars-alist= to customize per-function the minimum
+amount of chars. See [[https://github.com/abo-abo/swiper/issues/1663][#1663]].
+
+New face =counsel-variable-documentation=, =counsel-application-name=,
+=counsel-outline-1=, ..., =counsel-outline-8=, =counsel-outline-default=.
+See [[https://github.com/abo-abo/swiper/issues/1847][#1847]].
+-----
+*** counsel-bookmark
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-counsel-bookmark
+:END:
+Add two actions. See [[https://github.com/abo-abo/swiper/issues/948][#948]], 
[[https://github.com/abo-abo/swiper/issues/1385][#1385]].
+-----
+*** counsel-dired-jump
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-counsel-dired-jump
+:END:
+New var =counsel-dired-jump-args=. See 
[[https://github.com/abo-abo/swiper/issues/1889][#1889]].
+-----*** counsel-find-file
+New var =counsel-find-file-occur-cmd=. Use it to customize what ~C-c C-o~
+calls. See [[https://github.com/abo-abo/swiper/issues/1299][#1299]], 
[[https://github.com/abo-abo/swiper/issues/1351][#1351]], 
[[https://github.com/abo-abo/swiper/issues/1441][#1441]].
+
+New var =counsel-preselect-current-file=. When non-nil, preselect the
+current file in the list of candidates. See 
[[https://github.com/abo-abo/swiper/issues/1363][#1363]].
+
+Bind ~C-M-y~ to =counsel-yank-directory=. Useful when you want to edit
+part of the directory name. See 
[[https://github.com/abo-abo/swiper/issues/1333][#1333]].
+
+Bind ~M-o d~ to new action =counsel-find-file-mkdir-action=. See 
[[https://github.com/abo-abo/swiper/issues/1471][#1471]].
+
+Bind ~M-o f~ to =find-file-other-frame=. See 
[[https://github.com/abo-abo/swiper/issues/1510][#1510]].
+
+Bind ~M-o k~ to =counsel-find-file-delete=. See 
[[https://github.com/abo-abo/swiper/issues/1671][#1671]].
+
+Bind ~M-o m~ to =counsel-find-file-move=. See 
[[https://github.com/abo-abo/swiper/issues/1671][#1671]].
+
+=counsel-find-file-occur-use-find= defaults to t on Linux. See 
[[https://github.com/abo-abo/swiper/issues/1686][#1686]].
+
+Make =counsel-find-file-delete= ask for confirmation. See 
[[https://github.com/abo-abo/swiper/issues/1774][#1774]].
+
+Make =counsel-find-file-delete= clean up buffers. See 
[[https://github.com/abo-abo/swiper/issues/1779][#1779]].
+-----
+*** counsel-find-file-jump
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-counsel-find-file-jump
+:END:
+New var =counsel-file-jump-args=. See 
[[https://github.com/abo-abo/swiper/issues/1889][#1889]].
+-----
+*** counsel-fzf
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-counsel-fzf
+:END:
+Support =universal-argument=. See 
[[https://github.com/abo-abo/swiper/issues/1281][#1281]], 
[[https://github.com/abo-abo/swiper/issues/1279][#1279]].
+-----
+*** counsel-git-grep
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-counsel-git-grep
+:END:
+Also works on remote. See 
[[https://github.com/abo-abo/swiper/issues/1463][#1463]].
+
+New var =counsel--git-grep-count-threshold=. See 
[[https://github.com/abo-abo/swiper/issues/1470][#1470]].
+
+Add "-I" to =counsel-git-grep-cmd-default= to ignore binaries. Files are
+marked as binary in =.gitattributes=.
+
+Calculate the repo size correctly for submodules. See 
[[https://github.com/abo-abo/swiper/issues/1558][#1558]].
+-----
+*** counsel-grep
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-counsel-grep
+:END:
+New var =counsel-grep-map=. Bind =swiper-avy= there. See 
[[https://github.com/abo-abo/swiper/issues/1711][#1711]].
+-----
+*** counsel-imenu
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-counsel-imenu
+:END:
+Show functions as "Functions: func". See 
[[https://github.com/abo-abo/swiper/issues/775][#775]].
+-----
+*** counsel-linux-app
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-counsel-linux-app
+:END:
+Add =~/.local/share/applications/=. See 
[[https://github.com/abo-abo/swiper/issues/1390][#1390]].
+
+Add guixsd's application directory. See 
[[https://github.com/abo-abo/swiper/issues/1476][#1476]].
+
+Call =gtk-launch= asynchronously. See 
[[https://github.com/abo-abo/swiper/issues/1537][#1537]].
+
+Add dir for flatpack. See 
[[https://github.com/abo-abo/swiper/issues/1754][#1754]].
+
+Ignore non-readable desktop files. See 
[[https://github.com/abo-abo/swiper/issues/1757][#1757]].
+
+Show also hidden desktop files with prefix arg.
+
+Add XDG defaults. See [[https://github.com/abo-abo/swiper/issues/1851][#1851]].
+
+Truncate Exec to 45 chars.
+-----
+*** counsel-locate
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-counsel-locate
+:END:
+Bind ~M-o r~ to =counsel-find-file-as-root=. See 
[[https://github.com/abo-abo/swiper/issues/1676][#1676]].
+
+Works over TRAMP. See [[https://github.com/abo-abo/swiper/issues/1735][#1735]].
+-----
+*** counsel-mode
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-counsel-mode
+:END:
+Add =counsel-bookmark=. See 
[[https://github.com/abo-abo/swiper/issues/1381][#1381]].
+
+Add more info to the docs. See 
[[https://github.com/abo-abo/swiper/issues/1400][#1400]].
+
+Add =counsel-apropos=. See 
[[https://github.com/abo-abo/swiper/issues/1582][#1582]].
+
+Display local keymap in mode doc. See 
[[https://github.com/abo-abo/swiper/issues/1718][#1718]].
+-----
+*** counsel-M-x
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-counsel-m-x
+:END:
+Support =amx= in addition to =smex=. See 
[[https://github.com/abo-abo/swiper/issues/1557][#1557]], 
[[https://github.com/abo-abo/swiper/issues/1585][#1585]], 
[[https://github.com/abo-abo/swiper/issues/1613][#1613]], 
[[https://github.com/abo-abo/swiper/issues/1615][#1615]].
+
+Filter obsolete commands. See 
[[https://github.com/abo-abo/swiper/issues/1843][#1843]], 
[[https://github.com/abo-abo/swiper/issues/1844][#1844]].
+-----
+*** counsel-rg
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-counsel-rg
+:END:
+Read extra args when =current-prefix-arg= is given. See 
[[https://github.com/abo-abo/swiper/issues/851][#851]].
+
+Use smart case "-S" in =counsel-rg-base-command=. See 
[[https://github.com/abo-abo/swiper/issues/1393][#1393]].
+
+To look for e.g. "map}", input "map\}". See 
[[https://github.com/abo-abo/swiper/issues/1566][#1566]].
+
+Interactively specify switches.
+Example in this repo: "-g*.el -- require", "-g*.org -- require",
+"-g!*.el -- require". See 
[[https://github.com/abo-abo/swiper/issues/1408][#1408]], 
[[https://github.com/abo-abo/swiper/issues/1512][#1512]], 
[[https://github.com/abo-abo/swiper/issues/1688][#1688]], 
[[https://github.com/abo-abo/swiper/issues/1559][#1559]].
+-----
+*** counsel-rhythmbox
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-counsel-rhythmbox
+:END:
+Refresh list with prefix arg.
+
+Re-launch rhythmbox if not playing.
+
+Bind ~M-o s~ to =counsel-rhythmbox-toggle-shuffle=.
+-----
+*** counsel-semantic
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-counsel-semantic
+:END:
+Add pretty formatting, expand types recursively. See 
[[https://github.com/abo-abo/swiper/issues/702][#702]].
+-----
+*** counsel-set-variable
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-counsel-set-variable
+:END:
+Can also be used non-interactively. See 
[[https://github.com/abo-abo/swiper/issues/1409][#1409]].
+
+Show docstring if =lv= is available. See 
[[https://github.com/abo-abo/swiper/issues/1595][#1595]].
+
+Add prefix arg behavior: filter out vars without custom-type
+properties. See [[https://github.com/abo-abo/swiper/issues/1643][#1643]].
+-----
+*** counsel-yank-pop
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-counsel-yank-pop
+:END:
+New var =counsel-yank-pop-height=: configure =ivy-height=. See 
[[https://github.com/abo-abo/swiper/issues/1365][#1365]].
+
+New var =counsel-yank-pop-filter=: All elements of =kill-ring= for which
+this function returns nil will be permanently deleted from =kill-ring=
+before completion. See 
[[https://github.com/abo-abo/swiper/issues/1356][#1356]], 
[[https://github.com/abo-abo/swiper/issues/1367][#1367]].
+
+New var =counsel-yank-pop-preselect-last=: customize whether preselect
+the last kill by default. See 
[[https://github.com/abo-abo/swiper/issues/1371][#1371]], 
[[https://github.com/abo-abo/swiper/issues/1373][#1373]], 
[[https://github.com/abo-abo/swiper/issues/1374][#1374]].
+
+New var =counsel-yank-pop-after-point=. See 
[[https://github.com/abo-abo/swiper/issues/884][#884]], 
[[https://github.com/abo-abo/swiper/issues/1761][#1761]], 
[[https://github.com/abo-abo/swiper/issues/1762][#1762]].
+
+New face =ivy-separator=. See 
[[https://github.com/abo-abo/swiper/issues/1815][#1815]].
+-----
+*** ivy
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-ivy
+:END:
+Interpret mouse events in the minibuffer managed by ivy.  You can now
+scroll with the mouse wheel and click to select a candidate.
+See [[https://github.com/abo-abo/swiper/issues/1278][#1278]], 
[[https://github.com/abo-abo/swiper/issues/1279][#1279]].
+
+Support multi-character action keys. See 
[[https://github.com/abo-abo/swiper/issues/1394][#1394]].
+
+=ivy-display-functions-alist= can use t key as fallback. See 
[[https://github.com/abo-abo/swiper/issues/1443][#1443]].
+
+New var =ivy-display-functions-props= useful when customizing display
+functions.
+See [[https://github.com/abo-abo/swiper/issues/1443][#1443]].
+
+New cmd =ivy-kill-whole-line= overrides =kill-whole-line= in the
+minibuffer. See [[https://github.com/abo-abo/swiper/issues/1456][#1456]].
+
+New option for =ivy-virtual-abbreviate=: ='abbreviate=. See 
[[https://github.com/abo-abo/swiper/issues/1460][#1460]].
+
+New var =ivy-height-alist=. Customize =ivy-height= per-command. See 
[[https://github.com/abo-abo/swiper/issues/1531][#1531]], 
[[https://github.com/abo-abo/swiper/issues/1722][#1722]].
+
+New var =ivy-completing-read-dynamic-collection=. See 
[[https://github.com/abo-abo/swiper/issues/1524][#1524]].
+
+New cmd =ivy-yank-char= similar to =isearch-yank-char=. See 
[[https://github.com/abo-abo/swiper/issues/1588][#1588]].
+
+New cmd =ivy-yank-symbol=. See 
[[https://github.com/abo-abo/swiper/issues/1604][#1604]].
+
+Bind ~<right>~ to =ivy-forward-char=. See 
[[https://github.com/abo-abo/swiper/issues/1622][#1622]].
+
+New var =ivy-highlight-grep-commands= that lists counsel grep-like
+commands. See [[https://github.com/abo-abo/swiper/issues/1661][#1661]].
+
+New face =ivy-modified-outside-buffer=. See 
[[https://github.com/abo-abo/swiper/issues/1742][#1742]], 
[[https://github.com/abo-abo/swiper/issues/1745][#1745]].
+
+Propertize matches in =ivy-occur= buffers. See 
[[https://github.com/abo-abo/swiper/issues/1795][#1795]].
+
+=ivy-immediate-done= with empty input will return the default.
+See [[https://github.com/abo-abo/swiper/issues/1170][#1170]], 
[[https://github.com/abo-abo/swiper/issues/1719][#1719]].
+
+=ivy-read= argument =prompt= is no longer a format string. Use only
+=ivy-count-format= to add/remove candidate count. See 
[[https://github.com/abo-abo/swiper/issues/1350][#1350]].
+
+New face =ivy-grep-info= and =ivy-grep-line-number=. See 
[[https://github.com/abo-abo/swiper/issues/1839][#1839]], 
[[https://github.com/abo-abo/swiper/issues/1840][#1840]].
+
+New face =ivy-org=, =ivy-completions-annotations=. See 
[[https://github.com/abo-abo/swiper/issues/1847][#1847]].
+
+Highlight yanked word. New face =ivy-yanked-word=.
+See [[https://github.com/abo-abo/swiper/issues/1581][#1581]], 
[[https://github.com/abo-abo/swiper/issues/1850][#1850]], 
[[https://github.com/abo-abo/swiper/issues/1856][#1856]], 
[[https://github.com/abo-abo/swiper/issues/1859][#1859]], 
[[https://github.com/abo-abo/swiper/issues/1861][#1861]].
+
+New var =ivy-pulse-delay=. See 
[[https://github.com/abo-abo/swiper/issues/1859][#1859]].
+
+=ivy-initial-inputs-alist= entries can be functions. See 
[[https://github.com/abo-abo/swiper/issues/1867][#1867]], 
[[https://github.com/abo-abo/swiper/issues/1868][#1868]].
+
+New var =ivy-hooks-alist=. See 
[[https://github.com/abo-abo/swiper/issues/1899][#1899]].
+-----
+*** ivy-occur-grep-mode
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-ivy-occur-grep-mode
+:END:
+Press ~w~ for =ivy-wgrep-change-to-wgrep-mode=. See 
[[https://github.com/abo-abo/swiper/issues/1341][#1341]].
+-----
+*** ivy-occur-next-line
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-ivy-occur-next-line
+:END:
+Useful also in the original buffer.
+
+Jump to first candidate when in header.
+-----
+*** ivy-preferred-re-builders
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-ivy-preferred-re-builders
+:END:
+Renamed from =ivy-preferred-re-builders=.
+-----
+*** ivy-push-view
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-ivy-push-view
+:END:
+Overwrite view with prefix arg. See 
[[https://github.com/abo-abo/swiper/issues/1737][#1737]].
+-----
+*** ivy-switch-buffer
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-ivy-switch-buffer
+:END:
+Extract all actions to defuns so that they can be advised or
+reused. See [[https://github.com/abo-abo/swiper/issues/1490][#1490]].
+-----
+*** swiper
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-swiper
+:END:
+Add test to history even for ~C-g~. See 
[[https://github.com/abo-abo/swiper/issues/1305][#1305]].
+
+New var =swiper-stay-on-quit=. When non-nil don't go back to
+search start on abort. See 
[[https://github.com/abo-abo/swiper/issues/1319][#1319]].
+
+Add integration with evil s expressions. See 
[[https://github.com/abo-abo/swiper/issues/1406][#1406]], 
[[https://github.com/abo-abo/swiper/issues/1452][#1452]].
+
+Obey =dired-isearch-filenames=. See 
[[https://github.com/abo-abo/swiper/issues/1415][#1415]].
+
+Better negation highlighting. For example, in ivy.el search for "ivy
+len!--". See [[https://github.com/abo-abo/swiper/issues/1418][#1418]].
+-----
+*** swiper-all
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-swiper-all
+:END:
+Add optional =initial-input= arg. See 
[[https://github.com/abo-abo/swiper/issues/1375][#1375]].
+-----
+*** swiper-font-lock-exclude
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-swiper-font-lock-exclude
+:END:
+Add =eshell-mode=, =helpful-mode=. See 
[[https://github.com/abo-abo/swiper/issues/1416][#1416]].
+
+Add =matrix-client-mode=. See 
[[https://github.com/abo-abo/swiper/issues/1886][#1886]].
+
+Add =deadgrep-mode=. See 
[[https://github.com/abo-abo/swiper/issues/1902][#1902]].
+-----
+*** swiper-occur
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nf-swiper-occur
+:END:
+Allow to capture groups from input.
+Example: "defvar \([a-z-]+\)" ~C-c C-o~.
+-----
+
+** New Commands
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-new-commands
+:END:
+-----
+*** counsel-bookmarked-directory
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nc-counsel-bookmarked-directory
+:END:
+Completion for bookmarked directories. See 
[[https://github.com/abo-abo/swiper/issues/1657][#1657]].
+-----
+*** counsel-down-directory
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nc-counsel-down-directory
+:END:
+Descend into a directory for =counsel-find-file=. See 
[[https://github.com/abo-abo/swiper/issues/1891][#1891]].
+-----
+
+*** counsel-evil-registers
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nc-counsel-evil-registers
+:END:
+Ivy replacement for =evil-show-registers=. See 
[[https://github.com/abo-abo/swiper/issues/1368][#1368]].
+-----
+*** counsel-ibuffer
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nc-counsel-ibuffer
+:END:
+Completion for =ibuffer=. See 
[[https://github.com/abo-abo/swiper/issues/1467][#1467]], 
[[https://github.com/abo-abo/swiper/issues/1569][#1569]].
+-----
+*** counsel-org-entity
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nc-counsel-org-entity
+:END:
+Insert an Org entity using ivy. See 
[[https://github.com/abo-abo/swiper/issues/1459][#1459]].
+-----
+*** counsel-semantic-or-imenu
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nc-counsel-semantic-or-imenu
+:END:
+New command that uses either =counsel-semantic= or =counsel-imenu=. See
+[[https://github.com/abo-abo/swiper/issues/702][#702]], 
[[https://github.com/abo-abo/swiper/issues/1389][#1389]].
+-----
+*** counsel-wmctrl
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nc-counsel-wmctrl
+:END:
+Select a desktop window with completion.
+-----
+*** ivy-switch-buffer-kill
+:PROPERTIES:
+:CUSTOM_ID: 0-11-0-nc-ivy-switch-buffer-kill
+:END:
+New command bound to ~C-c C-k~ for =ivy-switch-buffer=. Use this to kill
+one or more buffers while still in the minibuffer.
+-----
+
 #+BEGIN_EXPORT html
 <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
 <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
diff --git a/packages/ivy/doc/Makefile b/packages/ivy/doc/Makefile
new file mode 100644
index 0000000..e104037
--- /dev/null
+++ b/packages/ivy/doc/Makefile
@@ -0,0 +1,2 @@
+ivy.texi: ivy.org
+       emacs -batch -l ivy-ox.el -l scripts.el --eval "(org-to-texi 
\"ivy.org\")"
diff --git a/packages/ivy/doc/ivy-help.org b/packages/ivy/doc/ivy-help.org
index 989c0e4..1eb71c7 100644
--- a/packages/ivy/doc/ivy-help.org
+++ b/packages/ivy/doc/ivy-help.org
@@ -132,7 +132,7 @@ Additionally, here are the keys that are otherwise not 
bound:
 - ~<~ and ~>~ adjust the height of the minibuffer.
 - ~c~ (=ivy-toggle-calling=) - toggle calling the current action each
   time a different candidate is selected.
-- ~m~ (=ivy-toggle-fuzzy=) - toggle regex matcher.
+- ~m~ (=ivy-rotate-preferred-builders=) - rotate regex matcher.
 - ~w~ and ~s~ scroll the actions list.
 
 Minibuffer editing is disabled when Hydra is active.
diff --git a/packages/ivy/doc/ivy-ox.el b/packages/ivy/doc/ivy-ox.el
index cb69c7f..22ab7a4 100644
--- a/packages/ivy/doc/ivy-ox.el
+++ b/packages/ivy/doc/ivy-ox.el
@@ -1,6 +1,6 @@
-;;; ivy-ox.el --- org-export settings for Ivy
+;;; ivy-ox.el --- org-export settings for Ivy -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015  Free Software Foundation, Inc.
+;; Copyright (C) 2015-2018  Free Software Foundation, Inc.
 
 ;; Author: Oleh Krehel
 
@@ -17,10 +17,15 @@
 ;; GNU General Public License for more details.
 
 ;; For a full copy of the GNU General Public License
-;; see <http://www.gnu.org/licenses/>.
+;; see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
 
 ;;* ox-texinfo
 (require 'ox-texinfo)
+(eval-when-compile (require 'subr-x))
 (org-export-define-backend 'texinfo
   '((bold . org-texinfo-bold)
     (center-block . org-texinfo-center-block)
@@ -179,7 +184,7 @@ contextual information."
 
 (defvar ivy-info-dir (file-name-directory
                       (or load-file-name
-                          (buffer-file-name))))
+                          buffer-file-name)))
 
 (defun info-ivy ()
   (interactive)
@@ -191,3 +196,5 @@ contextual information."
    "Top"))
 
 (provide 'ivy-ox)
+
+;;; ivy-ox.el ends here
diff --git a/packages/ivy/doc/ivy.org b/packages/ivy/doc/ivy.org
index 6490567..4324191 100644
--- a/packages/ivy/doc/ivy.org
+++ b/packages/ivy/doc/ivy.org
@@ -6,8 +6,14 @@
 #+TEXINFO_DIR_CATEGORY: Emacs
 #+TEXINFO_DIR_TITLE: Ivy: (ivy).
 #+TEXINFO_DIR_DESC: Using Ivy for completion.
-#+SETUPFILE: ~/git/org-html-themes/setup/theme-readtheorg.setup
-#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="kbd-style.css"/>
+
+#+HTML_HEAD: <script 
src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js";></script>
+#+HTML_HEAD: <script 
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js";></script>
+#+HTML_HEAD: <script type="text/javascript" 
src="https://fniessen.github.io/org-html-themes/styles/lib/js/jquery.stickytableheaders.min.js";></script>
+#+HTML_HEAD: <script type="text/javascript" 
src="https://fniessen.github.io/org-html-themes/styles/readtheorg/js/readtheorg.js";></script>
+#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="css/htmlize.css"/>
+#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="css/readtheorg.css"/>
+#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="css/kbd-style.css"/>
 #+OPTIONS: H:6 num:6 toc:4
 #+STARTUP: indent
 * Setup                                                                        
       :noexport:
@@ -45,7 +51,7 @@ exports.
 ** Exporting to texinfo
 
 ivy.texi is generated from ivy.org. To update the .texi file, eval
-ivy-ox.el then ~C-c C-e i t~ in the ivy.org bufer.
+ivy-ox.el then ~C-c C-e i t~ in the ivy.org buffer.
 * Copying
 :PROPERTIES:
 :COPYING:  t
@@ -64,7 +70,7 @@ final candidate is either through simple keyboard character 
inputs or
 through powerful regular expressions.
 #+TEXINFO: @end ifnottex
 
-Copyright (C) 2015 Free Software Foundation, Inc.
+Copyright (C) 2015-2018 Free Software Foundation, Inc.
 
 #+BEGIN_QUOTE
 Permission is granted to copy, distribute and/or modify this document
@@ -137,8 +143,8 @@ discoverability.
 Install Ivy automatically through Emacs's package manager, or manually
 from Ivy's development repository.
 
-Emacs 24.3.1 is the oldest version to run Ivy. Emacs 24.5.1 is the
-oldest version that runs Ivy with fancy faces display.
+Emacs 24.3 is the oldest version to run Ivy. Emacs 24.4 is the oldest
+version that runs Ivy with fancy faces display.
 
 ** Installing from Emacs Package Manager
 :PROPERTIES:
@@ -159,7 +165,7 @@ See the code below for adding MELPA to the list of package 
archives:
 #+begin_src elisp
 (require 'package)
 (add-to-list 'package-archives
-             '("melpa" . "http://melpa.org/packages/";))
+             '("melpa" . "https://melpa.org/packages/";))
 #+end_src
 
 After this do ~M-x~ =package-refresh-contents= ~RET~, followed by ~M-x~
@@ -239,7 +245,8 @@ documentation.
 :PROPERTIES:
 :CUSTOM_ID: global-key-bindings
 :END:
-The recommended key bindings are:
+Here is a list of commands that are useful to be bound globally, along
+with some sample bindings:
 
 - Ivy-based interface to standard commands ::
 
@@ -449,8 +456,9 @@ actions.
 - ~M-j~ (=ivy-yank-word=) ::
      Inserts the sub-word at point into the minibuffer.
 
-     This is similar to ~C-s C-w~ with =isearch=. Ivy reserves ~C-w~
-     for =kill-region=.
+     This is similar to ~C-s C-w~ with =isearch=.  Ivy reserves ~C-w~
+     for =kill-region=.  See also =ivy-yank-symbol= and
+     =ivy-yank-char=.
 
 - ~S-SPC~ (=ivy-restrict-to-matches=) ::
      Deletes the current input, and resets the candidates list to the
@@ -502,14 +510,14 @@ display short aliases:
 Hydra reduces key strokes, for example: ~C-n C-n C-n C-n~ is ~C-o
 jjjj~ in Hydra.
 
-Hydra menu offers these additioanl bindings:
+Hydra menu offers these additional bindings:
 
 - ~c~ (=ivy-toggle-calling=) ::
      Toggle calling the action after each candidate change. It
      modifies ~j~ to ~jg~, ~k~ to ~kg~ etc.
 
-- ~m~ (=ivy-toggle-fuzzy=) ::
-     Toggle the current regexp matcher.
+- ~m~ (=ivy-rotate-preferred-builders=) ::
+     Rotate the current regexp matcher.
 
 - ~>~ (=ivy-minibuffer-grow=) ::
      Increase =ivy-height= for the current minibuffer.
@@ -740,6 +748,14 @@ installed.
      #+begin_src elisp
      (setq ivy-use-virtual-buffers t)
      #+end_src
+
+- =ivy-modified-buffer= ::
+     Highlights modified buffers when switching buffer.
+- =ivy-modified-outside-buffer= ::
+     Highlights buffers modified outside Emacs when switching buffer.
+
+     This takes precedence over =ivy-modified-buffer=.
+
 ** Defcustoms
 :PROPERTIES:
 :CUSTOM_ID: defcustoms
@@ -769,13 +785,15 @@ installed.
 - User Option =ivy-display-style= ::
      Specifies highlighting candidates in the minibuffer.
 
-     The default setting is ='fancy= and valid only in Emacs versions
-     24.5 or newer.
+     The default setting is ='fancy= in Emacs versions 24.4 or newer.
 
      Set =ivy-display-style= to =nil= for a plain minibuffer.
 
 - User Option =ivy-on-del-error-function= ::
-     Specify what when ~DEL~ (=ivy-backward-delete-char=) throws.
+     Specifies what to do when ~DEL~ (=ivy-backward-delete-char=) fails.
+
+     This is usually the case when there is no text left to delete,
+     i.e., when ~DEL~ is typed at the beginning of the minibuffer.
 
      The default behavior is to quit the completion after ~DEL~ -- a
      handy key to invoke after mistakenly triggering a completion.
@@ -1066,11 +1084,8 @@ features such as multi-actions, non-exiting actions, 
=ivy-occur= and
 :CUSTOM_ID: required-arguments-for-ivy-read
 :END:
 - =prompt= ::
-     A format string normally ending in a colon and a space.
-
-     =%d= anywhere in the string is replaced by the current number of
-     matching candidates. To use a literal =%= character, escape it as
-     =%%=. See also =ivy-count-format=.
+     A prompt string normally ending in a colon and a space.
+     =ivy-count-format= is prepended to it during completion.
 
 - =collection= ::
      Either a list of strings, a function, an alist or a hash table.
@@ -1171,7 +1186,7 @@ later use yourself. However, it's recommended that you 
use the
                    (push (symbol-name x) cands))))
               cands)
             :keymap counsel-describe-map
-            :preselect (counsel-symbol-at-point)
+            :preselect (ivy-thing-at-point)
             :history 'counsel-describe-symbol-history
             :require-match t
             :sort t
@@ -1186,7 +1201,7 @@ Here are the interesting features of the above function, 
in the order that they
 - The =prompt= argument is a simple string ending in ": ".
 - The =collection= argument evaluates to a (large) list of strings.
 - The =keymap= argument is for a custom keymap to supplement 
=ivy-minibuffer-map=.
-- The =preselect= is provided by =counsel-symbol-at-point=, which
+- The =preselect= is provided by =ivy-thing-at-point=, which
   returns a symbol near the point. Ivy then selects the first
   candidate from the collection that matches this symbol. To select
   this pre-selected candidate, a ~RET~ will suffice. No further user
@@ -1234,14 +1249,15 @@ narrowing) or select a candidate from the visible 
collection.
 
 #+begin_src elisp
 (defun counsel-locate-function (str)
-  (if (< (length str) 3)
-      (counsel-more-chars 3)
-    (counsel--async-command
-     (format "locate %s '%s'"
-             (mapconcat #'identity counsel-locate-options " ")
-             (counsel-unquote-regex-parens
-              (ivy--regex str))))
-    '("" "working...")))
+  (or
+   (ivy-more-chars)
+   (progn
+     (counsel--async-command
+      (format "locate %s '%s'"
+              (mapconcat #'identity counsel-locate-options " ")
+              (counsel--elisp-to-pcre
+               (ivy--regex str))))
+     '("" "working..."))))
 
 ;;;###autoload
 (defun counsel-locate (&optional initial-input)
@@ -1267,7 +1283,7 @@ that they appear:
   of strings. Note that it's not compatible with =all-completions=,
   but since we're not using that here, might as well use one argument
   instead of three.
-- =counsel-more-chars= is a simple function that returns e.g.
+- =ivy-more-chars= is a simple function that returns e.g.
   ='("2 chars more")= asking the user for more input.
 - =counsel--async-command= is a very easy API simplification that
   takes a single string argument suitable for
diff --git a/packages/ivy/doc/ivy.texi b/packages/ivy/doc/ivy.texi
index a84e78c..426591c 100644
--- a/packages/ivy/doc/ivy.texi
+++ b/packages/ivy/doc/ivy.texi
@@ -1,6 +1,6 @@
 \input texinfo    @c -*- texinfo -*-
 @c %**start of header
-@setfilename ./ivy.info
+@setfilename ivy.info
 @settitle Ivy User Manual
 @documentencoding UTF-8
 @documentlanguage en
@@ -20,7 +20,7 @@ final candidate is either through simple keyboard character 
inputs or
 through powerful regular expressions.
 @end ifnottex
 
-Copyright (C) 2015 Free Software Foundation, Inc.
+Copyright (C) 2015-2018 Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -54,7 +54,6 @@ modify this GNU manual.''
 @ifnottex
 @node Top
 @top Ivy User Manual
-@insertcopying
 @end ifnottex
 
 @menu
@@ -72,30 +71,25 @@ modify this GNU manual.''
 @detailmenu
 --- The Detailed Node Listing ---
 
-
 Installation
 
 * Installing from Emacs Package Manager::
 * Installing from the Git repository::
 
-
-
 Getting started
 
 * Basic customization::
 
-
 Key bindings
 
 * Global key bindings::
 * Minibuffer key bindings::
 
-
 Minibuffer key bindings
 
 * Key bindings for navigation::
-* Key bindings for single selection, action, then exit minibuffer: Key 
bindings for single selection action then exit minibuffer.
-* Key bindings for multiple selections and actions, keep minibuffer open: Key 
bindings for multiple selections and actions keep minibuffer open.
+* Key bindings for single selection, action, then exit minibuffer: Key 
bindings for single selection action then exit minibuffer. 
+* Key bindings for multiple selections and actions, keep minibuffer open: Key 
bindings for multiple selections and actions keep minibuffer open. 
 * Key bindings that alter the minibuffer input::
 * Other key bindings::
 * Hydra in the minibuffer::
@@ -107,8 +101,6 @@ Completion Styles
 * ivy--regex-ignore-order::
 * ivy--regex-fuzzy::
 
-
-
 Customization
 
 * Faces::
@@ -116,8 +108,6 @@ Customization
 * Actions::
 * Packages::
 
-
-
 Actions
 
 * What are actions?::
@@ -126,16 +116,11 @@ Actions
 * Example - add two actions to each command::
 * Example - define a new command with several actions::
 
-
-
-
 Example - add two actions to each command
 
 * How to undo adding the two actions::
 * How to add actions to a specific command::
 
-
-
 Example - define a new command with several actions
 
 * Test the above function with @code{ivy-occur}::
@@ -146,7 +131,9 @@ Commands
 * Buffer Name Completion::
 * Counsel commands::
 
+File Name Completion
 
+* Using TRAMP::
 
 API
 
@@ -154,6 +141,8 @@ API
 * Optional arguments for @code{ivy-read}::
 * Example - @code{counsel-describe-function}::
 * Example - @code{counsel-locate}::
+* Example - @code{ivy-read-with-extra-properties}::
+
 @end detailmenu
 @end menu
 
@@ -217,8 +206,8 @@ for documentation look-ups.
 Install Ivy automatically through Emacs's package manager, or manually
 from Ivy's development repository.
 
-Emacs 24.3.1 is the oldest version to run Ivy. Emacs 24.5.1 is the
-oldest version that runs Ivy with fancy faces display.
+Emacs 24.3 is the oldest version to run Ivy. Emacs 24.4 is the oldest
+version that runs Ivy with fancy faces display.
 
 @menu
 * Installing from Emacs Package Manager::
@@ -228,24 +217,25 @@ oldest version that runs Ivy with fancy faces display.
 @node Installing from Emacs Package Manager
 @section Installing from Emacs Package Manager
 
-@kbd{M-x} @code{package-install} @kbd{RET} @code{swiper} @kbd{RET}
+@kbd{M-x} @code{package-install} @kbd{RET} @code{ivy} @kbd{RET}
 
-Ivy is installed as part of @code{swiper} package. @code{swiper} is available
-from two different package archives, GNU ELPA and MELPA. For the
-latest stable version, use the GNU ELPA archives using the above M-x
-command.
+Ivy is installed as part of @code{ivy} package, which is available from two
+different package archives, GNU ELPA and MELPA. For the latest stable
+version, use the GNU ELPA archives using the above M-x command.
 
-For current hourly builds, use the MELPA archives. See the code below
-for adding MELPA to the list of package archives:
+For current hourly builds, use the MELPA archives. In MELPA, Ivy is
+split into three packages: @code{ivy}, @code{swiper} and @code{counsel}; you 
can simply
+install @code{counsel} which will bring in the other two as dependencies.
+See the code below for adding MELPA to the list of package archives:
 
 @lisp
 (require 'package)
 (add-to-list 'package-archives
-             '("melpa" . "http://melpa.org/packages/";))
+            '("melpa" . "https://melpa.org/packages/";))
 @end lisp
 
-After this do @kbd{M-x} @code{package-refresh-contents} @kbd{RET}, followed by
-@kbd{M-x} @code{package-install} @kbd{RET} @code{counsel} @kbd{RET}.
+After this do @kbd{M-x} @code{package-refresh-contents} @kbd{RET}, followed by 
@kbd{M-x}
+@code{package-install} @kbd{RET} @code{counsel} @kbd{RET}.
 
 For package manager details, see @ref{Packages,,,emacs,}.
 
@@ -270,22 +260,22 @@ Contribute to Ivy's development; send patches; pull 
requests
 First clone the Swiper repository with:
 
 @example
-     cd ~/git && git clone https://github.com/abo-abo/swiper
-     cd swiper && make compile
+cd ~/git && git clone https://github.com/abo-abo/swiper
+cd swiper && make compile
 @end example
 
 Second, add these lines to the Emacs init file:
 
 @lisp
-     (add-to-list 'load-path "~/git/swiper/")
-     (require 'ivy)
+(add-to-list 'load-path "~/git/swiper/")
+(require 'ivy)
 @end lisp
 
 Then, update the code with:
 
 @example
-     git pull
-     make
+git pull
+make
 @end example
 @end indentedblock
 
@@ -333,29 +323,30 @@ documentation.
 @node Global key bindings
 @section Global key bindings
 
-The recommended key bindings are:
+Here is a list of commands that are useful to be bound globally, along
+with some sample bindings:
 
 @subsubheading Ivy-based interface to standard commands
 @indentedblock
 @lisp
-     (global-set-key (kbd "C-s") 'swiper)
-     (global-set-key (kbd "M-x") 'counsel-M-x)
-     (global-set-key (kbd "C-x C-f") 'counsel-find-file)
-     (global-set-key (kbd "<f1> f") 'counsel-describe-function)
-     (global-set-key (kbd "<f1> v") 'counsel-describe-variable)
-     (global-set-key (kbd "<f1> l") 'counsel-find-library)
-     (global-set-key (kbd "<f2> i") 'counsel-info-lookup-symbol)
-     (global-set-key (kbd "<f2> u") 'counsel-unicode-char)
+(global-set-key (kbd "C-s") 'swiper)
+(global-set-key (kbd "M-x") 'counsel-M-x)
+(global-set-key (kbd "C-x C-f") 'counsel-find-file)
+(global-set-key (kbd "<f1> f") 'counsel-describe-function)
+(global-set-key (kbd "<f1> v") 'counsel-describe-variable)
+(global-set-key (kbd "<f1> l") 'counsel-find-library)
+(global-set-key (kbd "<f2> i") 'counsel-info-lookup-symbol)
+(global-set-key (kbd "<f2> u") 'counsel-unicode-char)
 @end lisp
 @end indentedblock
 @subsubheading Ivy-based interface to shell and system tools
 @indentedblock
 @lisp
-     (global-set-key (kbd "C-c g") 'counsel-git)
-     (global-set-key (kbd "C-c j") 'counsel-git-grep)
-     (global-set-key (kbd "C-c k") 'counsel-ag)
-     (global-set-key (kbd "C-x l") 'counsel-locate)
-     (global-set-key (kbd "C-S-o") 'counsel-rhythmbox)
+(global-set-key (kbd "C-c g") 'counsel-git)
+(global-set-key (kbd "C-c j") 'counsel-git-grep)
+(global-set-key (kbd "C-c k") 'counsel-ag)
+(global-set-key (kbd "C-x l") 'counsel-locate)
+(global-set-key (kbd "C-S-o") 'counsel-rhythmbox)
 @end lisp
 @end indentedblock
 @subsubheading Ivy-resume and other commands
@@ -363,7 +354,7 @@ The recommended key bindings are:
 @code{ivy-resume} resumes the last Ivy-based completion.
 
 @lisp
-     (global-set-key (kbd "C-c C-r") 'ivy-resume)
+(global-set-key (kbd "C-c C-r") 'ivy-resume)
 @end lisp
 @end indentedblock
 
@@ -385,8 +376,8 @@ where the familiar @kbd{C-a}, @kbd{C-f}, @kbd{M-d}, 
@kbd{M-DEL}, @kbd{M-b}, @kbd
 
 @menu
 * Key bindings for navigation::
-* Key bindings for single selection, action, then exit minibuffer: Key 
bindings for single selection action then exit minibuffer.
-* Key bindings for multiple selections and actions, keep minibuffer open: Key 
bindings for multiple selections and actions keep minibuffer open.
+* Key bindings for single selection, action, then exit minibuffer: Key 
bindings for single selection action then exit minibuffer. 
+* Key bindings for multiple selections and actions, keep minibuffer open: Key 
bindings for multiple selections and actions keep minibuffer open. 
 * Key bindings that alter the minibuffer input::
 * Other key bindings::
 * Hydra in the minibuffer::
@@ -472,13 +463,13 @@ possible. @kbd{TAB TAB} is the same as @kbd{C-j} 
(@code{ivy-alt-done}).
 Example ERT test:
 
 @lisp
-     (should
-      (equal (ivy-with
-              '(progn
-                (ivy-read "Test: " '("can do" "can't, sorry" "other"))
-                ivy-text)
-              "c <tab>")
-             "can"))
+(should
+ (equal (ivy-with
+        '(progn
+          (ivy-read "Test: " '("can do" "can't, sorry" "other"))
+          ivy-text)
+        "c <tab>")
+       "can"))
 @end lisp
 @end indentedblock
 @subsubheading @kbd{C-M-j} (@code{ivy-immediate-done})
@@ -544,10 +535,9 @@ Combines @kbd{C-n} and @kbd{C-M-m}. Applies an action and 
moves to next
 line.
 
 Comes in handy when opening multiple files from
-@code{counsel-find-file}, @code{counsel-git-grep}, @code{counsel-ag},
-@code{counsel-rg}, or @code{counsel-locate} lists. Just hold
-@kbd{C-M-n} for rapid-fire default action on each successive element
-of the list.
+@code{counsel-find-file}, @code{counsel-git-grep}, @code{counsel-ag}, 
@code{counsel-rg}, or
+@code{counsel-locate} lists. Just hold @kbd{C-M-n} for rapid-fire default
+action on each successive element of the list.
 @end indentedblock
 @subsubheading @kbd{C-M-p} (@code{ivy-previous-line-and-call})
 @vindex ivy-previous-line-and-call
@@ -602,8 +592,9 @@ complete the renaming.
 @indentedblock
 Inserts the sub-word at point into the minibuffer.
 
-This is similar to @kbd{C-s C-w} with @code{isearch}. Ivy reserves @kbd{C-w}
-for @code{kill-region}.
+This is similar to @kbd{C-s C-w} with @code{isearch}.  Ivy reserves @kbd{C-w}
+for @code{kill-region}.  See also @code{ivy-yank-symbol} and
+@code{ivy-yank-char}.
 @end indentedblock
 @subsubheading @kbd{S-SPC} (@code{ivy-restrict-to-matches})
 @vindex ivy-restrict-to-matches
@@ -686,7 +677,7 @@ display short aliases:
 Hydra reduces key strokes, for example: @kbd{C-n C-n C-n C-n} is @kbd{C-o
 jjjj} in Hydra.
 
-Hydra menu offers these additioanl bindings:
+Hydra menu offers these additional bindings:
 
 @subsubheading @kbd{c} (@code{ivy-toggle-calling})
 @vindex ivy-toggle-calling
@@ -695,11 +686,11 @@ Hydra menu offers these additioanl bindings:
 Toggle calling the action after each candidate change. It
 modifies @kbd{j} to @kbd{jg}, @kbd{k} to @kbd{kg} etc.
 @end indentedblock
-@subsubheading @kbd{m} (@code{ivy-toggle-fuzzy})
-@vindex ivy-toggle-fuzzy
+@subsubheading @kbd{m} (@code{ivy-rotate-preferred-builders})
+@vindex ivy-rotate-preferred-builders
 @kindex m
 @indentedblock
-Toggle the current regexp matcher.
+Rotate the current regexp matcher.
 @end indentedblock
 @subsubheading @kbd{>} (@code{ivy-minibuffer-grow})
 @vindex ivy-minibuffer-grow
@@ -752,10 +743,10 @@ completion.
 
 The new buffer is read-only and has a few useful bindings defined.
 
-@subsubheading @kbd{RET} or @kbd{j} (@code{ivy-occur-press})
+@subsubheading @kbd{RET} or @kbd{f} (@code{ivy-occur-press})
 @vindex ivy-occur-press
 @kindex RET
-@kindex j
+@kindex f
 @indentedblock
 Call the current action on the selected candidate.
 @end indentedblock
@@ -839,7 +830,7 @@ completion:
 @lisp
 (setq ivy-re-builders-alist
       '((read-file-name-internal . ivy--regex-fuzzy)
-        (t . ivy--regex-plus)))
+       (t . ivy--regex-plus)))
 @end lisp
 
 Here, @code{read-file-name-internal} is a function that is passed as the
@@ -975,7 +966,7 @@ The confirmation prompt will use this face.
 For example:
 
 @lisp
-     (setq confirm-nonexistent-file-or-buffer t)
+(setq confirm-nonexistent-file-or-buffer t)
 @end lisp
 
 Then call @code{find-file}, enter "eldorado" and press @kbd{RET} - the
@@ -1016,7 +1007,7 @@ Virtual buffers correspond to bookmarks and recent files 
list,
 Enable virtual buffers with:
 
 @lisp
-     (setq ivy-use-virtual-buffers t)
+(setq ivy-use-virtual-buffers t)
 @end lisp
 @end indentedblock
 
@@ -1033,13 +1024,13 @@ padded integer value.
 To disable showing the number of candidates:
 
 @lisp
-     (setq ivy-count-format "")
+(setq ivy-count-format "")
 @end lisp
 
 To also display the current candidate:
 
 @lisp
-     (setq ivy-count-format "(%d/%d) ")
+(setq ivy-count-format "(%d/%d) ")
 @end lisp
 
 The @code{format}-style switches this variable uses are described
@@ -1049,14 +1040,16 @@ in the @code{format} documentation.
 @defopt ivy-display-style
 Specifies highlighting candidates in the minibuffer.
 
-The default setting is @code{'fancy} and valid only in Emacs versions
-24.5 or newer.
+The default setting is @code{'fancy} in Emacs versions 24.4 or newer.
 
 Set @code{ivy-display-style} to @code{nil} for a plain minibuffer.
 @end defopt
 
 @defopt ivy-on-del-error-function
-Specify what when @kbd{DEL} (@code{ivy-backward-delete-char}) throws.
+Specifies what to do when @kbd{DEL} (@code{ivy-backward-delete-char}) fails.
+
+This is usually the case when there is no text left to delete,
+i.e., when @kbd{DEL} is typed at the beginning of the minibuffer.
 
 The default behavior is to quit the completion after @kbd{DEL} -- a
 handy key to invoke after mistakenly triggering a completion.
@@ -1091,9 +1084,9 @@ which the completion started, use the 
@code{with-ivy-window} wrapper
 macro.
 
 @lisp
-     (defun ivy-insert-action (x)
-       (with-ivy-window
-         (insert x)))
+(defun ivy-insert-action (x)
+  (with-ivy-window
+    (insert x)))
 @end lisp
 @end indentedblock
 
@@ -1192,10 +1185,10 @@ Use the command name as the key:
 (defun my-command-with-3-actions ()
   (interactive)
   (ivy-read "test: " '("foo" "bar" "baz")
-            :action '(1
-                      ("o" my-action-1 "action 1")
-                      ("j" my-action-2 "action 2")
-                      ("k" my-action-3 "action 3"))))
+           :action '(1
+                     ("o" my-action-1 "action 1")
+                     ("j" my-action-2 "action 2")
+                     ("k" my-action-3 "action 3"))))
 @end lisp
 
 The number 1 above is the index of the default action. Each
@@ -1247,7 +1240,7 @@ headings with similar names to appreciate @code{ivy-mode}.
 Magit requires this setting for ivy completion:
 
 @lisp
-     (setq magit-completing-read-function 'ivy-completing-read)
+(setq magit-completing-read-function 'ivy-completing-read)
 @end lisp
 @end indentedblock
 @subsubheading @code{find-file-in-project}
@@ -1259,7 +1252,7 @@ It uses ivy by default if Ivy is installed.
 Projectile requires this setting for ivy completion:
 
 @lisp
-     (setq projectile-completion-system 'ivy)
+(setq projectile-completion-system 'ivy)
 @end lisp
 @end indentedblock
 @subsubheading @code{helm-make}
@@ -1267,7 +1260,7 @@ Projectile requires this setting for ivy completion:
 Helm-make requires this setting for ivy completion.
 
 @lisp
-     (setq helm-make-completion-method 'ivy)
+(setq helm-make-completion-method 'ivy)
 @end lisp
 @end indentedblock
 
@@ -1339,25 +1332,40 @@ and @kbd{C-j}.
 Likewise, @code{./} can be removed.
 @end defopt
 
-@subsubheading Using TRAMP
+@subsubheading History
 @indentedblock
-From any directory, with the empty input, inputting @code{/ssh:} and
-pressing @kbd{C-j} (or @kbd{RET}, which is the same thing) completes for
-host and user names.
+File history works the same with @kbd{M-p}, @kbd{M-n}, and @kbd{C-r}, but
+uses a custom code for file name completion that cycles through
+files previously opened. It also works with TRAMP files.
+@end indentedblock
+
+@menu
+* Using TRAMP::
+@end menu
+
+@node Using TRAMP
+@subsection Using TRAMP
+
+From any directory, with the empty input, inputting @code{/ssh:} and pressing
+@kbd{C-j} (or @kbd{RET}, which is the same thing) completes for host and user
+names.
 
 For @code{/ssh:user@@} input, completes the domain name.
 
 @kbd{C-i} works in a similar way to the default completion.
 
-You can also get sudo access for the current directory by
-inputting @code{/sudo::} @kbd{RET}. Using @code{/sudo:} (i.e. single colon 
instead of
-double) will result in a completion session for the desired user.
-@end indentedblock
-@subsubheading History
+You can also get sudo access for the current directory by inputting
+@code{/sudo::} @kbd{RET}. Using @code{/sudo:} (i.e. single colon instead of 
double) will
+result in a completion session for the desired user.
+
+Multi-hopping is possible, although a bit complex.
+
+@subsubheading Example : connect to a remote host @code{cloud} and open a file 
with @code{sudo} there
 @indentedblock
-File history works the same with @kbd{M-p}, @kbd{M-n}, and @kbd{C-r}, but
-uses a custom code for file name completion that cycles through
-files previously opened. It also works with TRAMP files.
+@itemize
+@item
+@kbd{C-x C-f} @code{/ssh:cloud|sudo:root:/}.
+@end itemize
 @end indentedblock
 
 @node Buffer Name Completion
@@ -1370,7 +1378,7 @@ When non-nil, add @code{recentf-mode} and bookmarks to
 Adding this to Emacs init file:
 
 @lisp
-     (setq ivy-use-virtual-buffers t)
+(setq ivy-use-virtual-buffers t)
 @end lisp
 will add additional virtual buffers to the buffers list for recent
 files. Selecting such virtual buffers, which are highlighted with
@@ -1411,6 +1419,7 @@ features such as multi-actions, non-exiting actions, 
@code{ivy-occur} and
 * Optional arguments for @code{ivy-read}::
 * Example - @code{counsel-describe-function}::
 * Example - @code{counsel-locate}::
+* Example - @code{ivy-read-with-extra-properties}::
 @end menu
 
 @node Required arguments for @code{ivy-read}
@@ -1418,11 +1427,8 @@ features such as multi-actions, non-exiting actions, 
@code{ivy-occur} and
 
 @subsubheading @code{prompt}
 @indentedblock
-A format string normally ending in a colon and a space.
-
-@code{%d} anywhere in the string is replaced by the current number of
-matching candidates. To use a literal @code{%} character, escape it as
-@code{%%}. See also @code{ivy-count-format}.
+A prompt string normally ending in a colon and a space.
+@code{ivy-count-format} is prepended to it during completion.
 @end indentedblock
 @subsubheading @code{collection}
 @indentedblock
@@ -1545,21 +1551,21 @@ later use yourself. However, it's recommended that you 
use the
   "Forward to `describe-function'."
   (interactive)
   (ivy-read "Describe function: "
-            (let (cands)
-              (mapatoms
-               (lambda (x)
-                 (when (fboundp x)
-                   (push (symbol-name x) cands))))
-              cands)
-            :keymap counsel-describe-map
-            :preselect (counsel-symbol-at-point)
-            :history 'counsel-describe-symbol-history
-            :require-match t
-            :sort t
-            :action (lambda (x)
-                      (describe-function
-                       (intern x)))
-            :caller 'counsel-describe-function))
+           (let (cands)
+             (mapatoms
+              (lambda (x)
+                (when (fboundp x)
+                  (push (symbol-name x) cands))))
+             cands)
+           :keymap counsel-describe-map
+           :preselect (ivy-thing-at-point)
+           :history 'counsel-describe-symbol-history
+           :require-match t
+           :sort t
+           :action (lambda (x)
+                     (describe-function
+                      (intern x)))
+           :caller 'counsel-describe-function))
 @end lisp
 
 Here are the interesting features of the above function, in the order that 
they appear:
@@ -1572,7 +1578,7 @@ The @code{collection} argument evaluates to a (large) 
list of strings.
 @item
 The @code{keymap} argument is for a custom keymap to supplement 
@code{ivy-minibuffer-map}.
 @item
-The @code{preselect} is provided by @code{counsel-symbol-at-point}, which
+The @code{preselect} is provided by @code{ivy-thing-at-point}, which
 returns a symbol near the point. Ivy then selects the first
 candidate from the collection that matches this symbol. To select
 this pre-selected candidate, a @kbd{RET} will suffice. No further user
@@ -1626,14 +1632,15 @@ narrowing) or select a candidate from the visible 
collection.
 
 @lisp
 (defun counsel-locate-function (str)
-  (if (< (length str) 3)
-      (counsel-more-chars 3)
-    (counsel--async-command
-     (format "locate %s '%s'"
-             (mapconcat #'identity counsel-locate-options " ")
-             (counsel-unquote-regex-parens
-              (ivy--regex str))))
-    '("" "working...")))
+  (or
+   (ivy-more-chars)
+   (progn
+     (counsel--async-command
+      (format "locate %s '%s'"
+             (mapconcat #'identity counsel-locate-options " ")
+             (counsel--elisp-to-pcre
+              (ivy--regex str))))
+     '("" "working..."))))
 
 ;;;###autoload
 (defun counsel-locate (&optional initial-input)
@@ -1641,15 +1648,15 @@ narrowing) or select a candidate from the visible 
collection.
 INITIAL-INPUT can be given as the initial minibuffer input."
   (interactive)
   (ivy-read "Locate: " #'counsel-locate-function
-            :initial-input initial-input
-            :dynamic-collection t
-            :history 'counsel-locate-history
-            :action (lambda (file)
-                      (with-ivy-window
-                        (when file
-                          (find-file file))))
-            :unwind #'counsel-delete-process
-            :caller 'counsel-locate))
+           :initial-input initial-input
+           :dynamic-collection t
+           :history 'counsel-locate-history
+           :action (lambda (file)
+                     (with-ivy-window
+                       (when file
+                         (find-file file))))
+           :unwind #'counsel-delete-process
+           :caller 'counsel-locate))
 @end lisp
 
 Here are the interesting features of the above functions, in the order
@@ -1662,7 +1669,7 @@ of strings. Note that it's not compatible with 
@code{all-completions},
 but since we're not using that here, might as well use one argument
 instead of three.
 @item
-@code{counsel-more-chars} is a simple function that returns e.g.
+@code{ivy-more-chars} is a simple function that returns e.g.
 @code{'("2 chars more")} asking the user for more input.
 @item
 @code{counsel--async-command} is a very easy API simplification that
@@ -1689,6 +1696,44 @@ we want to kill the running process created by
 @code{caller} argument identifies this command for easier customization.
 @end itemize
 
+@node Example - @code{ivy-read-with-extra-properties}
+@section Example - @code{ivy-read-with-extra-properties}
+
+This is another example to show how to associate additional values to each
+displayed strings.
+
+@lisp
+(defun find-candidates-function (str pred _)
+  (let ((props '(1 2))
+       (strs '("foo" "foo2")))
+    (cl-mapcar (lambda (s p) (propertize s 'property p))
+              strs
+              props)))
+
+(defun find-candidates ()
+  (interactive)
+  (ivy-read "Find symbols: "
+           #'find-candidates-function
+           :action (lambda (x)
+                     (message "Value: %s" (get-text-property 0 'property x)
+                      ))))
+@end lisp
+
+Here are the interesting features of the above function:
+
+@itemize
+@item
+@code{find-candidates-function} builds up a list of strings and associates 
"foo" with
+the value 1 and "foo2" with 2.
+@item
+@code{find-candidates} is an interactive function.
+@item
+@code{#'find-candidates} is passed as the @code{collection} argument.
+@item
+@code{action} gets passed the selected string with the associated value. It
+then retrieves that value and displays it.
+@end itemize
+
 @node Variable Index
 @unnumbered Variable Index
 
@@ -1699,4 +1744,4 @@ we want to kill the running process created by
 
 @printindex ky
 
-@bye
+@bye
\ No newline at end of file
diff --git a/packages/ivy/doc/scripts.el b/packages/ivy/doc/scripts.el
new file mode 100644
index 0000000..8f25cef
--- /dev/null
+++ b/packages/ivy/doc/scripts.el
@@ -0,0 +1,6 @@
+;; Copyright (C) 2019 Free Software Foundation, Inc.
+
+(setq org-confirm-babel-evaluate nil)
+(defun org-to-texi (fname)
+  (find-file fname)
+  (org-texinfo-export-to-texinfo))
diff --git a/packages/ivy/ivy-hydra.el b/packages/ivy/ivy-hydra.el
index 4f16726..5b0054e 100644
--- a/packages/ivy/ivy-hydra.el
+++ b/packages/ivy/ivy-hydra.el
@@ -1,12 +1,12 @@
 ;;; ivy-hydra.el --- Additional key bindings for Ivy  -*- lexical-binding: t 
-*-
 
-;; Copyright (C) 2015-2017  Free Software Foundation, Inc.
+;; Copyright (C) 2015-2019  Free Software Foundation, Inc.
 
 ;; Author: Oleh Krehel <address@hidden>
 ;; URL: https://github.com/abo-abo/swiper
-;; Version: 0.10.0
-;; Package-Requires: ((emacs "24.1") (ivy "0.9.0") (hydra "0.13.4"))
-;; Keywords: completion, matching, bindings
+;; Version: 0.11.0
+;; Package-Requires: ((emacs "24.1") (ivy "0.11.0") (hydra "0.13.4"))
+;; Keywords: convenience
 
 ;; This file is part of GNU Emacs.
 
@@ -21,21 +21,22 @@
 ;; GNU General Public License for more details.
 
 ;; For a full copy of the GNU General Public License
-;; see <http://www.gnu.org/licenses/>.
+;; see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
-;;
+
 ;; This package provides the `hydra-ivy/body' command, which is a
 ;; quasi-prefix map, with many useful bindings.  These bindings are
 ;; shorter than usual, using mostly unprefixed keys.
 
 ;;; Code:
+
 (require 'ivy)
 (require 'hydra)
 
 (defun ivy--matcher-desc ()
   "Return description of `ivy--regex-function'."
-  (let ((cell (assoc ivy--regex-function ivy--preferred-re-builders)))
+  (let ((cell (assq ivy--regex-function ivy-preferred-re-builders)))
     (if cell
         (cdr cell)
       "other")))
diff --git a/packages/ivy/ivy-overlay.el b/packages/ivy/ivy-overlay.el
index a4f8983..5a2e5e7 100644
--- a/packages/ivy/ivy-overlay.el
+++ b/packages/ivy/ivy-overlay.el
@@ -1,6 +1,6 @@
 ;;; ivy-overlay.el --- Overlay display functions for Ivy  -*- lexical-binding: 
t -*-
 
-;; Copyright (C) 2016-2017  Free Software Foundation, Inc.
+;; Copyright (C) 2016-2019  Free Software Foundation, Inc.
 
 ;; Author: Oleh Krehel <address@hidden>
 ;; Keywords: convenience
@@ -16,15 +16,16 @@
 ;; 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/>.
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
-;;
+
 ;; This package allows to setup Ivy's completion at point to actually
 ;; show the candidates and the input at point, instead of in the
 ;; minibuffer.
 
 ;;; Code:
+
 (defface ivy-cursor
   '((t (:background "black"
         :foreground "white")))
@@ -43,7 +44,9 @@
 Lines are truncated to the window width."
   (let ((padding (make-string width ?\s)))
     (mapconcat (lambda (x)
-                 (ivy--truncate-string (concat padding x) (1- (window-width))))
+                 (ivy--truncate-string (concat padding x)
+                                       (1- (+ (window-width)
+                                              (window-hscroll)))))
                (split-string str "\n")
                "\n")))
 
@@ -61,12 +64,14 @@ Lines are truncated to the window width."
   "Display STR in an overlay at point.
 
 First, fill each line of STR with spaces to the current column.
-Then attach the overlay the character before point."
+Then attach the overlay to the character before point."
   (if ivy-overlay-at
       (progn
         (move-overlay ivy-overlay-at (1- (point)) (line-end-position))
         (overlay-put ivy-overlay-at 'invisible nil))
     (setq ivy-overlay-at (make-overlay (1- (point)) (line-end-position)))
+    ;; Specify face to avoid clashing with other overlays.
+    (overlay-put ivy-overlay-at 'face 'default)
     (overlay-put ivy-overlay-at 'priority 9999))
   (overlay-put ivy-overlay-at 'display str)
   (overlay-put ivy-overlay-at 'after-string ""))
@@ -77,29 +82,35 @@ Then attach the overlay the character before point."
 (defvar ivy-last)
 (defvar ivy-text)
 (defvar ivy-completion-beg)
+(declare-function ivy-add-face-text-property "ivy")
 (declare-function ivy--get-window "ivy")
 (declare-function ivy-state-current "ivy")
 (declare-function ivy-state-window "ivy")
+(declare-function ivy--remove-prefix "ivy")
 
-(defun ivy-overlay-impossible-p ()
+(defun ivy-overlay-impossible-p (str)
   (or
-   (< (- (window-width) (current-column))
-      (length (ivy-state-current ivy-last)))
+   (and (eq major-mode 'org-mode)
+        (plist-get (text-properties-at (point)) 'src-block))
    (<= (window-height) (+ ivy-height 3))
-   (= (point) (point-min))))
+   (= (point) (point-min))
+   (< (- (+ (window-width) (window-hscroll)) (current-column))
+      (apply #'max
+             (mapcar #'string-width
+                     (split-string str "\n"))))))
 
 (defun ivy-display-function-overlay (str)
   "Called from the minibuffer, display STR in an overlay in Ivy window.
 Hide the minibuffer contents and cursor."
   (if (save-selected-window
         (select-window (ivy-state-window ivy-last))
-        (ivy-overlay-impossible-p))
+        (ivy-overlay-impossible-p str))
       (let ((buffer-undo-list t))
         (save-excursion
           (forward-line 1)
           (insert str)))
-    (add-face-text-property (minibuffer-prompt-end) (point-max)
-                            '(:foreground "white"))
+    (ivy-add-face-text-property (minibuffer-prompt-end) (point-max)
+                                '(:foreground "white"))
     (let ((cursor-pos (1+ (- (point) (minibuffer-prompt-end))))
           (ivy-window (ivy--get-window ivy-last)))
       (setq cursor-type nil)
@@ -108,25 +119,28 @@ Hide the minibuffer contents and cursor."
           (setq ivy--old-cursor-type cursor-type))
         (setq cursor-type nil)
         (let ((overlay-str
-               (concat
-                (buffer-substring (max 1 (1- (point))) (point))
+               (apply
+                #'concat
+                (buffer-substring (max (point-min) (1- (point))) (point))
                 ivy-text
-                (if (eolp)
-                    " "
-                  "")
+                (and (eolp) " ")
                 (buffer-substring (point) (line-end-position))
-                (ivy-left-pad
-                 str
-                 (+ (if (and (eq major-mode 'org-mode)
-                             (bound-and-true-p org-indent-mode))
-                        (* org-indent-indentation-per-level 
(org-current-level))
-                      0)
-                    (save-excursion
-                      (goto-char ivy-completion-beg)
-                      (current-column)))))))
-          (add-face-text-property cursor-pos (1+ cursor-pos)
-                                  'ivy-cursor t overlay-str)
+                (and (> (length str) 0)
+                     (list "\n"
+                           (ivy-left-pad
+                            (ivy--remove-prefix "\n" str)
+                            (+ (if (and (eq major-mode 'org-mode)
+                                        (bound-and-true-p org-indent-mode))
+                                   (* org-indent-indentation-per-level
+                                      (org-current-level))
+                                 0)
+                               (save-excursion
+                                 (goto-char ivy-completion-beg)
+                                 (current-column)))))))))
+          (ivy-add-face-text-property cursor-pos (1+ cursor-pos)
+                                      'ivy-cursor overlay-str t)
           (ivy-overlay-show-after overlay-str))))))
 
 (provide 'ivy-overlay)
+
 ;;; ivy-overlay.el ends here
diff --git a/packages/ivy/ivy-test.el b/packages/ivy/ivy-test.el
index af6982e..7fc34be 100644
--- a/packages/ivy/ivy-test.el
+++ b/packages/ivy/ivy-test.el
@@ -1,6 +1,6 @@
 ;;; ivy-test.el --- tests for ivy -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2017  Free Software Foundation, Inc.
+;; Copyright (C) 2015-2019  Free Software Foundation, Inc.
 
 ;; Author: Oleh Krehel
 
@@ -17,18 +17,19 @@
 ;; GNU General Public License for more details.
 
 ;; For a full copy of the GNU General Public License
-;; see <http://www.gnu.org/licenses/>.
+;; see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
-;;
+
 ;; This packages provides the tests for `ert'.  They can be executed
 ;; from the command line as well by calling "make test".
 
 ;;; Code:
+
 (require 'ert)
 (require 'colir)
 
-;; useful for #'ivy-read-remap. It must arrive before (require 'ivy)
+;; Useful for #'ivy-read-remap.  It must arrive before (require 'ivy).
 (define-key global-map (kbd "<S-right>") #'end-of-buffer)
 
 (require 'ivy)
@@ -64,7 +65,7 @@
   "Suppress void-function errors.
 
 This advice makes `symbol-function' return nil when called on a
-symbol with no function rather than throwing a void-fucntion
+symbol with no function rather than throwing a void-function
 error. On Emacs 24.4 and above, this has no effect, because
 `symbol-function' already does this, but on 24.3 and earlier, it
 will bring the behavior in line with the newer Emacsen."
@@ -72,7 +73,7 @@ will bring the behavior in line with the newer Emacsen."
       ad-do-it
     (void-function nil)))
 
-(ert-deftest ivy-partial ()
+(ert-deftest ivy-partial-1 ()
   (should (equal
            (ivy-with '(ivy-read "test: " '("case" "Case"))
                      "ca TAB C-m")
@@ -112,6 +113,10 @@ will bring the behavior in line with the newer Emacsen."
            (ivy-with '(ivy-read "test" '("aaab" "aaac"))
                      "a C-n <tab> C-m")
            "aaac"))
+  (should (equal-including-properties
+           (ivy-with '(ivy-read "test" '(("foo" . "bar")))
+                     "C-m")
+           "foo"))
   (should (equal
            (ivy-with '(ivy-read "test" '(("foo" . "bar")))
                      "asdf C-m")
@@ -122,7 +127,7 @@ will bring the behavior in line with the newer Emacsen."
               (ivy-read "test" '(("foo" . "bar"))
                :action (lambda (x) (prin1 x))))
             "f C-m")
-           "(#(\"foo\" 0 1 (idx 0)) . \"bar\")"))
+           "(\"foo\" . \"bar\")"))
   (should (equal
            (ivy-with
             '(with-output-to-string
@@ -133,7 +138,24 @@ will bring the behavior in line with the newer Emacsen."
   (should (equal
            (ivy-with '(ivy-read "pattern: " '("can do" "can" "can't do"))
                      "can C-m")
-           "can")))
+           "can"))
+  (should (equal
+           (ivy-with '(ivy-read "pattern: "
+                       '("ignore" "build" "build-1" "build-2") :preselect 
"build")
+                     "b C-m")
+           "build"))
+  (should (equal (ivy-with
+                  '(ivy-read "x: " '("one" "two" ("three" . "four")))
+                  "th C-m")
+                 "three")))
+
+(ert-deftest ivy-read-sort-alist ()
+  (should (equal (ivy-with '(let ((coll '(("b" . "1") ("a" . "2"))))
+                             (ivy-read "test:" coll
+                              :sort t)
+                             coll)
+                           "C-m")
+                 '(("b" . "1") ("a" . "2")))))
 
 (ert-deftest ivy-read-remap ()
   (should (equal
@@ -153,29 +175,91 @@ will bring the behavior in line with the newer Emacsen."
 (ert-deftest ivy--split ()
   (should (equal (ivy--split "King of the who?")
                  '("King" "of" "the" "who?")))
-  (should (equal (ivy--split "The  Brittons.")
-                 '("The Brittons.")))
-  (should (equal (ivy--split "Who  are the  Brittons?")
-                 '("Who are" "the Brittons?")))
+  (should (equal (ivy--split "The  Britons.")
+                 '("The Britons.")))
+  (should (equal (ivy--split "Who  are the  Britons?")
+                 '("Who are" "the Britons?")))
   (should (equal (ivy--split "We're  all  Britons and   I   am your   king.")
                  '("We're all Britons"
                    "and  I  am"
                    "your  king.")))
   (should (equal (ivy--split "^[^ ]") '("^[^ ]")))
-  (should (equal (ivy--split "^[^ ] bar") '("^[^ ]" "bar"))))
+  (should (equal (ivy--split "^[^ ] bar") '("^[^ ]" "bar")))
+  (should (equal (ivy--split "defun [^ ]+") '("defun" "[^ ]+"))))
 
 (ert-deftest ivy--regex ()
   (should (equal (ivy--regex
+                  "defun [^ ]+")
+                 "\\(defun\\).*?\\([^ ]+\\)"))
+  (should (equal (ivy--regex
                   "\\(?:interactive\\|swiper\\) \\(?:list\\|symbol\\)")
-                 
"\\(\\(?:interactive\\|swiper\\)\\).*?\\(\\(?:list\\|symbol\\)\\)")))
+                 
"\\(\\(?:interactive\\|swiper\\)\\).*?\\(\\(?:list\\|symbol\\)\\)"))
+  (should (equal (ivy--regex
+                  "foo[")
+                 "foo\\[")))
+
+(ert-deftest ivy--split-negation ()
+  (should (equal (ivy--split-negation "") ()))
+  (should (equal (ivy--split-negation "not") '("not")))
+  (should (equal (ivy--split-negation "!not") '("" "not")))
+  (should (equal (ivy--split-negation "not!") '("not")))
+  (should (equal (ivy--split-negation "!not!") '("" "not")))
+  (should (equal (ivy--split-negation "not!not!not") '("not" "not")))
+  (should (equal (ivy--split-negation "not!not\\!not") '("not" "not!not")))
+  (should (equal (ivy--split-negation "\\!not!not\\!not") '("!not" "not!not")))
+  (should (equal (ivy--split-negation "\\!not!notnot\\!") '("!not" 
"notnot!"))))
+
+(ert-deftest ivy--split-spaces ()
+  (should (equal (ivy--split-spaces "") ()))
+  (should (equal (ivy--split-spaces " ") ()))
+  (should (equal (ivy--split-spaces "  ") ()))
+
+  (should (equal (ivy--split-spaces "a ") '("a")))
+  (should (equal (ivy--split-spaces " a") '("a")))
+  (should (equal (ivy--split-spaces " a ") '("a")))
+  (should (equal (ivy--split-spaces "a  ") '("a")))
+  (should (equal (ivy--split-spaces "  a") '("a")))
+  (should (equal (ivy--split-spaces "  a  ") '("a")))
+
+  (should (equal (ivy--split-spaces "\\ ") '(" ")))
+  (should (equal (ivy--split-spaces "\\  ") '(" ")))
+  (should (equal (ivy--split-spaces " \\ ") '(" ")))
+  (should (equal (ivy--split-spaces "\\ \\ ") '("  ")))
+  (should (equal (ivy--split-spaces "a\\ ") '("a ")))
+  (should (equal (ivy--split-spaces "\\ a") '(" a")))
+  (should (equal (ivy--split-spaces "\\ a\\ ") '(" a ")))
+
+  (should (equal (ivy--split-spaces "a b") '("a" "b")))
+  (should (equal (ivy--split-spaces "a\\ b") '("a b")))
+  (should (equal (ivy--split-spaces " a b\\ ") '("a" "b ")))
+  (should (equal (ivy--split-spaces "\\  a b ") '(" " "a" "b")))
+  (should (equal (ivy--split-spaces " a\\  \\ b ") '("a " " b")))
+
+  (should (equal (ivy--split-spaces "foo[") '("foo\\[")))
+  (should (equal (ivy--split-spaces "foo[a]") '("foo[a]")))
+  (should (equal (ivy--split-spaces "foo[ ]") '("foo\\[" "]"))))
+
+(ert-deftest ivy--regex-plus ()
+  (should (equal (ivy--regex-plus "add path\\!") "\\(add\\).*?\\(path!\\)")))
+
+(ert-deftest ivy-partial-2 ()
+  (when (fboundp 'read--expression)
+    (should
+     (equal
+      (ivy-with '(read--expression "Eval: "
+                  "'s-c-t-st")
+                "<tab> C-m")
+      '(quote shell-command-to-string)))))
 
 (ert-deftest ivy--regex-fuzzy ()
   (should (string= (ivy--regex-fuzzy "tmux")
-                   "\\(t\\).*?\\(m\\).*?\\(u\\).*?\\(x\\)"))
+                   "\\(t\\)[^m]*\\(m\\)[^u]*\\(u\\)[^x]*\\(x\\)"))
+  (should (string= (ivy--regex-fuzzy ".tmux")
+                   
"\\(\\.\\)[^t]*\\(t\\)[^m]*\\(m\\)[^u]*\\(u\\)[^x]*\\(x\\)"))
   (should (string= (ivy--regex-fuzzy "^tmux")
-                   "^\\(t\\).*?\\(m\\).*?\\(u\\).*?\\(x\\)"))
+                   "^\\(t\\)[^m]*\\(m\\)[^u]*\\(u\\)[^x]*\\(x\\)"))
   (should (string= (ivy--regex-fuzzy "^tmux$")
-                   "^\\(t\\).*?\\(m\\).*?\\(u\\).*?\\(x\\)$"))
+                   "^\\(t\\)[^m]*\\(m\\)[^u]*\\(u\\)[^x]*\\(x\\)$"))
   (should (string= (ivy--regex-fuzzy "")
                    ""))
   (should (string= (ivy--regex-fuzzy "^")
@@ -241,13 +325,26 @@ will bring the behavior in line with the newer Emacsen."
   (should (equal (ivy--filter "The" '("foo" "the" "The"))
                  '("The"))))
 
-(ert-deftest counsel-unquote-regex-parens ()
-  (should (equal (counsel-unquote-regex-parens
+(ert-deftest counsel--elisp-to-pcre ()
+  (should (equal (counsel--elisp-to-pcre
                   (ivy--regex "foo bar"))
                  "(foo).*?(bar)"))
-  (should (equal (counsel-unquote-regex-parens
-                  (ivy--regex "(foo bar"))
-                 "(\\(foo).*?(bar)")))
+  (should (equal (counsel--elisp-to-pcre
+                  (ivy--regex "(foo bar)"))
+                 "(\\(foo).*?(bar\\))"))
+  (should (equal (counsel--elisp-to-pcre
+                  (ivy--regex "{foo bar}"))
+                 "({foo).*?(bar})"))
+  (should (equal (counsel--elisp-to-pcre "\\{foo bar\\}")
+                 "{foo bar}"))
+  (should (equal (counsel--elisp-to-pcre "\\(foo\\|bar\\)\\|baz")
+                 "(foo|bar)|baz"))
+  (should (equal (counsel--elisp-to-pcre
+                  '(("foo") ("bar" . t) ("baz" . t)))
+                 "bar.*baz"))
+  (should (equal (counsel--elisp-to-pcre
+                  '(("foo\\|bar" . t) ("blah\\|bloop") ("blick" . t) 
("\\(baz\\)\\|quux" . t)))
+                 "(?:foo|bar).*blick.*(?:(baz)|quux)")))
 
 (defmacro ivy--string-buffer (text &rest body)
   "Test helper that wraps TEXT in a temp buffer while running BODY."
@@ -285,6 +382,20 @@ will bring the behavior in line with the newer Emacsen."
                    0.07058823529411765
                    0.20392156862745098))))
 
+(ert-deftest colir-blend-face-background ()
+  ;; Note: should be `equal-including-properties', but it doesn't work as I 
like
+  ;; `equal' doesn't test text properties
+  (should (equal
+           (let ((str #("One" 0 3 (face (:foreground "#badfad")))))
+             (ivy--add-face str 'ivy-current-match)
+             str)
+           #("One" 0 3 (face (ivy-current-match :foreground "#badfad")))))
+  (should (equal
+           (let ((str #("Desktop" 0 7 (face ((foreground-color . "#badfad") 
bold)))))
+             (colir-blend-face-background 0 (length str) 'ivy-current-match 
str)
+             str)
+           #("Desktop" 0 7 (face (ivy-current-match (foreground-color . 
"#8ac6f2") bold))))))
+
 
 ;;* prefix arg tests
 ;;** tests with no prefix
@@ -636,6 +747,13 @@ will bring the behavior in line with the newer Emacsen."
    (equal "c"
           (ivy-with '(ivy-completing-read "Pick: " '("a" "b" "c") nil t nil 
nil nil)
                     "c RET")))
+  ;; DEF list, empty input (no text collection), non-text default, same object
+  (let ((def '([a b])))
+    (should
+     (eq (car def)
+         (ivy-with
+          (eval `'(ivy-completing-read "Pick: " nil nil 'require-match nil nil 
',def))
+          "RET"))))
   ;; DEF nil, and called via `ivy-completing-read-with-empty-string-def'
   (should
    (equal ""
@@ -716,6 +834,151 @@ will bring the behavior in line with the newer Emacsen."
                     "c RET"))))
       (ivy-mode ivy-mode-reset-arg))))
 
+(ert-deftest ivy-completion-common-length ()
+  (should (= 2
+             (ivy-completion-common-length
+              #("test/"
+                0 2 (face completions-common-part)
+                2 3 (face (completions-first-difference))))))
+  (should (= 5
+             (ivy-completion-common-length
+              #("Math/E"
+                0 5 (face (completions-common-part))
+                5 6 (face (completions-first-difference))))))
+  (should (= 3
+             (ivy-completion-common-length
+              #("vec"
+                0 3 (face (completions-common-part)))))))
+
+(ert-deftest ivy--sort-function ()
+  "Test `ivy--sort-function' behavior."
+  ;; No enabled collections
+  (dolist (alist '(() ((t)) ((t nil)) ((a)) ((a nil))))
+    (let ((ivy-sort-functions-alist alist))
+      (dolist (coll '(a b))
+        (should (not (ivy--sort-function coll))))))
+  (dolist (fn (list #'identity (lambda ()) '(lambda ())))
+    ;; No fallback
+    (dolist (alist `(((a . ,fn))
+                     ((a ,fn))))
+      (let ((ivy-sort-functions-alist alist))
+        (should (eq (ivy--sort-function 'a) fn))
+        (should (not (ivy--sort-function 'b)))))
+    ;; Only fallback
+    (dolist (alist `(((t . ,fn))
+                     ((t ,fn))))
+      (let ((ivy-sort-functions-alist alist))
+        (dolist (coll '(a b))
+          (should (eq (ivy--sort-function coll) fn)))))
+    ;; Fallback with disabled collection
+    (dolist (alist `(((a) (t . ,fn))
+                     ((a) (t ,fn))))
+      (let ((ivy-sort-functions-alist alist))
+        (should (not (ivy--sort-function 'a)))
+        (should (eq (ivy--sort-function 'b) fn)))))
+  ;; Fallback with enabled collection
+  (let* ((fn0 #'identity)
+         (fn1 (lambda ()))
+         (ivy-sort-functions-alist `((a ,fn0) (b) (t ,fn1))))
+    (should (eq (ivy--sort-function 'a) fn0))
+    (should (not (ivy--sort-function 'b)))
+    (should (eq (ivy--sort-function 'c) fn1))))
+
+(ert-deftest ivy-read-directory-name ()
+  (should
+   (equal "/tmp/"
+          (ivy-with
+           '(read-directory-name "cd: " "/tmp")
+           "RET"))))
+
+(ert-deftest ivy-partial-files ()
+  (when (file-exists-p "/tmp/ivy-partial-test")
+    (delete-directory "/tmp/ivy-partial-test" t))
+  (mkdir "/tmp/ivy-partial-test/test1" t)
+  (mkdir "/tmp/ivy-partial-test/test2")
+  (define-key ivy-minibuffer-map (kbd "TAB") 'ivy-partial)
+  (should
+   (equal
+    (save-window-excursion
+      (condition-case nil
+          (ivy-with
+           '(let ((default-directory "/tmp/ivy-partial-test/"))
+             (counsel-find-file))
+           "t TAB TAB TAB C-g")
+        (quit ivy--old-cands)))
+    '("test1/" "test2/")))
+  (define-key ivy-minibuffer-map (kbd "TAB") 'ivy-partial-or-done)
+  (delete-directory "/tmp/ivy-partial-test" t))
+
+(defun ivy-with-temp-buffer (expr keys)
+  (let ((temp-buffer (generate-new-buffer " *temp*")))
+    (save-window-excursion
+      (unwind-protect
+           (progn
+             (switch-to-buffer temp-buffer)
+             (ivy-with expr keys)
+             (list (point)
+                   (buffer-string)))
+        (and (buffer-name temp-buffer)
+             (kill-buffer temp-buffer))))))
+
+(ert-deftest counsel-yank-pop ()
+  (let ((kill-ring '("foo")))
+    (should (equal
+             (ivy-with-temp-buffer '(counsel-yank-pop) "C-m")
+             '(4 "foo")))
+    (let ((counsel-yank-pop-after-point t))
+      (should (equal
+               (ivy-with-temp-buffer '(counsel-yank-pop) "C-m")
+               '(1 "foo"))))))
+
+(ert-deftest ivy-read-file-name-in-buffer-visiting-file ()
+  "Test `ivy-immediate-done' command in `read-file-name' without any editing in
+a buffer visiting a file."
+  (let ((ivy-mode-reset-arg (if ivy-mode 1 0)))
+    (ivy-mode 1)
+    (should
+     (equal "~/dummy-dir/dummy-file" ;visiting file name, abbreviated form
+            (ivy-with
+             '(let ((insert-default-directory t))
+                (with-temp-buffer
+                  (set-visited-file-name "~/dummy-dir/dummy-file")
+                  (read-file-name "Load file: " nil nil 'lambda))) ;load-file
+             ;; No editing, just command ivy-immediate-done
+             "C-M-j")))
+    (ivy-mode ivy-mode-reset-arg)))
+
+(ert-deftest ivy-starts-with-dotslash ()
+  (should (ivy--starts-with-dotslash "./test1"))
+  (should (ivy--starts-with-dotslash ".\\test2"))
+  (should (not (ivy--starts-with-dotslash "test3")))
+  (should (not (ivy--starts-with-dotslash "t/est4")))
+  (should (not (ivy--starts-with-dotslash "t\\est5")))
+  (should (not (ivy--starts-with-dotslash "tes./t6"))))
+
+(ert-deftest counsel--normalize-grep-match ()
+  (with-temp-buffer
+    (let ((match-data-orig
+           (progn
+             (insert "abcd\nefgh")
+             (goto-char (point-min))
+             (re-search-forward "\\(ab\\)\\(cd\\)")
+             (match-data)))
+          input expected out)
+      (dolist (test '(("./FILENAME:1234:32:  TEXT   MORETEXT" .
+                       "./FILENAME:1234:  TEXT   MORETEXT")
+                      ("FILENAME:1234:  TEXT   MORETEXT" .
+                       "./FILENAME:1234:  TEXT   MORETEXT")
+                      ))
+        (setq input (car test))
+        (setq expected (cdr test))
+        (setq out (counsel--normalize-grep-match input))
+        (should (equal out expected))
+        (should (equal match-data-orig (match-data)))
+        (setq out (counsel--normalize-grep-match out))
+        (should (equal out expected))
+        (should (equal match-data-orig (match-data)))))))
+
 (provide 'ivy-test)
 
 ;;; ivy-test.el ends here
diff --git a/packages/ivy/ivy.el b/packages/ivy/ivy.el
index e26ce51..7d833a6 100644
--- a/packages/ivy/ivy.el
+++ b/packages/ivy/ivy.el
@@ -1,10 +1,10 @@
 ;;; ivy.el --- Incremental Vertical completYon -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2017  Free Software Foundation, Inc.
+;; Copyright (C) 2015-2019  Free Software Foundation, Inc.
 
 ;; Author: Oleh Krehel <address@hidden>
 ;; URL: https://github.com/abo-abo/swiper
-;; Version: 0.10.0
+;; Version: 0.11.0
 ;; Package-Requires: ((emacs "24.1"))
 ;; Keywords: matching
 
@@ -21,10 +21,10 @@
 ;; GNU General Public License for more details.
 
 ;; For a full copy of the GNU General Public License
-;; see <http://www.gnu.org/licenses/>.
+;; see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
-;;
+
 ;; This package provides `ivy-read' as an alternative to
 ;; `completing-read' and similar functions.
 ;;
@@ -37,9 +37,11 @@
 ;; So "for example" is transformed into "\\(for\\).*\\(example\\)".
 
 ;;; Code:
+
 (require 'cl-lib)
 (require 'ffap)
 (require 'ivy-overlay)
+(require 'colir)
 
 ;;* Customization
 (defgroup ivy nil
@@ -58,6 +60,10 @@
      :background "#65a7e2" :foreground "black"))
   "Face used by Ivy for highlighting the current match.")
 
+(defface ivy-minibuffer-match-highlight
+  '((t :inherit highlight))
+  "Face used by Ivy for highlighting the match under the cursor.")
+
 (defface ivy-minibuffer-match-face-1
   '((((class color) (background light))
      :background "#d3d3d3")
@@ -98,10 +104,18 @@
   '((t :inherit dired-directory))
   "Face used by Ivy for highlighting subdirs in the alternatives.")
 
+(defface ivy-org
+  '((t :inherit org-level-4))
+  "Face used by Ivy for highlighting Org buffers in the alternatives.")
+
 (defface ivy-modified-buffer
   '((t :inherit default))
   "Face used by Ivy for highlighting modified file visiting buffers.")
 
+(defface ivy-modified-outside-buffer
+  '((t :inherit default))
+  "Face used by Ivy for highlighting file visiting buffers modified outside 
Emacs.")
+
 (defface ivy-remote
   '((((class color) (background light))
      :foreground "#110099")
@@ -125,10 +139,33 @@
   '((t :inherit ivy-current-match))
   "Face used by Ivy for highlighting the selected prompt line.")
 
+(defface ivy-separator
+  '((t :inherit font-lock-doc-face))
+  "Face for multiline source separator.")
+
+(defface ivy-grep-info
+  '((t :inherit compilation-info))
+  "Face for highlighting grep information such as file names.")
+
+(defface ivy-grep-line-number
+  '((t :inherit compilation-line-number))
+  "Face for displaying line numbers in grep messages.")
+
+(defface ivy-completions-annotations
+  '((t :inherit completions-annotations))
+  "Face for displaying completion annotations.")
+
+(defface ivy-yanked-word
+  '((t :inherit highlight))
+  "Face used to highlight yanked word.")
+
+;; Set default customization `:group' to `ivy' for the rest of the file.
 (setcdr (assoc load-file-name custom-current-group-alist) 'ivy)
 
 (defcustom ivy-height 10
-  "Number of lines for the minibuffer window."
+  "Number of lines for the minibuffer window.
+
+See also `ivy-height-alist'."
   :type 'integer)
 
 (defcustom ivy-count-format "%-4d "
@@ -149,7 +186,7 @@ Set this to \"(%d/%d) \" to display both the index and the 
count."
   "When non-nil, wrap around after the first and the last candidate."
   :type 'boolean)
 
-(defcustom ivy-display-style (unless (version< emacs-version "24.5") 'fancy)
+(defcustom ivy-display-style (and (fboundp 'add-face-text-property) 'fancy)
   "The style for formatting the minibuffer.
 
 By default, the matched strings are copied as is.
@@ -158,16 +195,22 @@ The fancy display style highlights matching parts of the 
regexp,
 a behavior similar to `swiper'.
 
 This setting depends on `add-face-text-property' - a C function
-available as of Emacs 24.5.  Fancy style will render poorly in
+available since Emacs 24.4.  Fancy style will render poorly in
 earlier versions of Emacs."
   :type '(choice
           (const :tag "Plain" nil)
           (const :tag "Fancy" fancy)))
 
-(defcustom ivy-on-del-error-function 'minibuffer-keyboard-quit
-  "The handler for when `ivy-backward-delete-char' throws.
-Usually a quick exit out of the minibuffer."
-  :type 'function)
+(defcustom ivy-on-del-error-function #'abort-recursive-edit
+  "Function to call when deletion fails during completion.
+The usual reason for `ivy-backward-delete-char' to fail is when
+there is no text left to delete, i.e., when it is called at the
+beginning of the minibuffer.
+The default setting provides a quick exit from completion."
+  :type '(choice
+          (const :tag "Exit completion" abort-recursive-edit)
+          (const :tag "Do nothing" ignore)
+          (function :tag "Custom function")))
 
 (defcustom ivy-extra-directories '("../" "./")
   "Add this to the front of the list when completing file names.
@@ -182,20 +225,35 @@ Only \"./\" and \"../\" apply here.  They appear in 
reverse order."
   :type 'boolean)
 
 (defcustom ivy-display-function nil
-  "Decide where to display the candidates.
-This function takes a string with the current matching candidates
-and has to display it somewhere.
-See https://github.com/abo-abo/swiper/wiki/ivy-display-function.";
+  "Determine where to display candidates.
+When nil (the default), candidates are shown in the minibuffer.
+Otherwise, this can be set to a function which takes a string
+argument comprising the current matching candidates and displays
+it somewhere.
+
+This user option acts as a global default for Ivy-based
+completion commands.  You can customize the display function on a
+per-command basis via `ivy-display-functions-alist', which see.
+See also URL
+`https://github.com/abo-abo/swiper/wiki/ivy-display-function'."
   :type '(choice
           (const :tag "Minibuffer" nil)
           (const :tag "LV" ivy-display-function-lv)
           (const :tag "Popup" ivy-display-function-popup)
           (const :tag "Overlay" ivy-display-function-overlay)))
 
+(defvar ivy-display-functions-props
+  '((ivy-display-function-overlay :cleanup ivy-overlay-cleanup))
+  "Map Ivy display functions to their property lists.
+Examples of properties include associated `:cleanup' functions.")
+
 (defvar ivy-display-functions-alist
   '((ivy-completion-in-region . ivy-display-function-overlay))
   "An alist for customizing `ivy-display-function'.")
 
+(defvar ivy-completing-read-dynamic-collection nil
+  "Run `ivy-completing-read' with `:dynamic-collection t`.")
+
 (defcustom ivy-completing-read-handlers-alist
   '((tmm-menubar . completing-read-default)
     (tmm-shortcut . completing-read-default)
@@ -206,17 +264,29 @@ See 
https://github.com/abo-abo/swiper/wiki/ivy-display-function.";
     (Info-menu . ivy-completing-read-with-empty-string-def)
     (Info-index . ivy-completing-read-with-empty-string-def)
     (Info-virtual-index . ivy-completing-read-with-empty-string-def)
-    (info-display-manual . ivy-completing-read-with-empty-string-def)
-    (webjump . ivy-completing-read-with-empty-string-def))
+    (info-display-manual . ivy-completing-read-with-empty-string-def))
   "An alist of handlers to replace `completing-read' in `ivy-mode'."
   :type '(alist :key-type function :value-type function))
 
+(defcustom ivy-height-alist nil
+  "An alist to customize `ivy-height'.
+
+It is a list of (CALLER . HEIGHT).  CALLER is a caller of
+`ivy-read' and HEIGHT is the number of lines displayed.
+HEIGHT can also be a function that returns the number of lines."
+  :type '(alist
+          :key-type function
+          :value-type (choice integer function)))
+
 (defvar ivy-completing-read-ignore-handlers-depth -1
   "Used to avoid infinite recursion.
 
 If `(minibuffer-depth)' equals this, `ivy-completing-read' will
 act as if `ivy-completing-read-handlers-alist' is empty.")
 
+(defvar ivy-highlight-grep-commands nil
+  "List of counsel grep-like commands.")
+
 (defvar ivy--actions-list nil
   "A list of extra actions per command.")
 
@@ -294,6 +364,9 @@ action functions.")
 (defvar ivy-minibuffer-map
   (let ((map (make-sparse-keymap)))
     (define-key map (kbd "C-m") 'ivy-done)
+    (define-key map [down-mouse-1] 'ignore)
+    (define-key map [mouse-1] 'ivy-mouse-done)
+    (define-key map [mouse-3] 'ivy-mouse-dispatching-done)
     (define-key map (kbd "C-M-m") 'ivy-call)
     (define-key map (kbd "C-j") 'ivy-alt-done)
     (define-key map (kbd "C-M-j") 'ivy-immediate-done)
@@ -308,6 +381,7 @@ action functions.")
     (define-key map [remap backward-kill-word] 'ivy-backward-kill-word)
     (define-key map [remap delete-char] 'ivy-delete-char)
     (define-key map [remap forward-char] 'ivy-forward-char)
+    (define-key map (kbd "<right>") 'ivy-forward-char)
     (define-key map [remap kill-word] 'ivy-kill-word)
     (define-key map [remap beginning-of-buffer] 'ivy-beginning-of-buffer)
     (define-key map [remap end-of-buffer] 'ivy-end-of-buffer)
@@ -329,6 +403,7 @@ action functions.")
     (define-key map (kbd "M-o") 'ivy-dispatching-done)
     (define-key map (kbd "C-M-o") 'ivy-dispatching-call)
     (define-key map [remap kill-line] 'ivy-kill-line)
+    (define-key map [remap kill-whole-line] 'ivy-kill-whole-line)
     (define-key map (kbd "S-SPC") 'ivy-restrict-to-matches)
     (define-key map [remap kill-ring-save] 'ivy-kill-ring-save)
     (define-key map (kbd "C-'") 'ivy-avy)
@@ -393,21 +468,26 @@ the restoring themselves.")
   "Set the current `ivy-last' field to ACTION."
   (setf (ivy-state-action ivy-last) action))
 
+(defvar inhibit-message)
+
 (defun ivy-thing-at-point ()
   "Return a string that corresponds to the current thing at point."
-  (or
-   (thing-at-point 'url)
-   (and (eq (ivy-state-collection ivy-last) 'read-file-name-internal)
-        (ffap-file-at-point))
-   (let (s)
-     (cond ((stringp (setq s (thing-at-point 'symbol)))
+  (substring-no-properties
+   (cond
+    ((thing-at-point 'url))
+    ((and (eq (ivy-state-collection ivy-last) #'read-file-name-internal)
+          (let ((inhibit-message t))
+            (ignore-errors
+              (ffap-file-at-point)))))
+    ((let ((s (thing-at-point 'symbol)))
+       (and (stringp s)
             (if (string-match "\\`[`']?\\(.*?\\)'?\\'" s)
                 (match-string 1 s)
-              s))
-           ((looking-at "(+\\(\\(?:\\sw\\|\\s_\\)+\\)\\_>")
-            (match-string-no-properties 1))
-           (t
-            "")))))
+              s))))
+    ((looking-at "(+\\(\\(?:\\sw\\|\\s_\\)+\\)\\_>")
+     (match-string-no-properties 1))
+    (t
+     ""))))
 
 (defvar ivy-history nil
   "History list of candidates entered in the minibuffer.
@@ -427,6 +507,11 @@ of `history-length'.")
 (defvar ivy--index 0
   "Store the index of the current candidate.")
 
+(defvar ivy--window-index 0
+  "Store the index of the current candidate in the minibuffer window.
+
+This means it's between 0 and `ivy-height'.")
+
 (defvar ivy-exit nil
   "Store `done' if the completion was successfully selected.
 Otherwise, store nil.")
@@ -490,22 +575,48 @@ Either a string or a list for `ivy-re-match'.")
 (defvar ivy--old-text ""
   "Store old `ivy-text' for dynamic completion.")
 
-(defcustom ivy-case-fold-search-default 'auto
-  "The default value for `ivy-case-fold-search'."
+(defcustom ivy-case-fold-search-default
+  (if search-upper-case
+      'auto
+    case-fold-search)
+  "The default value for `case-fold-search' in Ivy operations.
+The special value `auto' means case folding is performed so long
+as the entire input string comprises lower-case characters.  This
+corresponds to the default behaviour of most Emacs search
+functionality, e.g. as seen in `isearch'."
+  :link '(info-link "(emacs)Lax Search")
   :type '(choice
           (const :tag "Auto" auto)
-          (const :tag "Always" always)
+          (const :tag "Always" t)
           (const :tag "Never" nil)))
 
 (defvar ivy-case-fold-search ivy-case-fold-search-default
   "Store the current overriding `case-fold-search'.")
 
-(defvar Info-current-file)
-
-(defun ivy-re-to-str (re)
-  (if (stringp re)
-      re
-    (caar re)))
+(defvar ivy-more-chars-alist
+  '((counsel-grep . 2)
+    (t . 3))
+  "Map commands to their minimum required input length.
+That is the number of characters prompted for before fetching
+candidates.  The special key t is used as a fallback.")
+
+(defun ivy-more-chars ()
+  "Return two fake candidates prompting for at least N input.
+N is obtained from `ivy-more-chars-alist'."
+  (let ((diff (- (ivy-alist-setting ivy-more-chars-alist)
+                 (length ivy-text))))
+    (when (> diff 0)
+      (list "" (format "%d chars more" diff)))))
+
+(defun ivy--case-fold-p (string)
+  "Return nil if STRING should be matched case-sensitively."
+  (if (eq ivy-case-fold-search 'auto)
+      (string= string (downcase string))
+    ivy-case-fold-search))
+
+(defun ivy--case-fold-string= (s1 s2)
+  "Like `string=', but obeys `case-fold-search'."
+  (eq t (compare-strings s1 nil nil s2 nil nil case-fold-search)))
 
 (eval-and-compile
   (unless (fboundp 'defvar-local)
@@ -521,13 +632,15 @@ Either a string or a list for `ivy-re-match'.")
 
 (defmacro ivy-quit-and-run (&rest body)
   "Quit the minibuffer and run BODY afterwards."
+  (declare (indent 0))
   `(progn
      (put 'quit 'error-message "")
      (run-at-time nil nil
                   (lambda ()
                     (put 'quit 'error-message "Quit")
-                    ,@body))
-     (minibuffer-keyboard-quit)))
+                    (with-demoted-errors "Error: %S"
+                      ,@body)))
+     (abort-recursive-edit)))
 
 (defun ivy-exit-with-action (action)
   "Quit the minibuffer and call ACTION afterwards."
@@ -562,7 +675,7 @@ Either a string or a list for `ivy-re-match'.")
 The prompt line can be selected by calling `ivy-previous-line' when the first
 regular candidate is selected.  Both actions `ivy-done' and `ivy-alt-done',
 when called on a selected prompt, are forwarded to `ivy-immediate-done', which
-results to the same as calling `ivy-immediate-done' explicitely when a regular
+results to the same as calling `ivy-immediate-done' explicitly when a regular
 candidate is selected.
 
 Note that if `ivy-wrap' is set to t, calling `ivy-previous-line' when the
@@ -611,6 +724,44 @@ candidate, not the prompt."
            (insert ivy-text)
            (ivy--exhibit)))))
 
+(defvar ivy-mouse-1-tooltip
+  "Exit the minibuffer with the selected candidate."
+  "The doc visible in the tooltip for mouse-1 binding in the minibuffer")
+(defvar ivy-mouse-3-tooltip
+  "Display alternative actions."
+  "The doc visible in the tooltip for mouse-3 binding in the minibuffer")
+
+(defun ivy-mouse-offset (event)
+  "Compute the offset between the candidate at point and the selected one."
+  (if event
+      (let* ((line-number-at-point
+              (max 2
+                   (line-number-at-pos (posn-point (event-start event)))))
+
+             (line-number-candidate ;; convert to 0 based index
+              (- line-number-at-point 2))
+             (offset
+              (- line-number-candidate
+                 ivy--window-index)))
+        offset)
+    nil))
+
+(defun ivy-mouse-done (event)
+  (interactive "@e")
+  (let ((offset (ivy-mouse-offset event)))
+    (when offset
+      (ivy-next-line offset)
+      (ivy--exhibit)
+      (ivy-alt-done))))
+
+(defun ivy-mouse-dispatching-done (event)
+  (interactive "@e")
+  (let ((offset (ivy-mouse-offset event)))
+    (when offset
+      (ivy-next-line offset)
+      (ivy--exhibit)
+      (ivy-dispatching-done))))
+
 (defvar ivy-read-action-format-function 'ivy-read-action-format-default
   "Function used to transform the actions list into a docstring.")
 
@@ -640,14 +791,18 @@ Return nil for `minibuffer-keyboard-quit' or wrong key 
during the
 selection, non-nil otherwise."
   (interactive)
   (let ((actions (ivy-state-action ivy-last)))
-    (if (null (ivy--actionp actions))
+    (if (not (ivy--actionp actions))
         t
       (let* ((hint (funcall ivy-read-action-format-function (cdr actions)))
              (resize-mini-windows t)
-             (key (string (read-key hint)))
-             (action-idx (cl-position-if
-                          (lambda (x) (equal (car x) key))
-                          (cdr actions))))
+             (key "")
+             action-idx)
+        (while (and (setq action-idx (cl-position-if
+                                      (lambda (x)
+                                        (string-prefix-p key (car x)))
+                                      (cdr actions)))
+                    (not (string= key (car (nth action-idx (cdr actions))))))
+          (setq key (concat key (string (read-key hint)))))
         (cond ((member key '("" ""))
                nil)
               ((null action-idx)
@@ -660,8 +815,7 @@ selection, non-nil otherwise."
 
 (defun ivy-shrink-after-dispatching ()
   "Shrink the window after dispatching when action list is too large."
-  (let ((window (selected-window)))
-    (window-resize window (- ivy-height (window-height window)))))
+  (window-resize nil (- ivy-height (window-height))))
 
 (defun ivy-dispatching-done ()
   "Select one of the available actions and call `ivy-done'."
@@ -690,12 +844,16 @@ Is is a cons cell, related to 
`tramp-get-completion-function'."
         (concat user "@" domain)
       domain)))
 
-(declare-function tramp-get-completion-function "tramp")
 (declare-function Info-find-node "info")
+(declare-function Info-read-node-name-1 "info")
+(declare-function tramp-get-completion-function "tramp")
 
 (defun ivy-alt-done (&optional arg)
   "Exit the minibuffer with the selected candidate.
-When ARG is t, exit with current text, ignoring the candidates."
+When ARG is t, exit with current text, ignoring the candidates.
+When the current candidate during file name completion is a
+directory, continue completion from within that directory instead
+of exiting.  This function is otherwise like `ivy-done'."
   (interactive "P")
   (setq ivy-current-prefix-arg current-prefix-arg)
   (cond ((or arg
@@ -703,18 +861,33 @@ When ARG is t, exit with current text, ignoring the 
candidates."
          (ivy-immediate-done))
         (ivy--directory
          (ivy--directory-done))
-        ((eq (ivy-state-collection ivy-last) 'Info-read-node-name-1)
+        ((eq (ivy-state-collection ivy-last) #'Info-read-node-name-1)
          (if (member (ivy-state-current ivy-last) '("(./)" "(../)"))
              (ivy-quit-and-run
-              (ivy-read "Go to file: " 'read-file-name-internal
-                        :action (lambda (x)
-                                  (Info-find-node
-                                   (expand-file-name x ivy--directory)
-                                   "Top"))))
+               (ivy-read "Go to file: " #'read-file-name-internal
+                         :action (lambda (x)
+                                   (Info-find-node
+                                    (expand-file-name x ivy--directory)
+                                    "Top"))))
            (ivy-done)))
         (t
          (ivy-done))))
 
+(defvar ivy-auto-select-single-candidate nil
+  "When non-nil, auto-select the candidate if it is the only one.
+When t, it is the same as if the user were prompted and selected the candidate
+by calling the default action.  This variable has no use unless the collection
+contains a single candidate.")
+
+(defun ivy--directory-enter ()
+  (let (dir)
+    (when (and
+           (> ivy--length 0)
+           (not (string= (ivy-state-current ivy-last) "./"))
+           (setq dir (ivy-expand-file-if-directory (ivy-state-current 
ivy-last))))
+      (ivy--cd dir)
+      (ivy--exhibit))))
+
 (defun ivy--directory-done ()
   "Handle exit from the minibuffer when completing file names."
   (let (dir)
@@ -723,26 +896,25 @@ When ARG is t, exit with current text, ignoring the 
candidates."
        (setq dir (concat ivy-text (expand-file-name ivy--directory)))
        (ivy--cd dir)
        (ivy--exhibit))
-      ((and
-        (> ivy--length 0)
-        (not (string= (ivy-state-current ivy-last) "./"))
-        (setq dir (ivy-expand-file-if-directory (ivy-state-current ivy-last))))
-       (ivy--cd dir)
-       (ivy--exhibit))
-      ((and (not (string= ivy-text ""))
-            (ignore-errors (file-exists-p ivy-text)))
-       (if (file-directory-p ivy-text)
-           (ivy--cd (expand-file-name
-                     (file-name-as-directory ivy-text) ivy--directory))
-         (ivy-done)))
+      ((ivy--directory-enter))
+      ((unless (string= ivy-text "")
+         (let ((file (expand-file-name
+                      (if (> ivy--length 0) (ivy-state-current ivy-last) 
ivy-text)
+                      ivy--directory)))
+           (when (ignore-errors (file-exists-p file))
+             (if (file-directory-p file)
+                 (ivy--cd (file-name-as-directory file))
+               (ivy-done))
+             ivy-text))))
       ((or (and (equal ivy--directory "/")
-                (string-match "\\`[^/]+:.*:.*\\'" ivy-text))
-           (string-match "\\`/[^/]+:.*:.*\\'" ivy-text))
+                (string-match-p "\\`[^/]+:.*:.*\\'" ivy-text))
+           (string-match-p "\\`/[^/]+:.*:.*\\'" ivy-text))
        (ivy-done))
       ((or (and (equal ivy--directory "/")
                 (cond ((string-match
                         "\\`\\([^/]+?\\):\\(?:\\(.*\\)@\\)?\\(.*\\)\\'"
-                        ivy-text))
+                        ivy-text)
+                       (setq ivy-text (ivy-state-current ivy-last)))
                       ((string-match
                         "\\`\\([^/]+?\\):\\(?:\\(.*\\)@\\)?\\(.*\\)\\'"
                         (ivy-state-current ivy-last))
@@ -761,12 +933,13 @@ When ARG is t, exit with current text, ignoring the 
candidates."
          (when user
            (dolist (x res)
              (setcar x user)))
-         (setq res (cl-delete-duplicates res :test #'equal))
+         (setq res (delete-dups res))
          (let* ((old-ivy-last ivy-last)
                 (enable-recursive-minibuffers t)
-                (host (ivy-read "user@host: "
-                                (mapcar #'ivy-build-tramp-name res)
-                                :initial-input rest)))
+                (host (let ((ivy-auto-select-single-candidate nil))
+                        (ivy-read "user@host: "
+                                  (mapcar #'ivy-build-tramp-name res)
+                                  :initial-input rest))))
            (setq ivy-last old-ivy-last)
            (when host
              (setq ivy--directory "/")
@@ -796,8 +969,8 @@ If the text hasn't changed as a result, forward to 
`ivy-alt-done'."
   (interactive)
   (if (and (eq (ivy-state-collection ivy-last) #'read-file-name-internal)
            (or (and (equal ivy--directory "/")
-                    (string-match "\\`[^/]+:.*\\'" ivy-text))
-               (string-match "\\`/" ivy-text)))
+                    (string-match-p "\\`[^/]+:.*\\'" ivy-text))
+               (= (string-to-char ivy-text) ?/)))
       (let ((default-directory ivy--directory)
             dir)
         (minibuffer-complete)
@@ -809,36 +982,47 @@ If the text hasn't changed as a result, forward to 
`ivy-alt-done'."
                   (eq ivy--length 1))
           (ivy-alt-done)))))
 
+(defun ivy--remove-prefix (prefix string)
+  "Compatibility shim for `string-remove-prefix'."
+  (if (string-prefix-p prefix string)
+      (substring string (length prefix))
+    string))
+
 (defun ivy-partial ()
   "Complete the minibuffer text as much as possible."
   (interactive)
   (let* ((parts (or (split-string ivy-text " " t) (list "")))
-         (postfix (car (last parts)))
-         (case-fold-search (and ivy-case-fold-search
-                                (or (eq ivy-case-fold-search 'always)
-                                    (string= ivy-text (downcase ivy-text)))))
+         (tail (last parts))
+         (postfix (car tail))
+         (case-fold-search (ivy--case-fold-p ivy-text))
          (completion-ignore-case case-fold-search)
-         (startp (string-match "^\\^" postfix))
-         (new (try-completion (if startp
-                                  (substring postfix 1)
-                                postfix)
+         (new (try-completion (ivy--remove-prefix "^" postfix)
                               (if (ivy-state-dynamic-collection ivy-last)
                                   ivy--all-candidates
                                 (mapcar (lambda (str)
-                                          (let ((i (string-match postfix str)))
-                                            (when i
-                                              (substring str i))))
+                                          (let ((i (string-match-p postfix 
str)))
+                                            (and i (substring str i))))
                                         ivy--old-cands)))))
     (cond ((eq new t) nil)
           ((string= new ivy-text) nil)
           (new
            (delete-region (minibuffer-prompt-end) (point-max))
-           (setcar (last parts)
-                   (if startp
+           (setcar tail
+                   (if (= (string-to-char postfix) ?^)
                        (concat "^" new)
                      new))
-           (insert (mapconcat #'identity parts " ")
-                   (if ivy-tab-space " " ""))
+           (insert
+            (setq ivy-text
+                  (concat
+                   (mapconcat #'identity parts " ")
+                   (and ivy-tab-space " "))))
+           (when (and
+                  (eq (ivy-state-collection ivy-last) 
#'read-file-name-internal)
+                  (= 1 (length
+                        (all-completions ivy-text ivy--all-candidates)))
+                  (let ((default-directory ivy--directory))
+                    (file-directory-p (ivy-state-current ivy-last))))
+             (ivy--directory-done))
            t))))
 
 (defvar ivy-completion-beg nil
@@ -851,12 +1035,24 @@ If the text hasn't changed as a result, forward to 
`ivy-alt-done'."
   "Exit the minibuffer with current input instead of current candidate."
   (interactive)
   (delete-minibuffer-contents)
-  (insert (setf (ivy-state-current ivy-last)
-                (if (and ivy--directory
-                         (not (eq (ivy-state-history ivy-last)
-                                  'grep-files-history)))
-                    (expand-file-name ivy-text ivy--directory)
-                  ivy-text)))
+  (setf (ivy-state-current ivy-last)
+        (cond ((or (not ivy--directory)
+                   (eq (ivy-state-history ivy-last) 'grep-files-history))
+               ivy-text)
+              ((and (string= ivy-text "")
+                    (eq (ivy-state-collection ivy-last)
+                        #'read-file-name-internal))
+                ;; For `read-file-name' compat, unchanged initial input means
+                ;; that `ivy-read' shall return INITIAL-INPUT.
+                ;; `read-file-name-default' `string-equal' return value with
+                ;; provided INITIAL-INPUT to detect that the user choose the
+                ;; default, `default-filename'.  We must return 
`ivy--directory'
+                ;; in unchanged form in cased `ivy--directory' started out as
+                ;; INITIAL-INPUT in abbreviated form.
+               ivy--directory)          ; Unchanged (unexpanded)
+              (t
+               (expand-file-name ivy-text ivy--directory))))
+  (insert (ivy-state-current ivy-last))
   (setq ivy-completion-beg ivy-completion-end)
   (setq ivy-exit 'done)
   (exit-minibuffer))
@@ -878,9 +1074,7 @@ If the text hasn't changed as a result, forward to 
`ivy-alt-done'."
          :require-match (ivy-state-require-match ivy-last)
          :initial-input ivy-text
          :history (ivy-state-history ivy-last)
-         :preselect (unless (eq (ivy-state-collection ivy-last)
-                                'read-file-name-internal)
-                      (ivy-state-current ivy-last))
+         :preselect (ivy-state-current ivy-last)
          :keymap (ivy-state-keymap ivy-last)
          :update-fn (ivy-state-update-fn ivy-last)
          :sort (ivy-state-sort ivy-last)
@@ -932,10 +1126,10 @@ If the text hasn't changed as a result, forward to 
`ivy-alt-done'."
 (defun ivy-minibuffer-shrink ()
   "Shrink the minibuffer window by 1 line."
   (interactive)
-  (unless (<= ivy-height 2)
+  (when (> ivy-height 2)
     (setq-local max-mini-window-height
                 (cl-decf ivy-height))
-    (window-resize (selected-window) -1)))
+    (window-resize nil -1)))
 
 (defun ivy-next-line (&optional arg)
   "Move cursor vertically down ARG candidates."
@@ -961,8 +1155,7 @@ If the input is empty, select the previous history element 
instead."
   (interactive "p")
   (setq arg (or arg 1))
   (let ((index (- ivy--index arg))
-        (min-index (or (and (ivy--prompt-selectable-p) -1)
-                       0)))
+        (min-index (if (ivy--prompt-selectable-p) -1 0)))
     (if (< index min-index)
         (if ivy-wrap
             (ivy-end-of-buffer)
@@ -1007,14 +1200,12 @@ If the input is empty, select the previous history 
element instead."
       (let ((window (ivy-state-window state)))
         (if (window-live-p window)
             window
-          (if (= (length (window-list)) 1)
-              (selected-window)
-            (next-window))))
+          (next-window)))
     (selected-window)))
 
 (defun ivy--actionp (x)
   "Return non-nil when X is a list of actions."
-  (and x (listp x) (not (memq (car x) '(closure lambda)))))
+  (and (consp x) (not (memq (car x) '(closure lambda)))))
 
 (defcustom ivy-action-wrap nil
   "When non-nil, `ivy-next-action' and `ivy-prev-action' wrap."
@@ -1073,51 +1264,44 @@ See variable `ivy-recursive-restore' for further 
information."
 (defun ivy-call ()
   "Call the current action without exiting completion."
   (interactive)
-  (unless
-      (or
-       ;; this is needed for testing in ivy-with which seems to call ivy-call
-       ;; again, and this-command is nil in that case.
-       (null this-command)
-       (memq this-command '(ivy-done
-                            ivy-alt-done
-                            ivy-dispatching-done)))
+  ;; Testing with `ivy-with' seems to call `ivy-call' again,
+  ;; in which case `this-command' is nil; so check for this.
+  (unless (memq this-command '(nil
+                               ivy-done
+                               ivy-alt-done
+                               ivy-dispatching-done))
     (setq ivy-current-prefix-arg current-prefix-arg))
-  (unless ivy-inhibit-action
-    (let ((action (ivy--get-action ivy-last)))
-      (when action
-        (let* ((collection (ivy-state-collection ivy-last))
-               (x (cond
-                    ;; Alist type.
-                    ((and (consp collection)
-                          (consp (car collection))
-                          ;; Previously, the cdr of the selected
-                          ;; candidate would be returned.  Now, the
-                          ;; whole candidate is returned.
-                          (let (idx)
-                            (if (setq idx (get-text-property
-                                           0 'idx (ivy-state-current 
ivy-last)))
-                                (nth idx collection)
-                              (assoc (ivy-state-current ivy-last)
-                                     collection)))))
-                    (ivy--directory
-                     (expand-file-name
-                      (ivy-state-current ivy-last)
-                      ivy--directory))
-                    ((equal (ivy-state-current ivy-last) "")
-                     ivy-text)
-                    (t
-                     (ivy-state-current ivy-last)))))
-          (if (eq action 'identity)
-              (funcall action x)
-            (select-window (ivy--get-window ivy-last))
-            (prog1 (with-current-buffer (ivy-state-buffer ivy-last)
-                     (unwind-protect (funcall action x)
-                       (ivy-recursive-restore)))
-              (unless (or (eq ivy-exit 'done)
-                          (equal (selected-window)
-                                 (active-minibuffer-window))
-                          (null (active-minibuffer-window)))
-                (select-window (active-minibuffer-window))))))))))
+  (let ((action (and (not ivy-inhibit-action)
+                     (ivy--get-action ivy-last))))
+    (when action
+      (let* ((collection (ivy-state-collection ivy-last))
+             (current (ivy-state-current ivy-last))
+             (x (cond
+                 ;; Alist type.
+                 ((and (consp (car-safe collection))
+                       ;; Previously, the cdr of the selected
+                       ;; candidate would be returned.  Now, the
+                       ;; whole candidate is returned.
+                       (let ((idx (get-text-property 0 'idx current)))
+                         (if idx
+                             (nth idx collection)
+                           (assoc current collection)))))
+                 (ivy--directory
+                  (expand-file-name current ivy--directory))
+                 ((equal current "")
+                  ivy-text)
+                 (t
+                  current))))
+        (if (eq action #'identity)
+            (funcall action x)
+          (select-window (ivy--get-window ivy-last))
+          (set-buffer (ivy-state-buffer ivy-last))
+          (prog1 (unwind-protect (funcall action x)
+                   (ivy-recursive-restore))
+            (unless (or (eq ivy-exit 'done)
+                        (minibuffer-window-active-p (selected-window))
+                        (null (active-minibuffer-window)))
+              (select-window (active-minibuffer-window)))))))))
 
 (defun ivy-call-and-recenter ()
   "Call action and recenter window according to the selected candidate."
@@ -1212,6 +1396,8 @@ If so, move to that directory, while keeping only the 
file name."
       (ivy--exhibit)
       (ivy-set-index idx))))
 
+(declare-function tramp-get-completion-methods "tramp")
+
 (defun ivy--cd (dir)
   "When completing file names, move to directory DIR."
   (if (null ivy--directory)
@@ -1220,23 +1406,35 @@ If so, move to that directory, while keeping only the 
file name."
     (setq ivy--old-re nil)
     (ivy-set-index 0)
     (setq ivy--all-candidates
-          (ivy--sorted-files (setq ivy--directory dir)))
+          (append
+           (ivy--sorted-files (setq ivy--directory dir))
+           (when (and (string= dir "/") (featurep 'tramp))
+             (sort
+              (mapcar
+               (lambda (s) (substring s 1))
+               (tramp-get-completion-methods ""))
+              #'string<))))
     (setq ivy-text "")
+    (setf (ivy-state-directory ivy-last) dir)
     (delete-minibuffer-contents)))
 
+(defun ivy--parent-dir (filename)
+  "Return parent directory of absolute FILENAME."
+  (file-name-directory (directory-file-name filename)))
+
 (defun ivy-backward-delete-char ()
-  "Forward to `backward-delete-char'.
-On error (read-only), call `ivy-on-del-error-function'."
+  "Forward to `delete-backward-char'.
+Call `ivy-on-del-error-function' if an error occurs, usually when
+there is no more text to delete at the beginning of the
+minibuffer."
   (interactive)
   (if (and ivy--directory (= (minibuffer-prompt-end) (point)))
       (progn
-        (ivy--cd (file-name-directory
-                  (directory-file-name
-                   (expand-file-name
-                    ivy--directory))))
+        (ivy--cd (ivy--parent-dir (expand-file-name ivy--directory)))
         (ivy--exhibit))
+    (setq prefix-arg current-prefix-arg)
     (condition-case nil
-        (backward-delete-char 1)
+        (call-interactively #'delete-backward-char)
       (error
        (when ivy-on-del-error-function
          (funcall ivy-on-del-error-function))))))
@@ -1244,19 +1442,19 @@ On error (read-only), call `ivy-on-del-error-function'."
 (defun ivy-delete-char (arg)
   "Forward to `delete-char' ARG."
   (interactive "p")
-  (unless (= (point) (line-end-position))
+  (unless (eolp)
     (delete-char arg)))
 
 (defun ivy-forward-char (arg)
   "Forward to `forward-char' ARG."
   (interactive "p")
-  (unless (= (point) (line-end-position))
+  (unless (eolp)
     (forward-char arg)))
 
 (defun ivy-kill-word (arg)
   "Forward to `kill-word' ARG."
   (interactive "p")
-  (unless (= (point) (line-end-position))
+  (unless (eolp)
     (kill-word arg)))
 
 (defun ivy-kill-line ()
@@ -1266,22 +1464,24 @@ On error (read-only), call `ivy-on-del-error-function'."
       (kill-region (minibuffer-prompt-end) (point))
     (kill-line)))
 
+(defun ivy-kill-whole-line ()
+  "Forward to `kill-whole-line'."
+  (interactive)
+  (kill-region (minibuffer-prompt-end) (line-end-position)))
+
 (defun ivy-backward-kill-word ()
   "Forward to `backward-kill-word'."
   (interactive)
   (if (and ivy--directory (= (minibuffer-prompt-end) (point)))
       (progn
-        (ivy--cd (file-name-directory
-                  (directory-file-name
-                   (expand-file-name
-                    ivy--directory))))
+        (ivy--cd (ivy--parent-dir (expand-file-name ivy--directory)))
         (ivy--exhibit))
     (ignore-errors
       (let ((pt (point)))
         (forward-word -1)
         (delete-region (point) pt)))))
 
-(defvar ivy--regexp-quote 'regexp-quote
+(defvar ivy--regexp-quote #'regexp-quote
   "Store the regexp quoting state.")
 
 (defun ivy-toggle-regexp-quote ()
@@ -1299,7 +1499,7 @@ On error (read-only), call `ivy-on-del-error-function'."
 (declare-function avy--process "ext:avy")
 (declare-function avy--style-fn "ext:avy")
 
-(defcustom ivy-format-function 'ivy-format-function-default
+(defcustom ivy-format-function #'ivy-format-function-default
   "Function to transform the list of candidates into a string.
 This string is inserted into the minibuffer."
   :type '(choice
@@ -1310,6 +1510,29 @@ This string is inserted into the minibuffer."
 (eval-after-load 'avy
   '(add-to-list 'avy-styles-alist '(ivy-avy . pre)))
 
+(defun ivy--avy-candidates ()
+  (let (candidates)
+    (save-excursion
+      (save-restriction
+        (narrow-to-region
+         (window-start)
+         (window-end))
+        (goto-char (point-min))
+        (forward-line)
+        (while (< (point) (point-max))
+          (push
+           (cons (point)
+                 (selected-window))
+           candidates)
+          (forward-line))))
+    (nreverse candidates)))
+
+(defun ivy--avy-action (pt)
+  (when (number-or-marker-p pt)
+    (ivy--done
+     (substring-no-properties
+      (nth (- (line-number-at-pos pt) 2) ivy--old-cands)))))
+
 (defun ivy-avy ()
   "Jump to one of the current ivy candidates."
   (interactive)
@@ -1318,32 +1541,11 @@ This string is inserted into the minibuffer."
   (let* ((avy-all-windows nil)
          (avy-keys (or (cdr (assq 'ivy-avy avy-keys-alist))
                        avy-keys))
-         (avy-style (or (cdr (assq 'ivy-avy
-                                   avy-styles-alist))
+         (avy-style (or (cdr (assq 'ivy-avy avy-styles-alist))
                         avy-style))
-         (candidate
-          (let ((candidates))
-            (save-excursion
-              (save-restriction
-                (narrow-to-region
-                 (window-start)
-                 (window-end))
-                (goto-char (point-min))
-                (forward-line)
-                (while (< (point) (point-max))
-                  (push
-                   (cons (point)
-                         (selected-window))
-                   candidates)
-                  (forward-line))))
-            (setq avy-action #'identity)
-            (avy--process
-             (nreverse candidates)
-             (avy--style-fn avy-style)))))
-    (when (number-or-marker-p candidate)
-      (ivy--done
-       (substring-no-properties
-        (nth (- (line-number-at-pos candidate) 2) ivy--old-cands))))))
+         (avy-action #'ivy--avy-action))
+    (avy--process
+     (ivy--avy-candidates))))
 
 (defun ivy-sort-file-function-default (x y)
   "Compare two files X and Y.
@@ -1367,13 +1569,19 @@ This function is suitable as a replacement for
       (ido-file-extension-lessp x y)
     (ivy-sort-file-function-default x y)))
 
+(defun ivy-string< (x y)
+  "Like `string<', but operate on CARs when given cons cells."
+  (string< (if (consp x) (car x) x)
+           (if (consp y) (car y) y)))
+
 (defcustom ivy-sort-functions-alist
   '((read-file-name-internal . ivy-sort-file-function-default)
     (internal-complete-buffer . nil)
+    (ivy-completion-in-region . nil)
     (counsel-git-grep-function . nil)
     (Man-goto-section . nil)
     (org-refile . nil)
-    (t . string-lessp))
+    (t . ivy-string<))
   "An alist of sorting functions for each collection function.
 Interactive functions that call completion fit in here as well.
 
@@ -1398,12 +1606,16 @@ See also `ivy-sort-max-size'."
                  (const :tag "File sort" ivy-sort-file-function-default)
                  (const :tag "No sort" nil)
                  (function :tag "Custom function")
-                 (repeat (function :tag "Custom function"))))
-  :group 'ivy)
+                 (repeat (function :tag "Custom function")))))
 
 (defun ivy--sort-function (collection)
   "Retrieve sort function for COLLECTION from `ivy-sort-functions-alist'."
-  (cdr (assoc collection ivy-sort-functions-alist)))
+  (let ((entry (cdr (or (assq collection ivy-sort-functions-alist)
+                        (assq (ivy-state-caller ivy-last) 
ivy-sort-functions-alist)
+                        (assq t ivy-sort-functions-alist)))))
+    (and (or (functionp entry)
+             (functionp (setq entry (car-safe entry))))
+         entry)))
 
 (defun ivy-rotate-sort ()
   "Rotate through sorting functions available for current collection.
@@ -1411,9 +1623,10 @@ This only has an effect if multiple sorting functions are
 specified for the current collection in
 `ivy-sort-functions-alist'."
   (interactive)
-  (let ((cell (assoc (ivy-state-collection ivy-last) 
ivy-sort-functions-alist)))
+  (let ((cell (or (assq (ivy-state-collection ivy-last) 
ivy-sort-functions-alist)
+                  (assq (ivy-state-caller ivy-last) 
ivy-sort-functions-alist))))
     (when (consp (cdr cell))
-      (setcdr cell `(,@(cddr cell) ,(cadr cell)))
+      (setcdr cell (nconc (cddr cell) (list (cadr cell))))
       (ivy--reset-state ivy-last))))
 
 (defvar ivy-index-functions-alist
@@ -1466,7 +1679,16 @@ like.")
     (counsel-org-capture . "^")
     (Man-completion-table . "^")
     (woman . "^"))
-  "Command to initial input table.")
+  "An alist associating commands with their initial input.
+
+Each cdr is either a string or a function called in the context
+of a call to `ivy-read'.")
+
+(defcustom ivy-hooks-alist nil
+  "An alist associating commands to setup functions.
+Examples: `toggle-input-method', (lambda () (insert \"^\")), etc.
+May supersede `ivy-initial-inputs-alist'."
+  :type '(alist :key-type symbol :value-type function))
 
 (defcustom ivy-sort-max-size 30000
   "Sorting won't be done for collections larger than this."
@@ -1483,33 +1705,47 @@ like.")
   "Return the list of files in DIR.
 Directories come first."
   (let* ((default-directory dir)
-         (predicate (ivy-state-predicate ivy-last))
          (seq (condition-case nil
-                  (all-completions "" 'read-file-name-internal)
+                  (all-completions "" #'read-file-name-internal
+                                   (ivy-state-predicate ivy-last))
                 (error
                  (directory-files dir))))
          sort-fn)
-    (if (equal dir "/")
-        seq
-      (setq seq (delete "./" (delete "../" seq)))
-      (when (eq (setq sort-fn (ivy--sort-function 'read-file-name-internal))
-                #'ivy-sort-file-function-default)
-        (setq seq (mapcar (lambda (x)
-                            (propertize x 'dirp (ivy--dirname-p x)))
-                          seq)))
-      (when sort-fn
-        (setq seq (cl-sort seq sort-fn)))
-      (dolist (dir ivy-extra-directories)
-        (push dir seq))
-      (if predicate
-          (cl-remove-if-not predicate seq)
-        seq))))
-
-(defvar ivy-auto-select-single-candidate nil
-  "When non-nil, auto-select the candidate if it is the only one.
-When t, it is the same as if the user were prompted and selected the candidate
-by calling the default action.  This variable has no use unless the collection
-contains a single candidate.")
+    (setq seq (delete "./" (delete "../" seq)))
+    (when (eq (setq sort-fn (ivy--sort-function #'read-file-name-internal))
+              #'ivy-sort-file-function-default)
+      (setq seq (mapcar (lambda (x)
+                          (propertize x 'dirp (ivy--dirname-p x)))
+                        seq)))
+    (when sort-fn
+      (setq seq (sort seq sort-fn)))
+    (dolist (dir ivy-extra-directories)
+      (push dir seq))
+    (if (string= dir "/")
+        (cl-remove-if (lambda (s) (string-match ":$" s)) (delete "../" seq))
+      seq)))
+
+(defun ivy-alist-setting (alist &optional key)
+  "Return the value associated with KEY in ALIST, using `assq'.
+KEY defaults to the last caller of `ivy-read'; if no entry is
+found, it falls back to the key t."
+  (cdr (or (let ((caller (or key (ivy-state-caller ivy-last))))
+             (and caller (assq caller alist)))
+           (assq t alist))))
+
+(defun ivy--height (caller)
+  (let ((v (or (ivy-alist-setting ivy-height-alist caller)
+               ivy-height)))
+    (if (integerp v)
+        v
+      (if (functionp v)
+          (funcall v caller)
+        (error "Unexpected value: %S" v)))))
+
+(defun ivy--remove-props (str &rest props)
+  "Return STR with text PROPS destructively removed."
+  (remove-list-of-text-properties 0 (length str) props str)
+  str)
 
 ;;** Entry Point
 ;;;###autoload
@@ -1521,21 +1757,19 @@ contains a single candidate.")
                       dynamic-collection caller)
   "Read a string in the minibuffer, with completion.
 
-PROMPT is a format string, normally ending in a colon and a
-space; %d anywhere in the string is replaced by the current
-number of matching candidates.  For the literal % character,
-escape it with %%. See also `ivy-count-format'.
+PROMPT is a string, normally ending in a colon and a space.
+`ivy-count-format' is prepended to PROMPT during completion.
 
 COLLECTION is either a list of strings, a function, an alist, or
 a hash table.
 
 PREDICATE is applied to filter out the COLLECTION immediately.
-This argument is for `completing-read' compat.
+This argument is for compatibility with `completing-read'.
 
 When REQUIRE-MATCH is non-nil, only members of COLLECTION can be
-selected, i.e. custom text.
+selected.
 
-If INITIAL-INPUT is not nil, then insert that input in the
+If INITIAL-INPUT is non-nil, then insert that input in the
 minibuffer initially.
 
 HISTORY is a name of a variable to hold the completion session
@@ -1548,21 +1782,24 @@ out of the ones that match the INITIAL-INPUT.
 
 DEF is for compatibility with `completing-read'.
 
-UPDATE-FN is called each time the current candidate(s) is changed.
+UPDATE-FN is called each time the candidate list is redisplayed.
 
-When SORT is t, use `ivy-sort-functions-alist' for sorting.
+When SORT is non-nil, `ivy-sort-functions-alist' determines how
+to sort candidates before displaying them.
 
-ACTION is a lambda function to call after selecting a result.  It
-takes a single string argument.
+ACTION is a function to call after selecting a candidate.
+It takes the candidate, which is a string, as its only argument.
 
-UNWIND is a lambda function to call before exiting.
+UNWIND is a function of no arguments to call before exiting.
 
-RE-BUILDER is a lambda function to call to transform text into a
-regex pattern.
+RE-BUILDER is a function transforming input text into a regex
+pattern.
 
-MATCHER is to override matching.
+MATCHER is a function which can override how candidates are
+filtered based on user input.  It takes a regex pattern and a
+list of candidates, and returns the list of matching candidates.
 
-DYNAMIC-COLLECTION is a boolean to specify if the list of
+DYNAMIC-COLLECTION is a boolean specifying whether the list of
 candidates is updated after each input by calling COLLECTION.
 
 CALLER is a symbol to uniquely identify the caller to `ivy-read'.
@@ -1584,6 +1821,8 @@ customizations apply to the current completion session."
                      ,@extra-actions))
                   (t
                    (delete-dups (append action extra-actions)))))))
+  (unless caller
+    (setq caller this-command))
   (let ((extra-sources (plist-get ivy--sources-list caller)))
     (if extra-sources
         (progn
@@ -1601,11 +1840,14 @@ customizations apply to the current completion session."
   (let ((ivy-recursive-last (and (active-minibuffer-window) ivy-last))
         (transformer-fn
          (plist-get ivy--display-transformers-list
-                    (or caller (and (functionp collection)
-                                    collection))))
+                    (cond (caller)
+                          ((functionp collection)
+                           collection))))
         (ivy-display-function
          (unless (window-minibuffer-p)
-           (cdr (assoc caller ivy-display-functions-alist)))))
+           (or ivy-display-function
+               (ivy-alist-setting ivy-display-functions-alist caller))))
+        (height (ivy--height caller)))
     (setq ivy-last
           (make-ivy-state
            :prompt prompt
@@ -1638,15 +1880,12 @@ customizations apply to the current completion session."
                (let* ((hist (or history 'ivy-history))
                       (minibuffer-completion-table collection)
                       (minibuffer-completion-predicate predicate)
-                      (resize-mini-windows
-                       (cond
-                         ((display-graphic-p) nil)
-                         ((null resize-mini-windows) 'grow-only)
-                         (t resize-mini-windows))))
+                      (ivy-height height)
+                      (resize-mini-windows (unless (display-graphic-p)
+                                             'grow-only)))
                  (if (and ivy-auto-select-single-candidate
-                          (= (length ivy--all-candidates) 1)
-                          (and (stringp ivy--directory)
-                               (not (file-remote-p ivy--directory))))
+                          ivy--all-candidates
+                          (null (cdr ivy--all-candidates)))
                      (progn
                        (setf (ivy-state-current ivy-last)
                              (car ivy--all-candidates))
@@ -1666,50 +1905,61 @@ customizations apply to the current completion session."
                                        (delete item
                                                (cdr (symbol-value hist))))))))
                  (ivy-state-current ivy-last)))
+          ;; Fixes a bug in ESS, #1660
+          (put 'post-command-hook 'permanent-local nil)
           (remove-hook 'post-command-hook #'ivy--queue-exhibit)
-          (when (eq ivy-display-function 'ivy-display-function-overlay)
-            (ivy-overlay-cleanup))
+          (let ((cleanup (ivy--display-function-prop :cleanup)))
+            (when (functionp cleanup)
+              (funcall cleanup)))
           (when (setq unwind (ivy-state-unwind ivy-last))
             (funcall unwind))
+          (ivy--pulse-cleanup)
           (unless (eq ivy-exit 'done)
             (ivy-recursive-restore)))
       (ivy-call)
-      (when (> (length (ivy-state-current ivy-last)) 0)
-        (remove-text-properties 0 1 '(idx) (ivy-state-current ivy-last))))))
+      (ivy--remove-props (ivy-state-current ivy-last) 'idx))))
+
+(defun ivy--display-function-prop (prop)
+  "Return PROP associated with current `ivy-display-function'."
+  (plist-get (cdr (assq ivy-display-function
+                        ivy-display-functions-props))
+             prop))
+
+(defvar Info-complete-menu-buffer)
 
 (defun ivy--reset-state (state)
   "Reset the ivy to STATE.
 This is useful for recursive `ivy-read'."
   (unless (equal (selected-frame) (ivy-state-frame state))
     (select-window (active-minibuffer-window)))
-  (let ((prompt (or (ivy-state-prompt state) ""))
-        (collection (ivy-state-collection state))
-        (predicate (ivy-state-predicate state))
-        (history (ivy-state-history state))
-        (preselect (ivy-state-preselect state))
-        (sort (ivy-state-sort state))
-        (re-builder (ivy-state-re-builder state))
-        (dynamic-collection (ivy-state-dynamic-collection state))
-        (initial-input (ivy-state-initial-input state))
-        (require-match (ivy-state-require-match state))
-        (caller (ivy-state-caller state))
-        (def (ivy-state-def state)))
-    (unless initial-input
-      (setq initial-input (cdr (assoc (or caller this-command)
-                                      ivy-initial-inputs-alist))))
+  (let* ((prompt (or (ivy-state-prompt state) ""))
+         (collection (ivy-state-collection state))
+         (predicate (ivy-state-predicate state))
+         (history (ivy-state-history state))
+         (preselect (ivy-state-preselect state))
+         (re-builder (ivy-state-re-builder state))
+         (dynamic-collection (ivy-state-dynamic-collection state))
+         (require-match (ivy-state-require-match state))
+         (caller (or (ivy-state-caller state) this-command))
+         (sort (or (ivy-state-sort state) (assoc caller 
ivy-sort-functions-alist)))
+         (initial-input
+          (or (ivy-state-initial-input state)
+              (let ((init (cdr (assq caller ivy-initial-inputs-alist))))
+                (cond ((functionp init)
+                       (funcall init))
+                      (t
+                       init)))))
+         (def (ivy-state-def state)))
     (setq ivy--directory nil)
     (setq ivy-case-fold-search ivy-case-fold-search-default)
     (setq ivy--regex-function
           (or re-builder
               (and (functionp collection)
-                   (cdr (assoc collection ivy-re-builders-alist)))
-              (and caller
-                   (cdr (assoc caller ivy-re-builders-alist)))
-              (cdr (assoc this-command ivy-re-builders-alist))
-              (cdr (assoc t ivy-re-builders-alist))
-              'ivy--regex))
+                   (cdr (assq collection ivy-re-builders-alist)))
+              (ivy-alist-setting ivy-re-builders-alist)
+              #'ivy--regex))
     (setq ivy--subexps 0)
-    (setq ivy--regexp-quote 'regexp-quote)
+    (setq ivy--regexp-quote #'regexp-quote)
     (setq ivy--old-text "")
     (setq ivy--full-length nil)
     (setq ivy-text "")
@@ -1717,18 +1967,20 @@ This is useful for recursive `ivy-read'."
     (setq ivy-calling nil)
     (setq ivy-use-ignore ivy-use-ignore-default)
     (setq ivy--highlight-function
-          (or (cdr (assoc ivy--regex-function ivy-highlight-functions-alist))
+          (or (cdr (assq ivy--regex-function ivy-highlight-functions-alist))
               #'ivy--highlight-default))
     (let (coll sort-fn)
-      (cond ((eq collection 'Info-read-node-name-1)
-             (if (equal Info-current-file "dir")
-                 (setq coll
+      (cond ((eq collection #'Info-read-node-name-1)
+             (setq coll
+                   (if (equal (bound-and-true-p Info-current-file) "dir")
                        (mapcar (lambda (x) (format "(%s)" x))
-                               (cl-delete-duplicates
-                                (all-completions "(" collection predicate)
-                                :test #'equal)))
-               (setq coll (all-completions "" collection predicate))))
-            ((eq collection 'read-file-name-internal)
+                               (delete-dups
+                                (all-completions "(" collection predicate)))
+                     (all-completions "" collection predicate))))
+            ((eq collection #'read-file-name-internal)
+             (when (and (equal def initial-input)
+                        (member "./" ivy-extra-directories))
+               (setf (ivy-state-def state) (setq def nil)))
              (setq ivy--directory default-directory)
              (when (and initial-input
                         (not (equal initial-input "")))
@@ -1736,7 +1988,7 @@ This is useful for recursive `ivy-read'."
                       (when (equal (file-name-nondirectory initial-input) "")
                         (setf (ivy-state-preselect state) (setq preselect nil))
                         (setf (ivy-state-def state) (setq def nil)))
-                      (setq ivy--directory initial-input)
+                      (setq ivy--directory (file-name-as-directory 
initial-input))
                       (setq initial-input nil)
                       (when preselect
                         (let ((preselect-directory
@@ -1755,70 +2007,64 @@ This is useful for recursive `ivy-read'."
                             (file-name-nondirectory initial-input)))))
              (require 'dired)
              (when preselect
-               (let ((preselect-directory (file-name-directory preselect)))
-                 (unless (or (null preselect-directory)
-                             (string= preselect-directory
-                                      default-directory))
+               (let ((preselect-directory (ivy--parent-dir preselect)))
+                 (when (and preselect-directory
+                            (not (string= preselect-directory
+                                          default-directory)))
                    (setq ivy--directory preselect-directory))
-                 (setf
-                  (ivy-state-preselect state)
-                  (setq preselect (file-name-nondirectory preselect)))))
+                 (setq preselect (file-relative-name preselect
+                                                     preselect-directory))
+                 (setf (ivy-state-preselect state) preselect)))
+             (setq sort nil)
              (setq coll (ivy--sorted-files ivy--directory))
              (when initial-input
                (unless (or require-match
                            (equal initial-input default-directory)
                            (equal initial-input ""))
                  (setq coll (cons initial-input coll)))
-               (unless (and (ivy-state-action ivy-last)
-                            (not (equal (ivy--get-action ivy-last) 'identity)))
+               (when (or (not (ivy-state-action ivy-last))
+                         (equal (ivy--get-action ivy-last) 'identity))
                  (setq initial-input nil))))
-            ((eq collection 'internal-complete-buffer)
+            ((eq collection #'internal-complete-buffer)
              (setq coll (ivy--buffer-list "" ivy-use-virtual-buffers 
predicate)))
             (dynamic-collection
              (setq coll (funcall collection ivy-text)))
-            ((and (consp collection) (listp (car collection)))
-             (if (and sort (setq sort-fn (ivy--sort-function caller)))
-                 (progn
-                   (setq sort nil)
-                   (setq coll (mapcar #'car
-                                      (cl-sort
-                                       (copy-sequence collection)
-                                       sort-fn))))
-               (setq collection
-                     (setf (ivy-state-collection ivy-last)
-                           (cl-remove-if-not predicate collection)))
-               (setq coll (all-completions "" collection)))
-             (let ((i 0))
-               (ignore-errors
-                 ;; cm can be read-only
-                 (dolist (cm coll)
-                   (add-text-properties 0 1 `(idx ,i) cm)
-                   (cl-incf i)))))
+            ((consp (car-safe collection))
+             (setq collection (cl-remove-if-not predicate collection))
+             (when (and sort (setq sort-fn (ivy--sort-function caller)))
+               (setq collection (sort (copy-sequence collection) sort-fn))
+               (setq sort nil))
+             (setf (ivy-state-collection ivy-last) collection)
+             (setq coll (let ((i -1))
+                          (mapcar (lambda (x)
+                                    (propertize x 'idx (cl-incf i)))
+                                  (all-completions "" collection)))))
             ((or (functionp collection)
                  (byte-code-function-p collection)
                  (vectorp collection)
                  (hash-table-p collection)
                  (and (listp collection) (symbolp (car collection))))
-             (setq coll (all-completions "" collection predicate)))
+             (let ((Info-complete-menu-buffer
+                    ;; FIXME: This is a temporary workaround for issue #1803.
+                    (or (bound-and-true-p Info-complete-menu-buffer)
+                        (ivy-state-buffer state))))
+               (setq coll (all-completions "" collection predicate))))
             (t
-             (setq coll collection)))
+             (setq coll (all-completions "" collection predicate))))
       (unless (ivy-state-dynamic-collection ivy-last)
         (setq coll (delete "" coll)))
       (when def
-        (cond ((listp def)
-               (setq coll (cl-union def coll :test 'equal)))
-              ((member def coll))
-              (t
+        (cond ((stringp (car-safe def))
+               (setq coll (cl-union def coll :test #'equal)))
+              ((and (stringp def) (not (member def coll)))
                (push def coll))))
-      (when sort
-        (if (and (functionp collection)
-                 (setq sort-fn (ivy--sort-function collection)))
-            (when (not (eq collection 'read-file-name-internal))
-              (setq coll (cl-sort coll sort-fn)))
-          (when (and (not (eq history 'org-refile-history))
-                     (<= (length coll) ivy-sort-max-size)
-                     (setq sort-fn (ivy--sort-function caller)))
-            (setq coll (cl-sort (copy-sequence coll) sort-fn)))))
+      (when (and sort
+                 (or (functionp collection)
+                     (not (eq history 'org-refile-history)))
+                 (setq sort-fn (ivy--sort-function
+                                (if (functionp collection) collection caller)))
+                 (null (nthcdr ivy-sort-max-size coll)))
+        (setq coll (sort (copy-sequence coll) sort-fn)))
       (setq coll (ivy--set-candidates coll))
       (setq ivy--old-re nil)
       (setq ivy--old-cands nil)
@@ -1844,38 +2090,33 @@ This is useful for recursive `ivy-read'."
     (setq ivy-exit nil)
     (setq ivy--default
           (if (region-active-p)
-              (buffer-substring
-               (region-beginning)
-               (region-end))
+              (buffer-substring (region-beginning) (region-end))
             (ivy-thing-at-point)))
-    (setq ivy--prompt (ivy-add-prompt-count prompt))
+    (setq ivy--prompt (ivy-add-prompt-count (ivy--quote-format-string prompt)))
     (setf (ivy-state-initial-input ivy-last) initial-input)))
 
 (defun ivy-add-prompt-count (prompt)
   "Add count information to PROMPT."
-  (cond ((string-match "%.*d" prompt)
-         prompt)
-        ((null ivy-count-format)
+  (cond ((null ivy-count-format)
          (error
           "`ivy-count-format' can't be nil.  Set it to \"\" instead"))
-        ((string-match "%d.*%d" ivy-count-format)
-         (let ((w (length (number-to-string
-                           (length ivy--all-candidates))))
-               (s (copy-sequence ivy-count-format)))
-           (string-match "%d" s)
-           (match-end 0)
-           (string-match "%d" s (match-end 0))
-           (setq s (replace-match (format "%%-%dd" w) nil nil s))
+        ((string-match "%d.*\\(%d\\)" ivy-count-format)
+         (let* ((w (1+ (floor (log (max 1 (length ivy--all-candidates)) 10))))
+                (s (replace-match (format "%%-%dd" w) t t ivy-count-format 1)))
            (string-match "%d" s)
-           (concat (replace-match (format "%%%dd" w) nil nil s)
+           (concat (replace-match (format "%%%dd" w) t t s)
                    prompt)))
-        ((string-match "%.*d" ivy-count-format)
+        ((string-match-p "%.*d" ivy-count-format)
          (concat ivy-count-format prompt))
         (ivy--directory
          prompt)
         (t
          prompt)))
 
+(defun ivy--quote-format-string (str)
+  "Make STR suitable for `format' with no extra arguments."
+  (replace-regexp-in-string "%" "%%" str t t))
+
 ;;;###autoload
 (defun ivy-completing-read (prompt collection
                             &optional predicate require-match initial-input
@@ -1894,8 +2135,8 @@ HISTORY is a list of previously selected inputs.
 DEF is the default value.
 INHERIT-INPUT-METHOD is currently ignored."
   (let ((handler
-         (when (< ivy-completing-read-ignore-handlers-depth (minibuffer-depth))
-           (assoc this-command ivy-completing-read-handlers-alist))))
+         (and (< ivy-completing-read-ignore-handlers-depth (minibuffer-depth))
+              (assq this-command ivy-completing-read-handlers-alist))))
     (if handler
         (let ((completion-in-region-function #'completion--in-region)
               (ivy-completing-read-ignore-handlers-depth (1+ 
(minibuffer-depth))))
@@ -1910,33 +2151,40 @@ INHERIT-INPUT-METHOD is currently ignored."
           (setq initial-input (nth (1- (cdr history))
                                    (symbol-value (car history)))))
         (setq history (car history)))
-      (ivy-read (replace-regexp-in-string "%" "%%" prompt)
-                collection
-                :predicate predicate
-                :require-match (and collection require-match)
-                :initial-input (cond ((consp initial-input)
-                                      (car initial-input))
-                                     ((and (stringp initial-input)
-                                           (not (eq collection 
'read-file-name-internal))
-                                           (string-match "\\+" initial-input))
-                                      (replace-regexp-in-string
-                                       "\\+" "\\\\+" initial-input))
-                                     (t
-                                      initial-input))
-                :preselect (if (listp def) (car def) def)
-                :def (if (listp def) (car def) def)
-                :history history
-                :keymap nil
-                :sort t
-                :caller (cond ((called-interactively-p 'any)
-                               this-command)
-                              ((and collection (symbolp collection))
-                               collection))))))
+      (when (consp def)
+        (setq def (car def)))
+      (let ((str (ivy-read
+                  prompt collection
+                  :predicate predicate
+                  :require-match (and collection require-match)
+                  :initial-input (cond ((consp initial-input)
+                                        (car initial-input))
+                                       ((and (stringp initial-input)
+                                             (not (eq collection 
#'read-file-name-internal))
+                                             (string-match-p "\\+" 
initial-input))
+                                        (replace-regexp-in-string
+                                         "\\+" "\\\\+" initial-input))
+                                       (t
+                                        initial-input))
+                  :preselect def
+                  :def def
+                  :history history
+                  :keymap nil
+                  :sort t
+                  :dynamic-collection ivy-completing-read-dynamic-collection
+                  :caller (if (and collection (symbolp collection))
+                              collection
+                            this-command))))
+        (if (string= str "")
+            ;; For `completing-read' compat, return the first element of
+            ;; DEFAULT, if it is a list; "", if DEFAULT is nil; or DEFAULT.
+            (or def "")
+          str)))))
 
 (defun ivy-completing-read-with-empty-string-def
     (prompt collection
-            &optional predicate require-match initial-input
-            history def inherit-input-method)
+     &optional predicate require-match initial-input
+       history def inherit-input-method)
   "Same as `ivy-completing-read' but with different handling of DEF.
 
 Specifically, if DEF is nil, it is treated the same as if DEF was
@@ -1959,15 +2207,11 @@ The previous string is between `ivy-completion-beg' and 
`ivy-completion-end'."
           (pt (point))
           (beg ivy-completion-beg)
           (end ivy-completion-end))
-      (when ivy-completion-beg
-        (delete-region
-         ivy-completion-beg
-         ivy-completion-end))
-      (setq ivy-completion-beg
-            (move-marker (make-marker) (point)))
+      (when beg
+        (delete-region beg end))
+      (setq ivy-completion-beg (point))
       (insert (substring-no-properties str))
-      (setq ivy-completion-end
-            (move-marker (make-marker) (point)))
+      (setq ivy-completion-end (point))
       (save-excursion
         (dolist (cursor fake-cursors)
           (goto-char (overlay-start cursor))
@@ -1976,27 +2220,27 @@ The previous string is between `ivy-completion-beg' and 
`ivy-completion-end'."
           (insert (substring-no-properties str))
           ;; manually move the fake cursor
           (move-overlay cursor (point) (1+ (point)))
-          (move-marker (overlay-get cursor 'point) (point))
-          (move-marker (overlay-get cursor 'mark) (point)))))))
+          (set-marker (overlay-get cursor 'point) (point))
+          (set-marker (overlay-get cursor 'mark) (point)))))))
 
 (defun ivy-completion-common-length (str)
-  "Return the length of the first `completions-common-part' face in STR."
-  (let ((pos 0)
-        (len (length str))
-        face-sym)
-    (while (and (<= pos len)
-                (let ((prop (or (prog1 (get-text-property
-                                        pos 'face str)
-                                  (setq face-sym 'face))
-                                (prog1 (get-text-property
-                                        pos 'font-lock-face str)
-                                  (setq face-sym 'font-lock-face)))))
-                  (not (eq 'completions-common-part
-                           (if (listp prop) (car prop) prop)))))
-      (setq pos (1+ pos)))
-    (if (< pos len)
-        (or (next-single-property-change pos face-sym str) len)
-      0)))
+  "Return the amount of characters that match in  STR.
+
+`completion-all-completions' computes this and returns the result
+via text properties.
+
+The first non-matching part is propertized:
+- either with: (face (completions-first-difference))
+- or: (font-lock-face completions-first-difference)."
+  (let ((char-property-alias-alist '((face font-lock-face)))
+        (i (1- (length str))))
+    (catch 'done
+      (while (>= i 0)
+        (when (equal (get-text-property i 'face str)
+                     '(completions-first-difference))
+          (throw 'done i))
+        (cl-decf i))
+      (throw 'done (length str)))))
 
 (defun ivy-completion-in-region (start end collection &optional predicate)
   "An Ivy function suitable for `completion-in-region-function'.
@@ -2005,12 +2249,9 @@ PREDICATE (a function called with no arguments) says 
when to exit.
 See `completion-in-region' for further information."
   (let* ((enable-recursive-minibuffers t)
          (str (buffer-substring-no-properties start end))
-         (completion-ignore-case case-fold-search)
+         (completion-ignore-case (ivy--case-fold-p str))
          (comps
-          (completion-all-completions str collection predicate (- end start)))
-         (ivy--prompts-list (if (window-minibuffer-p)
-                                ivy--prompts-list
-                              '(ivy-completion-in-region (lambda nil)))))
+          (completion-all-completions str collection predicate (- end start))))
     (cond ((null comps)
            (message "No matches"))
           ((progn
@@ -2020,14 +2261,17 @@ See `completion-in-region' for further information."
            (message "Sole match"))
           (t
            (let* ((len (ivy-completion-common-length (car comps)))
-                  (str-len (length str))
                   (initial (cond ((= len 0)
                                   "")
-                                 ((> len str-len)
-                                  (setq len str-len)
-                                  str)
+                                 ((let ((str-len (length str)))
+                                    (when (> len str-len)
+                                      (setq len str-len)
+                                      str)))
                                  (t
                                   (substring str (- len))))))
+             (setq ivy--old-re nil)
+             (unless (ivy--filter initial comps)
+               (setq initial nil))
              (delete-region (- end len) end)
              (setq ivy-completion-beg (- end len))
              (setq ivy-completion-end ivy-completion-beg)
@@ -2036,28 +2280,31 @@ See `completion-in-region' for further information."
                    (unless (minibuffer-window-active-p (selected-window))
                      (setf (ivy-state-window ivy-last) (selected-window)))
                    (ivy-completion-in-region-action
-                    (substring-no-properties
-                     (car comps))))
-               (let* ((w (1+ (floor (log (length comps) 10))))
-                      (ivy-count-format (if (string= ivy-count-format "")
-                                            ivy-count-format
-                                          (format "%%-%dd " w)))
-                      (prompt (format "(%s): " str)))
-                 (and
-                  (ivy-read (if (string= ivy-count-format "")
-                                prompt
-                              (replace-regexp-in-string "%" "%%" prompt))
-                            ;; remove 'completions-first-difference face
-                            (mapcar #'substring-no-properties comps)
-                            :predicate predicate
-                            :initial-input initial
-                            :action #'ivy-completion-in-region-action
-                            :unwind (lambda ()
-                                      (unless (eq ivy-exit 'done)
-                                        (goto-char ivy-completion-beg)
-                                        (insert initial)))
-                            :caller 'ivy-completion-in-region)
-                  t))))))))
+                    (substring-no-properties (car comps))))
+               (dolist (s comps)
+                 ;; Remove face `completions-first-difference'.
+                 (ivy--remove-props s 'face))
+               (ivy-read (format "(%s): " str) comps
+                         ;; Predicate was already applied by
+                         ;; `completion-all-completions'.
+                         :predicate nil
+                         :initial-input initial
+                         :sort t
+                         :action #'ivy-completion-in-region-action
+                         :unwind (lambda ()
+                                   (unless (eq ivy-exit 'done)
+                                     (goto-char ivy-completion-beg)
+                                     (insert initial)))
+                         :caller 'ivy-completion-in-region)
+               t))))))
+
+(defun ivy-completion-in-region-prompt ()
+  "Prompt function for `ivy-completion-in-region'.
+See `ivy-set-prompt'."
+  (and (window-minibuffer-p (ivy-state-window ivy-last))
+       (ivy-add-prompt-count (ivy-state-prompt ivy-last))))
+
+(ivy-set-prompt #'ivy-completion-in-region #'ivy-completion-in-region-prompt)
 
 (defcustom ivy-do-completion-in-region t
   "When non-nil `ivy-mode' will set `completion-in-region-function'."
@@ -2096,7 +2343,7 @@ Minibuffer bindings:
          (let ((re preselect))
            (cl-position-if
             (lambda (x)
-              (string-match re x))
+              (string-match-p re x))
             candidates)))))
 
 ;;* Implementation
@@ -2129,9 +2376,12 @@ This concept is used to generalize regular expressions 
for
   "Store pre-computed regex.")
 
 (defun ivy--split (str)
-  "Split STR into a list by single spaces.
-The remaining spaces stick to their left.
-This allows to \"quote\" N spaces by inputting N+1 spaces."
+  "Split STR into list of substrings bounded by spaces.
+Single spaces act as splitting points.  Consecutive spaces
+\"quote\" their preceding spaces, i.e., guard them from being
+split.  This allows the literal interpretation of N spaces by
+inputting N+1 spaces.  Any substring not constituting a valid
+regexp is passed to `regexp-quote'."
   (let ((len (length str))
         start0
         (start1 0)
@@ -2145,8 +2395,8 @@ This allows to \"quote\" N spaces by inputting N+1 
spaces."
                               (- (match-beginning 0) 2)
                               (match-beginning 0))))
           (progn
-            (setq start1 (match-end 0))
-            (setq start0 0))
+            (setq start0 start1)
+            (setq start1 (match-end 0)))
         (setq match-len (- (match-end 0) (match-beginning 0)))
         (if (= match-len 1)
             (progn
@@ -2165,7 +2415,7 @@ This allows to \"quote\" N spaces by inputting N+1 
spaces."
       (setq s (substring str start1))
       (unless (= (length s) 0)
         (push s res)))
-    (nreverse res)))
+    (mapcar #'ivy--regex-or-literal (nreverse res))))
 
 (defun ivy--regex (str &optional greedy)
   "Re-build regex pattern from STR in case it has a space.
@@ -2173,9 +2423,10 @@ When GREEDY is non-nil, join words in a greedy way."
   (let ((hashed (unless greedy
                   (gethash str ivy--regex-hash))))
     (if hashed
-        (prog1 (cdr hashed)
-          (setq ivy--subexps (car hashed)))
-      (when (string-match "\\([^\\]\\|^\\)\\\\$" str)
+        (progn
+          (setq ivy--subexps (car hashed))
+          (cdr hashed))
+      (when (string-match-p "\\(?:[^\\]\\|^\\)\\\\\\'" str)
         (setq str (substring str 0 -1)))
       (cdr (puthash str
                     (let ((subs (ivy--split str)))
@@ -2187,13 +2438,11 @@ When GREEDY is non-nil, join words in a greedy way."
                          (setq ivy--subexps (length subs))
                          (mapconcat
                           (lambda (x)
-                            (if (string-match "\\`\\\\([^?].*\\\\)\\'" x)
+                            (if (string-match-p "\\`\\\\([^?].*\\\\)\\'" x)
                                 x
                               (format "\\(%s\\)" x)))
                           subs
-                          (if greedy
-                              ".*"
-                            ".*?")))))
+                          (if greedy ".*" ".*?")))))
                     ivy--regex-hash)))))
 
 (defun ivy--legal-regex-p (str)
@@ -2209,68 +2458,51 @@ When GREEDY is non-nil, join words in a greedy way."
   (if (ivy--legal-regex-p str) str (regexp-quote str)))
 
 (defun ivy--split-negation (str)
-  "Split STR into text before and after !.
-Don't split if it's escaped with \\!.
-
-Assumes there is at most one unescaped !."
-  (let (parts
-        (part ""))
-    (mapc
-     (lambda (char)
-       (let ((prev-char (if (zerop (length part))
-                            nil
-                          (elt part (1- (length part))))))
-         ;; Split on !, unless it's escaped.
-         (cond
-          ;; Store "\!" as "!".
-          ((and (eq char ?!) (eq prev-char ?\\))
-           (setq part (concat (substring part 0 (1- (length part)))
-                              "!")))
-          ;; Split on "!".
-          ((eq char ?!)
-           (push part parts)
-           (setq part ""))
-          ;; Otherwise, append the current character.
-          (t
-           (setq part (concat part (string char)))))))
-     str)
-    (unless (zerop (length part))
-      (push part parts))
-    (setq parts (nreverse parts))
-    ;; If we have more than unescaped !, just discard the extra parts
-    ;; rather than crashing. We can't warn or error because the
-    ;; minibuffer is already active.
-    (when (> (length parts) 2)
-      (setq parts (list (cl-first parts) (cl-second parts))))
-    parts))
+  "Split STR into text before and after ! delimiter.
+Do not split if the delimiter is escaped as \\!.
+
+Assumes there is at most one unescaped delimiter and discards
+text after delimiter if it is empty.  Modifies match data."
+  (unless (string= str "")
+    (let ((delim "\\(?:\\`\\|[^\\]\\)\\(!\\)"))
+      (mapcar (lambda (split)
+                ;; Store "\!" as "!".
+                (replace-regexp-in-string "\\\\!" "!" split t t))
+              (if (string-match delim str)
+                  ;; Ignore everything past first unescaped ! rather than
+                  ;; crashing.  We can't warn or error because the minibuffer 
is
+                  ;; already active.
+                  (let* ((i (match-beginning 1))
+                         (j (and (string-match delim str (1+ i))
+                                 (match-beginning 1)))
+                         (neg (substring str (1+ i) j)))
+                    (cons (substring str 0 i)
+                          (and (not (string= neg ""))
+                               (list neg))))
+                (list str))))))
 
 (defun ivy--split-spaces (str)
   "Split STR on spaces, unless they're preceded by \\.
-No unescaped spaces are present in the output."
-  (let (parts
-        (part ""))
-    (mapc
-     (lambda (char)
-       (let ((prev-char (if (zerop (length part))
-                            nil
-                          (elt part (1- (length part))))))
-         (cond
+No unescaped spaces are left in the output.  Any substring not
+constituting a valid regexp is passed to `regexp-quote'."
+  (when str
+    (let ((i 0) ; End of last search.
+          (j 0) ; End of last delimiter.
+          parts)
+      (while (string-match "\\(\\\\ \\)\\| +" str i)
+        (setq i (match-end 0))
+        (if (not (match-beginning 1))
+            ;; Unescaped space(s).
+            (let ((delim (match-beginning 0)))
+              (when (< j delim)
+                (push (substring str j delim) parts))
+              (setq j i))
           ;; Store "\ " as " ".
-          ((and (eq char ?\s) (eq prev-char ?\\))
-           (setq part (concat (substring part 0 (1- (length part)))
-                              " ")))
-          ;; Split on " ".
-          ((eq char ?\s)
-           (unless (zerop (length part))
-             (push part parts))
-           (setq part ""))
-          ;; Otherwise, append the current character.
-          (t
-           (setq part (concat part (string char)))))))
-     str)
-    (unless (zerop (length part))
-      (push part parts))
-    (nreverse parts)))
+          (setq str (replace-match " " t t str 1))
+          (setq i (1- i))))
+      (when (< j (length str))
+        (push (substring str j) parts))
+      (mapcar #'ivy--regex-or-literal (nreverse parts)))))
 
 (defun ivy--regex-ignore-order (str)
   "Re-build regex from STR by splitting at spaces and using ! for negation.
@@ -2286,17 +2518,14 @@ Escaping examples:
 foo\!bar -> matches \"foo!bar\"
 foo\ bar -> matches \"foo bar\"
 
-If STR isn't a valid input, fall back to exact matching:
-foo[     -> matches \"foo\[\" (invalid regex, so literal [ character)
-
 Returns a list suitable for `ivy-re-match'."
   (let* (regex-parts
          (raw-parts (ivy--split-negation str)))
     (dolist (part (ivy--split-spaces (car raw-parts)))
-      (push (cons (ivy--regex-or-literal part) t) regex-parts))
+      (push (cons part t) regex-parts))
     (when (cdr raw-parts)
       (dolist (part (ivy--split-spaces (cadr raw-parts)))
-        (push (cons (ivy--regex-or-literal part) nil) regex-parts)))
+        (push (cons part nil) regex-parts)))
     (if regex-parts (nreverse regex-parts)
       "")))
 
@@ -2304,12 +2533,12 @@ Returns a list suitable for `ivy-re-match'."
   "Build a regex sequence from STR.
 Spaces are wild card characters, everything before \"!\" should
 match.  Everything after \"!\" should not match."
-  (let ((parts (split-string str "!" t)))
+  (let ((parts (ivy--split-negation str)))
     (cl-case (length parts)
       (0
        "")
       (1
-       (if (string= (substring str 0 1) "!")
+       (if (= (aref str 0) ?!)
            (list (cons "" t)
                  (list (ivy--regex (car parts))))
          (ivy--regex (car parts))))
@@ -2325,11 +2554,14 @@ Insert .* between each char."
   (if (string-match "\\`\\(\\^?\\)\\(.*?\\)\\(\\$?\\)\\'" str)
       (prog1
           (concat (match-string 1 str)
-                  (mapconcat
-                   (lambda (x)
-                     (format "\\(%c\\)" x))
-                   (string-to-list (match-string 2 str))
-                   ".*?")
+                  (let ((lst (string-to-list (match-string 2 str))))
+                    (apply #'concat
+                           (cl-mapcar
+                            #'concat
+                            (cons "" (cdr (mapcar (lambda (c) (format "[^%c]*" 
c))
+                                                  lst)))
+                            (mapcar (lambda (x) (format "\\(%s\\)" 
(regexp-quote (char-to-string x))))
+                                    lst))))
                   (match-string 3 str))
         (setq ivy--subexps (length (match-string 2 str))))
     str))
@@ -2338,7 +2570,6 @@ Insert .* between each char."
   "When non nil, fix the height of the minibuffer during ivy completion.
 This effectively sets the minimum height at this level to `ivy-height' and
 tries to ensure that it does not change depending on the number of candidates."
-  :group 'ivy
   :type 'boolean)
 
 ;;** Rest
@@ -2348,23 +2579,27 @@ tries to ensure that it does not change depending on 
the number of candidates."
 
 (defun ivy--minibuffer-setup ()
   "Setup ivy completion in the minibuffer."
+  (setq-local mwheel-scroll-up-function 'ivy-next-line)
+  (setq-local mwheel-scroll-down-function 'ivy-previous-line)
   (setq-local completion-show-inline-help nil)
   (setq-local minibuffer-default-add-function
               (lambda ()
                 (list ivy--default)))
   (setq-local inhibit-field-text-motion nil)
-  (when (display-graphic-p)
-    (setq truncate-lines ivy-truncate-lines))
+  (setq truncate-lines ivy-truncate-lines)
   (setq-local max-mini-window-height ivy-height)
-  (when (and ivy-fixed-height-minibuffer
-             (not (eq (ivy-state-caller ivy-last) 'ivy-completion-in-region)))
-    (set-window-text-height (selected-window)
-                            (+ ivy-height
-                               (if ivy-add-newline-after-prompt
-                                   1
-                                 0))))
+  (let ((height (cond ((and ivy-fixed-height-minibuffer
+                            (not (eq (ivy-state-caller ivy-last)
+                                     #'ivy-completion-in-region)))
+                       (+ ivy-height (if ivy-add-newline-after-prompt 1 0)))
+                      (ivy-add-newline-after-prompt 2))))
+    (when height
+      (set-window-text-height nil height)))
   (add-hook 'post-command-hook #'ivy--queue-exhibit nil t)
-  ;; show completions with empty input
+  (let ((hook (ivy-alist-setting ivy-hooks-alist)))
+    (when (functionp hook)
+      (funcall hook)))
+  ;; Show completions with empty input.
   (ivy--exhibit))
 
 (defun ivy--input ()
@@ -2381,34 +2616,45 @@ tries to ensure that it does not change depending on 
the number of candidates."
     (delete-region (line-end-position) (point-max))))
 
 (defun ivy-cleanup-string (str)
-  "Remove unwanted text properties from STR."
-  (remove-text-properties 0 (length str) '(field) str)
-  str)
+  "Destructively remove unwanted text properties from STR."
+  (ivy--remove-props str 'field))
 
 (defvar ivy-set-prompt-text-properties-function
-  'ivy-set-prompt-text-properties-default
+  #'ivy-set-prompt-text-properties-default
   "Function to set the text properties of the default ivy prompt.
-Called with two arguments, PROMPT and STD-PROPS.
-The returned value should be the updated PROMPT.")
-
-(defun ivy-set-prompt-text-properties-default (prompt std-props)
-  "Set text properties of PROMPT.
-STD-PROPS is a property list containing the default text properties."
-  (ivy--set-match-props prompt "confirm"
-                        `(face ivy-confirm-face ,@std-props))
-  (ivy--set-match-props prompt "match required"
-                        `(face ivy-match-required-face ,@std-props))
+Called with two arguments, PROMPT and PROPS, where PROMPT is the
+string to be propertized and PROPS is a plist of default text
+properties that may be applied to PROMPT.  The function should
+return the propertized PROMPT, which may be modified in-place.")
+
+(defun ivy-set-prompt-text-properties-default (prompt props)
+  "Propertize (confirm) and (match required) parts of PROMPT.
+PROPS is a plist of default text properties to apply to these
+parts beyond their respective faces `ivy-confirm-face' and
+`ivy-match-required-face'."
+  (dolist (pair '(("confirm" . ivy-confirm-face)
+                  ("match required" . ivy-match-required-face)))
+    (let ((i (string-match-p (car pair) prompt)))
+      (when i
+        (add-text-properties i (+ i (length (car pair)))
+                             `(face ,(cdr pair) ,@props)
+                             prompt))))
   prompt)
 
 (defun ivy-prompt ()
   "Return the current prompt."
-  (let ((fn (plist-get ivy--prompts-list (ivy-state-caller ivy-last))))
+  (let* ((caller (ivy-state-caller ivy-last))
+         (fn (plist-get ivy--prompts-list caller)))
     (if fn
-        (condition-case nil
+        (condition-case err
             (funcall fn)
-          (error
-           (warn "`counsel-prompt-function' should take 0 args")
-           ;; old behavior
+          (wrong-number-of-arguments
+           (lwarn 'ivy :error "%s
+  Prompt function set via `ivy-set-prompt' for caller `%s'
+  should take no arguments."
+                  (error-message-string err)
+                  caller)
+           ;; Old behavior.
            (funcall fn (ivy-state-prompt ivy-last))))
       ivy--prompt)))
 
@@ -2481,39 +2727,22 @@ STD-PROPS is a property list containing the default 
text properties."
         (when (ivy--prompt-selectable-p)
           (if (or (= ivy--index -1)
                   (= ivy--length 0))
-              (add-face-text-property
+              (ivy-add-face-text-property
                (minibuffer-prompt-end) (line-end-position) 'ivy-prompt-match)
-            (remove-text-properties
+            (remove-list-of-text-properties
              (minibuffer-prompt-end) (line-end-position) '(face))))
         ;; get out of the prompt area
         (constrain-to-field nil (point-max))))))
 
-(defun ivy--set-match-props (str match props &optional subexp)
-  "Set text properties of STR that match MATCH to PROPS.
-SUBEXP is a number which specifies the regexp group to use.
-If nil, the text properties are applied to the whole match."
-  (when (null subexp)
-    (setq subexp 0))
-  (when (string-match match str)
-    (set-text-properties
-     (match-beginning subexp)
-     (match-end subexp)
-     props
-     str)))
-
-(defvar inhibit-message)
-
 (defun ivy--sort-maybe (collection)
   "Sort COLLECTION if needed."
   (let ((sort (ivy-state-sort ivy-last)))
-    (if (null sort)
-        collection
-      (let ((sort-fn (or (and (functionp sort) sort)
-                         (ivy--sort-function (ivy-state-collection ivy-last))
-                         (ivy--sort-function t))))
-        (if (functionp sort-fn)
-            (cl-sort (copy-sequence collection) sort-fn)
-          collection)))))
+    (if (and sort
+             (or (functionp sort)
+                 (functionp (setq sort (ivy--sort-function
+                                        (ivy-state-collection ivy-last))))))
+        (sort (copy-sequence collection) sort)
+      collection)))
 
 (defcustom ivy-magic-slash-non-match-action 
'ivy-magic-slash-non-match-cd-selected
   "Action to take when a slash is added to the end of a non existing directory.
@@ -2521,11 +2750,11 @@ Possible choices are 
'ivy-magic-slash-non-match-cd-selected,
 'ivy-magic-slash-non-match-create, or nil"
   :type '(choice
           (const :tag "Use currently selected directory"
-                 ivy-magic-slash-non-match-cd-selected)
+           ivy-magic-slash-non-match-cd-selected)
           (const :tag "Create and use new directory"
-                 ivy-magic-slash-non-match-create)
+           ivy-magic-slash-non-match-create)
           (const :tag "Do nothing"
-                 nil)))
+           nil)))
 
 (defun ivy--create-and-cd (dir)
   "When completing file names, create directory DIR and move there."
@@ -2534,45 +2763,40 @@ Possible choices are 
'ivy-magic-slash-non-match-cd-selected,
 
 (defun ivy--magic-file-slash ()
   "Handle slash when completing file names."
-  (when (or (and (eq this-command 'self-insert-command)
+  (when (or (and (eq this-command #'self-insert-command)
                  (eolp))
-            (eq this-command 'ivy-partial-or-done))
-    (cond ((member ivy-text ivy--all-candidates)
-           (ivy--cd (expand-file-name ivy-text ivy--directory)))
-          ((string-match "//\\'" ivy-text)
-           (if (and default-directory
-                    (string-match "\\`[[:alpha:]]:/" default-directory))
-               (ivy--cd (match-string 0 default-directory))
-             (ivy--cd "/")))
-          ((string-match "\\`/ssh:" ivy-text)
-           (ivy--cd (file-name-directory ivy-text)))
-          ((string-match "[[:alpha:]]:/\\'" ivy-text)
-           (let ((drive-root (match-string 0 ivy-text)))
-             (when (file-exists-p drive-root)
-               (ivy--cd drive-root))))
-          ((and (file-exists-p ivy-text)
-                (not (string= ivy-text "/"))
-                (file-directory-p ivy-text))
-           (ivy--cd (expand-file-name ivy-text)))
-          ((and (or (> ivy--index 0)
-                    (= ivy--length 1)
-                    (not (string= ivy-text "/")))
-                (let ((default-directory ivy--directory))
-                  (and
-                   (not (equal (ivy-state-current ivy-last) ""))
-                   (file-directory-p (ivy-state-current ivy-last))
-                   (file-exists-p (ivy-state-current ivy-last)))))
-           (when (eq ivy-magic-slash-non-match-action 
'ivy-magic-slash-non-match-cd-selected)
+            (eq this-command #'ivy-partial-or-done))
+    (let ((canonical (expand-file-name ivy-text ivy--directory))
+          (magic (not (string= ivy-text "/"))))
+      (cond ((member ivy-text ivy--all-candidates)
+             (ivy--cd canonical))
+            ((string-match-p "//\\'" ivy-text)
+             (ivy--cd (if (string-match "\\`[[:alpha:]]:/" default-directory)
+                          (match-string 0 default-directory)
+                        "/")))
+            ((string-match-p "\\`/ssh:" ivy-text)
+             (ivy--cd (file-name-directory ivy-text)))
+            ((string-match "[[:alpha:]]:/\\'" ivy-text)
+             (let ((drive-root (match-string 0 ivy-text)))
+               (when (file-exists-p drive-root)
+                 (ivy--cd drive-root))))
+            ((and magic (file-directory-p canonical))
+             (ivy--cd canonical))
+            ((let ((default-directory ivy--directory))
+               (and (or (> ivy--index 0)
+                        (= ivy--length 1)
+                        magic)
+                    (not (equal (ivy-state-current ivy-last) ""))
+                    (file-directory-p (ivy-state-current ivy-last))
+                    (or (eq ivy-magic-slash-non-match-action
+                            'ivy-magic-slash-non-match-cd-selected)
+                        (eq this-command #'ivy-partial-or-done))))
              (ivy--cd
               (expand-file-name (ivy-state-current ivy-last) ivy--directory)))
-           (when (and (eq ivy-magic-slash-non-match-action 
'ivy-magic-slash-non-match-create)
-                      (not (string= ivy-text "/")))
-             (ivy--create-and-cd (expand-file-name ivy-text ivy--directory))))
-          (t
-           (when (and
-                  (eq ivy-magic-slash-non-match-action 
'ivy-magic-slash-non-match-create)
-                  (not (string= ivy-text "/")))
-             (ivy--create-and-cd (expand-file-name ivy-text 
ivy--directory)))))))
+            ((and (eq ivy-magic-slash-non-match-action
+                      'ivy-magic-slash-non-match-create)
+                  magic)
+             (ivy--create-and-cd canonical))))))
 
 (defcustom ivy-magic-tilde t
   "When non-nil, ~ will move home when selecting files.
@@ -2628,15 +2852,13 @@ Should be run via minibuffer `post-command-hook'."
                     (ivy--cd (expand-file-name "~/")))
                    ((string-match "/\\'" ivy-text)
                     (ivy--magic-file-slash))))
-            ((eq (ivy-state-collection ivy-last) 'internal-complete-buffer)
+            ((eq (ivy-state-collection ivy-last) #'internal-complete-buffer)
              (when (or (and (string-match "\\` " ivy-text)
                             (not (string-match "\\` " ivy--old-text)))
                        (and (string-match "\\` " ivy--old-text)
                             (not (string-match "\\` " ivy-text))))
                (setq ivy--all-candidates
-                     (if (and (> (length ivy-text) 0)
-                              (eq (aref ivy-text 0)
-                                  ?\ ))
+                     (if (= (string-to-char ivy-text) ?\s)
                          (ivy--buffer-list " ")
                        (ivy--buffer-list "" ivy-use-virtual-buffers)))
                (setq ivy--old-re nil))))
@@ -2646,29 +2868,34 @@ Should be run via minibuffer `post-command-hook'."
           (ivy--filter ivy-text ivy--all-candidates))))
       (setq ivy--old-text ivy-text))))
 
+(defun ivy-display-function-fallback (str)
+  (let ((buffer-undo-list t))
+    (save-excursion
+      (forward-line 1)
+      (insert str))))
+
 (defun ivy--insert-minibuffer (text)
   "Insert TEXT into minibuffer with appropriate cleanup."
   (let ((resize-mini-windows nil)
         (update-fn (ivy-state-update-fn ivy-last))
         (old-mark (marker-position (mark-marker)))
+        (win (active-minibuffer-window))
         deactivate-mark)
-    (ivy--cleanup)
-    (when update-fn
-      (funcall update-fn))
-    (ivy--insert-prompt)
-    ;; Do nothing if while-no-input was aborted.
-    (when (stringp text)
-      (if ivy-display-function
-          (funcall ivy-display-function text)
-        (let ((buffer-undo-list t))
-          (save-excursion
-            (forward-line 1)
-            (insert text)))))
-    (when (display-graphic-p)
-      (ivy--resize-minibuffer-to-fit))
-    ;; prevent region growing due to text remove/add
-    (when (region-active-p)
-      (set-mark old-mark))))
+    (when win
+      (with-selected-window win
+        (ivy--cleanup)
+        (when update-fn
+          (funcall update-fn))
+        (ivy--insert-prompt)
+        ;; Do nothing if while-no-input was aborted.
+        (when (stringp text)
+          (if ivy-display-function
+              (funcall ivy-display-function text)
+            (ivy-display-function-fallback text)))
+        (ivy--resize-minibuffer-to-fit)
+        ;; prevent region growing due to text remove/add
+        (when (region-active-p)
+          (set-mark old-mark))))))
 
 (defun ivy--resize-minibuffer-to-fit ()
   "Resize the minibuffer window size to fit the text in the minibuffer."
@@ -2689,26 +2916,19 @@ Should be run via minibuffer `post-command-hook'."
           (when (> text-height body-height)
             (window-resize nil (- text-height body-height) nil t)))))))
 
-(declare-function colir-blend-face-background "ext:colir")
-
 (defun ivy--add-face (str face)
-  "Propertize STR with FACE.
-`font-lock-append-text-property' is used, since it's better than
-`propertize' or `add-face-text-property' in this case."
-  (require 'colir)
-  (condition-case nil
-      (progn
-        (colir-blend-face-background 0 (length str) face str)
-        (let ((foreground (face-foreground face)))
-          (when foreground
-            (add-face-text-property
-             0 (length str)
-             `(:foreground ,foreground)
-             nil
-             str))))
-    (error
-     (ignore-errors
-       (font-lock-append-text-property 0 (length str) 'face face str))))
+  "Propertize STR with FACE."
+  (let ((len (length str)))
+    (condition-case nil
+        (progn
+          (colir-blend-face-background 0 len face str)
+          (let ((foreground (face-foreground face)))
+            (when foreground
+              (ivy-add-face-text-property
+               0 len (list :foreground foreground) str))))
+      (error
+       (ignore-errors
+         (font-lock-append-text-property 0 len 'face face str)))))
   str)
 
 (declare-function flx-make-string-cache "ext:flx")
@@ -2720,43 +2940,39 @@ Should be run via minibuffer `post-command-hook'."
   '(setq ivy--flx-cache (flx-make-string-cache)))
 
 (defun ivy-toggle-case-fold ()
-  "Toggle the case folding between nil and auto/always.
+  "Toggle `case-fold-search' for Ivy operations.
 
-If auto, `case-fold-search' is t, when the input is all lower case,
-otherwise nil.
+Instead of modifying `case-fold-search' directly, this command
+toggles `ivy-case-fold-search', which can take on more values
+than the former, between nil and either `auto' or t.  See
+`ivy-case-fold-search-default' for the meaning of these values.
 
-If always, `case-fold-search' is always t, regardless of the input.
-
-Otherwise `case-fold-search' is always nil, regardless of the input.
-
-In any completion session, the case folding starts in
+In any Ivy completion session, the case folding starts with
 `ivy-case-fold-search-default'."
   (interactive)
   (setq ivy-case-fold-search
-        (if ivy-case-fold-search
-            nil
-          (or ivy-case-fold-search-default 'auto)))
-  ;; reset cache so that the candidate list updates
+        (and (not ivy-case-fold-search)
+             (or ivy-case-fold-search-default 'auto)))
+  ;; Reset cache so that the candidate list updates.
   (setq ivy--old-re nil))
 
-(defun ivy--re-filter (re candidates)
+(defun ivy--re-filter (re candidates &optional mkpred)
   "Return all RE matching CANDIDATES.
 RE is a list of cons cells, with a regexp car and a boolean cdr.
 When the cdr is t, the car must match.
 Otherwise, the car must not match."
-  (let ((re-list (if (stringp re) (list (cons re t)) re))
-        (res candidates))
-    (dolist (re re-list)
-      (setq res
-            (ignore-errors
-              (funcall
-               (if (cdr re)
-                   #'cl-remove-if-not
-                 #'cl-remove-if)
-               (let ((re-str (car re)))
-                 (lambda (x) (string-match re-str x)))
-               res))))
-    res))
+  (ignore-errors
+    (dolist (re (if (stringp re) (list (cons re t)) re))
+      (let* ((re-str (car re))
+             (pred
+              (if mkpred
+                  (funcall mkpred re-str)
+                (lambda (x) (string-match-p re-str x)))))
+        (setq candidates
+              (cl-remove nil candidates
+                         (if (cdr re) :if-not :if)
+                         pred))))
+    candidates))
 
 (defun ivy--filter (name candidates)
   "Return all items that match NAME in CANDIDATES.
@@ -2768,34 +2984,31 @@ CANDIDATES are assumed to be static."
          (equal re ivy--old-re))
         ;; quick caching for "C-n", "C-p" etc.
         ivy--old-cands
-      (let* ((re-str (if (listp re) (caar re) re))
+      (let* ((re-str (ivy-re-to-str re))
              (matcher (ivy-state-matcher ivy-last))
-             (case-fold-search
-              (and ivy-case-fold-search
-                   (or (eq ivy-case-fold-search 'always)
-                       (string= name (downcase name)))))
+             (case-fold-search (ivy--case-fold-p name))
              (cands (cond
                       (matcher
                        (funcall matcher re candidates))
                       ((and ivy--old-re
                             (stringp re)
                             (stringp ivy--old-re)
-                            (not (string-match "\\\\" ivy--old-re))
+                            (not (string-match-p "\\\\" ivy--old-re))
                             (not (equal ivy--old-re ""))
                             (memq (cl-search
-                                   (if (string-match "\\\\)\\'" ivy--old-re)
+                                   (if (string-match-p "\\\\)\\'" ivy--old-re)
                                        (substring ivy--old-re 0 -2)
                                      ivy--old-re)
                                    re)
                                   '(0 2)))
                        (ignore-errors
                          (cl-remove-if-not
-                          (lambda (x) (string-match re x))
+                          (lambda (x) (string-match-p re x))
                           ivy--old-cands)))
                       (t
                        (ivy--re-filter re candidates)))))
-        (if (memq (cdr (assoc (ivy-state-caller ivy-last)
-                              ivy-index-functions-alist))
+        (if (memq (cdr (assq (ivy-state-caller ivy-last)
+                             ivy-index-functions-alist))
                   '(ivy-recompute-index-swiper
                     ivy-recompute-index-swiper-async))
             (progn
@@ -2841,17 +3054,13 @@ The alist VAL is a sorting function with the signature 
of
           :value-type
           (choice
            (const :tag "Don't sort" nil)
-           (const :tag "Put prefix matches ahead" 'ivy--prefix-sort)
+           (const :tag "Put prefix matches ahead" ivy--prefix-sort)
            (function :tag "Custom sort function"))))
 
 (defun ivy--sort-files-by-date (_name candidates)
   "Re-sort CANDIDATES according to file modification date."
   (let ((default-directory ivy--directory))
-    (cl-sort (copy-sequence candidates)
-             (lambda (f1 f2)
-               (time-less-p
-                (nth 5 (file-attributes f2))
-                (nth 5 (file-attributes f1)))))))
+    (sort (copy-sequence candidates) #'file-newer-than-file-p)))
 
 (defvar ivy--flx-featurep (require 'flx nil 'noerror))
 
@@ -2866,8 +3075,7 @@ All CANDIDATES are assumed to match NAME."
     (cond ((and ivy--flx-featurep
                 (eq ivy--regex-function 'ivy--regex-fuzzy))
            (ivy--flx-sort name candidates))
-          ((setq fun (cdr (or (assoc key ivy-sort-matches-functions-alist)
-                              (assoc t ivy-sort-matches-functions-alist))))
+          ((setq fun (ivy-alist-setting ivy-sort-matches-functions-alist key))
            (funcall fun name candidates))
           (t
            candidates))))
@@ -2876,13 +3084,14 @@ All CANDIDATES are assumed to match NAME."
   "Re-sort candidates by NAME.
 All CANDIDATES are assumed to match NAME.
 Prefix matches to NAME are put ahead of the list."
-  (if (or (string-match "^\\^" name) (string= name ""))
+  (if (or (string= name "")
+          (= (aref name 0) ?^))
       candidates
-    (let ((re-prefix (concat "^" (funcall ivy--regex-function name)))
+    (let ((re-prefix (concat "\\`" (funcall ivy--regex-function name)))
           res-prefix
           res-noprefix)
       (dolist (s candidates)
-        (if (string-match re-prefix s)
+        (if (string-match-p re-prefix s)
             (push s res-prefix)
           (push s res-noprefix)))
       (nconc
@@ -2892,29 +3101,39 @@ Prefix matches to NAME are put ahead of the list."
 (defvar ivy--virtual-buffers nil
   "Store the virtual buffers alist.")
 
+(define-obsolete-function-alias 'ivy-generic-regex-to-str
+    'ivy-re-to-str "0.10.0")
+
+(defun ivy-re-to-str (re)
+  "Transform RE to a string.
+
+Functions like `ivy--regex-ignore-order' return a cons list.
+This function extracts a string from the cons list."
+  (if (consp re) (caar re) re))
+
 (defun ivy-sort-function-buffer (name candidates)
   "Re-sort candidates by NAME.
 CANDIDATES is a list of buffer names each containing NAME.
 Sort open buffers before virtual buffers, and prefix matches
 before substring matches."
-  (if (or (string-match "^\\^" name) (string= name ""))
+  (if (or (string= name "")
+          (= (aref name 0) ?^))
       candidates
-    (let* ((base-re (funcall ivy--regex-function name))
-           (base-re (if (consp base-re) (caar base-re) base-re))
-           (re-prefix (concat "^\\*" base-re))
+    (let* ((base-re (ivy-re-to-str (funcall ivy--regex-function name)))
+           (re-prefix (concat "\\`\\*" base-re))
            res-prefix
            res-noprefix
            res-virtual-prefix
            res-virtual-noprefix)
-      (unless (cl-find-if (lambda (s) (string-match re-prefix s)) candidates)
-        (setq re-prefix (concat "^" base-re)))
+      (unless (cl-find-if (lambda (s) (string-match-p re-prefix s)) candidates)
+        (setq re-prefix (concat "\\`" base-re)))
       (dolist (s candidates)
         (cond
-          ((and (assoc s ivy--virtual-buffers) (string-match re-prefix s))
+          ((and (assoc s ivy--virtual-buffers) (string-match-p re-prefix s))
            (push s res-virtual-prefix))
           ((assoc s ivy--virtual-buffers)
            (push s res-virtual-noprefix))
-          ((string-match re-prefix s)
+          ((string-match-p re-prefix s)
            (push s res-prefix))
           (t
            (push s res-noprefix))))
@@ -2927,39 +3146,49 @@ before substring matches."
 (defun ivy--recompute-index (name re-str cands)
   "Recompute index of selected candidate matching NAME.
 RE-STR is the regexp, CANDS are the current candidates."
-  (let* ((caller (ivy-state-caller ivy-last))
-         (func (or (and caller (cdr (assoc caller ivy-index-functions-alist)))
-                   (cdr (assoc t ivy-index-functions-alist))
-                   #'ivy-recompute-index-zero)))
+  (let ((caller (ivy-state-caller ivy-last))
+        (func (or (ivy-alist-setting ivy-index-functions-alist)
+                  #'ivy-recompute-index-zero))
+        (case-fold-search (ivy--case-fold-p name))
+        (preselect (ivy-state-preselect ivy-last))
+        (current (ivy-state-current ivy-last))
+        (empty (string= name "")))
     (unless (eq this-command 'ivy-resume)
       (ivy-set-index
        (or
-        (cl-position (if (and (> (length name) 0)
-                              (eq ?^ (aref name 0)))
-                         (substring name 1)
-                       name) cands
-                       :test #'equal)
+        (cl-position (ivy--remove-prefix "^" name)
+                     cands
+                     :test #'ivy--case-fold-string=)
         (and ivy--directory
-             (cl-position
-              (concat re-str "/") cands
-              :test #'equal))
+             (cl-position (concat re-str "/")
+                          cands
+                          :test #'ivy--case-fold-string=))
         (and (eq caller 'ivy-switch-buffer)
-             (> (length name) 0)
+             (not empty)
              0)
-        (and (not (string= name ""))
+        (and (not empty)
+             (not (eq caller 'swiper))
              (not (and ivy--flx-featurep
                        (eq ivy--regex-function 'ivy--regex-fuzzy)
-                       (< (length cands) 200)))
+                       ;; Limit to 200 candidates
+                       (null (nthcdr 200 cands))))
+             ;; If there was a preselected candidate, don't try to
+             ;; keep it selected even if the regexp still matches it.
+             ;; See issue #1563.  See also `ivy--preselect-index',
+             ;; which this logic roughly mirrors.
+             (not (or
+                   (and (integerp preselect)
+                        (= ivy--index preselect))
+                   (equal current preselect)
+                   (and (stringp preselect)
+                        (stringp current)
+                        (string-match-p preselect current))))
              ivy--old-cands
-             (cl-position (nth ivy--index ivy--old-cands)
-                          cands))
+             (cl-position current cands :test #'equal))
         (funcall func re-str cands))))
-    (when (or (string= name "")
-              (string= name "^"))
+    (when (or empty (string= name "^"))
       (ivy-set-index
-       (or (ivy--preselect-index
-            (ivy-state-preselect ivy-last)
-            cands)
+       (or (ivy--preselect-index preselect cands)
            ivy--index)))))
 
 (defun ivy-recompute-index-swiper (_re-str cands)
@@ -3038,6 +3267,12 @@ This function serves as a fallback when nothing else is 
available."
 When the amount of matching candidates exceeds this limit, then
 no sorting is done.")
 
+(defun ivy--minibuffer-face (n)
+  "Return Nth face from `ivy-minibuffer-faces'.
+N wraps around, but skips the first element of the list."
+  (let ((tail (cdr ivy-minibuffer-faces)))
+    (nth (mod (+ n 2) (length tail)) tail)))
+
 (defun ivy--flx-propertize (x)
   "X is (cons (flx-score STR ...) STR)."
   (let ((str (copy-sequence (cdr x)))
@@ -3047,81 +3282,59 @@ no sorting is done.")
       (unless (eq j (1+ last-j))
         (cl-incf i))
       (setq last-j j)
-      (ivy-add-face-text-property
-       j (1+ j)
-       (nth (1+ (mod (+ i 2) (1- (length ivy-minibuffer-faces))))
-            ivy-minibuffer-faces)
-       str))
+      (ivy-add-face-text-property j (1+ j) (ivy--minibuffer-face i) str))
     str))
 
 (defun ivy--flx-sort (name cands)
   "Sort according to closeness to string NAME the string list CANDS."
   (condition-case nil
-      (let* (
-             ;; an optimized regex for fuzzy matching
-             ;; "abc" → "\\`[^a]*a[^b]*b[^c]*c"
-             (fuzzy-regex (if (= (elt name 0) ?^)
-                              (concat "^"
-                                      (regexp-quote (substring name 1 2))
-                                      (mapconcat
-                                       (lambda (x)
-                                         (setq x (string x))
-                                         (concat "[^" x "]*" (regexp-quote x)))
-                                       (substring name 2)
-                                       ""))
-                            (concat "^"
-                                    (mapconcat
-                                     (lambda (x)
-                                       (setq x (string x))
-                                       (concat "[^" x "]*" (regexp-quote x)))
-                                     name
-                                     ""))))
-
-             ;; strip off the leading "^" for flx matching
-             (flx-name (if (string-match "^\\^" name)
-                           (substring name 1)
-                         name))
-
-             (cands-left)
-             (cands-to-sort))
-
-        ;; filter out non-matching candidates
+      (let* ((bolp (= (string-to-char name) ?^))
+             ;; An optimized regex for fuzzy matching
+             ;; "abc" → "^[^a]*a[^b]*b[^c]*c"
+             (fuzzy-regex (concat "\\`"
+                                  (and bolp (regexp-quote (substring name 1 
2)))
+                                  (mapconcat
+                                   (lambda (x)
+                                     (setq x (char-to-string x))
+                                     (concat "[^" x "]*" (regexp-quote x)))
+                                   (if bolp (substring name 2) name)
+                                   "")))
+             ;; Strip off the leading "^" for flx matching
+             (flx-name (if bolp (substring name 1) name))
+             cands-left
+             cands-to-sort)
+
+        ;; Filter out non-matching candidates
         (dolist (cand cands)
-          (when (string-match fuzzy-regex cand)
+          (when (string-match-p fuzzy-regex cand)
             (push cand cands-left)))
 
         ;; pre-sort the candidates by length before partitioning
-        (setq cands-left (sort cands-left
-                               (lambda (c1 c2)
-                                 (< (length c1)
-                                    (length c2)))))
+        (setq cands-left (cl-sort cands-left #'< :key #'length))
 
         ;; partition the candidates into sorted and unsorted groups
-        (dotimes (_n (min (length cands-left) ivy-flx-limit))
+        (dotimes (_ (min (length cands-left) ivy-flx-limit))
           (push (pop cands-left) cands-to-sort))
 
-        (append
-         ;; compute all of the flx scores in one pass and sort
+        (nconc
+         ;; Compute all of the flx scores in one pass and sort
          (mapcar #'car
                  (sort (mapcar
                         (lambda (cand)
                           (cons cand
-                                (car (flx-score cand
-                                                flx-name
-                                                ivy--flx-cache))))
+                                (car (flx-score cand flx-name 
ivy--flx-cache))))
                         cands-to-sort)
                        (lambda (c1 c2)
-                         ;; break ties by length
+                         ;; Break ties by length
                          (if (/= (cdr c1) (cdr c2))
                              (> (cdr c1)
                                 (cdr c2))
                            (< (length (car c1))
                               (length (car c2)))))))
 
-         ;; add the unsorted candidates
+         ;; Add the unsorted candidates
          cands-left))
-    (error
-     cands)))
+    (error cands)))
 
 (defun ivy--truncate-string (str width)
   "Truncate STR to WIDTH."
@@ -3135,7 +3348,7 @@ and SEPARATOR is used to join them."
   (let ((i -1))
     (mapconcat
      (lambda (str)
-       (let ((curr (eq (cl-incf i) ivy--index)))
+       (let ((curr (eq (cl-incf i) ivy--window-index)))
          (if curr
              (funcall selected-fn str)
            (funcall other-fn str))))
@@ -3171,14 +3384,20 @@ and SEPARATOR is used to join them."
    cands
    ""))
 
-(defun ivy-add-face-text-property (start end face str)
-  "Add face property to the text from START to END.
-FACE is the face to apply to STR."
+(defalias 'ivy-add-face-text-property
   (if (fboundp 'add-face-text-property)
-      (add-face-text-property
-       start end face nil str)
-    (font-lock-append-text-property
-     start end 'face face str)))
+      (lambda (start end face &optional object append)
+        (add-face-text-property start end face append object))
+    (lambda (start end face &optional object append)
+      (funcall (if append
+                   #'font-lock-append-text-property
+                 #'font-lock-prepend-text-property)
+               start end 'face face object)))
+  "Compatibility shim for `add-face-text-property'.
+Fall back on `font-lock-prepend-text-property' in Emacs versions
+prior to 24.4 (`font-lock-append-text-property' when APPEND is
+non-nil).
+Note: The usual last two arguments are flipped for convenience.")
 
 (defun ivy--highlight-ignore-order (str)
   "Highlight STR, using the ignore-order method."
@@ -3188,18 +3407,16 @@ FACE is the face to apply to STR."
         (when (string-match (car re) str)
           (ivy-add-face-text-property
            (match-beginning 0) (match-end 0)
-           (nth (1+ (mod (+ i 2) (1- (length ivy-minibuffer-faces))))
-                ivy-minibuffer-faces)
+           (ivy--minibuffer-face i)
            str))
         (cl-incf i))))
   str)
 
 (defun ivy--highlight-fuzzy (str)
   "Highlight STR, using the fuzzy method."
-  (if ivy--flx-featurep
-      (let ((flx-name (if (string-match "^\\^" ivy-text)
-                          (substring ivy-text 1)
-                        ivy-text)))
+  (if (and ivy--flx-featurep
+           (eq (ivy-alist-setting ivy-re-builders-alist) 'ivy--regex-fuzzy))
+      (let ((flx-name (ivy--remove-prefix "^" ivy-text)))
         (ivy--flx-propertize
          (cons (flx-score str flx-name ivy--flx-cache) str)))
     (ivy--highlight-default str)))
@@ -3209,37 +3426,58 @@ FACE is the face to apply to STR."
   (unless ivy--old-re
     (setq ivy--old-re (funcall ivy--regex-function ivy-text)))
   (let ((start
-         (if (and (memq (ivy-state-caller ivy-last)
-                        '(counsel-git-grep counsel-ag counsel-rg counsel-pt))
-                  (string-match "^[^:]+:[^:]+:" str))
+         (if (and (memq (ivy-state-caller ivy-last) 
ivy-highlight-grep-commands)
+                  (string-match "\\`[^:]+:[^:]+:" str))
              (match-end 0)
-           0)))
-    (ignore-errors
-      (while (and (string-match ivy--old-re str start)
-                  (> (- (match-end 0) (match-beginning 0)) 0))
-        (setq start (match-end 0))
-        (let ((i 0))
-          (while (<= i ivy--subexps)
-            (let ((face
-                   (cond ((zerop ivy--subexps)
-                          (cadr ivy-minibuffer-faces))
-                         ((zerop i)
-                          (car ivy-minibuffer-faces))
-                         (t
-                          (nth (1+ (mod (+ i 2)
-                                        (1- (length ivy-minibuffer-faces))))
-                               ivy-minibuffer-faces)))))
-              (ivy-add-face-text-property
-               (match-beginning i) (match-end i)
-               face str))
-            (cl-incf i))))))
+           0))
+        (regexps
+         (if (listp ivy--old-re)
+             (mapcar #'car (cl-remove-if-not #'cdr ivy--old-re))
+           (list ivy--old-re))))
+    (dolist (re regexps)
+      (ignore-errors
+        (while (and (string-match re str start)
+                    (> (- (match-end 0) (match-beginning 0)) 0))
+          (setq start (match-end 0))
+          (let ((i 0))
+            (while (<= i ivy--subexps)
+              (let ((face
+                     (cond ((zerop ivy--subexps)
+                            (cadr ivy-minibuffer-faces))
+                           ((zerop i)
+                            (car ivy-minibuffer-faces))
+                           (t
+                            (ivy--minibuffer-face i)))))
+                (ivy-add-face-text-property
+                 (match-beginning i) (match-end i)
+                 face str))
+              (cl-incf i)))))))
   str)
 
 (defun ivy--format-minibuffer-line (str)
   "Format line STR for use in minibuffer."
-  (if (eq ivy-display-style 'fancy)
-      (funcall ivy--highlight-function (copy-sequence str))
-    (copy-sequence str)))
+  (let* ((str (ivy-cleanup-string (copy-sequence str)))
+         (str (if (eq ivy-display-style 'fancy)
+                  (funcall ivy--highlight-function str)
+                str))
+         (olen (length str))
+         (annot (plist-get completion-extra-properties :annotation-function)))
+    (add-text-properties
+     0 olen
+     '(mouse-face
+       ivy-minibuffer-match-highlight
+       help-echo
+       (format
+        (if tooltip-mode
+            "mouse-1: %s\nmouse-3: %s"
+          "mouse-1: %s   mouse-3: %s")
+        ivy-mouse-1-tooltip ivy-mouse-3-tooltip))
+     str)
+    (when annot
+      (setq str (concat str (funcall annot str)))
+      (ivy-add-face-text-property
+       olen (length str) 'ivy-completions-annotations str))
+    str))
 
 (ivy-set-display-transformer
  'counsel-find-file 'ivy-read-file-transformer)
@@ -3260,25 +3498,28 @@ CANDS is a list of strings."
     (ivy-set-index (max (1- ivy--length) 0)))
   (if (null cands)
       (setf (ivy-state-current ivy-last) "")
+    (setf (ivy-state-current ivy-last) (copy-sequence (nth ivy--index cands)))
     (let* ((half-height (/ ivy-height 2))
            (start (max 0 (- ivy--index half-height)))
            (end (min (+ start (1- ivy-height)) ivy--length))
            (start (max 0 (min start (- end (1- ivy-height)))))
-           (cands (cl-subseq cands start end))
-           (index (- ivy--index start))
+           (wnd-cands (cl-subseq cands start end))
            transformer-fn)
-      (setf (ivy-state-current ivy-last) (copy-sequence (nth index cands)))
+      (setq ivy--window-index (- ivy--index start))
       (when (setq transformer-fn (ivy-state-display-transformer-fn ivy-last))
         (with-ivy-window
           (with-current-buffer (ivy-state-buffer ivy-last)
-            (setq cands (mapcar transformer-fn cands)))))
-      (let* ((ivy--index index)
-             (cands (mapcar
-                     #'ivy--format-minibuffer-line
-                     cands))
-             (res (concat "\n" (funcall ivy-format-function cands))))
-        (put-text-property 0 (length res) 'read-only nil res)
-        res))))
+            (setq wnd-cands (mapcar transformer-fn wnd-cands)))))
+      (ivy--wnd-cands-to-str wnd-cands))))
+
+(defun ivy--wnd-cands-to-str (wnd-cands)
+  (let ((str (concat "\n"
+                     (funcall ivy-format-function
+                              (mapcar
+                               #'ivy--format-minibuffer-line
+                               wnd-cands)))))
+    (put-text-property 0 (length str) 'read-only nil str)
+    str))
 
 (defvar recentf-list)
 (defvar bookmark-alist)
@@ -3287,6 +3528,7 @@ CANDS is a list of strings."
   "The mode of abbreviation for virtual buffer names."
   :type '(choice
           (const :tag "Only name" name)
+          (const :tag "Abbreviated path" abbreviate)
           (const :tag "Full path" full)
           ;; eventually, uniquify
           ))
@@ -3300,28 +3542,28 @@ CANDS is a list of strings."
     (recentf-mode 1))
   (let (virtual-buffers)
     (bookmark-maybe-load-default-file)
-    (dolist (head (append
-                   (copy-sequence recentf-list)
-                   (delete "   - no file -"
-                           (delq nil (mapcar #'bookmark-get-filename
-                                             (copy-sequence 
bookmark-alist))))))
-      (let ((file-name (if (stringp head)
-                           head
-                         (cdr head)))
-            name)
-        (setq name
-              (if (eq ivy-virtual-abbreviate 'name)
-                  (file-name-nondirectory file-name)
-                (expand-file-name file-name)))
+    (dolist (head (append recentf-list
+                          (delete "   - no file -"
+                                  (delq nil (mapcar #'bookmark-get-filename
+                                                    bookmark-alist)))))
+      (let* ((file-name (if (stringp head)
+                            head
+                          (cdr head)))
+             (name (cond ((eq ivy-virtual-abbreviate 'name)
+                          (file-name-nondirectory file-name))
+                         ((eq ivy-virtual-abbreviate 'abbreviate)
+                          (abbreviate-file-name file-name))
+                         (t
+                          (expand-file-name file-name)))))
         (when (equal name "")
-          (if (consp head)
-              (setq name (car head))
-            (setq name (file-name-nondirectory
-                        (directory-file-name file-name)))))
-        (and (not (equal name ""))
-             (null (get-file-buffer file-name))
-             (not (assoc name virtual-buffers))
-             (push (cons name file-name) virtual-buffers))))
+          (setq name
+                (if (consp head)
+                    (car head)
+                  (file-name-nondirectory (directory-file-name file-name)))))
+        (unless (or (equal name "")
+                    (get-file-buffer file-name)
+                    (assoc name virtual-buffers))
+          (push (cons (copy-sequence name) file-name) virtual-buffers))))
     (when virtual-buffers
       (dolist (comp virtual-buffers)
         (put-text-property 0 (length (car comp))
@@ -3335,7 +3577,7 @@ CANDS is a list of strings."
   :type '(repeat (choice regexp function)))
 
 (defvar ivy-switch-buffer-faces-alist '((dired-mode . ivy-subdir)
-                                        (org-mode . org-level-4))
+                                        (org-mode . ivy-org))
   "Store face customizations for `ivy-switch-buffer'.
 Each KEY is `major-mode', each VALUE is a face name.")
 
@@ -3345,21 +3587,21 @@ If VIRTUAL is non-nil, add virtual buffers.
 If optional argument PREDICATE is non-nil, use it to test each
 possible match.  See `all-completions' for further information."
   (delete-dups
-   (append
+   (nconc
     (mapcar
      (lambda (x)
-       (if (with-current-buffer x
-             (and default-directory
-                  (file-remote-p
-                   (abbreviate-file-name default-directory))))
-           (propertize x 'face 'ivy-remote)
-         (let ((face (with-current-buffer x
-                       (cdr (assoc major-mode
-                                   ivy-switch-buffer-faces-alist)))))
-           (if face
-               (propertize x 'face face)
-             x))))
-     (all-completions str 'internal-complete-buffer predicate))
+       (let* ((buf (get-buffer x))
+              (dir (buffer-local-value 'default-directory buf))
+              (face (if (and dir
+                             (ignore-errors
+                               (file-remote-p (abbreviate-file-name dir))))
+                        'ivy-remote
+                      (cdr (assq (buffer-local-value 'major-mode buf)
+                                 ivy-switch-buffer-faces-alist)))))
+         (if face
+             (propertize x 'face face)
+           x)))
+     (all-completions str #'internal-complete-buffer predicate))
     (and virtual
          (ivy--virtual-buffers)))))
 
@@ -3386,22 +3628,22 @@ TREE is a nested list with the following valid cars:
 - file: open the specified file
 - buffer: open the specified buffer
 
-TREE can be nested multiple times to have mulitple window splits.")
+TREE can be nested multiple times to have multiple window splits.")
 
 (defun ivy-default-view-name ()
   "Return default name for new view."
   (let* ((default-view-name
           (concat "{} "
                   (mapconcat #'identity
-                             (cl-sort
+                             (sort
                               (mapcar (lambda (w)
-                                        (with-current-buffer (window-buffer w)
-                                          (if (buffer-file-name)
-                                              (file-name-nondirectory
-                                               (buffer-file-name))
-                                            (buffer-name))))
+                                        (let* ((b (window-buffer w))
+                                               (f (buffer-file-name b)))
+                                          (if f
+                                              (file-name-nondirectory f)
+                                            (buffer-name b))))
                                       (window-list))
-                              #'string<)
+                              #'string-lessp)
                              " ")))
          (view-name-re (concat "\\`"
                                (regexp-quote default-view-name)
@@ -3421,12 +3663,15 @@ TREE can be nested multiple times to have mulitple 
window splits.")
           (t
            default-view-name))))
 
-(defun ivy-push-view ()
+(defun ivy-push-view (&optional arg)
   "Push the current window tree on `ivy-views'.
+
+When ARG is non-nil, replace a selected item on `ivy-views'.
+
 Currently, the split configuration (i.e. horizonal or vertical)
 and point positions are saved, but the split positions aren't.
 Use `ivy-pop-view' to delete any item from `ivy-views'."
-  (interactive)
+  (interactive "P")
   (let* ((view (cl-labels
                    ((ft (tr)
                       (if (consp tr)
@@ -3436,17 +3681,23 @@ Use `ivy-pop-view' to delete any item from `ivy-views'."
                             (cons 'horz
                                   (mapcar #'ft (cddr tr))))
                         (with-current-buffer (window-buffer tr)
-                          (cond ((buffer-file-name)
-                                 (list 'file (buffer-file-name) (point)))
+                          (cond (buffer-file-name
+                                 (list 'file buffer-file-name (point)))
                                 ((eq major-mode 'dired-mode)
                                  (list 'file default-directory (point)))
                                 (t
                                  (list 'buffer (buffer-name) (point))))))))
                  (ft (car (window-tree)))))
-         (view-name (ivy-read "Name view: " nil
-                              :initial-input (ivy-default-view-name))))
+         (view-name
+          (if arg
+              (ivy-read "Update view: " ivy-views)
+            (ivy-read "Name view: " nil
+                      :initial-input (ivy-default-view-name)))))
     (when view-name
-      (push (list view-name view) ivy-views))))
+      (let ((x (assoc view-name ivy-views)))
+        (if x
+            (setcdr x (list view))
+          (push (list view-name view) ivy-views))))))
 
 (defun ivy-pop-view-action (view)
   "Delete VIEW from `ivy-views'."
@@ -3522,24 +3773,23 @@ Use `ivy-pop-view' to delete any item from `ivy-views'."
 (defun ivy--switch-buffer-action (buffer)
   "Switch to BUFFER.
 BUFFER may be a string or nil."
-  (with-ivy-window
-    (if (zerop (length buffer))
-        (switch-to-buffer
-         ivy-text nil 'force-same-window)
-      (let ((virtual (assoc buffer ivy--virtual-buffers))
-            (view (assoc buffer ivy-views)))
-        (cond ((and virtual
-                    (not (get-buffer buffer)))
-               (find-file (cdr virtual)))
-              (view
-               (delete-other-windows)
-               (let (
-                     ;; silence "Directory has changed on disk"
-                     (inhibit-message t))
-                 (ivy-set-view-recur (cadr view))))
-              (t
-               (switch-to-buffer
-                buffer nil 'force-same-window)))))))
+  (if (zerop (length buffer))
+      (switch-to-buffer
+       ivy-text nil 'force-same-window)
+    (let ((virtual (assoc buffer ivy--virtual-buffers))
+          (view (assoc buffer ivy-views)))
+      (cond ((and virtual
+                  (not (get-buffer buffer)))
+             (find-file (cdr virtual)))
+            (view
+             (delete-other-windows)
+             (let (
+                   ;; silence "Directory has changed on disk"
+                   (inhibit-message t))
+               (ivy-set-view-recur (cadr view))))
+            (t
+             (switch-to-buffer
+              buffer nil 'force-same-window))))))
 
 (defun ivy--switch-buffer-other-window-action (buffer)
   "Switch to BUFFER in other window.
@@ -3558,27 +3808,58 @@ BUFFER may be a string or nil."
     (with-current-buffer buffer
       (rename-buffer new-name))))
 
-(defvar ivy-switch-buffer-map (make-sparse-keymap))
+(defun ivy--find-file-action (buffer)
+  "Find file from BUFFER's directory."
+  (let ((default-directory (buffer-local-value 'default-directory
+                                               (or (get-buffer buffer)
+                                                   (current-buffer)))))
+    (call-interactively (if (functionp 'counsel-find-file)
+                            #'counsel-find-file
+                          #'find-file))))
+
+(defun ivy--kill-buffer-or-virtual (buffer)
+  (if (get-buffer buffer)
+      (kill-buffer buffer)
+    (setq recentf-list (delete
+                        (cdr (assoc buffer ivy--virtual-buffers))
+                        recentf-list))))
+
+(defun ivy--kill-buffer-action (buffer)
+  "Kill BUFFER."
+  (ivy--kill-buffer-or-virtual buffer)
+  (unless (buffer-live-p (ivy-state-buffer ivy-last))
+    (setf (ivy-state-buffer ivy-last) (current-buffer)))
+  (setq ivy--index 0)
+  (ivy--reset-state ivy-last))
+
+(defvar ivy-switch-buffer-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map (kbd "C-c C-k") 'ivy-switch-buffer-kill)
+    map))
+
+(defun ivy-switch-buffer-kill ()
+  "Kill the current buffer in `ivy-switch-buffer'."
+  (interactive)
+  (let ((bn (ivy-state-current ivy-last)))
+    (ivy--kill-buffer-or-virtual bn)
+    (unless (buffer-live-p (ivy-state-buffer ivy-last))
+      (setf (ivy-state-buffer ivy-last)
+            (with-ivy-window (current-buffer))))
+    (setf (ivy-state-preselect ivy-last) ivy--index)
+    (setq ivy--old-re nil)
+    (setq ivy--all-candidates (delete bn ivy--all-candidates))
+    (ivy--exhibit)))
 
 (ivy-set-actions
  'ivy-switch-buffer
- `(("f"
-    ,(lambda (x)
-       (let* ((b (get-buffer x))
-              (default-directory
-                (or (and b (buffer-local-value 'default-directory b))
-                    default-directory)))
-         (call-interactively (if (functionp 'counsel-find-file)
-                                 #'counsel-find-file
-                               #'find-file))))
+ '(("f"
+    ivy--find-file-action
     "find file")
    ("j"
     ivy--switch-buffer-other-window-action
     "other window")
    ("k"
-    ,(lambda (x)
-       (kill-buffer x)
-       (ivy--reset-state ivy-last))
+    ivy--kill-buffer-action
     "kill")
    ("r"
     ivy--rename-buffer-action
@@ -3586,8 +3867,8 @@ BUFFER may be a string or nil."
 
 (ivy-set-actions
  t
- '(("i" (lambda (x) (insert (if (stringp x) x (car x)))) "insert")
-   ("w" (lambda (x) (kill-new (if (stringp x) x (car x)))) "copy")))
+ `(("i" ,(lambda (x) (insert (if (stringp x) x (car x)))) "insert")
+   ("w" ,(lambda (x) (kill-new (if (stringp x) x (car x)))) "copy")))
 
 (defun ivy--switch-buffer-matcher (regexp candidates)
   "Return REGEXP matching CANDIDATES.
@@ -3615,18 +3896,21 @@ Skip buffers that match `ivy-ignore-buffers'."
 
 (defun ivy-append-face (str face)
   "Append to STR the property FACE."
-  (let ((new (copy-sequence str)))
-    (font-lock-append-text-property
-     0 (length new) 'face face new)
-    new))
+  (setq str (copy-sequence str))
+  (ivy-add-face-text-property 0 (length str) face str t)
+  str)
 
 (defun ivy-switch-buffer-transformer (str)
   "Transform candidate STR when switching buffers."
   (let ((b (get-buffer str)))
-    (if (and b
-             (buffer-file-name b)
-             (buffer-modified-p b))
-        (ivy-append-face str 'ivy-modified-buffer)
+    (if (and b (buffer-file-name b))
+        (cond
+          ((and (not (ignore-errors (file-remote-p (buffer-file-name b))))
+                (not (verify-visited-file-modtime b)))
+           (ivy-append-face str 'ivy-modified-outside-buffer))
+          ((buffer-modified-p b)
+           (ivy-append-face str 'ivy-modified-buffer))
+          (t str))
       str)))
 
 (defun ivy-switch-buffer-occur ()
@@ -3637,13 +3921,13 @@ Skip buffers that match `ivy-ignore-buffers'."
 (defun ivy-switch-buffer ()
   "Switch to another buffer."
   (interactive)
-  (let ((this-command 'ivy-switch-buffer))
-    (ivy-read "Switch to buffer: " 'internal-complete-buffer
-              :matcher #'ivy--switch-buffer-matcher
-              :preselect (buffer-name (other-buffer (current-buffer)))
-              :action #'ivy--switch-buffer-action
-              :keymap ivy-switch-buffer-map
-              :caller 'ivy-switch-buffer)))
+  (setq this-command #'ivy-switch-buffer)
+  (ivy-read "Switch to buffer: " #'internal-complete-buffer
+            :keymap ivy-switch-buffer-map
+            :preselect (buffer-name (other-buffer (current-buffer)))
+            :action #'ivy--switch-buffer-action
+            :matcher #'ivy--switch-buffer-matcher
+            :caller 'ivy-switch-buffer))
 
 ;;;###autoload
 (defun ivy-switch-view ()
@@ -3657,7 +3941,7 @@ Skip buffers that match `ivy-ignore-buffers'."
 (defun ivy-switch-buffer-other-window ()
   "Switch to another buffer in another window."
   (interactive)
-  (ivy-read "Switch to buffer in other window: " 'internal-complete-buffer
+  (ivy-read "Switch to buffer in other window: " #'internal-complete-buffer
             :matcher #'ivy--switch-buffer-matcher
             :preselect (buffer-name (other-buffer (current-buffer)))
             :action #'ivy--switch-buffer-other-window-action
@@ -3666,19 +3950,92 @@ Skip buffers that match `ivy-ignore-buffers'."
 
 (define-obsolete-function-alias 'ivy-recentf 'counsel-recentf "0.8.0")
 
-(defun ivy-yank-word ()
-  "Pull next word from buffer into search string."
-  (interactive)
-  (let (amend)
+(defun ivy--yank-by (fn &rest args)
+  "Pull buffer text from current line into search string.
+The region to extract is determined by the respective values of
+point before and after applying FN to ARGS."
+  (let (text)
     (with-ivy-window
-      (let ((pt (point))
-            (le (line-end-position)))
-        (forward-word 1)
-        (if (> (point) le)
-            (goto-char pt)
-          (setq amend (buffer-substring-no-properties pt (point))))))
-    (when amend
-      (insert (replace-regexp-in-string "  +" " " amend)))))
+      (let ((beg (point))
+            (bol (line-beginning-position))
+            (eol (line-end-position))
+            end)
+        (unwind-protect
+             (progn (apply fn args)
+                    (setq end (goto-char (max bol (min (point) eol))))
+                    (setq text (buffer-substring-no-properties beg end))
+                    (ivy--pulse-region beg end))
+          (unless text
+            (goto-char beg)))))
+    (when text
+      (insert (replace-regexp-in-string "  +" " " text t t)))))
+
+(defun ivy-yank-word (&optional arg)
+  "Pull next word from buffer into search string.
+If optional ARG is non-nil, pull in the next ARG
+words (previous if ARG is negative)."
+  (interactive "p")
+  (ivy--yank-by #'forward-word arg))
+
+(defun ivy-yank-symbol (&optional arg)
+  "Pull next symbol from buffer into search string.
+If optional ARG is non-nil, pull in the next ARG
+symbols (previous if ARG is negative)."
+  (interactive "p")
+  ;; Emacs < 24.4 compatibility
+  (unless (fboundp 'forward-symbol)
+    (require 'thingatpt))
+  (ivy--yank-by #'forward-symbol (or arg 1)))
+
+(defun ivy-yank-char (&optional arg)
+  "Pull next character from buffer into search string.
+If optional ARG is non-nil, pull in the next ARG
+characters (previous if ARG is negative)."
+  (interactive "p")
+  (ivy--yank-by #'forward-char arg))
+
+(defvar ivy--pulse-overlay nil
+  "Overlay used to highlight yanked word.")
+
+(defvar ivy--pulse-timer nil
+  "Timer used to dispose of `ivy--pulse-overlay'.")
+
+(defcustom ivy-pulse-delay 0.5
+  "Number of seconds to display `ivy-yanked-word' highlight.
+When nil, disable highlighting."
+  :type '(choice
+          (number :tag "Delay in seconds")
+          (const :tag "Disable" nil)))
+
+(defun ivy--pulse-region (start end)
+  "Temporarily highlight text between START and END.
+The \"pulse\" duration is determined by `ivy-pulse-delay'."
+  (when ivy-pulse-delay
+    (if ivy--pulse-overlay
+        (let ((ostart (overlay-start ivy--pulse-overlay))
+              (oend (overlay-end ivy--pulse-overlay)))
+          (when (< end start)
+            (cl-rotatef start end))
+          ;; Extend the existing overlay's region to include START..END,
+          ;; but only if the two regions are contiguous.
+          (move-overlay ivy--pulse-overlay
+                        (if (= start oend) ostart start)
+                        (if (= end ostart) oend end)))
+      (setq ivy--pulse-overlay (make-overlay start end))
+      (overlay-put ivy--pulse-overlay 'face 'ivy-yanked-word))
+    (when ivy--pulse-timer
+      (cancel-timer ivy--pulse-timer))
+    (setq ivy--pulse-timer
+          (run-at-time ivy-pulse-delay nil #'ivy--pulse-cleanup))))
+
+(defun ivy--pulse-cleanup ()
+  "Cancel `ivy--pulse-timer' and delete `ivy--pulse-overlay'."
+  (when ivy--pulse-timer
+    (cancel-timer ivy--pulse-timer)
+    (setq ivy--pulse-timer nil))
+  (when ivy--pulse-overlay
+    (delete-overlay ivy--pulse-overlay)
+    (setq ivy--pulse-overlay nil)))
 
 (defun ivy-kill-ring-save ()
   "Store the current candidates into the kill ring.
@@ -3698,28 +4055,30 @@ Don't finish completion."
   (interactive)
   (delete-minibuffer-contents)
   (if (and ivy--directory
-           (string-match "/$" (ivy-state-current ivy-last)))
+           (ivy--dirname-p (ivy-state-current ivy-last)))
       (insert (substring (ivy-state-current ivy-last) 0 -1))
     (insert (ivy-state-current ivy-last))))
 
-(defcustom ivy--preferred-re-builders
+(define-obsolete-variable-alias 'ivy--preferred-re-builders
+    'ivy-preferred-re-builders "0.10.0")
+
+(defcustom ivy-preferred-re-builders
   '((ivy--regex-plus . "ivy")
     (ivy--regex-ignore-order . "order")
     (ivy--regex-fuzzy . "fuzzy"))
   "Alist of preferred re-builders with display names.
 This list can be rotated with `ivy-rotate-preferred-builders'."
-  :type '(alist :key-type function :value-type string)
-  :group 'ivy)
+  :type '(alist :key-type function :value-type string))
 
 (defun ivy-rotate-preferred-builders ()
-  "Switch to the next re builder in `ivy--preferred-re-builders'."
+  "Switch to the next re builder in `ivy-preferred-re-builders'."
   (interactive)
-  (when ivy--preferred-re-builders
+  (when ivy-preferred-re-builders
     (setq ivy--old-re nil)
     (setq ivy--regex-function
-          (let ((cell (assoc ivy--regex-function ivy--preferred-re-builders)))
-            (car (or (cadr (memq cell ivy--preferred-re-builders))
-                     (car ivy--preferred-re-builders)))))))
+          (let ((cell (assq ivy--regex-function ivy-preferred-re-builders)))
+            (car (or (cadr (memq cell ivy-preferred-re-builders))
+                     (car ivy-preferred-re-builders)))))))
 
 (defun ivy-toggle-fuzzy ()
   "Toggle the re builder between `ivy--regex-fuzzy' and `ivy--regex-plus'."
@@ -3738,7 +4097,7 @@ The selected history element will be inserted into the 
minibuffer."
         (old-last ivy-last)
         (ivy-recursive-restore nil))
     (ivy-read "Reverse-i-search: "
-              history
+              (delete-dups (copy-sequence history))
               :action (lambda (x)
                         (ivy--reset-state
                          (setq ivy-last old-last))
@@ -3788,21 +4147,61 @@ buffer would modify `ivy-last'.")
     (setq mode-name "Ivy-Occur"))
   (force-mode-line-update))
 
+(defun ivy--find-occur-buffer ()
+  (let ((cb (current-buffer)))
+    (cl-find-if
+     (lambda (b)
+       (with-current-buffer b
+         (and (eq major-mode 'ivy-occur-grep-mode)
+              (equal cb (ivy-state-buffer ivy-occur-last)))))
+     (buffer-list))))
+
+(defun ivy--select-occur-buffer ()
+  (let* ((ob (ivy--find-occur-buffer))
+         (ow (cl-find-if (lambda (w) (equal ob (window-buffer w)))
+                         (window-list))))
+    (if ow
+        (select-window ow)
+      (pop-to-buffer ob))))
+
 (defun ivy-occur-next-line (&optional arg)
   "Move the cursor down ARG lines.
 When `ivy-calling' isn't nil, call `ivy-occur-press'."
   (interactive "p")
-  (forward-line arg)
-  (when ivy-calling
-    (ivy-occur-press)))
+  (let ((offset (cond ((derived-mode-p 'ivy-occur-grep-mode) 5)
+                      ((derived-mode-p 'ivy-occur-mode) 2))))
+    (if offset
+        (progn
+          (if (< (line-number-at-pos) offset)
+              (progn
+                (goto-char (point-min))
+                (forward-line (1- offset)))
+            (forward-line arg)
+            (when (eolp)
+              (forward-line -1)))
+          (when ivy-calling
+            (ivy-occur-press)))
+      (ivy--select-occur-buffer)
+      (ivy-occur-next-line arg)
+      (ivy-occur-press-and-switch))))
 
 (defun ivy-occur-previous-line (&optional arg)
   "Move the cursor up ARG lines.
 When `ivy-calling' isn't nil, call `ivy-occur-press'."
   (interactive "p")
-  (forward-line (- arg))
-  (when ivy-calling
-    (ivy-occur-press)))
+  (let ((offset (cond ((derived-mode-p 'ivy-occur-grep-mode) 5)
+                      ((derived-mode-p 'ivy-occur-mode) 2))))
+    (if offset
+        (progn
+          (forward-line (- arg))
+          (when (< (line-number-at-pos) offset)
+            (goto-char (point-min))
+            (forward-line (1- offset)))
+          (when ivy-calling
+            (ivy-occur-press)))
+      (ivy--select-occur-buffer)
+      (ivy-occur-previous-line arg)
+      (ivy-occur-press-and-switch))))
 
 (define-derived-mode ivy-occur-mode fundamental-mode "Ivy-Occur"
   "Major mode for output from \\[ivy-occur].
@@ -3813,6 +4212,7 @@ When `ivy-calling' isn't nil, call `ivy-occur-press'."
 (defvar ivy-occur-grep-mode-map
   (let ((map (copy-keymap ivy-occur-mode-map)))
     (define-key map (kbd "C-x C-q") 'ivy-wgrep-change-to-wgrep-mode)
+    (define-key map "w" 'ivy-wgrep-change-to-wgrep-mode)
     map)
   "Keymap for Ivy Occur Grep mode.")
 
@@ -3841,18 +4241,27 @@ When `ivy-calling' isn't nil, call `ivy-occur-press'."
 (ivy-set-occur 'ivy-switch-buffer 'ivy-switch-buffer-occur)
 (ivy-set-occur 'ivy-switch-buffer-other-window 'ivy-switch-buffer-occur)
 
+(defun ivy--starts-with-dotslash (str)
+  (string-match-p "\\`\\.[/\\]" str))
+
 (defun ivy--occur-insert-lines (cands)
   "Insert CANDS into `ivy-occur' buffer."
+  (font-lock-mode -1)
   (dolist (str cands)
+    (setq str (ivy--highlight-fuzzy (copy-sequence str)))
     (add-text-properties
      0 (length str)
-     `(mouse-face
+     '(mouse-face
        highlight
        help-echo "mouse-1: call ivy-action")
      str)
-    (insert str "\n"))
+    (insert (if (string-match-p "\\`.[/\\]" str) "" "    ")
+            str ?\n))
   (goto-char (point-min))
-  (forward-line 4))
+  (forward-line 4)
+  (while (re-search-forward "^.*:[[:digit:]]+:" nil t)
+    (ivy-add-face-text-property
+     (match-beginning 0) (match-end 0) 'ivy-grep-info nil t)))
 
 (defun ivy-occur ()
   "Stop completion and put the current candidates into a new buffer.
@@ -3884,14 +4293,12 @@ There is no limit on the number of *ivy-occur* buffers."
             (insert (format "%d candidates:\n" (length ivy--old-cands)))
             (read-only-mode)
             (ivy--occur-insert-lines
-             (mapcar
-              (lambda (cand) (concat "    " cand))
-              ivy--old-cands))))
+             ivy--old-cands)))
         (setf (ivy-state-text ivy-last) ivy-text)
         (setq ivy-occur-last ivy-last)
         (setq-local ivy--directory ivy--directory))
       (ivy-exit-with-action
-       `(lambda (_) (pop-to-buffer ,buffer))))))
+       (lambda (_) (pop-to-buffer buffer))))))
 
 (defun ivy-occur-revert-buffer ()
   "Refresh the buffer making it up-to date with the collection.
@@ -3965,13 +4372,14 @@ EVENT gives the mouse position."
 (defun ivy--occur-press-update-window ()
   (cl-case (ivy-state-caller ivy-occur-last)
     ((swiper counsel-git-grep counsel-grep counsel-ag counsel-rg)
-     (let ((window (ivy-state-window ivy-occur-last)))
-       (when (or (null (window-live-p window))
-                 (equal window (selected-window)))
+     (let ((window (ivy-state-window ivy-occur-last))
+           (buffer (ivy-state-buffer ivy-occur-last)))
+       (when (and (or (not (window-live-p window))
+                      (equal window (selected-window)))
+                  (buffer-live-p buffer))
          (save-selected-window
            (setf (ivy-state-window ivy-occur-last)
-                 (display-buffer (ivy-state-buffer ivy-occur-last)
-                                 'display-buffer-pop-up-window))))))
+                 (display-buffer buffer))))))
 
     ((counsel-describe-function counsel-describe-variable)
      (setf (ivy-state-window ivy-occur-last)
diff --git a/packages/ivy/swiper.el b/packages/ivy/swiper.el
index 93d9f4d..0fe6779 100644
--- a/packages/ivy/swiper.el
+++ b/packages/ivy/swiper.el
@@ -1,11 +1,11 @@
 ;;; swiper.el --- Isearch with an overview. Oh, man! -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015-2017  Free Software Foundation, Inc.
+;; Copyright (C) 2015-2018  Free Software Foundation, Inc.
 
 ;; Author: Oleh Krehel <address@hidden>
 ;; URL: https://github.com/abo-abo/swiper
-;; Version: 0.10.0
-;; Package-Requires: ((emacs "24.1") (ivy "0.9.0"))
+;; Version: 0.11.0
+;; Package-Requires: ((emacs "24.1") (ivy "0.11.0"))
 ;; Keywords: matching
 
 ;; This file is part of GNU Emacs.
@@ -21,10 +21,10 @@
 ;; GNU General Public License for more details.
 
 ;; For a full copy of the GNU General Public License
-;; see <http://www.gnu.org/licenses/>.
+;; see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
-;;
+
 ;; This package gives an overview of the current regex search
 ;; candidates.  The search regex can be split into groups with a
 ;; space.  Each group is highlighted with a different face.
@@ -33,6 +33,7 @@
 ;; lines will be matched.
 
 ;;; Code:
+
 (require 'ivy)
 
 (defgroup swiper nil
@@ -41,7 +42,7 @@
   :prefix "swiper-")
 
 (defface swiper-match-face-1
-  '((t (:inherit isearch-lazy-highlight-face)))
+  '((t (:inherit lazy-highlight)))
   "The background face for `swiper' matches.")
 
 (defface swiper-match-face-2
@@ -66,7 +67,7 @@
                           swiper-match-face-4)
   "List of `swiper' faces for group matches."
   :group 'ivy-faces
-  :type 'list)
+  :type '(repeat face))
 
 (defcustom swiper-min-highlight 2
   "Only highlight matches for regexps at least this long."
@@ -115,6 +116,8 @@
              (perform-replace from to
                               t t nil))))))))
 
+(defvar inhibit-message)
+
 (defun swiper-all-query-replace ()
   "Start `query-replace' with string to replace from last search string."
   (interactive)
@@ -155,6 +158,56 @@
 (declare-function avy-push-mark "ext:avy")
 (declare-function avy--remove-leading-chars "ext:avy")
 
+(defun swiper--avy-candidate ()
+  (let* ((avy-all-windows nil)
+         ;; We'll have overlapping overlays, so we sort all the
+         ;; overlays in the visible region by their start, and then
+         ;; throw out non-Swiper overlays or overlapping Swiper
+         ;; overlays.
+         (visible-overlays (cl-sort (with-ivy-window
+                                      (overlays-in (window-start)
+                                                   (window-end)))
+                                    #'< :key #'overlay-start))
+         (min-overlay-start 0)
+         (overlays-for-avy (cl-remove-if-not
+                            (lambda (ov)
+                              (when (and (>= (overlay-start ov)
+                                             min-overlay-start)
+                                         (memq (overlay-get ov 'face)
+                                               swiper-faces))
+                                (setq min-overlay-start (overlay-start ov))))
+                            visible-overlays))
+         (offset (if (eq (ivy-state-caller ivy-last) 'swiper) 1 0))
+         (candidates (nconc
+                      (mapcar (lambda (ov)
+                                (cons (overlay-start ov)
+                                      (overlay-get ov 'window)))
+                              overlays-for-avy)
+                      (save-excursion
+                        (save-restriction
+                          (narrow-to-region (window-start) (window-end))
+                          (goto-char (point-min))
+                          (forward-line)
+                          (let ((win (selected-window))
+                                cands)
+                            (while (not (eobp))
+                              (push (cons (+ (point) offset) win)
+                                    cands)
+                              (forward-line))
+                            cands))))))
+    (unwind-protect
+         (prog2
+             (avy--make-backgrounds
+              (append (avy-window-list)
+                      (list (ivy-state-window ivy-last))))
+             (if (eq avy-style 'de-bruijn)
+                 (avy-read-de-bruijn candidates avy-keys)
+               (avy-read (avy-tree candidates avy-keys)
+                         #'avy--overlay-post
+                         #'avy--remove-leading-chars))
+           (avy-push-mark))
+      (avy--done))))
+
 ;;;###autoload
 (defun swiper-avy ()
   "Jump to one of the current swiper candidates."
@@ -162,62 +215,21 @@
   (unless (require 'avy nil 'noerror)
     (error "Package avy isn't installed"))
   (unless (string= ivy-text "")
-    (let* ((avy-all-windows nil)
-           ;; We'll have overlapping overlays, so we sort all the
-           ;; overlays in the visible region by their start, and then
-           ;; throw out non-Swiper overlays or overlapping Swiper
-           ;; overlays.
-           (visible-overlays (cl-sort (with-ivy-window
-                                        (overlays-in (window-start)
-                                                     (window-end)))
-                                      #'< :key #'overlay-start))
-           (min-overlay-start 0)
-           (overlays-for-avy (cl-remove-if-not
-                              (lambda (ov)
-                                (when (and (>= (overlay-start ov)
-                                               min-overlay-start)
-                                           (memq (overlay-get ov 'face)
-                                                 swiper-faces))
-                                  (setq min-overlay-start (overlay-start ov))))
-                              visible-overlays))
-           (candidates (append
-                        (mapcar (lambda (ov)
-                                  (cons (overlay-start ov)
-                                        (overlay-get ov 'window)))
-                                overlays-for-avy)
-                        (save-excursion
-                          (save-restriction
-                            (narrow-to-region (window-start) (window-end))
-                            (goto-char (point-min))
-                            (forward-line)
-                            (let ((cands))
-                              (while (< (point) (point-max))
-                                (push (cons (1+ (point))
-                                            (selected-window))
-                                      cands)
-                                (forward-line))
-                              cands)))))
-           (candidate (unwind-protect
-                           (prog2
-                               (avy--make-backgrounds
-                                (append (avy-window-list)
-                                        (list (ivy-state-window ivy-last))))
-                               (if (eq avy-style 'de-bruijn)
-                                   (avy-read-de-bruijn
-                                    candidates avy-keys)
-                                 (avy-read (avy-tree candidates avy-keys)
-                                           #'avy--overlay-post
-                                           #'avy--remove-leading-chars))
-                             (avy-push-mark))
-                        (avy--done))))
+    (let ((candidate (swiper--avy-candidate)))
       (if (window-minibuffer-p (cdr candidate))
-          (progn
-            (ivy-set-index (- (line-number-at-pos (car candidate)) 2))
+          (let ((cand-text (save-excursion
+                             (goto-char (car candidate))
+                             (buffer-substring-no-properties
+                              (line-beginning-position)
+                              (line-end-position)))))
+            (ivy-set-index (cl-position-if
+                            (lambda (x) (cl-search x cand-text))
+                            ivy--old-cands))
             (ivy--exhibit)
             (ivy-done)
             (ivy-call))
         (ivy-quit-and-run
-         (avy-action-goto (avy-candidate-beg candidate)))))))
+          (avy-action-goto (avy-candidate-beg candidate)))))))
 
 (declare-function mc/create-fake-cursor-at-point "ext:multiple-cursors-core")
 (declare-function multiple-cursors-mode "ext:multiple-cursors-core")
@@ -247,49 +259,54 @@
     (recenter-top-bottom arg)))
 
 (defvar swiper-font-lock-exclude
-  '(bbdb-mode
+  '(Man-mode
+    adoc-mode
+    bbdb-mode
+    bongo-library-mode
+    bongo-mode
+    bongo-playlist-mode
     bookmark-bmenu-mode
-    package-menu-mode
-    gnus-summary-mode
-    gnus-article-mode
-    gnus-group-mode
+    circe-channel-mode
+    circe-query-mode
+    circe-server-mode
+    deadgrep-mode
+    debbugs-gnu-mode
+    dired-mode
+    elfeed-search-mode
+    elfeed-show-mode
     emms-playlist-mode
     emms-stream-mode
     erc-mode
-    forth-mode
+    eshell-mode
+    eww-mode
     forth-block-mode
-    nix-mode
-    org-agenda-mode
-    dired-mode
-    jabber-chat-mode
-    elfeed-search-mode
-    elfeed-show-mode
+    forth-mode
     fundamental-mode
-    Man-mode
-    woman-mode
-    mu4e-view-mode
+    gnus-article-mode
+    gnus-group-mode
+    gnus-summary-mode
+    help-mode
+    helpful-mode
+    jabber-chat-mode
+    magit-popup-mode
+    matrix-client-mode
+    matrix-client-room-list-mode
     mu4e-headers-mode
-    notmuch-tree-mode
+    mu4e-view-mode
+    nix-mode
     notmuch-search-mode
-    help-mode
-    debbugs-gnu-mode
-    occur-mode
+    notmuch-tree-mode
     occur-edit-mode
-    bongo-mode
-    bongo-library-mode
-    magit-popup-mode
-    adoc-mode
-    bongo-playlist-mode
-    eww-mode
+    occur-mode
+    org-agenda-mode
+    package-menu-mode
+    rcirc-mode
+    sauron-mode
     treemacs-mode
     twittering-mode
     vc-dir-mode
-    rcirc-mode
-    circe-channel-mode
-    circe-server-mode
-    circe-query-mode
-    sauron-mode
-    w3m-mode)
+    w3m-mode
+    woman-mode)
   "List of major-modes that are incompatible with `font-lock-ensure'.")
 
 (defun swiper-font-lock-ensure-p ()
@@ -315,6 +332,30 @@
 (defvar swiper-use-visual-line nil
   "When non-nil, use `line-move' instead of `forward-line'.")
 
+(defvar dired-isearch-filenames)
+(declare-function dired-move-to-filename "dired")
+
+(defun swiper--line ()
+  (let* ((beg (cond ((and (eq major-mode 'dired-mode)
+                          (bound-and-true-p dired-isearch-filenames))
+                     (dired-move-to-filename)
+                     (point))
+                    (swiper-use-visual-line
+                     (save-excursion
+                       (beginning-of-visual-line)
+                       (point)))
+                    (t
+                     (point))))
+         (end (if swiper-use-visual-line
+                  (save-excursion
+                    (end-of-visual-line)
+                    (point))
+                (line-end-position))))
+
+    (concat
+     " "
+     (buffer-substring beg end))))
+
 (declare-function outline-show-all "outline")
 
 (defun swiper--candidates (&optional numbers-width)
@@ -322,19 +363,21 @@
 
 NUMBERS-WIDTH, when specified, is used for width spec of line
 numbers; replaces calculating the width from buffer line count."
-  (if (and visual-line-mode
-           ;; super-slow otherwise
-           (< (buffer-size) 20000))
-      (progn
-        (when (eq major-mode 'org-mode)
-          (require 'outline)
-          (if (fboundp 'outline-show-all)
-              (outline-show-all)
-            (with-no-warnings
-              (show-all))))
-        (setq swiper-use-visual-line t))
-    (setq swiper-use-visual-line nil))
-  (let ((n-lines (count-lines (point-min) (point-max))))
+  (let* ((inhibit-field-text-motion t)
+         (n-lines (count-lines (point-min) (point-max))))
+    (if (and visual-line-mode
+             ;; super-slow otherwise
+             (< (buffer-size) 20000)
+             (< n-lines 400))
+        (progn
+          (when (eq major-mode 'org-mode)
+            (require 'outline)
+            (if (fboundp 'outline-show-all)
+                (outline-show-all)
+              (with-no-warnings
+                (show-all))))
+          (setq swiper-use-visual-line t))
+      (setq swiper-use-visual-line nil))
     (unless (zerop n-lines)
       (setq swiper--width (or numbers-width
                               (1+ (floor (log n-lines 10)))))
@@ -349,21 +392,7 @@ numbers; replaces calculating the width from buffer line 
count."
           (goto-char (point-min))
           (swiper-font-lock-ensure)
           (while (< (point) (point-max))
-            (let ((str (concat
-                        " "
-                        (replace-regexp-in-string
-                         "\t" "    "
-                         (if swiper-use-visual-line
-                             (buffer-substring
-                              (save-excursion
-                                (beginning-of-visual-line)
-                                (point))
-                              (save-excursion
-                                (end-of-visual-line)
-                                (point)))
-                           (buffer-substring
-                            (point)
-                            (line-end-position)))))))
+            (let ((str (swiper--line)))
               (setq str (ivy-cleanup-string str))
               (let ((line-number-str
                      (format swiper--format-spec (cl-incf line-number))))
@@ -387,13 +416,26 @@ When non-nil, INITIAL-INPUT is the initial search 
pattern."
   (interactive)
   (swiper--ivy (swiper--candidates) initial-input))
 
-(declare-function string-trim-right "subr-x")
 (defvar swiper--current-window-start nil)
 
+(defun swiper--extract-matches (regex cands)
+  "Extract captured REGEX groups from CANDS."
+  (let (res)
+    (dolist (cand cands)
+      (setq cand (substring cand 1))
+      (when (string-match regex cand)
+        (push (mapconcat (lambda (n) (match-string-no-properties n cand))
+                         (number-sequence
+                          1
+                          (/ (- (length (match-data)) 2) 2))
+                         " ")
+              res)))
+    (nreverse res)))
+
 (defun swiper-occur (&optional revert)
   "Generate a custom occur buffer for `swiper'.
-When REVERT is non-nil, regenerate the current *ivy-occur* buffer."
-  (require 'subr-x)
+When REVERT is non-nil, regenerate the current *ivy-occur* buffer.
+When capture groups are present in the input, print them instead of lines."
   (let* ((buffer (ivy-state-buffer ivy-last))
          (fname (propertize
                  (with-ivy-window
@@ -402,38 +444,44 @@ When REVERT is non-nil, regenerate the current 
*ivy-occur* buffer."
                         (buffer-file-name buffer))
                      (buffer-name buffer)))
                  'face
-                 'compilation-info))
-         (cands (mapcar
-                 (lambda (s)
-                   (format "%s:%s:%s"
-                           fname
-                           (propertize
-                            (string-trim-right
-                             (get-text-property 0 'swiper-line-number s))
-                            'face 'compilation-line-number)
-                           (substring s 1)))
-                 (if (null revert)
-                     ivy--old-cands
-                   (setq ivy--old-re nil)
-                   (let ((ivy--regex-function 'swiper--re-builder))
-                     (ivy--filter
-                      (progn (string-match "\"\\(.*\\)\"" (buffer-name))
-                             (match-string 1 (buffer-name)))
-                      (with-current-buffer buffer
-                        (swiper--candidates))))))))
-    (unless (eq major-mode 'ivy-occur-grep-mode)
-      (ivy-occur-grep-mode)
-      (font-lock-mode -1))
-    (setq swiper--current-window-start nil)
-    (insert (format "-*- mode:grep; default-directory: %S -*-\n\n\n"
-                    default-directory))
-    (insert (format "%d candidates:\n" (length cands)))
-    (ivy--occur-insert-lines
-     (mapcar
-      (lambda (cand) (concat "./" cand))
-      cands))
-    (goto-char (point-min))
-    (forward-line 4)))
+                 'ivy-grep-info))
+         (re (progn (string-match "\"\\(.*\\)\"" (buffer-name))
+                    (match-string 1 (buffer-name))))
+         (re (mapconcat #'identity (ivy--split re) ".*?"))
+         (cands
+          (mapcar
+           (lambda (s)
+             (let* ((n (get-text-property 0 'swiper-line-number s))
+                    (i (string-match-p "[ \t\n\r]+\\'" n)))
+               (when i (setq n (substring n 0 i)))
+               (put-text-property 0 (length n) 'face 'ivy-grep-line-number n)
+               (format "%s:%s:%s" fname n (substring s 1))))
+           (if (not revert)
+               ivy--old-cands
+             (setq ivy--old-re nil)
+             (let ((ivy--regex-function 'swiper--re-builder))
+               (ivy--filter re (with-current-buffer buffer
+                                 (swiper--candidates))))))))
+    (if (string-match-p "\\\\(" re)
+        (insert
+         (mapconcat #'identity
+                    (swiper--extract-matches
+                     re (with-current-buffer buffer
+                          (swiper--candidates)))
+                    "\n"))
+      (unless (eq major-mode 'ivy-occur-grep-mode)
+        (ivy-occur-grep-mode)
+        (font-lock-mode -1))
+      (setq swiper--current-window-start nil)
+      (insert (format "-*- mode:grep; default-directory: %S -*-\n\n\n"
+                      default-directory))
+      (insert (format "%d candidates:\n" (length cands)))
+      (ivy--occur-insert-lines
+       (mapcar
+        (lambda (cand) (concat "./" cand))
+        cands))
+      (goto-char (point-min))
+      (forward-line 4))))
 
 (ivy-set-occur 'swiper 'swiper-occur)
 
@@ -465,17 +513,21 @@ When REVERT is non-nil, regenerate the current 
*ivy-occur* buffer."
   "Transform STR into a swiper regex.
 This is the regex used in the minibuffer where candidates have
 line numbers.  For the buffer, use `ivy--regex' instead."
-  (let* ((re-builder
-          (or (cdr (assoc 'swiper ivy-re-builders-alist))
-              (cdr (assoc t ivy-re-builders-alist))))
+  (let* ((re-builder (ivy-alist-setting ivy-re-builders-alist))
          (re (cond
                ((equal str "")
                 "")
                ((equal str "^")
                 (setq ivy--subexps 0)
                 ".")
-               ((string-match "^\\^" str)
-                (let ((re (funcall re-builder (substring str 1))))
+               ((= (aref str 0) ?^)
+                (let* ((re (funcall re-builder (substring str 1)))
+                       (re (if (listp re)
+                               (mapconcat (lambda (x)
+                                            (format "\\(%s\\)" (car x)))
+                                          (cl-remove-if-not #'cdr re)
+                                          ".*?")
+                             re)))
                   (if (zerop ivy--subexps)
                       (prog1 (format "^ ?\\(%s\\)" re)
                         (setq ivy--subexps 1))
@@ -492,6 +544,10 @@ line numbers.  For the buffer, use `ivy--regex' instead."
 (defvar swiper-invocation-face nil
   "The face at the point of invocation of `swiper'.")
 
+(defcustom swiper-stay-on-quit nil
+  "When non-nil don't go back to search start on abort."
+  :type 'boolean)
+
 (defun swiper--ivy (candidates &optional initial-input)
   "Select one of CANDIDATES and move there.
 When non-nil, INITIAL-INPUT is the initial search pattern."
@@ -523,8 +579,10 @@ When non-nil, INITIAL-INPUT is the initial search pattern."
                  :history 'swiper-history
                  :caller 'swiper))
           (point))
-      (unless res
+      (unless (or res swiper-stay-on-quit)
         (goto-char swiper--opoint))
+      (unless (or res (string= ivy-text ""))
+        (cl-pushnew ivy-text swiper-history))
       (when swiper--reveal-mode
         (reveal-mode 1)))))
 
@@ -542,17 +600,17 @@ When non-nil, INITIAL-INPUT is the initial search 
pattern."
 Matched candidates should have `swiper-invocation-face'."
   (cl-remove-if-not
    (lambda (x)
-     (and
-      (string-match regexp x)
-      (let ((s (match-string 0 x))
-            (i 0))
-        (while (and (< i (length s))
-                    (text-property-any
-                     i (1+ i)
-                     'face swiper-invocation-face
-                     s))
-          (cl-incf i))
-        (eq i (length s)))))
+     (and (string-match regexp x)
+          (let* ((s (match-string 0 x))
+                 (n (length s))
+                 (i 0))
+            (while (and (< i n)
+                        (text-property-any
+                         i (1+ i)
+                         'face swiper-invocation-face
+                         s))
+              (cl-incf i))
+            (= i n))))
    candidates))
 
 (defun swiper--ensure-visible ()
@@ -580,44 +638,51 @@ Matched candidates should have `swiper-invocation-face'."
   (with-ivy-window
     (swiper--cleanup)
     (when (> (length (ivy-state-current ivy-last)) 0)
-      (let* ((re (funcall ivy--regex-function ivy-text))
-             (re (if (stringp re) re (caar re)))
-             (re (replace-regexp-in-string
-                  "    " "\t"
-                  re))
-             (str (get-text-property 0 'swiper-line-number (ivy-state-current 
ivy-last)))
-             (num (if (string-match "^[0-9]+" str)
-                      (string-to-number (match-string 0 str))
-                    0)))
-        (unless (eq this-command 'ivy-yank-word)
-          (when (cl-plusp num)
-            (unless (if swiper--current-line
-                        (eq swiper--current-line num)
-                      (eq (line-number-at-pos) num))
-              (goto-char swiper--point-min)
-              (if swiper-use-visual-line
-                  (line-move (1- num))
-                (forward-line (1- num))))
-            (if (and (equal ivy-text "")
-                     (>= swiper--opoint (line-beginning-position))
-                     (<= swiper--opoint (line-end-position)))
-                (goto-char swiper--opoint)
-              (if (eq swiper--current-line num)
-                  (when swiper--current-match-start
-                    (goto-char swiper--current-match-start))
-                (setq swiper--current-line num))
-              (when (re-search-forward re (line-end-position) t)
-                (setq swiper--current-match-start (match-beginning 0))))
-            (isearch-range-invisible (line-beginning-position)
-                                     (line-end-position))
-            (unless (and (>= (point) (window-start))
-                         (<= (point) (window-end (ivy-state-window ivy-last) 
t)))
-              (recenter))
-            (setq swiper--current-window-start (window-start))))
-        (swiper--add-overlays
-         re
-         (max (window-start) swiper--point-min)
-         (min (window-end (selected-window) t) swiper--point-max))))))
+      (let* ((regexp-or-regexps (funcall ivy--regex-function ivy-text))
+             (regexps
+              (if (listp regexp-or-regexps)
+                  (mapcar #'car (cl-remove-if-not #'cdr regexp-or-regexps))
+                (list regexp-or-regexps))))
+        (dolist (re regexps)
+          (let* ((re (replace-regexp-in-string
+                      "    " "\t"
+                      re))
+                 (str (get-text-property 0 'swiper-line-number 
(ivy-state-current ivy-last)))
+                 (num (if (string-match "^[0-9]+" str)
+                          (string-to-number (match-string 0 str))
+                        0)))
+            (unless (memq this-command '(ivy-yank-word
+                                         ivy-yank-symbol
+                                         ivy-yank-char
+                                         scroll-other-window))
+              (when (cl-plusp num)
+                (unless (if swiper--current-line
+                            (eq swiper--current-line num)
+                          (eq (line-number-at-pos) num))
+                  (goto-char swiper--point-min)
+                  (if swiper-use-visual-line
+                      (line-move (1- num))
+                    (forward-line (1- num))))
+                (if (and (equal ivy-text "")
+                         (>= swiper--opoint (line-beginning-position))
+                         (<= swiper--opoint (line-end-position)))
+                    (goto-char swiper--opoint)
+                  (if (eq swiper--current-line num)
+                      (when swiper--current-match-start
+                        (goto-char swiper--current-match-start))
+                    (setq swiper--current-line num))
+                  (when (re-search-forward re (line-end-position) t)
+                    (setq swiper--current-match-start (match-beginning 0))))
+                (isearch-range-invisible (line-beginning-position)
+                                         (line-end-position))
+                (unless (and (>= (point) (window-start))
+                             (<= (point) (window-end (ivy-state-window 
ivy-last) t)))
+                  (recenter))
+                (setq swiper--current-window-start (window-start))))
+            (swiper--add-overlays
+             re
+             (max (window-start) swiper--point-min)
+             (min (window-end (selected-window) t) swiper--point-max))))))))
 
 (defun swiper--add-overlays (re &optional beg end wnd)
   "Add overlays for RE regexp in visible part of the current buffer.
@@ -645,39 +710,52 @@ WND, when specified is the window."
            (end (or end (save-excursion
                           (forward-line wh)
                           (point))))
-           (case-fold-search (and ivy-case-fold-search
-                                  (string= re (downcase re)))))
+           (case-fold-search (ivy--case-fold-p re)))
       (when (>= (length re) swiper-min-highlight)
         (save-excursion
           (goto-char beg)
           ;; RE can become an invalid regexp
           (while (and (ignore-errors (re-search-forward re end t))
                       (> (- (match-end 0) (match-beginning 0)) 0))
-            (let ((mb (match-beginning 0))
-                  (me (match-end 0)))
-              (unless (> (- me mb) 2017)
-                (swiper--add-overlay mb me
-                                     (if (zerop ivy--subexps)
-                                         (cadr swiper-faces)
-                                       (car swiper-faces))
-                                     wnd 0)))
-            (let ((i 1)
-                  (j 0))
-              (while (<= (cl-incf j) ivy--subexps)
-                (let ((bm (match-beginning j))
-                      (em (match-end j)))
-                  (when (and (integerp em)
-                             (integerp bm))
-                    (while (and (< j ivy--subexps)
-                                (integerp (match-beginning (+ j 1)))
-                                (= em (match-beginning (+ j 1))))
-                      (setq em (match-end (cl-incf j))))
-                    (swiper--add-overlay
-                     bm em
-                     (nth (1+ (mod (+ i 2) (1- (length swiper-faces))))
-                          swiper-faces)
-                     wnd i)
-                    (cl-incf i)))))))))))
+            ;; Don't highlight a match if it spans multiple
+            ;; lines. `count-lines' returns 1 if the match is within a
+            ;; single line, even if it includes the newline, and 2 or
+            ;; greater otherwise. We hope that the inclusion of the
+            ;; newline will not ever be a problem in practice.
+            (when (< (count-lines (match-beginning 0) (match-end 0)) 2)
+              (unless (and (consp ivy--old-re)
+                           (null
+                            (save-match-data
+                              (ivy--re-filter ivy--old-re
+                                              (list
+                                               (buffer-substring-no-properties
+                                                (line-beginning-position)
+                                                (line-end-position)))))))
+                (let ((mb (match-beginning 0))
+                      (me (match-end 0)))
+                  (unless (> (- me mb) 2017)
+                    (swiper--add-overlay mb me
+                                         (if (zerop ivy--subexps)
+                                             (cadr swiper-faces)
+                                           (car swiper-faces))
+                                         wnd 0))))
+              (let ((i 1)
+                    (j 0))
+                (while (<= (cl-incf j) ivy--subexps)
+                  (let ((bm (match-beginning j))
+                        (em (match-end j)))
+                    (when (and (integerp em)
+                               (integerp bm))
+                      (while (and (< j ivy--subexps)
+                                  (integerp (match-beginning (+ j 1)))
+                                  (= em (match-beginning (+ j 1))))
+                        (setq em (match-end (cl-incf j))))
+                      (swiper--add-overlay
+                       bm em
+                       (nth (1+ (mod (+ i 2) (1- (length swiper-faces))))
+                            swiper-faces)
+                       wnd i)
+                      (cl-incf i))))))))))))
 
 (defun swiper--add-overlay (beg end face wnd priority)
   "Add overlay bound by BEG and END to `swiper--overlays'.
@@ -732,13 +810,16 @@ the face, window and priority of the overlay."
          'regexp-search-ring
          re
          regexp-search-ring-max)
-        (when (and (bound-and-true-p evil-mode)
-                   (eq evil-search-module 'evil-search))
-          (add-to-history 'evil-ex-search-history re)
-          (setq evil-ex-search-pattern (list re t t))
-          (setq evil-ex-search-direction 'forward)
-          (when evil-ex-search-persistent-highlight
-            (evil-ex-search-activate-highlight evil-ex-search-pattern)))))))
+        ;; integration with evil-mode's search
+        (when (bound-and-true-p evil-mode)
+          (when (eq evil-search-module 'isearch)
+            (setq isearch-string ivy-text))
+          (when (eq evil-search-module 'evil-search)
+            (add-to-history 'evil-ex-search-history re)
+            (setq evil-ex-search-pattern (list re t t))
+            (setq evil-ex-search-direction 'forward)
+            (when evil-ex-search-persistent-highlight
+              (evil-ex-search-activate-highlight evil-ex-search-pattern))))))))
 
 (defun swiper-from-isearch ()
   "Invoke `swiper' from isearch."
@@ -767,10 +848,10 @@ Run `swiper' for those buffers."
   (setq swiper-multi-buffers nil)
   (let ((ivy-use-virtual-buffers nil))
     (ivy-read (swiper-multi-prompt)
-              'internal-complete-buffer
-              :action 'swiper-multi-action-1))
+              #'internal-complete-buffer
+              :action #'swiper-multi-action-1))
   (ivy-read "Swiper: " swiper-multi-candidates
-            :action 'swiper-multi-action-2
+            :action #'swiper-multi-action-2
             :unwind #'swiper--cleanup
             :caller 'swiper-multi))
 
@@ -836,42 +917,39 @@ otherwise continue prompting for buffers."
 ;;* `swiper-all'
 (defun swiper-all-function (str)
   "Search in all open buffers for STR."
-  (if (and (< (length str) 3))
-      (list "" (format "%d chars more" (- 3 (length ivy-text))))
-    (let* ((buffers (cl-remove-if-not #'swiper-all-buffer-p (buffer-list)))
-           (re-full (funcall ivy--regex-function str))
-           re re-tail
-           cands match
-           (case-fold-search
-            (and ivy-case-fold-search
-                 (string= str (downcase str)))))
-      (if (stringp re-full)
-          (setq re re-full)
-        (setq re (caar re-full))
-        (setq re-tail (cdr re-full)))
-      (dolist (buffer buffers)
-        (with-current-buffer buffer
-          (save-excursion
-            (goto-char (point-min))
-            (while (re-search-forward re nil t)
-              (setq match (if (memq major-mode '(org-mode dired-mode))
-                              (buffer-substring-no-properties
-                               (line-beginning-position)
-                               (line-end-position))
-                            (buffer-substring
-                             (line-beginning-position)
-                             (line-end-position))))
-              (put-text-property
-               0 1 'buffer
-               (buffer-name)
-               match)
-              (put-text-property 0 1 'point (point) match)
-              (when (or (null re-tail) (ivy-re-match re-tail match))
-                (push match cands))))))
-      (setq ivy--old-re re-full)
-      (if (null cands)
-          (list "")
-        (setq ivy--old-cands (nreverse cands))))))
+  (or
+   (ivy-more-chars)
+   (let* ((buffers (cl-remove-if-not #'swiper-all-buffer-p (buffer-list)))
+          (re-full (funcall ivy--regex-function str))
+          re re-tail
+          cands match
+          (case-fold-search (ivy--case-fold-p str)))
+     (setq re (ivy-re-to-str re-full))
+     (when (consp re-full)
+       (setq re-tail (cdr re-full)))
+     (dolist (buffer buffers)
+       (with-current-buffer buffer
+         (save-excursion
+           (goto-char (point-min))
+           (while (re-search-forward re nil t)
+             (setq match (if (memq major-mode '(org-mode dired-mode))
+                             (buffer-substring-no-properties
+                              (line-beginning-position)
+                              (line-end-position))
+                           (buffer-substring
+                            (line-beginning-position)
+                            (line-end-position))))
+             (put-text-property
+              0 1 'buffer
+              (buffer-name)
+              match)
+             (put-text-property 0 1 'point (point) match)
+             (when (or (null re-tail) (ivy-re-match re-tail match))
+               (push match cands))))))
+     (setq ivy--old-re re-full)
+     (if (null cands)
+         (list "")
+       (setq ivy--old-cands (nreverse cands))))))
 
 (defvar swiper-window-width 80)
 
@@ -914,18 +992,19 @@ See `ivy-format-function' for further information."
   "Keymap for `swiper-all'.")
 
 ;;;###autoload
-(defun swiper-all ()
+(defun swiper-all (&optional initial-input)
   "Run `swiper' for all open buffers."
   (interactive)
   (let* ((swiper-window-width (- (frame-width) (if (display-graphic-p) 0 1)))
          (ivy-format-function #'swiper--all-format-function))
     (ivy-read "swiper-all: " 'swiper-all-function
-              :action 'swiper-all-action
+              :action #'swiper-all-action
               :unwind #'swiper--cleanup
               :update-fn (lambda ()
                            (swiper-all-action (ivy-state-current ivy-last)))
               :dynamic-collection t
               :keymap swiper-all-map
+              :initial-input initial-input
               :caller 'swiper-multi)))
 
 (defun swiper-all-action (x)
@@ -969,6 +1048,7 @@ See `ivy-format-function' for further information."
                        ?\ )
                       (buffer-name))
                      s)
+                    (put-text-property 0 len 'buffer buf s)
                     s))
                 (swiper--candidates 4))
                res))
diff --git a/packages/ivy/targets/obsolete-config.el 
b/packages/ivy/targets/obsolete-config.el
index f04fbee..e6fbe6f 100644
--- a/packages/ivy/targets/obsolete-config.el
+++ b/packages/ivy/targets/obsolete-config.el
@@ -2,5 +2,4 @@
 
 (add-to-list 'load-path default-directory)
 (require 'counsel)
-(setq counsel-prompt-function 'counsel-prompt-function-default)
 (byte-compile-file (expand-file-name "targets/obsolete-config.el"))
diff --git a/packages/ivy/targets/plain.el b/packages/ivy/targets/plain.el
index 63b83a9..e73dc91 100644
--- a/packages/ivy/targets/plain.el
+++ b/packages/ivy/targets/plain.el
@@ -4,3 +4,8 @@
 (ivy-mode)
 (counsel-mode)
 (setq enable-recursive-minibuffers t)
+(global-set-key (kbd "C-c C-r") 'ivy-resume)
+(global-set-key (kbd "C-s") 'swiper)
+(global-set-key (kbd "C-c j") 'counsel-git-grep)
+(global-set-key (kbd "C-c k") 'counsel-rg)
+(global-set-key (kbd "C-c s") 'isearch-forward-regexp)
diff --git a/packages/load-relative/THANKS b/packages/load-relative/THANKS
index f74a3ef..60303e8 100644
--- a/packages/load-relative/THANKS
+++ b/packages/load-relative/THANKS
@@ -1,2 +1,3 @@
 Phil Lord - Contribute find-file-noselect-relative, and with-relative-file
 Lars Anderson - Melapa packaging, among other things
+Stefan Monnier <address@hidden> - Elisp guidance
diff --git a/packages/load-relative/configure.ac 
b/packages/load-relative/configure.ac
index 35bddab..489f120 100644
--- a/packages/load-relative/configure.ac
+++ b/packages/load-relative/configure.ac
@@ -1,13 +1,15 @@
-AC_INIT(emacs-load-relative, 1.0,)
+AC_INIT(emacs-load-relative, 1.3.1,)
 AC_CONFIG_SRCDIR(load-relative.el)
-AM_INIT_AUTOMAKE
+AM_INIT_AUTOMAKE([foreign])
 AM_MAINTAINER_MODE
 AM_MISSING_PROG(GIT2CL, git2cl, $missing_dir)
 
 AC_PATH_PROG(EMACS, emacs, no)
+AC_ARG_WITH(emacs, AC_HELP_STRING([--with-emacs],
+                  [location of emacs program]), EMACS=$withval)
 if test x$EMACS != xno ; then
   $EMACS -batch -q -no-site-file -eval \
-  '(if (<= emacs-major-version 22)
+  '(if (< emacs-major-version 23)
      (progn
        (error "You need GNU Emacs 23 or better for this package.")
        (kill-emacs 1)
diff --git a/packages/load-relative/load-relative.el 
b/packages/load-relative/load-relative.el
index 976d0da..e1a7bfe 100644
--- a/packages/load-relative/load-relative.el
+++ b/packages/load-relative/load-relative.el
@@ -1,12 +1,12 @@
-;;; load-relative.el --- relative file load (within a multi-file Emacs package)
+;;; load-relative.el --- Relative file load (within a multi-file Emacs 
package) -*- lexical-binding: t -*-
 
 ;; Author: Rocky Bernstein <address@hidden>
-;; Version: 1.3
+;; Version: 1.3.1
 ;; Keywords: internal
 ;; URL: http://github.com/rocky/emacs-load-relative
 ;; Compatibility: GNU Emacs 23.x
 
-;; Copyright (C) 2015, 2016, 2017 Free Software Foundation, Inc
+;; Copyright (C) 2015-2019 Free Software Foundation, Inc
 
 ;; This program is free software: you can redistribute it and/or
 ;; modify it under the terms of the GNU General Public License as
@@ -124,7 +124,7 @@ readevalloop of `lread.c' as the car of variable
 Failing that, we use `load-file-name' which should work in some
 subset of the same places that the first method works.  However
 `load-file-name' will be nil for code that is eval'd.  To cover
-those cases, we try `buffer-file-name' which is initially
+those cases, we try function `buffer-file-name' which is initially
 correct, for eval'd code, but will change and may be wrong if the
 code sets or switches buffers after the initial execution.
 
@@ -172,8 +172,9 @@ methods work we will use the file-name value find via
 (defun autoload-relative (function-or-list
                           file &optional docstring interactive type
                           symbol)
-  "Autoload an Emacs Lisp file relative to Emacs Lisp code that is in
-the process of being loaded or eval'd.
+  ;; FIXME: Docstring talks of FUNCTION but argname is `function-or-list'.
+  "Autoload an Emacs Lisp file relative to Emacs Lisp code that is in the 
process
+of being loaded or eval'd.
 
 
 Define FUNCTION to autoload from FILE.  FUNCTION is a symbol.
@@ -182,7 +183,7 @@ FILE is a string to pass to `load'.
 
 DOCSTRING is documentation for the function.
 
-INTERACATIVE if non-nil says function can be called
+INTERACTIVE if non-nil says function can be called
 interactively.
 
 TYPE indicates the type of the object: nil or omitted says
@@ -197,10 +198,14 @@ defined (as given by `symbol-file' is used if other 
methods of
 finding __FILE__ don't work."
 
   (if (listp function-or-list)
-      (mapcar (lambda(function)
-                (autoload function-or-list
-                  (relative-expand-file-name file symbol)
-                  docstring interactive type))
+      ;; FIXME: This looks broken:
+      ;; - Shouldn't it iterate on `function-or-list' instead of `file'?
+      ;; - Shouldn't the `autoload' take `function' rather than
+      ;;   `function-or-list' as argument?
+      (mapc (lambda(_function)
+              (autoload function-or-list
+                (relative-expand-file-name file symbol)
+                docstring interactive type))
               file)
     (autoload function-or-list (relative-expand-file-name file symbol)
       docstring interactive type))
@@ -283,11 +288,7 @@ buffer-setting or buffer changing operations."
 (defmacro require-relative-list (list &optional opt-prefix)
   "Run `require-relative' on each name in LIST which should be a list of
 strings, each string being the relative name of file you want to run."
-  `(progn
-     (eval-when-compile
-       (require 'cl
-                (dolist (rel-file ,list)
-                  (require-relative rel-file (__FILE__) ,opt-prefix))))
+  `(eval-and-compile
      (dolist (rel-file ,list)
        (require-relative rel-file (__FILE__) ,opt-prefix))))
 
diff --git a/packages/math-symbol-lists/math-symbol-lists.el 
b/packages/math-symbol-lists/math-symbol-lists.el
index 4502c9c..d8fe041 100644
--- a/packages/math-symbol-lists/math-symbol-lists.el
+++ b/packages/math-symbol-lists/math-symbol-lists.el
@@ -1,10 +1,11 @@
-;;; math-symbol-lists.el --- Lists of Unicode math symbols and latex commands
+;;; math-symbol-lists.el --- Lists of Unicode math symbols and latex commands 
-*- lexical-binding:t -*-
 ;;
-;; Copyright (C) 2014, 2015 Free Software Foundation, Inc.
+;; Copyright (C) 2014-2019 Free Software Foundation, Inc.
 ;; Author: Vitalie Spinu <address@hidden>
 ;; URL: https://github.com/vspinu/math-symbol-lists
 ;; Keywords: Unicode, symbols, mathematics
-;; Version: 1.1
+;; Package-Type: simple
+;; Version: 1.2.1
 ;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
@@ -21,9 +22,7 @@
 ;; General Public License for more details.
 ;;
 ;; You should have received a copy of the GNU General Public License
-;; along with this program; see the file COPYING.  If not, write to
-;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth
-;; Floor, Boston, MA 02110-1301, USA.
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
 ;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
@@ -34,2973 +33,29 @@
 ;;
 ;; Defined (a)lists are:
 ;;
-;;          symbols-math-basic
-;;          symbols-math-extended
-;;          symbols-latex-commands
+;;  `math-symbol-list-basic`
+;;  `math-symbol-list-extended`
+;;  `math-symbol-list-packages`
+;;  `math-symbol-list-latex-commands`
+;;  `math-symbol-list-subscripts`
+;;  `math-symbol-list-superscripts`
+;;
+;; Sources:
+;;
+;;  [1] http://milde.users.sourceforge.net/LUCR/Math/
+;;  [2] https://github.com/wspr/unicode-math/blob/master/unicode-math-table.tex
+;;  [3] http://milde.users.sourceforge.net/LUCR/Math/data/unimathsymbols.txt
+;;  [4] M-x describe-input-method TeX
+;;  [5] `LaTeX-math-default' in AucTeX package
+;;  [6] LaTeX 2 unicode: https://www.cl.cam.ac.uk/%7Emgk25/ucs/examples/TeX.txt
+;;  [7] W3C math WG: https://www.w3.org/2003/entities/2007xml/unicode.xml
 ;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;
 ;;; Code:
 
-(defconst math-symbol-list-basic
-  '(("Greek Lowercase" "\\alpha"       #X3B1)
-    ("Greek Lowercase" "\\beta"        #X3B2)
-    ("Greek Lowercase" "\\gamma"       #X3B3)
-    ("Greek Lowercase" "\\delta"       #X3B4)
-    ("Greek Lowercase" "\\epsilon"     #X3F5)
-    ("Greek Lowercase" "\\zeta"        #X3B6)
-    ("Greek Lowercase" "\\eta" #X3B7)
-    ("Greek Lowercase" "\\theta"       #X3B8)
-    ("Greek Lowercase" "\\iota"        #X3B9)
-    ("Greek Lowercase" "\\kappa"       #X3BA)
-    ("Greek Lowercase" "\\lambda"      #X3BB)
-    ("Greek Lowercase" "\\mu"  #X3BC)
-    ("Greek Lowercase" "\\nu"  #X3BD)
-    ("Greek Lowercase" "\\xi"  #X3BE)
-    ("Greek Lowercase" "\\pi"  #X3C0)
-    ("Greek Lowercase" "\\rho" #X3C1)
-    ("Greek Lowercase" "\\sigma"       #X3C3)
-    ("Greek Lowercase" "\\tau" #X3C4)
-    ("Greek Lowercase" "\\upsilon"     #X3C5)
-    ("Greek Lowercase" "\\phi" #X3D5)
-    ("Greek Lowercase" "\\chi" #X3C7)
-    ("Greek Lowercase" "\\psi" #X3C8)
-    ("Greek Lowercase" "\\omega"       #X3C9)
-    ("Greek Lowercase" "\\varepsilon"  #X3B5)
-    ("Greek Lowercase" "\\vartheta"    #X3D1)
-    ("Greek Lowercase" "\\varpi"       #X3D6)
-    ("Greek Lowercase" "\\varrho"      #X3F1)
-    ("Greek Lowercase" "\\varsigma"    #X3C2)
-    ("Greek Lowercase" "\\varphi"      #X3C6)
-    ("Greek Uppercase" "\\Gamma"       #X393)
-    ("Greek Uppercase" "\\Delta"       #X394)
-    ("Greek Uppercase" "\\Theta"       #X398)
-    ("Greek Uppercase" "\\Lambda"      #X39B)
-    ("Greek Uppercase" "\\Xi"  #X39E)
-    ("Greek Uppercase" "\\Pi"  #X3A0)
-    ("Greek Uppercase" "\\Sigma"       #X3A3)
-    ("Greek Uppercase" "\\Upsilon"     #X3D2)
-    ("Greek Uppercase" "\\Phi" #X3A6)
-    ("Greek Uppercase" "\\Psi" #X3A8)
-    ("Greek Uppercase" "\\Omega"       #X3A9)
-    ("Binary Op"       "\\pm"  #XB1)
-    ("Binary Op"       "\\mp"  #X2213)
-    ("Binary Op"       "\\times"       #XD7)
-    ("Binary Op"       "\\div" #XF7)
-    ("Binary Op"       "\\ast" #X2217)
-    ("Binary Op"       "\\star"        #X22C6)
-    ("Binary Op"       "\\circ"        #X2218)
-    ("Binary Op"       "\\bullet"      #X2219)
-    ("Binary Op"       "\\cdot"        #X22C5)
-    ("Binary Op"       "\\cap" #X2229)
-    ("Binary Op"       "\\cup" #X222A)
-    ("Binary Op"       "\\uplus"       #X228E)
-    ("Binary Op"       "\\sqcap"       #X2293)
-    ("Binary Op"       "\\vee" #X2228)
-    ("Binary Op"       "\\wedge"       #X2227)
-    ("Binary Op"       "\\setminus"    #X2216)
-    ("Binary Op"       "\\wr"  #X2240)
-    ("Binary Op"       "\\diamond"     #X22C4)
-    ("Binary Op"       "\\bigtriangleup"       #X25B3)
-    ("Binary Op"       "\\bigtriangledown"     #X25BD)
-    ("Binary Op"       "\\triangleleft"        #X25C1)
-    ("Binary Op"       "\\triangleright"       #X25B7)
-    ("Binary Op"       "\\lhd")
-    ("Binary Op"       "\\rhd")
-    ("Binary Op"       "\\unlhd")
-    ("Binary Op"       "\\unrhd")
-    ("Binary Op"       "\\oplus"       #X2295)
-    ("Binary Op"       "\\ominus"      #X2296)
-    ("Binary Op"       "\\otimes"      #X2297)
-    ("Binary Op"       "\\oslash"      #X2205)
-    ("Binary Op"       "\\odot"        #X2299)
-    ("Binary Op"       "\\bigcirc"     #X25CB)
-    ("Binary Op"       "\\dagger"      #X2020)
-    ("Binary Op"       "\\ddagger"     #X2021)
-    ("Binary Op"       "\\amalg"       #X2A3F)
-    ("Relational"      "\\leq" #X2264)
-    ("Relational"      "\\geq" #X2265)
-    ("Relational"      "\\qed" #X220E)
-    ("Relational"      "\\equiv"       #X2261)
-    ("Relational"      "\\models"      #X22A7)
-    ("Relational"      "\\prec"        #X227A)
-    ("Relational"      "\\succ"        #X227B)
-    ("Relational"      "\\sim" #X223C)
-    ("Relational"      "\\perp"        #X27C2)
-    ("Relational"      "\\preceq"      #X2AAF)
-    ("Relational"      "\\succeq"      #X2AB0)
-    ("Relational"      "\\simeq"       #X2243)
-    ("Relational"      "\\mid" #X2223)
-    ("Relational"      "\\ll"  #X226A)
-    ("Relational"      "\\gg"  #X226B)
-    ("Relational"      "\\asymp"       #X224D)
-    ("Relational"      "\\parallel"    #X2225)
-    ("Relational"      "\\subset"      #X2282)
-    ("Relational"      "\\supset"      #X2283)
-    ("Relational"      "\\approx"      #X2248)
-    ("Relational"      "\\bowtie"      #X22C8)
-    ("Relational"      "\\subseteq"    #X2286)
-    ("Relational"      "\\supseteq"    #X2287)
-    ("Relational"      "\\cong"        #X2245)
-    ("Relational"      "\\Join"        #X2A1D)
-    ("Relational"      "\\sqsubset"    #X228F)
-    ("Relational"      "\\sqsupset"    #X2290)
-    ("Relational"      "\\neq" #X2260)
-    ("Relational"      "\\smile"       #X2323)
-    ("Relational"      "\\sqsubseteq"  #X2291)
-    ("Relational"      "\\sqsupseteq"  #X2292)
-    ("Relational"      "\\doteq"       #X2250)
-    ("Relational"      "\\frown"       #X2322)
-    ("Relational"      "\\in"  #X2208)
-    ("Relational"      "\\ni"  #X220B)
-    ("Relational"      "\\propto"      #X221D)
-    ("Relational"      "\\vdash"       #X22A2)
-    ("Relational"      "\\dashv"       #X22A3)
-    ("Arrows"  "\\leftarrow"   #X2190)
-    ("Arrows"  "\\Leftarrow"   #X21D0)
-    ("Arrows"  "\\rightarrow"  #X2192)
-    ("Arrows"  "\\Rightarrow"  #X21D2)
-    ("Arrows"  "\\leftrightarrow"      #X2194)
-    ("Arrows"  "\\Leftrightarrow"      #X21D4)
-    ("Arrows"  "\\mapsto"      #X21A6)
-    ("Arrows"  "\\hookleftarrow"       #X21A9)
-    ("Arrows"  "\\leftharpoonup"       #X21BC)
-    ("Arrows"  "\\leftharpoondown"     #X21BD)
-    ("Arrows"  "\\longleftarrow"       #X27F5)
-    ("Arrows"  "\\Longleftarrow"       #X27F8)
-    ("Arrows"  "\\longrightarrow"      #X27F6)
-    ("Arrows"  "\\Longrightarrow"      #X27F9)
-    ("Arrows"  "\\longleftrightarrow"  #X27F7)
-    ("Arrows"  "\\Longleftrightarrow"  #X27FA)
-    ("Arrows"  "\\longmapsto"  #X27FC)
-    ("Arrows"  "\\hookrightarrow"      #X21AA)
-    ("Arrows"  "\\rightharpoonup"      #X21C0)
-    ("Arrows"  "\\rightharpoondown"    #X21C1)
-    ("Arrows"  "\\uparrow"     #X2191)
-    ("Arrows"  "\\Uparrow"     #X21D1)
-    ("Arrows"  "\\downarrow"   #X2193)
-    ("Arrows"  "\\Downarrow"   #X21D3)
-    ("Arrows"  "\\updownarrow" #X2195)
-    ("Arrows"  "\\Updownarrow" #X21D5)
-    ("Arrows"  "\\nearrow"     #X2197)
-    ("Arrows"  "\\searrow"     #X2198)
-    ("Arrows"  "\\swarrow"     #X2199)
-    ("Arrows"  "\\nwarrow"     #X2196)
-    ("Punctuation"     "\\ldots"       #X2026)
-    ("Punctuation"     "\\cdots"       #X22EF)
-    ("Punctuation"     "\\vdots"       #X22EE)
-    ("Punctuation"     "\\ddots"       #X22F1)
-    ("Punctuation"     "\\colon"       #X3A)
-    ("Misc Symbol"     "\\nabla"       #X2207)
-    ("Misc Symbol"     "\\aleph"       #X2135)
-    ("Misc Symbol"     "\\prime"       #X2032)
-    ("Misc Symbol"     "\\forall"      #X2200)
-    ("Misc Symbol"     "\\infty"       #X221E)
-    ("Misc Symbol"     "\\hbar"        #X210F)
-    ("Misc Symbol"     "\\emptyset"    #X2205)
-    ("Misc Symbol"     "\\exists"      #X2203)
-    ("Misc Symbol"     "\\surd"        #X221A)
-    ("Misc Symbol"     "\\Box")
-    ("Misc Symbol"     "\\triangle"    #X25B3)
-    ("Misc Symbol"     "\\Diamond")
-    ("Misc Symbol"     "\\imath"       #X131)
-    ("Misc Symbol"     "\\jmath"       #X1D6A5)
-    ("Misc Symbol"     "\\ell" #X2113)
-    ("Misc Symbol"     "\\neg" #XAC)
-    ("Misc Symbol"     "\\not" #X338)
-    ("Misc Symbol"     "\\top" #X22A4)
-    ("Misc Symbol"     "\\flat"        #X266D)
-    ("Misc Symbol"     "\\natural"     #X266E)
-    ("Misc Symbol"     "\\sharp"       #X266F)
-    ("Misc Symbol"     "\\wp"  #X2118)
-    ("Misc Symbol"     "\\bot" #X22A5)
-    ("Misc Symbol"     "\\clubsuit"    #X2663)
-    ("Misc Symbol"     "\\diamondsuit" #X2662)
-    ("Misc Symbol"     "\\heartsuit"   #X2661)
-    ("Misc Symbol"     "\\spadesuit"   #X2660)
-    ("Misc Symbol"     "\\mho" #X2127)
-    ("Misc Symbol"     "\\Re"  #X211C)
-    ("Misc Symbol"     "\\Im"  #X2111)
-    ("Misc Symbol"     "\\angle"       #X2220)
-    ("Misc Symbol"     "\\partial"     #X2202)
-    ("Var Symbol"      "\\sum" #X2211)
-    ("Var Symbol"      "\\prod"        #X220F)
-    ("Var Symbol"      "\\coprod"      #X2210)
-    ("Var Symbol"      "\\int" #X222B)
-    ("Var Symbol"      "\\oint"        #X222E)
-    ("Var Symbol"      "\\bigcap"      #X22C2)
-    ("Var Symbol"      "\\bigcup"      #X22C3)
-    ("Var Symbol"      "\\bigsqcup"    #X2A06)
-    ("Var Symbol"      "\\bigvee"      #X22C1)
-    ("Var Symbol"      "\\bigwedge"    #X22C0)
-    ("Var Symbol"      "\\bigodot"     #X2A00)
-    ("Var Symbol"      "\\bigotimes"   #X2A02)
-    ("Var Symbol"      "\\bigoplus"    #X2A01)
-    ("Var Symbol"      "\\biguplus"    #X2A04)
-    ("Log-like"        "\\arccos")
-    ("Log-like"        "\\arcsin")
-    ("Log-like"        "\\arctan")
-    ("Log-like"        "\\arg")
-    ("Log-like"        "\\cos")
-    ("Log-like"        "\\cosh")
-    ("Log-like"        "\\cot")
-    ("Log-like"        "\\coth")
-    ("Log-like"        "\\csc")
-    ("Log-like"        "\\deg")
-    ("Log-like"        "\\det")
-    ("Log-like"        "\\dim")
-    ("Log-like"        "\\exp")
-    ("Log-like"        "\\gcd")
-    ("Log-like"        "\\hom")
-    ("Log-like"        "\\inf")
-    ("Log-like"        "\\ker")
-    ("Log-like"        "\\lg")
-    ("Log-like"        "\\lim")
-    ("Log-like"        "\\liminf")
-    ("Log-like"        "\\limsup")
-    ("Log-like"        "\\ln")
-    ("Log-like"        "\\log")
-    ("Log-like"        "\\max")
-    ("Log-like"        "\\min")
-    ("Log-like"        "\\Pr")
-    ("Log-like"        "\\sec")
-    ("Log-like"        "\\sin")
-    ("Log-like"        "\\sinh")
-    ("Log-like"        "\\sup")
-    ("Log-like"        "\\tan")
-    ("Log-like"        "\\tanh")
-    ("Delimiters"      "\\{")
-    ("Delimiters"      "\\}")
-    ("Delimiters"      "\\lfloor"      #X230A)
-    ("Delimiters"      "\\rfloor"      #X230B)
-    ("Delimiters"      "\\lceil"       #X2308)
-    ("Delimiters"      "\\rceil"       #X2309)
-    ("Delimiters"      "\\langle"      #X27E8)
-    ("Delimiters"      "\\rangle"      #X27E9)
-    ("Delimiters"      "\\rmoustache"  #X23B1)
-    ("Delimiters"      "\\lmoustache"  #X23B0)
-    ("Delimiters"      "\\rgroup")
-    ("Delimiters"      "\\lgroup")
-    ("Delimiters"      "\\backslash"   #X5C)
-    ("Delimiters"      "\\|")
-    ("Delimiters"      "\\arrowvert")
-    ("Delimiters"      "\\Arrowvert")
-    ("Delimiters"      "\\bracevert")
-    ("Constructs"      "\\widetilde"   #X303)
-    ("Constructs"      "\\widehat"     #X302)
-    ("Constructs"      "\\overleftarrow"       #X20D6)
-    ("Constructs"      "\\overrightarrow")
-    ("Constructs"      "\\overline")
-    ("Constructs"      "\\underline")
-    ("Constructs"      "\\overbrace"   #XFE37)
-    ("Constructs"      "\\underbrace"  #XFE38)
-    ("Constructs"      "\\sqrt"        #X221A)
-    ("Constructs"      "\\frac")
-    ("Accents" "\\hat" #X302)
-    ("Accents" "\\acute"       #X301)
-    ("Accents" "\\bar" #X304)
-    ("Accents" "\\dot" #X307)
-    ("Accents" "\\breve"       #X306)
-    ("Accents" "\\check"       #X30C)
-    ("Accents" "\\grave"       #X300)
-    ("Accents" "\\vec" #X20D7)
-    ("Accents" "\\ddot"        #X308)
-    ("Accents" "\\tilde"       #X303)
-    ("AMS/Hebrew"      "\\digamma"     #X3DD)
-    ("AMS/Hebrew"      "\\varkappa"    #X3F0)
-    ("AMS/Hebrew"      "\\beth"        #X2136)
-    ("AMS/Hebrew"      "\\daleth"      #X2138)
-    ("AMS/Hebrew"      "\\gimel"       #X2137)
-    ("AMS/Greek Uppercase"     "\\varGamma")
-    ("AMS/Greek Uppercase"     "\\varDelta")
-    ("AMS/Greek Uppercase"     "\\varTheta")
-    ("AMS/Greek Uppercase"     "\\varLambda")
-    ("AMS/Greek Uppercase"     "\\varXi")
-    ("AMS/Greek Uppercase"     "\\varPi")
-    ("AMS/Greek Uppercase"     "\\varSigma")
-    ("AMS/Greek Uppercase"     "\\varUpsilon")
-    ("AMS/Greek Uppercase"     "\\varPhi")
-    ("AMS/Greek Uppercase"     "\\varPsi")
-    ("AMS/Greek Uppercase"     "\\varOmega")
-    ("AMS/Arrows"      "\\dashrightarrow")
-    ("AMS/Arrows"      "\\dashleftarrow")
-    ("AMS/Arrows"      "\\leftleftarrows"      #X21C7)
-    ("AMS/Arrows"      "\\leftrightarrows"     #X21C6)
-    ("AMS/Arrows"      "\\Lleftarrow"  #X21DA)
-    ("AMS/Arrows"      "\\twoheadleftarrow"    #X219E)
-    ("AMS/Arrows"      "\\leftarrowtail"       #X21A2)
-    ("AMS/Arrows"      "\\looparrowleft"       #X21AB)
-    ("AMS/Arrows"      "\\leftrightharpoons"   #X21CB)
-    ("AMS/Arrows"      "\\curvearrowleft"      #X21B6)
-    ("AMS/Arrows"      "\\circlearrowleft")
-    ("AMS/Arrows"      "\\Lsh" #X21B0)
-    ("AMS/Arrows"      "\\upuparrows"  #X21C8)
-    ("AMS/Arrows"      "\\upharpoonleft"       #X21BF)
-    ("AMS/Arrows"      "\\downharpoonleft"     #X21C3)
-    ("AMS/Arrows"      "\\multimap"    #X22B8)
-    ("AMS/Arrows"      "\\leftrightsquigarrow" #X21AD)
-    ("AMS/Arrows"      "\\looparrowright"      #X21AC)
-    ("AMS/Arrows"      "\\rightleftharpoons"   #X21CC)
-    ("AMS/Arrows"      "\\curvearrowright"     #X21B7)
-    ("AMS/Arrows"      "\\circlearrowright")
-    ("AMS/Arrows"      "\\Rsh" #X21B1)
-    ("AMS/Arrows"      "\\downdownarrows"      #X21CA)
-    ("AMS/Arrows"      "\\upharpoonright"      #X21BE)
-    ("AMS/Arrows"      "\\downharpoonright"    #X21C2)
-    ("AMS/Arrows"      "\\rightsquigarrow"     #X219D)
-    ("AMS/Neg Arrows"  "\\nleftarrow"  #X219A)
-    ("AMS/Neg Arrows"  "\\nrightarrow" #X219B)
-    ("AMS/Neg Arrows"  "\\nLeftarrow"  #X21CD)
-    ("AMS/Neg Arrows"  "\\nRightarrow" #X21CF)
-    ("AMS/Neg Arrows"  "\\nleftrightarrow"     #X21AE)
-    ("AMS/Neg Arrows"  "\\nLeftrightarrow"     #X21CE)
-    ("AMS/Relational I"        "\\leqq"        #X2266)
-    ("AMS/Relational I"        "\\leqslant"    #X2A7D)
-    ("AMS/Relational I"        "\\eqslantless" #X2A95)
-    ("AMS/Relational I"        "\\lesssim"     #X2272)
-    ("AMS/Relational I"        "\\lessapprox"  #X2A85)
-    ("AMS/Relational I"        "\\approxeq"    #X224A)
-    ("AMS/Relational I"        "\\lessdot"     #X22D6)
-    ("AMS/Relational I"        "\\lll" #X22D8)
-    ("AMS/Relational I"        "\\lessgtr"     #X2276)
-    ("AMS/Relational I"        "\\lesseqgtr"   #X22DA)
-    ("AMS/Relational I"        "\\lesseqqgtr"  #X2A8B)
-    ("AMS/Relational I"        "\\doteqdot")
-    ("AMS/Relational I"        "\\risingdotseq"        #X2253)
-    ("AMS/Relational I"        "\\fallingdotseq"       #X2252)
-    ("AMS/Relational I"        "\\backsim"     #X223D)
-    ("AMS/Relational I"        "\\backsimeq"   #X22CD)
-    ("AMS/Relational I"        "\\subseteqq"   #X2AC5)
-    ("AMS/Relational I"        "\\Subset"      #X22D0)
-    ("AMS/Relational I"        "\\sqsubset"    #X228F)
-    ("AMS/Relational I"        "\\preccurlyeq" #X227C)
-    ("AMS/Relational I"        "\\curlyeqprec" #X22DE)
-    ("AMS/Relational I"        "\\precsim"     #X227E)
-    ("AMS/Relational I"        "\\precapprox"  #X2AB7)
-    ("AMS/Relational I"        "\\vartriangleleft"     #X22B2)
-    ("AMS/Relational I"        "\\trianglelefteq"      #X22B4)
-    ("AMS/Relational I"        "\\vDash"       #X22A8)
-    ("AMS/Relational I"        "\\Vvdash"      #X22AA)
-    ("AMS/Relational I"        "\\smallsmile"  #X2323)
-    ("AMS/Relational I"        "\\smallfrown"  #X2322)
-    ("AMS/Relational I"        "\\bumpeq"      #X224F)
-    ("AMS/Relational I"        "\\Bumpeq"      #X224E)
-    ("AMS/Relational II"       "\\geqq"        #X2267)
-    ("AMS/Relational II"       "\\geqslant"    #X2A7E)
-    ("AMS/Relational II"       "\\eqslantgtr"  #X2A96)
-    ("AMS/Relational II"       "\\gtrsim"      #X2273)
-    ("AMS/Relational II"       "\\gtrapprox"   #X2A86)
-    ("AMS/Relational II"       "\\gtrdot"      #X22D7)
-    ("AMS/Relational II"       "\\ggg" #X22D9)
-    ("AMS/Relational II"       "\\gtrless"     #X2277)
-    ("AMS/Relational II"       "\\gtreqless"   #X22DB)
-    ("AMS/Relational II"       "\\gtreqqless"  #X2A8C)
-    ("AMS/Relational II"       "\\eqcirc"      #X2256)
-    ("AMS/Relational II"       "\\circeq"      #X2257)
-    ("AMS/Relational II"       "\\triangleq"   #X225C)
-    ("AMS/Relational II"       "\\thicksim"    #X223C)
-    ("AMS/Relational II"       "\\thickapprox" #X2248)
-    ("AMS/Relational II"       "\\supseteqq"   #X2AC6)
-    ("AMS/Relational II"       "\\Supset"      #X22D1)
-    ("AMS/Relational II"       "\\sqsupset"    #X2290)
-    ("AMS/Relational II"       "\\succcurlyeq" #X227D)
-    ("AMS/Relational II"       "\\curlyeqsucc" #X22DF)
-    ("AMS/Relational II"       "\\succsim"     #X227F)
-    ("AMS/Relational II"       "\\succapprox"  #X2AB8)
-    ("AMS/Relational II"       "\\vartriangleright"    #X22B3)
-    ("AMS/Relational II"       "\\trianglerighteq"     #X22B5)
-    ("AMS/Relational II"       "\\Vdash"       #X22A9)
-    ("AMS/Relational II"       "\\shortmid"    #X2223)
-    ("AMS/Relational II"       "\\shortparallel"       #X2225)
-    ("AMS/Relational II"       "\\between"     #X226C)
-    ("AMS/Relational II"       "\\pitchfork"   #X22D4)
-    ("AMS/Relational II"       "\\varpropto"   #X221D)
-    ("AMS/Relational II"       "\\blacktriangleleft"   #X25C0)
-    ("AMS/Relational II"       "\\therefore"   #X2234)
-    ("AMS/Relational II"       "\\backepsilon" #X3F6)
-    ("AMS/Relational II"       "\\blacktriangleright"  #X25B6)
-    ("AMS/Relational II"       "\\because"     #X2235)
-    ("AMS/Neg Rel I"   "\\nless"       #X226E)
-    ("AMS/Neg Rel I"   "\\nleq"        #X2270)
-    ("AMS/Neg Rel I"   "\\nleqslant")
-    ("AMS/Neg Rel I"   "\\nleqq")
-    ("AMS/Neg Rel I"   "\\lneq"        #X2A87)
-    ("AMS/Neg Rel I"   "\\lneqq"       #X2268)
-    ("AMS/Neg Rel I"   "\\lvertneqq")
-    ("AMS/Neg Rel I"   "\\lnsim"       #X22E6)
-    ("AMS/Neg Rel I"   "\\lnapprox"    #X2A89)
-    ("AMS/Neg Rel I"   "\\nprec"       #X2280)
-    ("AMS/Neg Rel I"   "\\npreceq")
-    ("AMS/Neg Rel I"   "\\precnsim"    #X22E8)
-    ("AMS/Neg Rel I"   "\\precnapprox" #X2AB9)
-    ("AMS/Neg Rel I"   "\\nsim"        #X2241)
-    ("AMS/Neg Rel I"   "\\nshortmid"   #X2224)
-    ("AMS/Neg Rel I"   "\\nmid"        #X2224)
-    ("AMS/Neg Rel I"   "\\nvdash"      #X22AC)
-    ("AMS/Neg Rel I"   "\\nvDash"      #X22AD)
-    ("AMS/Neg Rel I"   "\\ntriangleleft"       #X22EA)
-    ("AMS/Neg Rel I"   "\\ntrianglelefteq"     #X22EC)
-    ("AMS/Neg Rel I"   "\\nsubseteq"   #X2288)
-    ("AMS/Neg Rel I"   "\\subsetneq"   #X228A)
-    ("AMS/Neg Rel I"   "\\varsubsetneq")
-    ("AMS/Neg Rel I"   "\\subsetneqq"  #X2ACB)
-    ("AMS/Neg Rel I"   "\\varsubsetneqq")
-    ("AMS/Neg Rel II"  "\\ngtr"        #X226F)
-    ("AMS/Neg Rel II"  "\\ngeq"        #X2271)
-    ("AMS/Neg Rel II"  "\\ngeqslant")
-    ("AMS/Neg Rel II"  "\\ngeqq")
-    ("AMS/Neg Rel II"  "\\gneq"        #X2A88)
-    ("AMS/Neg Rel II"  "\\gneqq"       #X2269)
-    ("AMS/Neg Rel II"  "\\gvertneqq")
-    ("AMS/Neg Rel II"  "\\gnsim"       #X22E7)
-    ("AMS/Neg Rel II"  "\\gnapprox"    #X2A8A)
-    ("AMS/Neg Rel II"  "\\nsucc"       #X2281)
-    ("AMS/Neg Rel II"  "\\nsucceq")
-    ("AMS/Neg Rel II"  "\\succnsim"    #X22E9)
-    ("AMS/Neg Rel II"  "\\succnapprox" #X2ABA)
-    ("AMS/Neg Rel II"  "\\ncong"       #X2247)
-    ("AMS/Neg Rel II"  "\\nshortparallel"      #X2226)
-    ("AMS/Neg Rel II"  "\\nparallel"   #X2226)
-    ("AMS/Neg Rel II"  "\\nvDash"      #X22AD)
-    ("AMS/Neg Rel II"  "\\nVDash"      #X22AF)
-    ("AMS/Neg Rel II"  "\\ntriangleright"      #X22EB)
-    ("AMS/Neg Rel II"  "\\ntrianglerighteq"    #X22ED)
-    ("AMS/Neg Rel II"  "\\nsupseteq"   #X2289)
-    ("AMS/Neg Rel II"  "\\nsupseteqq")
-    ("AMS/Neg Rel II"  "\\supsetneq"   #X228B)
-    ("AMS/Neg Rel II"  "\\varsupsetneq")
-    ("AMS/Neg Rel II"  "\\supsetneqq"  #X2ACC)
-    ("AMS/Neg Rel II"  "\\varsupsetneqq")
-    ("AMS/Binary Op"   "\\dotplus"     #X2214)
-    ("AMS/Binary Op"   "\\smallsetminus"       #X2216)
-    ("AMS/Binary Op"   "\\Cap" #X22D2)
-    ("AMS/Binary Op"   "\\Cup" #X22D3)
-    ("AMS/Binary Op"   "\\barwedge"    #X22BC)
-    ("AMS/Binary Op"   "\\veebar"      #X22BB)
-    ("AMS/Binary Op"   "\\doublebarwedge"      #X2306)
-    ("AMS/Binary Op"   "\\boxminus"    #X229F)
-    ("AMS/Binary Op"   "\\boxtimes"    #X22A0)
-    ("AMS/Binary Op"   "\\boxdot"      #X22A1)
-    ("AMS/Binary Op"   "\\boxplus"     #X229E)
-    ("AMS/Binary Op"   "\\divideontimes"       #X22C7)
-    ("AMS/Binary Op"   "\\ltimes"      #X22C9)
-    ("AMS/Binary Op"   "\\rtimes"      #X22CA)
-    ("AMS/Binary Op"   "\\leftthreetimes"      #X22CB)
-    ("AMS/Binary Op"   "\\rightthreetimes"     #X22CC)
-    ("AMS/Binary Op"   "\\curlywedge"  #X22CF)
-    ("AMS/Binary Op"   "\\curlyvee"    #X22CE)
-    ("AMS/Binary Op"   "\\circleddash" #X229D)
-    ("AMS/Binary Op"   "\\circledast"  #X229B)
-    ("AMS/Binary Op"   "\\circledcirc" #X229A)
-    ("AMS/Binary Op"   "\\centerdot")
-    ("AMS/Binary Op"   "\\intercal"    #X22BA)
-    ("AMS/Misc"        "\\hbar"        #X210F)
-    ("AMS/Misc"        "\\hslash"      #X210F)
-    ("AMS/Misc"        "\\vartriangle" #X25B5)
-    ("AMS/Misc"        "\\triangledown"        #X25BF)
-    ("AMS/Misc"        "\\square"      #X25A1)
-    ("AMS/Misc"        "\\lozenge"     #X25CA)
-    ("AMS/Misc"        "\\circledS"    #X24C8)
-    ("AMS/Misc"        "\\angle"       #X2220)
-    ("AMS/Misc"        "\\measuredangle"       #X2221)
-    ("AMS/Misc"        "\\nexists"     #X2204)
-    ("AMS/Misc"        "\\mho" #X2127)
-    ("AMS/Misc"        "\\Finv"        #X2132)
-    ("AMS/Misc"        "\\Game"        #X2141)
-    ("AMS/Misc"        "\\Bbbk"        #X1D55C)
-    ("AMS/Misc"        "\\backprime"   #X2035)
-    ("AMS/Misc"        "\\varnothing"  #X2205)
-    ("AMS/Misc"        "\\blacktriangle"       #X25B4)
-    ("AMS/Misc"        "\\blacktriangledown"   #X25BE)
-    ("AMS/Misc"        "\\blacksquare" #X25A0)
-    ("AMS/Misc"        "\\blacklozenge"        #X29EB)
-    ("AMS/Misc"        "\\bigstar"     #X2605)
-    ("AMS/Misc"        "\\sphericalangle"      #X2222)
-    ("AMS/Misc"        "\\complement"  #X2201)
-    ("AMS/Misc"        "\\eth" #XF0)
-    ("AMS/Misc"        "\\diagup"      #X2571)
-    ("AMS/Misc"        "\\diagdown"    #X2572)
-    ("AMS/Accents"     "\\dddot"       #X20DB)
-    ("AMS/Accents"     "\\ddddot"      #X20DC)
-    ("AMS/Delimiters"  "\\bigl")
-    ("AMS/Delimiters"  "\\bigr")
-    ("AMS/Delimiters"  "\\Bigl")
-    ("AMS/Delimiters"  "\\Bigr")
-    ("AMS/Delimiters"  "\\biggl")
-    ("AMS/Delimiters"  "\\biggr")
-    ("AMS/Delimiters"  "\\Biggl")
-    ("AMS/Delimiters"  "\\Biggr")
-    ("AMS/Delimiters"  "\\lvert")
-    ("AMS/Delimiters"  "\\rvert")
-    ("AMS/Delimiters"  "\\lVert")
-    ("AMS/Delimiters"  "\\rVert")
-    ("AMS/Delimiters"  "\\ulcorner"    #X231C)
-    ("AMS/Delimiters"  "\\urcorner"    #X231D)
-    ("AMS/Delimiters"  "\\llcorner"    #X231E)
-    ("AMS/Delimiters"  "\\lrcorner"    #X231F)
-    ("AMS/Special"     "\\nobreakdash")
-    ("AMS/Special"     "\\leftroot")
-    ("AMS/Special"     "\\uproot")
-    ("AMS/Special"     "\\accentedsymbol")
-    ("AMS/Special"     "\\xleftarrow")
-    ("AMS/Special"     "\\xrightarrow")
-    ("AMS/Special"     "\\overset")
-    ("AMS/Special"     "\\underset")
-    ("AMS/Special"     "\\dfrac")
-    ("AMS/Special"     "\\genfrac")
-    ("AMS/Special"     "\\tfrac")
-    ("AMS/Special"     "\\binom")
-    ("AMS/Special"     "\\dbinom")
-    ("AMS/Special"     "\\tbinom")
-    ("AMS/Special"     "\\smash")
-    ("AMS/Special"     "\\eucal")
-    ("AMS/Special"     "\\boldsymbol")
-    ("AMS/Special"     "\\text")
-    ("AMS/Special"     "\\intertext")
-    ("AMS/Special"     "\\substack")
-    ("AMS/Special"     "\\subarray")
-    ("AMS/Special"     "\\sideset"))
-  "List of basic mathematical symbols.
-Processed from `LaTeX-math-default' in AucTeX/latex.el. This list
-contains a mapping of standard LaTeX math commands to unicode
-characters. See also `math-symbol-list-extended'.")
-
-(defconst math-symbol-list-extended
-  '(("mathaccent" "\\acute" #X00301 "́")
-    ("mathaccent" "\\annuity" #X020E7 "⃧")
-    ("mathaccent" "\\asteraccent" #X020F0 "⃰")
-    ("mathaccent" "\\bar" #X00304 "̄")
-    ("mathaccent" "\\breve" #X00306 "̆")
-    ("mathaccent" "\\candra" #X00310 "̐")
-    ("mathaccent" "\\check" #X0030C "̌")
-    ("mathaccent" "\\ddddot" #X020DC "⃜")
-    ("mathaccent" "\\dddot" #X020DB "⃛")
-    ("mathaccent" "\\ddot" #X00308 "̈")
-    ("mathaccent" "\\dot" #X00307 "̇")
-    ("mathaccent" "\\droang" #X0031A "̚")
-    ("mathaccent" "\\enclosecircle" #X020DD "⃝")
-    ("mathaccent" "\\enclosediamond" #X020DF "⃟")
-    ("mathaccent" "\\enclosesquare" #X020DE "⃞")
-    ("mathaccent" "\\enclosetriangle" #X020E4 "⃤")
-    ("mathaccent" "\\grave" #X00300 "̀")
-    ("mathaccent" "\\hat" #X00302 "̂")
-    ("mathaccent" "\\leftharpoonaccent" #X020D0 "⃐")
-    ("mathaccent" "\\not" #X00338 "̸")
-    ("mathaccent" "\\ocirc" #X0030A "̊")
-    ("mathaccent" "\\ocommatopright" #X00315 "̕")
-    ("mathaccent" "\\oturnedcomma" #X00312 "̒")
-    ("mathaccent" "\\overbar" #X00305 "̅")
-    ("mathaccent" "\\overleftarrow" #X020D6 "⃖")
-    ("mathaccent" "\\overleftrightarrow" #X020E1 "⃡")
-    ("mathaccent" "\\ovhook" #X00309 "̉")
-    ("mathaccent" "\\rightharpoonaccent" #X020D1 "⃑")
-    ("mathaccent" "\\threeunderdot" #X020E8 "⃨")
-    ("mathaccent" "\\tilde" #X00303 "̃")
-    ("mathaccent" "\\underbar" #X00331 "̱")
-    ("mathaccent" "\\underleftarrow" #X020EE "⃮")
-    ("mathaccent" "\\underleftharpoondown" #X020ED "⃭")
-    ("mathaccent" "\\underrightarrow" #X020EF "⃯")
-    ("mathaccent" "\\underrightharpoondown" #X020EC "⃬")
-    ("mathaccent" "\\vec" #X020D7 "⃗")
-    ("mathaccent" "\\vertoverlay" #X020D2 "⃒")
-    ("mathaccent" "\\widebridgeabove" #X020E9 "⃩")
-    ("mathaccent" "\\wideutilde" #X00330 "̰")
-    ("mathalpha" "\\Angstrom" #X0212B "Å")
-    ("mathalpha" "\\BbbA" #X1D538 "𝔸")
-    ("mathalpha" "\\BbbB" #X1D539 "𝔹")
-    ("mathalpha" "\\BbbC" #X02102 "ℂ")
-    ("mathalpha" "\\BbbD" #X1D53B "𝔻")
-    ("mathalpha" "\\BbbE" #X1D53C "𝔼")
-    ("mathalpha" "\\BbbF" #X1D53D "𝔽")
-    ("mathalpha" "\\BbbG" #X1D53E "𝔾")
-    ("mathalpha" "\\BbbGamma" #X0213E "ℾ")
-    ("mathalpha" "\\BbbH" #X0210D "ℍ")
-    ("mathalpha" "\\BbbI" #X1D540 "𝕀")
-    ("mathalpha" "\\BbbJ" #X1D541 "𝕁")
-    ("mathalpha" "\\BbbK" #X1D542 "𝕂")
-    ("mathalpha" "\\BbbL" #X1D543 "𝕃")
-    ("mathalpha" "\\BbbM" #X1D544 "𝕄")
-    ("mathalpha" "\\BbbN" #X02115 "ℕ")
-    ("mathalpha" "\\BbbO" #X1D546 "𝕆")
-    ("mathalpha" "\\BbbP" #X02119 "ℙ")
-    ("mathalpha" "\\BbbPi" #X0213F "ℿ")
-    ("mathalpha" "\\BbbQ" #X0211A "ℚ")
-    ("mathalpha" "\\BbbR" #X0211D "ℝ")
-    ("mathalpha" "\\BbbS" #X1D54A "𝕊")
-    ("mathalpha" "\\BbbT" #X1D54B "𝕋")
-    ("mathalpha" "\\BbbU" #X1D54C "𝕌")
-    ("mathalpha" "\\BbbV" #X1D54D "𝕍")
-    ("mathalpha" "\\BbbW" #X1D54E "𝕎")
-    ("mathalpha" "\\BbbX" #X1D54F "𝕏")
-    ("mathalpha" "\\BbbY" #X1D550 "𝕐")
-    ("mathalpha" "\\BbbZ" #X02124 "ℤ")
-    ("mathalpha" "\\Bbba" #X1D552 "𝕒")
-    ("mathalpha" "\\Bbbb" #X1D553 "𝕓")
-    ("mathalpha" "\\Bbbc" #X1D554 "𝕔")
-    ("mathalpha" "\\Bbbd" #X1D555 "𝕕")
-    ("mathalpha" "\\Bbbe" #X1D556 "𝕖")
-    ("mathalpha" "\\Bbbf" #X1D557 "𝕗")
-    ("mathalpha" "\\Bbbg" #X1D558 "𝕘")
-    ("mathalpha" "\\Bbbgamma" #X0213D "ℽ")
-    ("mathalpha" "\\Bbbh" #X1D559 "𝕙")
-    ("mathalpha" "\\Bbbi" #X1D55A "𝕚")
-    ("mathalpha" "\\Bbbj" #X1D55B "𝕛")
-    ("mathalpha" "\\Bbbk" #X1D55C "𝕜")
-    ("mathalpha" "\\Bbbl" #X1D55D "𝕝")
-    ("mathalpha" "\\Bbbm" #X1D55E "𝕞")
-    ("mathalpha" "\\Bbbn" #X1D55F "𝕟")
-    ("mathalpha" "\\Bbbo" #X1D560 "𝕠")
-    ("mathalpha" "\\Bbbp" #X1D561 "𝕡")
-    ("mathalpha" "\\Bbbq" #X1D562 "𝕢")
-    ("mathalpha" "\\Bbbr" #X1D563 "𝕣")
-    ("mathalpha" "\\Bbbs" #X1D564 "𝕤")
-    ("mathalpha" "\\Bbbt" #X1D565 "𝕥")
-    ("mathalpha" "\\Bbbu" #X1D566 "𝕦")
-    ("mathalpha" "\\Bbbv" #X1D567 "𝕧")
-    ("mathalpha" "\\Bbbw" #X1D568 "𝕨")
-    ("mathalpha" "\\Bbbx" #X1D569 "𝕩")
-    ("mathalpha" "\\Bbby" #X1D56A "𝕪")
-    ("mathalpha" "\\Bbbz" #X1D56B "𝕫")
-    ("mathalpha" "\\Im" #X02111 "ℑ")
-    ("mathalpha" "\\Re" #X0211C "ℜ")
-    ("mathalpha" "\\aleph" #X02135 "ℵ")
-    ("mathalpha" "\\beth" #X02136 "ℶ")
-    ("mathalpha" "\\daleth" #X02138 "ℸ")
-    ("mathalpha" "\\ell" #X02113 "ℓ")
-    ("mathalpha" "\\gimel" #X02137 "ℷ")
-    ("mathalpha" "\\hslash" #X0210F "ℏ")
-    ("mathalpha" "\\imath" #X1D6A4 "𝚤")
-    ("mathalpha" "\\jmath" #X1D6A5 "𝚥")
-    ("mathalpha" "\\matheth" #X000F0 "ð")
-    ("mathalpha" "\\mbfA" #X1D400 "𝐀")
-    ("mathalpha" "\\mbfAlpha" #X1D6A8 "𝚨")
-    ("mathalpha" "\\mbfB" #X1D401 "𝐁")
-    ("mathalpha" "\\mbfBeta" #X1D6A9 "𝚩")
-    ("mathalpha" "\\mbfC" #X1D402 "𝐂")
-    ("mathalpha" "\\mbfChi" #X1D6BE "𝚾")
-    ("mathalpha" "\\mbfD" #X1D403 "𝐃")
-    ("mathalpha" "\\mbfDelta" #X1D6AB "𝚫")
-    ("mathalpha" "\\mbfDigamma" #X1D7CA "𝟊")
-    ("mathalpha" "\\mbfE" #X1D404 "𝐄")
-    ("mathalpha" "\\mbfEpsilon" #X1D6AC "𝚬")
-    ("mathalpha" "\\mbfEta" #X1D6AE "𝚮")
-    ("mathalpha" "\\mbfF" #X1D405 "𝐅")
-    ("mathalpha" "\\mbfG" #X1D406 "𝐆")
-    ("mathalpha" "\\mbfGamma" #X1D6AA "𝚪")
-    ("mathalpha" "\\mbfH" #X1D407 "𝐇")
-    ("mathalpha" "\\mbfI" #X1D408 "𝐈")
-    ("mathalpha" "\\mbfIota" #X1D6B0 "𝚰")
-    ("mathalpha" "\\mbfJ" #X1D409 "𝐉")
-    ("mathalpha" "\\mbfK" #X1D40A "𝐊")
-    ("mathalpha" "\\mbfKappa" #X1D6B1 "𝚱")
-    ("mathalpha" "\\mbfL" #X1D40B "𝐋")
-    ("mathalpha" "\\mbfLambda" #X1D6B2 "𝚲")
-    ("mathalpha" "\\mbfM" #X1D40C "𝐌")
-    ("mathalpha" "\\mbfMu" #X1D6B3 "𝚳")
-    ("mathalpha" "\\mbfN" #X1D40D "𝐍")
-    ("mathalpha" "\\mbfNu" #X1D6B4 "𝚴")
-    ("mathalpha" "\\mbfO" #X1D40E "𝐎")
-    ("mathalpha" "\\mbfOmega" #X1D6C0 "𝛀")
-    ("mathalpha" "\\mbfOmicron" #X1D6B6 "𝚶")
-    ("mathalpha" "\\mbfP" #X1D40F "𝐏")
-    ("mathalpha" "\\mbfPhi" #X1D6BD "𝚽")
-    ("mathalpha" "\\mbfPi" #X1D6B7 "𝚷")
-    ("mathalpha" "\\mbfPsi" #X1D6BF "𝚿")
-    ("mathalpha" "\\mbfQ" #X1D410 "𝐐")
-    ("mathalpha" "\\mbfR" #X1D411 "𝐑")
-    ("mathalpha" "\\mbfRho" #X1D6B8 "𝚸")
-    ("mathalpha" "\\mbfS" #X1D412 "𝐒")
-    ("mathalpha" "\\mbfSigma" #X1D6BA "𝚺")
-    ("mathalpha" "\\mbfT" #X1D413 "𝐓")
-    ("mathalpha" "\\mbfTau" #X1D6BB "𝚻")
-    ("mathalpha" "\\mbfTheta" #X1D6AF "𝚯")
-    ("mathalpha" "\\mbfU" #X1D414 "𝐔")
-    ("mathalpha" "\\mbfUpsilon" #X1D6BC "𝚼")
-    ("mathalpha" "\\mbfV" #X1D415 "𝐕")
-    ("mathalpha" "\\mbfW" #X1D416 "𝐖")
-    ("mathalpha" "\\mbfX" #X1D417 "𝐗")
-    ("mathalpha" "\\mbfXi" #X1D6B5 "𝚵")
-    ("mathalpha" "\\mbfY" #X1D418 "𝐘")
-    ("mathalpha" "\\mbfZ" #X1D419 "𝐙")
-    ("mathalpha" "\\mbfZeta" #X1D6AD "𝚭")
-    ("mathalpha" "\\mbfa" #X1D41A "𝐚")
-    ("mathalpha" "\\mbfalpha" #X1D6C2 "𝛂")
-    ("mathalpha" "\\mbfb" #X1D41B "𝐛")
-    ("mathalpha" "\\mbfbeta" #X1D6C3 "𝛃")
-    ("mathalpha" "\\mbfc" #X1D41C "𝐜")
-    ("mathalpha" "\\mbfchi" #X1D6D8 "𝛘")
-    ("mathalpha" "\\mbfd" #X1D41D "𝐝")
-    ("mathalpha" "\\mbfdelta" #X1D6C5 "𝛅")
-    ("mathalpha" "\\mbfdigamma" #X1D7CB "𝟋")
-    ("mathalpha" "\\mbfe" #X1D41E "𝐞")
-    ("mathalpha" "\\mbfepsilon" #X1D6C6 "𝛆")
-    ("mathalpha" "\\mbfeta" #X1D6C8 "𝛈")
-    ("mathalpha" "\\mbff" #X1D41F "𝐟")
-    ("mathalpha" "\\mbffrakA" #X1D56C "𝕬")
-    ("mathalpha" "\\mbffrakB" #X1D56D "𝕭")
-    ("mathalpha" "\\mbffrakC" #X1D56E "𝕮")
-    ("mathalpha" "\\mbffrakD" #X1D56F "𝕯")
-    ("mathalpha" "\\mbffrakE" #X1D570 "𝕰")
-    ("mathalpha" "\\mbffrakF" #X1D571 "𝕱")
-    ("mathalpha" "\\mbffrakG" #X1D572 "𝕲")
-    ("mathalpha" "\\mbffrakH" #X1D573 "𝕳")
-    ("mathalpha" "\\mbffrakI" #X1D574 "𝕴")
-    ("mathalpha" "\\mbffrakJ" #X1D575 "𝕵")
-    ("mathalpha" "\\mbffrakK" #X1D576 "𝕶")
-    ("mathalpha" "\\mbffrakL" #X1D577 "𝕷")
-    ("mathalpha" "\\mbffrakM" #X1D578 "𝕸")
-    ("mathalpha" "\\mbffrakN" #X1D579 "𝕹")
-    ("mathalpha" "\\mbffrakO" #X1D57A "𝕺")
-    ("mathalpha" "\\mbffrakP" #X1D57B "𝕻")
-    ("mathalpha" "\\mbffrakQ" #X1D57C "𝕼")
-    ("mathalpha" "\\mbffrakR" #X1D57D "𝕽")
-    ("mathalpha" "\\mbffrakS" #X1D57E "𝕾")
-    ("mathalpha" "\\mbffrakT" #X1D57F "𝕿")
-    ("mathalpha" "\\mbffrakU" #X1D580 "𝖀")
-    ("mathalpha" "\\mbffrakV" #X1D581 "𝖁")
-    ("mathalpha" "\\mbffrakW" #X1D582 "𝖂")
-    ("mathalpha" "\\mbffrakX" #X1D583 "𝖃")
-    ("mathalpha" "\\mbffrakY" #X1D584 "𝖄")
-    ("mathalpha" "\\mbffrakZ" #X1D585 "𝖅")
-    ("mathalpha" "\\mbffraka" #X1D586 "𝖆")
-    ("mathalpha" "\\mbffrakb" #X1D587 "𝖇")
-    ("mathalpha" "\\mbffrakc" #X1D588 "𝖈")
-    ("mathalpha" "\\mbffrakd" #X1D589 "𝖉")
-    ("mathalpha" "\\mbffrake" #X1D58A "𝖊")
-    ("mathalpha" "\\mbffrakf" #X1D58B "𝖋")
-    ("mathalpha" "\\mbffrakg" #X1D58C "𝖌")
-    ("mathalpha" "\\mbffrakh" #X1D58D "𝖍")
-    ("mathalpha" "\\mbffraki" #X1D58E "𝖎")
-    ("mathalpha" "\\mbffrakj" #X1D58F "𝖏")
-    ("mathalpha" "\\mbffrakk" #X1D590 "𝖐")
-    ("mathalpha" "\\mbffrakl" #X1D591 "𝖑")
-    ("mathalpha" "\\mbffrakm" #X1D592 "𝖒")
-    ("mathalpha" "\\mbffrakn" #X1D593 "𝖓")
-    ("mathalpha" "\\mbffrako" #X1D594 "𝖔")
-    ("mathalpha" "\\mbffrakp" #X1D595 "𝖕")
-    ("mathalpha" "\\mbffrakq" #X1D596 "𝖖")
-    ("mathalpha" "\\mbffrakr" #X1D597 "𝖗")
-    ("mathalpha" "\\mbffraks" #X1D598 "𝖘")
-    ("mathalpha" "\\mbffrakt" #X1D599 "𝖙")
-    ("mathalpha" "\\mbffraku" #X1D59A "𝖚")
-    ("mathalpha" "\\mbffrakv" #X1D59B "𝖛")
-    ("mathalpha" "\\mbffrakw" #X1D59C "𝖜")
-    ("mathalpha" "\\mbffrakx" #X1D59D "𝖝")
-    ("mathalpha" "\\mbffraky" #X1D59E "𝖞")
-    ("mathalpha" "\\mbffrakz" #X1D59F "𝖟")
-    ("mathalpha" "\\mbfg" #X1D420 "𝐠")
-    ("mathalpha" "\\mbfgamma" #X1D6C4 "𝛄")
-    ("mathalpha" "\\mbfh" #X1D421 "𝐡")
-    ("mathalpha" "\\mbfi" #X1D422 "𝐢")
-    ("mathalpha" "\\mbfiota" #X1D6CA "𝛊")
-    ("mathalpha" "\\mbfitA" #X1D468 "𝑨")
-    ("mathalpha" "\\mbfitAlpha" #X1D71C "𝜜")
-    ("mathalpha" "\\mbfitB" #X1D469 "𝑩")
-    ("mathalpha" "\\mbfitBeta" #X1D71D "𝜝")
-    ("mathalpha" "\\mbfitC" #X1D46A "𝑪")
-    ("mathalpha" "\\mbfitChi" #X1D732 "𝜲")
-    ("mathalpha" "\\mbfitD" #X1D46B "𝑫")
-    ("mathalpha" "\\mbfitDelta" #X1D71F "𝜟")
-    ("mathalpha" "\\mbfitE" #X1D46C "𝑬")
-    ("mathalpha" "\\mbfitEpsilon" #X1D720 "𝜠")
-    ("mathalpha" "\\mbfitEta" #X1D722 "𝜢")
-    ("mathalpha" "\\mbfitF" #X1D46D "𝑭")
-    ("mathalpha" "\\mbfitG" #X1D46E "𝑮")
-    ("mathalpha" "\\mbfitGamma" #X1D71E "𝜞")
-    ("mathalpha" "\\mbfitH" #X1D46F "𝑯")
-    ("mathalpha" "\\mbfitI" #X1D470 "𝑰")
-    ("mathalpha" "\\mbfitIota" #X1D724 "𝜤")
-    ("mathalpha" "\\mbfitJ" #X1D471 "𝑱")
-    ("mathalpha" "\\mbfitK" #X1D472 "𝑲")
-    ("mathalpha" "\\mbfitKappa" #X1D725 "𝜥")
-    ("mathalpha" "\\mbfitL" #X1D473 "𝑳")
-    ("mathalpha" "\\mbfitLambda" #X1D726 "𝜦")
-    ("mathalpha" "\\mbfitM" #X1D474 "𝑴")
-    ("mathalpha" "\\mbfitMu" #X1D727 "𝜧")
-    ("mathalpha" "\\mbfitN" #X1D475 "𝑵")
-    ("mathalpha" "\\mbfitNu" #X1D728 "𝜨")
-    ("mathalpha" "\\mbfitO" #X1D476 "𝑶")
-    ("mathalpha" "\\mbfitOmega" #X1D734 "𝜴")
-    ("mathalpha" "\\mbfitOmicron" #X1D72A "𝜪")
-    ("mathalpha" "\\mbfitP" #X1D477 "𝑷")
-    ("mathalpha" "\\mbfitPhi" #X1D731 "𝜱")
-    ("mathalpha" "\\mbfitPi" #X1D72B "𝜫")
-    ("mathalpha" "\\mbfitPsi" #X1D733 "𝜳")
-    ("mathalpha" "\\mbfitQ" #X1D478 "𝑸")
-    ("mathalpha" "\\mbfitR" #X1D479 "𝑹")
-    ("mathalpha" "\\mbfitRho" #X1D72C "𝜬")
-    ("mathalpha" "\\mbfitS" #X1D47A "𝑺")
-    ("mathalpha" "\\mbfitSigma" #X1D72E "𝜮")
-    ("mathalpha" "\\mbfitT" #X1D47B "𝑻")
-    ("mathalpha" "\\mbfitTau" #X1D72F "𝜯")
-    ("mathalpha" "\\mbfitTheta" #X1D723 "𝜣")
-    ("mathalpha" "\\mbfitU" #X1D47C "𝑼")
-    ("mathalpha" "\\mbfitUpsilon" #X1D730 "𝜰")
-    ("mathalpha" "\\mbfitV" #X1D47D "𝑽")
-    ("mathalpha" "\\mbfitW" #X1D47E "𝑾")
-    ("mathalpha" "\\mbfitX" #X1D47F "𝑿")
-    ("mathalpha" "\\mbfitXi" #X1D729 "𝜩")
-    ("mathalpha" "\\mbfitY" #X1D480 "𝒀")
-    ("mathalpha" "\\mbfitZ" #X1D481 "𝒁")
-    ("mathalpha" "\\mbfitZeta" #X1D721 "𝜡")
-    ("mathalpha" "\\mbfita" #X1D482 "𝒂")
-    ("mathalpha" "\\mbfitalpha" #X1D736 "𝜶")
-    ("mathalpha" "\\mbfitb" #X1D483 "𝒃")
-    ("mathalpha" "\\mbfitbeta" #X1D737 "𝜷")
-    ("mathalpha" "\\mbfitc" #X1D484 "𝒄")
-    ("mathalpha" "\\mbfitchi" #X1D74C "𝝌")
-    ("mathalpha" "\\mbfitd" #X1D485 "𝒅")
-    ("mathalpha" "\\mbfitdelta" #X1D739 "𝜹")
-    ("mathalpha" "\\mbfite" #X1D486 "𝒆")
-    ("mathalpha" "\\mbfitepsilon" #X1D73A "𝜺")
-    ("mathalpha" "\\mbfiteta" #X1D73C "𝜼")
-    ("mathalpha" "\\mbfitf" #X1D487 "𝒇")
-    ("mathalpha" "\\mbfitg" #X1D488 "𝒈")
-    ("mathalpha" "\\mbfitgamma" #X1D738 "𝜸")
-    ("mathalpha" "\\mbfith" #X1D489 "𝒉")
-    ("mathalpha" "\\mbfiti" #X1D48A "𝒊")
-    ("mathalpha" "\\mbfitiota" #X1D73E "𝜾")
-    ("mathalpha" "\\mbfitj" #X1D48B "𝒋")
-    ("mathalpha" "\\mbfitk" #X1D48C "𝒌")
-    ("mathalpha" "\\mbfitkappa" #X1D73F "𝜿")
-    ("mathalpha" "\\mbfitl" #X1D48D "𝒍")
-    ("mathalpha" "\\mbfitlambda" #X1D740 "𝝀")
-    ("mathalpha" "\\mbfitm" #X1D48E "𝒎")
-    ("mathalpha" "\\mbfitmu" #X1D741 "𝝁")
-    ("mathalpha" "\\mbfitn" #X1D48F "𝒏")
-    ("mathalpha" "\\mbfitnu" #X1D742 "𝝂")
-    ("mathalpha" "\\mbfito" #X1D490 "𝒐")
-    ("mathalpha" "\\mbfitomega" #X1D74E "𝝎")
-    ("mathalpha" "\\mbfitomicron" #X1D744 "𝝄")
-    ("mathalpha" "\\mbfitp" #X1D491 "𝒑")
-    ("mathalpha" "\\mbfitphi" #X1D74B "𝝋")
-    ("mathalpha" "\\mbfitpi" #X1D745 "𝝅")
-    ("mathalpha" "\\mbfitpsi" #X1D74D "𝝍")
-    ("mathalpha" "\\mbfitq" #X1D492 "𝒒")
-    ("mathalpha" "\\mbfitr" #X1D493 "𝒓")
-    ("mathalpha" "\\mbfitrho" #X1D746 "𝝆")
-    ("mathalpha" "\\mbfits" #X1D494 "𝒔")
-    ("mathalpha" "\\mbfitsansA" #X1D63C "𝘼")
-    ("mathalpha" "\\mbfitsansAlpha" #X1D790 "𝞐")
-    ("mathalpha" "\\mbfitsansB" #X1D63D "𝘽")
-    ("mathalpha" "\\mbfitsansBeta" #X1D791 "𝞑")
-    ("mathalpha" "\\mbfitsansC" #X1D63E "𝘾")
-    ("mathalpha" "\\mbfitsansChi" #X1D7A6 "𝞦")
-    ("mathalpha" "\\mbfitsansD" #X1D63F "𝘿")
-    ("mathalpha" "\\mbfitsansDelta" #X1D793 "𝞓")
-    ("mathalpha" "\\mbfitsansE" #X1D640 "𝙀")
-    ("mathalpha" "\\mbfitsansEpsilon" #X1D794 "𝞔")
-    ("mathalpha" "\\mbfitsansEta" #X1D796 "𝞖")
-    ("mathalpha" "\\mbfitsansF" #X1D641 "𝙁")
-    ("mathalpha" "\\mbfitsansG" #X1D642 "𝙂")
-    ("mathalpha" "\\mbfitsansGamma" #X1D792 "𝞒")
-    ("mathalpha" "\\mbfitsansH" #X1D643 "𝙃")
-    ("mathalpha" "\\mbfitsansI" #X1D644 "𝙄")
-    ("mathalpha" "\\mbfitsansIota" #X1D798 "𝞘")
-    ("mathalpha" "\\mbfitsansJ" #X1D645 "𝙅")
-    ("mathalpha" "\\mbfitsansK" #X1D646 "𝙆")
-    ("mathalpha" "\\mbfitsansKappa" #X1D799 "𝞙")
-    ("mathalpha" "\\mbfitsansL" #X1D647 "𝙇")
-    ("mathalpha" "\\mbfitsansLambda" #X1D79A "𝞚")
-    ("mathalpha" "\\mbfitsansM" #X1D648 "𝙈")
-    ("mathalpha" "\\mbfitsansMu" #X1D79B "𝞛")
-    ("mathalpha" "\\mbfitsansN" #X1D649 "𝙉")
-    ("mathalpha" "\\mbfitsansNu" #X1D79C "𝞜")
-    ("mathalpha" "\\mbfitsansO" #X1D64A "𝙊")
-    ("mathalpha" "\\mbfitsansOmega" #X1D7A8 "𝞨")
-    ("mathalpha" "\\mbfitsansOmicron" #X1D79E "𝞞")
-    ("mathalpha" "\\mbfitsansP" #X1D64B "𝙋")
-    ("mathalpha" "\\mbfitsansPhi" #X1D7A5 "𝞥")
-    ("mathalpha" "\\mbfitsansPi" #X1D79F "𝞟")
-    ("mathalpha" "\\mbfitsansPsi" #X1D7A7 "𝞧")
-    ("mathalpha" "\\mbfitsansQ" #X1D64C "𝙌")
-    ("mathalpha" "\\mbfitsansR" #X1D64D "𝙍")
-    ("mathalpha" "\\mbfitsansRho" #X1D7A0 "𝞠")
-    ("mathalpha" "\\mbfitsansS" #X1D64E "𝙎")
-    ("mathalpha" "\\mbfitsansSigma" #X1D7A2 "𝞢")
-    ("mathalpha" "\\mbfitsansT" #X1D64F "𝙏")
-    ("mathalpha" "\\mbfitsansTau" #X1D7A3 "𝞣")
-    ("mathalpha" "\\mbfitsansTheta" #X1D797 "𝞗")
-    ("mathalpha" "\\mbfitsansU" #X1D650 "𝙐")
-    ("mathalpha" "\\mbfitsansUpsilon" #X1D7A4 "𝞤")
-    ("mathalpha" "\\mbfitsansV" #X1D651 "𝙑")
-    ("mathalpha" "\\mbfitsansW" #X1D652 "𝙒")
-    ("mathalpha" "\\mbfitsansX" #X1D653 "𝙓")
-    ("mathalpha" "\\mbfitsansXi" #X1D79D "𝞝")
-    ("mathalpha" "\\mbfitsansY" #X1D654 "𝙔")
-    ("mathalpha" "\\mbfitsansZ" #X1D655 "𝙕")
-    ("mathalpha" "\\mbfitsansZeta" #X1D795 "𝞕")
-    ("mathalpha" "\\mbfitsansa" #X1D656 "𝙖")
-    ("mathalpha" "\\mbfitsansalpha" #X1D7AA "𝞪")
-    ("mathalpha" "\\mbfitsansb" #X1D657 "𝙗")
-    ("mathalpha" "\\mbfitsansbeta" #X1D7AB "𝞫")
-    ("mathalpha" "\\mbfitsansc" #X1D658 "𝙘")
-    ("mathalpha" "\\mbfitsanschi" #X1D7C0 "𝟀")
-    ("mathalpha" "\\mbfitsansd" #X1D659 "𝙙")
-    ("mathalpha" "\\mbfitsansdelta" #X1D7AD "𝞭")
-    ("mathalpha" "\\mbfitsanse" #X1D65A "𝙚")
-    ("mathalpha" "\\mbfitsansepsilon" #X1D7AE "𝞮")
-    ("mathalpha" "\\mbfitsanseta" #X1D7B0 "𝞰")
-    ("mathalpha" "\\mbfitsansf" #X1D65B "𝙛")
-    ("mathalpha" "\\mbfitsansg" #X1D65C "𝙜")
-    ("mathalpha" "\\mbfitsansgamma" #X1D7AC "𝞬")
-    ("mathalpha" "\\mbfitsansh" #X1D65D "𝙝")
-    ("mathalpha" "\\mbfitsansi" #X1D65E "𝙞")
-    ("mathalpha" "\\mbfitsansiota" #X1D7B2 "𝞲")
-    ("mathalpha" "\\mbfitsansj" #X1D65F "𝙟")
-    ("mathalpha" "\\mbfitsansk" #X1D660 "𝙠")
-    ("mathalpha" "\\mbfitsanskappa" #X1D7B3 "𝞳")
-    ("mathalpha" "\\mbfitsansl" #X1D661 "𝙡")
-    ("mathalpha" "\\mbfitsanslambda" #X1D7B4 "𝞴")
-    ("mathalpha" "\\mbfitsansm" #X1D662 "𝙢")
-    ("mathalpha" "\\mbfitsansmu" #X1D7B5 "𝞵")
-    ("mathalpha" "\\mbfitsansn" #X1D663 "𝙣")
-    ("mathalpha" "\\mbfitsansnu" #X1D7B6 "𝞶")
-    ("mathalpha" "\\mbfitsanso" #X1D664 "𝙤")
-    ("mathalpha" "\\mbfitsansomega" #X1D7C2 "𝟂")
-    ("mathalpha" "\\mbfitsansomicron" #X1D7B8 "𝞸")
-    ("mathalpha" "\\mbfitsansp" #X1D665 "𝙥")
-    ("mathalpha" "\\mbfitsansphi" #X1D7BF "𝞿")
-    ("mathalpha" "\\mbfitsanspi" #X1D7B9 "𝞹")
-    ("mathalpha" "\\mbfitsanspsi" #X1D7C1 "𝟁")
-    ("mathalpha" "\\mbfitsansq" #X1D666 "𝙦")
-    ("mathalpha" "\\mbfitsansr" #X1D667 "𝙧")
-    ("mathalpha" "\\mbfitsansrho" #X1D7BA "𝞺")
-    ("mathalpha" "\\mbfitsanss" #X1D668 "𝙨")
-    ("mathalpha" "\\mbfitsanssigma" #X1D7BC "𝞼")
-    ("mathalpha" "\\mbfitsanst" #X1D669 "𝙩")
-    ("mathalpha" "\\mbfitsanstau" #X1D7BD "𝞽")
-    ("mathalpha" "\\mbfitsanstheta" #X1D7B1 "𝞱")
-    ("mathalpha" "\\mbfitsansu" #X1D66A "𝙪")
-    ("mathalpha" "\\mbfitsansupsilon" #X1D7BE "𝞾")
-    ("mathalpha" "\\mbfitsansv" #X1D66B "𝙫")
-    ("mathalpha" "\\mbfitsansvarTheta" #X1D7A1 "𝞡")
-    ("mathalpha" "\\mbfitsansvarepsilon" #X1D7C4 "𝟄")
-    ("mathalpha" "\\mbfitsansvarkappa" #X1D7C6 "𝟆")
-    ("mathalpha" "\\mbfitsansvarphi" #X1D7C7 "𝟇")
-    ("mathalpha" "\\mbfitsansvarpi" #X1D7C9 "𝟉")
-    ("mathalpha" "\\mbfitsansvarrho" #X1D7C8 "𝟈")
-    ("mathalpha" "\\mbfitsansvarsigma" #X1D7BB "𝞻")
-    ("mathalpha" "\\mbfitsansvartheta" #X1D7C5 "𝟅")
-    ("mathalpha" "\\mbfitsansw" #X1D66C "𝙬")
-    ("mathalpha" "\\mbfitsansx" #X1D66D "𝙭")
-    ("mathalpha" "\\mbfitsansxi" #X1D7B7 "𝞷")
-    ("mathalpha" "\\mbfitsansy" #X1D66E "𝙮")
-    ("mathalpha" "\\mbfitsansz" #X1D66F "𝙯")
-    ("mathalpha" "\\mbfitsanszeta" #X1D7AF "𝞯")
-    ("mathalpha" "\\mbfitsigma" #X1D748 "𝝈")
-    ("mathalpha" "\\mbfitt" #X1D495 "𝒕")
-    ("mathalpha" "\\mbfittau" #X1D749 "𝝉")
-    ("mathalpha" "\\mbfittheta" #X1D73D "𝜽")
-    ("mathalpha" "\\mbfitu" #X1D496 "𝒖")
-    ("mathalpha" "\\mbfitupsilon" #X1D74A "𝝊")
-    ("mathalpha" "\\mbfitv" #X1D497 "𝒗")
-    ("mathalpha" "\\mbfitvarTheta" #X1D72D "𝜭")
-    ("mathalpha" "\\mbfitvarepsilon" #X1D750 "𝝐")
-    ("mathalpha" "\\mbfitvarkappa" #X1D752 "𝝒")
-    ("mathalpha" "\\mbfitvarphi" #X1D753 "𝝓")
-    ("mathalpha" "\\mbfitvarpi" #X1D755 "𝝕")
-    ("mathalpha" "\\mbfitvarrho" #X1D754 "𝝔")
-    ("mathalpha" "\\mbfitvarsigma" #X1D747 "𝝇")
-    ("mathalpha" "\\mbfitvartheta" #X1D751 "𝝑")
-    ("mathalpha" "\\mbfitw" #X1D498 "𝒘")
-    ("mathalpha" "\\mbfitx" #X1D499 "𝒙")
-    ("mathalpha" "\\mbfitxi" #X1D743 "𝝃")
-    ("mathalpha" "\\mbfity" #X1D49A "𝒚")
-    ("mathalpha" "\\mbfitz" #X1D49B "𝒛")
-    ("mathalpha" "\\mbfitzeta" #X1D73B "𝜻")
-    ("mathalpha" "\\mbfj" #X1D423 "𝐣")
-    ("mathalpha" "\\mbfk" #X1D424 "𝐤")
-    ("mathalpha" "\\mbfkappa" #X1D6CB "𝛋")
-    ("mathalpha" "\\mbfl" #X1D425 "𝐥")
-    ("mathalpha" "\\mbflambda" #X1D6CC "𝛌")
-    ("mathalpha" "\\mbfm" #X1D426 "𝐦")
-    ("mathalpha" "\\mbfmu" #X1D6CD "𝛍")
-    ("mathalpha" "\\mbfn" #X1D427 "𝐧")
-    ("mathalpha" "\\mbfnu" #X1D6CE "𝛎")
-    ("mathalpha" "\\mbfo" #X1D428 "𝐨")
-    ("mathalpha" "\\mbfomega" #X1D6DA "𝛚")
-    ("mathalpha" "\\mbfomicron" #X1D6D0 "𝛐")
-    ("mathalpha" "\\mbfp" #X1D429 "𝐩")
-    ("mathalpha" "\\mbfphi" #X1D6DF "𝛟")
-    ("mathalpha" "\\mbfpi" #X1D6D1 "𝛑")
-    ("mathalpha" "\\mbfpsi" #X1D6D9 "𝛙")
-    ("mathalpha" "\\mbfq" #X1D42A "𝐪")
-    ("mathalpha" "\\mbfr" #X1D42B "𝐫")
-    ("mathalpha" "\\mbfrho" #X1D6D2 "𝛒")
-    ("mathalpha" "\\mbfs" #X1D42C "𝐬")
-    ("mathalpha" "\\mbfsansA" #X1D5D4 "𝗔")
-    ("mathalpha" "\\mbfsansAlpha" #X1D756 "𝝖")
-    ("mathalpha" "\\mbfsansB" #X1D5D5 "𝗕")
-    ("mathalpha" "\\mbfsansBeta" #X1D757 "𝝗")
-    ("mathalpha" "\\mbfsansC" #X1D5D6 "𝗖")
-    ("mathalpha" "\\mbfsansChi" #X1D76C "𝝬")
-    ("mathalpha" "\\mbfsansD" #X1D5D7 "𝗗")
-    ("mathalpha" "\\mbfsansDelta" #X1D759 "𝝙")
-    ("mathalpha" "\\mbfsansE" #X1D5D8 "𝗘")
-    ("mathalpha" "\\mbfsansEpsilon" #X1D75A "𝝚")
-    ("mathalpha" "\\mbfsansEta" #X1D75C "𝝜")
-    ("mathalpha" "\\mbfsansF" #X1D5D9 "𝗙")
-    ("mathalpha" "\\mbfsansG" #X1D5DA "𝗚")
-    ("mathalpha" "\\mbfsansGamma" #X1D758 "𝝘")
-    ("mathalpha" "\\mbfsansH" #X1D5DB "𝗛")
-    ("mathalpha" "\\mbfsansI" #X1D5DC "𝗜")
-    ("mathalpha" "\\mbfsansIota" #X1D75E "𝝞")
-    ("mathalpha" "\\mbfsansJ" #X1D5DD "𝗝")
-    ("mathalpha" "\\mbfsansK" #X1D5DE "𝗞")
-    ("mathalpha" "\\mbfsansKappa" #X1D75F "𝝟")
-    ("mathalpha" "\\mbfsansL" #X1D5DF "𝗟")
-    ("mathalpha" "\\mbfsansLambda" #X1D760 "𝝠")
-    ("mathalpha" "\\mbfsansM" #X1D5E0 "𝗠")
-    ("mathalpha" "\\mbfsansMu" #X1D761 "𝝡")
-    ("mathalpha" "\\mbfsansN" #X1D5E1 "𝗡")
-    ("mathalpha" "\\mbfsansNu" #X1D762 "𝝢")
-    ("mathalpha" "\\mbfsansO" #X1D5E2 "𝗢")
-    ("mathalpha" "\\mbfsansOmega" #X1D76E "𝝮")
-    ("mathalpha" "\\mbfsansOmicron" #X1D764 "𝝤")
-    ("mathalpha" "\\mbfsansP" #X1D5E3 "𝗣")
-    ("mathalpha" "\\mbfsansPhi" #X1D76B "𝝫")
-    ("mathalpha" "\\mbfsansPi" #X1D765 "𝝥")
-    ("mathalpha" "\\mbfsansPsi" #X1D76D "𝝭")
-    ("mathalpha" "\\mbfsansQ" #X1D5E4 "𝗤")
-    ("mathalpha" "\\mbfsansR" #X1D5E5 "𝗥")
-    ("mathalpha" "\\mbfsansRho" #X1D766 "𝝦")
-    ("mathalpha" "\\mbfsansS" #X1D5E6 "𝗦")
-    ("mathalpha" "\\mbfsansSigma" #X1D768 "𝝨")
-    ("mathalpha" "\\mbfsansT" #X1D5E7 "𝗧")
-    ("mathalpha" "\\mbfsansTau" #X1D769 "𝝩")
-    ("mathalpha" "\\mbfsansTheta" #X1D75D "𝝝")
-    ("mathalpha" "\\mbfsansU" #X1D5E8 "𝗨")
-    ("mathalpha" "\\mbfsansUpsilon" #X1D76A "𝝪")
-    ("mathalpha" "\\mbfsansV" #X1D5E9 "𝗩")
-    ("mathalpha" "\\mbfsansW" #X1D5EA "𝗪")
-    ("mathalpha" "\\mbfsansX" #X1D5EB "𝗫")
-    ("mathalpha" "\\mbfsansXi" #X1D763 "𝝣")
-    ("mathalpha" "\\mbfsansY" #X1D5EC "𝗬")
-    ("mathalpha" "\\mbfsansZ" #X1D5ED "𝗭")
-    ("mathalpha" "\\mbfsansZeta" #X1D75B "𝝛")
-    ("mathalpha" "\\mbfsansa" #X1D5EE "𝗮")
-    ("mathalpha" "\\mbfsansalpha" #X1D770 "𝝰")
-    ("mathalpha" "\\mbfsansb" #X1D5EF "𝗯")
-    ("mathalpha" "\\mbfsansbeta" #X1D771 "𝝱")
-    ("mathalpha" "\\mbfsansc" #X1D5F0 "𝗰")
-    ("mathalpha" "\\mbfsanschi" #X1D786 "𝞆")
-    ("mathalpha" "\\mbfsansd" #X1D5F1 "𝗱")
-    ("mathalpha" "\\mbfsansdelta" #X1D773 "𝝳")
-    ("mathalpha" "\\mbfsanse" #X1D5F2 "𝗲")
-    ("mathalpha" "\\mbfsansepsilon" #X1D774 "𝝴")
-    ("mathalpha" "\\mbfsanseta" #X1D776 "𝝶")
-    ("mathalpha" "\\mbfsansf" #X1D5F3 "𝗳")
-    ("mathalpha" "\\mbfsansg" #X1D5F4 "𝗴")
-    ("mathalpha" "\\mbfsansgamma" #X1D772 "𝝲")
-    ("mathalpha" "\\mbfsansh" #X1D5F5 "𝗵")
-    ("mathalpha" "\\mbfsansi" #X1D5F6 "𝗶")
-    ("mathalpha" "\\mbfsansiota" #X1D778 "𝝸")
-    ("mathalpha" "\\mbfsansj" #X1D5F7 "𝗷")
-    ("mathalpha" "\\mbfsansk" #X1D5F8 "𝗸")
-    ("mathalpha" "\\mbfsanskappa" #X1D779 "𝝹")
-    ("mathalpha" "\\mbfsansl" #X1D5F9 "𝗹")
-    ("mathalpha" "\\mbfsanslambda" #X1D77A "𝝺")
-    ("mathalpha" "\\mbfsansm" #X1D5FA "𝗺")
-    ("mathalpha" "\\mbfsansmu" #X1D77B "𝝻")
-    ("mathalpha" "\\mbfsansn" #X1D5FB "𝗻")
-    ("mathalpha" "\\mbfsansnu" #X1D77C "𝝼")
-    ("mathalpha" "\\mbfsanso" #X1D5FC "𝗼")
-    ("mathalpha" "\\mbfsansomega" #X1D788 "𝞈")
-    ("mathalpha" "\\mbfsansomicron" #X1D77E "𝝾")
-    ("mathalpha" "\\mbfsansp" #X1D5FD "𝗽")
-    ("mathalpha" "\\mbfsansphi" #X1D785 "𝞅")
-    ("mathalpha" "\\mbfsanspi" #X1D77F "𝝿")
-    ("mathalpha" "\\mbfsanspsi" #X1D787 "𝞇")
-    ("mathalpha" "\\mbfsansq" #X1D5FE "𝗾")
-    ("mathalpha" "\\mbfsansr" #X1D5FF "𝗿")
-    ("mathalpha" "\\mbfsansrho" #X1D780 "𝞀")
-    ("mathalpha" "\\mbfsanss" #X1D600 "𝘀")
-    ("mathalpha" "\\mbfsanssigma" #X1D782 "𝞂")
-    ("mathalpha" "\\mbfsanst" #X1D601 "𝘁")
-    ("mathalpha" "\\mbfsanstau" #X1D783 "𝞃")
-    ("mathalpha" "\\mbfsanstheta" #X1D777 "𝝷")
-    ("mathalpha" "\\mbfsansu" #X1D602 "𝘂")
-    ("mathalpha" "\\mbfsansupsilon" #X1D784 "𝞄")
-    ("mathalpha" "\\mbfsansv" #X1D603 "𝘃")
-    ("mathalpha" "\\mbfsansvarTheta" #X1D767 "𝝧")
-    ("mathalpha" "\\mbfsansvarepsilon" #X1D78A "𝞊")
-    ("mathalpha" "\\mbfsansvarkappa" #X1D78C "𝞌")
-    ("mathalpha" "\\mbfsansvarphi" #X1D78D "𝞍")
-    ("mathalpha" "\\mbfsansvarpi" #X1D78F "𝞏")
-    ("mathalpha" "\\mbfsansvarrho" #X1D78E "𝞎")
-    ("mathalpha" "\\mbfsansvarsigma" #X1D781 "𝞁")
-    ("mathalpha" "\\mbfsansvartheta" #X1D78B "𝞋")
-    ("mathalpha" "\\mbfsansw" #X1D604 "𝘄")
-    ("mathalpha" "\\mbfsansx" #X1D605 "𝘅")
-    ("mathalpha" "\\mbfsansxi" #X1D77D "𝝽")
-    ("mathalpha" "\\mbfsansy" #X1D606 "𝘆")
-    ("mathalpha" "\\mbfsansz" #X1D607 "𝘇")
-    ("mathalpha" "\\mbfsanszeta" #X1D775 "𝝵")
-    ("mathalpha" "\\mbfscrA" #X1D4D0 "𝓐")
-    ("mathalpha" "\\mbfscrB" #X1D4D1 "𝓑")
-    ("mathalpha" "\\mbfscrC" #X1D4D2 "𝓒")
-    ("mathalpha" "\\mbfscrD" #X1D4D3 "𝓓")
-    ("mathalpha" "\\mbfscrE" #X1D4D4 "𝓔")
-    ("mathalpha" "\\mbfscrF" #X1D4D5 "𝓕")
-    ("mathalpha" "\\mbfscrG" #X1D4D6 "𝓖")
-    ("mathalpha" "\\mbfscrH" #X1D4D7 "𝓗")
-    ("mathalpha" "\\mbfscrI" #X1D4D8 "𝓘")
-    ("mathalpha" "\\mbfscrJ" #X1D4D9 "𝓙")
-    ("mathalpha" "\\mbfscrK" #X1D4DA "𝓚")
-    ("mathalpha" "\\mbfscrL" #X1D4DB "𝓛")
-    ("mathalpha" "\\mbfscrM" #X1D4DC "𝓜")
-    ("mathalpha" "\\mbfscrN" #X1D4DD "𝓝")
-    ("mathalpha" "\\mbfscrO" #X1D4DE "𝓞")
-    ("mathalpha" "\\mbfscrP" #X1D4DF "𝓟")
-    ("mathalpha" "\\mbfscrQ" #X1D4E0 "𝓠")
-    ("mathalpha" "\\mbfscrR" #X1D4E1 "𝓡")
-    ("mathalpha" "\\mbfscrS" #X1D4E2 "𝓢")
-    ("mathalpha" "\\mbfscrT" #X1D4E3 "𝓣")
-    ("mathalpha" "\\mbfscrU" #X1D4E4 "𝓤")
-    ("mathalpha" "\\mbfscrV" #X1D4E5 "𝓥")
-    ("mathalpha" "\\mbfscrW" #X1D4E6 "𝓦")
-    ("mathalpha" "\\mbfscrX" #X1D4E7 "𝓧")
-    ("mathalpha" "\\mbfscrY" #X1D4E8 "𝓨")
-    ("mathalpha" "\\mbfscrZ" #X1D4E9 "𝓩")
-    ("mathalpha" "\\mbfscra" #X1D4EA "𝓪")
-    ("mathalpha" "\\mbfscrb" #X1D4EB "𝓫")
-    ("mathalpha" "\\mbfscrc" #X1D4EC "𝓬")
-    ("mathalpha" "\\mbfscrd" #X1D4ED "𝓭")
-    ("mathalpha" "\\mbfscre" #X1D4EE "𝓮")
-    ("mathalpha" "\\mbfscrf" #X1D4EF "𝓯")
-    ("mathalpha" "\\mbfscrg" #X1D4F0 "𝓰")
-    ("mathalpha" "\\mbfscrh" #X1D4F1 "𝓱")
-    ("mathalpha" "\\mbfscri" #X1D4F2 "𝓲")
-    ("mathalpha" "\\mbfscrj" #X1D4F3 "𝓳")
-    ("mathalpha" "\\mbfscrk" #X1D4F4 "𝓴")
-    ("mathalpha" "\\mbfscrl" #X1D4F5 "𝓵")
-    ("mathalpha" "\\mbfscrm" #X1D4F6 "𝓶")
-    ("mathalpha" "\\mbfscrn" #X1D4F7 "𝓷")
-    ("mathalpha" "\\mbfscro" #X1D4F8 "𝓸")
-    ("mathalpha" "\\mbfscrp" #X1D4F9 "𝓹")
-    ("mathalpha" "\\mbfscrq" #X1D4FA "𝓺")
-    ("mathalpha" "\\mbfscrr" #X1D4FB "𝓻")
-    ("mathalpha" "\\mbfscrs" #X1D4FC "𝓼")
-    ("mathalpha" "\\mbfscrt" #X1D4FD "𝓽")
-    ("mathalpha" "\\mbfscru" #X1D4FE "𝓾")
-    ("mathalpha" "\\mbfscrv" #X1D4FF "𝓿")
-    ("mathalpha" "\\mbfscrw" #X1D500 "𝔀")
-    ("mathalpha" "\\mbfscrx" #X1D501 "𝔁")
-    ("mathalpha" "\\mbfscry" #X1D502 "𝔂")
-    ("mathalpha" "\\mbfscrz" #X1D503 "𝔃")
-    ("mathalpha" "\\mbfsigma" #X1D6D4 "𝛔")
-    ("mathalpha" "\\mbft" #X1D42D "𝐭")
-    ("mathalpha" "\\mbftau" #X1D6D5 "𝛕")
-    ("mathalpha" "\\mbftheta" #X1D6C9 "𝛉")
-    ("mathalpha" "\\mbfu" #X1D42E "𝐮")
-    ("mathalpha" "\\mbfupsilon" #X1D6D6 "𝛖")
-    ("mathalpha" "\\mbfv" #X1D42F "𝐯")
-    ("mathalpha" "\\mbfvarTheta" #X1D6B9 "𝚹")
-    ("mathalpha" "\\mbfvarepsilon" #X1D6DC "𝛜")
-    ("mathalpha" "\\mbfvarkappa" #X1D6DE "𝛞")
-    ("mathalpha" "\\mbfvarphi" #X1D6D7 "𝛗")
-    ("mathalpha" "\\mbfvarpi" #X1D6E1 "𝛡")
-    ("mathalpha" "\\mbfvarrho" #X1D6E0 "𝛠")
-    ("mathalpha" "\\mbfvarsigma" #X1D6D3 "𝛓")
-    ("mathalpha" "\\mbfvartheta" #X1D6DD "𝛝")
-    ("mathalpha" "\\mbfw" #X1D430 "𝐰")
-    ("mathalpha" "\\mbfx" #X1D431 "𝐱")
-    ("mathalpha" "\\mbfxi" #X1D6CF "𝛏")
-    ("mathalpha" "\\mbfy" #X1D432 "𝐲")
-    ("mathalpha" "\\mbfz" #X1D433 "𝐳")
-    ("mathalpha" "\\mbfzeta" #X1D6C7 "𝛇")
-    ("mathalpha" "\\mfrakA" #X1D504 "𝔄")
-    ("mathalpha" "\\mfrakB" #X1D505 "𝔅")
-    ("mathalpha" "\\mfrakC" #X0212D "ℭ")
-    ("mathalpha" "\\mfrakD" #X1D507 "𝔇")
-    ("mathalpha" "\\mfrakE" #X1D508 "𝔈")
-    ("mathalpha" "\\mfrakF" #X1D509 "𝔉")
-    ("mathalpha" "\\mfrakG" #X1D50A "𝔊")
-    ("mathalpha" "\\mfrakH" #X0210C "ℌ")
-    ("mathalpha" "\\mfrakJ" #X1D50D "𝔍")
-    ("mathalpha" "\\mfrakK" #X1D50E "𝔎")
-    ("mathalpha" "\\mfrakL" #X1D50F "𝔏")
-    ("mathalpha" "\\mfrakM" #X1D510 "𝔐")
-    ("mathalpha" "\\mfrakN" #X1D511 "𝔑")
-    ("mathalpha" "\\mfrakO" #X1D512 "𝔒")
-    ("mathalpha" "\\mfrakP" #X1D513 "𝔓")
-    ("mathalpha" "\\mfrakQ" #X1D514 "𝔔")
-    ("mathalpha" "\\mfrakS" #X1D516 "𝔖")
-    ("mathalpha" "\\mfrakT" #X1D517 "𝔗")
-    ("mathalpha" "\\mfrakU" #X1D518 "𝔘")
-    ("mathalpha" "\\mfrakV" #X1D519 "𝔙")
-    ("mathalpha" "\\mfrakW" #X1D51A "𝔚")
-    ("mathalpha" "\\mfrakX" #X1D51B "𝔛")
-    ("mathalpha" "\\mfrakY" #X1D51C "𝔜")
-    ("mathalpha" "\\mfrakZ" #X02128 "ℨ")
-    ("mathalpha" "\\mfraka" #X1D51E "𝔞")
-    ("mathalpha" "\\mfrakb" #X1D51F "𝔟")
-    ("mathalpha" "\\mfrakc" #X1D520 "𝔠")
-    ("mathalpha" "\\mfrakd" #X1D521 "𝔡")
-    ("mathalpha" "\\mfrake" #X1D522 "𝔢")
-    ("mathalpha" "\\mfrakf" #X1D523 "𝔣")
-    ("mathalpha" "\\mfrakg" #X1D524 "𝔤")
-    ("mathalpha" "\\mfrakh" #X1D525 "𝔥")
-    ("mathalpha" "\\mfraki" #X1D526 "𝔦")
-    ("mathalpha" "\\mfrakj" #X1D527 "𝔧")
-    ("mathalpha" "\\mfrakk" #X1D528 "𝔨")
-    ("mathalpha" "\\mfrakl" #X1D529 "𝔩")
-    ("mathalpha" "\\mfrakm" #X1D52A "𝔪")
-    ("mathalpha" "\\mfrakn" #X1D52B "𝔫")
-    ("mathalpha" "\\mfrako" #X1D52C "𝔬")
-    ("mathalpha" "\\mfrakp" #X1D52D "𝔭")
-    ("mathalpha" "\\mfrakq" #X1D52E "𝔮")
-    ("mathalpha" "\\mfrakr" #X1D52F "𝔯")
-    ("mathalpha" "\\mfraks" #X1D530 "𝔰")
-    ("mathalpha" "\\mfrakt" #X1D531 "𝔱")
-    ("mathalpha" "\\mfraku" #X1D532 "𝔲")
-    ("mathalpha" "\\mfrakv" #X1D533 "𝔳")
-    ("mathalpha" "\\mfrakw" #X1D534 "𝔴")
-    ("mathalpha" "\\mfrakx" #X1D535 "𝔵")
-    ("mathalpha" "\\mfraky" #X1D536 "𝔶")
-    ("mathalpha" "\\mfrakz" #X1D537 "𝔷")
-    ("mathalpha" "\\mitA" #X1D434 "𝐴")
-    ("mathalpha" "\\mitAlpha" #X1D6E2 "𝛢")
-    ("mathalpha" "\\mitB" #X1D435 "𝐵")
-    ("mathalpha" "\\mitBeta" #X1D6E3 "𝛣")
-    ("mathalpha" "\\mitC" #X1D436 "𝐶")
-    ("mathalpha" "\\mitChi" #X1D6F8 "𝛸")
-    ("mathalpha" "\\mitD" #X1D437 "𝐷")
-    ("mathalpha" "\\mitDelta" #X1D6E5 "𝛥")
-    ("mathalpha" "\\mitE" #X1D438 "𝐸")
-    ("mathalpha" "\\mitEpsilon" #X1D6E6 "𝛦")
-    ("mathalpha" "\\mitEta" #X1D6E8 "𝛨")
-    ("mathalpha" "\\mitF" #X1D439 "𝐹")
-    ("mathalpha" "\\mitG" #X1D43A "𝐺")
-    ("mathalpha" "\\mitGamma" #X1D6E4 "𝛤")
-    ("mathalpha" "\\mitH" #X1D43B "𝐻")
-    ("mathalpha" "\\mitI" #X1D43C "𝐼")
-    ("mathalpha" "\\mitIota" #X1D6EA "𝛪")
-    ("mathalpha" "\\mitJ" #X1D43D "𝐽")
-    ("mathalpha" "\\mitK" #X1D43E "𝐾")
-    ("mathalpha" "\\mitKappa" #X1D6EB "𝛫")
-    ("mathalpha" "\\mitL" #X1D43F "𝐿")
-    ("mathalpha" "\\mitLambda" #X1D6EC "𝛬")
-    ("mathalpha" "\\mitM" #X1D440 "𝑀")
-    ("mathalpha" "\\mitMu" #X1D6ED "𝛭")
-    ("mathalpha" "\\mitN" #X1D441 "𝑁")
-    ("mathalpha" "\\mitNu" #X1D6EE "𝛮")
-    ("mathalpha" "\\mitO" #X1D442 "𝑂")
-    ("mathalpha" "\\mitOmega" #X1D6FA "𝛺")
-    ("mathalpha" "\\mitOmicron" #X1D6F0 "𝛰")
-    ("mathalpha" "\\mitP" #X1D443 "𝑃")
-    ("mathalpha" "\\mitPhi" #X1D6F7 "𝛷")
-    ("mathalpha" "\\mitPi" #X1D6F1 "𝛱")
-    ("mathalpha" "\\mitPsi" #X1D6F9 "𝛹")
-    ("mathalpha" "\\mitQ" #X1D444 "𝑄")
-    ("mathalpha" "\\mitR" #X1D445 "𝑅")
-    ("mathalpha" "\\mitRho" #X1D6F2 "𝛲")
-    ("mathalpha" "\\mitS" #X1D446 "𝑆")
-    ("mathalpha" "\\mitSigma" #X1D6F4 "𝛴")
-    ("mathalpha" "\\mitT" #X1D447 "𝑇")
-    ("mathalpha" "\\mitTau" #X1D6F5 "𝛵")
-    ("mathalpha" "\\mitTheta" #X1D6E9 "𝛩")
-    ("mathalpha" "\\mitU" #X1D448 "𝑈")
-    ("mathalpha" "\\mitUpsilon" #X1D6F6 "𝛶")
-    ("mathalpha" "\\mitV" #X1D449 "𝑉")
-    ("mathalpha" "\\mitW" #X1D44A "𝑊")
-    ("mathalpha" "\\mitX" #X1D44B "𝑋")
-    ("mathalpha" "\\mitXi" #X1D6EF "𝛯")
-    ("mathalpha" "\\mitY" #X1D44C "𝑌")
-    ("mathalpha" "\\mitZ" #X1D44D "𝑍")
-    ("mathalpha" "\\mitZeta" #X1D6E7 "𝛧")
-    ("mathalpha" "\\mita" #X1D44E "𝑎")
-    ("mathalpha" "\\mitalpha" #X1D6FC "𝛼")
-    ("mathalpha" "\\mitb" #X1D44F "𝑏")
-    ("mathalpha" "\\mitbeta" #X1D6FD "𝛽")
-    ("mathalpha" "\\mitc" #X1D450 "𝑐")
-    ("mathalpha" "\\mitchi" #X1D712 "𝜒")
-    ("mathalpha" "\\mitd" #X1D451 "𝑑")
-    ("mathalpha" "\\mitdelta" #X1D6FF "𝛿")
-    ("mathalpha" "\\mite" #X1D452 "𝑒")
-    ("mathalpha" "\\mitepsilon" #X1D700 "𝜀")
-    ("mathalpha" "\\miteta" #X1D702 "𝜂")
-    ("mathalpha" "\\mitf" #X1D453 "𝑓")
-    ("mathalpha" "\\mitg" #X1D454 "𝑔")
-    ("mathalpha" "\\mitgamma" #X1D6FE "𝛾")
-    ("mathalpha" "\\miti" #X1D456 "𝑖")
-    ("mathalpha" "\\mitiota" #X1D704 "𝜄")
-    ("mathalpha" "\\mitj" #X1D457 "𝑗")
-    ("mathalpha" "\\mitk" #X1D458 "𝑘")
-    ("mathalpha" "\\mitkappa" #X1D705 "𝜅")
-    ("mathalpha" "\\mitl" #X1D459 "𝑙")
-    ("mathalpha" "\\mitlambda" #X1D706 "𝜆")
-    ("mathalpha" "\\mitm" #X1D45A "𝑚")
-    ("mathalpha" "\\mitmu" #X1D707 "𝜇")
-    ("mathalpha" "\\mitn" #X1D45B "𝑛")
-    ("mathalpha" "\\mitnu" #X1D708 "𝜈")
-    ("mathalpha" "\\mito" #X1D45C "𝑜")
-    ("mathalpha" "\\mitomega" #X1D714 "𝜔")
-    ("mathalpha" "\\mitomicron" #X1D70A "𝜊")
-    ("mathalpha" "\\mitp" #X1D45D "𝑝")
-    ("mathalpha" "\\mitphi" #X1D711 "𝜑")
-    ("mathalpha" "\\mitpi" #X1D70B "𝜋")
-    ("mathalpha" "\\mitpsi" #X1D713 "𝜓")
-    ("mathalpha" "\\mitq" #X1D45E "𝑞")
-    ("mathalpha" "\\mitr" #X1D45F "𝑟")
-    ("mathalpha" "\\mitrho" #X1D70C "𝜌")
-    ("mathalpha" "\\mits" #X1D460 "𝑠")
-    ("mathalpha" "\\mitsansA" #X1D608 "𝘈")
-    ("mathalpha" "\\mitsansB" #X1D609 "𝘉")
-    ("mathalpha" "\\mitsansC" #X1D60A "𝘊")
-    ("mathalpha" "\\mitsansD" #X1D60B "𝘋")
-    ("mathalpha" "\\mitsansE" #X1D60C "𝘌")
-    ("mathalpha" "\\mitsansF" #X1D60D "𝘍")
-    ("mathalpha" "\\mitsansG" #X1D60E "𝘎")
-    ("mathalpha" "\\mitsansH" #X1D60F "𝘏")
-    ("mathalpha" "\\mitsansI" #X1D610 "𝘐")
-    ("mathalpha" "\\mitsansJ" #X1D611 "𝘑")
-    ("mathalpha" "\\mitsansK" #X1D612 "𝘒")
-    ("mathalpha" "\\mitsansL" #X1D613 "𝘓")
-    ("mathalpha" "\\mitsansM" #X1D614 "𝘔")
-    ("mathalpha" "\\mitsansN" #X1D615 "𝘕")
-    ("mathalpha" "\\mitsansO" #X1D616 "𝘖")
-    ("mathalpha" "\\mitsansP" #X1D617 "𝘗")
-    ("mathalpha" "\\mitsansQ" #X1D618 "𝘘")
-    ("mathalpha" "\\mitsansR" #X1D619 "𝘙")
-    ("mathalpha" "\\mitsansS" #X1D61A "𝘚")
-    ("mathalpha" "\\mitsansT" #X1D61B "𝘛")
-    ("mathalpha" "\\mitsansU" #X1D61C "𝘜")
-    ("mathalpha" "\\mitsansV" #X1D61D "𝘝")
-    ("mathalpha" "\\mitsansW" #X1D61E "𝘞")
-    ("mathalpha" "\\mitsansX" #X1D61F "𝘟")
-    ("mathalpha" "\\mitsansY" #X1D620 "𝘠")
-    ("mathalpha" "\\mitsansZ" #X1D621 "𝘡")
-    ("mathalpha" "\\mitsansa" #X1D622 "𝘢")
-    ("mathalpha" "\\mitsansb" #X1D623 "𝘣")
-    ("mathalpha" "\\mitsansc" #X1D624 "𝘤")
-    ("mathalpha" "\\mitsansd" #X1D625 "𝘥")
-    ("mathalpha" "\\mitsanse" #X1D626 "𝘦")
-    ("mathalpha" "\\mitsansf" #X1D627 "𝘧")
-    ("mathalpha" "\\mitsansg" #X1D628 "𝘨")
-    ("mathalpha" "\\mitsansh" #X1D629 "𝘩")
-    ("mathalpha" "\\mitsansi" #X1D62A "𝘪")
-    ("mathalpha" "\\mitsansj" #X1D62B "𝘫")
-    ("mathalpha" "\\mitsansk" #X1D62C "𝘬")
-    ("mathalpha" "\\mitsansl" #X1D62D "𝘭")
-    ("mathalpha" "\\mitsansm" #X1D62E "𝘮")
-    ("mathalpha" "\\mitsansn" #X1D62F "𝘯")
-    ("mathalpha" "\\mitsanso" #X1D630 "𝘰")
-    ("mathalpha" "\\mitsansp" #X1D631 "𝘱")
-    ("mathalpha" "\\mitsansq" #X1D632 "𝘲")
-    ("mathalpha" "\\mitsansr" #X1D633 "𝘳")
-    ("mathalpha" "\\mitsanss" #X1D634 "𝘴")
-    ("mathalpha" "\\mitsanst" #X1D635 "𝘵")
-    ("mathalpha" "\\mitsansu" #X1D636 "𝘶")
-    ("mathalpha" "\\mitsansv" #X1D637 "𝘷")
-    ("mathalpha" "\\mitsansw" #X1D638 "𝘸")
-    ("mathalpha" "\\mitsansx" #X1D639 "𝘹")
-    ("mathalpha" "\\mitsansy" #X1D63A "𝘺")
-    ("mathalpha" "\\mitsansz" #X1D63B "𝘻")
-    ("mathalpha" "\\mitsigma" #X1D70E "𝜎")
-    ("mathalpha" "\\mitt" #X1D461 "𝑡")
-    ("mathalpha" "\\mittau" #X1D70F "𝜏")
-    ("mathalpha" "\\mittheta" #X1D703 "𝜃")
-    ("mathalpha" "\\mitu" #X1D462 "𝑢")
-    ("mathalpha" "\\mitupsilon" #X1D710 "𝜐")
-    ("mathalpha" "\\mitv" #X1D463 "𝑣")
-    ("mathalpha" "\\mitvarTheta" #X1D6F3 "𝛳")
-    ("mathalpha" "\\mitvarepsilon" #X1D716 "𝜖")
-    ("mathalpha" "\\mitvarkappa" #X1D718 "𝜘")
-    ("mathalpha" "\\mitvarphi" #X1D719 "𝜙")
-    ("mathalpha" "\\mitvarpi" #X1D71B "𝜛")
-    ("mathalpha" "\\mitvarrho" #X1D71A "𝜚")
-    ("mathalpha" "\\mitvarsigma" #X1D70D "𝜍")
-    ("mathalpha" "\\mitvartheta" #X1D717 "𝜗")
-    ("mathalpha" "\\mitw" #X1D464 "𝑤")
-    ("mathalpha" "\\mitx" #X1D465 "𝑥")
-    ("mathalpha" "\\mitxi" #X1D709 "𝜉")
-    ("mathalpha" "\\mity" #X1D466 "𝑦")
-    ("mathalpha" "\\mitz" #X1D467 "𝑧")
-    ("mathalpha" "\\mitzeta" #X1D701 "𝜁")
-    ("mathalpha" "\\msansA" #X1D5A0 "𝖠")
-    ("mathalpha" "\\msansB" #X1D5A1 "𝖡")
-    ("mathalpha" "\\msansC" #X1D5A2 "𝖢")
-    ("mathalpha" "\\msansD" #X1D5A3 "𝖣")
-    ("mathalpha" "\\msansE" #X1D5A4 "𝖤")
-    ("mathalpha" "\\msansF" #X1D5A5 "𝖥")
-    ("mathalpha" "\\msansG" #X1D5A6 "𝖦")
-    ("mathalpha" "\\msansH" #X1D5A7 "𝖧")
-    ("mathalpha" "\\msansI" #X1D5A8 "𝖨")
-    ("mathalpha" "\\msansJ" #X1D5A9 "𝖩")
-    ("mathalpha" "\\msansK" #X1D5AA "𝖪")
-    ("mathalpha" "\\msansL" #X1D5AB "𝖫")
-    ("mathalpha" "\\msansM" #X1D5AC "𝖬")
-    ("mathalpha" "\\msansN" #X1D5AD "𝖭")
-    ("mathalpha" "\\msansO" #X1D5AE "𝖮")
-    ("mathalpha" "\\msansP" #X1D5AF "𝖯")
-    ("mathalpha" "\\msansQ" #X1D5B0 "𝖰")
-    ("mathalpha" "\\msansR" #X1D5B1 "𝖱")
-    ("mathalpha" "\\msansS" #X1D5B2 "𝖲")
-    ("mathalpha" "\\msansT" #X1D5B3 "𝖳")
-    ("mathalpha" "\\msansU" #X1D5B4 "𝖴")
-    ("mathalpha" "\\msansV" #X1D5B5 "𝖵")
-    ("mathalpha" "\\msansW" #X1D5B6 "𝖶")
-    ("mathalpha" "\\msansX" #X1D5B7 "𝖷")
-    ("mathalpha" "\\msansY" #X1D5B8 "𝖸")
-    ("mathalpha" "\\msansZ" #X1D5B9 "𝖹")
-    ("mathalpha" "\\msansa" #X1D5BA "𝖺")
-    ("mathalpha" "\\msansb" #X1D5BB "𝖻")
-    ("mathalpha" "\\msansc" #X1D5BC "𝖼")
-    ("mathalpha" "\\msansd" #X1D5BD "𝖽")
-    ("mathalpha" "\\msanse" #X1D5BE "𝖾")
-    ("mathalpha" "\\msansf" #X1D5BF "𝖿")
-    ("mathalpha" "\\msansg" #X1D5C0 "𝗀")
-    ("mathalpha" "\\msansh" #X1D5C1 "𝗁")
-    ("mathalpha" "\\msansi" #X1D5C2 "𝗂")
-    ("mathalpha" "\\msansj" #X1D5C3 "𝗃")
-    ("mathalpha" "\\msansk" #X1D5C4 "𝗄")
-    ("mathalpha" "\\msansl" #X1D5C5 "𝗅")
-    ("mathalpha" "\\msansm" #X1D5C6 "𝗆")
-    ("mathalpha" "\\msansn" #X1D5C7 "𝗇")
-    ("mathalpha" "\\msanso" #X1D5C8 "𝗈")
-    ("mathalpha" "\\msansp" #X1D5C9 "𝗉")
-    ("mathalpha" "\\msansq" #X1D5CA "𝗊")
-    ("mathalpha" "\\msansr" #X1D5CB "𝗋")
-    ("mathalpha" "\\msanss" #X1D5CC "𝗌")
-    ("mathalpha" "\\msanst" #X1D5CD "𝗍")
-    ("mathalpha" "\\msansu" #X1D5CE "𝗎")
-    ("mathalpha" "\\msansv" #X1D5CF "𝗏")
-    ("mathalpha" "\\msansw" #X1D5D0 "𝗐")
-    ("mathalpha" "\\msansx" #X1D5D1 "𝗑")
-    ("mathalpha" "\\msansy" #X1D5D2 "𝗒")
-    ("mathalpha" "\\msansz" #X1D5D3 "𝗓")
-    ("mathalpha" "\\mscrA" #X1D49C "𝒜")
-    ("mathalpha" "\\mscrB" #X0212C "ℬ")
-    ("mathalpha" "\\mscrC" #X1D49E "𝒞")
-    ("mathalpha" "\\mscrD" #X1D49F "𝒟")
-    ("mathalpha" "\\mscrE" #X02130 "ℰ")
-    ("mathalpha" "\\mscrF" #X02131 "ℱ")
-    ("mathalpha" "\\mscrG" #X1D4A2 "𝒢")
-    ("mathalpha" "\\mscrH" #X0210B "ℋ")
-    ("mathalpha" "\\mscrI" #X02110 "ℐ")
-    ("mathalpha" "\\mscrJ" #X1D4A5 "𝒥")
-    ("mathalpha" "\\mscrK" #X1D4A6 "𝒦")
-    ("mathalpha" "\\mscrL" #X02112 "ℒ")
-    ("mathalpha" "\\mscrM" #X02133 "ℳ")
-    ("mathalpha" "\\mscrN" #X1D4A9 "𝒩")
-    ("mathalpha" "\\mscrO" #X1D4AA "𝒪")
-    ("mathalpha" "\\mscrP" #X1D4AB "𝒫")
-    ("mathalpha" "\\mscrQ" #X1D4AC "𝒬")
-    ("mathalpha" "\\mscrR" #X0211B "ℛ")
-    ("mathalpha" "\\mscrS" #X1D4AE "𝒮")
-    ("mathalpha" "\\mscrT" #X1D4AF "𝒯")
-    ("mathalpha" "\\mscrU" #X1D4B0 "𝒰")
-    ("mathalpha" "\\mscrV" #X1D4B1 "𝒱")
-    ("mathalpha" "\\mscrW" #X1D4B2 "𝒲")
-    ("mathalpha" "\\mscrX" #X1D4B3 "𝒳")
-    ("mathalpha" "\\mscrY" #X1D4B4 "𝒴")
-    ("mathalpha" "\\mscrZ" #X1D4B5 "𝒵")
-    ("mathalpha" "\\mscra" #X1D4B6 "𝒶")
-    ("mathalpha" "\\mscrb" #X1D4B7 "𝒷")
-    ("mathalpha" "\\mscrc" #X1D4B8 "𝒸")
-    ("mathalpha" "\\mscrd" #X1D4B9 "𝒹")
-    ("mathalpha" "\\mscre" #X0212F "ℯ")
-    ("mathalpha" "\\mscrf" #X1D4BB "𝒻")
-    ("mathalpha" "\\mscrg" #X0210A "ℊ")
-    ("mathalpha" "\\mscrh" #X1D4BD "𝒽")
-    ("mathalpha" "\\mscri" #X1D4BE "𝒾")
-    ("mathalpha" "\\mscrj" #X1D4BF "𝒿")
-    ("mathalpha" "\\mscrk" #X1D4C0 "𝓀")
-    ("mathalpha" "\\mscrl" #X1D4C1 "𝓁")
-    ("mathalpha" "\\mscrm" #X1D4C2 "𝓂")
-    ("mathalpha" "\\mscrn" #X1D4C3 "𝓃")
-    ("mathalpha" "\\mscro" #X02134 "ℴ")
-    ("mathalpha" "\\mscrp" #X1D4C5 "𝓅")
-    ("mathalpha" "\\mscrq" #X1D4C6 "𝓆")
-    ("mathalpha" "\\mscrr" #X1D4C7 "𝓇")
-    ("mathalpha" "\\mscrs" #X1D4C8 "𝓈")
-    ("mathalpha" "\\mscrt" #X1D4C9 "𝓉")
-    ("mathalpha" "\\mscru" #X1D4CA "𝓊")
-    ("mathalpha" "\\mscrv" #X1D4CB "𝓋")
-    ("mathalpha" "\\mscrw" #X1D4CC "𝓌")
-    ("mathalpha" "\\mscrx" #X1D4CD "𝓍")
-    ("mathalpha" "\\mscry" #X1D4CE "𝓎")
-    ("mathalpha" "\\mscrz" #X1D4CF "𝓏")
-    ("mathalpha" "\\mttA" #X1D670 "𝙰")
-    ("mathalpha" "\\mttB" #X1D671 "𝙱")
-    ("mathalpha" "\\mttC" #X1D672 "𝙲")
-    ("mathalpha" "\\mttD" #X1D673 "𝙳")
-    ("mathalpha" "\\mttE" #X1D674 "𝙴")
-    ("mathalpha" "\\mttF" #X1D675 "𝙵")
-    ("mathalpha" "\\mttG" #X1D676 "𝙶")
-    ("mathalpha" "\\mttH" #X1D677 "𝙷")
-    ("mathalpha" "\\mttI" #X1D678 "𝙸")
-    ("mathalpha" "\\mttJ" #X1D679 "𝙹")
-    ("mathalpha" "\\mttK" #X1D67A "𝙺")
-    ("mathalpha" "\\mttL" #X1D67B "𝙻")
-    ("mathalpha" "\\mttM" #X1D67C "𝙼")
-    ("mathalpha" "\\mttN" #X1D67D "𝙽")
-    ("mathalpha" "\\mttO" #X1D67E "𝙾")
-    ("mathalpha" "\\mttP" #X1D67F "𝙿")
-    ("mathalpha" "\\mttQ" #X1D680 "𝚀")
-    ("mathalpha" "\\mttR" #X1D681 "𝚁")
-    ("mathalpha" "\\mttS" #X1D682 "𝚂")
-    ("mathalpha" "\\mttT" #X1D683 "𝚃")
-    ("mathalpha" "\\mttU" #X1D684 "𝚄")
-    ("mathalpha" "\\mttV" #X1D685 "𝚅")
-    ("mathalpha" "\\mttW" #X1D686 "𝚆")
-    ("mathalpha" "\\mttX" #X1D687 "𝚇")
-    ("mathalpha" "\\mttY" #X1D688 "𝚈")
-    ("mathalpha" "\\mttZ" #X1D689 "𝚉")
-    ("mathalpha" "\\mtta" #X1D68A "𝚊")
-    ("mathalpha" "\\mttb" #X1D68B "𝚋")
-    ("mathalpha" "\\mttc" #X1D68C "𝚌")
-    ("mathalpha" "\\mttd" #X1D68D "𝚍")
-    ("mathalpha" "\\mtte" #X1D68E "𝚎")
-    ("mathalpha" "\\mttf" #X1D68F "𝚏")
-    ("mathalpha" "\\mttg" #X1D690 "𝚐")
-    ("mathalpha" "\\mtth" #X1D691 "𝚑")
-    ("mathalpha" "\\mtti" #X1D692 "𝚒")
-    ("mathalpha" "\\mttj" #X1D693 "𝚓")
-    ("mathalpha" "\\mttk" #X1D694 "𝚔")
-    ("mathalpha" "\\mttl" #X1D695 "𝚕")
-    ("mathalpha" "\\mttm" #X1D696 "𝚖")
-    ("mathalpha" "\\mttn" #X1D697 "𝚗")
-    ("mathalpha" "\\mtto" #X1D698 "𝚘")
-    ("mathalpha" "\\mttp" #X1D699 "𝚙")
-    ("mathalpha" "\\mttq" #X1D69A "𝚚")
-    ("mathalpha" "\\mttr" #X1D69B "𝚛")
-    ("mathalpha" "\\mtts" #X1D69C "𝚜")
-    ("mathalpha" "\\mttt" #X1D69D "𝚝")
-    ("mathalpha" "\\mttu" #X1D69E "𝚞")
-    ("mathalpha" "\\mttv" #X1D69F "𝚟")
-    ("mathalpha" "\\mttw" #X1D6A0 "𝚠")
-    ("mathalpha" "\\mttx" #X1D6A1 "𝚡")
-    ("mathalpha" "\\mtty" #X1D6A2 "𝚢")
-    ("mathalpha" "\\mttz" #X1D6A3 "𝚣")
-    ("mathalpha" "\\period" #X0002E ".")
-    ("mathalpha" "\\turnediota" #X02129 "℩")
-    ("mathalpha" "\\upAlpha" #X00391 "Α")
-    ("mathalpha" "\\upBeta" #X00392 "Β")
-    ("mathalpha" "\\upChi" #X003A7 "Χ")
-    ("mathalpha" "\\upDelta" #X00394 "Δ")
-    ("mathalpha" "\\upDigamma" #X003DC "Ϝ")
-    ("mathalpha" "\\upEpsilon" #X00395 "Ε")
-    ("mathalpha" "\\upEta" #X00397 "Η")
-    ("mathalpha" "\\upGamma" #X00393 "Γ")
-    ("mathalpha" "\\upIota" #X00399 "Ι")
-    ("mathalpha" "\\upKappa" #X0039A "Κ")
-    ("mathalpha" "\\upKoppa" #X003DE "Ϟ")
-    ("mathalpha" "\\upLambda" #X0039B "Λ")
-    ("mathalpha" "\\upMu" #X0039C "Μ")
-    ("mathalpha" "\\upNu" #X0039D "Ν")
-    ("mathalpha" "\\upOmega" #X003A9 "Ω")
-    ("mathalpha" "\\upOmicron" #X0039F "Ο")
-    ("mathalpha" "\\upPhi" #X003A6 "Φ")
-    ("mathalpha" "\\upPi" #X003A0 "Π")
-    ("mathalpha" "\\upPsi" #X003A8 "Ψ")
-    ("mathalpha" "\\upRho" #X003A1 "Ρ")
-    ("mathalpha" "\\upSampi" #X003E0 "Ϡ")
-    ("mathalpha" "\\upSigma" #X003A3 "Σ")
-    ("mathalpha" "\\upStigma" #X003DA "Ϛ")
-    ("mathalpha" "\\upTau" #X003A4 "Τ")
-    ("mathalpha" "\\upTheta" #X00398 "Θ")
-    ("mathalpha" "\\upUpsilon" #X003A5 "Υ")
-    ("mathalpha" "\\upUpsilon" #X003D2 "ϒ")
-    ("mathalpha" "\\upXi" #X0039E "Ξ")
-    ("mathalpha" "\\upZeta" #X00396 "Ζ")
-    ("mathalpha" "\\upalpha" #X003B1 "α")
-    ("mathalpha" "\\upbeta" #X003B2 "β")
-    ("mathalpha" "\\upchi" #X003C7 "χ")
-    ("mathalpha" "\\updelta" #X003B4 "δ")
-    ("mathalpha" "\\updigamma" #X003DD "ϝ")
-    ("mathalpha" "\\upepsilon" #X003B5 "ε")
-    ("mathalpha" "\\upeta" #X003B7 "η")
-    ("mathalpha" "\\upgamma" #X003B3 "γ")
-    ("mathalpha" "\\upiota" #X003B9 "ι")
-    ("mathalpha" "\\upkappa" #X003BA "κ")
-    ("mathalpha" "\\upkoppa" #X003DF "ϟ")
-    ("mathalpha" "\\uplambda" #X003BB "λ")
-    ("mathalpha" "\\upmu" #X003BC "μ")
-    ("mathalpha" "\\upnu" #X003BD "ν")
-    ("mathalpha" "\\upomega" #X003C9 "ω")
-    ("mathalpha" "\\upomicron" #X003BF "ο")
-    ("mathalpha" "\\upphi" #X003D5 "ϕ")
-    ("mathalpha" "\\uppi" #X003C0 "π")
-    ("mathalpha" "\\uppsi" #X003C8 "ψ")
-    ("mathalpha" "\\uprho" #X003C1 "ρ")
-    ("mathalpha" "\\upsampi" #X003E1 "ϡ")
-    ("mathalpha" "\\upsigma" #X003C3 "σ")
-    ("mathalpha" "\\upstigma" #X003DB "ϛ")
-    ("mathalpha" "\\uptau" #X003C4 "τ")
-    ("mathalpha" "\\uptheta" #X003B8 "θ")
-    ("mathalpha" "\\upupsilon" #X003C5 "υ")
-    ("mathalpha" "\\upvarTheta" #X003F4 "ϴ")
-    ("mathalpha" "\\upvarbeta" #X003D0 "ϐ")
-    ("mathalpha" "\\upvarepsilon" #X003F5 "ϵ")
-    ("mathalpha" "\\upvarkappa" #X003F0 "ϰ")
-    ("mathalpha" "\\upvarphi" #X003C6 "φ")
-    ("mathalpha" "\\upvarpi" #X003D6 "ϖ")
-    ("mathalpha" "\\upvarrho" #X003F1 "ϱ")
-    ("mathalpha" "\\upvarsigma" #X003C2 "ς")
-    ("mathalpha" "\\upvartheta" #X003D1 "ϑ")
-    ("mathalpha" "\\upxi" #X003BE "ξ")
-    ("mathalpha" "\\upzeta" #X003B6 "ζ")
-    ("mathalpha" "\\wp" #X02118 "℘")
-    ("mathbin" "\\Cap" #X022D2 "⋒")
-    ("mathbin" "\\Cup" #X022D3 "⋓")
-    ("mathbin" "\\Otimes" #X02A37 "⨷")
-    ("mathbin" "\\Sqcap" #X02A4E "⩎")
-    ("mathbin" "\\Sqcup" #X02A4F "⩏")
-    ("mathbin" "\\Vee" #X02A54 "⩔")
-    ("mathbin" "\\Wedge" #X02A53 "⩓")
-    ("mathbin" "\\amalg" #X02A3F "⨿")
-    ("mathbin" "\\ast" #X02217 "∗")
-    ("mathbin" "\\barcap" #X02A43 "⩃")
-    ("mathbin" "\\barcup" #X02A42 "⩂")
-    ("mathbin" "\\barvee" #X022BD "⊽")
-    ("mathbin" "\\barwedge" #X022BC "⊼")
-    ("mathbin" "\\bigslopedvee" #X02A57 "⩗")
-    ("mathbin" "\\bigslopedwedge" #X02A58 "⩘")
-    ("mathbin" "\\bigtriangledown" #X025BD "▽")
-    ("mathbin" "\\bigtriangleup" #X025B3 "△")
-    ("mathbin" "\\blackhourglass" #X029D7 "⧗")
-    ("mathbin" "\\blacktriangle" #X025B4 "▴")
-    ("mathbin" "\\blacktriangledown" #X025BE "▾")
-    ("mathbin" "\\blacktriangleleft" #X025C0 "◀")
-    ("mathbin" "\\blacktriangleright" #X025B6 "▶")
-    ("mathbin" "\\boxast" #X029C6 "⧆")
-    ("mathbin" "\\boxbar" #X025EB "◫")
-    ("mathbin" "\\boxbox" #X029C8 "⧈")
-    ("mathbin" "\\boxbslash" #X029C5 "⧅")
-    ("mathbin" "\\boxcircle" #X029C7 "⧇")
-    ("mathbin" "\\boxdiag" #X029C4 "⧄")
-    ("mathbin" "\\boxdot" #X022A1 "⊡")
-    ("mathbin" "\\boxminus" #X0229F "⊟")
-    ("mathbin" "\\boxplus" #X0229E "⊞")
-    ("mathbin" "\\boxtimes" #X022A0 "⊠")
-    ("mathbin" "\\btimes" #X02A32 "⨲")
-    ("mathbin" "\\cap" #X02229 "∩")
-    ("mathbin" "\\capbarcup" #X02A49 "⩉")
-    ("mathbin" "\\capdot" #X02A40 "⩀")
-    ("mathbin" "\\capovercup" #X02A47 "⩇")
-    ("mathbin" "\\capwedge" #X02A44 "⩄")
-    ("mathbin" "\\cdot" #X022C5 "⋅")
-    ("mathbin" "\\cdotp" #X000B7 "·")
-    ("mathbin" "\\circledast" #X0229B "⊛")
-    ("mathbin" "\\circledcirc" #X0229A "⊚")
-    ("mathbin" "\\circleddash" #X0229D "⊝")
-    ("mathbin" "\\circledequal" #X0229C "⊜")
-    ("mathbin" "\\circledparallel" #X029B7 "⦷")
-    ("mathbin" "\\circledvert" #X029B6 "⦶")
-    ("mathbin" "\\circlehbar" #X029B5 "⦵")
-    ("mathbin" "\\closedvarcap" #X02A4D "⩍")
-    ("mathbin" "\\closedvarcup" #X02A4C "⩌")
-    ("mathbin" "\\closedvarcupsmashprod" #X02A50 "⩐")
-    ("mathbin" "\\commaminus" #X02A29 "⨩")
-    ("mathbin" "\\concavediamond" #X027E1 "⟡")
-    ("mathbin" "\\concavediamondtickleft" #X027E2 "⟢")
-    ("mathbin" "\\concavediamondtickright" #X027E3 "⟣")
-    ("mathbin" "\\cup" #X0222A "∪")
-    ("mathbin" "\\cupbarcap" #X02A48 "⩈")
-    ("mathbin" "\\cupdot" #X0228D "⊍")
-    ("mathbin" "\\cupleftarrow" #X0228C "⊌")
-    ("mathbin" "\\cupovercap" #X02A46 "⩆")
-    ("mathbin" "\\cupvee" #X02A45 "⩅")
-    ("mathbin" "\\curlyvee" #X022CE "⋎")
-    ("mathbin" "\\curlywedge" #X022CF "⋏")
-    ("mathbin" "\\dagger" #X02020 "†")
-    ("mathbin" "\\ddagger" #X02021 "‡")
-    ("mathbin" "\\div" #X000F7 "÷")
-    ("mathbin" "\\divideontimes" #X022C7 "⋇")
-    ("mathbin" "\\divslash" #X02215 "∕")
-    ("mathbin" "\\dotminus" #X02238 "∸")
-    ("mathbin" "\\dotplus" #X02214 "∔")
-    ("mathbin" "\\dottimes" #X02A30 "⨰")
-    ("mathbin" "\\doublebarvee" #X02A62 "⩢")
-    ("mathbin" "\\doublebarwedge" #X02A5E "⩞")
-    ("mathbin" "\\doubleplus" #X029FA "⧺")
-    ("mathbin" "\\dsol" #X029F6 "⧶")
-    ("mathbin" "\\dsub" #X02A64 "⩤")
-    ("mathbin" "\\eqqplus" #X02A71 "⩱")
-    ("mathbin" "\\fcmp" #X02A3E "⨾")
-    ("mathbin" "\\fracslash" #X02044 "⁄")
-    ("mathbin" "\\hourglass" #X029D6 "⧖")
-    ("mathbin" "\\intercal" #X022BA "⊺")
-    ("mathbin" "\\interleave" #X02AF4 "⫴")
-    ("mathbin" "\\intprod" #X02A3C "⨼")
-    ("mathbin" "\\intprodr" #X02A3D "⨽")
-    ("mathbin" "\\invlazys" #X0223E "∾")
-    ("mathbin" "\\leftthreetimes" #X022CB "⋋")
-    ("mathbin" "\\lozengeminus" #X027E0 "⟠")
-    ("mathbin" "\\ltimes" #X022C9 "⋉")
-    ("mathbin" "\\mdlgblklozenge" #X029EB "⧫")
-    ("mathbin" "\\mdlgwhtcircle" #X025CB "○")
-    ("mathbin" "\\midbarvee" #X02A5D "⩝")
-    ("mathbin" "\\midbarwedge" #X02A5C "⩜")
-    ("mathbin" "\\minus" #X02212 "−")
-    ("mathbin" "\\minusdot" #X02A2A "⨪")
-    ("mathbin" "\\minusfdots" #X02A2B "⨫")
-    ("mathbin" "\\minusrdots" #X02A2C "⨬")
-    ("mathbin" "\\mp" #X02213 "∓")
-    ("mathbin" "\\nhVvert" #X02AF5 "⫵")
-    ("mathbin" "\\obar" #X0233D "⌽")
-    ("mathbin" "\\obslash" #X029B8 "⦸")
-    ("mathbin" "\\odiv" #X02A38 "⨸")
-    ("mathbin" "\\odot" #X02299 "⊙")
-    ("mathbin" "\\ogreaterthan" #X029C1 "⧁")
-    ("mathbin" "\\olessthan" #X029C0 "⧀")
-    ("mathbin" "\\ominus" #X02296 "⊖")
-    ("mathbin" "\\operp" #X029B9 "⦹")
-    ("mathbin" "\\oplus" #X02295 "⊕")
-    ("mathbin" "\\opluslhrim" #X02A2D "⨭")
-    ("mathbin" "\\oplusrhrim" #X02A2E "⨮")
-    ("mathbin" "\\oslash" #X02298 "⊘")
-    ("mathbin" "\\otimes" #X02297 "⊗")
-    ("mathbin" "\\otimeshat" #X02A36 "⨶")
-    ("mathbin" "\\otimeslhrim" #X02A34 "⨴")
-    ("mathbin" "\\otimesrhrim" #X02A35 "⨵")
-    ("mathbin" "\\plus" #X0002B "+")
-    ("mathbin" "\\plusdot" #X02A25 "⨥")
-    ("mathbin" "\\pluseqq" #X02A72 "⩲")
-    ("mathbin" "\\plushat" #X02A23 "⨣")
-    ("mathbin" "\\plussim" #X02A26 "⨦")
-    ("mathbin" "\\plussubtwo" #X02A27 "⨧")
-    ("mathbin" "\\plustrif" #X02A28 "⨨")
-    ("mathbin" "\\pm" #X000B1 "±")
-    ("mathbin" "\\rightthreetimes" #X022CC "⋌")
-    ("mathbin" "\\ringplus" #X02A22 "⨢")
-    ("mathbin" "\\rsolbar" #X029F7 "⧷")
-    ("mathbin" "\\rsub" #X02A65 "⩥")
-    ("mathbin" "\\rtimes" #X022CA "⋊")
-    ("mathbin" "\\setminus" #X029F5 "⧵")
-    ("mathbin" "\\shuffle" #X029E2 "⧢")
-    ("mathbin" "\\simplus" #X02A24 "⨤")
-    ("mathbin" "\\smallblacktriangleleft" #X025C2 "◂")
-    ("mathbin" "\\smallblacktriangleright" #X025B8 "▸")
-    ("mathbin" "\\smallsetminus" #X02216 "∖")
-    ("mathbin" "\\smalltriangleleft" #X025C3 "◃")
-    ("mathbin" "\\smalltriangleright" #X025B9 "▹")
-    ("mathbin" "\\smashtimes" #X02A33 "⨳")
-    ("mathbin" "\\smblkcircle" #X02022 "•")
-    ("mathbin" "\\smwhtdiamond" #X022C4 "⋄")
-    ("mathbin" "\\sqcap" #X02293 "⊓")
-    ("mathbin" "\\sqcup" #X02294 "⊔")
-    ("mathbin" "\\sslash" #X02AFD "⫽")
-    ("mathbin" "\\star" #X022C6 "⋆")
-    ("mathbin" "\\talloblong" #X02AFE "⫾")
-    ("mathbin" "\\threedotcolon" #X02AF6 "⫶")
-    ("mathbin" "\\tieconcat" #X02040 "⁀")
-    ("mathbin" "\\times" #X000D7 "×")
-    ("mathbin" "\\timesbar" #X02A31 "⨱")
-    ("mathbin" "\\tminus" #X029FF "⧿")
-    ("mathbin" "\\tplus" #X029FE "⧾")
-    ("mathbin" "\\triangledown" #X025BF "▿")
-    ("mathbin" "\\triangleleft" #X025C1 "◁")
-    ("mathbin" "\\triangleminus" #X02A3A "⨺")
-    ("mathbin" "\\triangleplus" #X02A39 "⨹")
-    ("mathbin" "\\triangleright" #X025B7 "▷")
-    ("mathbin" "\\triangleserifs" #X029CD "⧍")
-    ("mathbin" "\\triangletimes" #X02A3B "⨻")
-    ("mathbin" "\\tripleplus" #X029FB "⧻")
-    ("mathbin" "\\trslash" #X02AFB "⫻")
-    ("mathbin" "\\twocaps" #X02A4B "⩋")
-    ("mathbin" "\\twocups" #X02A4A "⩊")
-    ("mathbin" "\\typecolon" #X02982 "⦂")
-    ("mathbin" "\\uminus" #X02A41 "⩁")
-    ("mathbin" "\\upand" #X0214B "⅋")
-    ("mathbin" "\\uplus" #X0228E "⊎")
-    ("mathbin" "\\varbarwedge" #X02305 "⌅")
-    ("mathbin" "\\vardoublebarwedge" #X02306 "⌆")
-    ("mathbin" "\\vartriangle" #X025B5 "▵")
-    ("mathbin" "\\varveebar" #X02A61 "⩡")
-    ("mathbin" "\\vectimes" #X02A2F "⨯")
-    ("mathbin" "\\vee" #X02228 "∨")
-    ("mathbin" "\\veebar" #X022BB "⊻")
-    ("mathbin" "\\veedot" #X027C7 "⟇")
-    ("mathbin" "\\veedoublebar" #X02A63 "⩣")
-    ("mathbin" "\\veemidvert" #X02A5B "⩛")
-    ("mathbin" "\\veeodot" #X02A52 "⩒")
-    ("mathbin" "\\veeonvee" #X02A56 "⩖")
-    ("mathbin" "\\vysmblkcircle" #X02219 "∙")
-    ("mathbin" "\\vysmwhtcircle" #X02218 "∘")
-    ("mathbin" "\\wedge" #X02227 "∧")
-    ("mathbin" "\\wedgebar" #X02A5F "⩟")
-    ("mathbin" "\\wedgedot" #X027D1 "⟑")
-    ("mathbin" "\\wedgedoublebar" #X02A60 "⩠")
-    ("mathbin" "\\wedgemidvert" #X02A5A "⩚")
-    ("mathbin" "\\wedgeodot" #X02A51 "⩑")
-    ("mathbin" "\\wedgeonwedge" #X02A55 "⩕")
-    ("mathbin" "\\whitesquaretickleft" #X027E4 "⟤")
-    ("mathbin" "\\whitesquaretickright" #X027E5 "⟥")
-    ("mathbin" "\\wr" #X02240 "≀")
-    ("mathclose" "\\Rbrbrak" #X027ED "⟭")
-    ("mathclose" "\\Rbrbrak" #X03019 "〙")
-    ("mathclose" "\\Rparenless" #X02996 "⦖")
-    ("mathclose" "\\Rvzigzag" #X029DB "⧛")
-    ("mathclose" "\\lrcorner" #X0231F "⌟")
-    ("mathclose" "\\rAngle" #X027EB "⟫")
-    ("mathclose" "\\rBrace" #X02984 "⦄")
-    ("mathclose" "\\rBrack" #X027E7 "⟧")
-    ("mathclose" "\\rParen" #X02986 "⦆")
-    ("mathclose" "\\rangle" #X027E9 "⟩")
-    ("mathclose" "\\rangledot" #X02992 "⦒")
-    ("mathclose" "\\rbag" #X027C6 "⟆")
-    ("mathclose" "\\rblkbrbrak" #X02998 "⦘")
-    ("mathclose" "\\rbrace" #X0007D "}")
-    ("mathclose" "\\rbrack" #X0005D "]")
-    ("mathclose" "\\rbracklrtick" #X0298E "⦎")
-    ("mathclose" "\\rbrackubar" #X0298C "⦌")
-    ("mathclose" "\\rbrackurtick" #X02990 "⦐")
-    ("mathclose" "\\rbrbrak" #X02773 "❳")
-    ("mathclose" "\\rbrbrak" #X03015 "〕")
-    ("mathclose" "\\rceil" #X02309 "⌉")
-    ("mathclose" "\\rcurvyangle" #X029FD "⧽")
-    ("mathclose" "\\rfloor" #X0230B "⌋")
-    ("mathclose" "\\rparen" #X00029 ")")
-    ("mathclose" "\\rparengtr" #X02994 "⦔")
-    ("mathclose" "\\rrangle" #X0298A "⦊")
-    ("mathclose" "\\rrparenthesis" #X02988 "⦈")
-    ("mathclose" "\\rvzigzag" #X029D9 "⧙")
-    ("mathclose" "\\urcorner" #X0231D "⌝")
-    ("mathfence" "\\Vert" #X02016 "‖")
-    ("mathfence" "\\Vvert" #X02980 "⦀")
-    ("mathfence" "\\vert" #X0007C "|")
-    ("mathop" "\\Bbbsum" #X02140 "⅀")
-    ("mathop" "\\Join" #X02A1D "⨝")
-    ("mathop" "\\awint" #X02A11 "⨑")
-    ("mathop" "\\bigbot" #X027D8 "⟘")
-    ("mathop" "\\bigcap" #X022C2 "⋂")
-    ("mathop" "\\bigcup" #X022C3 "⋃")
-    ("mathop" "\\bigcupdot" #X02A03 "⨃")
-    ("mathop" "\\biginterleave" #X02AFC "⫼")
-    ("mathop" "\\bigodot" #X02A00 "⨀")
-    ("mathop" "\\bigoplus" #X02A01 "⨁")
-    ("mathop" "\\bigotimes" #X02A02 "⨂")
-    ("mathop" "\\bigsqcap" #X02A05 "⨅")
-    ("mathop" "\\bigsqcup" #X02A06 "⨆")
-    ("mathop" "\\bigtalloblong" #X02AFF "⫿")
-    ("mathop" "\\bigtimes" #X02A09 "⨉")
-    ("mathop" "\\bigtop" #X027D9 "⟙")
-    ("mathop" "\\bigtriangleleft" #X02A1E "⨞")
-    ("mathop" "\\biguplus" #X02A04 "⨄")
-    ("mathop" "\\bigvee" #X022C1 "⋁")
-    ("mathop" "\\bigwedge" #X022C0 "⋀")
-    ("mathop" "\\cirfnint" #X02A10 "⨐")
-    ("mathop" "\\conjquant" #X02A07 "⨇")
-    ("mathop" "\\coprod" #X02210 "∐")
-    ("mathop" "\\disjquant" #X02A08 "⨈")
-    ("mathop" "\\fint" #X02A0F "⨏")
-    ("mathop" "\\fullouterjoin" #X027D7 "⟗")
-    ("mathop" "\\iiiint" #X02A0C "⨌")
-    ("mathop" "\\iiint" #X0222D "∭")
-    ("mathop" "\\iint" #X0222C "∬")
-    ("mathop" "\\int" #X0222B "∫")
-    ("mathop" "\\intBar" #X02A0E "⨎")
-    ("mathop" "\\intbar" #X02A0D "⨍")
-    ("mathop" "\\intcap" #X02A19 "⨙")
-    ("mathop" "\\intclockwise" #X02231 "∱")
-    ("mathop" "\\intcup" #X02A1A "⨚")
-    ("mathop" "\\intlarhk" #X02A17 "⨗")
-    ("mathop" "\\intx" #X02A18 "⨘")
-    ("mathop" "\\leftouterjoin" #X027D5 "⟕")
-    ("mathop" "\\lowint" #X02A1C "⨜")
-    ("mathop" "\\npolint" #X02A14 "⨔")
-    ("mathop" "\\oiiint" #X02230 "∰")
-    ("mathop" "\\oiint" #X0222F "∯")
-    ("mathop" "\\oint" #X0222E "∮")
-    ("mathop" "\\ointctrclockwise" #X02233 "∳")
-    ("mathop" "\\pointint" #X02A15 "⨕")
-    ("mathop" "\\prod" #X0220F "∏")
-    ("mathop" "\\rightouterjoin" #X027D6 "⟖")
-    ("mathop" "\\rppolint" #X02A12 "⨒")
-    ("mathop" "\\scpolint" #X02A13 "⨓")
-    ("mathop" "\\sqint" #X02A16 "⨖")
-    ("mathop" "\\sum" #X02211 "∑")
-    ("mathop" "\\sumint" #X02A0B "⨋")
-    ("mathop" "\\upint" #X02A1B "⨛")
-    ("mathop" "\\varointclockwise" #X02232 "∲")
-    ("mathop" "\\xbsol" #X029F9 "⧹")
-    ("mathop" "\\xsol" #X029F8 "⧸")
-    ("mathop" "\\zcmp" #X02A1F "⨟")
-    ("mathop" "\\zpipe" #X02A20 "⨠")
-    ("mathop" "\\zproject" #X02A21 "⨡")
-    ("mathopen" "\\Lbrbrak" #X027EC "⟬")
-    ("mathopen" "\\Lbrbrak" #X03018 "〘")
-    ("mathopen" "\\Lparengtr" #X02995 "⦕")
-    ("mathopen" "\\Lvzigzag" #X029DA "⧚")
-    ("mathopen" "\\lAngle" #X027EA "⟪")
-    ("mathopen" "\\lBrace" #X02983 "⦃")
-    ("mathopen" "\\lBrack" #X027E6 "⟦")
-    ("mathopen" "\\lParen" #X02985 "⦅")
-    ("mathopen" "\\langle" #X027E8 "⟨")
-    ("mathopen" "\\langledot" #X02991 "⦑")
-    ("mathopen" "\\lbag" #X027C5 "⟅")
-    ("mathopen" "\\lblkbrbrak" #X02997 "⦗")
-    ("mathopen" "\\lbrace" #X0007B "{")
-    ("mathopen" "\\lbrack" #X0005B "[")
-    ("mathopen" "\\lbracklltick" #X0298F "⦏")
-    ("mathopen" "\\lbrackubar" #X0298B "⦋")
-    ("mathopen" "\\lbrackultick" #X0298D "⦍")
-    ("mathopen" "\\lbrbrak" #X02772 "❲")
-    ("mathopen" "\\lbrbrak" #X03014 "〔")
-    ("mathopen" "\\lceil" #X02308 "⌈")
-    ("mathopen" "\\lcurvyangle" #X029FC "⧼")
-    ("mathopen" "\\lfloor" #X0230A "⌊")
-    ("mathopen" "\\llangle" #X02989 "⦉")
-    ("mathopen" "\\llcorner" #X0231E "⌞")
-    ("mathopen" "\\llparenthesis" #X02987 "⦇")
-    ("mathopen" "\\longdivision" #X027CC "⟌")
-    ("mathopen" "\\lparen" #X00028 "(")
-    ("mathopen" "\\lparenless" #X02993 "⦓")
-    ("mathopen" "\\lvzigzag" #X029D8 "⧘")
-    ("mathopen" "\\ulcorner" #X0231C "⌜")
-    ("mathord" "\\APLboxquestion" #X02370 "⍰")
-    ("mathord" "\\APLboxupcaret" #X02353 "⍓")
-    ("mathord" "\\APLnotbackslash" #X02340 "⍀")
-    ("mathord" "\\Bbbeight" #X1D7E0 "𝟠")
-    ("mathord" "\\Bbbfive" #X1D7DD "𝟝")
-    ("mathord" "\\Bbbfour" #X1D7DC "𝟜")
-    ("mathord" "\\Bbbnine" #X1D7E1 "𝟡")
-    ("mathord" "\\Bbbone" #X1D7D9 "𝟙")
-    ("mathord" "\\Bbbpi" #X0213C "ℼ")
-    ("mathord" "\\Bbbseven" #X1D7DF "𝟟")
-    ("mathord" "\\Bbbsix" #X1D7DE "𝟞")
-    ("mathord" "\\Bbbthree" #X1D7DB "𝟛")
-    ("mathord" "\\Bbbtwo" #X1D7DA "𝟚")
-    ("mathord" "\\Bbbzero" #X1D7D8 "𝟘")
-    ("mathord" "\\Eulerconst" #X02107 "ℇ")
-    ("mathord" "\\Exclam" #X0203C "‼")
-    ("mathord" "\\Finv" #X02132 "Ⅎ")
-    ("mathord" "\\Game" #X02141 "⅁")
-    ("mathord" "\\Hermaphrodite" #X026A5 "⚥")
-    ("mathord" "\\Planckconst" #X0210E "ℎ")
-    ("mathord" "\\PropertyLine" #X0214A "⅊")
-    ("mathord" "\\QED" #X0220E "∎")
-    ("mathord" "\\Question" #X02047 "⁇")
-    ("mathord" "\\Yup" #X02144 "⅄")
-    ("mathord" "\\Zbar" #X001B5 "Ƶ")
-    ("mathord" "\\accurrent" #X023E6 "⏦")
-    ("mathord" "\\acidfree" #X0267E "♾")
-    ("mathord" "\\acwopencirclearrow" #X021BA "↺")
-    ("mathord" "\\ampersand" #X00026 "&")
-    ("mathord" "\\angdnr" #X0299F "⦟")
-    ("mathord" "\\angle" #X02220 "∠")
-    ("mathord" "\\angles" #X0299E "⦞")
-    ("mathord" "\\angleubar" #X029A4 "⦤")
-    ("mathord" "\\astrosun" #X02609 "☉")
-    ("mathord" "\\atsign" #X00040 "@")
-    ("mathord" "\\backdprime" #X02036 "‶")
-    ("mathord" "\\backprime" #X02035 "‵")
-    ("mathord" "\\backslash" #X0005C "\\")
-    ("mathord" "\\backtrprime" #X02037 "‷")
-    ("mathord" "\\barleftarrowrightarrowba" #X021B9 "↹")
-    ("mathord" "\\barovernorthwestarrow" #X021B8 "↸")
-    ("mathord" "\\bbrktbrk" #X023B6 "⎶")
-    ("mathord" "\\bdtriplevdash" #X02506 "┆")
-    ("mathord" "\\because" #X02235 "∵")
-    ("mathord" "\\benzenr" #X023E3 "⏣")
-    ("mathord" "\\bigblacktriangledown" #X025BC "▼")
-    ("mathord" "\\bigblacktriangleup" #X025B2 "▲")
-    ("mathord" "\\bigstar" #X02605 "★")
-    ("mathord" "\\bigwhitestar" #X02606 "☆")
-    ("mathord" "\\blackcircledownarrow" #X029ED "⧭")
-    ("mathord" "\\blackcircledrightdot" #X02688 "⚈")
-    ("mathord" "\\blackcircledtwodots" #X02689 "⚉")
-    ("mathord" "\\blackcircleulquadwhite" #X025D5 "◕")
-    ("mathord" "\\blackdiamonddownarrow" #X029EA "⧪")
-    ("mathord" "\\blackinwhitediamond" #X025C8 "◈")
-    ("mathord" "\\blackinwhitesquare" #X025A3 "▣")
-    ("mathord" "\\blacklefthalfcircle" #X025D6 "◖")
-    ("mathord" "\\blackpointerleft" #X025C4 "◄")
-    ("mathord" "\\blackpointerright" #X025BA "►")
-    ("mathord" "\\blackrighthalfcircle" #X025D7 "◗")
-    ("mathord" "\\blacksmiley" #X0263B "☻")
-    ("mathord" "\\blkhorzoval" #X02B2C "⬬")
-    ("mathord" "\\blkvertoval" #X02B2E "⬮")
-    ("mathord" "\\blockfull" #X02588 "█")
-    ("mathord" "\\blockhalfshaded" #X02592 "▒")
-    ("mathord" "\\blocklefthalf" #X0258C "▌")
-    ("mathord" "\\blocklowhalf" #X02584 "▄")
-    ("mathord" "\\blockqtrshaded" #X02591 "░")
-    ("mathord" "\\blockrighthalf" #X02590 "▐")
-    ("mathord" "\\blockthreeqtrshaded" #X02593 "▓")
-    ("mathord" "\\blockuphalf" #X02580 "▀")
-    ("mathord" "\\bot" #X022A5 "⊥")
-    ("mathord" "\\botsemicircle" #X025E1 "◡")
-    ("mathord" "\\boxonbox" #X029C9 "⧉")
-    ("mathord" "\\bullseye" #X025CE "◎")
-    ("mathord" "\\caretinsert" #X02038 "‸")
-    ("mathord" "\\carriagereturn" #X021B5 "↵")
-    ("mathord" "\\checkmark" #X02713 "✓")
-    ("mathord" "\\cirE" #X029C3 "⧃")
-    ("mathord" "\\circlebottomhalfblack" #X025D2 "◒")
-    ("mathord" "\\circledbullet" #X029BF "⦿")
-    ("mathord" "\\circledownarrow" #X029EC "⧬")
-    ("mathord" "\\circledrightdot" #X02686 "⚆")
-    ("mathord" "\\circledstar" #X0272A "✪")
-    ("mathord" "\\circledtwodots" #X02687 "⚇")
-    ("mathord" "\\circledwhitebullet" #X029BE "⦾")
-    ("mathord" "\\circlelefthalfblack" #X025D0 "◐")
-    ("mathord" "\\circlellquad" #X025F5 "◵")
-    ("mathord" "\\circlelrquad" #X025F6 "◶")
-    ("mathord" "\\circlerighthalfblack" #X025D1 "◑")
-    ("mathord" "\\circletophalfblack" #X025D3 "◓")
-    ("mathord" "\\circleulquad" #X025F4 "◴")
-    ("mathord" "\\circleurquad" #X025F7 "◷")
-    ("mathord" "\\circleurquadblack" #X025D4 "◔")
-    ("mathord" "\\circlevertfill" #X025CD "◍")
-    ("mathord" "\\cirscir" #X029C2 "⧂")
-    ("mathord" "\\clubsuit" #X02663 "♣")
-    ("mathord" "\\complement" #X02201 "∁")
-    ("mathord" "\\conictaper" #X02332 "⌲")
-    ("mathord" "\\cwopencirclearrow" #X021BB "↻")
-    ("mathord" "\\danger" #X02621 "☡")
-    ("mathord" "\\diameter" #X02300 "⌀")
-    ("mathord" "\\diamondbotblack" #X02B19 "⬙")
-    ("mathord" "\\diamondcdot" #X027D0 "⟐")
-    ("mathord" "\\diamondleftblack" #X02B16 "⬖")
-    ("mathord" "\\diamondrightblack" #X02B17 "⬗")
-    ("mathord" "\\diamondsuit" #X02662 "♢")
-    ("mathord" "\\diamondtopblack" #X02B18 "⬘")
-    ("mathord" "\\dicei" #X02680 "⚀")
-    ("mathord" "\\diceii" #X02681 "⚁")
-    ("mathord" "\\diceiii" #X02682 "⚂")
-    ("mathord" "\\diceiv" #X02683 "⚃")
-    ("mathord" "\\dicev" #X02684 "⚄")
-    ("mathord" "\\dicevi" #X02685 "⚅")
-    ("mathord" "\\dingasterisk" #X0273D "✽")
-    ("mathord" "\\dottedcircle" #X025CC "◌")
-    ("mathord" "\\dottedsquare" #X02B1A "⬚")
-    ("mathord" "\\downdasharrow" #X021E3 "⇣")
-    ("mathord" "\\downrightcurvedarrow" #X02935 "⤵")
-    ("mathord" "\\downtriangleleftblack" #X029E8 "⧨")
-    ("mathord" "\\downtrianglerightblack" #X029E9 "⧩")
-    ("mathord" "\\downwhitearrow" #X021E9 "⇩")
-    ("mathord" "\\dprime" #X02033 "″")
-    ("mathord" "\\draftingarrow" #X0279B "➛")
-    ("mathord" "\\eighthnote" #X0266A "♪")
-    ("mathord" "\\elinters" #X023E7 "⏧")
-    ("mathord" "\\emptysetoarr" #X029B3 "⦳")
-    ("mathord" "\\emptysetoarrl" #X029B4 "⦴")
-    ("mathord" "\\emptysetobar" #X029B1 "⦱")
-    ("mathord" "\\emptysetocirc" #X029B2 "⦲")
-    ("mathord" "\\enleadertwodots" #X02025 "‥")
-    ("mathord" "\\errbarblackcircle" #X029F3 "⧳")
-    ("mathord" "\\errbarblackdiamond" #X029F1 "⧱")
-    ("mathord" "\\errbarblacksquare" #X029EF "⧯")
-    ("mathord" "\\errbarcircle" #X029F2 "⧲")
-    ("mathord" "\\errbardiamond" #X029F0 "⧰")
-    ("mathord" "\\errbarsquare" #X029EE "⧮")
-    ("mathord" "\\euro" #X020AC "€")
-    ("mathord" "\\exists" #X02203 "∃")
-    ("mathord" "\\fdiagovnearrow" #X0292F "⤯")
-    ("mathord" "\\fdiagovrdiag" #X0292C "⤬")
-    ("mathord" "\\female" #X02640 "♀")
-    ("mathord" "\\fisheye" #X025C9 "◉")
-    ("mathord" "\\flat" #X0266D "♭")
-    ("mathord" "\\fltns" #X023E5 "⏥")
-    ("mathord" "\\forall" #X02200 "∀")
-    ("mathord" "\\fourvdots" #X02999 "⦙")
-    ("mathord" "\\gtlpar" #X029A0 "⦠")
-    ("mathord" "\\harrowextender" #X023AF "⎯")
-    ("mathord" "\\heartsuit" #X02661 "♡")
-    ("mathord" "\\hermitmatrix" #X022B9 "⊹")
-    ("mathord" "\\hexagon" #X02394 "⎔")
-    ("mathord" "\\hexagonblack" #X02B23 "⬣")
-    ("mathord" "\\horizbar" #X02015 "―")
-    ("mathord" "\\house" #X02302 "⌂")
-    ("mathord" "\\hrectangle" #X025AD "▭")
-    ("mathord" "\\hrectangleblack" #X025AC "▬")
-    ("mathord" "\\hyphenbullet" #X02043 "⁃")
-    ("mathord" "\\hzigzag" #X03030 "〰")
-    ("mathord" "\\iinfin" #X029DC "⧜")
-    ("mathord" "\\increment" #X02206 "∆")
-    ("mathord" "\\infty" #X0221E "∞")
-    ("mathord" "\\intbottom" #X02321 "⌡")
-    ("mathord" "\\intextender" #X023AE "⎮")
-    ("mathord" "\\inttop" #X02320 "⌠")
-    ("mathord" "\\inversebullet" #X025D8 "◘")
-    ("mathord" "\\inversewhitecircle" #X025D9 "◙")
-    ("mathord" "\\invnot" #X02310 "⌐")
-    ("mathord" "\\invwhitelowerhalfcircle" #X025DB "◛")
-    ("mathord" "\\invwhiteupperhalfcircle" #X025DA "◚")
-    ("mathord" "\\laplac" #X029E0 "⧠")
-    ("mathord" "\\lbracelend" #X023A9 "⎩")
-    ("mathord" "\\lbracemid" #X023A8 "⎨")
-    ("mathord" "\\lbraceuend" #X023A7 "⎧")
-    ("mathord" "\\lbrackextender" #X023A2 "⎢")
-    ("mathord" "\\lbracklend" #X023A3 "⎣")
-    ("mathord" "\\lbrackuend" #X023A1 "⎡")
-    ("mathord" "\\leftdasharrow" #X021E0 "⇠")
-    ("mathord" "\\leftmoon" #X0263E "☾")
-    ("mathord" "\\leftwhitearrow" #X021E6 "⇦")
-    ("mathord" "\\lgblkcircle" #X02B24 "⬤")
-    ("mathord" "\\lgblksquare" #X02B1B "⬛")
-    ("mathord" "\\lgwhtcircle" #X025EF "◯")
-    ("mathord" "\\lgwhtsquare" #X02B1C "⬜")
-    ("mathord" "\\linefeed" #X021B4 "↴")
-    ("mathord" "\\llarc" #X025DF "◟")
-    ("mathord" "\\llblacktriangle" #X025E3 "◣")
-    ("mathord" "\\lltriangle" #X025FA "◺")
-    ("mathord" "\\lmoustache" #X023B0 "⎰")
-    ("mathord" "\\lparenextender" #X0239C "⎜")
-    ("mathord" "\\lparenlend" #X0239D "⎝")
-    ("mathord" "\\lparenuend" #X0239B "⎛")
-    ("mathord" "\\lrarc" #X025DE "◞")
-    ("mathord" "\\lrblacktriangle" #X025E2 "◢")
-    ("mathord" "\\lrtriangle" #X025FF "◿")
-    ("mathord" "\\lvboxline" #X023B8 "⎸")
-    ("mathord" "\\male" #X02642 "♂")
-    ("mathord" "\\maltese" #X02720 "✠")
-    ("mathord" "\\mathdollar" #X00024 "$")
-    ("mathord" "\\mathslash" #X0002F "/")
-    ("mathord" "\\mbfitnabla" #X1D735 "𝜵")
-    ("mathord" "\\mbfitpartial" #X1D74F "𝝏")
-    ("mathord" "\\mbfitsansnabla" #X1D7A9 "𝞩")
-    ("mathord" "\\mbfitsanspartial" #X1D7C3 "𝟃")
-    ("mathord" "\\mbfnabla" #X1D6C1 "𝛁")
-    ("mathord" "\\mbfpartial" #X1D6DB "𝛛")
-    ("mathord" "\\mbfsanseight" #X1D7F4 "𝟴")
-    ("mathord" "\\mbfsansfive" #X1D7F1 "𝟱")
-    ("mathord" "\\mbfsansfour" #X1D7F0 "𝟰")
-    ("mathord" "\\mbfsansnabla" #X1D76F "𝝯")
-    ("mathord" "\\mbfsansnine" #X1D7F5 "𝟵")
-    ("mathord" "\\mbfsansone" #X1D7ED "𝟭")
-    ("mathord" "\\mbfsanspartial" #X1D789 "𝞉")
-    ("mathord" "\\mbfsansseven" #X1D7F3 "𝟳")
-    ("mathord" "\\mbfsanssix" #X1D7F2 "𝟲")
-    ("mathord" "\\mbfsansthree" #X1D7EF "𝟯")
-    ("mathord" "\\mbfsanstwo" #X1D7EE "𝟮")
-    ("mathord" "\\mbfsanszero" #X1D7EC "𝟬")
-    ("mathord" "\\mdblkcircle" #X026AB "⚫")
-    ("mathord" "\\mdblkdiamond" #X02B25 "⬥")
-    ("mathord" "\\mdblklozenge" #X02B27 "⬧")
-    ("mathord" "\\mdblksquare" #X025FC "◼")
-    ("mathord" "\\mdlgblkcircle" #X025CF "●")
-    ("mathord" "\\mdlgblkdiamond" #X025C6 "◆")
-    ("mathord" "\\mdlgblksquare" #X025A0 "■")
-    ("mathord" "\\mdlgwhtdiamond" #X025C7 "◇")
-    ("mathord" "\\mdlgwhtlozenge" #X025CA "◊")
-    ("mathord" "\\mdlgwhtsquare" #X025A1 "□")
-    ("mathord" "\\mdsmblkcircle" #X02981 "⦁")
-    ("mathord" "\\mdsmblksquare" #X025FE "◾")
-    ("mathord" "\\mdsmwhtcircle" #X026AC "⚬")
-    ("mathord" "\\mdsmwhtsquare" #X025FD "◽")
-    ("mathord" "\\mdwhtcircle" #X026AA "⚪")
-    ("mathord" "\\mdwhtdiamond" #X02B26 "⬦")
-    ("mathord" "\\mdwhtlozenge" #X02B28 "⬨")
-    ("mathord" "\\mdwhtsquare" #X025FB "◻")
-    ("mathord" "\\measangledltosw" #X029AF "⦯")
-    ("mathord" "\\measangledrtose" #X029AE "⦮")
-    ("mathord" "\\measangleldtosw" #X029AB "⦫")
-    ("mathord" "\\measanglelutonw" #X029A9 "⦩")
-    ("mathord" "\\measanglerdtose" #X029AA "⦪")
-    ("mathord" "\\measanglerutone" #X029A8 "⦨")
-    ("mathord" "\\measangleultonw" #X029AD "⦭")
-    ("mathord" "\\measangleurtone" #X029AC "⦬")
-    ("mathord" "\\measuredangle" #X02221 "∡")
-    ("mathord" "\\measuredangleleft" #X0299B "⦛")
-    ("mathord" "\\measuredrightangle" #X022BE "⊾")
-    ("mathord" "\\medblackstar" #X02B51 "⭑")
-    ("mathord" "\\medwhitestar" #X02B50 "⭐")
-    ("mathord" "\\mho" #X02127 "℧")
-    ("mathord" "\\mitBbbD" #X02145 "ⅅ")
-    ("mathord" "\\mitBbbd" #X02146 "ⅆ")
-    ("mathord" "\\mitBbbe" #X02147 "ⅇ")
-    ("mathord" "\\mitBbbi" #X02148 "ⅈ")
-    ("mathord" "\\mitBbbj" #X02149 "ⅉ")
-    ("mathord" "\\mitnabla" #X1D6FB "𝛻")
-    ("mathord" "\\mitpartial" #X1D715 "𝜕")
-    ("mathord" "\\modtwosum" #X02A0A "⨊")
-    ("mathord" "\\msanseight" #X1D7EA "𝟪")
-    ("mathord" "\\msansfive" #X1D7E7 "𝟧")
-    ("mathord" "\\msansfour" #X1D7E6 "𝟦")
-    ("mathord" "\\msansnine" #X1D7EB "𝟫")
-    ("mathord" "\\msansone" #X1D7E3 "𝟣")
-    ("mathord" "\\msansseven" #X1D7E9 "𝟩")
-    ("mathord" "\\msanssix" #X1D7E8 "𝟨")
-    ("mathord" "\\msansthree" #X1D7E5 "𝟥")
-    ("mathord" "\\msanstwo" #X1D7E4 "𝟤")
-    ("mathord" "\\msanszero" #X1D7E2 "𝟢")
-    ("mathord" "\\mtteight" #X1D7FE "𝟾")
-    ("mathord" "\\mttfive" #X1D7FB "𝟻")
-    ("mathord" "\\mttfour" #X1D7FA "𝟺")
-    ("mathord" "\\mttnine" #X1D7FF "𝟿")
-    ("mathord" "\\mttone" #X1D7F7 "𝟷")
-    ("mathord" "\\mttseven" #X1D7FD "𝟽")
-    ("mathord" "\\mttsix" #X1D7FC "𝟼")
-    ("mathord" "\\mttthree" #X1D7F9 "𝟹")
-    ("mathord" "\\mtttwo" #X1D7F8 "𝟸")
-    ("mathord" "\\mttzero" #X1D7F6 "𝟶")
-    ("mathord" "\\nHdownarrow" #X021DF "⇟")
-    ("mathord" "\\nHuparrow" #X021DE "⇞")
-    ("mathord" "\\nabla" #X02207 "∇")
-    ("mathord" "\\natural" #X0266E "♮")
-    ("mathord" "\\neg" #X000AC "¬")
-    ("mathord" "\\neovnwarrow" #X02931 "⤱")
-    ("mathord" "\\neovsearrow" #X0292E "⤮")
-    ("mathord" "\\neuter" #X026B2 "⚲")
-    ("mathord" "\\nexists" #X02204 "∄")
-    ("mathord" "\\nvinfty" #X029DE "⧞")
-    ("mathord" "\\nwovnearrow" #X02932 "⤲")
-    ("mathord" "\\obot" #X029BA "⦺")
-    ("mathord" "\\obrbrak" #X023E0 "⏠")
-    ("mathord" "\\octothorpe" #X00023 "#")
-    ("mathord" "\\odotslashdot" #X029BC "⦼")
-    ("mathord" "\\olcross" #X029BB "⦻")
-    ("mathord" "\\parallelogram" #X025B1 "▱")
-    ("mathord" "\\parallelogramblack" #X025B0 "▰")
-    ("mathord" "\\partial" #X02202 "∂")
-    ("mathord" "\\pentagon" #X02B20 "⬠")
-    ("mathord" "\\pentagonblack" #X02B1F "⬟")
-    ("mathord" "\\percent" #X00025 "%")
-    ("mathord" "\\perps" #X02AE1 "⫡")
-    ("mathord" "\\postalmark" #X03012 "〒")
-    ("mathord" "\\prime" #X02032 "′")
-    ("mathord" "\\profline" #X02312 "⌒")
-    ("mathord" "\\profsurf" #X02313 "⌓")
-    ("mathord" "\\qprime" #X02057 "⁗")
-    ("mathord" "\\quarternote" #X02669 "♩")
-    ("mathord" "\\question" #X0003F "?")
-    ("mathord" "\\rangledownzigzagarrow" #X0237C "⍼")
-    ("mathord" "\\rbracelend" #X023AD "⎭")
-    ("mathord" "\\rbracemid" #X023AC "⎬")
-    ("mathord" "\\rbraceuend" #X023AB "⎫")
-    ("mathord" "\\rbrackextender" #X023A5 "⎥")
-    ("mathord" "\\rbracklend" #X023A6 "⎦")
-    ("mathord" "\\rbrackuend" #X023A4 "⎤")
-    ("mathord" "\\rdiagovfdiag" #X0292B "⤫")
-    ("mathord" "\\rdiagovsearrow" #X02930 "⤰")
-    ("mathord" "\\revangle" #X029A3 "⦣")
-    ("mathord" "\\revangleubar" #X029A5 "⦥")
-    ("mathord" "\\revemptyset" #X029B0 "⦰")
-    ("mathord" "\\rightangle" #X0221F "∟")
-    ("mathord" "\\rightanglemdot" #X0299D "⦝")
-    ("mathord" "\\rightanglesqr" #X0299C "⦜")
-    ("mathord" "\\rightdasharrow" #X021E2 "⇢")
-    ("mathord" "\\rightmoon" #X0263D "☽")
-    ("mathord" "\\rightpentagon" #X02B54 "⭔")
-    ("mathord" "\\rightpentagonblack" #X02B53 "⭓")
-    ("mathord" "\\rightwhitearrow" #X021E8 "⇨")
-    ("mathord" "\\rmoustache" #X023B1 "⎱")
-    ("mathord" "\\rparenextender" #X0239F "⎟")
-    ("mathord" "\\rparenlend" #X023A0 "⎠")
-    ("mathord" "\\rparenuend" #X0239E "⎞")
-    ("mathord" "\\rvboxline" #X023B9 "⎹")
-    ("mathord" "\\sansLmirrored" #X02143 "⅃")
-    ("mathord" "\\sansLturned" #X02142 "⅂")
-    ("mathord" "\\seovnearrow" #X0292D "⤭")
-    ("mathord" "\\sharp" #X0266F "♯")
-    ("mathord" "\\sinewave" #X0223F "∿")
-    ("mathord" "\\smblkdiamond" #X02B29 "⬩")
-    ("mathord" "\\smblklozenge" #X02B2A "⬪")
-    ("mathord" "\\smblksquare" #X025AA "▪")
-    ("mathord" "\\smwhitestar" #X02B52 "⭒")
-    ("mathord" "\\smwhtcircle" #X025E6 "◦")
-    ("mathord" "\\smwhtlozenge" #X02B2B "⬫")
-    ("mathord" "\\smwhtsquare" #X025AB "▫")
-    ("mathord" "\\spadesuit" #X02660 "♠")
-    ("mathord" "\\sphericalangle" #X02222 "∢")
-    ("mathord" "\\sphericalangleup" #X029A1 "⦡")
-    ("mathord" "\\sqlozenge" #X02311 "⌑")
-    ("mathord" "\\sqrtbottom" #X023B7 "⎷")
-    ("mathord" "\\squarebotblack" #X02B13 "⬓")
-    ("mathord" "\\squarecrossfill" #X025A9 "▩")
-    ("mathord" "\\squarehfill" #X025A4 "▤")
-    ("mathord" "\\squarehvfill" #X025A6 "▦")
-    ("mathord" "\\squareleftblack" #X025E7 "◧")
-    ("mathord" "\\squarellblack" #X02B15 "⬕")
-    ("mathord" "\\squarellquad" #X025F1 "◱")
-    ("mathord" "\\squarelrblack" #X025EA "◪")
-    ("mathord" "\\squarelrquad" #X025F2 "◲")
-    ("mathord" "\\squareneswfill" #X025A8 "▨")
-    ("mathord" "\\squarenwsefill" #X025A7 "▧")
-    ("mathord" "\\squarerightblack" #X025E8 "◨")
-    ("mathord" "\\squaretopblack" #X02B12 "⬒")
-    ("mathord" "\\squareulblack" #X025E9 "◩")
-    ("mathord" "\\squareulquad" #X025F0 "◰")
-    ("mathord" "\\squareurblack" #X02B14 "⬔")
-    ("mathord" "\\squareurquad" #X025F3 "◳")
-    ("mathord" "\\squarevfill" #X025A5 "▥")
-    ("mathord" "\\squoval" #X025A2 "▢")
-    ("mathord" "\\sterling" #X000A3 "£")
-    ("mathord" "\\strns" #X023E4 "⏤")
-    ("mathord" "\\subsetcirc" #X027C3 "⟃")
-    ("mathord" "\\sumbottom" #X023B3 "⎳")
-    ("mathord" "\\sumtop" #X023B2 "⎲")
-    ("mathord" "\\sun" #X0263C "☼")
-    ("mathord" "\\supsetcirc" #X027C4 "⟄")
-    ("mathord" "\\therefore" #X02234 "∴")
-    ("mathord" "\\thermod" #X029E7 "⧧")
-    ("mathord" "\\threedangle" #X027C0 "⟀")
-    ("mathord" "\\tieinfty" #X029DD "⧝")
-    ("mathord" "\\top" #X022A4 "⊤")
-    ("mathord" "\\topbot" #X02336 "⌶")
-    ("mathord" "\\topcir" #X02AF1 "⫱")
-    ("mathord" "\\topsemicircle" #X025E0 "◠")
-    ("mathord" "\\trapezium" #X023E2 "⏢")
-    ("mathord" "\\trianglecdot" #X025EC "◬")
-    ("mathord" "\\triangleleftblack" #X025ED "◭")
-    ("mathord" "\\triangleodot" #X029CA "⧊")
-    ("mathord" "\\trianglerightblack" #X025EE "◮")
-    ("mathord" "\\triangles" #X029CC "⧌")
-    ("mathord" "\\triangleubar" #X029CB "⧋")
-    ("mathord" "\\trprime" #X02034 "‴")
-    ("mathord" "\\turnangle" #X029A2 "⦢")
-    ("mathord" "\\turnednot" #X02319 "⌙")
-    ("mathord" "\\twolowline" #X02017 "‗")
-    ("mathord" "\\twonotes" #X0266B "♫")
-    ("mathord" "\\ubrbrak" #X023E1 "⏡")
-    ("mathord" "\\ularc" #X025DC "◜")
-    ("mathord" "\\ulblacktriangle" #X025E4 "◤")
-    ("mathord" "\\ultriangle" #X025F8 "◸")
-    ("mathord" "\\unicodecdots" #X022EF "⋯")
-    ("mathord" "\\unicodeellipsis" #X02026 "…")
-    ("mathord" "\\uparrowoncircle" #X029BD "⦽")
-    ("mathord" "\\upbackepsilon" #X003F6 "϶")
-    ("mathord" "\\updasharrow" #X021E1 "⇡")
-    ("mathord" "\\updownarrowbar" #X021A8 "↨")
-    ("mathord" "\\upoldKoppa" #X003D8 "Ϙ")
-    ("mathord" "\\upoldkoppa" #X003D9 "ϙ")
-    ("mathord" "\\uprightcurvearrow" #X02934 "⤴")
-    ("mathord" "\\upwhitearrow" #X021E7 "⇧")
-    ("mathord" "\\urarc" #X025DD "◝")
-    ("mathord" "\\urblacktriangle" #X025E5 "◥")
-    ("mathord" "\\urtriangle" #X025F9 "◹")
-    ("mathord" "\\varcarriagereturn" #X023CE "⏎")
-    ("mathord" "\\varclubsuit" #X02667 "♧")
-    ("mathord" "\\vardiamondsuit" #X02666 "♦")
-    ("mathord" "\\varheartsuit" #X02665 "♥")
-    ("mathord" "\\varhexagon" #X02B21 "⬡")
-    ("mathord" "\\varhexagonblack" #X02B22 "⬢")
-    ("mathord" "\\varhexagonlrbonds" #X0232C "⌬")
-    ("mathord" "\\varlrtriangle" #X022BF "⊿")
-    ("mathord" "\\varnothing" #X02205 "∅")
-    ("mathord" "\\varspadesuit" #X02664 "♤")
-    ("mathord" "\\varstar" #X02736 "✶")
-    ("mathord" "\\vbraceextender" #X023AA "⎪")
-    ("mathord" "\\viewdata" #X02317 "⌗")
-    ("mathord" "\\vrectangle" #X025AF "▯")
-    ("mathord" "\\vrectangleblack" #X025AE "▮")
-    ("mathord" "\\vysmblksquare" #X02B1D "⬝")
-    ("mathord" "\\vysmwhtsquare" #X02B1E "⬞")
-    ("mathord" "\\vzigzag" #X0299A "⦚")
-    ("mathord" "\\whitearrowupfrombar" #X021EA "⇪")
-    ("mathord" "\\whiteinwhitetriangle" #X027C1 "⟁")
-    ("mathord" "\\whitepointerleft" #X025C5 "◅")
-    ("mathord" "\\whitepointerright" #X025BB "▻")
-    ("mathord" "\\whthorzoval" #X02B2D "⬭")
-    ("mathord" "\\whtvertoval" #X02B2F "⬯")
-    ("mathord" "\\wideangledown" #X029A6 "⦦")
-    ("mathord" "\\wideangleup" #X029A7 "⦧")
-    ("mathord" "\\yen" #X000A5 "¥")
-    ("mathover" "\\overbrace" #X023DE "⏞")
-    ("mathover" "\\overbracket" #X023B4 "⎴")
-    ("mathover" "\\overparen" #X023DC "⏜")
-    ("mathpunct" "\\comma" #X0002C ",")
-    ("mathpunct" "\\exclam" #X00021 "!")
-    ("mathpunct" "\\mathcolon" #X0003A ":")
-    ("mathpunct" "\\semicolon" #X0003B ";")
-    ("mathradical" "\\cuberoot" #X0221B "∛")
-    ("mathradical" "\\fourthroot" #X0221C "∜")
-    ("mathradical" "\\sqrt" #X0221A "√")
-    ("mathrel" "\\APLnotslash" #X0233F "⌿")
-    ("mathrel" "\\Barv" #X02AE7 "⫧")
-    ("mathrel" "\\Bumpeq" #X0224E "≎")
-    ("mathrel" "\\Colon" #X02237 "∷")
-    ("mathrel" "\\Coloneq" #X02A74 "⩴")
-    ("mathrel" "\\DDownarrow" #X027F1 "⟱")
-    ("mathrel" "\\DashV" #X02AE5 "⫥")
-    ("mathrel" "\\DashVDash" #X027DA "⟚")
-    ("mathrel" "\\Dashv" #X02AE4 "⫤")
-    ("mathrel" "\\Ddownarrow" #X0290B "⤋")
-    ("mathrel" "\\Doteq" #X02251 "≑")
-    ("mathrel" "\\Downarrow" #X021D3 "⇓")
-    ("mathrel" "\\Equiv" #X02263 "≣")
-    ("mathrel" "\\Gt" #X02AA2 "⪢")
-    ("mathrel" "\\LLeftarrow" #X02B45 "⭅")
-    ("mathrel" "\\Ldsh" #X021B2 "↲")
-    ("mathrel" "\\Leftarrow" #X021D0 "⇐")
-    ("mathrel" "\\Leftrightarrow" #X021D4 "⇔")
-    ("mathrel" "\\Lleftarrow" #X021DA "⇚")
-    ("mathrel" "\\Longleftarrow" #X027F8 "⟸")
-    ("mathrel" "\\Longleftrightarrow" #X027FA "⟺")
-    ("mathrel" "\\Longmapsfrom" #X027FD "⟽")
-    ("mathrel" "\\Longmapsto" #X027FE "⟾")
-    ("mathrel" "\\Longrightarrow" #X027F9 "⟹")
-    ("mathrel" "\\Lsh" #X021B0 "↰")
-    ("mathrel" "\\Lt" #X02AA1 "⪡")
-    ("mathrel" "\\Mapsfrom" #X02906 "⤆")
-    ("mathrel" "\\Mapsto" #X02907 "⤇")
-    ("mathrel" "\\Nearrow" #X021D7 "⇗")
-    ("mathrel" "\\Not" #X02AEC "⫬")
-    ("mathrel" "\\Nwarrow" #X021D6 "⇖")
-    ("mathrel" "\\Prec" #X02ABB "⪻")
-    ("mathrel" "\\RRightarrow" #X02B46 "⭆")
-    ("mathrel" "\\Rdsh" #X021B3 "↳")
-    ("mathrel" "\\Rightarrow" #X021D2 "⇒")
-    ("mathrel" "\\Rrightarrow" #X021DB "⇛")
-    ("mathrel" "\\Rsh" #X021B1 "↱")
-    ("mathrel" "\\Searrow" #X021D8 "⇘")
-    ("mathrel" "\\Subset" #X022D0 "⋐")
-    ("mathrel" "\\Succ" #X02ABC "⪼")
-    ("mathrel" "\\Supset" #X022D1 "⋑")
-    ("mathrel" "\\Swarrow" #X021D9 "⇙")
-    ("mathrel" "\\UUparrow" #X027F0 "⟰")
-    ("mathrel" "\\Uparrow" #X021D1 "⇑")
-    ("mathrel" "\\Updownarrow" #X021D5 "⇕")
-    ("mathrel" "\\Uuparrow" #X0290A "⤊")
-    ("mathrel" "\\VDash" #X022AB "⊫")
-    ("mathrel" "\\Vbar" #X02AEB "⫫")
-    ("mathrel" "\\Vdash" #X022A9 "⊩")
-    ("mathrel" "\\Vvdash" #X022AA "⊪")
-    ("mathrel" "\\acwcirclearrow" #X02940 "⥀")
-    ("mathrel" "\\acwgapcirclearrow" #X027F2 "⟲")
-    ("mathrel" "\\acwleftarcarrow" #X02939 "⤹")
-    ("mathrel" "\\acwoverarcarrow" #X0293A "⤺")
-    ("mathrel" "\\acwunderarcarrow" #X0293B "⤻")
-    ("mathrel" "\\adots" #X022F0 "⋰")
-    ("mathrel" "\\approx" #X02248 "≈")
-    ("mathrel" "\\approxeq" #X0224A "≊")
-    ("mathrel" "\\approxeqq" #X02A70 "⩰")
-    ("mathrel" "\\approxident" #X0224B "≋")
-    ("mathrel" "\\arceq" #X02258 "≘")
-    ("mathrel" "\\assert" #X022A6 "⊦")
-    ("mathrel" "\\asteq" #X02A6E "⩮")
-    ("mathrel" "\\asymp" #X0224D "≍")
-    ("mathrel" "\\bNot" #X02AED "⫭")
-    ("mathrel" "\\backcong" #X0224C "≌")
-    ("mathrel" "\\backsim" #X0223D "∽")
-    ("mathrel" "\\backsimeq" #X022CD "⋍")
-    ("mathrel" "\\bagmember" #X022FF "⋿")
-    ("mathrel" "\\barV" #X02AEA "⫪")
-    ("mathrel" "\\bardownharpoonleft" #X02961 "⥡")
-    ("mathrel" "\\bardownharpoonright" #X0295D "⥝")
-    ("mathrel" "\\barleftarrow" #X021E4 "⇤")
-    ("mathrel" "\\barleftharpoondown" #X02956 "⥖")
-    ("mathrel" "\\barleftharpoonup" #X02952 "⥒")
-    ("mathrel" "\\barrightarrowdiamond" #X02920 "⤠")
-    ("mathrel" "\\barrightharpoondown" #X0295F "⥟")
-    ("mathrel" "\\barrightharpoonup" #X0295B "⥛")
-    ("mathrel" "\\baruparrow" #X02912 "⤒")
-    ("mathrel" "\\barupharpoonleft" #X02958 "⥘")
-    ("mathrel" "\\barupharpoonright" #X02954 "⥔")
-    ("mathrel" "\\between" #X0226C "≬")
-    ("mathrel" "\\bowtie" #X022C8 "⋈")
-    ("mathrel" "\\bsimilarleftarrow" #X02B41 "⭁")
-    ("mathrel" "\\bsimilarrightarrow" #X02B47 "⭇")
-    ("mathrel" "\\bsolhsub" #X027C8 "⟈")
-    ("mathrel" "\\bumpeq" #X0224F "≏")
-    ("mathrel" "\\bumpeqq" #X02AAE "⪮")
-    ("mathrel" "\\ccwundercurvearrow" #X0293F "⤿")
-    ("mathrel" "\\cirbot" #X027DF "⟟")
-    ("mathrel" "\\circeq" #X02257 "≗")
-    ("mathrel" "\\circleonleftarrow" #X02B30 "⬰")
-    ("mathrel" "\\circleonrightarrow" #X021F4 "⇴")
-    ("mathrel" "\\cirmid" #X02AEF "⫯")
-    ("mathrel" "\\closure" #X02050 "⁐")
-    ("mathrel" "\\coloneq" #X02254 "≔")
-    ("mathrel" "\\cong" #X02245 "≅")
-    ("mathrel" "\\congdot" #X02A6D "⩭")
-    ("mathrel" "\\csub" #X02ACF "⫏")
-    ("mathrel" "\\csube" #X02AD1 "⫑")
-    ("mathrel" "\\csup" #X02AD0 "⫐")
-    ("mathrel" "\\csupe" #X02AD2 "⫒")
-    ("mathrel" "\\curlyeqprec" #X022DE "⋞")
-    ("mathrel" "\\curlyeqsucc" #X022DF "⋟")
-    ("mathrel" "\\curvearrowleft" #X021B6 "↶")
-    ("mathrel" "\\curvearrowleftplus" #X0293D "⤽")
-    ("mathrel" "\\curvearrowright" #X021B7 "↷")
-    ("mathrel" "\\curvearrowrightminus" #X0293C "⤼")
-    ("mathrel" "\\cwcirclearrow" #X02941 "⥁")
-    ("mathrel" "\\cwgapcirclearrow" #X027F3 "⟳")
-    ("mathrel" "\\cwrightarcarrow" #X02938 "⤸")
-    ("mathrel" "\\cwundercurvearrow" #X0293E "⤾")
-    ("mathrel" "\\dashV" #X02AE3 "⫣")
-    ("mathrel" "\\dashVdash" #X027DB "⟛")
-    ("mathrel" "\\dashcolon" #X02239 "∹")
-    ("mathrel" "\\dashleftharpoondown" #X0296B "⥫")
-    ("mathrel" "\\dashrightharpoondown" #X0296D "⥭")
-    ("mathrel" "\\dashv" #X022A3 "⊣")
-    ("mathrel" "\\dbkarow" #X0290F "⤏")
-    ("mathrel" "\\ddots" #X022F1 "⋱")
-    ("mathrel" "\\ddotseq" #X02A77 "⩷")
-    ("mathrel" "\\diamondleftarrow" #X0291D "⤝")
-    ("mathrel" "\\diamondleftarrowbar" #X0291F "⤟")
-    ("mathrel" "\\disin" #X022F2 "⋲")
-    ("mathrel" "\\doteq" #X02250 "≐")
-    ("mathrel" "\\dotequiv" #X02A67 "⩧")
-    ("mathrel" "\\dotsim" #X02A6A "⩪")
-    ("mathrel" "\\dotsminusdots" #X0223A "∺")
-    ("mathrel" "\\downarrow" #X02193 "↓")
-    ("mathrel" "\\downarrowbar" #X02913 "⤓")
-    ("mathrel" "\\downarrowbarred" #X02908 "⤈")
-    ("mathrel" "\\downdownarrows" #X021CA "⇊")
-    ("mathrel" "\\downfishtail" #X0297F "⥿")
-    ("mathrel" "\\downharpoonleft" #X021C3 "⇃")
-    ("mathrel" "\\downharpoonleftbar" #X02959 "⥙")
-    ("mathrel" "\\downharpoonright" #X021C2 "⇂")
-    ("mathrel" "\\downharpoonrightbar" #X02955 "⥕")
-    ("mathrel" "\\downharpoonsleftright" #X02965 "⥥")
-    ("mathrel" "\\downuparrows" #X021F5 "⇵")
-    ("mathrel" "\\downupharpoonsleftright" #X0296F "⥯")
-    ("mathrel" "\\downzigzagarrow" #X021AF "↯")
-    ("mathrel" "\\drbkarow" #X02910 "⤐")
-    ("mathrel" "\\dualmap" #X029DF "⧟")
-    ("mathrel" "\\egsdot" #X02A98 "⪘")
-    ("mathrel" "\\elsdot" #X02A97 "⪗")
-    ("mathrel" "\\eparsl" #X029E3 "⧣")
-    ("mathrel" "\\eqcirc" #X02256 "≖")
-    ("mathrel" "\\eqcolon" #X02255 "≕")
-    ("mathrel" "\\eqdef" #X0225D "≝")
-    ("mathrel" "\\eqdot" #X02A66 "⩦")
-    ("mathrel" "\\eqeq" #X02A75 "⩵")
-    ("mathrel" "\\eqeqeq" #X02A76 "⩶")
-    ("mathrel" "\\eqgtr" #X022DD "⋝")
-    ("mathrel" "\\eqless" #X022DC "⋜")
-    ("mathrel" "\\eqqgtr" #X02A9A "⪚")
-    ("mathrel" "\\eqqless" #X02A99 "⪙")
-    ("mathrel" "\\eqqsim" #X02A73 "⩳")
-    ("mathrel" "\\eqqslantgtr" #X02A9C "⪜")
-    ("mathrel" "\\eqqslantless" #X02A9B "⪛")
-    ("mathrel" "\\eqsim" #X02242 "≂")
-    ("mathrel" "\\eqslantgtr" #X02A96 "⪖")
-    ("mathrel" "\\eqslantless" #X02A95 "⪕")
-    ("mathrel" "\\equal" #X0003D "=")
-    ("mathrel" "\\equalleftarrow" #X02B40 "⭀")
-    ("mathrel" "\\equalparallel" #X022D5 "⋕")
-    ("mathrel" "\\equalrightarrow" #X02971 "⥱")
-    ("mathrel" "\\equiv" #X02261 "≡")
-    ("mathrel" "\\equivDD" #X02A78 "⩸")
-    ("mathrel" "\\equivVert" #X02A68 "⩨")
-    ("mathrel" "\\equivVvert" #X02A69 "⩩")
-    ("mathrel" "\\eqvparsl" #X029E5 "⧥")
-    ("mathrel" "\\fallingdotseq" #X02252 "≒")
-    ("mathrel" "\\fbowtie" #X029D3 "⧓")
-    ("mathrel" "\\forks" #X02ADC "⫝̸")
-    ("mathrel" "\\forksnot" #X02ADD "⫝")
-    ("mathrel" "\\forkv" #X02AD9 "⫙")
-    ("mathrel" "\\frown" #X02322 "⌢")
-    ("mathrel" "\\geq" #X02265 "≥")
-    ("mathrel" "\\geqq" #X02267 "≧")
-    ("mathrel" "\\geqqslant" #X02AFA "⫺")
-    ("mathrel" "\\geqslant" #X02A7E "⩾")
-    ("mathrel" "\\gescc" #X02AA9 "⪩")
-    ("mathrel" "\\gesdot" #X02A80 "⪀")
-    ("mathrel" "\\gesdoto" #X02A82 "⪂")
-    ("mathrel" "\\gesdotol" #X02A84 "⪄")
-    ("mathrel" "\\gesles" #X02A94 "⪔")
-    ("mathrel" "\\gg" #X0226B "≫")
-    ("mathrel" "\\ggg" #X022D9 "⋙")
-    ("mathrel" "\\gggnest" #X02AF8 "⫸")
-    ("mathrel" "\\glE" #X02A92 "⪒")
-    ("mathrel" "\\gla" #X02AA5 "⪥")
-    ("mathrel" "\\gleichstark" #X029E6 "⧦")
-    ("mathrel" "\\glj" #X02AA4 "⪤")
-    ("mathrel" "\\gnapprox" #X02A8A "⪊")
-    ("mathrel" "\\gneq" #X02A88 "⪈")
-    ("mathrel" "\\gneqq" #X02269 "≩")
-    ("mathrel" "\\gnsim" #X022E7 "⋧")
-    ("mathrel" "\\greater" #X0003E ">")
-    ("mathrel" "\\gsime" #X02A8E "⪎")
-    ("mathrel" "\\gsiml" #X02A90 "⪐")
-    ("mathrel" "\\gtcc" #X02AA7 "⪧")
-    ("mathrel" "\\gtcir" #X02A7A "⩺")
-    ("mathrel" "\\gtquest" #X02A7C "⩼")
-    ("mathrel" "\\gtrapprox" #X02A86 "⪆")
-    ("mathrel" "\\gtrarr" #X02978 "⥸")
-    ("mathrel" "\\gtrdot" #X022D7 "⋗")
-    ("mathrel" "\\gtreqless" #X022DB "⋛")
-    ("mathrel" "\\gtreqqless" #X02A8C "⪌")
-    ("mathrel" "\\gtrless" #X02277 "≷")
-    ("mathrel" "\\gtrsim" #X02273 "≳")
-    ("mathrel" "\\hatapprox" #X02A6F "⩯")
-    ("mathrel" "\\hknearrow" #X02924 "⤤")
-    ("mathrel" "\\hknwarrow" #X02923 "⤣")
-    ("mathrel" "\\hksearow" #X02925 "⤥")
-    ("mathrel" "\\hkswarow" #X02926 "⤦")
-    ("mathrel" "\\hookleftarrow" #X021A9 "↩")
-    ("mathrel" "\\hookrightarrow" #X021AA "↪")
-    ("mathrel" "\\imageof" #X022B7 "⊷")
-    ("mathrel" "\\in" #X02208 "∈")
-    ("mathrel" "\\isinE" #X022F9 "⋹")
-    ("mathrel" "\\isindot" #X022F5 "⋵")
-    ("mathrel" "\\isinobar" #X022F7 "⋷")
-    ("mathrel" "\\isins" #X022F4 "⋴")
-    ("mathrel" "\\isinvb" #X022F8 "⋸")
-    ("mathrel" "\\kernelcontraction" #X0223B "∻")
-    ("mathrel" "\\lat" #X02AAB "⪫")
-    ("mathrel" "\\late" #X02AAD "⪭")
-    ("mathrel" "\\leftarrow" #X02190 "←")
-    ("mathrel" "\\leftarrowapprox" #X02B4A "⭊")
-    ("mathrel" "\\leftarrowbackapprox" #X02B42 "⭂")
-    ("mathrel" "\\leftarrowbsimilar" #X02B4B "⭋")
-    ("mathrel" "\\leftarrowless" #X02977 "⥷")
-    ("mathrel" "\\leftarrowonoplus" #X02B32 "⬲")
-    ("mathrel" "\\leftarrowplus" #X02946 "⥆")
-    ("mathrel" "\\leftarrowshortrightarrow" #X02943 "⥃")
-    ("mathrel" "\\leftarrowsimilar" #X02973 "⥳")
-    ("mathrel" "\\leftarrowsubset" #X0297A "⥺")
-    ("mathrel" "\\leftarrowtail" #X021A2 "↢")
-    ("mathrel" "\\leftarrowtriangle" #X021FD "⇽")
-    ("mathrel" "\\leftarrowx" #X02B3E "⬾")
-    ("mathrel" "\\leftbkarrow" #X0290C "⤌")
-    ("mathrel" "\\leftcurvedarrow" #X02B3F "⬿")
-    ("mathrel" "\\leftdbkarrow" #X0290E "⤎")
-    ("mathrel" "\\leftdbltail" #X0291B "⤛")
-    ("mathrel" "\\leftdotarrow" #X02B38 "⬸")
-    ("mathrel" "\\leftdowncurvedarrow" #X02936 "⤶")
-    ("mathrel" "\\leftfishtail" #X0297C "⥼")
-    ("mathrel" "\\leftharpoondown" #X021BD "↽")
-    ("mathrel" "\\leftharpoondownbar" #X0295E "⥞")
-    ("mathrel" "\\leftharpoonsupdown" #X02962 "⥢")
-    ("mathrel" "\\leftharpoonup" #X021BC "↼")
-    ("mathrel" "\\leftharpoonupbar" #X0295A "⥚")
-    ("mathrel" "\\leftharpoonupdash" #X0296A "⥪")
-    ("mathrel" "\\leftleftarrows" #X021C7 "⇇")
-    ("mathrel" "\\leftrightarrow" #X02194 "↔")
-    ("mathrel" "\\leftrightarrowcircle" #X02948 "⥈")
-    ("mathrel" "\\leftrightarrows" #X021C6 "⇆")
-    ("mathrel" "\\leftrightarrowtriangle" #X021FF "⇿")
-    ("mathrel" "\\leftrightharpoondowndown" #X02950 "⥐")
-    ("mathrel" "\\leftrightharpoondownup" #X0294B "⥋")
-    ("mathrel" "\\leftrightharpoons" #X021CB "⇋")
-    ("mathrel" "\\leftrightharpoonsdown" #X02967 "⥧")
-    ("mathrel" "\\leftrightharpoonsup" #X02966 "⥦")
-    ("mathrel" "\\leftrightharpoonupdown" #X0294A "⥊")
-    ("mathrel" "\\leftrightharpoonupup" #X0294E "⥎")
-    ("mathrel" "\\leftrightsquigarrow" #X021AD "↭")
-    ("mathrel" "\\leftsquigarrow" #X021DC "⇜")
-    ("mathrel" "\\lefttail" #X02919 "⤙")
-    ("mathrel" "\\leftthreearrows" #X02B31 "⬱")
-    ("mathrel" "\\leftwavearrow" #X0219C "↜")
-    ("mathrel" "\\leq" #X02264 "≤")
-    ("mathrel" "\\leqq" #X02266 "≦")
-    ("mathrel" "\\leqqslant" #X02AF9 "⫹")
-    ("mathrel" "\\leqslant" #X02A7D "⩽")
-    ("mathrel" "\\lescc" #X02AA8 "⪨")
-    ("mathrel" "\\lesdot" #X02A7F "⩿")
-    ("mathrel" "\\lesdoto" #X02A81 "⪁")
-    ("mathrel" "\\lesdotor" #X02A83 "⪃")
-    ("mathrel" "\\lesges" #X02A93 "⪓")
-    ("mathrel" "\\less" #X0003C "<")
-    ("mathrel" "\\lessapprox" #X02A85 "⪅")
-    ("mathrel" "\\lessdot" #X022D6 "⋖")
-    ("mathrel" "\\lesseqgtr" #X022DA "⋚")
-    ("mathrel" "\\lesseqqgtr" #X02A8B "⪋")
-    ("mathrel" "\\lessgtr" #X02276 "≶")
-    ("mathrel" "\\lesssim" #X02272 "≲")
-    ("mathrel" "\\lfbowtie" #X029D1 "⧑")
-    ("mathrel" "\\lftimes" #X029D4 "⧔")
-    ("mathrel" "\\lgE" #X02A91 "⪑")
-    ("mathrel" "\\ll" #X0226A "≪")
-    ("mathrel" "\\lll" #X022D8 "⋘")
-    ("mathrel" "\\lllnest" #X02AF7 "⫷")
-    ("mathrel" "\\lnapprox" #X02A89 "⪉")
-    ("mathrel" "\\lneq" #X02A87 "⪇")
-    ("mathrel" "\\lneqq" #X02268 "≨")
-    ("mathrel" "\\lnsim" #X022E6 "⋦")
-    ("mathrel" "\\longdashv" #X027DE "⟞")
-    ("mathrel" "\\longleftarrow" #X027F5 "⟵")
-    ("mathrel" "\\longleftrightarrow" #X027F7 "⟷")
-    ("mathrel" "\\longleftsquigarrow" #X02B33 "⬳")
-    ("mathrel" "\\longmapsfrom" #X027FB "⟻")
-    ("mathrel" "\\longmapsto" #X027FC "⟼")
-    ("mathrel" "\\longrightarrow" #X027F6 "⟶")
-    ("mathrel" "\\longrightsquigarrow" #X027FF "⟿")
-    ("mathrel" "\\looparrowleft" #X021AB "↫")
-    ("mathrel" "\\looparrowright" #X021AC "↬")
-    ("mathrel" "\\lrtriangleeq" #X029E1 "⧡")
-    ("mathrel" "\\lsime" #X02A8D "⪍")
-    ("mathrel" "\\lsimg" #X02A8F "⪏")
-    ("mathrel" "\\lsqhook" #X02ACD "⫍")
-    ("mathrel" "\\ltcc" #X02AA6 "⪦")
-    ("mathrel" "\\ltcir" #X02A79 "⩹")
-    ("mathrel" "\\ltlarr" #X02976 "⥶")
-    ("mathrel" "\\ltquest" #X02A7B "⩻")
-    ("mathrel" "\\ltrivb" #X029CF "⧏")
-    ("mathrel" "\\mapsdown" #X021A7 "↧")
-    ("mathrel" "\\mapsfrom" #X021A4 "↤")
-    ("mathrel" "\\mapsto" #X021A6 "↦")
-    ("mathrel" "\\mapsup" #X021A5 "↥")
-    ("mathrel" "\\mathratio" #X02236 "∶")
-    ("mathrel" "\\measeq" #X0225E "≞")
-    ("mathrel" "\\mid" #X02223 "∣")
-    ("mathrel" "\\midcir" #X02AF0 "⫰")
-    ("mathrel" "\\mlcp" #X02ADB "⫛")
-    ("mathrel" "\\models" #X022A7 "⊧")
-    ("mathrel" "\\multimap" #X022B8 "⊸")
-    ("mathrel" "\\multimapinv" #X027DC "⟜")
-    ("mathrel" "\\nLeftarrow" #X021CD "⇍")
-    ("mathrel" "\\nLeftrightarrow" #X021CE "⇎")
-    ("mathrel" "\\nRightarrow" #X021CF "⇏")
-    ("mathrel" "\\nVDash" #X022AF "⊯")
-    ("mathrel" "\\nVdash" #X022AE "⊮")
-    ("mathrel" "\\nVleftarrow" #X021FA "⇺")
-    ("mathrel" "\\nVleftarrowtail" #X02B3A "⬺")
-    ("mathrel" "\\nVleftrightarrow" #X021FC "⇼")
-    ("mathrel" "\\nVrightarrow" #X021FB "⇻")
-    ("mathrel" "\\nVrightarrowtail" #X02915 "⤕")
-    ("mathrel" "\\nVtwoheadleftarrow" #X02B35 "⬵")
-    ("mathrel" "\\nVtwoheadleftarrowtail" #X02B3D "⬽")
-    ("mathrel" "\\nVtwoheadrightarrow" #X02901 "⤁")
-    ("mathrel" "\\nVtwoheadrightarrowtail" #X02918 "⤘")
-    ("mathrel" "\\napprox" #X02249 "≉")
-    ("mathrel" "\\nasymp" #X0226D "≭")
-    ("mathrel" "\\ncong" #X02247 "≇")
-    ("mathrel" "\\ne" #X02260 "≠")
-    ("mathrel" "\\nearrow" #X02197 "↗")
-    ("mathrel" "\\nequiv" #X02262 "≢")
-    ("mathrel" "\\neswarrow" #X02922 "⤢")
-    ("mathrel" "\\ngeq" #X02271 "≱")
-    ("mathrel" "\\ngtr" #X0226F "≯")
-    ("mathrel" "\\ngtrless" #X02279 "≹")
-    ("mathrel" "\\ngtrsim" #X02275 "≵")
-    ("mathrel" "\\nhpar" #X02AF2 "⫲")
-    ("mathrel" "\\ni" #X0220B "∋")
-    ("mathrel" "\\niobar" #X022FE "⋾")
-    ("mathrel" "\\nis" #X022FC "⋼")
-    ("mathrel" "\\nisd" #X022FA "⋺")
-    ("mathrel" "\\nleftarrow" #X0219A "↚")
-    ("mathrel" "\\nleftrightarrow" #X021AE "↮")
-    ("mathrel" "\\nleq" #X02270 "≰")
-    ("mathrel" "\\nless" #X0226E "≮")
-    ("mathrel" "\\nlessgtr" #X02278 "≸")
-    ("mathrel" "\\nlesssim" #X02274 "≴")
-    ("mathrel" "\\nmid" #X02224 "∤")
-    ("mathrel" "\\nni" #X0220C "∌")
-    ("mathrel" "\\notin" #X02209 "∉")
-    ("mathrel" "\\nparallel" #X02226 "∦")
-    ("mathrel" "\\nprec" #X02280 "⊀")
-    ("mathrel" "\\npreccurlyeq" #X022E0 "⋠")
-    ("mathrel" "\\nrightarrow" #X0219B "↛")
-    ("mathrel" "\\nsim" #X02241 "≁")
-    ("mathrel" "\\nsime" #X02244 "≄")
-    ("mathrel" "\\nsqsubseteq" #X022E2 "⋢")
-    ("mathrel" "\\nsqsupseteq" #X022E3 "⋣")
-    ("mathrel" "\\nsubset" #X02284 "⊄")
-    ("mathrel" "\\nsubseteq" #X02288 "⊈")
-    ("mathrel" "\\nsucc" #X02281 "⊁")
-    ("mathrel" "\\nsucccurlyeq" #X022E1 "⋡")
-    ("mathrel" "\\nsupset" #X02285 "⊅")
-    ("mathrel" "\\nsupseteq" #X02289 "⊉")
-    ("mathrel" "\\ntriangleleft" #X022EA "⋪")
-    ("mathrel" "\\ntrianglelefteq" #X022EC "⋬")
-    ("mathrel" "\\ntriangleright" #X022EB "⋫")
-    ("mathrel" "\\ntrianglerighteq" #X022ED "⋭")
-    ("mathrel" "\\nvDash" #X022AD "⊭")
-    ("mathrel" "\\nvLeftarrow" #X02902 "⤂")
-    ("mathrel" "\\nvLeftrightarrow" #X02904 "⤄")
-    ("mathrel" "\\nvRightarrow" #X02903 "⤃")
-    ("mathrel" "\\nvdash" #X022AC "⊬")
-    ("mathrel" "\\nvleftarrow" #X021F7 "⇷")
-    ("mathrel" "\\nvleftarrowtail" #X02B39 "⬹")
-    ("mathrel" "\\nvleftrightarrow" #X021F9 "⇹")
-    ("mathrel" "\\nvrightarrow" #X021F8 "⇸")
-    ("mathrel" "\\nvrightarrowtail" #X02914 "⤔")
-    ("mathrel" "\\nvtwoheadleftarrow" #X02B34 "⬴")
-    ("mathrel" "\\nvtwoheadleftarrowtail" #X02B3C "⬼")
-    ("mathrel" "\\nvtwoheadrightarrow" #X02900 "⤀")
-    ("mathrel" "\\nvtwoheadrightarrowtail" #X02917 "⤗")
-    ("mathrel" "\\nwarrow" #X02196 "↖")
-    ("mathrel" "\\nwsearrow" #X02921 "⤡")
-    ("mathrel" "\\origof" #X022B6 "⊶")
-    ("mathrel" "\\parallel" #X02225 "∥")
-    ("mathrel" "\\parsim" #X02AF3 "⫳")
-    ("mathrel" "\\partialmeetcontraction" #X02AA3 "⪣")
-    ("mathrel" "\\perp" #X027C2 "⟂")
-    ("mathrel" "\\pitchfork" #X022D4 "⋔")
-    ("mathrel" "\\prec" #X0227A "≺")
-    ("mathrel" "\\precapprox" #X02AB7 "⪷")
-    ("mathrel" "\\preccurlyeq" #X0227C "≼")
-    ("mathrel" "\\preceq" #X02AAF "⪯")
-    ("mathrel" "\\preceqq" #X02AB3 "⪳")
-    ("mathrel" "\\precnapprox" #X02AB9 "⪹")
-    ("mathrel" "\\precneq" #X02AB1 "⪱")
-    ("mathrel" "\\precneqq" #X02AB5 "⪵")
-    ("mathrel" "\\precnsim" #X022E8 "⋨")
-    ("mathrel" "\\precsim" #X0227E "≾")
-    ("mathrel" "\\propto" #X0221D "∝")
-    ("mathrel" "\\prurel" #X022B0 "⊰")
-    ("mathrel" "\\pullback" #X027D3 "⟓")
-    ("mathrel" "\\pushout" #X027D4 "⟔")
-    ("mathrel" "\\questeq" #X0225F "≟")
-    ("mathrel" "\\revnmid" #X02AEE "⫮")
-    ("mathrel" "\\rfbowtie" #X029D2 "⧒")
-    ("mathrel" "\\rftimes" #X029D5 "⧕")
-    ("mathrel" "\\rightarrow" #X02192 "→")
-    ("mathrel" "\\rightarrowapprox" #X02975 "⥵")
-    ("mathrel" "\\rightarrowbackapprox" #X02B48 "⭈")
-    ("mathrel" "\\rightarrowbar" #X021E5 "⇥")
-    ("mathrel" "\\rightarrowbsimilar" #X02B4C "⭌")
-    ("mathrel" "\\rightarrowdiamond" #X0291E "⤞")
-    ("mathrel" "\\rightarrowgtr" #X02B43 "⭃")
-    ("mathrel" "\\rightarrowonoplus" #X027F4 "⟴")
-    ("mathrel" "\\rightarrowplus" #X02945 "⥅")
-    ("mathrel" "\\rightarrowshortleftarrow" #X02942 "⥂")
-    ("mathrel" "\\rightarrowsimilar" #X02974 "⥴")
-    ("mathrel" "\\rightarrowsupset" #X02B44 "⭄")
-    ("mathrel" "\\rightarrowtail" #X021A3 "↣")
-    ("mathrel" "\\rightarrowtriangle" #X021FE "⇾")
-    ("mathrel" "\\rightarrowx" #X02947 "⥇")
-    ("mathrel" "\\rightbkarrow" #X0290D "⤍")
-    ("mathrel" "\\rightcurvedarrow" #X02933 "⤳")
-    ("mathrel" "\\rightdbltail" #X0291C "⤜")
-    ("mathrel" "\\rightdotarrow" #X02911 "⤑")
-    ("mathrel" "\\rightdowncurvedarrow" #X02937 "⤷")
-    ("mathrel" "\\rightfishtail" #X0297D "⥽")
-    ("mathrel" "\\rightharpoondown" #X021C1 "⇁")
-    ("mathrel" "\\rightharpoondownbar" #X02957 "⥗")
-    ("mathrel" "\\rightharpoonsupdown" #X02964 "⥤")
-    ("mathrel" "\\rightharpoonup" #X021C0 "⇀")
-    ("mathrel" "\\rightharpoonupbar" #X02953 "⥓")
-    ("mathrel" "\\rightharpoonupdash" #X0296C "⥬")
-    ("mathrel" "\\rightimply" #X02970 "⥰")
-    ("mathrel" "\\rightleftarrows" #X021C4 "⇄")
-    ("mathrel" "\\rightleftharpoons" #X021CC "⇌")
-    ("mathrel" "\\rightleftharpoonsdown" #X02969 "⥩")
-    ("mathrel" "\\rightleftharpoonsup" #X02968 "⥨")
-    ("mathrel" "\\rightrightarrows" #X021C9 "⇉")
-    ("mathrel" "\\rightsquigarrow" #X021DD "⇝")
-    ("mathrel" "\\righttail" #X0291A "⤚")
-    ("mathrel" "\\rightthreearrows" #X021F6 "⇶")
-    ("mathrel" "\\rightwavearrow" #X0219D "↝")
-    ("mathrel" "\\risingdotseq" #X02253 "≓")
-    ("mathrel" "\\rsqhook" #X02ACE "⫎")
-    ("mathrel" "\\rtriltri" #X029CE "⧎")
-    ("mathrel" "\\ruledelayed" #X029F4 "⧴")
-    ("mathrel" "\\scurel" #X022B1 "⊱")
-    ("mathrel" "\\searrow" #X02198 "↘")
-    ("mathrel" "\\shortdowntack" #X02ADF "⫟")
-    ("mathrel" "\\shortlefttack" #X02ADE "⫞")
-    ("mathrel" "\\shortrightarrowleftarrow" #X02944 "⥄")
-    ("mathrel" "\\shortuptack" #X02AE0 "⫠")
-    ("mathrel" "\\sim" #X0223C "∼")
-    ("mathrel" "\\simeq" #X02243 "≃")
-    ("mathrel" "\\simgE" #X02AA0 "⪠")
-    ("mathrel" "\\simgtr" #X02A9E "⪞")
-    ("mathrel" "\\similarleftarrow" #X02B49 "⭉")
-    ("mathrel" "\\similarrightarrow" #X02972 "⥲")
-    ("mathrel" "\\simlE" #X02A9F "⪟")
-    ("mathrel" "\\simless" #X02A9D "⪝")
-    ("mathrel" "\\simminussim" #X02A6C "⩬")
-    ("mathrel" "\\simneqq" #X02246 "≆")
-    ("mathrel" "\\simrdots" #X02A6B "⩫")
-    ("mathrel" "\\smallin" #X0220A "∊")
-    ("mathrel" "\\smallni" #X0220D "∍")
-    ("mathrel" "\\smeparsl" #X029E4 "⧤")
-    ("mathrel" "\\smile" #X02323 "⌣")
-    ("mathrel" "\\smt" #X02AAA "⪪")
-    ("mathrel" "\\smte" #X02AAC "⪬")
-    ("mathrel" "\\sqsubset" #X0228F "⊏")
-    ("mathrel" "\\sqsubseteq" #X02291 "⊑")
-    ("mathrel" "\\sqsubsetneq" #X022E4 "⋤")
-    ("mathrel" "\\sqsupset" #X02290 "⊐")
-    ("mathrel" "\\sqsupseteq" #X02292 "⊒")
-    ("mathrel" "\\sqsupsetneq" #X022E5 "⋥")
-    ("mathrel" "\\stareq" #X0225B "≛")
-    ("mathrel" "\\subedot" #X02AC3 "⫃")
-    ("mathrel" "\\submult" #X02AC1 "⫁")
-    ("mathrel" "\\subrarr" #X02979 "⥹")
-    ("mathrel" "\\subset" #X02282 "⊂")
-    ("mathrel" "\\subsetapprox" #X02AC9 "⫉")
-    ("mathrel" "\\subsetdot" #X02ABD "⪽")
-    ("mathrel" "\\subseteq" #X02286 "⊆")
-    ("mathrel" "\\subseteqq" #X02AC5 "⫅")
-    ("mathrel" "\\subsetneq" #X0228A "⊊")
-    ("mathrel" "\\subsetneqq" #X02ACB "⫋")
-    ("mathrel" "\\subsetplus" #X02ABF "⪿")
-    ("mathrel" "\\subsim" #X02AC7 "⫇")
-    ("mathrel" "\\subsub" #X02AD5 "⫕")
-    ("mathrel" "\\subsup" #X02AD3 "⫓")
-    ("mathrel" "\\succ" #X0227B "≻")
-    ("mathrel" "\\succapprox" #X02AB8 "⪸")
-    ("mathrel" "\\succcurlyeq" #X0227D "≽")
-    ("mathrel" "\\succeq" #X02AB0 "⪰")
-    ("mathrel" "\\succeqq" #X02AB4 "⪴")
-    ("mathrel" "\\succnapprox" #X02ABA "⪺")
-    ("mathrel" "\\succneq" #X02AB2 "⪲")
-    ("mathrel" "\\succneqq" #X02AB6 "⪶")
-    ("mathrel" "\\succnsim" #X022E9 "⋩")
-    ("mathrel" "\\succsim" #X0227F "≿")
-    ("mathrel" "\\supdsub" #X02AD8 "⫘")
-    ("mathrel" "\\supedot" #X02AC4 "⫄")
-    ("mathrel" "\\suphsol" #X027C9 "⟉")
-    ("mathrel" "\\suphsub" #X02AD7 "⫗")
-    ("mathrel" "\\suplarr" #X0297B "⥻")
-    ("mathrel" "\\supmult" #X02AC2 "⫂")
-    ("mathrel" "\\supset" #X02283 "⊃")
-    ("mathrel" "\\supsetapprox" #X02ACA "⫊")
-    ("mathrel" "\\supsetdot" #X02ABE "⪾")
-    ("mathrel" "\\supseteq" #X02287 "⊇")
-    ("mathrel" "\\supseteqq" #X02AC6 "⫆")
-    ("mathrel" "\\supsetneq" #X0228B "⊋")
-    ("mathrel" "\\supsetneqq" #X02ACC "⫌")
-    ("mathrel" "\\supsetplus" #X02AC0 "⫀")
-    ("mathrel" "\\supsim" #X02AC8 "⫈")
-    ("mathrel" "\\supsub" #X02AD4 "⫔")
-    ("mathrel" "\\supsup" #X02AD6 "⫖")
-    ("mathrel" "\\swarrow" #X02199 "↙")
-    ("mathrel" "\\toea" #X02928 "⤨")
-    ("mathrel" "\\tona" #X02927 "⤧")
-    ("mathrel" "\\topfork" #X02ADA "⫚")
-    ("mathrel" "\\tosa" #X02929 "⤩")
-    ("mathrel" "\\towa" #X0292A "⤪")
-    ("mathrel" "\\trianglelefteq" #X022B4 "⊴")
-    ("mathrel" "\\triangleq" #X0225C "≜")
-    ("mathrel" "\\trianglerighteq" #X022B5 "⊵")
-    ("mathrel" "\\twoheaddownarrow" #X021A1 "↡")
-    ("mathrel" "\\twoheadleftarrow" #X0219E "↞")
-    ("mathrel" "\\twoheadleftarrowtail" #X02B3B "⬻")
-    ("mathrel" "\\twoheadleftdbkarrow" #X02B37 "⬷")
-    ("mathrel" "\\twoheadmapsfrom" #X02B36 "⬶")
-    ("mathrel" "\\twoheadmapsto" #X02905 "⤅")
-    ("mathrel" "\\twoheadrightarrow" #X021A0 "↠")
-    ("mathrel" "\\twoheadrightarrowtail" #X02916 "⤖")
-    ("mathrel" "\\twoheaduparrow" #X0219F "↟")
-    ("mathrel" "\\twoheaduparrowcircle" #X02949 "⥉")
-    ("mathrel" "\\uparrow" #X02191 "↑")
-    ("mathrel" "\\uparrowbarred" #X02909 "⤉")
-    ("mathrel" "\\updownarrow" #X02195 "↕")
-    ("mathrel" "\\updownarrows" #X021C5 "⇅")
-    ("mathrel" "\\updownharpoonleftleft" #X02951 "⥑")
-    ("mathrel" "\\updownharpoonleftright" #X0294D "⥍")
-    ("mathrel" "\\updownharpoonrightleft" #X0294C "⥌")
-    ("mathrel" "\\updownharpoonrightright" #X0294F "⥏")
-    ("mathrel" "\\updownharpoonsleftright" #X0296E "⥮")
-    ("mathrel" "\\upfishtail" #X0297E "⥾")
-    ("mathrel" "\\upharpoonleft" #X021BF "↿")
-    ("mathrel" "\\upharpoonleftbar" #X02960 "⥠")
-    ("mathrel" "\\upharpoonright" #X021BE "↾")
-    ("mathrel" "\\upharpoonrightbar" #X0295C "⥜")
-    ("mathrel" "\\upharpoonsleftright" #X02963 "⥣")
-    ("mathrel" "\\upin" #X027D2 "⟒")
-    ("mathrel" "\\upuparrows" #X021C8 "⇈")
-    ("mathrel" "\\vBar" #X02AE8 "⫨")
-    ("mathrel" "\\vBarv" #X02AE9 "⫩")
-    ("mathrel" "\\vDash" #X022A8 "⊨")
-    ("mathrel" "\\vDdash" #X02AE2 "⫢")
-    ("mathrel" "\\varVdash" #X02AE6 "⫦")
-    ("mathrel" "\\varisinobar" #X022F6 "⋶")
-    ("mathrel" "\\varisins" #X022F3 "⋳")
-    ("mathrel" "\\varniobar" #X022FD "⋽")
-    ("mathrel" "\\varnis" #X022FB "⋻")
-    ("mathrel" "\\vartriangleleft" #X022B2 "⊲")
-    ("mathrel" "\\vartriangleright" #X022B3 "⊳")
-    ("mathrel" "\\vbrtri" #X029D0 "⧐")
-    ("mathrel" "\\vdash" #X022A2 "⊢")
-    ("mathrel" "\\vdots" #X022EE "⋮")
-    ("mathrel" "\\veeeq" #X0225A "≚")
-    ("mathrel" "\\veeonwedge" #X02A59 "⩙")
-    ("mathrel" "\\vlongdash" #X027DD "⟝")
-    ("mathrel" "\\wedgeq" #X02259 "≙")
-    ("mathunder" "\\underbrace" #X023DF "⏟")
-    ("mathunder" "\\underbracket" #X023B5 "⎵")
-    ("mathunder" "\\underparen" #X023DD "⏝"))
-  "Extended list of mathematical symbols.
-Taken from http://milde.users.sourceforge.net/LUCR/Math/ and
-prepared with `msl--read-LUCR-list' function. This list does not
-contain some (about 190) of the standard LaTeX math commands in
-`math-symbol-list-basic' because they are named differently in
-unicode-math standard.")
+
+;;; SYMBOLS
 
 (defconst math-symbol-list-latex-commands
   '("address" "addtocounter" "addtolength" "addvspace" "Alph" "alph" "Alph
@@ -3061,42 +116,3585 @@ unicode-math standard.")
     "width" "year")
   "List of the latex commands.")
 
-
-;; IMPORT UTILITIES
+(defconst math-symbol-list-basic
+  '(("accent"  "\\acute"       #X301)
+    ("accent"  "\\bar" #X304)
+    ("accent"  "\\breve"       #X306)
+    ("accent"  "\\check"       #X30C)
+    ("accent"  "\\ddot"        #X308)
+    ("accent"  "\\dot" #X307)
+    ("accent"  "\\grave"       #X300)
+    ("accent"  "\\hat" #X302)
+    ("accent"  "\\tilde"       #X303)
+    ("accent"  "\\vec" #X20D7)
+    ("arrow"   "\\Downarrow"   #X21D3)
+    ("arrow"   "\\Leftarrow"   #X21D0)
+    ("arrow"   "\\Leftrightarrow"      #X21D4)
+    ("arrow"   "\\Longleftarrow"       #X27F8)
+    ("arrow"   "\\Longleftrightarrow"  #X27FA)
+    ("arrow"   "\\Longrightarrow"      #X27F9)
+    ("arrow"   "\\Rightarrow"  #X21D2)
+    ("arrow"   "\\Uparrow"     #X21D1)
+    ("arrow"   "\\Updownarrow" #X21D5)
+    ("arrow"   "\\downarrow"   #X2193)
+    ("arrow"   "\\hookleftarrow"       #X21A9)
+    ("arrow"   "\\hookrightarrow"      #X21AA)
+    ("arrow"   "\\leftarrow"   #X2190)
+    ("arrow"   "\\leftharpoondown"     #X21BD)
+    ("arrow"   "\\leftharpoonup"       #X21BC)
+    ("arrow"   "\\leftrightarrow"      #X2194)
+    ("arrow"   "\\longleftarrow"       #X27F5)
+    ("arrow"   "\\longleftrightarrow"  #X27F7)
+    ("arrow"   "\\longmapsto"  #X27FC)
+    ("arrow"   "\\longrightarrow"      #X27F6)
+    ("arrow"   "\\mapsto"      #X21A6)
+    ("arrow"   "\\nearrow"     #X2197)
+    ("arrow"   "\\nwarrow"     #X2196)
+    ("arrow"   "\\rightarrow"  #X2192)
+    ("arrow"   "\\rightharpoondown"    #X21C1)
+    ("arrow"   "\\rightharpoonup"      #X21C0)
+    ("arrow"   "\\searrow"     #X2198)
+    ("arrow"   "\\swarrow"     #X2199)
+    ("arrow"   "\\uparrow"     #X2191)
+    ("arrow"   "\\updownarrow" #X2195)
+    ("bin"     "\\amalg"       #X2A3F)
+    ("bin"     "\\ast" #X2217)
+    ("bin"     "\\bigcirc"     #X25CB)
+    ("bin"     "\\bigtriangledown"     #X25BD)
+    ("bin"     "\\bigtriangleup"       #X25B3)
+    ("bin"     "\\bullet"      #X2219)
+    ("bin"     "\\cap" #X2229)
+    ("bin"     "\\cdot"        #X22C5)
+    ("bin"     "\\circ"        #X2218)
+    ("bin"     "\\cup" #X222A)
+    ("bin"     "\\dagger"      #X2020)
+    ("bin"     "\\ddagger"     #X2021)
+    ("bin"     "\\diamond"     #X22C4)
+    ("bin"     "\\div" #XF7)
+    ("bin"     "\\lhd")
+    ("bin"     "\\mp"  #X2213)
+    ("bin"     "\\odot"        #X2299)
+    ("bin"     "\\ominus"      #X2296)
+    ("bin"     "\\oplus"       #X2295)
+    ("bin"     "\\oslash"      #X2205)
+    ("bin"     "\\otimes"      #X2297)
+    ("bin"     "\\pm"  #XB1)
+    ("bin"     "\\rhd")
+    ("bin"     "\\setminus"    #X2216)
+    ("bin"     "\\sqcap"       #X2293)
+    ("bin"     "\\star"        #X22C6)
+    ("bin"     "\\times"       #XD7)
+    ("bin"     "\\triangleleft"        #X25C1)
+    ("bin"     "\\triangleright"       #X25B7)
+    ("bin"     "\\unlhd")
+    ("bin"     "\\unrhd")
+    ("bin"     "\\uplus"       #X228E)
+    ("bin"     "\\vee" #X2228)
+    ("bin"     "\\wedge"       #X2227)
+    ("bin"     "\\wr"  #X2240)
+    ("constr"  "\\frac")
+    ("constr"  "\\overbrace"   #XFE37)
+    ("constr"  "\\overleftarrow"       #X20D6)
+    ("constr"  "\\overline")
+    ("constr"  "\\overrightarrow")
+    ("constr"  "\\sqrt"        #X221A)
+    ("constr"  "\\underbrace"  #XFE38)
+    ("constr"  "\\underline")
+    ("constr"  "\\widehat"     #X302)
+    ("constr"  "\\widetilde"   #X303)
+    ("delim"   "\\Arrowvert")
+    ("delim"   "\\arrowvert")
+    ("delim"   "\\backslash"   #X5C)
+    ("delim"   "\\bracevert")
+    ("delim"   "\\langle"      #X27E8)
+    ("delim"   "\\lceil"       #X2308)
+    ("delim"   "\\lfloor"      #X230A)
+    ("delim"   "\\lgroup")
+    ("delim"   "\\lmoustache"  #X23B0)
+    ("delim"   "\\rangle"      #X27E9)
+    ("delim"   "\\rceil"       #X2309)
+    ("delim"   "\\rfloor"      #X230B)
+    ("delim"   "\\rgroup")
+    ("delim"   "\\rmoustache"  #X23B1)
+    ("delim"   "\\{")
+    ("delim"   "\\|")
+    ("delim"   "\\}")
+    ("greek"   "\\alpha"       #X3B1)
+    ("greek"   "\\beta"        #X3B2)
+    ("greek"   "\\chi" #X3C7)
+    ("greek"   "\\delta"       #X3B4)
+    ("greek"   "\\epsilon"     #X3F5)
+    ("greek"   "\\eta" #X3B7)
+    ("greek"   "\\gamma"       #X3B3)
+    ("greek"   "\\iota"        #X3B9)
+    ("greek"   "\\kappa"       #X3BA)
+    ("greek"   "\\lambda"      #X3BB)
+    ("greek"   "\\mu"  #X3BC)
+    ("greek"   "\\nu"  #X3BD)
+    ("greek"   "\\omega"       #X3C9)
+    ("greek"   "\\phi" #X3D5)
+    ("greek"   "\\pi"  #X3C0)
+    ("greek"   "\\psi" #X3C8)
+    ("greek"   "\\rho" #X3C1)
+    ("greek"   "\\sigma"       #X3C3)
+    ("greek"   "\\tau" #X3C4)
+    ("greek"   "\\theta"       #X3B8)
+    ("greek"   "\\upsilon"     #X3C5)
+    ("greek"   "\\varepsilon"  #X3B5)
+    ("greek"   "\\varphi"      #X3C6)
+    ("greek"   "\\varpi"       #X3D6)
+    ("greek"   "\\varrho"      #X3F1)
+    ("greek"   "\\varsigma"    #X3C2)
+    ("greek"   "\\vartheta"    #X3D1)
+    ("greek"   "\\xi"  #X3BE)
+    ("greek"   "\\zeta"        #X3B6)
+    ("Greek"   "\\Delta"       #X394)
+    ("Greek"   "\\Gamma"       #X393)
+    ("Greek"   "\\Lambda"      #X39B)
+    ("Greek"   "\\Omega"       #X3A9)
+    ("Greek"   "\\Phi" #X3A6)
+    ("Greek"   "\\Pi"  #X3A0)
+    ("Greek"   "\\Psi" #X3A8)
+    ("Greek"   "\\Sigma"       #X3A3)
+    ("Greek"   "\\Theta"       #X398)
+    ("Greek"   "\\Upsilon"     #X3D2)
+    ("Greek"   "\\Xi"  #X39E)
+    ("misc"    "\\Im"  #X2111)
+    ("misc"    "\\Re"  #X211C)
+    ("misc"    "\\aleph"       #X2135)
+    ("misc"    "\\angle"       #X2220)
+    ("misc"    "\\bot" #X22A5)
+    ("misc"    "\\clubsuit"    #X2663)
+    ("misc"    "\\diamondsuit" #X2662)
+    ("misc"    "\\ell" #X2113)
+    ("misc"    "\\emptyset"    #X2205)
+    ("misc"    "\\exists"      #X2203)
+    ("misc"    "\\flat"        #X266D)
+    ("misc"    "\\forall"      #X2200)
+    ("misc"    "\\hbar"        #X210F)
+    ("misc"    "\\heartsuit"   #X2661)
+    ("misc"    "\\imath"       #X131)
+    ("misc"    "\\infty"       #X221E)
+    ("misc"    "\\jmath"       #X1D6A5)
+    ("misc"    "\\mho" #X2127)
+    ("misc"    "\\nabla"       #X2207)
+    ("misc"    "\\natural"     #X266E)
+    ("misc"    "\\neg" #XAC)
+    ("misc"    "\\not" #X338)
+    ("misc"    "\\partial"     #X2202)
+    ("misc"    "\\prime"       #X2032)
+    ("misc"    "\\sharp"       #X266F)
+    ("misc"    "\\spadesuit"   #X2660)
+    ("misc"    "\\surd"        #X221A)
+    ("misc"    "\\top" #X22A4)
+    ("misc"    "\\triangle"    #X25B3)
+    ("misc"    "\\wp"  #X2118)
+    ("nonsymb" "\\Box")
+    ("nonsymb" "\\Diamond")
+    ("nonsymb" "\\Pr")
+    ("nonsymb" "\\arccos")
+    ("nonsymb" "\\arcsin")
+    ("nonsymb" "\\arctan")
+    ("nonsymb" "\\arg")
+    ("nonsymb" "\\cos")
+    ("nonsymb" "\\cosh")
+    ("nonsymb" "\\cot")
+    ("nonsymb" "\\coth")
+    ("nonsymb" "\\csc")
+    ("nonsymb" "\\deg")
+    ("nonsymb" "\\det")
+    ("nonsymb" "\\dim")
+    ("nonsymb" "\\exp")
+    ("nonsymb" "\\gcd")
+    ("nonsymb" "\\hom")
+    ("nonsymb" "\\inf")
+    ("nonsymb" "\\ker")
+    ("nonsymb" "\\lg")
+    ("nonsymb" "\\lim")
+    ("nonsymb" "\\liminf")
+    ("nonsymb" "\\limsup")
+    ("nonsymb" "\\ln")
+    ("nonsymb" "\\log")
+    ("nonsymb" "\\max")
+    ("nonsymb" "\\min")
+    ("nonsymb" "\\sec")
+    ("nonsymb" "\\sin")
+    ("nonsymb" "\\sinh")
+    ("nonsymb" "\\sup")
+    ("nonsymb" "\\tan")
+    ("nonsymb" "\\tanh")
+    ("punct"   "\\cdots"       #X22EF)
+    ("punct"   "\\colon"       #X3A)
+    ("punct"   "\\ddots"       #X22F1)
+    ("punct"   "\\ldots"       #X2026)
+    ("punct"   "\\vdots"       #X22EE)
+    ("rel"     "\\Join"        #X2A1D)
+    ("rel"     "\\approx"      #X2248)
+    ("rel"     "\\asymp"       #X224D)
+    ("rel"     "\\bowtie"      #X22C8)
+    ("rel"     "\\cong"        #X2245)
+    ("rel"     "\\dashv"       #X22A3)
+    ("rel"     "\\doteq"       #X2250)
+    ("rel"     "\\equiv"       #X2261)
+    ("rel"     "\\frown"       #X2322)
+    ("rel"     "\\geq" #X2265)
+    ("rel"     "\\gg"  #X226B)
+    ("rel"     "\\in"  #X2208)
+    ("rel"     "\\leq" #X2264)
+    ("rel"     "\\ll"  #X226A)
+    ("rel"     "\\mid" #X2223)
+    ("rel"     "\\models"      #X22A7)
+    ("rel"     "\\neq" #X2260)
+    ("rel"     "\\ni"  #X220B)
+    ("rel"     "\\parallel"    #X2225)
+    ("rel"     "\\perp"        #X27C2)
+    ("rel"     "\\prec"        #X227A)
+    ("rel"     "\\preceq"      #X2AAF)
+    ("rel"     "\\propto"      #X221D)
+    ("rel"     "\\qed" #X220E)
+    ("rel"     "\\sim" #X223C)
+    ("rel"     "\\simeq"       #X2243)
+    ("rel"     "\\smile"       #X2323)
+    ("rel"     "\\sqsubset"    #X228F)
+    ("rel"     "\\sqsubseteq"  #X2291)
+    ("rel"     "\\sqsupset"    #X2290)
+    ("rel"     "\\sqsupseteq"  #X2292)
+    ("rel"     "\\subset"      #X2282)
+    ("rel"     "\\subseteq"    #X2286)
+    ("rel"     "\\succ"        #X227B)
+    ("rel"     "\\succeq"      #X2AB0)
+    ("rel"     "\\supset"      #X2283)
+    ("rel"     "\\supseteq"    #X2287)
+    ("rel"     "\\vdash"       #X22A2)
+    ("var"     "\\bigcap"      #X22C2)
+    ("var"     "\\bigcup"      #X22C3)
+    ("var"     "\\bigodot"     #X2A00)
+    ("var"     "\\bigoplus"    #X2A01)
+    ("var"     "\\bigotimes"   #X2A02)
+    ("var"     "\\bigsqcup"    #X2A06)
+    ("var"     "\\biguplus"    #X2A04)
+    ("var"     "\\bigvee"      #X22C1)
+    ("var"     "\\bigwedge"    #X22C0)
+    ("var"     "\\coprod"      #X2210)
+    ("var"     "\\int" #X222B)
+    ("var"     "\\oint"        #X222E)
+    ("var"     "\\prod"        #X220F)
+    ("var"     "\\sum" #X2211)
+    ;; extra aliases retrieved from LUCR
+    ("bin" "\\land" 8743 "∧")
+    ("bin" "\\lor" 8744 "∨")
+    ("close" "\\rbrace" 125 "}")
+    ("fence" "\\vert" 124 "|")
+    ("fence" "\\Vert" 8214 "‖")
+    ("open" "\\lbrace" 123 "{")
+    ("ord" "\\mathdollar" 36 "$")
+    ("ord" "\\lnot" 172 "¬")
+    ("rel" "\\gets" 8592 "←")
+    ("rel" "\\to" 8594 "→")
+    ("rel" "\\owns" 8715 "∋")
+    ("rel" "\\ne" 8800 "≠")
+    ("rel" "\\le" 8804 "≤")
+    ("rel" "\\ge" 8805 "≥")
+    ;; manually added
+    ("misc" "\\P" 182 "¶")
+    ("misc" "\\textpilcrow" 182 "¶"))
+  "List of basic LaTeX mathematical symbols.
+This list maps standard LaTeX math commands to unicode
+characters.  For some symbols in this list the unicode code is
+missing.  It is an extension of `LaTeX-math-default' in
+AucTeX/latex.el, but it doesn't include AMS symbols. See also
+`math-symbol-list-extended' and `math-symbol-list-packages'.")
+
+(defconst math-symbol-list-extended
+  '(("mathaccent" "\\acute" 769 "́")
+    ("mathaccent" "\\annuity" 8423 "⃧")
+    ("mathaccent" "\\asteraccent" 8432 "⃰")
+    ("mathaccent" "\\bar" 772 "̄")
+    ("mathaccent" "\\breve" 774 "̆")
+    ("mathaccent" "\\candra" 784 "̐")
+    ("mathaccent" "\\check" 780 "̌")
+    ("mathaccent" "\\ddddot" 8412 "⃜")
+    ("mathaccent" "\\dddot" 8411 "⃛")
+    ("mathaccent" "\\ddot" 776 "̈")
+    ("mathaccent" "\\dot" 775 "̇")
+    ("mathaccent" "\\droang" 794 "̚")
+    ("mathaccent" "\\enclosecircle" 8413 "⃝")
+    ("mathaccent" "\\enclosediamond" 8415 "⃟")
+    ("mathaccent" "\\enclosesquare" 8414 "⃞")
+    ("mathaccent" "\\enclosetriangle" 8420 "⃤")
+    ("mathaccent" "\\grave" 768 "̀")
+    ("mathaccent" "\\hat" 770 "̂")
+    ("mathaccent" "\\leftharpoonaccent" 8400 "⃐")
+    ("mathaccent" "\\not" 824 "̸")
+    ("mathaccent" "\\ocirc" 778 "̊")
+    ("mathaccent" "\\ocommatopright" 789 "̕")
+    ("mathaccent" "\\oturnedcomma" 786 "̒")
+    ("mathaccent" "\\overbar" 773 "̅")
+    ("mathaccent" "\\overleftarrow" 8406 "⃖")
+    ("mathaccent" "\\overleftrightarrow" 8417 "⃡")
+    ("mathaccent" "\\ovhook" 777 "̉")
+    ("mathaccent" "\\rightharpoonaccent" 8401 "⃑")
+    ("mathaccent" "\\threeunderdot" 8424 "⃨")
+    ("mathaccent" "\\tilde" 771 "̃")
+    ("mathaccent" "\\underbar" 817 "̱")
+    ("mathaccent" "\\underleftarrow" 8430 "⃮")
+    ("mathaccent" "\\underleftharpoondown" 8429 "⃭")
+    ("mathaccent" "\\underrightarrow" 8431 "⃯")
+    ("mathaccent" "\\underrightharpoondown" 8428 "⃬")
+    ("mathaccent" "\\vec" 8407 "⃗")
+    ("mathaccent" "\\vertoverlay" 8402 "⃒")
+    ("mathaccent" "\\widebridgeabove" 8425 "⃩")
+    ("mathaccent" "\\wideutilde" 816 "̰")
+    ("mathalpha" "\\Angstrom" 8491 "Å")
+    ("mathalpha" "\\BbbA" 120120 "𝔸")
+    ("mathalpha" "\\BbbB" 120121 "𝔹")
+    ("mathalpha" "\\BbbC" 8450 "ℂ")
+    ("mathalpha" "\\BbbD" 120123 "𝔻")
+    ("mathalpha" "\\BbbE" 120124 "𝔼")
+    ("mathalpha" "\\BbbF" 120125 "𝔽")
+    ("mathalpha" "\\BbbG" 120126 "𝔾")
+    ("mathalpha" "\\BbbGamma" 8510 "ℾ")
+    ("mathalpha" "\\BbbH" 8461 "ℍ")
+    ("mathalpha" "\\BbbI" 120128 "𝕀")
+    ("mathalpha" "\\BbbJ" 120129 "𝕁")
+    ("mathalpha" "\\BbbK" 120130 "𝕂")
+    ("mathalpha" "\\BbbL" 120131 "𝕃")
+    ("mathalpha" "\\BbbM" 120132 "𝕄")
+    ("mathalpha" "\\BbbN" 8469 "ℕ")
+    ("mathalpha" "\\BbbO" 120134 "𝕆")
+    ("mathalpha" "\\BbbP" 8473 "ℙ")
+    ("mathalpha" "\\BbbPi" 8511 "ℿ")
+    ("mathalpha" "\\BbbQ" 8474 "ℚ")
+    ("mathalpha" "\\BbbR" 8477 "ℝ")
+    ("mathalpha" "\\BbbS" 120138 "𝕊")
+    ("mathalpha" "\\BbbT" 120139 "𝕋")
+    ("mathalpha" "\\BbbU" 120140 "𝕌")
+    ("mathalpha" "\\BbbV" 120141 "𝕍")
+    ("mathalpha" "\\BbbW" 120142 "𝕎")
+    ("mathalpha" "\\BbbX" 120143 "𝕏")
+    ("mathalpha" "\\BbbY" 120144 "𝕐")
+    ("mathalpha" "\\BbbZ" 8484 "ℤ")
+    ("mathalpha" "\\Bbba" 120146 "𝕒")
+    ("mathalpha" "\\Bbbb" 120147 "𝕓")
+    ("mathalpha" "\\Bbbc" 120148 "𝕔")
+    ("mathalpha" "\\Bbbd" 120149 "𝕕")
+    ("mathalpha" "\\Bbbe" 120150 "𝕖")
+    ("mathalpha" "\\Bbbf" 120151 "𝕗")
+    ("mathalpha" "\\Bbbg" 120152 "𝕘")
+    ("mathalpha" "\\Bbbgamma" 8509 "ℽ")
+    ("mathalpha" "\\Bbbh" 120153 "𝕙")
+    ("mathalpha" "\\Bbbi" 120154 "𝕚")
+    ("mathalpha" "\\Bbbj" 120155 "𝕛")
+    ("mathalpha" "\\Bbbk" 120156 "𝕜")
+    ("mathalpha" "\\Bbbl" 120157 "𝕝")
+    ("mathalpha" "\\Bbbm" 120158 "𝕞")
+    ("mathalpha" "\\Bbbn" 120159 "𝕟")
+    ("mathalpha" "\\Bbbo" 120160 "𝕠")
+    ("mathalpha" "\\Bbbp" 120161 "𝕡")
+    ("mathalpha" "\\Bbbq" 120162 "𝕢")
+    ("mathalpha" "\\Bbbr" 120163 "𝕣")
+    ("mathalpha" "\\Bbbs" 120164 "𝕤")
+    ("mathalpha" "\\Bbbt" 120165 "𝕥")
+    ("mathalpha" "\\Bbbu" 120166 "𝕦")
+    ("mathalpha" "\\Bbbv" 120167 "𝕧")
+    ("mathalpha" "\\Bbbw" 120168 "𝕨")
+    ("mathalpha" "\\Bbbx" 120169 "𝕩")
+    ("mathalpha" "\\Bbby" 120170 "𝕪")
+    ("mathalpha" "\\Bbbz" 120171 "𝕫")
+    ("mathalpha" "\\Im" 8465 "ℑ")
+    ("mathalpha" "\\Re" 8476 "ℜ")
+    ("mathalpha" "\\aleph" 8501 "ℵ")
+    ("mathalpha" "\\beth" 8502 "ℶ")
+    ("mathalpha" "\\daleth" 8504 "ℸ")
+    ("mathalpha" "\\ell" 8467 "ℓ")
+    ("mathalpha" "\\gimel" 8503 "ℷ")
+    ("mathalpha" "\\hslash" 8463 "ℏ")
+    ("mathalpha" "\\imath" 120484 "𝚤")
+    ("mathalpha" "\\jmath" 120485 "𝚥")
+    ("mathalpha" "\\matheth" 240 "ð")
+    ("mathalpha" "\\mbfA" 119808 "𝐀")
+    ("mathalpha" "\\mbfAlpha" 120488 "𝚨")
+    ("mathalpha" "\\mbfB" 119809 "𝐁")
+    ("mathalpha" "\\mbfBeta" 120489 "𝚩")
+    ("mathalpha" "\\mbfC" 119810 "𝐂")
+    ("mathalpha" "\\mbfChi" 120510 "𝚾")
+    ("mathalpha" "\\mbfD" 119811 "𝐃")
+    ("mathalpha" "\\mbfDelta" 120491 "𝚫")
+    ("mathalpha" "\\mbfDigamma" 120778 "𝟊")
+    ("mathalpha" "\\mbfE" 119812 "𝐄")
+    ("mathalpha" "\\mbfEpsilon" 120492 "𝚬")
+    ("mathalpha" "\\mbfEta" 120494 "𝚮")
+    ("mathalpha" "\\mbfF" 119813 "𝐅")
+    ("mathalpha" "\\mbfG" 119814 "𝐆")
+    ("mathalpha" "\\mbfGamma" 120490 "𝚪")
+    ("mathalpha" "\\mbfH" 119815 "𝐇")
+    ("mathalpha" "\\mbfI" 119816 "𝐈")
+    ("mathalpha" "\\mbfIota" 120496 "𝚰")
+    ("mathalpha" "\\mbfJ" 119817 "𝐉")
+    ("mathalpha" "\\mbfK" 119818 "𝐊")
+    ("mathalpha" "\\mbfKappa" 120497 "𝚱")
+    ("mathalpha" "\\mbfL" 119819 "𝐋")
+    ("mathalpha" "\\mbfLambda" 120498 "𝚲")
+    ("mathalpha" "\\mbfM" 119820 "𝐌")
+    ("mathalpha" "\\mbfMu" 120499 "𝚳")
+    ("mathalpha" "\\mbfN" 119821 "𝐍")
+    ("mathalpha" "\\mbfNu" 120500 "𝚴")
+    ("mathalpha" "\\mbfO" 119822 "𝐎")
+    ("mathalpha" "\\mbfOmega" 120512 "𝛀")
+    ("mathalpha" "\\mbfOmicron" 120502 "𝚶")
+    ("mathalpha" "\\mbfP" 119823 "𝐏")
+    ("mathalpha" "\\mbfPhi" 120509 "𝚽")
+    ("mathalpha" "\\mbfPi" 120503 "𝚷")
+    ("mathalpha" "\\mbfPsi" 120511 "𝚿")
+    ("mathalpha" "\\mbfQ" 119824 "𝐐")
+    ("mathalpha" "\\mbfR" 119825 "𝐑")
+    ("mathalpha" "\\mbfRho" 120504 "𝚸")
+    ("mathalpha" "\\mbfS" 119826 "𝐒")
+    ("mathalpha" "\\mbfSigma" 120506 "𝚺")
+    ("mathalpha" "\\mbfT" 119827 "𝐓")
+    ("mathalpha" "\\mbfTau" 120507 "𝚻")
+    ("mathalpha" "\\mbfTheta" 120495 "𝚯")
+    ("mathalpha" "\\mbfU" 119828 "𝐔")
+    ("mathalpha" "\\mbfUpsilon" 120508 "𝚼")
+    ("mathalpha" "\\mbfV" 119829 "𝐕")
+    ("mathalpha" "\\mbfW" 119830 "𝐖")
+    ("mathalpha" "\\mbfX" 119831 "𝐗")
+    ("mathalpha" "\\mbfXi" 120501 "𝚵")
+    ("mathalpha" "\\mbfY" 119832 "𝐘")
+    ("mathalpha" "\\mbfZ" 119833 "𝐙")
+    ("mathalpha" "\\mbfZeta" 120493 "𝚭")
+    ("mathalpha" "\\mbfa" 119834 "𝐚")
+    ("mathalpha" "\\mbfalpha" 120514 "𝛂")
+    ("mathalpha" "\\mbfb" 119835 "𝐛")
+    ("mathalpha" "\\mbfbeta" 120515 "𝛃")
+    ("mathalpha" "\\mbfc" 119836 "𝐜")
+    ("mathalpha" "\\mbfchi" 120536 "𝛘")
+    ("mathalpha" "\\mbfd" 119837 "𝐝")
+    ("mathalpha" "\\mbfdelta" 120517 "𝛅")
+    ("mathalpha" "\\mbfdigamma" 120779 "𝟋")
+    ("mathalpha" "\\mbfe" 119838 "𝐞")
+    ("mathalpha" "\\mbfepsilon" 120518 "𝛆")
+    ("mathalpha" "\\mbfeta" 120520 "𝛈")
+    ("mathalpha" "\\mbff" 119839 "𝐟")
+    ("mathalpha" "\\mbffrakA" 120172 "𝕬")
+    ("mathalpha" "\\mbffrakB" 120173 "𝕭")
+    ("mathalpha" "\\mbffrakC" 120174 "𝕮")
+    ("mathalpha" "\\mbffrakD" 120175 "𝕯")
+    ("mathalpha" "\\mbffrakE" 120176 "𝕰")
+    ("mathalpha" "\\mbffrakF" 120177 "𝕱")
+    ("mathalpha" "\\mbffrakG" 120178 "𝕲")
+    ("mathalpha" "\\mbffrakH" 120179 "𝕳")
+    ("mathalpha" "\\mbffrakI" 120180 "𝕴")
+    ("mathalpha" "\\mbffrakJ" 120181 "𝕵")
+    ("mathalpha" "\\mbffrakK" 120182 "𝕶")
+    ("mathalpha" "\\mbffrakL" 120183 "𝕷")
+    ("mathalpha" "\\mbffrakM" 120184 "𝕸")
+    ("mathalpha" "\\mbffrakN" 120185 "𝕹")
+    ("mathalpha" "\\mbffrakO" 120186 "𝕺")
+    ("mathalpha" "\\mbffrakP" 120187 "𝕻")
+    ("mathalpha" "\\mbffrakQ" 120188 "𝕼")
+    ("mathalpha" "\\mbffrakR" 120189 "𝕽")
+    ("mathalpha" "\\mbffrakS" 120190 "𝕾")
+    ("mathalpha" "\\mbffrakT" 120191 "𝕿")
+    ("mathalpha" "\\mbffrakU" 120192 "𝖀")
+    ("mathalpha" "\\mbffrakV" 120193 "𝖁")
+    ("mathalpha" "\\mbffrakW" 120194 "𝖂")
+    ("mathalpha" "\\mbffrakX" 120195 "𝖃")
+    ("mathalpha" "\\mbffrakY" 120196 "𝖄")
+    ("mathalpha" "\\mbffrakZ" 120197 "𝖅")
+    ("mathalpha" "\\mbffraka" 120198 "𝖆")
+    ("mathalpha" "\\mbffrakb" 120199 "𝖇")
+    ("mathalpha" "\\mbffrakc" 120200 "𝖈")
+    ("mathalpha" "\\mbffrakd" 120201 "𝖉")
+    ("mathalpha" "\\mbffrake" 120202 "𝖊")
+    ("mathalpha" "\\mbffrakf" 120203 "𝖋")
+    ("mathalpha" "\\mbffrakg" 120204 "𝖌")
+    ("mathalpha" "\\mbffrakh" 120205 "𝖍")
+    ("mathalpha" "\\mbffraki" 120206 "𝖎")
+    ("mathalpha" "\\mbffrakj" 120207 "𝖏")
+    ("mathalpha" "\\mbffrakk" 120208 "𝖐")
+    ("mathalpha" "\\mbffrakl" 120209 "𝖑")
+    ("mathalpha" "\\mbffrakm" 120210 "𝖒")
+    ("mathalpha" "\\mbffrakn" 120211 "𝖓")
+    ("mathalpha" "\\mbffrako" 120212 "𝖔")
+    ("mathalpha" "\\mbffrakp" 120213 "𝖕")
+    ("mathalpha" "\\mbffrakq" 120214 "𝖖")
+    ("mathalpha" "\\mbffrakr" 120215 "𝖗")
+    ("mathalpha" "\\mbffraks" 120216 "𝖘")
+    ("mathalpha" "\\mbffrakt" 120217 "𝖙")
+    ("mathalpha" "\\mbffraku" 120218 "𝖚")
+    ("mathalpha" "\\mbffrakv" 120219 "𝖛")
+    ("mathalpha" "\\mbffrakw" 120220 "𝖜")
+    ("mathalpha" "\\mbffrakx" 120221 "𝖝")
+    ("mathalpha" "\\mbffraky" 120222 "𝖞")
+    ("mathalpha" "\\mbffrakz" 120223 "𝖟")
+    ("mathalpha" "\\mbfg" 119840 "𝐠")
+    ("mathalpha" "\\mbfgamma" 120516 "𝛄")
+    ("mathalpha" "\\mbfh" 119841 "𝐡")
+    ("mathalpha" "\\mbfi" 119842 "𝐢")
+    ("mathalpha" "\\mbfiota" 120522 "𝛊")
+    ("mathalpha" "\\mbfitA" 119912 "𝑨")
+    ("mathalpha" "\\mbfitAlpha" 120604 "𝜜")
+    ("mathalpha" "\\mbfitB" 119913 "𝑩")
+    ("mathalpha" "\\mbfitBeta" 120605 "𝜝")
+    ("mathalpha" "\\mbfitC" 119914 "𝑪")
+    ("mathalpha" "\\mbfitChi" 120626 "𝜲")
+    ("mathalpha" "\\mbfitD" 119915 "𝑫")
+    ("mathalpha" "\\mbfitDelta" 120607 "𝜟")
+    ("mathalpha" "\\mbfitE" 119916 "𝑬")
+    ("mathalpha" "\\mbfitEpsilon" 120608 "𝜠")
+    ("mathalpha" "\\mbfitEta" 120610 "𝜢")
+    ("mathalpha" "\\mbfitF" 119917 "𝑭")
+    ("mathalpha" "\\mbfitG" 119918 "𝑮")
+    ("mathalpha" "\\mbfitGamma" 120606 "𝜞")
+    ("mathalpha" "\\mbfitH" 119919 "𝑯")
+    ("mathalpha" "\\mbfitI" 119920 "𝑰")
+    ("mathalpha" "\\mbfitIota" 120612 "𝜤")
+    ("mathalpha" "\\mbfitJ" 119921 "𝑱")
+    ("mathalpha" "\\mbfitK" 119922 "𝑲")
+    ("mathalpha" "\\mbfitKappa" 120613 "𝜥")
+    ("mathalpha" "\\mbfitL" 119923 "𝑳")
+    ("mathalpha" "\\mbfitLambda" 120614 "𝜦")
+    ("mathalpha" "\\mbfitM" 119924 "𝑴")
+    ("mathalpha" "\\mbfitMu" 120615 "𝜧")
+    ("mathalpha" "\\mbfitN" 119925 "𝑵")
+    ("mathalpha" "\\mbfitNu" 120616 "𝜨")
+    ("mathalpha" "\\mbfitO" 119926 "𝑶")
+    ("mathalpha" "\\mbfitOmega" 120628 "𝜴")
+    ("mathalpha" "\\mbfitOmicron" 120618 "𝜪")
+    ("mathalpha" "\\mbfitP" 119927 "𝑷")
+    ("mathalpha" "\\mbfitPhi" 120625 "𝜱")
+    ("mathalpha" "\\mbfitPi" 120619 "𝜫")
+    ("mathalpha" "\\mbfitPsi" 120627 "𝜳")
+    ("mathalpha" "\\mbfitQ" 119928 "𝑸")
+    ("mathalpha" "\\mbfitR" 119929 "𝑹")
+    ("mathalpha" "\\mbfitRho" 120620 "𝜬")
+    ("mathalpha" "\\mbfitS" 119930 "𝑺")
+    ("mathalpha" "\\mbfitSigma" 120622 "𝜮")
+    ("mathalpha" "\\mbfitT" 119931 "𝑻")
+    ("mathalpha" "\\mbfitTau" 120623 "𝜯")
+    ("mathalpha" "\\mbfitTheta" 120611 "𝜣")
+    ("mathalpha" "\\mbfitU" 119932 "𝑼")
+    ("mathalpha" "\\mbfitUpsilon" 120624 "𝜰")
+    ("mathalpha" "\\mbfitV" 119933 "𝑽")
+    ("mathalpha" "\\mbfitW" 119934 "𝑾")
+    ("mathalpha" "\\mbfitX" 119935 "𝑿")
+    ("mathalpha" "\\mbfitXi" 120617 "𝜩")
+    ("mathalpha" "\\mbfitY" 119936 "𝒀")
+    ("mathalpha" "\\mbfitZ" 119937 "𝒁")
+    ("mathalpha" "\\mbfitZeta" 120609 "𝜡")
+    ("mathalpha" "\\mbfita" 119938 "𝒂")
+    ("mathalpha" "\\mbfitalpha" 120630 "𝜶")
+    ("mathalpha" "\\mbfitb" 119939 "𝒃")
+    ("mathalpha" "\\mbfitbeta" 120631 "𝜷")
+    ("mathalpha" "\\mbfitc" 119940 "𝒄")
+    ("mathalpha" "\\mbfitchi" 120652 "𝝌")
+    ("mathalpha" "\\mbfitd" 119941 "𝒅")
+    ("mathalpha" "\\mbfitdelta" 120633 "𝜹")
+    ("mathalpha" "\\mbfite" 119942 "𝒆")
+    ("mathalpha" "\\mbfitepsilon" 120634 "𝜺")
+    ("mathalpha" "\\mbfiteta" 120636 "𝜼")
+    ("mathalpha" "\\mbfitf" 119943 "𝒇")
+    ("mathalpha" "\\mbfitg" 119944 "𝒈")
+    ("mathalpha" "\\mbfitgamma" 120632 "𝜸")
+    ("mathalpha" "\\mbfith" 119945 "𝒉")
+    ("mathalpha" "\\mbfiti" 119946 "𝒊")
+    ("mathalpha" "\\mbfitiota" 120638 "𝜾")
+    ("mathalpha" "\\mbfitj" 119947 "𝒋")
+    ("mathalpha" "\\mbfitk" 119948 "𝒌")
+    ("mathalpha" "\\mbfitkappa" 120639 "𝜿")
+    ("mathalpha" "\\mbfitl" 119949 "𝒍")
+    ("mathalpha" "\\mbfitlambda" 120640 "𝝀")
+    ("mathalpha" "\\mbfitm" 119950 "𝒎")
+    ("mathalpha" "\\mbfitmu" 120641 "𝝁")
+    ("mathalpha" "\\mbfitn" 119951 "𝒏")
+    ("mathalpha" "\\mbfitnu" 120642 "𝝂")
+    ("mathalpha" "\\mbfito" 119952 "𝒐")
+    ("mathalpha" "\\mbfitomega" 120654 "𝝎")
+    ("mathalpha" "\\mbfitomicron" 120644 "𝝄")
+    ("mathalpha" "\\mbfitp" 119953 "𝒑")
+    ("mathalpha" "\\mbfitphi" 120651 "𝝋")
+    ("mathalpha" "\\mbfitpi" 120645 "𝝅")
+    ("mathalpha" "\\mbfitpsi" 120653 "𝝍")
+    ("mathalpha" "\\mbfitq" 119954 "𝒒")
+    ("mathalpha" "\\mbfitr" 119955 "𝒓")
+    ("mathalpha" "\\mbfitrho" 120646 "𝝆")
+    ("mathalpha" "\\mbfits" 119956 "𝒔")
+    ("mathalpha" "\\mbfitsansA" 120380 "𝘼")
+    ("mathalpha" "\\mbfitsansAlpha" 120720 "𝞐")
+    ("mathalpha" "\\mbfitsansB" 120381 "𝘽")
+    ("mathalpha" "\\mbfitsansBeta" 120721 "𝞑")
+    ("mathalpha" "\\mbfitsansC" 120382 "𝘾")
+    ("mathalpha" "\\mbfitsansChi" 120742 "𝞦")
+    ("mathalpha" "\\mbfitsansD" 120383 "𝘿")
+    ("mathalpha" "\\mbfitsansDelta" 120723 "𝞓")
+    ("mathalpha" "\\mbfitsansE" 120384 "𝙀")
+    ("mathalpha" "\\mbfitsansEpsilon" 120724 "𝞔")
+    ("mathalpha" "\\mbfitsansEta" 120726 "𝞖")
+    ("mathalpha" "\\mbfitsansF" 120385 "𝙁")
+    ("mathalpha" "\\mbfitsansG" 120386 "𝙂")
+    ("mathalpha" "\\mbfitsansGamma" 120722 "𝞒")
+    ("mathalpha" "\\mbfitsansH" 120387 "𝙃")
+    ("mathalpha" "\\mbfitsansI" 120388 "𝙄")
+    ("mathalpha" "\\mbfitsansIota" 120728 "𝞘")
+    ("mathalpha" "\\mbfitsansJ" 120389 "𝙅")
+    ("mathalpha" "\\mbfitsansK" 120390 "𝙆")
+    ("mathalpha" "\\mbfitsansKappa" 120729 "𝞙")
+    ("mathalpha" "\\mbfitsansL" 120391 "𝙇")
+    ("mathalpha" "\\mbfitsansLambda" 120730 "𝞚")
+    ("mathalpha" "\\mbfitsansM" 120392 "𝙈")
+    ("mathalpha" "\\mbfitsansMu" 120731 "𝞛")
+    ("mathalpha" "\\mbfitsansN" 120393 "𝙉")
+    ("mathalpha" "\\mbfitsansNu" 120732 "𝞜")
+    ("mathalpha" "\\mbfitsansO" 120394 "𝙊")
+    ("mathalpha" "\\mbfitsansOmega" 120744 "𝞨")
+    ("mathalpha" "\\mbfitsansOmicron" 120734 "𝞞")
+    ("mathalpha" "\\mbfitsansP" 120395 "𝙋")
+    ("mathalpha" "\\mbfitsansPhi" 120741 "𝞥")
+    ("mathalpha" "\\mbfitsansPi" 120735 "𝞟")
+    ("mathalpha" "\\mbfitsansPsi" 120743 "𝞧")
+    ("mathalpha" "\\mbfitsansQ" 120396 "𝙌")
+    ("mathalpha" "\\mbfitsansR" 120397 "𝙍")
+    ("mathalpha" "\\mbfitsansRho" 120736 "𝞠")
+    ("mathalpha" "\\mbfitsansS" 120398 "𝙎")
+    ("mathalpha" "\\mbfitsansSigma" 120738 "𝞢")
+    ("mathalpha" "\\mbfitsansT" 120399 "𝙏")
+    ("mathalpha" "\\mbfitsansTau" 120739 "𝞣")
+    ("mathalpha" "\\mbfitsansTheta" 120727 "𝞗")
+    ("mathalpha" "\\mbfitsansU" 120400 "𝙐")
+    ("mathalpha" "\\mbfitsansUpsilon" 120740 "𝞤")
+    ("mathalpha" "\\mbfitsansV" 120401 "𝙑")
+    ("mathalpha" "\\mbfitsansW" 120402 "𝙒")
+    ("mathalpha" "\\mbfitsansX" 120403 "𝙓")
+    ("mathalpha" "\\mbfitsansXi" 120733 "𝞝")
+    ("mathalpha" "\\mbfitsansY" 120404 "𝙔")
+    ("mathalpha" "\\mbfitsansZ" 120405 "𝙕")
+    ("mathalpha" "\\mbfitsansZeta" 120725 "𝞕")
+    ("mathalpha" "\\mbfitsansa" 120406 "𝙖")
+    ("mathalpha" "\\mbfitsansalpha" 120746 "𝞪")
+    ("mathalpha" "\\mbfitsansb" 120407 "𝙗")
+    ("mathalpha" "\\mbfitsansbeta" 120747 "𝞫")
+    ("mathalpha" "\\mbfitsansc" 120408 "𝙘")
+    ("mathalpha" "\\mbfitsanschi" 120768 "𝟀")
+    ("mathalpha" "\\mbfitsansd" 120409 "𝙙")
+    ("mathalpha" "\\mbfitsansdelta" 120749 "𝞭")
+    ("mathalpha" "\\mbfitsanse" 120410 "𝙚")
+    ("mathalpha" "\\mbfitsansepsilon" 120750 "𝞮")
+    ("mathalpha" "\\mbfitsanseta" 120752 "𝞰")
+    ("mathalpha" "\\mbfitsansf" 120411 "𝙛")
+    ("mathalpha" "\\mbfitsansg" 120412 "𝙜")
+    ("mathalpha" "\\mbfitsansgamma" 120748 "𝞬")
+    ("mathalpha" "\\mbfitsansh" 120413 "𝙝")
+    ("mathalpha" "\\mbfitsansi" 120414 "𝙞")
+    ("mathalpha" "\\mbfitsansiota" 120754 "𝞲")
+    ("mathalpha" "\\mbfitsansj" 120415 "𝙟")
+    ("mathalpha" "\\mbfitsansk" 120416 "𝙠")
+    ("mathalpha" "\\mbfitsanskappa" 120755 "𝞳")
+    ("mathalpha" "\\mbfitsansl" 120417 "𝙡")
+    ("mathalpha" "\\mbfitsanslambda" 120756 "𝞴")
+    ("mathalpha" "\\mbfitsansm" 120418 "𝙢")
+    ("mathalpha" "\\mbfitsansmu" 120757 "𝞵")
+    ("mathalpha" "\\mbfitsansn" 120419 "𝙣")
+    ("mathalpha" "\\mbfitsansnu" 120758 "𝞶")
+    ("mathalpha" "\\mbfitsanso" 120420 "𝙤")
+    ("mathalpha" "\\mbfitsansomega" 120770 "𝟂")
+    ("mathalpha" "\\mbfitsansomicron" 120760 "𝞸")
+    ("mathalpha" "\\mbfitsansp" 120421 "𝙥")
+    ("mathalpha" "\\mbfitsansphi" 120767 "𝞿")
+    ("mathalpha" "\\mbfitsanspi" 120761 "𝞹")
+    ("mathalpha" "\\mbfitsanspsi" 120769 "𝟁")
+    ("mathalpha" "\\mbfitsansq" 120422 "𝙦")
+    ("mathalpha" "\\mbfitsansr" 120423 "𝙧")
+    ("mathalpha" "\\mbfitsansrho" 120762 "𝞺")
+    ("mathalpha" "\\mbfitsanss" 120424 "𝙨")
+    ("mathalpha" "\\mbfitsanssigma" 120764 "𝞼")
+    ("mathalpha" "\\mbfitsanst" 120425 "𝙩")
+    ("mathalpha" "\\mbfitsanstau" 120765 "𝞽")
+    ("mathalpha" "\\mbfitsanstheta" 120753 "𝞱")
+    ("mathalpha" "\\mbfitsansu" 120426 "𝙪")
+    ("mathalpha" "\\mbfitsansupsilon" 120766 "𝞾")
+    ("mathalpha" "\\mbfitsansv" 120427 "𝙫")
+    ("mathalpha" "\\mbfitsansvarTheta" 120737 "𝞡")
+    ("mathalpha" "\\mbfitsansvarepsilon" 120772 "𝟄")
+    ("mathalpha" "\\mbfitsansvarkappa" 120774 "𝟆")
+    ("mathalpha" "\\mbfitsansvarphi" 120775 "𝟇")
+    ("mathalpha" "\\mbfitsansvarpi" 120777 "𝟉")
+    ("mathalpha" "\\mbfitsansvarrho" 120776 "𝟈")
+    ("mathalpha" "\\mbfitsansvarsigma" 120763 "𝞻")
+    ("mathalpha" "\\mbfitsansvartheta" 120773 "𝟅")
+    ("mathalpha" "\\mbfitsansw" 120428 "𝙬")
+    ("mathalpha" "\\mbfitsansx" 120429 "𝙭")
+    ("mathalpha" "\\mbfitsansxi" 120759 "𝞷")
+    ("mathalpha" "\\mbfitsansy" 120430 "𝙮")
+    ("mathalpha" "\\mbfitsansz" 120431 "𝙯")
+    ("mathalpha" "\\mbfitsanszeta" 120751 "𝞯")
+    ("mathalpha" "\\mbfitsigma" 120648 "𝝈")
+    ("mathalpha" "\\mbfitt" 119957 "𝒕")
+    ("mathalpha" "\\mbfittau" 120649 "𝝉")
+    ("mathalpha" "\\mbfittheta" 120637 "𝜽")
+    ("mathalpha" "\\mbfitu" 119958 "𝒖")
+    ("mathalpha" "\\mbfitupsilon" 120650 "𝝊")
+    ("mathalpha" "\\mbfitv" 119959 "𝒗")
+    ("mathalpha" "\\mbfitvarTheta" 120621 "𝜭")
+    ("mathalpha" "\\mbfitvarepsilon" 120656 "𝝐")
+    ("mathalpha" "\\mbfitvarkappa" 120658 "𝝒")
+    ("mathalpha" "\\mbfitvarphi" 120659 "𝝓")
+    ("mathalpha" "\\mbfitvarpi" 120661 "𝝕")
+    ("mathalpha" "\\mbfitvarrho" 120660 "𝝔")
+    ("mathalpha" "\\mbfitvarsigma" 120647 "𝝇")
+    ("mathalpha" "\\mbfitvartheta" 120657 "𝝑")
+    ("mathalpha" "\\mbfitw" 119960 "𝒘")
+    ("mathalpha" "\\mbfitx" 119961 "𝒙")
+    ("mathalpha" "\\mbfitxi" 120643 "𝝃")
+    ("mathalpha" "\\mbfity" 119962 "𝒚")
+    ("mathalpha" "\\mbfitz" 119963 "𝒛")
+    ("mathalpha" "\\mbfitzeta" 120635 "𝜻")
+    ("mathalpha" "\\mbfj" 119843 "𝐣")
+    ("mathalpha" "\\mbfk" 119844 "𝐤")
+    ("mathalpha" "\\mbfkappa" 120523 "𝛋")
+    ("mathalpha" "\\mbfl" 119845 "𝐥")
+    ("mathalpha" "\\mbflambda" 120524 "𝛌")
+    ("mathalpha" "\\mbfm" 119846 "𝐦")
+    ("mathalpha" "\\mbfmu" 120525 "𝛍")
+    ("mathalpha" "\\mbfn" 119847 "𝐧")
+    ("mathalpha" "\\mbfnu" 120526 "𝛎")
+    ("mathalpha" "\\mbfo" 119848 "𝐨")
+    ("mathalpha" "\\mbfomega" 120538 "𝛚")
+    ("mathalpha" "\\mbfomicron" 120528 "𝛐")
+    ("mathalpha" "\\mbfp" 119849 "𝐩")
+    ("mathalpha" "\\mbfphi" 120543 "𝛟")
+    ("mathalpha" "\\mbfpi" 120529 "𝛑")
+    ("mathalpha" "\\mbfpsi" 120537 "𝛙")
+    ("mathalpha" "\\mbfq" 119850 "𝐪")
+    ("mathalpha" "\\mbfr" 119851 "𝐫")
+    ("mathalpha" "\\mbfrho" 120530 "𝛒")
+    ("mathalpha" "\\mbfs" 119852 "𝐬")
+    ("mathalpha" "\\mbfsansA" 120276 "𝗔")
+    ("mathalpha" "\\mbfsansAlpha" 120662 "𝝖")
+    ("mathalpha" "\\mbfsansB" 120277 "𝗕")
+    ("mathalpha" "\\mbfsansBeta" 120663 "𝝗")
+    ("mathalpha" "\\mbfsansC" 120278 "𝗖")
+    ("mathalpha" "\\mbfsansChi" 120684 "𝝬")
+    ("mathalpha" "\\mbfsansD" 120279 "𝗗")
+    ("mathalpha" "\\mbfsansDelta" 120665 "𝝙")
+    ("mathalpha" "\\mbfsansE" 120280 "𝗘")
+    ("mathalpha" "\\mbfsansEpsilon" 120666 "𝝚")
+    ("mathalpha" "\\mbfsansEta" 120668 "𝝜")
+    ("mathalpha" "\\mbfsansF" 120281 "𝗙")
+    ("mathalpha" "\\mbfsansG" 120282 "𝗚")
+    ("mathalpha" "\\mbfsansGamma" 120664 "𝝘")
+    ("mathalpha" "\\mbfsansH" 120283 "𝗛")
+    ("mathalpha" "\\mbfsansI" 120284 "𝗜")
+    ("mathalpha" "\\mbfsansIota" 120670 "𝝞")
+    ("mathalpha" "\\mbfsansJ" 120285 "𝗝")
+    ("mathalpha" "\\mbfsansK" 120286 "𝗞")
+    ("mathalpha" "\\mbfsansKappa" 120671 "𝝟")
+    ("mathalpha" "\\mbfsansL" 120287 "𝗟")
+    ("mathalpha" "\\mbfsansLambda" 120672 "𝝠")
+    ("mathalpha" "\\mbfsansM" 120288 "𝗠")
+    ("mathalpha" "\\mbfsansMu" 120673 "𝝡")
+    ("mathalpha" "\\mbfsansN" 120289 "𝗡")
+    ("mathalpha" "\\mbfsansNu" 120674 "𝝢")
+    ("mathalpha" "\\mbfsansO" 120290 "𝗢")
+    ("mathalpha" "\\mbfsansOmega" 120686 "𝝮")
+    ("mathalpha" "\\mbfsansOmicron" 120676 "𝝤")
+    ("mathalpha" "\\mbfsansP" 120291 "𝗣")
+    ("mathalpha" "\\mbfsansPhi" 120683 "𝝫")
+    ("mathalpha" "\\mbfsansPi" 120677 "𝝥")
+    ("mathalpha" "\\mbfsansPsi" 120685 "𝝭")
+    ("mathalpha" "\\mbfsansQ" 120292 "𝗤")
+    ("mathalpha" "\\mbfsansR" 120293 "𝗥")
+    ("mathalpha" "\\mbfsansRho" 120678 "𝝦")
+    ("mathalpha" "\\mbfsansS" 120294 "𝗦")
+    ("mathalpha" "\\mbfsansSigma" 120680 "𝝨")
+    ("mathalpha" "\\mbfsansT" 120295 "𝗧")
+    ("mathalpha" "\\mbfsansTau" 120681 "𝝩")
+    ("mathalpha" "\\mbfsansTheta" 120669 "𝝝")
+    ("mathalpha" "\\mbfsansU" 120296 "𝗨")
+    ("mathalpha" "\\mbfsansUpsilon" 120682 "𝝪")
+    ("mathalpha" "\\mbfsansV" 120297 "𝗩")
+    ("mathalpha" "\\mbfsansW" 120298 "𝗪")
+    ("mathalpha" "\\mbfsansX" 120299 "𝗫")
+    ("mathalpha" "\\mbfsansXi" 120675 "𝝣")
+    ("mathalpha" "\\mbfsansY" 120300 "𝗬")
+    ("mathalpha" "\\mbfsansZ" 120301 "𝗭")
+    ("mathalpha" "\\mbfsansZeta" 120667 "𝝛")
+    ("mathalpha" "\\mbfsansa" 120302 "𝗮")
+    ("mathalpha" "\\mbfsansalpha" 120688 "𝝰")
+    ("mathalpha" "\\mbfsansb" 120303 "𝗯")
+    ("mathalpha" "\\mbfsansbeta" 120689 "𝝱")
+    ("mathalpha" "\\mbfsansc" 120304 "𝗰")
+    ("mathalpha" "\\mbfsanschi" 120710 "𝞆")
+    ("mathalpha" "\\mbfsansd" 120305 "𝗱")
+    ("mathalpha" "\\mbfsansdelta" 120691 "𝝳")
+    ("mathalpha" "\\mbfsanse" 120306 "𝗲")
+    ("mathalpha" "\\mbfsansepsilon" 120692 "𝝴")
+    ("mathalpha" "\\mbfsanseta" 120694 "𝝶")
+    ("mathalpha" "\\mbfsansf" 120307 "𝗳")
+    ("mathalpha" "\\mbfsansg" 120308 "𝗴")
+    ("mathalpha" "\\mbfsansgamma" 120690 "𝝲")
+    ("mathalpha" "\\mbfsansh" 120309 "𝗵")
+    ("mathalpha" "\\mbfsansi" 120310 "𝗶")
+    ("mathalpha" "\\mbfsansiota" 120696 "𝝸")
+    ("mathalpha" "\\mbfsansj" 120311 "𝗷")
+    ("mathalpha" "\\mbfsansk" 120312 "𝗸")
+    ("mathalpha" "\\mbfsanskappa" 120697 "𝝹")
+    ("mathalpha" "\\mbfsansl" 120313 "𝗹")
+    ("mathalpha" "\\mbfsanslambda" 120698 "𝝺")
+    ("mathalpha" "\\mbfsansm" 120314 "𝗺")
+    ("mathalpha" "\\mbfsansmu" 120699 "𝝻")
+    ("mathalpha" "\\mbfsansn" 120315 "𝗻")
+    ("mathalpha" "\\mbfsansnu" 120700 "𝝼")
+    ("mathalpha" "\\mbfsanso" 120316 "𝗼")
+    ("mathalpha" "\\mbfsansomega" 120712 "𝞈")
+    ("mathalpha" "\\mbfsansomicron" 120702 "𝝾")
+    ("mathalpha" "\\mbfsansp" 120317 "𝗽")
+    ("mathalpha" "\\mbfsansphi" 120709 "𝞅")
+    ("mathalpha" "\\mbfsanspi" 120703 "𝝿")
+    ("mathalpha" "\\mbfsanspsi" 120711 "𝞇")
+    ("mathalpha" "\\mbfsansq" 120318 "𝗾")
+    ("mathalpha" "\\mbfsansr" 120319 "𝗿")
+    ("mathalpha" "\\mbfsansrho" 120704 "𝞀")
+    ("mathalpha" "\\mbfsanss" 120320 "𝘀")
+    ("mathalpha" "\\mbfsanssigma" 120706 "𝞂")
+    ("mathalpha" "\\mbfsanst" 120321 "𝘁")
+    ("mathalpha" "\\mbfsanstau" 120707 "𝞃")
+    ("mathalpha" "\\mbfsanstheta" 120695 "𝝷")
+    ("mathalpha" "\\mbfsansu" 120322 "𝘂")
+    ("mathalpha" "\\mbfsansupsilon" 120708 "𝞄")
+    ("mathalpha" "\\mbfsansv" 120323 "𝘃")
+    ("mathalpha" "\\mbfsansvarTheta" 120679 "𝝧")
+    ("mathalpha" "\\mbfsansvarepsilon" 120714 "𝞊")
+    ("mathalpha" "\\mbfsansvarkappa" 120716 "𝞌")
+    ("mathalpha" "\\mbfsansvarphi" 120717 "𝞍")
+    ("mathalpha" "\\mbfsansvarpi" 120719 "𝞏")
+    ("mathalpha" "\\mbfsansvarrho" 120718 "𝞎")
+    ("mathalpha" "\\mbfsansvarsigma" 120705 "𝞁")
+    ("mathalpha" "\\mbfsansvartheta" 120715 "𝞋")
+    ("mathalpha" "\\mbfsansw" 120324 "𝘄")
+    ("mathalpha" "\\mbfsansx" 120325 "𝘅")
+    ("mathalpha" "\\mbfsansxi" 120701 "𝝽")
+    ("mathalpha" "\\mbfsansy" 120326 "𝘆")
+    ("mathalpha" "\\mbfsansz" 120327 "𝘇")
+    ("mathalpha" "\\mbfsanszeta" 120693 "𝝵")
+    ("mathalpha" "\\mbfscrA" 120016 "𝓐")
+    ("mathalpha" "\\mbfscrB" 120017 "𝓑")
+    ("mathalpha" "\\mbfscrC" 120018 "𝓒")
+    ("mathalpha" "\\mbfscrD" 120019 "𝓓")
+    ("mathalpha" "\\mbfscrE" 120020 "𝓔")
+    ("mathalpha" "\\mbfscrF" 120021 "𝓕")
+    ("mathalpha" "\\mbfscrG" 120022 "𝓖")
+    ("mathalpha" "\\mbfscrH" 120023 "𝓗")
+    ("mathalpha" "\\mbfscrI" 120024 "𝓘")
+    ("mathalpha" "\\mbfscrJ" 120025 "𝓙")
+    ("mathalpha" "\\mbfscrK" 120026 "𝓚")
+    ("mathalpha" "\\mbfscrL" 120027 "𝓛")
+    ("mathalpha" "\\mbfscrM" 120028 "𝓜")
+    ("mathalpha" "\\mbfscrN" 120029 "𝓝")
+    ("mathalpha" "\\mbfscrO" 120030 "𝓞")
+    ("mathalpha" "\\mbfscrP" 120031 "𝓟")
+    ("mathalpha" "\\mbfscrQ" 120032 "𝓠")
+    ("mathalpha" "\\mbfscrR" 120033 "𝓡")
+    ("mathalpha" "\\mbfscrS" 120034 "𝓢")
+    ("mathalpha" "\\mbfscrT" 120035 "𝓣")
+    ("mathalpha" "\\mbfscrU" 120036 "𝓤")
+    ("mathalpha" "\\mbfscrV" 120037 "𝓥")
+    ("mathalpha" "\\mbfscrW" 120038 "𝓦")
+    ("mathalpha" "\\mbfscrX" 120039 "𝓧")
+    ("mathalpha" "\\mbfscrY" 120040 "𝓨")
+    ("mathalpha" "\\mbfscrZ" 120041 "𝓩")
+    ("mathalpha" "\\mbfscra" 120042 "𝓪")
+    ("mathalpha" "\\mbfscrb" 120043 "𝓫")
+    ("mathalpha" "\\mbfscrc" 120044 "𝓬")
+    ("mathalpha" "\\mbfscrd" 120045 "𝓭")
+    ("mathalpha" "\\mbfscre" 120046 "𝓮")
+    ("mathalpha" "\\mbfscrf" 120047 "𝓯")
+    ("mathalpha" "\\mbfscrg" 120048 "𝓰")
+    ("mathalpha" "\\mbfscrh" 120049 "𝓱")
+    ("mathalpha" "\\mbfscri" 120050 "𝓲")
+    ("mathalpha" "\\mbfscrj" 120051 "𝓳")
+    ("mathalpha" "\\mbfscrk" 120052 "𝓴")
+    ("mathalpha" "\\mbfscrl" 120053 "𝓵")
+    ("mathalpha" "\\mbfscrm" 120054 "𝓶")
+    ("mathalpha" "\\mbfscrn" 120055 "𝓷")
+    ("mathalpha" "\\mbfscro" 120056 "𝓸")
+    ("mathalpha" "\\mbfscrp" 120057 "𝓹")
+    ("mathalpha" "\\mbfscrq" 120058 "𝓺")
+    ("mathalpha" "\\mbfscrr" 120059 "𝓻")
+    ("mathalpha" "\\mbfscrs" 120060 "𝓼")
+    ("mathalpha" "\\mbfscrt" 120061 "𝓽")
+    ("mathalpha" "\\mbfscru" 120062 "𝓾")
+    ("mathalpha" "\\mbfscrv" 120063 "𝓿")
+    ("mathalpha" "\\mbfscrw" 120064 "𝔀")
+    ("mathalpha" "\\mbfscrx" 120065 "𝔁")
+    ("mathalpha" "\\mbfscry" 120066 "𝔂")
+    ("mathalpha" "\\mbfscrz" 120067 "𝔃")
+    ("mathalpha" "\\mbfsigma" 120532 "𝛔")
+    ("mathalpha" "\\mbft" 119853 "𝐭")
+    ("mathalpha" "\\mbftau" 120533 "𝛕")
+    ("mathalpha" "\\mbftheta" 120521 "𝛉")
+    ("mathalpha" "\\mbfu" 119854 "𝐮")
+    ("mathalpha" "\\mbfupsilon" 120534 "𝛖")
+    ("mathalpha" "\\mbfv" 119855 "𝐯")
+    ("mathalpha" "\\mbfvarTheta" 120505 "𝚹")
+    ("mathalpha" "\\mbfvarepsilon" 120540 "𝛜")
+    ("mathalpha" "\\mbfvarkappa" 120542 "𝛞")
+    ("mathalpha" "\\mbfvarphi" 120535 "𝛗")
+    ("mathalpha" "\\mbfvarpi" 120545 "𝛡")
+    ("mathalpha" "\\mbfvarrho" 120544 "𝛠")
+    ("mathalpha" "\\mbfvarsigma" 120531 "𝛓")
+    ("mathalpha" "\\mbfvartheta" 120541 "𝛝")
+    ("mathalpha" "\\mbfw" 119856 "𝐰")
+    ("mathalpha" "\\mbfx" 119857 "𝐱")
+    ("mathalpha" "\\mbfxi" 120527 "𝛏")
+    ("mathalpha" "\\mbfy" 119858 "𝐲")
+    ("mathalpha" "\\mbfz" 119859 "𝐳")
+    ("mathalpha" "\\mbfzeta" 120519 "𝛇")
+    ("mathalpha" "\\mfrakA" 120068 "𝔄")
+    ("mathalpha" "\\mfrakB" 120069 "𝔅")
+    ("mathalpha" "\\mfrakC" 8493 "ℭ")
+    ("mathalpha" "\\mfrakD" 120071 "𝔇")
+    ("mathalpha" "\\mfrakE" 120072 "𝔈")
+    ("mathalpha" "\\mfrakF" 120073 "𝔉")
+    ("mathalpha" "\\mfrakG" 120074 "𝔊")
+    ("mathalpha" "\\mfrakH" 8460 "ℌ")
+    ("mathalpha" "\\mfrakJ" 120077 "𝔍")
+    ("mathalpha" "\\mfrakK" 120078 "𝔎")
+    ("mathalpha" "\\mfrakL" 120079 "𝔏")
+    ("mathalpha" "\\mfrakM" 120080 "𝔐")
+    ("mathalpha" "\\mfrakN" 120081 "𝔑")
+    ("mathalpha" "\\mfrakO" 120082 "𝔒")
+    ("mathalpha" "\\mfrakP" 120083 "𝔓")
+    ("mathalpha" "\\mfrakQ" 120084 "𝔔")
+    ("mathalpha" "\\mfrakS" 120086 "𝔖")
+    ("mathalpha" "\\mfrakT" 120087 "𝔗")
+    ("mathalpha" "\\mfrakU" 120088 "𝔘")
+    ("mathalpha" "\\mfrakV" 120089 "𝔙")
+    ("mathalpha" "\\mfrakW" 120090 "𝔚")
+    ("mathalpha" "\\mfrakX" 120091 "𝔛")
+    ("mathalpha" "\\mfrakY" 120092 "𝔜")
+    ("mathalpha" "\\mfrakZ" 8488 "ℨ")
+    ("mathalpha" "\\mfraka" 120094 "𝔞")
+    ("mathalpha" "\\mfrakb" 120095 "𝔟")
+    ("mathalpha" "\\mfrakc" 120096 "𝔠")
+    ("mathalpha" "\\mfrakd" 120097 "𝔡")
+    ("mathalpha" "\\mfrake" 120098 "𝔢")
+    ("mathalpha" "\\mfrakf" 120099 "𝔣")
+    ("mathalpha" "\\mfrakg" 120100 "𝔤")
+    ("mathalpha" "\\mfrakh" 120101 "𝔥")
+    ("mathalpha" "\\mfraki" 120102 "𝔦")
+    ("mathalpha" "\\mfrakj" 120103 "𝔧")
+    ("mathalpha" "\\mfrakk" 120104 "𝔨")
+    ("mathalpha" "\\mfrakl" 120105 "𝔩")
+    ("mathalpha" "\\mfrakm" 120106 "𝔪")
+    ("mathalpha" "\\mfrakn" 120107 "𝔫")
+    ("mathalpha" "\\mfrako" 120108 "𝔬")
+    ("mathalpha" "\\mfrakp" 120109 "𝔭")
+    ("mathalpha" "\\mfrakq" 120110 "𝔮")
+    ("mathalpha" "\\mfrakr" 120111 "𝔯")
+    ("mathalpha" "\\mfraks" 120112 "𝔰")
+    ("mathalpha" "\\mfrakt" 120113 "𝔱")
+    ("mathalpha" "\\mfraku" 120114 "𝔲")
+    ("mathalpha" "\\mfrakv" 120115 "𝔳")
+    ("mathalpha" "\\mfrakw" 120116 "𝔴")
+    ("mathalpha" "\\mfrakx" 120117 "𝔵")
+    ("mathalpha" "\\mfraky" 120118 "𝔶")
+    ("mathalpha" "\\mfrakz" 120119 "𝔷")
+    ("mathalpha" "\\mitA" 119860 "𝐴")
+    ("mathalpha" "\\mitAlpha" 120546 "𝛢")
+    ("mathalpha" "\\mitB" 119861 "𝐵")
+    ("mathalpha" "\\mitBeta" 120547 "𝛣")
+    ("mathalpha" "\\mitC" 119862 "𝐶")
+    ("mathalpha" "\\mitChi" 120568 "𝛸")
+    ("mathalpha" "\\mitD" 119863 "𝐷")
+    ("mathalpha" "\\mitDelta" 120549 "𝛥")
+    ("mathalpha" "\\mitE" 119864 "𝐸")
+    ("mathalpha" "\\mitEpsilon" 120550 "𝛦")
+    ("mathalpha" "\\mitEta" 120552 "𝛨")
+    ("mathalpha" "\\mitF" 119865 "𝐹")
+    ("mathalpha" "\\mitG" 119866 "𝐺")
+    ("mathalpha" "\\mitGamma" 120548 "𝛤")
+    ("mathalpha" "\\mitH" 119867 "𝐻")
+    ("mathalpha" "\\mitI" 119868 "𝐼")
+    ("mathalpha" "\\mitIota" 120554 "𝛪")
+    ("mathalpha" "\\mitJ" 119869 "𝐽")
+    ("mathalpha" "\\mitK" 119870 "𝐾")
+    ("mathalpha" "\\mitKappa" 120555 "𝛫")
+    ("mathalpha" "\\mitL" 119871 "𝐿")
+    ("mathalpha" "\\mitLambda" 120556 "𝛬")
+    ("mathalpha" "\\mitM" 119872 "𝑀")
+    ("mathalpha" "\\mitMu" 120557 "𝛭")
+    ("mathalpha" "\\mitN" 119873 "𝑁")
+    ("mathalpha" "\\mitNu" 120558 "𝛮")
+    ("mathalpha" "\\mitO" 119874 "𝑂")
+    ("mathalpha" "\\mitOmega" 120570 "𝛺")
+    ("mathalpha" "\\mitOmicron" 120560 "𝛰")
+    ("mathalpha" "\\mitP" 119875 "𝑃")
+    ("mathalpha" "\\mitPhi" 120567 "𝛷")
+    ("mathalpha" "\\mitPi" 120561 "𝛱")
+    ("mathalpha" "\\mitPsi" 120569 "𝛹")
+    ("mathalpha" "\\mitQ" 119876 "𝑄")
+    ("mathalpha" "\\mitR" 119877 "𝑅")
+    ("mathalpha" "\\mitRho" 120562 "𝛲")
+    ("mathalpha" "\\mitS" 119878 "𝑆")
+    ("mathalpha" "\\mitSigma" 120564 "𝛴")
+    ("mathalpha" "\\mitT" 119879 "𝑇")
+    ("mathalpha" "\\mitTau" 120565 "𝛵")
+    ("mathalpha" "\\mitTheta" 120553 "𝛩")
+    ("mathalpha" "\\mitU" 119880 "𝑈")
+    ("mathalpha" "\\mitUpsilon" 120566 "𝛶")
+    ("mathalpha" "\\mitV" 119881 "𝑉")
+    ("mathalpha" "\\mitW" 119882 "𝑊")
+    ("mathalpha" "\\mitX" 119883 "𝑋")
+    ("mathalpha" "\\mitXi" 120559 "𝛯")
+    ("mathalpha" "\\mitY" 119884 "𝑌")
+    ("mathalpha" "\\mitZ" 119885 "𝑍")
+    ("mathalpha" "\\mitZeta" 120551 "𝛧")
+    ("mathalpha" "\\mita" 119886 "𝑎")
+    ("mathalpha" "\\mitalpha" 120572 "𝛼")
+    ("mathalpha" "\\mitb" 119887 "𝑏")
+    ("mathalpha" "\\mitbeta" 120573 "𝛽")
+    ("mathalpha" "\\mitc" 119888 "𝑐")
+    ("mathalpha" "\\mitchi" 120594 "𝜒")
+    ("mathalpha" "\\mitd" 119889 "𝑑")
+    ("mathalpha" "\\mitdelta" 120575 "𝛿")
+    ("mathalpha" "\\mite" 119890 "𝑒")
+    ("mathalpha" "\\mitepsilon" 120576 "𝜀")
+    ("mathalpha" "\\miteta" 120578 "𝜂")
+    ("mathalpha" "\\mitf" 119891 "𝑓")
+    ("mathalpha" "\\mitg" 119892 "𝑔")
+    ("mathalpha" "\\mitgamma" 120574 "𝛾")
+    ("mathalpha" "\\miti" 119894 "𝑖")
+    ("mathalpha" "\\mitiota" 120580 "𝜄")
+    ("mathalpha" "\\mitj" 119895 "𝑗")
+    ("mathalpha" "\\mitk" 119896 "𝑘")
+    ("mathalpha" "\\mitkappa" 120581 "𝜅")
+    ("mathalpha" "\\mitl" 119897 "𝑙")
+    ("mathalpha" "\\mitlambda" 120582 "𝜆")
+    ("mathalpha" "\\mitm" 119898 "𝑚")
+    ("mathalpha" "\\mitmu" 120583 "𝜇")
+    ("mathalpha" "\\mitn" 119899 "𝑛")
+    ("mathalpha" "\\mitnu" 120584 "𝜈")
+    ("mathalpha" "\\mito" 119900 "𝑜")
+    ("mathalpha" "\\mitomega" 120596 "𝜔")
+    ("mathalpha" "\\mitomicron" 120586 "𝜊")
+    ("mathalpha" "\\mitp" 119901 "𝑝")
+    ("mathalpha" "\\mitphi" 120593 "𝜑")
+    ("mathalpha" "\\mitpi" 120587 "𝜋")
+    ("mathalpha" "\\mitpsi" 120595 "𝜓")
+    ("mathalpha" "\\mitq" 119902 "𝑞")
+    ("mathalpha" "\\mitr" 119903 "𝑟")
+    ("mathalpha" "\\mitrho" 120588 "𝜌")
+    ("mathalpha" "\\mits" 119904 "𝑠")
+    ("mathalpha" "\\mitsansA" 120328 "𝘈")
+    ("mathalpha" "\\mitsansB" 120329 "𝘉")
+    ("mathalpha" "\\mitsansC" 120330 "𝘊")
+    ("mathalpha" "\\mitsansD" 120331 "𝘋")
+    ("mathalpha" "\\mitsansE" 120332 "𝘌")
+    ("mathalpha" "\\mitsansF" 120333 "𝘍")
+    ("mathalpha" "\\mitsansG" 120334 "𝘎")
+    ("mathalpha" "\\mitsansH" 120335 "𝘏")
+    ("mathalpha" "\\mitsansI" 120336 "𝘐")
+    ("mathalpha" "\\mitsansJ" 120337 "𝘑")
+    ("mathalpha" "\\mitsansK" 120338 "𝘒")
+    ("mathalpha" "\\mitsansL" 120339 "𝘓")
+    ("mathalpha" "\\mitsansM" 120340 "𝘔")
+    ("mathalpha" "\\mitsansN" 120341 "𝘕")
+    ("mathalpha" "\\mitsansO" 120342 "𝘖")
+    ("mathalpha" "\\mitsansP" 120343 "𝘗")
+    ("mathalpha" "\\mitsansQ" 120344 "𝘘")
+    ("mathalpha" "\\mitsansR" 120345 "𝘙")
+    ("mathalpha" "\\mitsansS" 120346 "𝘚")
+    ("mathalpha" "\\mitsansT" 120347 "𝘛")
+    ("mathalpha" "\\mitsansU" 120348 "𝘜")
+    ("mathalpha" "\\mitsansV" 120349 "𝘝")
+    ("mathalpha" "\\mitsansW" 120350 "𝘞")
+    ("mathalpha" "\\mitsansX" 120351 "𝘟")
+    ("mathalpha" "\\mitsansY" 120352 "𝘠")
+    ("mathalpha" "\\mitsansZ" 120353 "𝘡")
+    ("mathalpha" "\\mitsansa" 120354 "𝘢")
+    ("mathalpha" "\\mitsansb" 120355 "𝘣")
+    ("mathalpha" "\\mitsansc" 120356 "𝘤")
+    ("mathalpha" "\\mitsansd" 120357 "𝘥")
+    ("mathalpha" "\\mitsanse" 120358 "𝘦")
+    ("mathalpha" "\\mitsansf" 120359 "𝘧")
+    ("mathalpha" "\\mitsansg" 120360 "𝘨")
+    ("mathalpha" "\\mitsansh" 120361 "𝘩")
+    ("mathalpha" "\\mitsansi" 120362 "𝘪")
+    ("mathalpha" "\\mitsansj" 120363 "𝘫")
+    ("mathalpha" "\\mitsansk" 120364 "𝘬")
+    ("mathalpha" "\\mitsansl" 120365 "𝘭")
+    ("mathalpha" "\\mitsansm" 120366 "𝘮")
+    ("mathalpha" "\\mitsansn" 120367 "𝘯")
+    ("mathalpha" "\\mitsanso" 120368 "𝘰")
+    ("mathalpha" "\\mitsansp" 120369 "𝘱")
+    ("mathalpha" "\\mitsansq" 120370 "𝘲")
+    ("mathalpha" "\\mitsansr" 120371 "𝘳")
+    ("mathalpha" "\\mitsanss" 120372 "𝘴")
+    ("mathalpha" "\\mitsanst" 120373 "𝘵")
+    ("mathalpha" "\\mitsansu" 120374 "𝘶")
+    ("mathalpha" "\\mitsansv" 120375 "𝘷")
+    ("mathalpha" "\\mitsansw" 120376 "𝘸")
+    ("mathalpha" "\\mitsansx" 120377 "𝘹")
+    ("mathalpha" "\\mitsansy" 120378 "𝘺")
+    ("mathalpha" "\\mitsansz" 120379 "𝘻")
+    ("mathalpha" "\\mitsigma" 120590 "𝜎")
+    ("mathalpha" "\\mitt" 119905 "𝑡")
+    ("mathalpha" "\\mittau" 120591 "𝜏")
+    ("mathalpha" "\\mittheta" 120579 "𝜃")
+    ("mathalpha" "\\mitu" 119906 "𝑢")
+    ("mathalpha" "\\mitupsilon" 120592 "𝜐")
+    ("mathalpha" "\\mitv" 119907 "𝑣")
+    ("mathalpha" "\\mitvarTheta" 120563 "𝛳")
+    ("mathalpha" "\\mitvarepsilon" 120598 "𝜖")
+    ("mathalpha" "\\mitvarkappa" 120600 "𝜘")
+    ("mathalpha" "\\mitvarphi" 120601 "𝜙")
+    ("mathalpha" "\\mitvarpi" 120603 "𝜛")
+    ("mathalpha" "\\mitvarrho" 120602 "𝜚")
+    ("mathalpha" "\\mitvarsigma" 120589 "𝜍")
+    ("mathalpha" "\\mitvartheta" 120599 "𝜗")
+    ("mathalpha" "\\mitw" 119908 "𝑤")
+    ("mathalpha" "\\mitx" 119909 "𝑥")
+    ("mathalpha" "\\mitxi" 120585 "𝜉")
+    ("mathalpha" "\\mity" 119910 "𝑦")
+    ("mathalpha" "\\mitz" 119911 "𝑧")
+    ("mathalpha" "\\mitzeta" 120577 "𝜁")
+    ("mathalpha" "\\msansA" 120224 "𝖠")
+    ("mathalpha" "\\msansB" 120225 "𝖡")
+    ("mathalpha" "\\msansC" 120226 "𝖢")
+    ("mathalpha" "\\msansD" 120227 "𝖣")
+    ("mathalpha" "\\msansE" 120228 "𝖤")
+    ("mathalpha" "\\msansF" 120229 "𝖥")
+    ("mathalpha" "\\msansG" 120230 "𝖦")
+    ("mathalpha" "\\msansH" 120231 "𝖧")
+    ("mathalpha" "\\msansI" 120232 "𝖨")
+    ("mathalpha" "\\msansJ" 120233 "𝖩")
+    ("mathalpha" "\\msansK" 120234 "𝖪")
+    ("mathalpha" "\\msansL" 120235 "𝖫")
+    ("mathalpha" "\\msansM" 120236 "𝖬")
+    ("mathalpha" "\\msansN" 120237 "𝖭")
+    ("mathalpha" "\\msansO" 120238 "𝖮")
+    ("mathalpha" "\\msansP" 120239 "𝖯")
+    ("mathalpha" "\\msansQ" 120240 "𝖰")
+    ("mathalpha" "\\msansR" 120241 "𝖱")
+    ("mathalpha" "\\msansS" 120242 "𝖲")
+    ("mathalpha" "\\msansT" 120243 "𝖳")
+    ("mathalpha" "\\msansU" 120244 "𝖴")
+    ("mathalpha" "\\msansV" 120245 "𝖵")
+    ("mathalpha" "\\msansW" 120246 "𝖶")
+    ("mathalpha" "\\msansX" 120247 "𝖷")
+    ("mathalpha" "\\msansY" 120248 "𝖸")
+    ("mathalpha" "\\msansZ" 120249 "𝖹")
+    ("mathalpha" "\\msansa" 120250 "𝖺")
+    ("mathalpha" "\\msansb" 120251 "𝖻")
+    ("mathalpha" "\\msansc" 120252 "𝖼")
+    ("mathalpha" "\\msansd" 120253 "𝖽")
+    ("mathalpha" "\\msanse" 120254 "𝖾")
+    ("mathalpha" "\\msansf" 120255 "𝖿")
+    ("mathalpha" "\\msansg" 120256 "𝗀")
+    ("mathalpha" "\\msansh" 120257 "𝗁")
+    ("mathalpha" "\\msansi" 120258 "𝗂")
+    ("mathalpha" "\\msansj" 120259 "𝗃")
+    ("mathalpha" "\\msansk" 120260 "𝗄")
+    ("mathalpha" "\\msansl" 120261 "𝗅")
+    ("mathalpha" "\\msansm" 120262 "𝗆")
+    ("mathalpha" "\\msansn" 120263 "𝗇")
+    ("mathalpha" "\\msanso" 120264 "𝗈")
+    ("mathalpha" "\\msansp" 120265 "𝗉")
+    ("mathalpha" "\\msansq" 120266 "𝗊")
+    ("mathalpha" "\\msansr" 120267 "𝗋")
+    ("mathalpha" "\\msanss" 120268 "𝗌")
+    ("mathalpha" "\\msanst" 120269 "𝗍")
+    ("mathalpha" "\\msansu" 120270 "𝗎")
+    ("mathalpha" "\\msansv" 120271 "𝗏")
+    ("mathalpha" "\\msansw" 120272 "𝗐")
+    ("mathalpha" "\\msansx" 120273 "𝗑")
+    ("mathalpha" "\\msansy" 120274 "𝗒")
+    ("mathalpha" "\\msansz" 120275 "𝗓")
+    ("mathalpha" "\\mscrA" 119964 "𝒜")
+    ("mathalpha" "\\mscrB" 8492 "ℬ")
+    ("mathalpha" "\\mscrC" 119966 "𝒞")
+    ("mathalpha" "\\mscrD" 119967 "𝒟")
+    ("mathalpha" "\\mscrE" 8496 "ℰ")
+    ("mathalpha" "\\mscrF" 8497 "ℱ")
+    ("mathalpha" "\\mscrG" 119970 "𝒢")
+    ("mathalpha" "\\mscrH" 8459 "ℋ")
+    ("mathalpha" "\\mscrI" 8464 "ℐ")
+    ("mathalpha" "\\mscrJ" 119973 "𝒥")
+    ("mathalpha" "\\mscrK" 119974 "𝒦")
+    ("mathalpha" "\\mscrL" 8466 "ℒ")
+    ("mathalpha" "\\mscrM" 8499 "ℳ")
+    ("mathalpha" "\\mscrN" 119977 "𝒩")
+    ("mathalpha" "\\mscrO" 119978 "𝒪")
+    ("mathalpha" "\\mscrP" 119979 "𝒫")
+    ("mathalpha" "\\mscrQ" 119980 "𝒬")
+    ("mathalpha" "\\mscrR" 8475 "ℛ")
+    ("mathalpha" "\\mscrS" 119982 "𝒮")
+    ("mathalpha" "\\mscrT" 119983 "𝒯")
+    ("mathalpha" "\\mscrU" 119984 "𝒰")
+    ("mathalpha" "\\mscrV" 119985 "𝒱")
+    ("mathalpha" "\\mscrW" 119986 "𝒲")
+    ("mathalpha" "\\mscrX" 119987 "𝒳")
+    ("mathalpha" "\\mscrY" 119988 "𝒴")
+    ("mathalpha" "\\mscrZ" 119989 "𝒵")
+    ("mathalpha" "\\mscra" 119990 "𝒶")
+    ("mathalpha" "\\mscrb" 119991 "𝒷")
+    ("mathalpha" "\\mscrc" 119992 "𝒸")
+    ("mathalpha" "\\mscrd" 119993 "𝒹")
+    ("mathalpha" "\\mscre" 8495 "ℯ")
+    ("mathalpha" "\\mscrf" 119995 "𝒻")
+    ("mathalpha" "\\mscrg" 8458 "ℊ")
+    ("mathalpha" "\\mscrh" 119997 "𝒽")
+    ("mathalpha" "\\mscri" 119998 "𝒾")
+    ("mathalpha" "\\mscrj" 119999 "𝒿")
+    ("mathalpha" "\\mscrk" 120000 "𝓀")
+    ("mathalpha" "\\mscrl" 120001 "𝓁")
+    ("mathalpha" "\\mscrm" 120002 "𝓂")
+    ("mathalpha" "\\mscrn" 120003 "𝓃")
+    ("mathalpha" "\\mscro" 8500 "ℴ")
+    ("mathalpha" "\\mscrp" 120005 "𝓅")
+    ("mathalpha" "\\mscrq" 120006 "𝓆")
+    ("mathalpha" "\\mscrr" 120007 "𝓇")
+    ("mathalpha" "\\mscrs" 120008 "𝓈")
+    ("mathalpha" "\\mscrt" 120009 "𝓉")
+    ("mathalpha" "\\mscru" 120010 "𝓊")
+    ("mathalpha" "\\mscrv" 120011 "𝓋")
+    ("mathalpha" "\\mscrw" 120012 "𝓌")
+    ("mathalpha" "\\mscrx" 120013 "𝓍")
+    ("mathalpha" "\\mscry" 120014 "𝓎")
+    ("mathalpha" "\\mscrz" 120015 "𝓏")
+    ("mathalpha" "\\mttA" 120432 "𝙰")
+    ("mathalpha" "\\mttB" 120433 "𝙱")
+    ("mathalpha" "\\mttC" 120434 "𝙲")
+    ("mathalpha" "\\mttD" 120435 "𝙳")
+    ("mathalpha" "\\mttE" 120436 "𝙴")
+    ("mathalpha" "\\mttF" 120437 "𝙵")
+    ("mathalpha" "\\mttG" 120438 "𝙶")
+    ("mathalpha" "\\mttH" 120439 "𝙷")
+    ("mathalpha" "\\mttI" 120440 "𝙸")
+    ("mathalpha" "\\mttJ" 120441 "𝙹")
+    ("mathalpha" "\\mttK" 120442 "𝙺")
+    ("mathalpha" "\\mttL" 120443 "𝙻")
+    ("mathalpha" "\\mttM" 120444 "𝙼")
+    ("mathalpha" "\\mttN" 120445 "𝙽")
+    ("mathalpha" "\\mttO" 120446 "𝙾")
+    ("mathalpha" "\\mttP" 120447 "𝙿")
+    ("mathalpha" "\\mttQ" 120448 "𝚀")
+    ("mathalpha" "\\mttR" 120449 "𝚁")
+    ("mathalpha" "\\mttS" 120450 "𝚂")
+    ("mathalpha" "\\mttT" 120451 "𝚃")
+    ("mathalpha" "\\mttU" 120452 "𝚄")
+    ("mathalpha" "\\mttV" 120453 "𝚅")
+    ("mathalpha" "\\mttW" 120454 "𝚆")
+    ("mathalpha" "\\mttX" 120455 "𝚇")
+    ("mathalpha" "\\mttY" 120456 "𝚈")
+    ("mathalpha" "\\mttZ" 120457 "𝚉")
+    ("mathalpha" "\\mtta" 120458 "𝚊")
+    ("mathalpha" "\\mttb" 120459 "𝚋")
+    ("mathalpha" "\\mttc" 120460 "𝚌")
+    ("mathalpha" "\\mttd" 120461 "𝚍")
+    ("mathalpha" "\\mtte" 120462 "𝚎")
+    ("mathalpha" "\\mttf" 120463 "𝚏")
+    ("mathalpha" "\\mttg" 120464 "𝚐")
+    ("mathalpha" "\\mtth" 120465 "𝚑")
+    ("mathalpha" "\\mtti" 120466 "𝚒")
+    ("mathalpha" "\\mttj" 120467 "𝚓")
+    ("mathalpha" "\\mttk" 120468 "𝚔")
+    ("mathalpha" "\\mttl" 120469 "𝚕")
+    ("mathalpha" "\\mttm" 120470 "𝚖")
+    ("mathalpha" "\\mttn" 120471 "𝚗")
+    ("mathalpha" "\\mtto" 120472 "𝚘")
+    ("mathalpha" "\\mttp" 120473 "𝚙")
+    ("mathalpha" "\\mttq" 120474 "𝚚")
+    ("mathalpha" "\\mttr" 120475 "𝚛")
+    ("mathalpha" "\\mtts" 120476 "𝚜")
+    ("mathalpha" "\\mttt" 120477 "𝚝")
+    ("mathalpha" "\\mttu" 120478 "𝚞")
+    ("mathalpha" "\\mttv" 120479 "𝚟")
+    ("mathalpha" "\\mttw" 120480 "𝚠")
+    ("mathalpha" "\\mttx" 120481 "𝚡")
+    ("mathalpha" "\\mtty" 120482 "𝚢")
+    ("mathalpha" "\\mttz" 120483 "𝚣")
+    ("mathalpha" "\\period" 46 ".")
+    ("mathalpha" "\\turnediota" 8489 "℩")
+    ("mathalpha" "\\upAlpha" 913 "Α")
+    ("mathalpha" "\\upBeta" 914 "Β")
+    ("mathalpha" "\\upChi" 935 "Χ")
+    ("mathalpha" "\\upDelta" 916 "Δ")
+    ("mathalpha" "\\upDigamma" 988 "Ϝ")
+    ("mathalpha" "\\upEpsilon" 917 "Ε")
+    ("mathalpha" "\\upEta" 919 "Η")
+    ("mathalpha" "\\upGamma" 915 "Γ")
+    ("mathalpha" "\\upIota" 921 "Ι")
+    ("mathalpha" "\\upKappa" 922 "Κ")
+    ("mathalpha" "\\upKoppa" 990 "Ϟ")
+    ("mathalpha" "\\upLambda" 923 "Λ")
+    ("mathalpha" "\\upMu" 924 "Μ")
+    ("mathalpha" "\\upNu" 925 "Ν")
+    ("mathalpha" "\\upOmega" 937 "Ω")
+    ("mathalpha" "\\upOmicron" 927 "Ο")
+    ("mathalpha" "\\upPhi" 934 "Φ")
+    ("mathalpha" "\\upPi" 928 "Π")
+    ("mathalpha" "\\upPsi" 936 "Ψ")
+    ("mathalpha" "\\upRho" 929 "Ρ")
+    ("mathalpha" "\\upSampi" 992 "Ϡ")
+    ("mathalpha" "\\upSigma" 931 "Σ")
+    ("mathalpha" "\\upStigma" 986 "Ϛ")
+    ("mathalpha" "\\upTau" 932 "Τ")
+    ("mathalpha" "\\upTheta" 920 "Θ")
+    ("mathalpha" "\\upUpsilon" 933 "Υ")
+    ("mathalpha" "\\upUpsilon" 978 "ϒ")
+    ("mathalpha" "\\upXi" 926 "Ξ")
+    ("mathalpha" "\\upZeta" 918 "Ζ")
+    ("mathalpha" "\\upalpha" 945 "α")
+    ("mathalpha" "\\upbeta" 946 "β")
+    ("mathalpha" "\\upchi" 967 "χ")
+    ("mathalpha" "\\updelta" 948 "δ")
+    ("mathalpha" "\\updigamma" 989 "ϝ")
+    ("mathalpha" "\\upepsilon" 949 "ε")
+    ("mathalpha" "\\upeta" 951 "η")
+    ("mathalpha" "\\upgamma" 947 "γ")
+    ("mathalpha" "\\upiota" 953 "ι")
+    ("mathalpha" "\\upkappa" 954 "κ")
+    ("mathalpha" "\\upkoppa" 991 "ϟ")
+    ("mathalpha" "\\uplambda" 955 "λ")
+    ("mathalpha" "\\upmu" 956 "μ")
+    ("mathalpha" "\\upnu" 957 "ν")
+    ("mathalpha" "\\upomega" 969 "ω")
+    ("mathalpha" "\\upomicron" 959 "ο")
+    ("mathalpha" "\\upphi" 981 "ϕ")
+    ("mathalpha" "\\uppi" 960 "π")
+    ("mathalpha" "\\uppsi" 968 "ψ")
+    ("mathalpha" "\\uprho" 961 "ρ")
+    ("mathalpha" "\\upsampi" 993 "ϡ")
+    ("mathalpha" "\\upsigma" 963 "σ")
+    ("mathalpha" "\\upstigma" 987 "ϛ")
+    ("mathalpha" "\\uptau" 964 "τ")
+    ("mathalpha" "\\uptheta" 952 "θ")
+    ("mathalpha" "\\upupsilon" 965 "υ")
+    ("mathalpha" "\\upvarTheta" 1012 "ϴ")
+    ("mathalpha" "\\upvarbeta" 976 "ϐ")
+    ("mathalpha" "\\upvarepsilon" 1013 "ϵ")
+    ("mathalpha" "\\upvarkappa" 1008 "ϰ")
+    ("mathalpha" "\\upvarphi" 966 "φ")
+    ("mathalpha" "\\upvarpi" 982 "ϖ")
+    ("mathalpha" "\\upvarrho" 1009 "ϱ")
+    ("mathalpha" "\\upvarsigma" 962 "ς")
+    ("mathalpha" "\\upvartheta" 977 "ϑ")
+    ("mathalpha" "\\upxi" 958 "ξ")
+    ("mathalpha" "\\upzeta" 950 "ζ")
+    ("mathalpha" "\\wp" 8472 "℘")
+    ("mathbin" "\\Cap" 8914 "⋒")
+    ("mathbin" "\\Cup" 8915 "⋓")
+    ("mathbin" "\\Otimes" 10807 "⨷")
+    ("mathbin" "\\Sqcap" 10830 "⩎")
+    ("mathbin" "\\Sqcup" 10831 "⩏")
+    ("mathbin" "\\Vee" 10836 "⩔")
+    ("mathbin" "\\Wedge" 10835 "⩓")
+    ("mathbin" "\\amalg" 10815 "⨿")
+    ("mathbin" "\\ast" 8727 "∗")
+    ("mathbin" "\\barcap" 10819 "⩃")
+    ("mathbin" "\\barcup" 10818 "⩂")
+    ("mathbin" "\\barvee" 8893 "⊽")
+    ("mathbin" "\\barwedge" 8892 "⊼")
+    ("mathbin" "\\bigslopedvee" 10839 "⩗")
+    ("mathbin" "\\bigslopedwedge" 10840 "⩘")
+    ("mathbin" "\\bigtriangledown" 9661 "▽")
+    ("mathbin" "\\bigtriangleup" 9651 "△")
+    ("mathbin" "\\blackhourglass" 10711 "⧗")
+    ("mathbin" "\\blacktriangle" 9652 "▴")
+    ("mathbin" "\\blacktriangledown" 9662 "▾")
+    ("mathbin" "\\blacktriangleleft" 9664 "◀")
+    ("mathbin" "\\blacktriangleright" 9654 "▶")
+    ("mathbin" "\\boxast" 10694 "⧆")
+    ("mathbin" "\\boxbar" 9707 "◫")
+    ("mathbin" "\\boxbox" 10696 "⧈")
+    ("mathbin" "\\boxbslash" 10693 "⧅")
+    ("mathbin" "\\boxcircle" 10695 "⧇")
+    ("mathbin" "\\boxdiag" 10692 "⧄")
+    ("mathbin" "\\boxdot" 8865 "⊡")
+    ("mathbin" "\\boxminus" 8863 "⊟")
+    ("mathbin" "\\boxplus" 8862 "⊞")
+    ("mathbin" "\\boxtimes" 8864 "⊠")
+    ("mathbin" "\\btimes" 10802 "⨲")
+    ("mathbin" "\\cap" 8745 "∩")
+    ("mathbin" "\\capbarcup" 10825 "⩉")
+    ("mathbin" "\\capdot" 10816 "⩀")
+    ("mathbin" "\\capovercup" 10823 "⩇")
+    ("mathbin" "\\capwedge" 10820 "⩄")
+    ("mathbin" "\\cdot" 8901 "⋅")
+    ("mathbin" "\\cdotp" 183 "·")
+    ("mathbin" "\\circledast" 8859 "⊛")
+    ("mathbin" "\\circledcirc" 8858 "⊚")
+    ("mathbin" "\\circleddash" 8861 "⊝")
+    ("mathbin" "\\circledequal" 8860 "⊜")
+    ("mathbin" "\\circledparallel" 10679 "⦷")
+    ("mathbin" "\\circledvert" 10678 "⦶")
+    ("mathbin" "\\circlehbar" 10677 "⦵")
+    ("mathbin" "\\closedvarcap" 10829 "⩍")
+    ("mathbin" "\\closedvarcup" 10828 "⩌")
+    ("mathbin" "\\closedvarcupsmashprod" 10832 "⩐")
+    ("mathbin" "\\commaminus" 10793 "⨩")
+    ("mathbin" "\\concavediamond" 10209 "⟡")
+    ("mathbin" "\\concavediamondtickleft" 10210 "⟢")
+    ("mathbin" "\\concavediamondtickright" 10211 "⟣")
+    ("mathbin" "\\cup" 8746 "∪")
+    ("mathbin" "\\cupbarcap" 10824 "⩈")
+    ("mathbin" "\\cupdot" 8845 "⊍")
+    ("mathbin" "\\cupleftarrow" 8844 "⊌")
+    ("mathbin" "\\cupovercap" 10822 "⩆")
+    ("mathbin" "\\cupvee" 10821 "⩅")
+    ("mathbin" "\\curlyvee" 8910 "⋎")
+    ("mathbin" "\\curlywedge" 8911 "⋏")
+    ("mathbin" "\\dagger" 8224 "†")
+    ("mathbin" "\\ddagger" 8225 "‡")
+    ("mathbin" "\\div" 247 "÷")
+    ("mathbin" "\\divideontimes" 8903 "⋇")
+    ("mathbin" "\\divslash" 8725 "∕")
+    ("mathbin" "\\dotminus" 8760 "∸")
+    ("mathbin" "\\dotplus" 8724 "∔")
+    ("mathbin" "\\dottimes" 10800 "⨰")
+    ("mathbin" "\\doublebarvee" 10850 "⩢")
+    ("mathbin" "\\doublebarwedge" 10846 "⩞")
+    ("mathbin" "\\doubleplus" 10746 "⧺")
+    ("mathbin" "\\dsol" 10742 "⧶")
+    ("mathbin" "\\dsub" 10852 "⩤")
+    ("mathbin" "\\eqqplus" 10865 "⩱")
+    ("mathbin" "\\fcmp" 10814 "⨾")
+    ("mathbin" "\\fracslash" 8260 "⁄")
+    ("mathbin" "\\hourglass" 10710 "⧖")
+    ("mathbin" "\\intercal" 8890 "⊺")
+    ("mathbin" "\\interleave" 10996 "⫴")
+    ("mathbin" "\\intprod" 10812 "⨼")
+    ("mathbin" "\\intprodr" 10813 "⨽")
+    ("mathbin" "\\invlazys" 8766 "∾")
+    ("mathbin" "\\leftthreetimes" 8907 "⋋")
+    ("mathbin" "\\lozengeminus" 10208 "⟠")
+    ("mathbin" "\\ltimes" 8905 "⋉")
+    ("mathbin" "\\mdlgblklozenge" 10731 "⧫")
+    ("mathbin" "\\mdlgwhtcircle" 9675 "○")
+    ("mathbin" "\\midbarvee" 10845 "⩝")
+    ("mathbin" "\\midbarwedge" 10844 "⩜")
+    ("mathbin" "\\minus" 8722 "−")
+    ("mathbin" "\\minusdot" 10794 "⨪")
+    ("mathbin" "\\minusfdots" 10795 "⨫")
+    ("mathbin" "\\minusrdots" 10796 "⨬")
+    ("mathbin" "\\mp" 8723 "∓")
+    ("mathbin" "\\nhVvert" 10997 "⫵")
+    ("mathbin" "\\obar" 9021 "⌽")
+    ("mathbin" "\\obslash" 10680 "⦸")
+    ("mathbin" "\\odiv" 10808 "⨸")
+    ("mathbin" "\\odot" 8857 "⊙")
+    ("mathbin" "\\ogreaterthan" 10689 "⧁")
+    ("mathbin" "\\olessthan" 10688 "⧀")
+    ("mathbin" "\\ominus" 8854 "⊖")
+    ("mathbin" "\\operp" 10681 "⦹")
+    ("mathbin" "\\oplus" 8853 "⊕")
+    ("mathbin" "\\opluslhrim" 10797 "⨭")
+    ("mathbin" "\\oplusrhrim" 10798 "⨮")
+    ("mathbin" "\\oslash" 8856 "⊘")
+    ("mathbin" "\\otimes" 8855 "⊗")
+    ("mathbin" "\\otimeshat" 10806 "⨶")
+    ("mathbin" "\\otimeslhrim" 10804 "⨴")
+    ("mathbin" "\\otimesrhrim" 10805 "⨵")
+    ("mathbin" "\\plus" 43 "+")
+    ("mathbin" "\\plusdot" 10789 "⨥")
+    ("mathbin" "\\pluseqq" 10866 "⩲")
+    ("mathbin" "\\plushat" 10787 "⨣")
+    ("mathbin" "\\plussim" 10790 "⨦")
+    ("mathbin" "\\plussubtwo" 10791 "⨧")
+    ("mathbin" "\\plustrif" 10792 "⨨")
+    ("mathbin" "\\pm" 177 "±")
+    ("mathbin" "\\rightthreetimes" 8908 "⋌")
+    ("mathbin" "\\ringplus" 10786 "⨢")
+    ("mathbin" "\\rsolbar" 10743 "⧷")
+    ("mathbin" "\\rsub" 10853 "⩥")
+    ("mathbin" "\\rtimes" 8906 "⋊")
+    ("mathbin" "\\setminus" 10741 "⧵")
+    ("mathbin" "\\shuffle" 10722 "⧢")
+    ("mathbin" "\\simplus" 10788 "⨤")
+    ("mathbin" "\\smallblacktriangleleft" 9666 "◂")
+    ("mathbin" "\\smallblacktriangleright" 9656 "▸")
+    ("mathbin" "\\smallsetminus" 8726 "∖")
+    ("mathbin" "\\smalltriangleleft" 9667 "◃")
+    ("mathbin" "\\smalltriangleright" 9657 "▹")
+    ("mathbin" "\\smashtimes" 10803 "⨳")
+    ("mathbin" "\\smblkcircle" 8226 "•")
+    ("mathbin" "\\smwhtdiamond" 8900 "⋄")
+    ("mathbin" "\\sqcap" 8851 "⊓")
+    ("mathbin" "\\sqcup" 8852 "⊔")
+    ("mathbin" "\\sslash" 11005 "⫽")
+    ("mathbin" "\\star" 8902 "⋆")
+    ("mathbin" "\\talloblong" 11006 "⫾")
+    ("mathbin" "\\threedotcolon" 10998 "⫶")
+    ("mathbin" "\\tieconcat" 8256 "⁀")
+    ("mathbin" "\\times" 215 "×")
+    ("mathbin" "\\timesbar" 10801 "⨱")
+    ("mathbin" "\\tminus" 10751 "⧿")
+    ("mathbin" "\\tplus" 10750 "⧾")
+    ("mathbin" "\\triangledown" 9663 "▿")
+    ("mathbin" "\\triangleleft" 9665 "◁")
+    ("mathbin" "\\triangleminus" 10810 "⨺")
+    ("mathbin" "\\triangleplus" 10809 "⨹")
+    ("mathbin" "\\triangleright" 9655 "▷")
+    ("mathbin" "\\triangleserifs" 10701 "⧍")
+    ("mathbin" "\\triangletimes" 10811 "⨻")
+    ("mathbin" "\\tripleplus" 10747 "⧻")
+    ("mathbin" "\\trslash" 11003 "⫻")
+    ("mathbin" "\\twocaps" 10827 "⩋")
+    ("mathbin" "\\twocups" 10826 "⩊")
+    ("mathbin" "\\typecolon" 10626 "⦂")
+    ("mathbin" "\\uminus" 10817 "⩁")
+    ("mathbin" "\\upand" 8523 "⅋")
+    ("mathbin" "\\uplus" 8846 "⊎")
+    ("mathbin" "\\varbarwedge" 8965 "⌅")
+    ("mathbin" "\\vardoublebarwedge" 8966 "⌆")
+    ("mathbin" "\\vartriangle" 9653 "▵")
+    ("mathbin" "\\varveebar" 10849 "⩡")
+    ("mathbin" "\\vectimes" 10799 "⨯")
+    ("mathbin" "\\vee" 8744 "∨")
+    ("mathbin" "\\veebar" 8891 "⊻")
+    ("mathbin" "\\veedot" 10183 "⟇")
+    ("mathbin" "\\veedoublebar" 10851 "⩣")
+    ("mathbin" "\\veemidvert" 10843 "⩛")
+    ("mathbin" "\\veeodot" 10834 "⩒")
+    ("mathbin" "\\veeonvee" 10838 "⩖")
+    ("mathbin" "\\vysmblkcircle" 8729 "∙")
+    ("mathbin" "\\vysmwhtcircle" 8728 "∘")
+    ("mathbin" "\\wedge" 8743 "∧")
+    ("mathbin" "\\wedgebar" 10847 "⩟")
+    ("mathbin" "\\wedgedot" 10193 "⟑")
+    ("mathbin" "\\wedgedoublebar" 10848 "⩠")
+    ("mathbin" "\\wedgemidvert" 10842 "⩚")
+    ("mathbin" "\\wedgeodot" 10833 "⩑")
+    ("mathbin" "\\wedgeonwedge" 10837 "⩕")
+    ("mathbin" "\\whitesquaretickleft" 10212 "⟤")
+    ("mathbin" "\\whitesquaretickright" 10213 "⟥")
+    ("mathbin" "\\wr" 8768 "≀")
+    ("mathclose" "\\Rbrbrak" 10221 "⟭")
+    ("mathclose" "\\Rbrbrak" 12313 "〙")
+    ("mathclose" "\\Rparenless" 10646 "⦖")
+    ("mathclose" "\\Rvzigzag" 10715 "⧛")
+    ("mathclose" "\\lrcorner" 8991 "⌟")
+    ("mathclose" "\\rAngle" 10219 "⟫")
+    ("mathclose" "\\rBrace" 10628 "⦄")
+    ("mathclose" "\\rBrack" 10215 "⟧")
+    ("mathclose" "\\rParen" 10630 "⦆")
+    ("mathclose" "\\rangle" 10217 "⟩")
+    ("mathclose" "\\rangledot" 10642 "⦒")
+    ("mathclose" "\\rbag" 10182 "⟆")
+    ("mathclose" "\\rblkbrbrak" 10648 "⦘")
+    ("mathclose" "\\rbrace" 125 "}")
+    ("mathclose" "\\rbrack" 93 "]")
+    ("mathclose" "\\rbracklrtick" 10638 "⦎")
+    ("mathclose" "\\rbrackubar" 10636 "⦌")
+    ("mathclose" "\\rbrackurtick" 10640 "⦐")
+    ("mathclose" "\\rbrbrak" 10099 "❳")
+    ("mathclose" "\\rbrbrak" 12309 "〕")
+    ("mathclose" "\\rceil" 8969 "⌉")
+    ("mathclose" "\\rcurvyangle" 10749 "⧽")
+    ("mathclose" "\\rfloor" 8971 "⌋")
+    ("mathclose" "\\rparen" 41 ")")
+    ("mathclose" "\\rparengtr" 10644 "⦔")
+    ("mathclose" "\\rrangle" 10634 "⦊")
+    ("mathclose" "\\rrparenthesis" 10632 "⦈")
+    ("mathclose" "\\rvzigzag" 10713 "⧙")
+    ("mathclose" "\\urcorner" 8989 "⌝")
+    ("mathfence" "\\Vert" 8214 "‖")
+    ("mathfence" "\\Vvert" 10624 "⦀")
+    ("mathfence" "\\vert" 124 "|")
+    ("mathop" "\\Bbbsum" 8512 "⅀")
+    ("mathop" "\\Join" 10781 "⨝")
+    ("mathop" "\\awint" 10769 "⨑")
+    ("mathop" "\\bigbot" 10200 "⟘")
+    ("mathop" "\\bigcap" 8898 "⋂")
+    ("mathop" "\\bigcup" 8899 "⋃")
+    ("mathop" "\\bigcupdot" 10755 "⨃")
+    ("mathop" "\\biginterleave" 11004 "⫼")
+    ("mathop" "\\bigodot" 10752 "⨀")
+    ("mathop" "\\bigoplus" 10753 "⨁")
+    ("mathop" "\\bigotimes" 10754 "⨂")
+    ("mathop" "\\bigsqcap" 10757 "⨅")
+    ("mathop" "\\bigsqcup" 10758 "⨆")
+    ("mathop" "\\bigtalloblong" 11007 "⫿")
+    ("mathop" "\\bigtimes" 10761 "⨉")
+    ("mathop" "\\bigtop" 10201 "⟙")
+    ("mathop" "\\bigtriangleleft" 10782 "⨞")
+    ("mathop" "\\biguplus" 10756 "⨄")
+    ("mathop" "\\bigvee" 8897 "⋁")
+    ("mathop" "\\bigwedge" 8896 "⋀")
+    ("mathop" "\\cirfnint" 10768 "⨐")
+    ("mathop" "\\conjquant" 10759 "⨇")
+    ("mathop" "\\coprod" 8720 "∐")
+    ("mathop" "\\disjquant" 10760 "⨈")
+    ("mathop" "\\fint" 10767 "⨏")
+    ("mathop" "\\fullouterjoin" 10199 "⟗")
+    ("mathop" "\\iiiint" 10764 "⨌")
+    ("mathop" "\\iiint" 8749 "∭")
+    ("mathop" "\\iint" 8748 "∬")
+    ("mathop" "\\int" 8747 "∫")
+    ("mathop" "\\intBar" 10766 "⨎")
+    ("mathop" "\\intbar" 10765 "⨍")
+    ("mathop" "\\intcap" 10777 "⨙")
+    ("mathop" "\\intclockwise" 8753 "∱")
+    ("mathop" "\\intcup" 10778 "⨚")
+    ("mathop" "\\intlarhk" 10775 "⨗")
+    ("mathop" "\\intx" 10776 "⨘")
+    ("mathop" "\\leftouterjoin" 10197 "⟕")
+    ("mathop" "\\lowint" 10780 "⨜")
+    ("mathop" "\\npolint" 10772 "⨔")
+    ("mathop" "\\oiiint" 8752 "∰")
+    ("mathop" "\\oiint" 8751 "∯")
+    ("mathop" "\\oint" 8750 "∮")
+    ("mathop" "\\ointctrclockwise" 8755 "∳")
+    ("mathop" "\\pointint" 10773 "⨕")
+    ("mathop" "\\prod" 8719 "∏")
+    ("mathop" "\\rightouterjoin" 10198 "⟖")
+    ("mathop" "\\rppolint" 10770 "⨒")
+    ("mathop" "\\scpolint" 10771 "⨓")
+    ("mathop" "\\sqint" 10774 "⨖")
+    ("mathop" "\\sum" 8721 "∑")
+    ("mathop" "\\sumint" 10763 "⨋")
+    ("mathop" "\\upint" 10779 "⨛")
+    ("mathop" "\\varointclockwise" 8754 "∲")
+    ("mathop" "\\xbsol" 10745 "⧹")
+    ("mathop" "\\xsol" 10744 "⧸")
+    ("mathop" "\\zcmp" 10783 "⨟")
+    ("mathop" "\\zpipe" 10784 "⨠")
+    ("mathop" "\\zproject" 10785 "⨡")
+    ("mathopen" "\\Lbrbrak" 10220 "⟬")
+    ("mathopen" "\\Lbrbrak" 12312 "〘")
+    ("mathopen" "\\Lparengtr" 10645 "⦕")
+    ("mathopen" "\\Lvzigzag" 10714 "⧚")
+    ("mathopen" "\\lAngle" 10218 "⟪")
+    ("mathopen" "\\lBrace" 10627 "⦃")
+    ("mathopen" "\\lBrack" 10214 "⟦")
+    ("mathopen" "\\lParen" 10629 "⦅")
+    ("mathopen" "\\langle" 10216 "⟨")
+    ("mathopen" "\\langledot" 10641 "⦑")
+    ("mathopen" "\\lbag" 10181 "⟅")
+    ("mathopen" "\\lblkbrbrak" 10647 "⦗")
+    ("mathopen" "\\lbrace" 123 "{")
+    ("mathopen" "\\lbrack" 91 "[")
+    ("mathopen" "\\lbracklltick" 10639 "⦏")
+    ("mathopen" "\\lbrackubar" 10635 "⦋")
+    ("mathopen" "\\lbrackultick" 10637 "⦍")
+    ("mathopen" "\\lbrbrak" 10098 "❲")
+    ("mathopen" "\\lbrbrak" 12308 "〔")
+    ("mathopen" "\\lceil" 8968 "⌈")
+    ("mathopen" "\\lcurvyangle" 10748 "⧼")
+    ("mathopen" "\\lfloor" 8970 "⌊")
+    ("mathopen" "\\llangle" 10633 "⦉")
+    ("mathopen" "\\llcorner" 8990 "⌞")
+    ("mathopen" "\\llparenthesis" 10631 "⦇")
+    ("mathopen" "\\longdivision" 10188 "⟌")
+    ("mathopen" "\\lparen" 40 "(")
+    ("mathopen" "\\lparenless" 10643 "⦓")
+    ("mathopen" "\\lvzigzag" 10712 "⧘")
+    ("mathopen" "\\ulcorner" 8988 "⌜")
+    ("mathord" "\\APLboxquestion" 9072 "⍰")
+    ("mathord" "\\APLboxupcaret" 9043 "⍓")
+    ("mathord" "\\APLnotbackslash" 9024 "⍀")
+    ("mathord" "\\Bbbeight" 120800 "𝟠")
+    ("mathord" "\\Bbbfive" 120797 "𝟝")
+    ("mathord" "\\Bbbfour" 120796 "𝟜")
+    ("mathord" "\\Bbbnine" 120801 "𝟡")
+    ("mathord" "\\Bbbone" 120793 "𝟙")
+    ("mathord" "\\Bbbpi" 8508 "ℼ")
+    ("mathord" "\\Bbbseven" 120799 "𝟟")
+    ("mathord" "\\Bbbsix" 120798 "𝟞")
+    ("mathord" "\\Bbbthree" 120795 "𝟛")
+    ("mathord" "\\Bbbtwo" 120794 "𝟚")
+    ("mathord" "\\Bbbzero" 120792 "𝟘")
+    ("mathord" "\\Eulerconst" 8455 "ℇ")
+    ("mathord" "\\Exclam" 8252 "‼")
+    ("mathord" "\\Finv" 8498 "Ⅎ")
+    ("mathord" "\\Game" 8513 "⅁")
+    ("mathord" "\\Hermaphrodite" 9893 "⚥")
+    ("mathord" "\\Planckconst" 8462 "ℎ")
+    ("mathord" "\\PropertyLine" 8522 "⅊")
+    ("mathord" "\\QED" 8718 "∎")
+    ("mathord" "\\Question" 8263 "⁇")
+    ("mathord" "\\Yup" 8516 "⅄")
+    ("mathord" "\\Zbar" 437 "Ƶ")
+    ("mathord" "\\accurrent" 9190 "⏦")
+    ("mathord" "\\acidfree" 9854 "♾")
+    ("mathord" "\\acwopencirclearrow" 8634 "↺")
+    ("mathord" "\\ampersand" 38 "&")
+    ("mathord" "\\angdnr" 10655 "⦟")
+    ("mathord" "\\angle" 8736 "∠")
+    ("mathord" "\\angles" 10654 "⦞")
+    ("mathord" "\\angleubar" 10660 "⦤")
+    ("mathord" "\\astrosun" 9737 "☉")
+    ("mathord" "\\atsign" 64 "@")
+    ("mathord" "\\backdprime" 8246 "‶")
+    ("mathord" "\\backprime" 8245 "‵")
+    ("mathord" "\\backslash" 92 "\\")
+    ("mathord" "\\backtrprime" 8247 "‷")
+    ("mathord" "\\barleftarrowrightarrowba" 8633 "↹")
+    ("mathord" "\\barovernorthwestarrow" 8632 "↸")
+    ("mathord" "\\bbrktbrk" 9142 "⎶")
+    ("mathord" "\\bdtriplevdash" 9478 "┆")
+    ("mathord" "\\because" 8757 "∵")
+    ("mathord" "\\benzenr" 9187 "⏣")
+    ("mathord" "\\bigblacktriangledown" 9660 "▼")
+    ("mathord" "\\bigblacktriangleup" 9650 "▲")
+    ("mathord" "\\bigstar" 9733 "★")
+    ("mathord" "\\bigwhitestar" 9734 "☆")
+    ("mathord" "\\blackcircledownarrow" 10733 "⧭")
+    ("mathord" "\\blackcircledrightdot" 9864 "⚈")
+    ("mathord" "\\blackcircledtwodots" 9865 "⚉")
+    ("mathord" "\\blackcircleulquadwhite" 9685 "◕")
+    ("mathord" "\\blackdiamonddownarrow" 10730 "⧪")
+    ("mathord" "\\blackinwhitediamond" 9672 "◈")
+    ("mathord" "\\blackinwhitesquare" 9635 "▣")
+    ("mathord" "\\blacklefthalfcircle" 9686 "◖")
+    ("mathord" "\\blackpointerleft" 9668 "◄")
+    ("mathord" "\\blackpointerright" 9658 "►")
+    ("mathord" "\\blackrighthalfcircle" 9687 "◗")
+    ("mathord" "\\blacksmiley" 9787 "☻")
+    ("mathord" "\\blkhorzoval" 11052 "⬬")
+    ("mathord" "\\blkvertoval" 11054 "⬮")
+    ("mathord" "\\blockfull" 9608 "█")
+    ("mathord" "\\blockhalfshaded" 9618 "▒")
+    ("mathord" "\\blocklefthalf" 9612 "▌")
+    ("mathord" "\\blocklowhalf" 9604 "▄")
+    ("mathord" "\\blockqtrshaded" 9617 "░")
+    ("mathord" "\\blockrighthalf" 9616 "▐")
+    ("mathord" "\\blockthreeqtrshaded" 9619 "▓")
+    ("mathord" "\\blockuphalf" 9600 "▀")
+    ("mathord" "\\bot" 8869 "⊥")
+    ("mathord" "\\botsemicircle" 9697 "◡")
+    ("mathord" "\\boxonbox" 10697 "⧉")
+    ("mathord" "\\bullseye" 9678 "◎")
+    ("mathord" "\\caretinsert" 8248 "‸")
+    ("mathord" "\\carriagereturn" 8629 "↵")
+    ("mathord" "\\checkmark" 10003 "✓")
+    ("mathord" "\\cirE" 10691 "⧃")
+    ("mathord" "\\circlebottomhalfblack" 9682 "◒")
+    ("mathord" "\\circledbullet" 10687 "⦿")
+    ("mathord" "\\circledownarrow" 10732 "⧬")
+    ("mathord" "\\circledrightdot" 9862 "⚆")
+    ("mathord" "\\circledstar" 10026 "✪")
+    ("mathord" "\\circledtwodots" 9863 "⚇")
+    ("mathord" "\\circledwhitebullet" 10686 "⦾")
+    ("mathord" "\\circlelefthalfblack" 9680 "◐")
+    ("mathord" "\\circlellquad" 9717 "◵")
+    ("mathord" "\\circlelrquad" 9718 "◶")
+    ("mathord" "\\circlerighthalfblack" 9681 "◑")
+    ("mathord" "\\circletophalfblack" 9683 "◓")
+    ("mathord" "\\circleulquad" 9716 "◴")
+    ("mathord" "\\circleurquad" 9719 "◷")
+    ("mathord" "\\circleurquadblack" 9684 "◔")
+    ("mathord" "\\circlevertfill" 9677 "◍")
+    ("mathord" "\\cirscir" 10690 "⧂")
+    ("mathord" "\\clubsuit" 9827 "♣")
+    ("mathord" "\\complement" 8705 "∁")
+    ("mathord" "\\conictaper" 9010 "⌲")
+    ("mathord" "\\cwopencirclearrow" 8635 "↻")
+    ("mathord" "\\danger" 9761 "☡")
+    ("mathord" "\\diameter" 8960 "⌀")
+    ("mathord" "\\diamondbotblack" 11033 "⬙")
+    ("mathord" "\\diamondcdot" 10192 "⟐")
+    ("mathord" "\\diamondleftblack" 11030 "⬖")
+    ("mathord" "\\diamondrightblack" 11031 "⬗")
+    ("mathord" "\\diamondsuit" 9826 "♢")
+    ("mathord" "\\diamondtopblack" 11032 "⬘")
+    ("mathord" "\\dicei" 9856 "⚀")
+    ("mathord" "\\diceii" 9857 "⚁")
+    ("mathord" "\\diceiii" 9858 "⚂")
+    ("mathord" "\\diceiv" 9859 "⚃")
+    ("mathord" "\\dicev" 9860 "⚄")
+    ("mathord" "\\dicevi" 9861 "⚅")
+    ("mathord" "\\dingasterisk" 10045 "✽")
+    ("mathord" "\\dottedcircle" 9676 "◌")
+    ("mathord" "\\dottedsquare" 11034 "⬚")
+    ("mathord" "\\downdasharrow" 8675 "⇣")
+    ("mathord" "\\downrightcurvedarrow" 10549 "⤵")
+    ("mathord" "\\downtriangleleftblack" 10728 "⧨")
+    ("mathord" "\\downtrianglerightblack" 10729 "⧩")
+    ("mathord" "\\downwhitearrow" 8681 "⇩")
+    ("mathord" "\\dprime" 8243 "″")
+    ("mathord" "\\draftingarrow" 10139 "➛")
+    ("mathord" "\\eighthnote" 9834 "♪")
+    ("mathord" "\\elinters" 9191 "⏧")
+    ("mathord" "\\emptysetoarr" 10675 "⦳")
+    ("mathord" "\\emptysetoarrl" 10676 "⦴")
+    ("mathord" "\\emptysetobar" 10673 "⦱")
+    ("mathord" "\\emptysetocirc" 10674 "⦲")
+    ("mathord" "\\enleadertwodots" 8229 "‥")
+    ("mathord" "\\errbarblackcircle" 10739 "⧳")
+    ("mathord" "\\errbarblackdiamond" 10737 "⧱")
+    ("mathord" "\\errbarblacksquare" 10735 "⧯")
+    ("mathord" "\\errbarcircle" 10738 "⧲")
+    ("mathord" "\\errbardiamond" 10736 "⧰")
+    ("mathord" "\\errbarsquare" 10734 "⧮")
+    ("mathord" "\\euro" 8364 "€")
+    ("mathord" "\\exists" 8707 "∃")
+    ("mathord" "\\fdiagovnearrow" 10543 "⤯")
+    ("mathord" "\\fdiagovrdiag" 10540 "⤬")
+    ("mathord" "\\female" 9792 "♀")
+    ("mathord" "\\fisheye" 9673 "◉")
+    ("mathord" "\\flat" 9837 "♭")
+    ("mathord" "\\fltns" 9189 "⏥")
+    ("mathord" "\\forall" 8704 "∀")
+    ("mathord" "\\fourvdots" 10649 "⦙")
+    ("mathord" "\\gtlpar" 10656 "⦠")
+    ("mathord" "\\harrowextender" 9135 "⎯")
+    ("mathord" "\\heartsuit" 9825 "♡")
+    ("mathord" "\\hermitmatrix" 8889 "⊹")
+    ("mathord" "\\hexagon" 9108 "⎔")
+    ("mathord" "\\hexagonblack" 11043 "⬣")
+    ("mathord" "\\horizbar" 8213 "―")
+    ("mathord" "\\house" 8962 "⌂")
+    ("mathord" "\\hrectangle" 9645 "▭")
+    ("mathord" "\\hrectangleblack" 9644 "▬")
+    ("mathord" "\\hyphenbullet" 8259 "⁃")
+    ("mathord" "\\hzigzag" 12336 "〰")
+    ("mathord" "\\iinfin" 10716 "⧜")
+    ("mathord" "\\increment" 8710 "∆")
+    ("mathord" "\\infty" 8734 "∞")
+    ("mathord" "\\intbottom" 8993 "⌡")
+    ("mathord" "\\intextender" 9134 "⎮")
+    ("mathord" "\\inttop" 8992 "⌠")
+    ("mathord" "\\inversebullet" 9688 "◘")
+    ("mathord" "\\inversewhitecircle" 9689 "◙")
+    ("mathord" "\\invnot" 8976 "⌐")
+    ("mathord" "\\invwhitelowerhalfcircle" 9691 "◛")
+    ("mathord" "\\invwhiteupperhalfcircle" 9690 "◚")
+    ("mathord" "\\laplac" 10720 "⧠")
+    ("mathord" "\\lbracelend" 9129 "⎩")
+    ("mathord" "\\lbracemid" 9128 "⎨")
+    ("mathord" "\\lbraceuend" 9127 "⎧")
+    ("mathord" "\\lbrackextender" 9122 "⎢")
+    ("mathord" "\\lbracklend" 9123 "⎣")
+    ("mathord" "\\lbrackuend" 9121 "⎡")
+    ("mathord" "\\leftdasharrow" 8672 "⇠")
+    ("mathord" "\\leftmoon" 9790 "☾")
+    ("mathord" "\\leftwhitearrow" 8678 "⇦")
+    ("mathord" "\\lgblkcircle" 11044 "⬤")
+    ("mathord" "\\lgblksquare" 11035 "⬛")
+    ("mathord" "\\lgwhtcircle" 9711 "◯")
+    ("mathord" "\\lgwhtsquare" 11036 "⬜")
+    ("mathord" "\\linefeed" 8628 "↴")
+    ("mathord" "\\llarc" 9695 "◟")
+    ("mathord" "\\llblacktriangle" 9699 "◣")
+    ("mathord" "\\lltriangle" 9722 "◺")
+    ("mathord" "\\lmoustache" 9136 "⎰")
+    ("mathord" "\\lparenextender" 9116 "⎜")
+    ("mathord" "\\lparenlend" 9117 "⎝")
+    ("mathord" "\\lparenuend" 9115 "⎛")
+    ("mathord" "\\lrarc" 9694 "◞")
+    ("mathord" "\\lrblacktriangle" 9698 "◢")
+    ("mathord" "\\lrtriangle" 9727 "◿")
+    ("mathord" "\\lvboxline" 9144 "⎸")
+    ("mathord" "\\male" 9794 "♂")
+    ("mathord" "\\maltese" 10016 "✠")
+    ("mathord" "\\mathdollar" 36 "$")
+    ("mathord" "\\mathslash" 47 "/")
+    ("mathord" "\\mbfitnabla" 120629 "𝜵")
+    ("mathord" "\\mbfitpartial" 120655 "𝝏")
+    ("mathord" "\\mbfitsansnabla" 120745 "𝞩")
+    ("mathord" "\\mbfitsanspartial" 120771 "𝟃")
+    ("mathord" "\\mbfnabla" 120513 "𝛁")
+    ("mathord" "\\mbfpartial" 120539 "𝛛")
+    ("mathord" "\\mbfsanseight" 120820 "𝟴")
+    ("mathord" "\\mbfsansfive" 120817 "𝟱")
+    ("mathord" "\\mbfsansfour" 120816 "𝟰")
+    ("mathord" "\\mbfsansnabla" 120687 "𝝯")
+    ("mathord" "\\mbfsansnine" 120821 "𝟵")
+    ("mathord" "\\mbfsansone" 120813 "𝟭")
+    ("mathord" "\\mbfsanspartial" 120713 "𝞉")
+    ("mathord" "\\mbfsansseven" 120819 "𝟳")
+    ("mathord" "\\mbfsanssix" 120818 "𝟲")
+    ("mathord" "\\mbfsansthree" 120815 "𝟯")
+    ("mathord" "\\mbfsanstwo" 120814 "𝟮")
+    ("mathord" "\\mbfsanszero" 120812 "𝟬")
+    ("mathord" "\\mdblkcircle" 9899 "⚫")
+    ("mathord" "\\mdblkdiamond" 11045 "⬥")
+    ("mathord" "\\mdblklozenge" 11047 "⬧")
+    ("mathord" "\\mdblksquare" 9724 "◼")
+    ("mathord" "\\mdlgblkcircle" 9679 "●")
+    ("mathord" "\\mdlgblkdiamond" 9670 "◆")
+    ("mathord" "\\mdlgblksquare" 9632 "■")
+    ("mathord" "\\mdlgwhtdiamond" 9671 "◇")
+    ("mathord" "\\mdlgwhtlozenge" 9674 "◊")
+    ("mathord" "\\mdlgwhtsquare" 9633 "□")
+    ("mathord" "\\mdsmblkcircle" 10625 "⦁")
+    ("mathord" "\\mdsmblksquare" 9726 "◾")
+    ("mathord" "\\mdsmwhtcircle" 9900 "⚬")
+    ("mathord" "\\mdsmwhtsquare" 9725 "◽")
+    ("mathord" "\\mdwhtcircle" 9898 "⚪")
+    ("mathord" "\\mdwhtdiamond" 11046 "⬦")
+    ("mathord" "\\mdwhtlozenge" 11048 "⬨")
+    ("mathord" "\\mdwhtsquare" 9723 "◻")
+    ("mathord" "\\measangledltosw" 10671 "⦯")
+    ("mathord" "\\measangledrtose" 10670 "⦮")
+    ("mathord" "\\measangleldtosw" 10667 "⦫")
+    ("mathord" "\\measanglelutonw" 10665 "⦩")
+    ("mathord" "\\measanglerdtose" 10666 "⦪")
+    ("mathord" "\\measanglerutone" 10664 "⦨")
+    ("mathord" "\\measangleultonw" 10669 "⦭")
+    ("mathord" "\\measangleurtone" 10668 "⦬")
+    ("mathord" "\\measuredangle" 8737 "∡")
+    ("mathord" "\\measuredangleleft" 10651 "⦛")
+    ("mathord" "\\measuredrightangle" 8894 "⊾")
+    ("mathord" "\\medblackstar" 11089 "⭑")
+    ("mathord" "\\medwhitestar" 11088 "⭐")
+    ("mathord" "\\mho" 8487 "℧")
+    ("mathord" "\\mitBbbD" 8517 "ⅅ")
+    ("mathord" "\\mitBbbd" 8518 "ⅆ")
+    ("mathord" "\\mitBbbe" 8519 "ⅇ")
+    ("mathord" "\\mitBbbi" 8520 "ⅈ")
+    ("mathord" "\\mitBbbj" 8521 "ⅉ")
+    ("mathord" "\\mitnabla" 120571 "𝛻")
+    ("mathord" "\\mitpartial" 120597 "𝜕")
+    ("mathord" "\\modtwosum" 10762 "⨊")
+    ("mathord" "\\msanseight" 120810 "𝟪")
+    ("mathord" "\\msansfive" 120807 "𝟧")
+    ("mathord" "\\msansfour" 120806 "𝟦")
+    ("mathord" "\\msansnine" 120811 "𝟫")
+    ("mathord" "\\msansone" 120803 "𝟣")
+    ("mathord" "\\msansseven" 120809 "𝟩")
+    ("mathord" "\\msanssix" 120808 "𝟨")
+    ("mathord" "\\msansthree" 120805 "𝟥")
+    ("mathord" "\\msanstwo" 120804 "𝟤")
+    ("mathord" "\\msanszero" 120802 "𝟢")
+    ("mathord" "\\mtteight" 120830 "𝟾")
+    ("mathord" "\\mttfive" 120827 "𝟻")
+    ("mathord" "\\mttfour" 120826 "𝟺")
+    ("mathord" "\\mttnine" 120831 "𝟿")
+    ("mathord" "\\mttone" 120823 "𝟷")
+    ("mathord" "\\mttseven" 120829 "𝟽")
+    ("mathord" "\\mttsix" 120828 "𝟼")
+    ("mathord" "\\mttthree" 120825 "𝟹")
+    ("mathord" "\\mtttwo" 120824 "𝟸")
+    ("mathord" "\\mttzero" 120822 "𝟶")
+    ("mathord" "\\nHdownarrow" 8671 "⇟")
+    ("mathord" "\\nHuparrow" 8670 "⇞")
+    ("mathord" "\\nabla" 8711 "∇")
+    ("mathord" "\\natural" 9838 "♮")
+    ("mathord" "\\neg" 172 "¬")
+    ("mathord" "\\neovnwarrow" 10545 "⤱")
+    ("mathord" "\\neovsearrow" 10542 "⤮")
+    ("mathord" "\\neuter" 9906 "⚲")
+    ("mathord" "\\nexists" 8708 "∄")
+    ("mathord" "\\nvinfty" 10718 "⧞")
+    ("mathord" "\\nwovnearrow" 10546 "⤲")
+    ("mathord" "\\obot" 10682 "⦺")
+    ("mathord" "\\obrbrak" 9184 "⏠")
+    ("mathord" "\\octothorpe" 35 "#")
+    ("mathord" "\\odotslashdot" 10684 "⦼")
+    ("mathord" "\\olcross" 10683 "⦻")
+    ("mathord" "\\parallelogram" 9649 "▱")
+    ("mathord" "\\parallelogramblack" 9648 "▰")
+    ("mathord" "\\partial" 8706 "∂")
+    ("mathord" "\\pentagon" 11040 "⬠")
+    ("mathord" "\\pentagonblack" 11039 "⬟")
+    ("mathord" "\\percent" 37 "%")
+    ("mathord" "\\perps" 10977 "⫡")
+    ("mathord" "\\postalmark" 12306 "〒")
+    ("mathord" "\\prime" 8242 "′")
+    ("mathord" "\\profline" 8978 "⌒")
+    ("mathord" "\\profsurf" 8979 "⌓")
+    ("mathord" "\\qprime" 8279 "⁗")
+    ("mathord" "\\quarternote" 9833 "♩")
+    ("mathord" "\\question" 63 "?")
+    ("mathord" "\\rangledownzigzagarrow" 9084 "⍼")
+    ("mathord" "\\rbracelend" 9133 "⎭")
+    ("mathord" "\\rbracemid" 9132 "⎬")
+    ("mathord" "\\rbraceuend" 9131 "⎫")
+    ("mathord" "\\rbrackextender" 9125 "⎥")
+    ("mathord" "\\rbracklend" 9126 "⎦")
+    ("mathord" "\\rbrackuend" 9124 "⎤")
+    ("mathord" "\\rdiagovfdiag" 10539 "⤫")
+    ("mathord" "\\rdiagovsearrow" 10544 "⤰")
+    ("mathord" "\\revangle" 10659 "⦣")
+    ("mathord" "\\revangleubar" 10661 "⦥")
+    ("mathord" "\\revemptyset" 10672 "⦰")
+    ("mathord" "\\rightangle" 8735 "∟")
+    ("mathord" "\\rightanglemdot" 10653 "⦝")
+    ("mathord" "\\rightanglesqr" 10652 "⦜")
+    ("mathord" "\\rightdasharrow" 8674 "⇢")
+    ("mathord" "\\rightmoon" 9789 "☽")
+    ("mathord" "\\rightpentagon" 11092 "⭔")
+    ("mathord" "\\rightpentagonblack" 11091 "⭓")
+    ("mathord" "\\rightwhitearrow" 8680 "⇨")
+    ("mathord" "\\rmoustache" 9137 "⎱")
+    ("mathord" "\\rparenextender" 9119 "⎟")
+    ("mathord" "\\rparenlend" 9120 "⎠")
+    ("mathord" "\\rparenuend" 9118 "⎞")
+    ("mathord" "\\rvboxline" 9145 "⎹")
+    ("mathord" "\\sansLmirrored" 8515 "⅃")
+    ("mathord" "\\sansLturned" 8514 "⅂")
+    ("mathord" "\\seovnearrow" 10541 "⤭")
+    ("mathord" "\\sharp" 9839 "♯")
+    ("mathord" "\\sinewave" 8767 "∿")
+    ("mathord" "\\smblkdiamond" 11049 "⬩")
+    ("mathord" "\\smblklozenge" 11050 "⬪")
+    ("mathord" "\\smblksquare" 9642 "▪")
+    ("mathord" "\\smwhitestar" 11090 "⭒")
+    ("mathord" "\\smwhtcircle" 9702 "◦")
+    ("mathord" "\\smwhtlozenge" 11051 "⬫")
+    ("mathord" "\\smwhtsquare" 9643 "▫")
+    ("mathord" "\\spadesuit" 9824 "♠")
+    ("mathord" "\\sphericalangle" 8738 "∢")
+    ("mathord" "\\sphericalangleup" 10657 "⦡")
+    ("mathord" "\\sqlozenge" 8977 "⌑")
+    ("mathord" "\\sqrtbottom" 9143 "⎷")
+    ("mathord" "\\squarebotblack" 11027 "⬓")
+    ("mathord" "\\squarecrossfill" 9641 "▩")
+    ("mathord" "\\squarehfill" 9636 "▤")
+    ("mathord" "\\squarehvfill" 9638 "▦")
+    ("mathord" "\\squareleftblack" 9703 "◧")
+    ("mathord" "\\squarellblack" 11029 "⬕")
+    ("mathord" "\\squarellquad" 9713 "◱")
+    ("mathord" "\\squarelrblack" 9706 "◪")
+    ("mathord" "\\squarelrquad" 9714 "◲")
+    ("mathord" "\\squareneswfill" 9640 "▨")
+    ("mathord" "\\squarenwsefill" 9639 "▧")
+    ("mathord" "\\squarerightblack" 9704 "◨")
+    ("mathord" "\\squaretopblack" 11026 "⬒")
+    ("mathord" "\\squareulblack" 9705 "◩")
+    ("mathord" "\\squareulquad" 9712 "◰")
+    ("mathord" "\\squareurblack" 11028 "⬔")
+    ("mathord" "\\squareurquad" 9715 "◳")
+    ("mathord" "\\squarevfill" 9637 "▥")
+    ("mathord" "\\squoval" 9634 "▢")
+    ("mathord" "\\sterling" 163 "£")
+    ("mathord" "\\strns" 9188 "⏤")
+    ("mathord" "\\subsetcirc" 10179 "⟃")
+    ("mathord" "\\sumbottom" 9139 "⎳")
+    ("mathord" "\\sumtop" 9138 "⎲")
+    ("mathord" "\\sun" 9788 "☼")
+    ("mathord" "\\supsetcirc" 10180 "⟄")
+    ("mathord" "\\therefore" 8756 "∴")
+    ("mathord" "\\thermod" 10727 "⧧")
+    ("mathord" "\\threedangle" 10176 "⟀")
+    ("mathord" "\\tieinfty" 10717 "⧝")
+    ("mathord" "\\top" 8868 "⊤")
+    ("mathord" "\\topbot" 9014 "⌶")
+    ("mathord" "\\topcir" 10993 "⫱")
+    ("mathord" "\\topsemicircle" 9696 "◠")
+    ("mathord" "\\trapezium" 9186 "⏢")
+    ("mathord" "\\trianglecdot" 9708 "◬")
+    ("mathord" "\\triangleleftblack" 9709 "◭")
+    ("mathord" "\\triangleodot" 10698 "⧊")
+    ("mathord" "\\trianglerightblack" 9710 "◮")
+    ("mathord" "\\triangles" 10700 "⧌")
+    ("mathord" "\\triangleubar" 10699 "⧋")
+    ("mathord" "\\trprime" 8244 "‴")
+    ("mathord" "\\turnangle" 10658 "⦢")
+    ("mathord" "\\turnednot" 8985 "⌙")
+    ("mathord" "\\twolowline" 8215 "‗")
+    ("mathord" "\\twonotes" 9835 "♫")
+    ("mathord" "\\ubrbrak" 9185 "⏡")
+    ("mathord" "\\ularc" 9692 "◜")
+    ("mathord" "\\ulblacktriangle" 9700 "◤")
+    ("mathord" "\\ultriangle" 9720 "◸")
+    ("mathord" "\\unicodecdots" 8943 "⋯")
+    ("mathord" "\\unicodeellipsis" 8230 "…")
+    ("mathord" "\\uparrowoncircle" 10685 "⦽")
+    ("mathord" "\\upbackepsilon" 1014 "϶")
+    ("mathord" "\\updasharrow" 8673 "⇡")
+    ("mathord" "\\updownarrowbar" 8616 "↨")
+    ("mathord" "\\upoldKoppa" 984 "Ϙ")
+    ("mathord" "\\upoldkoppa" 985 "ϙ")
+    ("mathord" "\\uprightcurvearrow" 10548 "⤴")
+    ("mathord" "\\upwhitearrow" 8679 "⇧")
+    ("mathord" "\\urarc" 9693 "◝")
+    ("mathord" "\\urblacktriangle" 9701 "◥")
+    ("mathord" "\\urtriangle" 9721 "◹")
+    ("mathord" "\\varcarriagereturn" 9166 "⏎")
+    ("mathord" "\\varclubsuit" 9831 "♧")
+    ("mathord" "\\vardiamondsuit" 9830 "♦")
+    ("mathord" "\\varheartsuit" 9829 "♥")
+    ("mathord" "\\varhexagon" 11041 "⬡")
+    ("mathord" "\\varhexagonblack" 11042 "⬢")
+    ("mathord" "\\varhexagonlrbonds" 9004 "⌬")
+    ("mathord" "\\varlrtriangle" 8895 "⊿")
+    ("mathord" "\\varnothing" 8709 "∅")
+    ("mathord" "\\varspadesuit" 9828 "♤")
+    ("mathord" "\\varstar" 10038 "✶")
+    ("mathord" "\\vbraceextender" 9130 "⎪")
+    ("mathord" "\\viewdata" 8983 "⌗")
+    ("mathord" "\\vrectangle" 9647 "▯")
+    ("mathord" "\\vrectangleblack" 9646 "▮")
+    ("mathord" "\\vysmblksquare" 11037 "⬝")
+    ("mathord" "\\vysmwhtsquare" 11038 "⬞")
+    ("mathord" "\\vzigzag" 10650 "⦚")
+    ("mathord" "\\whitearrowupfrombar" 8682 "⇪")
+    ("mathord" "\\whiteinwhitetriangle" 10177 "⟁")
+    ("mathord" "\\whitepointerleft" 9669 "◅")
+    ("mathord" "\\whitepointerright" 9659 "▻")
+    ("mathord" "\\whthorzoval" 11053 "⬭")
+    ("mathord" "\\whtvertoval" 11055 "⬯")
+    ("mathord" "\\wideangledown" 10662 "⦦")
+    ("mathord" "\\wideangleup" 10663 "⦧")
+    ("mathord" "\\yen" 165 "¥")
+    ("mathover" "\\overbrace" 9182 "⏞")
+    ("mathover" "\\overbracket" 9140 "⎴")
+    ("mathover" "\\overparen" 9180 "⏜")
+    ("mathpunct" "\\comma" 44 ",")
+    ("mathpunct" "\\exclam" 33 "!")
+    ("mathpunct" "\\mathcolon" 58 ":")
+    ("mathpunct" "\\semicolon" 59 ";")
+    ("mathradical" "\\cuberoot" 8731 "∛")
+    ("mathradical" "\\fourthroot" 8732 "∜")
+    ("mathradical" "\\sqrt" 8730 "√")
+    ("mathrel" "\\APLnotslash" 9023 "⌿")
+    ("mathrel" "\\Barv" 10983 "⫧")
+    ("mathrel" "\\Bumpeq" 8782 "≎")
+    ("mathrel" "\\Colon" 8759 "∷")
+    ("mathrel" "\\Coloneq" 10868 "⩴")
+    ("mathrel" "\\DDownarrow" 10225 "⟱")
+    ("mathrel" "\\DashV" 10981 "⫥")
+    ("mathrel" "\\DashVDash" 10202 "⟚")
+    ("mathrel" "\\Dashv" 10980 "⫤")
+    ("mathrel" "\\Ddownarrow" 10507 "⤋")
+    ("mathrel" "\\Doteq" 8785 "≑")
+    ("mathrel" "\\Downarrow" 8659 "⇓")
+    ("mathrel" "\\Equiv" 8803 "≣")
+    ("mathrel" "\\Gt" 10914 "⪢")
+    ("mathrel" "\\LLeftarrow" 11077 "⭅")
+    ("mathrel" "\\Ldsh" 8626 "↲")
+    ("mathrel" "\\Leftarrow" 8656 "⇐")
+    ("mathrel" "\\Leftrightarrow" 8660 "⇔")
+    ("mathrel" "\\Lleftarrow" 8666 "⇚")
+    ("mathrel" "\\Longleftarrow" 10232 "⟸")
+    ("mathrel" "\\Longleftrightarrow" 10234 "⟺")
+    ("mathrel" "\\Longmapsfrom" 10237 "⟽")
+    ("mathrel" "\\Longmapsto" 10238 "⟾")
+    ("mathrel" "\\Longrightarrow" 10233 "⟹")
+    ("mathrel" "\\Lsh" 8624 "↰")
+    ("mathrel" "\\Lt" 10913 "⪡")
+    ("mathrel" "\\Mapsfrom" 10502 "⤆")
+    ("mathrel" "\\Mapsto" 10503 "⤇")
+    ("mathrel" "\\Nearrow" 8663 "⇗")
+    ("mathrel" "\\Not" 10988 "⫬")
+    ("mathrel" "\\Nwarrow" 8662 "⇖")
+    ("mathrel" "\\Prec" 10939 "⪻")
+    ("mathrel" "\\RRightarrow" 11078 "⭆")
+    ("mathrel" "\\Rdsh" 8627 "↳")
+    ("mathrel" "\\Rightarrow" 8658 "⇒")
+    ("mathrel" "\\Rrightarrow" 8667 "⇛")
+    ("mathrel" "\\Rsh" 8625 "↱")
+    ("mathrel" "\\Searrow" 8664 "⇘")
+    ("mathrel" "\\Subset" 8912 "⋐")
+    ("mathrel" "\\Succ" 10940 "⪼")
+    ("mathrel" "\\Supset" 8913 "⋑")
+    ("mathrel" "\\Swarrow" 8665 "⇙")
+    ("mathrel" "\\UUparrow" 10224 "⟰")
+    ("mathrel" "\\Uparrow" 8657 "⇑")
+    ("mathrel" "\\Updownarrow" 8661 "⇕")
+    ("mathrel" "\\Uuparrow" 10506 "⤊")
+    ("mathrel" "\\VDash" 8875 "⊫")
+    ("mathrel" "\\Vbar" 10987 "⫫")
+    ("mathrel" "\\Vdash" 8873 "⊩")
+    ("mathrel" "\\Vvdash" 8874 "⊪")
+    ("mathrel" "\\acwcirclearrow" 10560 "⥀")
+    ("mathrel" "\\acwgapcirclearrow" 10226 "⟲")
+    ("mathrel" "\\acwleftarcarrow" 10553 "⤹")
+    ("mathrel" "\\acwoverarcarrow" 10554 "⤺")
+    ("mathrel" "\\acwunderarcarrow" 10555 "⤻")
+    ("mathrel" "\\adots" 8944 "⋰")
+    ("mathrel" "\\approx" 8776 "≈")
+    ("mathrel" "\\approxeq" 8778 "≊")
+    ("mathrel" "\\approxeqq" 10864 "⩰")
+    ("mathrel" "\\approxident" 8779 "≋")
+    ("mathrel" "\\arceq" 8792 "≘")
+    ("mathrel" "\\assert" 8870 "⊦")
+    ("mathrel" "\\asteq" 10862 "⩮")
+    ("mathrel" "\\asymp" 8781 "≍")
+    ("mathrel" "\\bNot" 10989 "⫭")
+    ("mathrel" "\\backcong" 8780 "≌")
+    ("mathrel" "\\backsim" 8765 "∽")
+    ("mathrel" "\\backsimeq" 8909 "⋍")
+    ("mathrel" "\\bagmember" 8959 "⋿")
+    ("mathrel" "\\barV" 10986 "⫪")
+    ("mathrel" "\\bardownharpoonleft" 10593 "⥡")
+    ("mathrel" "\\bardownharpoonright" 10589 "⥝")
+    ("mathrel" "\\barleftarrow" 8676 "⇤")
+    ("mathrel" "\\barleftharpoondown" 10582 "⥖")
+    ("mathrel" "\\barleftharpoonup" 10578 "⥒")
+    ("mathrel" "\\barrightarrowdiamond" 10528 "⤠")
+    ("mathrel" "\\barrightharpoondown" 10591 "⥟")
+    ("mathrel" "\\barrightharpoonup" 10587 "⥛")
+    ("mathrel" "\\baruparrow" 10514 "⤒")
+    ("mathrel" "\\barupharpoonleft" 10584 "⥘")
+    ("mathrel" "\\barupharpoonright" 10580 "⥔")
+    ("mathrel" "\\between" 8812 "≬")
+    ("mathrel" "\\bowtie" 8904 "⋈")
+    ("mathrel" "\\bsimilarleftarrow" 11073 "⭁")
+    ("mathrel" "\\bsimilarrightarrow" 11079 "⭇")
+    ("mathrel" "\\bsolhsub" 10184 "⟈")
+    ("mathrel" "\\bumpeq" 8783 "≏")
+    ("mathrel" "\\bumpeqq" 10926 "⪮")
+    ("mathrel" "\\ccwundercurvearrow" 10559 "⤿")
+    ("mathrel" "\\cirbot" 10207 "⟟")
+    ("mathrel" "\\circeq" 8791 "≗")
+    ("mathrel" "\\circleonleftarrow" 11056 "⬰")
+    ("mathrel" "\\circleonrightarrow" 8692 "⇴")
+    ("mathrel" "\\cirmid" 10991 "⫯")
+    ("mathrel" "\\closure" 8272 "⁐")
+    ("mathrel" "\\coloneq" 8788 "≔")
+    ("mathrel" "\\cong" 8773 "≅")
+    ("mathrel" "\\congdot" 10861 "⩭")
+    ("mathrel" "\\csub" 10959 "⫏")
+    ("mathrel" "\\csube" 10961 "⫑")
+    ("mathrel" "\\csup" 10960 "⫐")
+    ("mathrel" "\\csupe" 10962 "⫒")
+    ("mathrel" "\\curlyeqprec" 8926 "⋞")
+    ("mathrel" "\\curlyeqsucc" 8927 "⋟")
+    ("mathrel" "\\curvearrowleft" 8630 "↶")
+    ("mathrel" "\\curvearrowleftplus" 10557 "⤽")
+    ("mathrel" "\\curvearrowright" 8631 "↷")
+    ("mathrel" "\\curvearrowrightminus" 10556 "⤼")
+    ("mathrel" "\\cwcirclearrow" 10561 "⥁")
+    ("mathrel" "\\cwgapcirclearrow" 10227 "⟳")
+    ("mathrel" "\\cwrightarcarrow" 10552 "⤸")
+    ("mathrel" "\\cwundercurvearrow" 10558 "⤾")
+    ("mathrel" "\\dashV" 10979 "⫣")
+    ("mathrel" "\\dashVdash" 10203 "⟛")
+    ("mathrel" "\\dashcolon" 8761 "∹")
+    ("mathrel" "\\dashleftharpoondown" 10603 "⥫")
+    ("mathrel" "\\dashrightharpoondown" 10605 "⥭")
+    ("mathrel" "\\dashv" 8867 "⊣")
+    ("mathrel" "\\dbkarow" 10511 "⤏")
+    ("mathrel" "\\ddots" 8945 "⋱")
+    ("mathrel" "\\ddotseq" 10871 "⩷")
+    ("mathrel" "\\diamondleftarrow" 10525 "⤝")
+    ("mathrel" "\\diamondleftarrowbar" 10527 "⤟")
+    ("mathrel" "\\disin" 8946 "⋲")
+    ("mathrel" "\\doteq" 8784 "≐")
+    ("mathrel" "\\dotequiv" 10855 "⩧")
+    ("mathrel" "\\dotsim" 10858 "⩪")
+    ("mathrel" "\\dotsminusdots" 8762 "∺")
+    ("mathrel" "\\downarrow" 8595 "↓")
+    ("mathrel" "\\downarrowbar" 10515 "⤓")
+    ("mathrel" "\\downarrowbarred" 10504 "⤈")
+    ("mathrel" "\\downdownarrows" 8650 "⇊")
+    ("mathrel" "\\downfishtail" 10623 "⥿")
+    ("mathrel" "\\downharpoonleft" 8643 "⇃")
+    ("mathrel" "\\downharpoonleftbar" 10585 "⥙")
+    ("mathrel" "\\downharpoonright" 8642 "⇂")
+    ("mathrel" "\\downharpoonrightbar" 10581 "⥕")
+    ("mathrel" "\\downharpoonsleftright" 10597 "⥥")
+    ("mathrel" "\\downuparrows" 8693 "⇵")
+    ("mathrel" "\\downupharpoonsleftright" 10607 "⥯")
+    ("mathrel" "\\downzigzagarrow" 8623 "↯")
+    ("mathrel" "\\drbkarow" 10512 "⤐")
+    ("mathrel" "\\dualmap" 10719 "⧟")
+    ("mathrel" "\\egsdot" 10904 "⪘")
+    ("mathrel" "\\elsdot" 10903 "⪗")
+    ("mathrel" "\\eparsl" 10723 "⧣")
+    ("mathrel" "\\eqcirc" 8790 "≖")
+    ("mathrel" "\\eqcolon" 8789 "≕")
+    ("mathrel" "\\eqdef" 8797 "≝")
+    ("mathrel" "\\eqdot" 10854 "⩦")
+    ("mathrel" "\\eqeq" 10869 "⩵")
+    ("mathrel" "\\eqeqeq" 10870 "⩶")
+    ("mathrel" "\\eqgtr" 8925 "⋝")
+    ("mathrel" "\\eqless" 8924 "⋜")
+    ("mathrel" "\\eqqgtr" 10906 "⪚")
+    ("mathrel" "\\eqqless" 10905 "⪙")
+    ("mathrel" "\\eqqsim" 10867 "⩳")
+    ("mathrel" "\\eqqslantgtr" 10908 "⪜")
+    ("mathrel" "\\eqqslantless" 10907 "⪛")
+    ("mathrel" "\\eqsim" 8770 "≂")
+    ("mathrel" "\\eqslantgtr" 10902 "⪖")
+    ("mathrel" "\\eqslantless" 10901 "⪕")
+    ("mathrel" "\\equal" 61 "=")
+    ("mathrel" "\\equalleftarrow" 11072 "⭀")
+    ("mathrel" "\\equalparallel" 8917 "⋕")
+    ("mathrel" "\\equalrightarrow" 10609 "⥱")
+    ("mathrel" "\\equiv" 8801 "≡")
+    ("mathrel" "\\equivDD" 10872 "⩸")
+    ("mathrel" "\\equivVert" 10856 "⩨")
+    ("mathrel" "\\equivVvert" 10857 "⩩")
+    ("mathrel" "\\eqvparsl" 10725 "⧥")
+    ("mathrel" "\\fallingdotseq" 8786 "≒")
+    ("mathrel" "\\fbowtie" 10707 "⧓")
+    ("mathrel" "\\forks" 10972 "⫝̸")
+    ("mathrel" "\\forksnot" 10973 "⫝")
+    ("mathrel" "\\forkv" 10969 "⫙")
+    ("mathrel" "\\frown" 8994 "⌢")
+    ("mathrel" "\\geq" 8805 "≥")
+    ("mathrel" "\\geqq" 8807 "≧")
+    ("mathrel" "\\geqqslant" 11002 "⫺")
+    ("mathrel" "\\geqslant" 10878 "⩾")
+    ("mathrel" "\\gescc" 10921 "⪩")
+    ("mathrel" "\\gesdot" 10880 "⪀")
+    ("mathrel" "\\gesdoto" 10882 "⪂")
+    ("mathrel" "\\gesdotol" 10884 "⪄")
+    ("mathrel" "\\gesles" 10900 "⪔")
+    ("mathrel" "\\gg" 8811 "≫")
+    ("mathrel" "\\ggg" 8921 "⋙")
+    ("mathrel" "\\gggnest" 11000 "⫸")
+    ("mathrel" "\\glE" 10898 "⪒")
+    ("mathrel" "\\gla" 10917 "⪥")
+    ("mathrel" "\\gleichstark" 10726 "⧦")
+    ("mathrel" "\\glj" 10916 "⪤")
+    ("mathrel" "\\gnapprox" 10890 "⪊")
+    ("mathrel" "\\gneq" 10888 "⪈")
+    ("mathrel" "\\gneqq" 8809 "≩")
+    ("mathrel" "\\gnsim" 8935 "⋧")
+    ("mathrel" "\\greater" 62 ">")
+    ("mathrel" "\\gsime" 10894 "⪎")
+    ("mathrel" "\\gsiml" 10896 "⪐")
+    ("mathrel" "\\gtcc" 10919 "⪧")
+    ("mathrel" "\\gtcir" 10874 "⩺")
+    ("mathrel" "\\gtquest" 10876 "⩼")
+    ("mathrel" "\\gtrapprox" 10886 "⪆")
+    ("mathrel" "\\gtrarr" 10616 "⥸")
+    ("mathrel" "\\gtrdot" 8919 "⋗")
+    ("mathrel" "\\gtreqless" 8923 "⋛")
+    ("mathrel" "\\gtreqqless" 10892 "⪌")
+    ("mathrel" "\\gtrless" 8823 "≷")
+    ("mathrel" "\\gtrsim" 8819 "≳")
+    ("mathrel" "\\hatapprox" 10863 "⩯")
+    ("mathrel" "\\hknearrow" 10532 "⤤")
+    ("mathrel" "\\hknwarrow" 10531 "⤣")
+    ("mathrel" "\\hksearow" 10533 "⤥")
+    ("mathrel" "\\hkswarow" 10534 "⤦")
+    ("mathrel" "\\hookleftarrow" 8617 "↩")
+    ("mathrel" "\\hookrightarrow" 8618 "↪")
+    ("mathrel" "\\imageof" 8887 "⊷")
+    ("mathrel" "\\in" 8712 "∈")
+    ("mathrel" "\\isinE" 8953 "⋹")
+    ("mathrel" "\\isindot" 8949 "⋵")
+    ("mathrel" "\\isinobar" 8951 "⋷")
+    ("mathrel" "\\isins" 8948 "⋴")
+    ("mathrel" "\\isinvb" 8952 "⋸")
+    ("mathrel" "\\kernelcontraction" 8763 "∻")
+    ("mathrel" "\\lat" 10923 "⪫")
+    ("mathrel" "\\late" 10925 "⪭")
+    ("mathrel" "\\leftarrow" 8592 "←")
+    ("mathrel" "\\leftarrowapprox" 11082 "⭊")
+    ("mathrel" "\\leftarrowbackapprox" 11074 "⭂")
+    ("mathrel" "\\leftarrowbsimilar" 11083 "⭋")
+    ("mathrel" "\\leftarrowless" 10615 "⥷")
+    ("mathrel" "\\leftarrowonoplus" 11058 "⬲")
+    ("mathrel" "\\leftarrowplus" 10566 "⥆")
+    ("mathrel" "\\leftarrowshortrightarrow" 10563 "⥃")
+    ("mathrel" "\\leftarrowsimilar" 10611 "⥳")
+    ("mathrel" "\\leftarrowsubset" 10618 "⥺")
+    ("mathrel" "\\leftarrowtail" 8610 "↢")
+    ("mathrel" "\\leftarrowtriangle" 8701 "⇽")
+    ("mathrel" "\\leftarrowx" 11070 "⬾")
+    ("mathrel" "\\leftbkarrow" 10508 "⤌")
+    ("mathrel" "\\leftcurvedarrow" 11071 "⬿")
+    ("mathrel" "\\leftdbkarrow" 10510 "⤎")
+    ("mathrel" "\\leftdbltail" 10523 "⤛")
+    ("mathrel" "\\leftdotarrow" 11064 "⬸")
+    ("mathrel" "\\leftdowncurvedarrow" 10550 "⤶")
+    ("mathrel" "\\leftfishtail" 10620 "⥼")
+    ("mathrel" "\\leftharpoondown" 8637 "↽")
+    ("mathrel" "\\leftharpoondownbar" 10590 "⥞")
+    ("mathrel" "\\leftharpoonsupdown" 10594 "⥢")
+    ("mathrel" "\\leftharpoonup" 8636 "↼")
+    ("mathrel" "\\leftharpoonupbar" 10586 "⥚")
+    ("mathrel" "\\leftharpoonupdash" 10602 "⥪")
+    ("mathrel" "\\leftleftarrows" 8647 "⇇")
+    ("mathrel" "\\leftrightarrow" 8596 "↔")
+    ("mathrel" "\\leftrightarrowcircle" 10568 "⥈")
+    ("mathrel" "\\leftrightarrows" 8646 "⇆")
+    ("mathrel" "\\leftrightarrowtriangle" 8703 "⇿")
+    ("mathrel" "\\leftrightharpoondowndown" 10576 "⥐")
+    ("mathrel" "\\leftrightharpoondownup" 10571 "⥋")
+    ("mathrel" "\\leftrightharpoons" 8651 "⇋")
+    ("mathrel" "\\leftrightharpoonsdown" 10599 "⥧")
+    ("mathrel" "\\leftrightharpoonsup" 10598 "⥦")
+    ("mathrel" "\\leftrightharpoonupdown" 10570 "⥊")
+    ("mathrel" "\\leftrightharpoonupup" 10574 "⥎")
+    ("mathrel" "\\leftrightsquigarrow" 8621 "↭")
+    ("mathrel" "\\leftsquigarrow" 8668 "⇜")
+    ("mathrel" "\\lefttail" 10521 "⤙")
+    ("mathrel" "\\leftthreearrows" 11057 "⬱")
+    ("mathrel" "\\leftwavearrow" 8604 "↜")
+    ("mathrel" "\\leq" 8804 "≤")
+    ("mathrel" "\\leqq" 8806 "≦")
+    ("mathrel" "\\leqqslant" 11001 "⫹")
+    ("mathrel" "\\leqslant" 10877 "⩽")
+    ("mathrel" "\\lescc" 10920 "⪨")
+    ("mathrel" "\\lesdot" 10879 "⩿")
+    ("mathrel" "\\lesdoto" 10881 "⪁")
+    ("mathrel" "\\lesdotor" 10883 "⪃")
+    ("mathrel" "\\lesges" 10899 "⪓")
+    ("mathrel" "\\less" 60 "<")
+    ("mathrel" "\\lessapprox" 10885 "⪅")
+    ("mathrel" "\\lessdot" 8918 "⋖")
+    ("mathrel" "\\lesseqgtr" 8922 "⋚")
+    ("mathrel" "\\lesseqqgtr" 10891 "⪋")
+    ("mathrel" "\\lessgtr" 8822 "≶")
+    ("mathrel" "\\lesssim" 8818 "≲")
+    ("mathrel" "\\lfbowtie" 10705 "⧑")
+    ("mathrel" "\\lftimes" 10708 "⧔")
+    ("mathrel" "\\lgE" 10897 "⪑")
+    ("mathrel" "\\ll" 8810 "≪")
+    ("mathrel" "\\lll" 8920 "⋘")
+    ("mathrel" "\\lllnest" 10999 "⫷")
+    ("mathrel" "\\lnapprox" 10889 "⪉")
+    ("mathrel" "\\lneq" 10887 "⪇")
+    ("mathrel" "\\lneqq" 8808 "≨")
+    ("mathrel" "\\lnsim" 8934 "⋦")
+    ("mathrel" "\\longdashv" 10206 "⟞")
+    ("mathrel" "\\longleftarrow" 10229 "⟵")
+    ("mathrel" "\\longleftrightarrow" 10231 "⟷")
+    ("mathrel" "\\longleftsquigarrow" 11059 "⬳")
+    ("mathrel" "\\longmapsfrom" 10235 "⟻")
+    ("mathrel" "\\longmapsto" 10236 "⟼")
+    ("mathrel" "\\longrightarrow" 10230 "⟶")
+    ("mathrel" "\\longrightsquigarrow" 10239 "⟿")
+    ("mathrel" "\\looparrowleft" 8619 "↫")
+    ("mathrel" "\\looparrowright" 8620 "↬")
+    ("mathrel" "\\lrtriangleeq" 10721 "⧡")
+    ("mathrel" "\\lsime" 10893 "⪍")
+    ("mathrel" "\\lsimg" 10895 "⪏")
+    ("mathrel" "\\lsqhook" 10957 "⫍")
+    ("mathrel" "\\ltcc" 10918 "⪦")
+    ("mathrel" "\\ltcir" 10873 "⩹")
+    ("mathrel" "\\ltlarr" 10614 "⥶")
+    ("mathrel" "\\ltquest" 10875 "⩻")
+    ("mathrel" "\\ltrivb" 10703 "⧏")
+    ("mathrel" "\\mapsdown" 8615 "↧")
+    ("mathrel" "\\mapsfrom" 8612 "↤")
+    ("mathrel" "\\mapsto" 8614 "↦")
+    ("mathrel" "\\mapsup" 8613 "↥")
+    ("mathrel" "\\mathratio" 8758 "∶")
+    ("mathrel" "\\measeq" 8798 "≞")
+    ("mathrel" "\\mid" 8739 "∣")
+    ("mathrel" "\\midcir" 10992 "⫰")
+    ("mathrel" "\\mlcp" 10971 "⫛")
+    ("mathrel" "\\models" 8871 "⊧")
+    ("mathrel" "\\multimap" 8888 "⊸")
+    ("mathrel" "\\multimapinv" 10204 "⟜")
+    ("mathrel" "\\nLeftarrow" 8653 "⇍")
+    ("mathrel" "\\nLeftrightarrow" 8654 "⇎")
+    ("mathrel" "\\nRightarrow" 8655 "⇏")
+    ("mathrel" "\\nVDash" 8879 "⊯")
+    ("mathrel" "\\nVdash" 8878 "⊮")
+    ("mathrel" "\\nVleftarrow" 8698 "⇺")
+    ("mathrel" "\\nVleftarrowtail" 11066 "⬺")
+    ("mathrel" "\\nVleftrightarrow" 8700 "⇼")
+    ("mathrel" "\\nVrightarrow" 8699 "⇻")
+    ("mathrel" "\\nVrightarrowtail" 10517 "⤕")
+    ("mathrel" "\\nVtwoheadleftarrow" 11061 "⬵")
+    ("mathrel" "\\nVtwoheadleftarrowtail" 11069 "⬽")
+    ("mathrel" "\\nVtwoheadrightarrow" 10497 "⤁")
+    ("mathrel" "\\nVtwoheadrightarrowtail" 10520 "⤘")
+    ("mathrel" "\\napprox" 8777 "≉")
+    ("mathrel" "\\nasymp" 8813 "≭")
+    ("mathrel" "\\ncong" 8775 "≇")
+    ("mathrel" "\\ne" 8800 "≠")
+    ("mathrel" "\\nearrow" 8599 "↗")
+    ("mathrel" "\\nequiv" 8802 "≢")
+    ("mathrel" "\\neswarrow" 10530 "⤢")
+    ("mathrel" "\\ngeq" 8817 "≱")
+    ("mathrel" "\\ngtr" 8815 "≯")
+    ("mathrel" "\\ngtrless" 8825 "≹")
+    ("mathrel" "\\ngtrsim" 8821 "≵")
+    ("mathrel" "\\nhpar" 10994 "⫲")
+    ("mathrel" "\\ni" 8715 "∋")
+    ("mathrel" "\\niobar" 8958 "⋾")
+    ("mathrel" "\\nis" 8956 "⋼")
+    ("mathrel" "\\nisd" 8954 "⋺")
+    ("mathrel" "\\nleftarrow" 8602 "↚")
+    ("mathrel" "\\nleftrightarrow" 8622 "↮")
+    ("mathrel" "\\nleq" 8816 "≰")
+    ("mathrel" "\\nless" 8814 "≮")
+    ("mathrel" "\\nlessgtr" 8824 "≸")
+    ("mathrel" "\\nlesssim" 8820 "≴")
+    ("mathrel" "\\nmid" 8740 "∤")
+    ("mathrel" "\\nni" 8716 "∌")
+    ("mathrel" "\\notin" 8713 "∉")
+    ("mathrel" "\\nparallel" 8742 "∦")
+    ("mathrel" "\\nprec" 8832 "⊀")
+    ("mathrel" "\\npreccurlyeq" 8928 "⋠")
+    ("mathrel" "\\nrightarrow" 8603 "↛")
+    ("mathrel" "\\nsim" 8769 "≁")
+    ("mathrel" "\\nsime" 8772 "≄")
+    ("mathrel" "\\nsqsubseteq" 8930 "⋢")
+    ("mathrel" "\\nsqsupseteq" 8931 "⋣")
+    ("mathrel" "\\nsubset" 8836 "⊄")
+    ("mathrel" "\\nsubseteq" 8840 "⊈")
+    ("mathrel" "\\nsucc" 8833 "⊁")
+    ("mathrel" "\\nsucccurlyeq" 8929 "⋡")
+    ("mathrel" "\\nsupset" 8837 "⊅")
+    ("mathrel" "\\nsupseteq" 8841 "⊉")
+    ("mathrel" "\\ntriangleleft" 8938 "⋪")
+    ("mathrel" "\\ntrianglelefteq" 8940 "⋬")
+    ("mathrel" "\\ntriangleright" 8939 "⋫")
+    ("mathrel" "\\ntrianglerighteq" 8941 "⋭")
+    ("mathrel" "\\nvDash" 8877 "⊭")
+    ("mathrel" "\\nvLeftarrow" 10498 "⤂")
+    ("mathrel" "\\nvLeftrightarrow" 10500 "⤄")
+    ("mathrel" "\\nvRightarrow" 10499 "⤃")
+    ("mathrel" "\\nvdash" 8876 "⊬")
+    ("mathrel" "\\nvleftarrow" 8695 "⇷")
+    ("mathrel" "\\nvleftarrowtail" 11065 "⬹")
+    ("mathrel" "\\nvleftrightarrow" 8697 "⇹")
+    ("mathrel" "\\nvrightarrow" 8696 "⇸")
+    ("mathrel" "\\nvrightarrowtail" 10516 "⤔")
+    ("mathrel" "\\nvtwoheadleftarrow" 11060 "⬴")
+    ("mathrel" "\\nvtwoheadleftarrowtail" 11068 "⬼")
+    ("mathrel" "\\nvtwoheadrightarrow" 10496 "⤀")
+    ("mathrel" "\\nvtwoheadrightarrowtail" 10519 "⤗")
+    ("mathrel" "\\nwarrow" 8598 "↖")
+    ("mathrel" "\\nwsearrow" 10529 "⤡")
+    ("mathrel" "\\origof" 8886 "⊶")
+    ("mathrel" "\\parallel" 8741 "∥")
+    ("mathrel" "\\parsim" 10995 "⫳")
+    ("mathrel" "\\partialmeetcontraction" 10915 "⪣")
+    ("mathrel" "\\perp" 10178 "⟂")
+    ("mathrel" "\\pitchfork" 8916 "⋔")
+    ("mathrel" "\\prec" 8826 "≺")
+    ("mathrel" "\\precapprox" 10935 "⪷")
+    ("mathrel" "\\preccurlyeq" 8828 "≼")
+    ("mathrel" "\\preceq" 10927 "⪯")
+    ("mathrel" "\\preceqq" 10931 "⪳")
+    ("mathrel" "\\precnapprox" 10937 "⪹")
+    ("mathrel" "\\precneq" 10929 "⪱")
+    ("mathrel" "\\precneqq" 10933 "⪵")
+    ("mathrel" "\\precnsim" 8936 "⋨")
+    ("mathrel" "\\precsim" 8830 "≾")
+    ("mathrel" "\\propto" 8733 "∝")
+    ("mathrel" "\\prurel" 8880 "⊰")
+    ("mathrel" "\\pullback" 10195 "⟓")
+    ("mathrel" "\\pushout" 10196 "⟔")
+    ("mathrel" "\\questeq" 8799 "≟")
+    ("mathrel" "\\revnmid" 10990 "⫮")
+    ("mathrel" "\\rfbowtie" 10706 "⧒")
+    ("mathrel" "\\rftimes" 10709 "⧕")
+    ("mathrel" "\\rightarrow" 8594 "→")
+    ("mathrel" "\\rightarrowapprox" 10613 "⥵")
+    ("mathrel" "\\rightarrowbackapprox" 11080 "⭈")
+    ("mathrel" "\\rightarrowbar" 8677 "⇥")
+    ("mathrel" "\\rightarrowbsimilar" 11084 "⭌")
+    ("mathrel" "\\rightarrowdiamond" 10526 "⤞")
+    ("mathrel" "\\rightarrowgtr" 11075 "⭃")
+    ("mathrel" "\\rightarrowonoplus" 10228 "⟴")
+    ("mathrel" "\\rightarrowplus" 10565 "⥅")
+    ("mathrel" "\\rightarrowshortleftarrow" 10562 "⥂")
+    ("mathrel" "\\rightarrowsimilar" 10612 "⥴")
+    ("mathrel" "\\rightarrowsupset" 11076 "⭄")
+    ("mathrel" "\\rightarrowtail" 8611 "↣")
+    ("mathrel" "\\rightarrowtriangle" 8702 "⇾")
+    ("mathrel" "\\rightarrowx" 10567 "⥇")
+    ("mathrel" "\\rightbkarrow" 10509 "⤍")
+    ("mathrel" "\\rightcurvedarrow" 10547 "⤳")
+    ("mathrel" "\\rightdbltail" 10524 "⤜")
+    ("mathrel" "\\rightdotarrow" 10513 "⤑")
+    ("mathrel" "\\rightdowncurvedarrow" 10551 "⤷")
+    ("mathrel" "\\rightfishtail" 10621 "⥽")
+    ("mathrel" "\\rightharpoondown" 8641 "⇁")
+    ("mathrel" "\\rightharpoondownbar" 10583 "⥗")
+    ("mathrel" "\\rightharpoonsupdown" 10596 "⥤")
+    ("mathrel" "\\rightharpoonup" 8640 "⇀")
+    ("mathrel" "\\rightharpoonupbar" 10579 "⥓")
+    ("mathrel" "\\rightharpoonupdash" 10604 "⥬")
+    ("mathrel" "\\rightimply" 10608 "⥰")
+    ("mathrel" "\\rightleftarrows" 8644 "⇄")
+    ("mathrel" "\\rightleftharpoons" 8652 "⇌")
+    ("mathrel" "\\rightleftharpoonsdown" 10601 "⥩")
+    ("mathrel" "\\rightleftharpoonsup" 10600 "⥨")
+    ("mathrel" "\\rightrightarrows" 8649 "⇉")
+    ("mathrel" "\\rightsquigarrow" 8669 "⇝")
+    ("mathrel" "\\righttail" 10522 "⤚")
+    ("mathrel" "\\rightthreearrows" 8694 "⇶")
+    ("mathrel" "\\rightwavearrow" 8605 "↝")
+    ("mathrel" "\\risingdotseq" 8787 "≓")
+    ("mathrel" "\\rsqhook" 10958 "⫎")
+    ("mathrel" "\\rtriltri" 10702 "⧎")
+    ("mathrel" "\\ruledelayed" 10740 "⧴")
+    ("mathrel" "\\scurel" 8881 "⊱")
+    ("mathrel" "\\searrow" 8600 "↘")
+    ("mathrel" "\\shortdowntack" 10975 "⫟")
+    ("mathrel" "\\shortlefttack" 10974 "⫞")
+    ("mathrel" "\\shortrightarrowleftarrow" 10564 "⥄")
+    ("mathrel" "\\shortuptack" 10976 "⫠")
+    ("mathrel" "\\sim" 8764 "∼")
+    ("mathrel" "\\simeq" 8771 "≃")
+    ("mathrel" "\\simgE" 10912 "⪠")
+    ("mathrel" "\\simgtr" 10910 "⪞")
+    ("mathrel" "\\similarleftarrow" 11081 "⭉")
+    ("mathrel" "\\similarrightarrow" 10610 "⥲")
+    ("mathrel" "\\simlE" 10911 "⪟")
+    ("mathrel" "\\simless" 10909 "⪝")
+    ("mathrel" "\\simminussim" 10860 "⩬")
+    ("mathrel" "\\simneqq" 8774 "≆")
+    ("mathrel" "\\simrdots" 10859 "⩫")
+    ("mathrel" "\\smallin" 8714 "∊")
+    ("mathrel" "\\smallni" 8717 "∍")
+    ("mathrel" "\\smeparsl" 10724 "⧤")
+    ("mathrel" "\\smile" 8995 "⌣")
+    ("mathrel" "\\smt" 10922 "⪪")
+    ("mathrel" "\\smte" 10924 "⪬")
+    ("mathrel" "\\sqsubset" 8847 "⊏")
+    ("mathrel" "\\sqsubseteq" 8849 "⊑")
+    ("mathrel" "\\sqsubsetneq" 8932 "⋤")
+    ("mathrel" "\\sqsupset" 8848 "⊐")
+    ("mathrel" "\\sqsupseteq" 8850 "⊒")
+    ("mathrel" "\\sqsupsetneq" 8933 "⋥")
+    ("mathrel" "\\stareq" 8795 "≛")
+    ("mathrel" "\\subedot" 10947 "⫃")
+    ("mathrel" "\\submult" 10945 "⫁")
+    ("mathrel" "\\subrarr" 10617 "⥹")
+    ("mathrel" "\\subset" 8834 "⊂")
+    ("mathrel" "\\subsetapprox" 10953 "⫉")
+    ("mathrel" "\\subsetdot" 10941 "⪽")
+    ("mathrel" "\\subseteq" 8838 "⊆")
+    ("mathrel" "\\subseteqq" 10949 "⫅")
+    ("mathrel" "\\subsetneq" 8842 "⊊")
+    ("mathrel" "\\subsetneqq" 10955 "⫋")
+    ("mathrel" "\\subsetplus" 10943 "⪿")
+    ("mathrel" "\\subsim" 10951 "⫇")
+    ("mathrel" "\\subsub" 10965 "⫕")
+    ("mathrel" "\\subsup" 10963 "⫓")
+    ("mathrel" "\\succ" 8827 "≻")
+    ("mathrel" "\\succapprox" 10936 "⪸")
+    ("mathrel" "\\succcurlyeq" 8829 "≽")
+    ("mathrel" "\\succeq" 10928 "⪰")
+    ("mathrel" "\\succeqq" 10932 "⪴")
+    ("mathrel" "\\succnapprox" 10938 "⪺")
+    ("mathrel" "\\succneq" 10930 "⪲")
+    ("mathrel" "\\succneqq" 10934 "⪶")
+    ("mathrel" "\\succnsim" 8937 "⋩")
+    ("mathrel" "\\succsim" 8831 "≿")
+    ("mathrel" "\\supdsub" 10968 "⫘")
+    ("mathrel" "\\supedot" 10948 "⫄")
+    ("mathrel" "\\suphsol" 10185 "⟉")
+    ("mathrel" "\\suphsub" 10967 "⫗")
+    ("mathrel" "\\suplarr" 10619 "⥻")
+    ("mathrel" "\\supmult" 10946 "⫂")
+    ("mathrel" "\\supset" 8835 "⊃")
+    ("mathrel" "\\supsetapprox" 10954 "⫊")
+    ("mathrel" "\\supsetdot" 10942 "⪾")
+    ("mathrel" "\\supseteq" 8839 "⊇")
+    ("mathrel" "\\supseteqq" 10950 "⫆")
+    ("mathrel" "\\supsetneq" 8843 "⊋")
+    ("mathrel" "\\supsetneqq" 10956 "⫌")
+    ("mathrel" "\\supsetplus" 10944 "⫀")
+    ("mathrel" "\\supsim" 10952 "⫈")
+    ("mathrel" "\\supsub" 10964 "⫔")
+    ("mathrel" "\\supsup" 10966 "⫖")
+    ("mathrel" "\\swarrow" 8601 "↙")
+    ("mathrel" "\\toea" 10536 "⤨")
+    ("mathrel" "\\tona" 10535 "⤧")
+    ("mathrel" "\\topfork" 10970 "⫚")
+    ("mathrel" "\\tosa" 10537 "⤩")
+    ("mathrel" "\\towa" 10538 "⤪")
+    ("mathrel" "\\trianglelefteq" 8884 "⊴")
+    ("mathrel" "\\triangleq" 8796 "≜")
+    ("mathrel" "\\trianglerighteq" 8885 "⊵")
+    ("mathrel" "\\twoheaddownarrow" 8609 "↡")
+    ("mathrel" "\\twoheadleftarrow" 8606 "↞")
+    ("mathrel" "\\twoheadleftarrowtail" 11067 "⬻")
+    ("mathrel" "\\twoheadleftdbkarrow" 11063 "⬷")
+    ("mathrel" "\\twoheadmapsfrom" 11062 "⬶")
+    ("mathrel" "\\twoheadmapsto" 10501 "⤅")
+    ("mathrel" "\\twoheadrightarrow" 8608 "↠")
+    ("mathrel" "\\twoheadrightarrowtail" 10518 "⤖")
+    ("mathrel" "\\twoheaduparrow" 8607 "↟")
+    ("mathrel" "\\twoheaduparrowcircle" 10569 "⥉")
+    ("mathrel" "\\uparrow" 8593 "↑")
+    ("mathrel" "\\uparrowbarred" 10505 "⤉")
+    ("mathrel" "\\updownarrow" 8597 "↕")
+    ("mathrel" "\\updownarrows" 8645 "⇅")
+    ("mathrel" "\\updownharpoonleftleft" 10577 "⥑")
+    ("mathrel" "\\updownharpoonleftright" 10573 "⥍")
+    ("mathrel" "\\updownharpoonrightleft" 10572 "⥌")
+    ("mathrel" "\\updownharpoonrightright" 10575 "⥏")
+    ("mathrel" "\\updownharpoonsleftright" 10606 "⥮")
+    ("mathrel" "\\upfishtail" 10622 "⥾")
+    ("mathrel" "\\upharpoonleft" 8639 "↿")
+    ("mathrel" "\\upharpoonleftbar" 10592 "⥠")
+    ("mathrel" "\\upharpoonright" 8638 "↾")
+    ("mathrel" "\\upharpoonrightbar" 10588 "⥜")
+    ("mathrel" "\\upharpoonsleftright" 10595 "⥣")
+    ("mathrel" "\\upin" 10194 "⟒")
+    ("mathrel" "\\upuparrows" 8648 "⇈")
+    ("mathrel" "\\vBar" 10984 "⫨")
+    ("mathrel" "\\vBarv" 10985 "⫩")
+    ("mathrel" "\\vDash" 8872 "⊨")
+    ("mathrel" "\\vDdash" 10978 "⫢")
+    ("mathrel" "\\varVdash" 10982 "⫦")
+    ("mathrel" "\\varisinobar" 8950 "⋶")
+    ("mathrel" "\\varisins" 8947 "⋳")
+    ("mathrel" "\\varniobar" 8957 "⋽")
+    ("mathrel" "\\varnis" 8955 "⋻")
+    ("mathrel" "\\vartriangleleft" 8882 "⊲")
+    ("mathrel" "\\vartriangleright" 8883 "⊳")
+    ("mathrel" "\\vbrtri" 10704 "⧐")
+    ("mathrel" "\\vdash" 8866 "⊢")
+    ("mathrel" "\\vdots" 8942 "⋮")
+    ("mathrel" "\\veeeq" 8794 "≚")
+    ("mathrel" "\\veeonwedge" 10841 "⩙")
+    ("mathrel" "\\vlongdash" 10205 "⟝")
+    ("mathrel" "\\wedgeq" 8793 "≙")
+    ("mathunder" "\\underbrace" 9183 "⏟")
+    ("mathunder" "\\underbracket" 9141 "⎵")
+    ("mathunder" "\\underparen" 9181 "⏝"))
+  ;; FIXME: Describe the expected shape of the contents (i.e. a list of
+  ;; 4-tuples, but I'm not sure what those 4 elements mean:
+  ;; - why is the first a string rather than a symbol?
+  ;; - What's the difference between the 3rd and the 4th (other than: one is
+  ;;   a char and the other is a single-char string)?
+  "Extended list of mathematical symbols.
+Each element is a list of the form (CLASS COMMAND UNICODE SYMBOL)
+where COMMAND is a latex command, UNICODE is the unicode entry
+point and SYMBOL is the Emacs with the actual unicode
+character. The last two are equivalent and provided for
+convenience. This list does not include about 190 of the standard
+LaTeX math commands in `math-symbol-list-basic' because of the
+conflicting names between latex and unicode-math standard.")
+
+(defconst math-symbol-list-packages
+  '(("amsfonts" "mathclose" "\\urcorner" 8989 "⌝")
+    ("amsfonts" "mathclose" "\\lrcorner" 8991 "⌟")
+    ("amsfonts" "mathopen" "\\ulcorner" 8988 "⌜")
+    ("amsfonts" "mathopen" "\\llcorner" 8990 "⌞")
+    ("amsfonts" "mathord" "\\yen" 165 "¥")
+    ("amsfonts" "mathord" "\\circledR" 174 "®")
+    ("amsfonts" "mathord" "\\mho" 8487 "℧")
+    ("amsfonts" "mathord" "\\dashleftarrow" 8672 "⇠")
+    ("amsfonts" "mathord" "\\dashrightarrow" 8674 "⇢")
+    ("amsfonts" "mathord" "\\checkmark" 10003 "✓")
+    ("amsfonts" "mathord" "\\maltese" 10016 "✠")
+    ("amsfonts" "mathrel" "\\sqsubset" 8847 "⊏")
+    ("amsfonts" "mathrel" "\\sqsupset" 8848 "⊐")
+    ("amsmath" "mathaccent" "\\dddot" 8411 "⃛")
+    ("amsmath" "mathaccent" "\\ddddot" 8412 "⃜")
+    ("amsmath" "mathaccent" "\\overleftrightarrow" 8417 "⃡")
+    ("amsmath" "mathaccent" "\\underleftarrow" 8430 "⃮")
+    ("amsmath" "mathaccent" "\\underrightarrow" 8431 "⃯")
+    ("amsmath" "mathop" "\\iint" 8748 "∬")
+    ("amsmath" "mathop" "\\iiint" 8749 "∭")
+    ("amsmath" "mathop" "\\iiiint" 10764 "⨌")
+    ("amssymb" "mathaccent" "\\mathring" 778 "̊")
+    ("amssymb" "mathalpha" "\\eth" 240 "ð")
+    ("amssymb" "mathalpha" "\\Digamma" 988 "Ϝ" t)
+    ("amssymb" "mathalpha" "\\hslash" 8463 "ℏ")
+    ("amssymb" "mathalpha" "\\wp" 8472 "℘")
+    ("amssymb" "mathalpha" "\\beth" 8502 "ℶ")
+    ("amssymb" "mathalpha" "\\gimel" 8503 "ℷ")
+    ("amssymb" "mathalpha" "\\daleth" 8504 "ℸ")
+    ("amssymb" "mathalpha" "\\varkappa" 120600 "𝜘")
+    ("amssymb" "mathbin" "\\dotplus" 8724 "∔")
+    ("amssymb" "mathbin" "\\smallsetminus" 8726 "∖")
+    ("amssymb" "mathbin" "\\wedge" 8743 "∧")
+    ("amssymb" "mathbin" "\\wr" 8768 "≀")
+    ("amssymb" "mathbin" "\\circledcirc" 8858 "⊚")
+    ("amssymb" "mathbin" "\\circledast" 8859 "⊛")
+    ("amssymb" "mathbin" "\\circleddash" 8861 "⊝")
+    ("amssymb" "mathbin" "\\boxplus" 8862 "⊞")
+    ("amssymb" "mathbin" "\\boxminus" 8863 "⊟")
+    ("amssymb" "mathbin" "\\boxtimes" 8864 "⊠")
+    ("amssymb" "mathbin" "\\boxdot" 8865 "⊡")
+    ("amssymb" "mathbin" "\\intercal" 8890 "⊺")
+    ("amssymb" "mathbin" "\\veebar" 8891 "⊻")
+    ("amssymb" "mathbin" "\\barwedge" 8892 "⊼")
+    ("amssymb" "mathbin" "\\divideontimes" 8903 "⋇")
+    ("amssymb" "mathbin" "\\ltimes" 8905 "⋉")
+    ("amssymb" "mathbin" "\\rtimes" 8906 "⋊")
+    ("amssymb" "mathbin" "\\leftthreetimes" 8907 "⋋")
+    ("amssymb" "mathbin" "\\rightthreetimes" 8908 "⋌")
+    ("amssymb" "mathbin" "\\curlyvee" 8910 "⋎")
+    ("amssymb" "mathbin" "\\curlywedge" 8911 "⋏")
+    ("amssymb" "mathbin" "\\Cap" 8914 "⋒")
+    ("amssymb" "mathbin" "\\Cup" 8915 "⋓")
+    ("amssymb" "mathbin" "\\rhd" 9655 "▷")
+    ("amssymb" "mathbin" "\\lhd" 9665 "◁")
+    ("amssymb" "mathbin" "\\blacklozenge" 10731 "⧫")
+    ("amssymb" "mathbin" "\\doublebarwedge" 10846 "⩞")
+    ("amssymb" "mathop" "\\Join" 10781 "⨝")
+    ("amssymb" "mathord" "\\backepsilon" 1014 "϶")
+    ("amssymb" "mathord" "\\backprime" 8245 "‵")
+    ("amssymb" "mathord" "\\Finv" 8498 "Ⅎ")
+    ("amssymb" "mathord" "\\circlearrowleft" 8634 "↺")
+    ("amssymb" "mathord" "\\circlearrowright" 8635 "↻")
+    ("amssymb" "mathord" "\\complement" 8705 "∁")
+    ("amssymb" "mathord" "\\nexists" 8708 "∄")
+    ("amssymb" "mathord" "\\varnothing" 8709 "∅")
+    ("amssymb" "mathord" "\\measuredangle" 8737 "∡")
+    ("amssymb" "mathord" "\\sphericalangle" 8738 "∢")
+    ("amssymb" "mathord" "\\therefore" 8756 "∴")
+    ("amssymb" "mathord" "\\because" 8757 "∵")
+    ("amssymb" "mathord" "\\Diamond" 9671 "◇")
+    ("amssymb" "mathord" "\\lozenge" 9674 "◊")
+    ("amssymb" "mathord" "\\square" 9723 "◻")
+    ("amssymb" "mathord" "\\blacksquare" 9724 "◼")
+    ("amssymb" "mathord" "\\bigstar" 9733 "★")
+    ("amssymb" "mathord" "\\blacksquare" 11035 "⬛" t)
+    ("amssymb" "mathord" "\\square" 11036 "⬜" t)
+    ("amssymb" "mathrel" "\\nwarrow" 8598 "↖")
+    ("amssymb" "mathrel" "\\nleftarrow" 8602 "↚")
+    ("amssymb" "mathrel" "\\nrightarrow" 8603 "↛")
+    ("amssymb" "mathrel" "\\twoheadleftarrow" 8606 "↞")
+    ("amssymb" "mathrel" "\\twoheadrightarrow" 8608 "↠")
+    ("amssymb" "mathrel" "\\leftarrowtail" 8610 "↢")
+    ("amssymb" "mathrel" "\\rightarrowtail" 8611 "↣")
+    ("amssymb" "mathrel" "\\looparrowleft" 8619 "↫")
+    ("amssymb" "mathrel" "\\looparrowright" 8620 "↬")
+    ("amssymb" "mathrel" "\\leftrightsquigarrow" 8621 "↭")
+    ("amssymb" "mathrel" "\\nleftrightarrow" 8622 "↮")
+    ("amssymb" "mathrel" "\\Lsh" 8624 "↰")
+    ("amssymb" "mathrel" "\\Rsh" 8625 "↱")
+    ("amssymb" "mathrel" "\\curvearrowleft" 8630 "↶")
+    ("amssymb" "mathrel" "\\curvearrowright" 8631 "↷")
+    ("amssymb" "mathrel" "\\upharpoonright" 8638 "↾")
+    ("amssymb" "mathrel" "\\upharpoonleft" 8639 "↿")
+    ("amssymb" "mathrel" "\\downharpoonright" 8642 "⇂")
+    ("amssymb" "mathrel" "\\downharpoonleft" 8643 "⇃")
+    ("amssymb" "mathrel" "\\rightleftarrows" 8644 "⇄")
+    ("amssymb" "mathrel" "\\leftrightarrows" 8646 "⇆")
+    ("amssymb" "mathrel" "\\leftleftarrows" 8647 "⇇")
+    ("amssymb" "mathrel" "\\upuparrows" 8648 "⇈")
+    ("amssymb" "mathrel" "\\rightrightarrows" 8649 "⇉")
+    ("amssymb" "mathrel" "\\downdownarrows" 8650 "⇊")
+    ("amssymb" "mathrel" "\\leftrightharpoons" 8651 "⇋")
+    ("amssymb" "mathrel" "\\nLeftarrow" 8653 "⇍")
+    ("amssymb" "mathrel" "\\nLeftrightarrow" 8654 "⇎")
+    ("amssymb" "mathrel" "\\nRightarrow" 8655 "⇏")
+    ("amssymb" "mathrel" "\\Lleftarrow" 8666 "⇚")
+    ("amssymb" "mathrel" "\\Rrightarrow" 8667 "⇛")
+    ("amssymb" "mathrel" "\\rightsquigarrow" 8669 "⇝")
+    ("amssymb" "mathrel" "\\nmid" 8740 "∤")
+    ("amssymb" "mathrel" "\\nparallel" 8742 "∦")
+    ("amssymb" "mathrel" "\\backsim" 8765 "∽")
+    ("amssymb" "mathrel" "\\nsim" 8769 "≁")
+    ("amssymb" "mathrel" "\\eqsim" 8770 "≂")
+    ("amssymb" "mathrel" "\\ncong" 8775 "≇")
+    ("amssymb" "mathrel" "\\approxeq" 8778 "≊")
+    ("amssymb" "mathrel" "\\Bumpeq" 8782 "≎")
+    ("amssymb" "mathrel" "\\bumpeq" 8783 "≏")
+    ("amssymb" "mathrel" "\\Doteq" 8785 "≑")
+    ("amssymb" "mathrel" "\\fallingdotseq" 8786 "≒")
+    ("amssymb" "mathrel" "\\risingdotseq" 8787 "≓")
+    ("amssymb" "mathrel" "\\eqcirc" 8790 "≖")
+    ("amssymb" "mathrel" "\\circeq" 8791 "≗")
+    ("amssymb" "mathrel" "\\triangleq" 8796 "≜")
+    ("amssymb" "mathrel" "\\leqq" 8806 "≦")
+    ("amssymb" "mathrel" "\\geqq" 8807 "≧")
+    ("amssymb" "mathrel" "\\lneqq" 8808 "≨")
+    ("amssymb" "mathrel" "\\gneqq" 8809 "≩")
+    ("amssymb" "mathrel" "\\between" 8812 "≬")
+    ("amssymb" "mathrel" "\\nless" 8814 "≮")
+    ("amssymb" "mathrel" "\\ngtr" 8815 "≯")
+    ("amssymb" "mathrel" "\\nleq" 8816 "≰")
+    ("amssymb" "mathrel" "\\ngeq" 8817 "≱")
+    ("amssymb" "mathrel" "\\lesssim" 8818 "≲")
+    ("amssymb" "mathrel" "\\gtrsim" 8819 "≳")
+    ("amssymb" "mathrel" "\\lessgtr" 8822 "≶")
+    ("amssymb" "mathrel" "\\gtrless" 8823 "≷")
+    ("amssymb" "mathrel" "\\preccurlyeq" 8828 "≼")
+    ("amssymb" "mathrel" "\\succcurlyeq" 8829 "≽")
+    ("amssymb" "mathrel" "\\precsim" 8830 "≾")
+    ("amssymb" "mathrel" "\\succsim" 8831 "≿")
+    ("amssymb" "mathrel" "\\nprec" 8832 "⊀")
+    ("amssymb" "mathrel" "\\nsucc" 8833 "⊁")
+    ("amssymb" "mathrel" "\\nsubseteq" 8840 "⊈")
+    ("amssymb" "mathrel" "\\nsupseteq" 8841 "⊉")
+    ("amssymb" "mathrel" "\\subsetneq" 8842 "⊊")
+    ("amssymb" "mathrel" "\\supsetneq" 8843 "⊋")
+    ("amssymb" "mathrel" "\\dashv" 8867 "⊣")
+    ("amssymb" "mathrel" "\\vDash" 8872 "⊨")
+    ("amssymb" "mathrel" "\\Vdash" 8873 "⊩")
+    ("amssymb" "mathrel" "\\Vvdash" 8874 "⊪")
+    ("amssymb" "mathrel" "\\nvdash" 8876 "⊬")
+    ("amssymb" "mathrel" "\\nvDash" 8877 "⊭")
+    ("amssymb" "mathrel" "\\nVdash" 8878 "⊮")
+    ("amssymb" "mathrel" "\\nVDash" 8879 "⊯")
+    ("amssymb" "mathrel" "\\vartriangleleft" 8882 "⊲")
+    ("amssymb" "mathrel" "\\vartriangleright" 8883 "⊳")
+    ("amssymb" "mathrel" "\\trianglelefteq" 8884 "⊴")
+    ("amssymb" "mathrel" "\\trianglerighteq" 8885 "⊵")
+    ("amssymb" "mathrel" "\\multimap" 8888 "⊸")
+    ("amssymb" "mathrel" "\\backsimeq" 8909 "⋍")
+    ("amssymb" "mathrel" "\\Subset" 8912 "⋐")
+    ("amssymb" "mathrel" "\\Supset" 8913 "⋑")
+    ("amssymb" "mathrel" "\\pitchfork" 8916 "⋔")
+    ("amssymb" "mathrel" "\\lessdot" 8918 "⋖")
+    ("amssymb" "mathrel" "\\gtrdot" 8919 "⋗")
+    ("amssymb" "mathrel" "\\lll" 8920 "⋘")
+    ("amssymb" "mathrel" "\\ggg" 8921 "⋙")
+    ("amssymb" "mathrel" "\\lesseqgtr" 8922 "⋚")
+    ("amssymb" "mathrel" "\\gtreqless" 8923 "⋛")
+    ("amssymb" "mathrel" "\\curlyeqprec" 8926 "⋞")
+    ("amssymb" "mathrel" "\\curlyeqsucc" 8927 "⋟")
+    ("amssymb" "mathrel" "\\npreceq" 8928 "⋠")
+    ("amssymb" "mathrel" "\\nsucceq" 8929 "⋡")
+    ("amssymb" "mathrel" "\\lnsim" 8934 "⋦")
+    ("amssymb" "mathrel" "\\gnsim" 8935 "⋧")
+    ("amssymb" "mathrel" "\\precnsim" 8936 "⋨")
+    ("amssymb" "mathrel" "\\succnsim" 8937 "⋩")
+    ("amssymb" "mathrel" "\\ntriangleleft" 8938 "⋪")
+    ("amssymb" "mathrel" "\\ntriangleright" 8939 "⋫")
+    ("amssymb" "mathrel" "\\ntrianglelefteq" 8940 "⋬")
+    ("amssymb" "mathrel" "\\ntrianglerighteq" 8941 "⋭")
+    ("amssymb" "mathrel" "\\leqslant" 10877 "⩽")
+    ("amssymb" "mathrel" "\\geqslant" 10878 "⩾")
+    ("amssymb" "mathrel" "\\lessapprox" 10885 "⪅")
+    ("amssymb" "mathrel" "\\gtrapprox" 10886 "⪆")
+    ("amssymb" "mathrel" "\\lneq" 10887 "⪇")
+    ("amssymb" "mathrel" "\\gneq" 10888 "⪈")
+    ("amssymb" "mathrel" "\\lnapprox" 10889 "⪉")
+    ("amssymb" "mathrel" "\\gnapprox" 10890 "⪊")
+    ("amssymb" "mathrel" "\\lesseqqgtr" 10891 "⪋")
+    ("amssymb" "mathrel" "\\gtreqqless" 10892 "⪌")
+    ("amssymb" "mathrel" "\\eqslantless" 10901 "⪕")
+    ("amssymb" "mathrel" "\\eqslantgtr" 10902 "⪖")
+    ("amssymb" "mathrel" "\\precapprox" 10935 "⪷")
+    ("amssymb" "mathrel" "\\succapprox" 10936 "⪸")
+    ("amssymb" "mathrel" "\\precnapprox" 10937 "⪹")
+    ("amssymb" "mathrel" "\\succnapprox" 10938 "⪺")
+    ("amssymb" "mathrel" "\\subseteqq" 10949 "⫅")
+    ("amssymb" "mathrel" "\\supseteqq" 10950 "⫆")
+    ("amssymb" "mathrel" "\\subsetneqq" 10955 "⫋")
+    ("amssymb" "mathrel" "\\supsetneqq" 10956 "⫌")
+    ("amsxtra" "mathord" "\\sptilde" 126 "~")
+    ("amsxtra" "mathord" "\\spddot" 168 "¨")
+    ("arevmath" "mathalpha" "\\eth" 240 "ð")
+    ("arevmath" "mathalpha" "\\varbeta" 976 "ϐ")
+    ("arevmath" "mathalpha" "\\Stigma" 986 "Ϛ")
+    ("arevmath" "mathalpha" "\\stigma" 987 "ϛ")
+    ("arevmath" "mathalpha" "\\digamma" 989 "ϝ")
+    ("arevmath" "mathalpha" "\\Koppa" 990 "Ϟ")
+    ("arevmath" "mathalpha" "\\koppa" 991 "ϟ")
+    ("arevmath" "mathalpha" "\\Sampi" 992 "Ϡ")
+    ("arevmath" "mathalpha" "\\sampi" 993 "ϡ")
+    ("arevmath" "mathalpha" "\\hslash" 8463 "ℏ")
+    ("arevmath" "mathord" "\\Qoppa" 984 "Ϙ")
+    ("arevmath" "mathord" "\\qoppa" 985 "ϙ")
+    ("arevmath" "mathord" "\\mho" 8487 "℧")
+    ("arevmath" "mathord" "\\steaming" 9749 "☕")
+    ("arevmath" "mathord" "\\pointright" 9758 "☞")
+    ("arevmath" "mathord" "\\skull" 9760 "☠")
+    ("arevmath" "mathord" "\\radiation" 9762 "☢")
+    ("arevmath" "mathord" "\\biohazard" 9763 "☣")
+    ("arevmath" "mathord" "\\yinyang" 9775 "☯")
+    ("arevmath" "mathord" "\\quarternote" 9833 "♩")
+    ("arevmath" "mathord" "\\eighthnote" 9834 "♪")
+    ("arevmath" "mathord" "\\sixteenthnote" 9836 "♬")
+    ("arevmath" "mathord" "\\recycle" 9851 "♻")
+    ("arevmath" "mathord" "\\anchor" 9875 "⚓")
+    ("arevmath" "mathord" "\\swords" 9876 "⚔")
+    ("arevmath" "mathord" "\\warning" 9888 "⚠")
+    ("arevmath" "mathord" "\\pencil" 9998 "✎")
+    ("arevmath" "mathord" "\\ballotx" 10007 "✗")
+    ("arevmath" "mathord" "\\arrowbullet" 10146 "➢")
+    ("esint" "mathop" "\\iint" 8748 "∬")
+    ("esint" "mathop" "\\iiint" 8749 "∭")
+    ("esint" "mathop" "\\oiint" 8751 "∯")
+    ("esint" "mathop" "\\varointclockwise" 8754 "∲")
+    ("esint" "mathop" "\\ointctrclockwise" 8755 "∳")
+    ("esint" "mathop" "\\iiiint" 10764 "⨌")
+    ("esint" "mathop" "\\fint" 10767 "⨏")
+    ("esint" "mathop" "\\sqint" 10774 "⨖")
+    ("fourier" "mathalpha" "\\hslash" 8463 "ℏ")
+    ("fourier" "mathbin" "\\smallsetminus" 8726 "∖")
+    ("fourier" "mathbin" "\\intercal" 8890 "⊺")
+    ("fourier" "mathbin" "\\blacktriangleright" 9656 "▸" t)
+    ("fourier" "mathbin" "\\blacktriangleleft" 9666 "◂" t)
+    ("fourier" "mathclose" "\\rrbracket" 10215 "⟧")
+    ("fourier" "mathfence" "\\VERT" 10624 "⦀")
+    ("fourier" "mathop" "\\iint" 8748 "∬")
+    ("fourier" "mathop" "\\iiint" 8749 "∭")
+    ("fourier" "mathop" "\\oiint" 8751 "∯")
+    ("fourier" "mathop" "\\oiiint" 8752 "∰")
+    ("fourier" "mathopen" "\\llbracket" 10214 "⟦")
+    ("fourier" "mathord" "\\pounds" 163 "£" t)
+    ("fourier" "mathord" "\\complement" 8705 "∁")
+    ("fourier" "mathord" "\\nexists" 8708 "∄")
+    ("fourier" "mathord" "\\square" 9723 "◻" t)
+    ("fourier" "mathord" "\\blacksquare" 9724 "◼" t)
+    ("fourier" "mathord" "\\blacksquare" 11035 "⬛")
+    ("fourier" "mathord" "\\square" 11036 "⬜")
+    ("fourier" "mathrel" "\\curvearrowleft" 8630 "↶")
+    ("fourier" "mathrel" "\\curvearrowright" 8631 "↷")
+    ("fourier" "mathrel" "\\leftleftarrows" 8647 "⇇")
+    ("fourier" "mathrel" "\\rightrightarrows" 8649 "⇉")
+    ("fourier" "mathrel" "\\nparallel" 8742 "∦")
+    ("fourier" "mathrel" "\\vDash" 8872 "⊨")
+    ("fourier" "mathrel" "\\nvDash" 8877 "⊭")
+    ("fourier" "mathrel" "\\leqslant" 10877 "⩽")
+    ("fourier" "mathrel" "\\geqslant" 10878 "⩾")
+    ("frenchstyle" "mathalpha" "A" 119860 "𝐴" t)
+    ("frenchstyle" "mathalpha" "B" 119861 "𝐵" t)
+    ("frenchstyle" "mathalpha" "C" 119862 "𝐶" t)
+    ("frenchstyle" "mathalpha" "D" 119863 "𝐷" t)
+    ("frenchstyle" "mathalpha" "E" 119864 "𝐸" t)
+    ("frenchstyle" "mathalpha" "F" 119865 "𝐹" t)
+    ("frenchstyle" "mathalpha" "G" 119866 "𝐺" t)
+    ("frenchstyle" "mathalpha" "H" 119867 "𝐻" t)
+    ("frenchstyle" "mathalpha" "I" 119868 "𝐼" t)
+    ("frenchstyle" "mathalpha" "J" 119869 "𝐽" t)
+    ("frenchstyle" "mathalpha" "K" 119870 "𝐾" t)
+    ("frenchstyle" "mathalpha" "L" 119871 "𝐿" t)
+    ("frenchstyle" "mathalpha" "M" 119872 "𝑀" t)
+    ("frenchstyle" "mathalpha" "N" 119873 "𝑁" t)
+    ("frenchstyle" "mathalpha" "O" 119874 "𝑂" t)
+    ("frenchstyle" "mathalpha" "P" 119875 "𝑃" t)
+    ("frenchstyle" "mathalpha" "Q" 119876 "𝑄" t)
+    ("frenchstyle" "mathalpha" "R" 119877 "𝑅" t)
+    ("frenchstyle" "mathalpha" "S" 119878 "𝑆" t)
+    ("frenchstyle" "mathalpha" "T" 119879 "𝑇" t)
+    ("frenchstyle" "mathalpha" "U" 119880 "𝑈" t)
+    ("frenchstyle" "mathalpha" "V" 119881 "𝑉" t)
+    ("frenchstyle" "mathalpha" "W" 119882 "𝑊" t)
+    ("frenchstyle" "mathalpha" "X" 119883 "𝑋" t)
+    ("frenchstyle" "mathalpha" "Y" 119884 "𝑌" t)
+    ("frenchstyle" "mathalpha" "Z" 119885 "𝑍" t)
+    ("kpfonts" "mathclose" "\\rrbracket" 10215 "⟧")
+    ("kpfonts" "mathopen" "\\llbracket" 10214 "⟦")
+    ("literal" "mathalpha" "A" 65 "A" t)
+    ("literal" "mathalpha" "B" 66 "B" t)
+    ("literal" "mathalpha" "C" 67 "C" t)
+    ("literal" "mathalpha" "D" 68 "D" t)
+    ("literal" "mathalpha" "E" 69 "E" t)
+    ("literal" "mathalpha" "F" 70 "F" t)
+    ("literal" "mathalpha" "G" 71 "G" t)
+    ("literal" "mathalpha" "H" 72 "H" t)
+    ("literal" "mathalpha" "I" 73 "I" t)
+    ("literal" "mathalpha" "J" 74 "J" t)
+    ("literal" "mathalpha" "K" 75 "K" t)
+    ("literal" "mathalpha" "L" 76 "L" t)
+    ("literal" "mathalpha" "M" 77 "M" t)
+    ("literal" "mathalpha" "N" 78 "N" t)
+    ("literal" "mathalpha" "O" 79 "O" t)
+    ("literal" "mathalpha" "P" 80 "P" t)
+    ("literal" "mathalpha" "Q" 81 "Q" t)
+    ("literal" "mathalpha" "R" 82 "R" t)
+    ("literal" "mathalpha" "S" 83 "S" t)
+    ("literal" "mathalpha" "T" 84 "T" t)
+    ("literal" "mathalpha" "U" 85 "U" t)
+    ("literal" "mathalpha" "V" 86 "V" t)
+    ("literal" "mathalpha" "W" 87 "W" t)
+    ("literal" "mathalpha" "X" 88 "X" t)
+    ("literal" "mathalpha" "Y" 89 "Y" t)
+    ("literal" "mathalpha" "Z" 90 "Z" t)
+    ("literal" "mathalpha" "a" 97 "a" t)
+    ("literal" "mathalpha" "b" 98 "b" t)
+    ("literal" "mathalpha" "c" 99 "c" t)
+    ("literal" "mathalpha" "d" 100 "d" t)
+    ("literal" "mathalpha" "e" 101 "e" t)
+    ("literal" "mathalpha" "f" 102 "f" t)
+    ("literal" "mathalpha" "g" 103 "g" t)
+    ("literal" "mathalpha" "h" 104 "h" t)
+    ("literal" "mathalpha" "i" 105 "i" t)
+    ("literal" "mathalpha" "j" 106 "j" t)
+    ("literal" "mathalpha" "k" 107 "k" t)
+    ("literal" "mathalpha" "l" 108 "l" t)
+    ("literal" "mathalpha" "m" 109 "m" t)
+    ("literal" "mathalpha" "n" 110 "n" t)
+    ("literal" "mathalpha" "o" 111 "o" t)
+    ("literal" "mathalpha" "p" 112 "p" t)
+    ("literal" "mathalpha" "q" 113 "q" t)
+    ("literal" "mathalpha" "r" 114 "r" t)
+    ("literal" "mathalpha" "s" 115 "s" t)
+    ("literal" "mathalpha" "t" 116 "t" t)
+    ("literal" "mathalpha" "u" 117 "u" t)
+    ("literal" "mathalpha" "v" 118 "v" t)
+    ("literal" "mathalpha" "w" 119 "w" t)
+    ("literal" "mathalpha" "x" 120 "x" t)
+    ("literal" "mathalpha" "y" 121 "y" t)
+    ("literal" "mathalpha" "z" 122 "z" t)
+    ("literal" "mathalpha" "\\imath" 305 "ı" t)
+    ("literal" "mathalpha" "\\jmath" 567 "ȷ" t)
+    ("literal" "mathalpha" "\\Gamma" 915 "Γ" t)
+    ("literal" "mathalpha" "\\Delta" 916 "Δ" t)
+    ("literal" "mathalpha" "\\Theta" 920 "Θ" t)
+    ("literal" "mathalpha" "\\Lambda" 923 "Λ" t)
+    ("literal" "mathalpha" "\\Xi" 926 "Ξ" t)
+    ("literal" "mathalpha" "\\Pi" 928 "Π" t)
+    ("literal" "mathalpha" "\\Sigma" 931 "Σ" t)
+    ("literal" "mathalpha" "\\Upsilon" 933 "Υ" t)
+    ("literal" "mathalpha" "\\Phi" 934 "Φ" t)
+    ("literal" "mathalpha" "\\Psi" 936 "Ψ" t)
+    ("literal" "mathalpha" "\\Omega" 937 "Ω" t)
+    ("literal" "mathalpha" "\\alpha" 945 "α" t)
+    ("literal" "mathalpha" "\\beta" 946 "β" t)
+    ("literal" "mathalpha" "\\gamma" 947 "γ" t)
+    ("literal" "mathalpha" "\\delta" 948 "δ" t)
+    ("literal" "mathalpha" "\\varepsilon" 949 "ε" t)
+    ("literal" "mathalpha" "\\zeta" 950 "ζ" t)
+    ("literal" "mathalpha" "\\eta" 951 "η" t)
+    ("literal" "mathalpha" "\\theta" 952 "θ" t)
+    ("literal" "mathalpha" "\\iota" 953 "ι" t)
+    ("literal" "mathalpha" "\\kappa" 954 "κ" t)
+    ("literal" "mathalpha" "\\lambda" 955 "λ" t)
+    ("literal" "mathalpha" "\\mu" 956 "μ" t)
+    ("literal" "mathalpha" "\\nu" 957 "ν" t)
+    ("literal" "mathalpha" "\\xi" 958 "ξ" t)
+    ("literal" "mathalpha" "\\pi" 960 "π" t)
+    ("literal" "mathalpha" "\\rho" 961 "ρ" t)
+    ("literal" "mathalpha" "\\varsigma" 962 "ς" t)
+    ("literal" "mathalpha" "\\sigma" 963 "σ" t)
+    ("literal" "mathalpha" "\\tau" 964 "τ" t)
+    ("literal" "mathalpha" "\\upsilon" 965 "υ" t)
+    ("literal" "mathalpha" "\\varphi" 966 "φ" t)
+    ("literal" "mathalpha" "\\chi" 967 "χ" t)
+    ("literal" "mathalpha" "\\psi" 968 "ψ" t)
+    ("literal" "mathalpha" "\\omega" 969 "ω" t)
+    ("literal" "mathalpha" "\\vartheta" 977 "ϑ" t)
+    ("literal" "mathalpha" "\\phi" 981 "ϕ" t)
+    ("literal" "mathalpha" "\\varpi" 982 "ϖ" t)
+    ("literal" "mathalpha" "\\varrho" 1009 "ϱ" t)
+    ("literal" "mathalpha" "\\epsilon" 1013 "ϵ" t)
+    ("literal" "mathord" "\\partial" 8706 "∂" t)
+    ("literal" "mathpunct" ":" 58 ":" t)
+    ("marvosym" "mathrel" "\\Rightarrow" 8658 "⇒" t)
+    ("mathabx" "mathbin" "\\blacktriangleup" 9652 "▴")
+    ("mathabx" "mathbin" "\\smalltriangleup" 9653 "▵")
+    ("mathabx" "mathbin" "\\blacktriangleright" 9656 "▸")
+    ("mathabx" "mathbin" "\\smalltriangleright" 9657 "▹")
+    ("mathabx" "mathbin" "\\blacktriangledown" 9662 "▾")
+    ("mathabx" "mathbin" "\\smalltriangledown" 9663 "▿")
+    ("mathabx" "mathbin" "\\blacktriangleleft" 9666 "◂")
+    ("mathabx" "mathbin" "\\smalltriangleleft" 9667 "◃")
+    ("mathabx" "mathord" "\\second" 8243 "″")
+    ("mathabx" "mathord" "\\third" 8244 "‴")
+    ("mathabx" "mathord" "\\fourth" 8279 "⁗")
+    ("mathabx" "mathord" "\\diameter" 8960 "⌀")
+    ("mathabx" "mathord" "\\Sun" 9737 "☉")
+    ("mathabx" "mathord" "\\rightmoon" 9789 "☽")
+    ("mathabx" "mathord" "\\leftmoon" 9790 "☾")
+    ("mathabx" "mathrel" "\\dlsh" 8626 "↲")
+    ("mathabx" "mathrel" "\\drsh" 8627 "↳")
+    ("mathabx" "mathrel" "\\updownarrows" 8645 "⇅")
+    ("mathabx" "mathrel" "\\leftsquigarrow" 8668 "⇜")
+    ("mathabx" "mathrel" "\\downuparrows" 8693 "⇵")
+    ("mathabx" "mathrel" "\\eqcolon" 8761 "∹" t)
+    ("mathabx" "mathrel" "\\coloneq" 8788 "≔")
+    ("mathabx" "mathrel" "\\eqcolon" 8789 "≕")
+    ("mathabx" "mathrel" "\\corresponds" 8793 "≙")
+    ("mathabx" "mathrel" "\\notasymp" 8813 "≭")
+    ("mathabx" "mathrel" "\\VDash" 8875 "⊫")
+    ("mathabx" "mathrel" "\\hash" 8917 "⋕")
+    ("mathabx" "mathrel" "\\lll" 8920 "⋘" t)
+    ("mathabx" "mathrel" "\\ggg" 8921 "⋙" t)
+    ("mathabx" "mathrel" "\\barin" 8950 "⋶")
+    ("mathabx" "mathrel" "\\leftrightharpoon" 10570 "⥊")
+    ("mathabx" "mathrel" "\\rightleftharpoon" 10571 "⥋")
+    ("mathabx" "mathrel" "\\leftleftharpoons" 10594 "⥢")
+    ("mathabx" "mathrel" "\\upupharpoons" 10595 "⥣")
+    ("mathabx" "mathrel" "\\rightrightharpoons" 10596 "⥤")
+    ("mathabx" "mathrel" "\\downdownharpoons" 10597 "⥥")
+    ("mathabx" "mathrel" "\\leftbarharpoon" 10602 "⥪")
+    ("mathabx" "mathrel" "\\barleftharpoon" 10603 "⥫")
+    ("mathabx" "mathrel" "\\rightbarharpoon" 10604 "⥬")
+    ("mathabx" "mathrel" "\\barrightharpoon" 10605 "⥭")
+    ("mathabx" "mathrel" "\\updownharpoons" 10606 "⥮")
+    ("mathabx" "mathrel" "\\downupharpoons" 10607 "⥯")
+    ("mathabx" "mathrel" "\\llcurly" 10939 "⪻")
+    ("mathabx" "mathrel" "\\ggcurly" 10940 "⪼")
+    ("mathbbol" "mathclose" "\\Rparen" 10630 "⦆")
+    ("mathbbol" "mathopen" "\\Lparen" 10629 "⦅")
+    ("mathcomp" "mathalpha" "\\tcohm" 8486 "Ω")
+    ("mathdots" "mathrel" "\\iddots" 8944 "⋰")
+    ("omlmathit" "mathord" "\\pounds" 163 "£" t)
+    ("oz" "mathaccent" "\\dot" 775 "̇" t)
+    ("oz" "mathbin" "\\cat" 8256 "⁀")
+    ("oz" "mathbin" "\\fcmp" 10814 "⨾")
+    ("oz" "mathbin" "\\dsub" 10852 "⩤")
+    ("oz" "mathbin" "\\rsub" 10853 "⩥")
+    ("oz" "mathclose" "\\rang" 10219 "⟫")
+    ("oz" "mathclose" "\\rimg" 10632 "⦈")
+    ("oz" "mathclose" "\\rblot" 10634 "⦊")
+    ("oz" "mathop" "\\zhide" 10745 "⧹")
+    ("oz" "mathop" "\\zcmp" 10783 "⨟")
+    ("oz" "mathop" "\\zpipe" 10784 "⨠")
+    ("oz" "mathop" "\\zproject" 10785 "⨡")
+    ("oz" "mathopen" "\\lang" 10218 "⟪")
+    ("oz" "mathopen" "\\limg" 10631 "⦇")
+    ("oz" "mathopen" "\\lblot" 10633 "⦉")
+    ("oz" "mathord" "\\#" 35 "#" t)
+    ("oz" "mathord" "\\spot" 10625 "⦁")
+    ("oz" "mathrel" "\\pfun" 8696 "⇸")
+    ("oz" "mathrel" "\\ffun" 8699 "⇻")
+    ("oz" "mathrel" "\\psur" 10496 "⤀")
+    ("oz" "mathrel" "\\pinj" 10516 "⤔")
+    ("oz" "mathrel" "\\finj" 10517 "⤕")
+    ("oz" "mathrel" "\\bij" 10518 "⤖")
+    ("slantedGreek" "mathalpha" "\\Gamma" 120548 "𝛤")
+    ("slantedGreek" "mathalpha" "\\Delta" 120549 "𝛥")
+    ("slantedGreek" "mathalpha" "\\Theta" 120553 "𝛩")
+    ("slantedGreek" "mathalpha" "\\Lambda" 120556 "𝛬")
+    ("slantedGreek" "mathalpha" "\\Xi" 120559 "𝛯")
+    ("slantedGreek" "mathalpha" "\\Pi" 120561 "𝛱")
+    ("slantedGreek" "mathalpha" "\\Sigma" 120564 "𝛴")
+    ("slantedGreek" "mathalpha" "\\Upsilon" 120566 "𝛶")
+    ("slantedGreek" "mathalpha" "\\Phi" 120567 "𝛷")
+    ("slantedGreek" "mathalpha" "\\Psi" 120569 "𝛹")
+    ("slantedGreek" "mathalpha" "\\Omega" 120570 "𝛺")
+    ("stmaryrd" "mathbin" "\\boxdot" 8865 "⊡")
+    ("stmaryrd" "mathbin" "\\bigtriangleup" 9651 "△" t)
+    ("stmaryrd" "mathbin" "\\bigtriangledown" 9661 "▽" t)
+    ("stmaryrd" "mathbin" "\\boxbar" 9707 "◫")
+    ("stmaryrd" "mathbin" "\\boxslash" 10692 "⧄")
+    ("stmaryrd" "mathbin" "\\boxbslash" 10693 "⧅")
+    ("stmaryrd" "mathbin" "\\boxast" 10694 "⧆")
+    ("stmaryrd" "mathbin" "\\boxcircle" 10695 "⧇")
+    ("stmaryrd" "mathbin" "\\boxbox" 10696 "⧈")
+    ("stmaryrd" "mathbin" "\\interleave" 10996 "⫴")
+    ("stmaryrd" "mathbin" "\\sslash" 11005 "⫽")
+    ("stmaryrd" "mathbin" "\\talloblong" 11006 "⫾")
+    ("stmaryrd" "mathclose" "\\Rbag" 10182 "⟆")
+    ("stmaryrd" "mathclose" "\\rrbracket" 10215 "⟧")
+    ("stmaryrd" "mathop" "\\biginterleave" 11004 "⫼")
+    ("stmaryrd" "mathopen" "\\Lbag" 10181 "⟅")
+    ("stmaryrd" "mathopen" "\\llbracket" 10214 "⟦")
+    ("stmaryrd" "mathord" "\\Yup" 8516 "⅄")
+    ("stmaryrd" "mathrel" "\\mapsfrom" 8612 "↤")
+    ("stmaryrd" "mathrel" "\\lightning" 8623 "↯")
+    ("stmaryrd" "mathrel" "\\leftarrowtriangle" 8701 "⇽")
+    ("stmaryrd" "mathrel" "\\rightarrowtriangle" 8702 "⇾")
+    ("stmaryrd" "mathrel" "\\leftrightarrowtriangle" 8703 "⇿")
+    ("stmaryrd" "mathrel" "\\longmapsfrom" 10235 "⟻")
+    ("stmaryrd" "mathrel" "\\Longmapsfrom" 10237 "⟽")
+    ("stmaryrd" "mathrel" "\\Longmapsto" 10238 "⟾")
+    ("stmaryrd" "mathrel" "\\Mapsfrom" 10502 "⤆")
+    ("stmaryrd" "mathrel" "\\Mapsto" 10503 "⤇")
+    ("stmaryrd" "mathrel" "\\leftslice" 10918 "⪦")
+    ("stmaryrd" "mathrel" "\\rightslice" 10919 "⪧")
+    ("txfonts" "mathbin" "\\invamp" 8523 "⅋")
+    ("txfonts" "mathbin" "\\boxbar" 9707 "◫")
+    ("txfonts" "mathbin" "\\circledbslash" 10680 "⦸")
+    ("txfonts" "mathbin" "\\circledless" 10688 "⧀")
+    ("txfonts" "mathbin" "\\circledgtr" 10689 "⧁")
+    ("txfonts" "mathbin" "\\boxslash" 10692 "⧄")
+    ("txfonts" "mathbin" "\\boxbslash" 10693 "⧅")
+    ("txfonts" "mathbin" "\\boxast" 10694 "⧆")
+    ("txfonts" "mathclose" "\\Rbag" 10182 "⟆")
+    ("txfonts" "mathop" "\\oiiint" 8752 "∰")
+    ("txfonts" "mathop" "\\bigsqcap" 10757 "⨅")
+    ("txfonts" "mathop" "\\varprod" 10761 "⨉")
+    ("txfonts" "mathopen" "\\Lbag" 10181 "⟅")
+    ("txfonts" "mathord" "\\Diamondblack" 9670 "◆")
+    ("txfonts" "mathord" "\\varspadesuit" 9828 "♤")
+    ("txfonts" "mathord" "\\varheartsuit" 9829 "♥")
+    ("txfonts" "mathord" "\\vardiamondsuit" 9830 "♦")
+    ("txfonts" "mathord" "\\varclubsuit" 9831 "♧")
+    ("txfonts" "mathord" "\\medcirc" 9898 "⚪")
+    ("txfonts" "mathord" "\\medbullet" 9899 "⚫")
+    ("txfonts" "mathord" "\\Diamonddot" 10192 "⟐")
+    ("txfonts" "mathrel" "\\Nwarrow" 8662 "⇖")
+    ("txfonts" "mathrel" "\\Nearrow" 8663 "⇗")
+    ("txfonts" "mathrel" "\\Searrow" 8664 "⇘")
+    ("txfonts" "mathrel" "\\Swarrow" 8665 "⇙")
+    ("txfonts" "mathrel" "\\leftsquigarrow" 8668 "⇜")
+    ("txfonts" "mathrel" "\\eqcolon" 8761 "∹")
+    ("txfonts" "mathrel" "\\nsimeq" 8772 "≄")
+    ("txfonts" "mathrel" "\\coloneq" 8788 "≔" t)
+    ("txfonts" "mathrel" "\\eqcolon" 8789 "≕" t)
+    ("txfonts" "mathrel" "\\VDash" 8875 "⊫")
+    ("txfonts" "mathrel" "\\multimapdotbothA" 8886 "⊶")
+    ("txfonts" "mathrel" "\\multimapdotbothB" 8887 "⊷")
+    ("txfonts" "mathrel" "\\multimapinv" 10204 "⟜")
+    ("txfonts" "mathrel" "\\leadsto" 10547 "⤳")
+    ("txfonts" "mathrel" "\\strictfi" 10620 "⥼")
+    ("txfonts" "mathrel" "\\strictif" 10621 "⥽")
+    ("txfonts" "mathrel" "\\multimapboth" 10719 "⧟")
+    ("txfonts" "mathrel" "\\Coloneqq" 10868 "⩴")
+    ("txfonts" "mathrel" "\\preceqq" 10931 "⪳")
+    ("txfonts" "mathrel" "\\succeqq" 10932 "⪴")
+    ("txfonts" "mathrel" "\\Top" 10986 "⫪")
+    ("txfonts" "mathrel" "\\Bot" 10987 "⫫")
+    ("undertilde" "mathaccent" "\\utilde" 816 "̰")
+    ("uprightstyle" "mathalpha" "a" 119886 "𝑎" t)
+    ("uprightstyle" "mathalpha" "b" 119887 "𝑏" t)
+    ("uprightstyle" "mathalpha" "c" 119888 "𝑐" t)
+    ("uprightstyle" "mathalpha" "d" 119889 "𝑑" t)
+    ("uprightstyle" "mathalpha" "e" 119890 "𝑒" t)
+    ("uprightstyle" "mathalpha" "f" 119891 "𝑓" t)
+    ("uprightstyle" "mathalpha" "g" 119892 "𝑔" t)
+    ("uprightstyle" "mathalpha" "i" 119894 "𝑖" t)
+    ("uprightstyle" "mathalpha" "j" 119895 "𝑗" t)
+    ("uprightstyle" "mathalpha" "k" 119896 "𝑘" t)
+    ("uprightstyle" "mathalpha" "l" 119897 "𝑙" t)
+    ("uprightstyle" "mathalpha" "m" 119898 "𝑚" t)
+    ("uprightstyle" "mathalpha" "n" 119899 "𝑛" t)
+    ("uprightstyle" "mathalpha" "o" 119900 "𝑜" t)
+    ("uprightstyle" "mathalpha" "p" 119901 "𝑝" t)
+    ("uprightstyle" "mathalpha" "q" 119902 "𝑞" t)
+    ("uprightstyle" "mathalpha" "r" 119903 "𝑟" t)
+    ("uprightstyle" "mathalpha" "s" 119904 "𝑠" t)
+    ("uprightstyle" "mathalpha" "t" 119905 "𝑡" t)
+    ("uprightstyle" "mathalpha" "u" 119906 "𝑢" t)
+    ("uprightstyle" "mathalpha" "v" 119907 "𝑣" t)
+    ("uprightstyle" "mathalpha" "w" 119908 "𝑤" t)
+    ("uprightstyle" "mathalpha" "x" 119909 "𝑥" t)
+    ("uprightstyle" "mathalpha" "y" 119910 "𝑦" t)
+    ("uprightstyle" "mathalpha" "z" 119911 "𝑧" t)
+    ("wasysym" "mathbin" "\\RHD" 9654 "▶")
+    ("wasysym" "mathbin" "\\rhd" 9655 "▷")
+    ("wasysym" "mathbin" "\\LHD" 9664 "◀")
+    ("wasysym" "mathbin" "\\lhd" 9665 "◁")
+    ("wasysym" "mathbin" "\\Circle" 9675 "○")
+    ("wasysym" "mathop" "\\iint" 8748 "∬")
+    ("wasysym" "mathop" "\\iiint" 8749 "∭")
+    ("wasysym" "mathop" "\\oiint" 8751 "∯")
+    ("wasysym" "mathord" "\\cent" 162 "¢")
+    ("wasysym" "mathord" "\\AC" 8767 "∿")
+    ("wasysym" "mathord" "\\invneg" 8976 "⌐")
+    ("wasysym" "mathord" "\\wasylozenge" 8977 "⌑")
+    ("wasysym" "mathord" "\\APLinv" 9017 "⌹")
+    ("wasysym" "mathord" "\\notbackslash" 9024 "⍀")
+    ("wasysym" "mathord" "\\APLleftarrowbox" 9031 "⍇")
+    ("wasysym" "mathord" "\\APLrightarrowbox" 9032 "⍈")
+    ("wasysym" "mathord" "\\APLuparrowbox" 9040 "⍐")
+    ("wasysym" "mathord" "\\APLdownarrowbox" 9047 "⍗")
+    ("wasysym" "mathord" "\\APLcomment" 9053 "⍝")
+    ("wasysym" "mathord" "\\APLinput" 9054 "⍞")
+    ("wasysym" "mathord" "\\APLlog" 9055 "⍟")
+    ("wasysym" "mathord" "\\CIRCLE" 9679 "●")
+    ("wasysym" "mathord" "\\LEFTcircle" 9680 "◐")
+    ("wasysym" "mathord" "\\RIGHTcircle" 9681 "◑")
+    ("wasysym" "mathord" "\\LEFTCIRCLE" 9686 "◖")
+    ("wasysym" "mathord" "\\RIGHTCIRCLE" 9687 "◗")
+    ("wasysym" "mathord" "\\Square" 9744 "☐")
+    ("wasysym" "mathord" "\\CheckedBox" 9745 "☑")
+    ("wasysym" "mathord" "\\XBox" 9746 "☒")
+    ("wasysym" "mathord" "\\frownie" 9785 "☹")
+    ("wasysym" "mathord" "\\smiley" 9786 "☺")
+    ("wasysym" "mathord" "\\blacksmiley" 9787 "☻")
+    ("wasysym" "mathord" "\\sun" 9788 "☼")
+    ("wasysym" "mathord" "\\rightmoon" 9789 "☽")
+    ("wasysym" "mathord" "\\leftmoon" 9790 "☾")
+    ("wasysym" "mathord" "\\mercury" 9791 "☿")
+    ("wasysym" "mathord" "\\female" 9792 "♀")
+    ("wasysym" "mathord" "\\earth" 9793 "♁")
+    ("wasysym" "mathord" "\\male" 9794 "♂")
+    ("wasysym" "mathord" "\\jupiter" 9795 "♃")
+    ("wasysym" "mathord" "\\saturn" 9796 "♄")
+    ("wasysym" "mathord" "\\uranus" 9797 "♅")
+    ("wasysym" "mathord" "\\neptune" 9798 "♆")
+    ("wasysym" "mathord" "\\pluto" 9799 "♇")
+    ("wasysym" "mathord" "\\aries" 9800 "♈")
+    ("wasysym" "mathord" "\\taurus" 9801 "♉")
+    ("wasysym" "mathord" "\\gemini" 9802 "♊")
+    ("wasysym" "mathord" "\\cancer" 9803 "♋")
+    ("wasysym" "mathord" "\\leo" 9804 "♌")
+    ("wasysym" "mathord" "\\virgo" 9805 "♍")
+    ("wasysym" "mathord" "\\libra" 9806 "♎")
+    ("wasysym" "mathord" "\\scorpio" 9807 "♏")
+    ("wasysym" "mathord" "\\sagittarius" 9808 "♐")
+    ("wasysym" "mathord" "\\capricornus" 9809 "♑")
+    ("wasysym" "mathord" "\\aquarius" 9810 "♒")
+    ("wasysym" "mathord" "\\pisces" 9811 "♓")
+    ("wasysym" "mathord" "\\quarternote" 9833 "♩")
+    ("wasysym" "mathord" "\\twonotes" 9835 "♫")
+    ("wasysym" "mathrel" "\\notslash" 9023 "⌿")
+    ("wrisym" "mathaccent" "\\lvec" 8400 "⃐")
+    ("wrisym" "mathaccent" "\\vec" 8401 "⃑")
+    ("wrisym" "mathaccent" "\\LVec" 8406 "⃖")
+    ("wrisym" "mathaccent" "\\vec" 8407 "⃗" t)
+    ("wrisym" "mathalpha" "\\Micro" 181 "µ")
+    ("wrisym" "mathalpha" "\\Stigma" 986 "Ϛ")
+    ("wrisym" "mathalpha" "\\stigma" 987 "ϛ")
+    ("wrisym" "mathalpha" "\\Digamma" 988 "Ϝ")
+    ("wrisym" "mathalpha" "\\digamma" 989 "ϝ")
+    ("wrisym" "mathalpha" "\\Sampi" 992 "Ϡ")
+    ("wrisym" "mathalpha" "\\Angstroem" 8491 "Å")
+    ("wrisym" "mathalpha" "\\beth" 8502 "ℶ")
+    ("wrisym" "mathalpha" "\\gimel" 8503 "ℷ")
+    ("wrisym" "mathalpha" "\\daleth" 8504 "ℸ")
+    ("wrisym" "mathclose" "\\rrbracket" 10215 "⟧")
+    ("wrisym" "mathop" "\\fint" 10767 "⨏")
+    ("wrisym" "mathopen" "\\llbracket" 10214 "⟦")
+    ("wrisym" "mathord" "\\backepsilon" 1014 "϶")
+    ("wrisym" "mathord" "\\Euler" 8455 "ℇ")
+    ("wrisym" "mathord" "\\CapitalDifferentialD" 8517 "ⅅ")
+    ("wrisym" "mathord" "\\DifferentialD" 8518 "ⅆ")
+    ("wrisym" "mathord" "\\ExponetialE" 8519 "ⅇ")
+    ("wrisym" "mathord" "\\ComplexI" 8520 "ⅈ")
+    ("wrisym" "mathord" "\\ComplexJ" 8521 "ⅉ")
+    ("wrisym" "mathord" "\\rightangle" 8735 "∟")
+    ("wrisym" "mathord" "\\measuredangle" 8737 "∡")
+    ("wrisym" "mathord" "\\sphericalangle" 8738 "∢")
+    ("wrisym" "mathord" "\\therefore" 8756 "∴")
+    ("wrisym" "mathord" "\\because" 8757 "∵")
+    ("wrisym" "mathover" "\\overparen" 9180 "⏜")
+    ("wrisym" "mathrel" "\\leftrightarrow" 8596 "↔" t)
+    ("wrisym" "mathrel" "\\MapsUp" 8613 "↥")
+    ("wrisym" "mathrel" "\\MapsDown" 8615 "↧")
+    ("wrisym" "mathrel" "\\LeftArrowBar" 8676 "⇤")
+    ("wrisym" "mathrel" "\\RightArrowBar" 8677 "⇥")
+    ("wrisym" "mathrel" "\\nni" 8716 "∌")
+    ("wrisym" "mathrel" "\\Proportion" 8759 "∷")
+    ("wrisym" "mathrel" "\\nsim" 8769 "≁")
+    ("wrisym" "mathrel" "\\ncong" 8775 "≇")
+    ("wrisym" "mathrel" "\\napprox" 8777 "≉")
+    ("wrisym" "mathrel" "\\Bumpeq" 8782 "≎")
+    ("wrisym" "mathrel" "\\bumpeq" 8783 "≏")
+    ("wrisym" "mathrel" "\\nequiv" 8802 "≢")
+    ("wrisym" "mathrel" "\\nleq" 8816 "≰")
+    ("wrisym" "mathrel" "\\ngeq" 8817 "≱")
+    ("wrisym" "mathrel" "\\NotLessTilde" 8820 "≴")
+    ("wrisym" "mathrel" "\\NotGreaterTilde" 8821 "≵")
+    ("wrisym" "mathrel" "\\NotGreaterLess" 8825 "≹")
+    ("wrisym" "mathrel" "\\nprec" 8832 "⊀")
+    ("wrisym" "mathrel" "\\nsucc" 8833 "⊁")
+    ("wrisym" "mathrel" "\\nsubset" 8836 "⊄")
+    ("wrisym" "mathrel" "\\nsupset" 8837 "⊅")
+    ("wrisym" "mathrel" "\\nsubseteq" 8840 "⊈")
+    ("wrisym" "mathrel" "\\nsupseteq" 8841 "⊉")
+    ("wrisym" "mathrel" "\\npreceq" 8928 "⋠")
+    ("wrisym" "mathrel" "\\nsucceq" 8929 "⋡")
+    ("wrisym" "mathrel" "\\nsqsubseteq" 8930 "⋢")
+    ("wrisym" "mathrel" "\\nsqsupseteq" 8931 "⋣")
+    ("wrisym" "mathrel" "\\UpArrowBar" 10514 "⤒")
+    ("wrisym" "mathrel" "\\DownArrowBar" 10515 "⤓")
+    ("wrisym" "mathrel" "\\leftrightharpoonup" 10574 "⥎")
+    ("wrisym" "mathrel" "\\rightupdownharpoon" 10575 "⥏")
+    ("wrisym" "mathrel" "\\leftrightharpoondown" 10576 "⥐")
+    ("wrisym" "mathrel" "\\leftupdownharpoon" 10577 "⥑")
+    ("wrisym" "mathrel" "\\LeftVectorBar" 10578 "⥒")
+    ("wrisym" "mathrel" "\\RightVectorBar" 10579 "⥓")
+    ("wrisym" "mathrel" "\\RightUpVectorBar" 10580 "⥔")
+    ("wrisym" "mathrel" "\\RightDownVectorBar" 10581 "⥕")
+    ("wrisym" "mathrel" "\\DownLeftVectorBar" 10582 "⥖")
+    ("wrisym" "mathrel" "\\DownRightVectorBar" 10583 "⥗")
+    ("wrisym" "mathrel" "\\LeftUpVectorBar" 10584 "⥘")
+    ("wrisym" "mathrel" "\\LeftDownVectorBar" 10585 "⥙")
+    ("wrisym" "mathrel" "\\LeftTeeVector" 10586 "⥚")
+    ("wrisym" "mathrel" "\\RightTeeVector" 10587 "⥛")
+    ("wrisym" "mathrel" "\\RightUpTeeVector" 10588 "⥜")
+    ("wrisym" "mathrel" "\\RightDownTeeVector" 10589 "⥝")
+    ("wrisym" "mathrel" "\\DownLeftTeeVector" 10590 "⥞")
+    ("wrisym" "mathrel" "\\DownRightTeeVector" 10591 "⥟")
+    ("wrisym" "mathrel" "\\LeftUpTeeVector" 10592 "⥠")
+    ("wrisym" "mathrel" "\\LeftDownTeeVector" 10593 "⥡")
+    ("wrisym" "mathrel" "\\LeftTriangleBar" 10703 "⧏")
+    ("wrisym" "mathrel" "\\RightTriangleBar" 10704 "⧐")
+    ("wrisym" "mathrel" "\\Equal" 10869 "⩵")
+    ("wrisym" "mathrel" "\\Same" 10870 "⩶")
+    ("wrisym" "mathrel" "\\NestedLessLess" 10913 "⪡")
+    ("wrisym" "mathrel" "\\NestedGreaterGreater" 10914 "⪢")
+    ("wrisym" "mathunder" "\\underparen" 9181 "⏝"))
+  "Mathematical symbols from various LaTeX packages.
+Each element is of the form
+
+  (PACKAGE CLASS COMMAND UNICODE SYMBOL CONFLICT)
+
+Optional CONFLICT is a Boolean that indicates that this command
+conflicts or generates different symbol from math-unicode
+package.  Thus the generated LaTeX symbol might be different from
+5th element (symbol) in the list above.  See LUCR reference [1]
+for more details.  Package 'literal' corresponds to core (La)TeX.
+
+   [1] http://milde.users.sourceforge.net/LUCR/Math/";)
 
-(defun msl--read-LUCR-list (file &optional print)
-  "Read in LUCR list from [1] and optionally PRINT.
-LUCR list is a super-set of unicode-math list [2]. FILE is a
-local file from [3].
+(defconst math-symbol-list-subscripts
+  '(("subscript" "_0" 8320 "₀")
+    ("subscript" "_1" 8321 "₁")
+    ("subscript" "_2" 8322 "₂")
+    ("subscript" "_3" 8323 "₃")
+    ("subscript" "_4" 8324 "₄")
+    ("subscript" "_5" 8325 "₅")
+    ("subscript" "_6" 8326 "₆")
+    ("subscript" "_7" 8327 "₇")
+    ("subscript" "_8" 8328 "₈")
+    ("subscript" "_9" 8329 "₉")
+    ("subscript" "_+" 8330 "₊")
+    ("subscript" "_-" 8331 "₋")
+    ("subscript" "_=" 8332 "₌")
+    ("subscript" "_(" 8333 "₍")
+    ("subscript" "_)" 8334 "₎")
+    ("subscript" "_a" 8336 "ₐ")
+    ("subscript" "_e" 8337 "ₑ")
+    ("subscript" "_h" 8341 "ₕ")
+    ("subscript" "_i" 7522 "ᵢ")
+    ("subscript" "_j" 11388 "ⱼ")
+    ("subscript" "_k" 8342 "ₖ")
+    ("subscript" "_l" 8343 "ₗ")
+    ("subscript" "_m" 8344 "ₘ")
+    ("subscript" "_n" 8345 "ₙ")
+    ("subscript" "_o" 8338 "ₒ")
+    ("subscript" "_p" 8346 "ₚ")
+    ("subscript" "_r" 7523 "ᵣ")
+    ("subscript" "_s" 8347 "ₛ")
+    ("subscript" "_t" 8348 "ₜ")
+    ("subscript" "_u" 7524 "ᵤ")
+    ("subscript" "_v" 7525 "ᵥ")
+    ("subscript" "_x" 8339 "ₓ")
+    ("subscript" "_beta" 7526 "ᵦ")
+    ("subscript" "_gamma" 7527 "ᵧ")
+    ("subscript" "_rho" 7528 "ᵨ")
+    ("subscript" "_varphi" 7529 "ᵩ")
+    ("subscript" "_chi" 7530 "ᵪ"))
+  "List of unicode subscripts.
+See `math-symbol-list-extended' for the meaning of the entries.")
 
- [1] http://milde.users.sourceforge.net/LUCR/Math/
- [2] https://github.com/wspr/unicode-math/blob/master/unicode-math-table.tex
- [3] http://milde.users.sourceforge.net/LUCR/Math/data/unimathsymbols.txt
-"
-  (let* ((lines (with-temp-buffer
-                  (insert-file-contents file)
-                  (split-string (buffer-string) "\n" t)))
-         (symb (cl-loop for l in lines
-                        unless (string-match-p "^#" l)
-                        for words = (split-string l "\\^")
-                        if (> (length (nth 3 words)) 0)
-                        collect (list (nth 5 words) (nth 3 words) (nth 0 
words) (substring (nth 1 words) -1))
-                        ;; if (and (> (length (nth 3 words)) 0)
-                        ;;         (not (string= (nth 2 words) (nth 3 words))))
-                        ;; collect (list (nth 5 words) (nth 2 words) (nth 0 
words) (substring (nth 1 words) -1))
-                        ))
-         (symb (cl-sort symb (lambda (a b) (string-lessp (concat (car a) (cadr 
a)) (concat (car b) (cadr b)))))))
-    (if print
-        (let ((out-buff (get-buffer-create "*symbol-list*")))
-          (with-current-buffer out-buff
-            (erase-buffer)
-            (insert "(")
-            (dolist (w symb)
-              (insert (apply 'format "(\"%s\" \"\\%s\" #X%s \"%s\")\n" w )))
-            (insert ")")
-            (goto-char (point-min)))
-          (switch-to-buffer out-buff))
-      symb)))
+(defconst math-symbol-list-superscripts
+  '(("superscripts" "^0" 8304 "⁰")
+    ("superscripts" "^1" 185 "¹")
+    ("superscripts" "^2" 178 "²")
+    ("superscripts" "^3" 179 "³")
+    ("superscripts" "^4" 8308 "⁴")
+    ("superscripts" "^5" 8309 "⁵")
+    ("superscripts" "^6" 8310 "⁶")
+    ("superscripts" "^7" 8311 "⁷")
+    ("superscripts" "^8" 8312 "⁸")
+    ("superscripts" "^9" 8313 "⁹")
+    ("superscripts" "^+" 8314 "⁺")
+    ("superscripts" "^-" 8315 "⁻")
+    ("superscripts" "^=" 8316 "⁼")
+    ("superscripts" "^(" 8317 "⁽")
+    ("superscripts" "^)" 8318 "⁾")
+    ("superscripts" "^a" 7491 "ᵃ")
+    ("superscripts" "^b" 7495 "ᵇ")
+    ("superscripts" "^c" 7580 "ᶜ")
+    ("superscripts" "^d" 7496 "ᵈ")
+    ("superscripts" "^e" 7497 "ᵉ")
+    ("superscripts" "^f" 7584 "ᶠ")
+    ("superscripts" "^g" 7501 "ᵍ")
+    ("superscripts" "^h" 688 "ʰ")
+    ("superscripts" "^i" 8305 "ⁱ")
+    ("superscripts" "^j" 690 "ʲ")
+    ("superscripts" "^k" 7503 "ᵏ")
+    ("superscripts" "^l" 737 "ˡ")
+    ("superscripts" "^m" 7504 "ᵐ")
+    ("superscripts" "^n" 8319 "ⁿ")
+    ("superscripts" "^o" 7506 "ᵒ")
+    ("superscripts" "^p" 7510 "ᵖ")
+    ("superscripts" "^r" 691 "ʳ")
+    ("superscripts" "^s" 738 "ˢ")
+    ("superscripts" "^t" 7511 "ᵗ")
+    ("superscripts" "^u" 7512 "ᵘ")
+    ("superscripts" "^v" 7515 "ᵛ")
+    ("superscripts" "^w" 695 "ʷ")
+    ("superscripts" "^x" 739 "ˣ")
+    ("superscripts" "^y" 696 "ʸ")
+    ("superscripts" "^z" 7611 "ᶻ")
+    ("superscripts" "^A" 7468 "ᴬ")
+    ("superscripts" "^B" 7470 "ᴮ")
+    ("superscripts" "^D" 7472 "ᴰ")
+    ("superscripts" "^E" 7473 "ᴱ")
+    ("superscripts" "^G" 7475 "ᴳ")
+    ("superscripts" "^H" 7476 "ᴴ")
+    ("superscripts" "^I" 7477 "ᴵ")
+    ("superscripts" "^J" 7478 "ᴶ")
+    ("superscripts" "^K" 7479 "ᴷ")
+    ("superscripts" "^L" 7480 "ᴸ")
+    ("superscripts" "^M" 7481 "ᴹ")
+    ("superscripts" "^N" 7482 "ᴺ")
+    ("superscripts" "^O" 7484 "ᴼ")
+    ("superscripts" "^P" 7486 "ᴾ")
+    ("superscripts" "^R" 7487 "ᴿ")
+    ("superscripts" "^T" 7488 "ᵀ")
+    ("superscripts" "^U" 7489 "ᵁ")
+    ("superscripts" "^V" 11389 "ⱽ")
+    ("superscripts" "^W" 7490 "ᵂ")
+    ("superscripts" "^beta" 7517 "ᵝ")
+    ("superscripts" "^gamma" 7518 "ᵞ")
+    ("superscripts" "^delta" 7519 "ᵟ")
+    ("superscripts" "^theta" 7615 "ᶿ")
+    ("superscripts" "^iota" 7589 "ᶥ")
+    ("superscripts" "^varphi" 7520 "ᵠ")
+    ("superscripts" "^chi" 7521 "ᵡ"))
+  "List of unicode superscripts.
+See `math-symbol-list-extended' for the meaning of each entry.")
 
 (provide 'math-symbol-lists)
 ;;; math-symbol-lists.el ends here
diff --git a/packages/math-symbol-lists/msl-build.el 
b/packages/math-symbol-lists/msl-build.el
new file mode 100644
index 0000000..bb9f1b5
--- /dev/null
+++ b/packages/math-symbol-lists/msl-build.el
@@ -0,0 +1,168 @@
+;;; msl-build.el --- functions to build symbol lists  -*- lexical-binding:t -*-
+
+;; Copyright (C) 2019 Free Software Foundation, Inc.
+
+;; Author: Vitalie Spinu <address@hidden>
+
+;; This program is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU General Public License as
+;; published by the Free Software Foundation; either version 3, or
+;; (at your option) any later version.
+;;
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;
+
+;;; Code:
+
+(require 'cl-lib)
+
+;; IMPORT UTILITIES
+;; 
+;; Utilities for reading LUCR list from [1] and optionally PRINT. LUCR list is 
a
+;; super-set of unicode-math list [2]. FILE is a local file from [3].
+;; 
+;;  [1] http://milde.users.sourceforge.net/LUCR/Math/
+;;  [2] https://github.com/wspr/unicode-math/blob/master/unicode-math-table.tex
+;;  [3] http://milde.users.sourceforge.net/LUCR/Math/data/unimathsymbols.txt
+
+(defun msl--LUCR-parse-alias (str)
+  ;; (msl--LUCR-parse-alias "= \\Theta (-slantedGreek)")
+  ;; (msl--LUCR-parse-alias "= \\mathrm{\\Theta}")
+  (when (and str (msl--no-{}-p str))
+    (if (string-match " ?= ?\\(\\\\[^() ]+\\) *$" str)
+        (cons (match-string 1 str) "latex")
+      (if (string-match " ?= ?\\(\\\\[^() ]+\\) *(\\(.+\\)) *$" str)
+          (cons (match-string 1 str) (match-string 2 str))))))
+
+(defun msl--LUCR-parse-line (line)
+  (let* ((words (split-string line "\\^"))
+         (comment (nth 7 words))
+         (aliases (when comment
+                    (delq nil
+                          (mapcar #'msl--LUCR-parse-alias 
+                                  (split-string comment ", *")))))
+         (packages (when (> (length (nth 6 words)) 0)
+                     (split-string (nth 6 words) " +")))
+         (usymb (nth 1 words)))
+    (when (> (length usymb) 0)
+      (list (nth 0 words)                      ;; 0: HEX Code
+            (when (> (length usymb) 0)
+              (substring usymb -1)) ;; 1: Unicode Symbol
+            (nth 2 words)           ;; 2: La(TeX) command
+            (nth 3 words)           ;; 3: unicode-math package command
+            (nth 4 words)           ;; 4: Class
+            (nth 5 words)           ;; 5: category
+            packages                           ;; 6: packages (prefixed with _ 
are conflicts)
+            aliases))))                        ;; 7: aliases (conses of (alias 
. package))
+
+(defun msl--no-{}-p (str)
+  (not (string-match "[{}]" str)))
+
+(defun msl--LUCR-read-file (file)
+  (let ((lines (with-temp-buffer
+                 (insert-file-contents file)
+                 (split-string (buffer-string) "\n" t))))
+    (delq nil
+          (cl-loop for l in lines
+                   unless (string-match-p "^#" l)
+                   collect (msl--LUCR-parse-line l)))))
+
+(defun msl--LUCR-to-msl (lucr &optional latex alias no-parse)
+  "Convert LUCR list to this package conventions.
+If LATEX is non-nil, give package and latex command instead of
+unicode-math command. If ALIAS is non-nil give package and latex
+command from alias field. "
+  (cl-flet ((code (el) (if no-parse (car el) (string-to-number (car el) 16))))
+    (let ((sl (delq nil
+                    (cond
+                     (latex (mapcan (lambda (el)
+                                      (and (> (length (nth 2 el)) 0)
+                                           (> (length (nth 6 el)) 0)
+                                           (msl--no-{}-p (nth 2 el))
+                                           (mapcar (lambda (pkg)
+                                                     (list pkg (nth 5 el) (nth 
2 el) (code el) (nth 1 el)))
+                                                   (nth 6 el))))
+                                    lucr))
+                     (alias (mapcan (lambda (el)
+                                      (mapcan (lambda (pkg)
+                                                (and (> (length (car pkg)) 0)
+                                                     (msl--no-{}-p (car pkg))
+                                                     (mapcar (lambda (pkg2)
+                                                               (list pkg2 (nth 
5 el) (car pkg) (code el) (nth 1 el)))
+                                                             (split-string 
(cdr pkg) " +"))))
+                                              (nth 7 el)))
+                                    lucr))
+                     (t (mapcar (lambda (el)
+                                  (and (string-match-p "\\\\" (nth 3 el))
+                                       (list (nth 5 el) (nth 3 el) (code el) 
(nth 1 el))))
+                                lucr))))))
+      (when (or latex alias)
+        (setq sl (mapcar (lambda (el)
+                           (if (not (string-match-p "^-" (car el)))
+                               el
+                             (append (list (substring (car el) 1)) (cdr el) 
(list t))))
+                         sl)))
+      (cl-sort sl (lambda (a b) (string-lessp (concat (car a) (cadr a)) 
(concat (car b) (cadr b))))))))
+
+(defun msl--LUCR-filter-LaTeX-aliases (list)
+  (delq nil
+        (mapcar (lambda (el)
+                  (when (cl-some (lambda (al) 
+                                   (and (string= "latex" (cdr al))
+                                        (msl--no-{}-p (car al))))
+                                 (nth 7 el))
+                    el))
+                list)))
+
+;; this is how you build those
+(defun msl--build-things ()
+  (let* ((tt (msl--LUCR-read-file "./data/unimathsymbols.txt"))
+         ;; extra aliases for basic symbols
+         (tt2 (msl--LUCR-filter-LaTeX-aliases tt)))
+    (msl--LUCR-to-msl tt2 nil t)
+
+    ;; extended
+    (msl--LUCR-to-msl tt)
+    ;; packages
+    (msl--LUCR-to-msl tt t)
+    ;; aliases
+    (msl--LUCR-to-msl tt nil t)))
+
+
+;; SUBSCRIPTS and SUPERSCRIPTS
+
+(defvar msl-superscripts 
"ⱽª²³¹ºʰʱʲʳʴʵʶʷʸˠˡˢˣᴬᴭᴮᴯᴰᴱᴲᴳᴴᴵᴶᴷᴸᴹᴺᴻᴼᴽᴾᴿᵀᵁᵂᵃᵄᵅᵆᵇᵈᵉᵊᵋᵌᵍᵎᵏᵐᵑᵒᵓᵔᵕᵖᵗᵘᵙᵚᵛᵜᵝᵞᵟᵠᵡᵸᶛᶜᶝᶞᶟᶠᶡᶢᶣᶤᶥᶦᶧᶨᶩᶪᶫᶬᶭᶮᶯᶰᶱᶲᶳᶴᶵᶶᶷᶸᶹᶺᶻᶼᶽᶾᶿ⁰ⁱ⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ⁿ")
+
+;; taken from 
https://github.com/tpapp/company-unicode-subsuper/blob/master/company-unicode-subsuper.el
+(defconst msl-unicode-name-table
+  '((?β . "beta")
+    (?γ . "gamma")
+    (?δ . "delta")
+    (?θ . "theta")
+    (?ɩ . "iota")
+    (?φ . "varphi")                     ; varphi instead of phi, as in LaTeX
+    (?χ . "chi")
+    (?ρ . "rho")
+    (?− . "-"))                         ; replace #x2212 with minus sign
+  "table for entering characters outside the ASCII range. Follows conventions 
of LaTeX for Greek letters, but without the \\ prefix.")
+
+(defun msl-gen-scripted-alist (char-str type prefix)
+  (mapcar (lambda (c)
+            (let* ((dec (cdr (get-char-code-property c 'decomposition)))
+                   (plain (or (cdr (assoc (car dec) msl-unicode-name-table)) 
dec)))
+              (list type (concat prefix plain) c (char-to-string c))))
+          char-str))
+
+;; (msl-gen-scripted-alist "₀₁₂₃₄₅₆₇₈₉₊₋₌₍₎ₐₑₕᵢⱼₖₗₘₙₒₚᵣₛₜᵤᵥₓᵦᵧᵨᵩᵪ" "subscript" 
"_")
+;; (msl-gen-scripted-alist 
"⁰¹²³⁴⁵⁶⁷⁸⁹⁺⁻⁼⁽⁾ᵃᵇᶜᵈᵉᶠᵍʰⁱʲᵏˡᵐⁿᵒᵖʳˢᵗᵘᵛʷˣʸᶻᴬᴮᴰᴱᴳᴴᴵᴶᴷᴸᴹᴺᴼᴾᴿᵀᵁⱽᵂᵝᵞᵟᶿᶥᵠᵡ" 
"superscripts" "^")
+
+;;; msl-build.el ends here
diff --git a/packages/math-symbol-lists/readme.md 
b/packages/math-symbol-lists/readme.md
index ca45e5f..8c1a72f 100644
--- a/packages/math-symbol-lists/readme.md
+++ b/packages/math-symbol-lists/readme.md
@@ -1,4 +1,15 @@
 This is a "storage" package used by completion engines such as 
`company-math.el` and `ac-math.el`.
 
-Defined (a)lists are: `math-symbol-list-basic`, `math-symbol-list-extended`,
-`math-symbol-list-latex-commands`.
+Defined (a)lists are:
+
+ `math-symbol-list-basic`
+ `math-symbol-list-extended`
+ `math-symbol-list-packages`
+ `math-symbol-list-latex-commands`
+
+
+## Known packages that use these lists
+
+  - [company-math](https://github.com/vspinu/company-math)
+  - [ac-math](https://github.com/vspinu/ac-math)
+  - [unicode-math-input](https://github.com/tpapp/unicode-math-input)
diff --git a/packages/mines/mines.el b/packages/mines/mines.el
index 00604ea..9562e09 100644
--- a/packages/mines/mines.el
+++ b/packages/mines/mines.el
@@ -1,6 +1,6 @@
 ;;; mines.el --- Minesweeper game -*- lexical-binding: t -*-
 
-;; Copyright (C) 2017 Free Software Foundation, Inc.
+;; Copyright (C) 2017-2019 Free Software Foundation, Inc.
 
 ;; Author: Tino Calancha <address@hidden>
 ;; Created: 2017-10-28
@@ -38,8 +38,8 @@
 ;;    contain a number: the number of bombs at distance 1 from this cell.
 ;;    If you reveal the content of this cell, then this number is shown.
 ;;
-;; 3. Cells without a bomb at distance > 1 from any bomb contain '@'.
-;;    If you reveal the content of this cell, then '@' is shown and
+;; 3. Cells without a bomb at distance > 1 from any bomb contain ' '.
+;;    If you reveal the content of this cell, then ' ' is shown and
 ;;    all adjacent cells are recursively revealed.
 ;;
 ;;
@@ -54,6 +54,12 @@
 
 ;;; Code:
 
+;; TODO:
+;; - Arrange for the remaining number of mines to be displayed in the
+;;   modeline.
+;; - Center the board in the window (when smaller than the window).
+;; - Add colors to the numbers
+
 (require 'gamegrid)
 (require 'cl-lib)
 (require 'cookie1) ; For `cookie-shuffle-vector'.
@@ -66,26 +72,33 @@
   :prefix "mines-")
 
 (defcustom mines-protect-first-move t
-  "Non-nil avoid game over in the first cell revealed."
+  "If non-nil, make sure first move reveals an empty cell."
   :type 'boolean
   :version "27.1")
 
 (defcustom mines-mode-hook nil
   "Hook run by mines mode."
   :type 'hook
-  :group 'mines
   :version "27.1")
 
+(defcustom mines-auto-flag t
+  "Auto-add flags when they're obvious."
+  :type 'boolean)
+
 (defvar mines-uncover-cell-char ?.
+  ;; FIXME: "uncover" means to remove the cover, so this is counter-intuitive,
+  ;; because I think of this "." as covering the cell and `mines-dig' as
+  ;; uncovering them.  Similarly the use of "uncovered" in the Commentary
+  ;; is confusing.
   "Char to display uncover cells.")
 
 (defvar mines-flagged-cell-char ?!
   "Char to display flagged cells as maybe having a mine.")
 
-(defvar mines-empty-cell-char ?@
+(defvar mines-empty-cell-char ?\s
   "Char to display a cell without mine nor numbers.")
 
-(defvar mines-empty-cell-mine ?x
+(defvar mines-empty-cell-mine ?x ;FIXME: Use ?💣 when a glyph is available!
   "Char to display a cell with a mine.")
 
 (defvar mines-buffer nil "Buffer where play minesweeper.")
@@ -116,13 +129,20 @@ If `custom' then ask user for these numbers."
            (set sym val)))
   :version "27.1")
 
-(defvar mines-grid (make-vector mines-number-cells nil)
-  "Game configuration.")
+(defvar mines-grid nil
+  "Game configuration.
+Each cell can hold either:
+- `bomb' to mean there's a bomb at that position.
+- nil if there's no bomb here nor in any neighbor.
+- an integer indicating the number of neighbors with bombs.")
 
-(defvar mines-state (make-vector mines-number-cells nil)
-  "Game state.")
+(defvar mines-state nil
+  "Game state.
+Each cell can be either:
+- t to mean it's covered
+- nil to mean it's been uncovered
+- `flag' to mean that it's covered and flag'd.")
 
-(defvar mines-mine-positions nil "Mine positions.")
 (defvar mines-gap-positions nil "Empty cell positions.")
 (defvar mines-init-time nil "Initial time of the game.")
 (defvar mines-end-time nil "End time of the game.")
@@ -185,9 +205,9 @@ If `custom' then ask user for these numbers."
 
 (defun mines-goto (idx)
   "Move to cell at IDX."
-  (goto-char 1)
+  (goto-char (point-min))
   (let ((cidx (mines-current-pos)))
-    (ignore-errors
+    (ignore-errors ;;FIXME: Why?
       (while (not (= cidx idx))
         (goto-char (next-single-property-change (point) 'idx))
         (setq cidx (mines-current-pos)))
@@ -211,7 +231,7 @@ If `custom' then ask user for these numbers."
 (defun mines-go-left ()
   "Move 1 cell to the left."
   (interactive)
-  (if (= (point) (point-max))
+  (if (eobp)
       (goto-char (1- (point)))
     (let* ((idx (mines-current-pos))
            (row-col (mines-index-2-matrix idx))
@@ -253,105 +273,75 @@ If `custom' then ask user for these numbers."
 
 ;;; Main Functions.
 
-(defun mines--find-pos (elt vec)
-  (let ((pos 0) res)
-    (while (setq pos
-                 (cl-position-if
-                  (lambda (x)
-                    (cond ((null elt)
-                           ;; Check if the cell is empty or flagged.
-                           (or (null x) (eq mines-flagged-cell-char x)))
-                          (t (eq elt x))))
-                  vec :start pos))
-      (push pos res)
-      (cl-incf pos))
-    (nreverse res)))
+(defun mines--count-covered ()
+  (let ((count 0))
+  (dotimes (idx mines-number-cells)
+    (when (aref mines-state idx) (cl-incf count)))
+  count))
 
 (defun mines-start ()
   "Set mine positions for a new game."
   ;; Erase vector.
   (setq mines-grid (make-vector mines-number-cells nil))
-  (setq mines-state (make-vector mines-number-cells nil))
+  (setq mines-state (make-vector mines-number-cells t))
   (let ((numbers (append
                   (cookie-shuffle-vector
-                   (vconcat (number-sequence 0 (1- mines-number-cells)))) 
nil)))
+                   (vconcat (number-sequence 0 (1- mines-number-cells))))
+                  nil)))
     (dotimes (_ mines-number-mines)
-      (aset mines-grid (pop numbers) t))
-    (setq mines-mine-positions (mines--find-pos t mines-grid))))
-
-(defun mines--near-bombs (i j)
-  (let ((numb 0))
-    ;; Horizontal neighbours.
-    (when (> j 0)
-      (and (aref mines-grid (mines-matrix-2-index i (1- j))) (cl-incf numb)))
-    (when (< j (1- mines-number-cols))
-      (and (aref mines-grid (mines-matrix-2-index i (1+ j))) (cl-incf numb)))
-    ;; Previous row neighbours.
-    (when (> i 0)
-      (and (aref mines-grid (mines-matrix-2-index (1- i) j)) (cl-incf numb))
-      (when (> j 0)
-        (and (aref mines-grid (mines-matrix-2-index (1- i) (1- j))) (cl-incf 
numb)))
-      (when (< j (1- mines-number-cols))
-        (and (aref mines-grid (mines-matrix-2-index (1- i) (1+ j))) (cl-incf 
numb))))
-    ;; Next row neighbours.
-    (when (< i (1- mines-number-rows))
-      (and (aref mines-grid (mines-matrix-2-index (1+ i) j)) (cl-incf numb))
-      (when (> j 0)
-        (and (aref mines-grid (mines-matrix-2-index (1+ i) (1- j))) (cl-incf 
numb)))
-      (when (< j (1- mines-number-cols))
-        (and (aref mines-grid (mines-matrix-2-index (1+ i) (1+ j))) (cl-incf 
numb))))
-    numb))
+      (aset mines-grid (pop numbers) 'bomb))))
+
+(defun mines--near-bombs (idx)
+  (let ((n 0))
+    (dolist (nidx (mines-get-neighbours idx))
+      (when (eq 'bomb (aref mines-grid nidx))
+        (cl-incf n)))
+    n))
 
 (defun mines-set-numbers ()
   "Set numbers for cells adjacent to cells with bombs."
-  (let ((tmp-grid (copy-sequence mines-grid)))
-    (dotimes (i mines-number-rows)
-      (dotimes (j mines-number-cols)
-        (let ((idx (mines-matrix-2-index i j)))
-          (unless (aref mines-grid idx)
-            (let ((numb (mines--near-bombs i j)))
-              (unless (zerop numb) (aset tmp-grid idx numb)))))))
-    (setq mines-grid tmp-grid)))
+  (dotimes (i mines-number-rows)
+    (dotimes (j mines-number-cols)
+      (let ((idx (mines-matrix-2-index i j)))
+        (unless (eq 'bomb (aref mines-grid idx))
+          (let ((n (mines--near-bombs idx)))
+            (setf (aref mines-grid idx) (unless (zerop n) n))))))))
 
 (defun mines-list-game-conditions ()
   "Return number of rows, columns and mines for current game."
   (interactive)
-  (when (mines-mines-mode-p)
-    (let ((rows mines-number-rows)
-          (cols mines-number-cols)
-          (mines mines-number-mines))
-      (message "%d rows x %d columns with %d mines"
-               rows cols mines)
-      (list rows cols mines))))
-
-(defun mines--insert (elt idx &optional props null-str flag-or-unflag)
+  (let ((rows mines-number-rows)
+        (cols mines-number-cols)
+        (mines mines-number-mines))
+    (message "%d rows x %d columns with %d mines"
+             rows cols mines)
+    (list rows cols mines)))
+
+(defun mines--insert (elt idx)
   (let* ((face nil)
-         (str (cond ((null elt)
-                     (if (null null-str)
-                         (format " %c " mines-uncover-cell-char)
-                       ;; Uncover all its uncovered neighbours.
-                       (save-excursion
-                         (dolist (x (mines-get-neighbours idx))
-                           (mines-goto x)
-                           (unless (get-text-property (point) 'done)
-                             (push x mines-undone-neighbours))))
-                       (format " %s " null-str)))
-                    ((eq flag-or-unflag 'unflag)
-                     (format " %c " mines-uncover-cell-char))
-                    ((and (memq 'flag props) (eq flag-or-unflag 'flag))
+         (char (cond ((null elt)
+                     mines-empty-cell-char)
+                    ((eq elt t)
+                     mines-uncover-cell-char)
+                    ((eq elt 'flag)
                      (setq face 'warning)
-                     (format " %c " mines-flagged-cell-char))
-                    ((integerp elt) (format " %d " elt))
-                    (t (format " %c " mines-empty-cell-mine))))
+                     mines-flagged-cell-char)
+                    ((integerp elt)
+                     ;; FIXME: Set face here so each number gets
+                     ;; a different color.
+                     (+ ?0 elt))
+                    (t
+                     (cl-assert (eq elt 'bomb))
+                     (setq face 'error)
+                     mines-empty-cell-mine)))
          (pos (point))
          (inhibit-read-only t))
-    (if face
-        (insert (propertize str 'font-lock-face face))
-      (insert str))
+    (insert (format " %c " char))
+    (add-text-properties pos (point) `(mouse-face ,(list 'highlight)))
     (when (= (cadr (mines-index-2-matrix idx)) (1- mines-number-cols))
       (backward-delete-char 1)
       (insert "\n"))
-    (add-text-properties pos (point) props)
+    (add-text-properties pos (point) `(idx ,idx font-lock-face ,face))
     (goto-char (1+ (point)))))
 
 (defun mines-show ()
@@ -367,39 +357,31 @@ If `custom' then ask user for these numbers."
       (dotimes (i mines-number-rows)
         (dotimes (j mines-number-cols)
           (let* ((idx (+ (* i mines-number-cols) j))
-                 (elt (aref mines-state idx))
-                 (pos (point)))
-            (mines--insert elt idx)
-            (put-text-property pos (point) 'idx idx)
-            (when (= j (1- mines-number-cols))
-              (delete-char -1)
-              (insert "\n"))
-            (put-text-property (1- (point)) (point) 'idx idx))))))
+                 (elt (aref mines-state idx)))
+            (mines--insert (or elt (aref mines-grid idx)) idx))))))
   (display-buffer mines-buffer '(display-buffer-same-window))
   (set-window-point (get-buffer-window mines-buffer) mines-start-pos))
 
 (defun mines-current-pos ()
   "Return the index of the cell at point."
-  (get-text-property (point) 'idx))
+  (or (get-text-property (point) 'idx) (user-error "Wrong position!")))
 
 (defun mines--show-all ()
   "Show all mines after game over."
-  (dolist (to mines-mine-positions)
-    (save-excursion
-      (mines-goto to)
-      ;; Drop all flags before show the mines; that drop the flag faces.
-      (when (eq (following-char) mines-flagged-cell-char)
-        (mines--update-cell to mines-uncover-cell-char 'unflag))
-      (mines-dig 'show-mines))))
+  (let ((mines-auto-flag nil))
+    (dotimes (idx mines-number-cells)
+      (when (and (eq 'bomb (aref mines-grid idx))
+                 (aref mines-state idx))
+        (mines--update-cell idx nil)))))
 
 (defun mines-game-over ()
   "Offer play a new game after uncover a bomb."
   (let ((inhibit-read-only t))
+    (setq mines-game-over t)
     (put-text-property (point) (1+ (point)) 'face 'error)
     (mines--show-all)
     (if (yes-or-no-p "Game over! Play again? ")
-        (mines)
-      (setq mines-game-over t))))
+        (mines))))
 
 ;; Extracted from `gamegrid-add-score-with-update-game-score'.
 (defun mines--score-file (file)
@@ -495,137 +477,143 @@ After sorting, games completed with shorter times 
appear first."
     (message (format "Well done %s, you have completed it in %s!"
                      user-login-name elapsed-time))))
 
-(defun mines-flag-cell ()
+(defun mines-flag-cell (&optional event)
   "Flag current cell as having a mine.
 If called again then unflag it."
-  (interactive)
+  (interactive (list last-nonmenu-event))
+  (if event (posn-set-point (event-end event)))
   (let* ((idx (mines-current-pos))
-         (done (get-text-property (point) 'done))
-         (flagged (get-text-property (point) 'flag)))
-    (unless idx (user-error "Wrong position!"))
-    (unless done
-      (cond (flagged
-             (mines--update-cell idx mines-uncover-cell-char 'unflag))
-            (t (mines--update-cell idx mines-flagged-cell-char 'flag))))))
-
-(defun mines--update-cell (idx elt &optional flag-or-unflag)
-  (if (zerop idx)
-      (goto-char 1)
-    (goto-char (previous-single-property-change (point) 'idx)))
-  (let ((to (or (next-single-property-change (point) 'idx) (point-max)))
-        (prop (append (text-properties-at (point))
-                      (if flag-or-unflag
-                          `(flag ,(eq flag-or-unflag 'flag))
-                        '(done t))))
-        (inhibit-read-only t))
-    (when (eq flag-or-unflag 'unflag)
-      (setq prop `(idx ,idx)))
-    ;; If unflagging, then remove additional text properties.
-    (when (eq flag-or-unflag 'unflag)
-      (remove-text-properties (point) to '(font-lock-face flag)))
-    (delete-region (point) to)
-    (mines--insert elt idx prop (string mines-empty-cell-char) flag-or-unflag)
-    (unless flag-or-unflag (aset mines-state idx '@))
+         (state (aref mines-state idx)))
+    (if (null state)
+        (message "Can't flag once it's uncovered")
+      ;; Toggle the flag state.
+      (mines--update-cell idx (if (eq state t) 'flag t)))))
+
+(defun mines--update-cell (idx newstate)
+  (cl-assert (aref mines-state idx))    ;Once uncovered, can't change it!
+  (cl-assert (not (eql newstate (aref mines-state idx)))) ;Actual change!
+  (mines-goto idx)
+  (let* ((from (or (previous-single-property-change (point) 'idx) (point-min)))
+         (to (or (next-single-property-change (point) 'idx) (point-max)))
+         (inhibit-read-only t)
+         (elt (or newstate (aref mines-grid idx))))
+    (setf (aref mines-state idx) newstate)
+    (when (null elt)
+      ;; Uncovered an empty cell: uncover neighbors.
+      (dolist (nidx (mines-get-neighbours idx))
+        (when (aref mines-state nidx)   ;Still covered.
+          (cl-pushnew nidx mines-undone-neighbours))))
+    (delete-region from to)
+    (mines--insert elt idx)
+    (when (and mines-auto-flag (eq newstate nil))
+      (dolist (nidx (cons idx (mines-get-neighbours idx)))
+        (when (null (aref mines-state nidx))
+          (let ((nc 0)                  ;Number of neighbors still covered.
+                (nb (aref mines-grid nidx))) ;Number of bomb in neighbors.
+            (when (integerp nb)
+              (dolist (nidx (mines-get-neighbours nidx))
+                (unless (null (aref mines-state nidx))
+                  (cl-incf nc)))
+              (when (eql nc nb)
+                (dolist (nidx (mines-get-neighbours nidx))
+                  (when (eq t (aref mines-state nidx))
+                    (mines--update-cell nidx 'flag)))))))))
     (mines-goto idx)))
 
-(defun mines-dig (&optional show-mines)
+(defun mines--clear-first-move (idx)
+  "Make sure IDX has no bomb and zero neighbors with bombs."
+  ;; Getting a bomb on the first move is just annoying.
+  ;; And getting a cell with a number is frustrating because it still
+  ;; doesn't let you use reasoning rather than luck to make progress.
+  ;; So let's make sure that the first move actually uncovers a pristine
+  ;; area so the user doesn't need luck to get started.
+  (let ((val (aref mines-grid idx)))
+    (cl-assert val)
+    (let ((cells (mines-get-neighbours idx))
+          (bombs (if (integerp val) val (1+ (mines--near-bombs idx)))))
+      (push idx cells)
+      (while (> bombs 0)
+        (let (nidx)
+          (while (progn (setq nidx (random mines-number-cells))
+                        (or (eq 'bomb (aref mines-grid nidx))
+                            (memql nidx cells))))
+          (setf (aref mines-grid nidx) 'bomb) ;Add bomb elsewhere.
+          (cl-decf bombs)))
+      (dolist (cell cells)
+        (setf (aref mines-grid cell) nil)) ;Remove nearby bombs.
+      ;; Update the numbers on neighbour cells.
+      (mines-set-numbers))))
+
+(defun mines-dig (&optional event)
   "Reveal the content of the cell at point."
-  (interactive)
-  (when (mines-mines-mode-p)
-    (if mines-game-over
-        (user-error "Current game is over.  Try `%s' to start a new one"
-                    (substitute-command-keys "\\[mines]"))
-      (skip-chars-forward "[:blank:]") ; Set point in the center of the cell.
-      (cl-labels ((uncover-fn
-                   ()
-                   (let ((idx (mines-current-pos))
-                         (inhibit-read-only t)
-                         (done (get-text-property (point) 'done)))
-                     (cond ((null idx) (user-error "Wrong position!"))
-                           (done nil) ; Already updated.
-                           (t
-                            (let ((elt (aref mines-grid idx)))
-                              (cl-flet ((game-end-fn
-                                         ()
-                                         ;; Check for end of game.
-                                         (cond ((and (not show-mines) (eq elt 
t))
-                                                ;; We lost the game; show all 
the mines.
-                                                (mines-game-over))
-                                               (t
-                                                (when (and (not show-mines) 
(mines-end-p))
-                                                  (mines-game-completed))))))
-                              ;; Don't end the game in the first trial when
-                              ;; `mines-protect-first-move' is non-nil.
-                              (when (and (eq elt t) mines-protect-first-move 
(mines-first-move-p))
-                                (let ((ok-pos (cl-position-if-not (lambda (x) 
(eq t x)) mines-grid)))
-                                  (message "Avoided game over in the first 
move")
-                                  ;; Update mine positions.
-                                  (setf (nth (cl-position idx 
mines-mine-positions)
-                                             mines-mine-positions) ok-pos)
-                                  ;; We must update `mines-grid' further: the 
neighbour cells
-                                  ;; to IDX must show now a lower number of 
near bombs; the
-                                  ;; cells near the new position of the bomb 
must increase their
-                                  ;; numbers.
-                                  (setq mines-grid (make-vector 
mines-number-cells nil))
-                                  ;; Add the mine positions.
-                                  (dolist (pos mines-mine-positions)
-                                    (aset mines-grid pos t))
-                                  ;; Update the numbers on neighbour cells.
-                                  (mines-set-numbers)
-                                  ;; Update current element.
-                                  (setq elt (aref mines-grid idx))))
-                              (cond ((and (not show-mines) (eq 
(following-char) mines-flagged-cell-char))
-                                     ;; If the cell is flagged ask for 
confirmation.
-                                     (cond ((yes-or-no-p "This cell is flagged 
as having a bomb.  Uncover it? ")
-                                            ;; Unflag first.
-                                            (mines--update-cell idx 
mines-uncover-cell-char 'unflag)
-                                            (mines--update-cell idx elt)
-                                            (game-end-fn))
-                                           (t (message "OK, canceled"))))
-                                    (t
-                                     (mines--update-cell idx elt)
-                                     (game-end-fn))))))))))
-        (uncover-fn)
-        (when mines-undone-neighbours
-          (while mines-undone-neighbours
-            (let ((to (pop mines-undone-neighbours)))
-              (save-excursion
-                (mines-goto to)
-                (uncover-fn)))))))))
+  (interactive (list last-nonmenu-event))
+  (if event (posn-set-point (event-end event)))
+  (if mines-game-over
+      (user-error "Current game is over.  Try `%s' to start a new one"
+                  (substitute-command-keys "\\[mines]"))
+    (mines-goto (mines-current-pos))    ; Set point in the center of the cell.
+    (cl-flet ((uncover-fn
+               ()
+               (let* ((idx (mines-current-pos))
+                      (inhibit-read-only t)
+                      (state (aref mines-state idx)))
+                 (cond ((null state)
+                        (message "Nothing new here")) ; Already updated.
+                       ((and (eq 'flag state)
+                             ;; If the cell is flagged ask for confirmation.
+                             ;; FIXME: I personally find this prompt annoying.
+                             (not (yes-or-no-p "This cell is flagged as having 
a bomb.  Uncover it? ")))
+                        (message "OK, canceled"))
+                       (t
+                        (let ((elt (aref mines-grid idx)))
+                          ;; Don't end the game in the first trial when
+                          ;; `mines-protect-first-move' is non-nil.
+                          (when (and mines-protect-first-move
+                                     (mines-first-move-p)
+                                     elt)
+                            (mines--clear-first-move idx)
+                            (setq elt nil))
+                          (mines--update-cell idx nil)
+                          ;; Check for end of game.
+                          (cond ((eq elt 'bomb) (mines-game-over))
+                                ((mines-end-p) (mines-game-completed)))))))))
+      (uncover-fn)
+      (when mines-undone-neighbours
+        (while mines-undone-neighbours
+          (let ((to (pop mines-undone-neighbours)))
+            (save-excursion
+              (mines-goto to)
+              (uncover-fn))))))))
 
 ;; `read-multiple-choice' requires Emacs > 25.
 (defun mines--read-multiple-choice ()
-  (let (choice)
-    (if (> emacs-major-version 25)
-        (setq choice
-              (read-multiple-choice "Choose difficulty level: "
-                                    '((?e "Easy" "8 columns x 8 rows and 10 
mines")
-                                      (?m "Medium" "16 columns x 16 rows and 
40 mines")
-                                      (?h "Hard" "30 columns x 16 rows and 99 
mines")
-                                      (?c "Custom" "C columns x R rows and M 
mines"))))
-      (let ((help-msg "Choose difficulty level: 
+  (let ((choices
+         '((?e "Easy" "8 columns x 8 rows and 10 mines")
+           (?m "Medium" "16 columns x 16 rows and 40 mines")
+           (?h "Hard" "30 columns x 16 rows and 99 mines")
+           (?c "Custom" "C columns x R rows and M mines"))))
+    (if (fboundp 'read-multiple-choice)
+        (read-multiple-choice "Choose difficulty level: " choices)
+      (let* ((help-msg "Choose difficulty level:\s
 
 e: [e] Easy              m: Medium                h: [h] Hard              c: 
[c] Custom
 8 columns x 8 rows       16 columns x 16 rows     30 columns x 16 rows     C 
columns x R rows
 and 10 mines             and 40 mines             and 99 mines             and 
M mines
 ")                                                                           
-            (answer
-             (read-char "Choose difficulty level:  ([e] Easy, [m] Medium, [h] 
Hard, [c] Custom, [?]): ")))
+             (prompt "Choose difficulty level:  ([e] Easy, [m] Medium, [h] 
Hard, [c] Custom, [?]): ")
+             (answer (read-char prompt)))
         (cl-flet ((show-help ()
-                             (when (eq answer ??)
-                               (let ((help-buf (get-buffer-create "*Multiple 
Choice Help*")))
-                                 (setq answer nil)
-                                 (with-current-buffer help-buf
-                                   (and (zerop (buffer-size)) (insert 
help-msg))
-                                   (display-buffer help-buf))))))
-          (if (eq answer ??) (show-help))
-          (while (not (memq answer '(?e ?m ?h ?c ??)))
-            (setq answer (read-char "Choose difficulty level:  ([e] Easy, [m] 
Medium, [h] Hard, [c] Custom, [?]): "))
-            (show-help))
-          (cond ((eq answer ?e) (list ?e "Easy" "8 columns x 8 rows and 10 
mines"))
-                ((eq answer ?m) (list ?m "Medium" "16 columns x 16 rows and 40 
mines"))
-                ((eq answer ?h) (list ?h "Hard" "30 columns x 16 rows and 99 
mines"))
-                ((eq answer ?c) (list ?c "Custom" "C columns x R rows and M 
mines"))))))))
+                     (when (eq answer ??)
+                       (let ((help-buf (get-buffer-create
+                                        "*Multiple Choice Help*")))
+                         (setq answer nil)
+                         (with-current-buffer help-buf
+                           (and (zerop (buffer-size)) (insert help-msg))
+                           (display-buffer help-buf))))))
+          (while (not (assq answer choices))
+            (if (eq answer ??) (show-help) (ding))
+            (setq answer (read-char prompt)))
+          (assq answer choices))))))
 
 ;;;###autoload
 (defun mines (&optional arg)
@@ -653,67 +641,68 @@ Called with a prefix prompt for the difficulty level."
   (mines-set-numbers)
   (mines-show))
 
+(defvar mines-mode-map
+  (let ((map (make-sparse-keymap)))
+    (define-key map [right] 'mines-go-right)
+    (define-key map "f" 'mines-go-right)
+    (define-key map "l" 'mines-go-right)
+    (define-key map [left] 'mines-go-left)
+    (define-key map "b" 'mines-go-left)
+    (define-key map "h" 'mines-go-left)
+    (define-key map "p" 'mines-go-up)
+    (define-key map "k" 'mines-go-up)
+    (define-key map [up] 'mines-go-up)
+    (define-key map [down] 'mines-go-down)
+    (define-key map "n" 'mines-go-down)
+    (define-key map "j" 'mines-go-down)
+    (define-key map "x" 'mines-dig)
+    ;; FIXME: I think SPC would be a natural binding for `mines-dig'.
+    (define-key map "c" 'mines-dig)
+    (define-key map [mouse-1] 'mines-dig)
+    (define-key map [mouse-3] 'mines-flag-cell)
+    ;; (define-key map "a" 'mines-flag-cell)
+    (define-key map "1" 'mines-flag-cell)
+    (define-key map "m" 'mines-flag-cell)
+    (define-key map "r" 'mines)
+    map))
+
 (define-derived-mode mines-mode special-mode "mines"
   "Major mode for playing Minesweeper.
 
 The target of the game is discover which cells contain mines.
-You reveal the content of the mine at point with \\[mines-dig\].
+You reveal the content of the mine at point with \\[mines-dig].
 1. If you look at one cell containing a mine you lost.
 
 2. A cell without a mine with N neighbour cells containing mines
    shows N when you look at it.
 
 3. A cell without a mine and without neighbour cells having mines
-   shows the character `@' when you look at it; all adjacent cells
+   shows the character ` ' when you look at it; all adjacent cells
    are recursively revealed.
 
 For instance, following is a possible configuration:
 
-@ @ @ @ @
-1 2 2 1 @
-1 x x 1 @
-1 2 2 1 @
-@ @ @ @ @
+    1 2 2 1
+    1 x x 1
+    1 2 2 1
 
 You can move between cells using the arrow keys, or using vi
 or Emacs keystrokes (↑↓→←) = (kjlh) = (pnfb).
 
-You can flag a cell as having a mine with \\[mines-flag-cell\]; if you
+You can flag a cell as having a mine with \\[mines-flag-cell]; if you
 call this command again, the cell is unflagged."
-  (let ((map mines-mode-map))
-    (define-key map [right] 'mines-go-right)
-    (define-key map "f" 'mines-go-right)
-    (define-key map "l" 'mines-go-right)
-    (define-key map [left] 'mines-go-left)
-    (define-key map "b" 'mines-go-left)
-    (define-key map "h" 'mines-go-left)
-    (define-key map "p" 'mines-go-up)
-    (define-key map "k" 'mines-go-up)
-    (define-key map [up] 'mines-go-up)
-    (define-key map [down] 'mines-go-down)
-    (define-key map "n" 'mines-go-down)
-    (define-key map "j" 'mines-go-down)
-    (define-key map "x" 'mines-dig)
-    (define-key map "c" 'mines-dig)
-    ;; (define-key map "a" 'mines-flag-cell)
-    (define-key map "1" 'mines-flag-cell)
-    (define-key map "m" 'mines-flag-cell)
-    (define-key map "r" 'mines)))
+  )
 
 
 ;;; Predicates
 
-(defun mines-mines-mode-p ()
-  "Return non-nil if the current buffer is in `mines-mode'."
-  (derived-mode-p 'mines-mode))
-
 (defun mines-end-p ()
   "Return non-nil when the game is completed."
-  (= mines-number-mines (length (mines--find-pos nil mines-state))))
+  (= mines-number-mines (mines--count-covered)))
 
 (defun mines-first-move-p ()
   "Return non-nil if any cell has been revealed yet."
-  (cl-every 'null mines-state))
+  (cl-every #'identity mines-state))
 
 
 (provide 'mines)
diff --git a/packages/nhexl-mode/nhexl-mode.el 
b/packages/nhexl-mode/nhexl-mode.el
index 27dc342..3a116f0 100644
--- a/packages/nhexl-mode/nhexl-mode.el
+++ b/packages/nhexl-mode/nhexl-mode.el
@@ -1,10 +1,10 @@
 ;;; nhexl-mode.el --- Minor mode to edit files via hex-dump format  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2010, 2012, 2016, 2018  Free Software Foundation, Inc.
+;; Copyright (C) 2010-2019  Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords: data
-;; Version: 1.2
+;; Version: 1.3
 ;; Package-Requires: ((emacs "24.4") (cl-lib "0.5"))
 
 ;; This program is free software; you can redistribute it and/or modify
@@ -18,7 +18,7 @@
 ;; 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/>.
+;; along with this program.  If not, see <https://www.gnu.org/licenses/>.
 
 ;;; Commentary:
 
@@ -34,8 +34,7 @@
 ;;
 ;; - `nhexl-nibble-edit-mode': a "nibble editor" minor mode.
 ;;   where the cursor pretends to advance by nibbles (4-bit) and the
-;;   self-insertion keys (which only work for hex-digits) will only modify the
-;;   nibble under point.
+;;   self-insertion keys let you edit the hex digits directly.
 ;;
 ;; - `nhexl-overwrite-only-mode': a minor mode to try and avoid moving text.
 ;;   In this minor mode, not only self-inserting keys overwrite existing
@@ -63,6 +62,12 @@
 ;;     their cursor on this line).
 ;;   FWIW, the original `hexl-mode' has the same kind of problem.
 
+;;;; Wishlist:
+
+;; - An equivalent to hexl-mode's `hexl-bits'.
+;; - Always reload the file with find-file-literally instead
+;;   of editing the multibyte representation?
+
 ;;; Code:
 
 (eval-when-compile (require 'cl-lib))
@@ -122,7 +127,7 @@ Otherwise they are applied unconditionally."
 ;;   rather than only the ascii area!
 ;; FIXME: Isearch in this minor mode should try and "search in the hex area".
 ;; FIXME: Kill&yank in this minor mode should work on the hex representation
-;;   of the buffer's content!
+;;   of the buffer's content (and should obey overwrite-mode)!
 
 (defvar nhexl-nibble-edit-mode-map
   (let ((map (make-sparse-keymap)))
@@ -133,6 +138,10 @@ Otherwise they are applied unconditionally."
     (define-key map [remap backward-char] #'nhexl-nibble-backward)
     map))
 
+;; FIXME: Reuben Thomas pointed out that the user may not think of it as
+;; "editing nibbles" but "editing the hex codes" instead.
+;; Maybe we should rename `nhexl-nibble-edit-mode'?
+(defalias 'nhexl-hex-edit-mode #'nhexl-nibble-edit-mode)
 (define-minor-mode nhexl-nibble-edit-mode
   "Minor mode to edit the hex nibbles in `nhexl-mode'."
   :global nil
@@ -209,14 +218,16 @@ and TICKS is the `buffer-chars-modified-tick' for which 
this was valid.")
   (interactive)
   (let* ((max (nhexl--nibble-max))
          (nib (min max (nhexl--nibble)))
-         (char (following-char))
+         (char (if (and (not overwrite-mode) (= nib 0)) 0 (following-char)))
          (hex (format "%02x" char))
          (nhex (concat (substring hex 0 nib)
                        (string last-command-event)
                        (substring hex (1+ nib))))
          (nchar (string-to-number nhex 16)))
     (insert nchar)
-    (unless (eobp) (delete-char 1))
+    (unless (or (eobp)
+                (and (not overwrite-mode) (= nib 0)))
+      (delete-char 1))
     (if (= max nib) nil
       (backward-char 1)
       (nhexl--nibble-set (1+ nib)))))
@@ -343,6 +354,10 @@ existing text, if needed with 
`nhexl-overwrite-clear-byte'."
     (define-key map [remap mouse-set-point] #'nhexl-mouse-set-point)
     (define-key map [remap mouse-drag-region] #'nhexl-mouse-drag-region)
     (define-key map [remap mouse-set-region] #'nhexl-mouse-set-region)
+    ;; FIXME: Should we really make it hard to use non-binary `overwrite-mode'?
+    ;; Or should we go even further and remap it to
+    ;; `nhexl-overwrite-only-mode'?
+    (define-key map [remap overwrite-mode] #'binary-overwrite-mode)
     ;; FIXME: Find a key binding for nhexl-nibble-edit-mode!
     map))
 
diff --git a/packages/nlinum/nlinum.el b/packages/nlinum/nlinum.el
index 97efee8..4f0e02f 100644
--- a/packages/nlinum/nlinum.el
+++ b/packages/nlinum/nlinum.el
@@ -1,10 +1,10 @@
 ;;; nlinum.el --- Show line numbers in the margin  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2012, 2014-2017  Free Software Foundation, Inc.
+;; Copyright (C) 2012, 2014-2019  Free Software Foundation, Inc.
 
 ;; Author: Stefan Monnier <address@hidden>
 ;; Keywords: convenience
-;; Version: 1.8.1
+;; Version: 1.9
 
 ;; 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
@@ -24,7 +24,10 @@
 ;; This is like linum-mode, but uses jit-lock to be (hopefully)
 ;; more efficient.
 
-;;; News:
+;;;; News:
+
+;; v1.9:
+;; - Add `nlinu-widen'.
 
 ;; v1.8:
 ;; - Add `nlinum-use-right-margin'.
@@ -43,6 +46,12 @@
 ;; - New global mode `global-nlinum-mode'.
 ;; - New config var `nlinum-format-function'.
 
+;;;; Known bugs:
+;; - When narrowed, there can be a "bogus" line number that appears at the
+;;   very end of the buffer.
+;; - After widening, the current line's number may stay stale until the
+;;   next command.
+
 ;;; Code:
 
 (require 'linum)                        ;For its face
@@ -61,6 +70,10 @@ When non-nil, the current line number is highlighted in 
`nlinum-current-line'
 face."
   :type 'boolean)
 
+(defcustom nlinum-widen nil
+  "If nil, count lines within the current narrowing only."
+  :type 'boolean)
+
 (defface nlinum-current-line
   '((t :inherit linum :weight bold))
   "Face for displaying current line.")
@@ -95,7 +108,9 @@ Linum mode is a buffer-local minor mode."
   (remove-hook 'text-scale-mode-hook #'nlinum--setup-window :local)
   (remove-hook 'after-change-functions #'nlinum--after-change :local)
   (remove-hook 'post-command-hook #'nlinum--current-line-update :local)
+  (remove-hook 'pre-redisplay-functions #'nlinum--check-narrowing :local)
   (kill-local-variable 'nlinum--line-number-cache)
+  (kill-local-variable 'nlinum--last-point-min)
   (remove-overlays (point-min) (point-max) 'nlinum t)
   ;; (kill-local-variable 'nlinum--ol-counter)
   (kill-local-variable 'nlinum--width)
@@ -112,9 +127,9 @@ Linum mode is a buffer-local minor mode."
     (add-hook 'text-scale-mode-hook #'nlinum--setup-window nil :local)
     (add-hook 'window-configuration-change-hook #'nlinum--setup-window nil t)
     (add-hook 'after-change-functions #'nlinum--after-change nil :local)
+    (add-hook 'pre-redisplay-functions #'nlinum--check-narrowing nil :local)
     (if nlinum-highlight-current-line
-        (add-hook 'post-command-hook #'nlinum--current-line-update nil :local)
-      (remove-hook 'post-command-hook #'nlinum--current-line-update :local))
+        (add-hook 'post-command-hook #'nlinum--current-line-update nil :local))
     (jit-lock-register #'nlinum--region :contextual))
   (nlinum--setup-windows))
 
@@ -171,17 +186,23 @@ Linum mode is a buffer-local minor mode."
 
 (defun nlinum--flush ()
   (nlinum--setup-windows)
-  ;; (kill-local-variable 'nlinum--ol-counter)
-  (remove-overlays (point-min) (point-max) 'nlinum t)
-  (run-with-timer 0 nil
-                  (lambda (buf)
-                    (with-current-buffer buf
-                      (with-silent-modifications
-                        ;; FIXME: only remove `fontified' on those parts of the
-                        ;; buffer that had an nlinum overlay!
-                        (remove-text-properties
-                         (point-min) (point-max) '(fontified)))))
-                  (current-buffer)))
+  (save-excursion
+    (save-restriction
+      (widen)
+      ;; (kill-local-variable 'nlinum--ol-counter)
+      (remove-overlays (point-min) (point-max) 'nlinum t)
+      (run-with-timer 0 nil
+                      (lambda (buf)
+                        (with-current-buffer buf
+                          (with-silent-modifications
+                            ;; FIXME: only remove `fontified' on those parts of
+                            ;; the buffer that had an nlinum overlay!
+                            (save-excursion
+                              (save-restriction
+                                (widen)
+                                (remove-text-properties
+                                 (point-min) (point-max) '(fontified)))))))
+                      (current-buffer)))))
 
 (defun nlinum--current-line-update ()
   "Update current line number."
@@ -271,22 +292,42 @@ Linum mode is a buffer-local minor mode."
 (defun nlinum--after-change (&rest _args)
   (setq nlinum--line-number-cache nil))
 
+(defvar nlinum--last-point-min nil)
+(make-variable-buffer-local 'nlinum--last-point-min)
+
+(defun nlinum--check-narrowing (&optional _win)
+  ;; FIXME: We should also flush if nlinum-widen was changed.
+  ;; Note: if nlinum-widen is t the flush is still needed when
+  ;; point-min is/was in the middle of a line.
+  (unless (eql nlinum--last-point-min (point-min))
+    (unless nlinum-widen (setq nlinum--line-number-cache nil))
+    (nlinum--current-line-update)
+    (setq nlinum--last-point-min (point-min))
+    (nlinum--flush)))
+
 (defun nlinum--line-number-at-pos ()
   "Like `line-number-at-pos' but sped up with a cache.
 Only works right if point is at BOL."
   ;; (cl-assert (bolp))
-  (let ((pos
-         (if (and nlinum--line-number-cache
-                  (> (- (point) (point-min))
-                     (abs (- (point) (car nlinum--line-number-cache)))))
-             (funcall (if (> (point) (car nlinum--line-number-cache))
-                          #'+ #'-)
-                      (cdr nlinum--line-number-cache)
-                      (count-lines (point) (car nlinum--line-number-cache)))
-           (line-number-at-pos))))
-    ;;(assert (= pos (line-number-at-pos)))
-    (setq nlinum--line-number-cache (cons (point) pos))
-    pos))
+  (if nlinum-widen
+      (save-excursion
+        (save-restriction
+          (widen)
+          (forward-line 0)              ;In case (point-min) was not at BOL.
+          (let ((nlinum-widen nil))
+            (nlinum--line-number-at-pos))))
+    (let ((pos
+           (if (and nlinum--line-number-cache
+                    (> (- (point) (point-min))
+                       (abs (- (point) (car nlinum--line-number-cache)))))
+               (funcall (if (> (point) (car nlinum--line-number-cache))
+                            #'+ #'-)
+                        (cdr nlinum--line-number-cache)
+                        (count-lines (point) (car nlinum--line-number-cache)))
+             (line-number-at-pos))))
+      ;;(assert (= pos (line-number-at-pos)))
+      (setq nlinum--line-number-cache (cons (point) pos))
+      pos)))
 
 (defcustom nlinum-format "%d"
   "Format of the line numbers.
diff --git a/packages/on-screen/on-screen.el b/packages/on-screen/on-screen.el
index 954591a..58a80cc 100644
--- a/packages/on-screen/on-screen.el
+++ b/packages/on-screen/on-screen.el
@@ -7,7 +7,7 @@
 ;; Created: 24 Jan 2013
 ;; Keywords: convenience
 ;; URL: https://github.com/michael-heerdegen/on-screen.el
-;; Version: 1.3.2
+;; Version: 1.3.3
 ;; Package-Requires: ((cl-lib "0"))
 
 
@@ -526,7 +526,9 @@ This should normally go to `window-scroll-functions'."
              ((timerp timer)
               (timer-set-time timer (timer-relative-time (current-time) 
on-screen-delay)))
              ((or (not area)
-                  (= display-start s1)))
+                  (= display-start s1)
+                  ;; Deleting a large portion of the buffer caused window 
scroll
+                  (not (<= (point-min) s1 (point-max)))))
              ((and (numberp on-screen-drawing-threshold)
                    (< (abs (apply #'count-lines (sort (list display-start s1) 
#'<)))
                       on-screen-drawing-threshold)))
@@ -551,7 +553,7 @@ This should normally go to `window-scroll-functions'."
                    ;;scrolling down near buffer end
                    (setq s2 nil))
 
-                 (cond 
+                 (cond
                   ((equal method '(shadow . nil))
                    (if (and s1 s2) (list (make-overlay s1 s2)) ()))
                   ((eq (car method) 'shadow)
diff --git a/packages/poker/poker.el b/packages/poker/poker.el
index fbfa78c..285015a 100644
--- a/packages/poker/poker.el
+++ b/packages/poker/poker.el
@@ -425,7 +425,7 @@ HAND is a list of 5 poker cards."
                                           (poker-rank-to-plural-string three)
                                           (poker-rank-to-string high)
                                           (poker-rank-to-string kicker)))
-    (`(2 ,two1 ,two2 ,high 0 0) (format "wwo pairs of %s and %s, %s high"
+    (`(2 ,two1 ,two2 ,high 0 0) (format "two pairs of %s and %s, %s high"
                                    (poker-rank-to-plural-string two1)
                                    (poker-rank-to-plural-string two2)
                                    (poker-rank-to-string high)))
diff --git a/packages/rcirc-menu/rcirc-menu.el 
b/packages/rcirc-menu/rcirc-menu.el
index 17019f8..7b5a73a 100644
--- a/packages/rcirc-menu/rcirc-menu.el
+++ b/packages/rcirc-menu/rcirc-menu.el
@@ -1,6 +1,6 @@
-;;; rcirc-menu --- A menu of all your rcirc connections
+;;; rcirc-menu.el --- A menu of all your rcirc connections
 
-;; Copyright (C) 2017  Free Software Foundation, Inc.
+;; Copyright (C) 2017-2019  Free Software Foundation, Inc.
 
 ;; Author: Alex Schroeder <address@hidden>
 ;; Maintainer: Alex Schroeder <address@hidden>
diff --git a/packages/realgud/.gitignore b/packages/realgud/.gitignore
deleted file mode 100644
index 843d43b..0000000
--- a/packages/realgud/.gitignore
+++ /dev/null
@@ -1,27 +0,0 @@
-*.elc
-*~
-/*-pkg.el
-/*.tar.gz
-/.cask/
-/.python-version
-/README
-/aclocal.m4
-/autom4te.cache
-/common.mk
-/config.log
-/config.status
-/configure
-/configure.lineno
-/elpa
-/how-to-make-a-release.txt
-/install-sh
-/missing
-/node_modules
-/realgud-autoloads.el
-/test/npm-debug.log
-/tmp
-Makefile
-Makefile.in
-elc-stamp
-elc-temp
-script
diff --git a/packages/realgud/.travis.yml b/packages/realgud/.travis.yml
deleted file mode 100644
index 0515aa0..0000000
--- a/packages/realgud/.travis.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-language: emacs-lisp
-
-env:
-  - EMACS=emacs24
-
-install:
-  - if [ "$EMACS" = 'emacs24' ]; then
-      sudo add-apt-repository -y ppa:cassou/emacs &&
-      sudo apt-get -qq update &&
-      sudo apt-get -qq -f install &&
-      sudo apt-get -qq install emacs24 emacs24-el;
-    fi
-
-# run the tests
-script:
-  - NO_CHECK_EMACS_PACKAGES=1 /bin/bash ./autogen.sh && cd test && make 
check-elget
diff --git a/packages/realgud/AUTHORS b/packages/realgud/AUTHORS
deleted file mode 100644
index 60fc84e..0000000
--- a/packages/realgud/AUTHORS
+++ /dev/null
@@ -1 +0,0 @@
-address@hidden
diff --git a/packages/realgud/COPYING b/packages/realgud/COPYING
deleted file mode 100644
index 94a9ed0..0000000
--- a/packages/realgud/COPYING
+++ /dev/null
@@ -1,674 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/packages/realgud/Cask b/packages/realgud/Cask
deleted file mode 100644
index 29fa0ff..0000000
--- a/packages/realgud/Cask
+++ /dev/null
@@ -1,10 +0,0 @@
-(source gnu)
-(source melpa)
-
-(package-file "realgud.el")
-
-(depends-on "load-relative")
-(depends-on "loc-changes")
-
-(development
-  (depends-on "test-simple"))
diff --git a/packages/realgud/ChangeLog b/packages/realgud/ChangeLog
deleted file mode 100644
index 4220559..0000000
--- a/packages/realgud/ChangeLog
+++ /dev/null
@@ -1,6549 +0,0 @@
-2016-08-04  rocky <address@hidden>
-
-       * ChangeLog, Makefile.am, configure.ac: make install packaging Fixes
-       #146. version 1.4.3
-
-2016-08-04  R. Bernstein <address@hidden>
-
-       * : Merge pull request #145 from dunn/make_install configure.ac: 
default lispdir relative to prefix
-
-2016-08-04  rocky <address@hidden>
-
-       * INSTALL, INSTALL.md, Makefile.am, test/bt-helper.el: Fix up
-       INSTALL. Tolerate older emacs
-
-2016-08-04  rocky <address@hidden>
-
-       * .gitignore, THANKS: Administrivia
-
-2016-08-04  rocky <address@hidden>
-
-       * Makefile.am, autogen.sh, common.mk, common.mk.in, configure.ac,
-       realgud.el, test/Makefile.am, test/bt-helper.el,
-       test/test-buf-cmd.el, test/test-regexp-gdb.el,
-       test/test-regexp-rdebug.el: Set EMACSLOADPATH in make. remove more
-       .el lint
-
-2016-08-04  Stefan Monnier <address@hidden>
-
-       * ChangeLog, realgud.el, realgud/common/attach.el,
-       realgud/common/backtrack-mode.el, realgud/common/buffer/info.el,
-       realgud/common/cmds.el, realgud/common/fringe.el,
-       realgud/common/helper.el, realgud/common/loc.el,
-       realgud/common/lochist.el, realgud/common/regexp.el,
-       realgud/common/run.el, realgud/common/send.el,
-       realgud/common/track-mode.el, realgud/common/track.el,
-       realgud/debugger/bashdb/core.el, realgud/debugger/bashdb/init.el,
-       realgud/debugger/bashdb/track-mode.el,
-       realgud/debugger/gdb/core.el, realgud/debugger/gdb/gdb.el,
-       realgud/debugger/gdb/init.el, realgud/debugger/gdb/track-mode.el,
-       realgud/debugger/gub/core.el, realgud/debugger/gub/init.el,
-       realgud/debugger/gub/track-mode.el, realgud/debugger/ipdb/core.el,
-       realgud/debugger/ipdb/init.el, realgud/debugger/ipdb/track-mode.el,
-       realgud/debugger/jdb/backtrack-mode.el,
-       realgud/debugger/jdb/core.el, realgud/debugger/jdb/init.el,
-       realgud/debugger/jdb/jdb.el, realgud/debugger/jdb/track-mode.el,
-       realgud/debugger/kshdb/core.el, realgud/debugger/kshdb/init.el,
-       realgud/debugger/kshdb/track-mode.el,
-       realgud/debugger/nodejs/core.el, realgud/debugger/nodejs/init.el,
-       realgud/debugger/nodejs/track-mode.el,
-       realgud/debugger/pdb/core.el, realgud/debugger/pdb/init.el,
-       realgud/debugger/pdb/pdb.el, realgud/debugger/pdb/track-mode.el,
-       realgud/debugger/perldb/core.el, realgud/debugger/perldb/init.el,
-       realgud/debugger/perldb/track-mode.el,
-       realgud/debugger/rdebug/core.el, realgud/debugger/rdebug/init.el,
-       realgud/debugger/rdebug/track-mode.el,
-       realgud/debugger/remake/core.el, realgud/debugger/remake/init.el,
-       realgud/debugger/remake/track-mode.el,
-       realgud/debugger/trepan.pl/backtrack-mode.el,
-       realgud/debugger/trepan.pl/core.el,
-       realgud/debugger/trepan.pl/init.el,
-       realgud/debugger/trepan.pl/track-mode.el,
-       realgud/debugger/trepan/backtrack-mode.el,
-       realgud/debugger/trepan/core.el, realgud/debugger/trepan/init.el,
-       realgud/debugger/trepan/track-mode.el,
-       realgud/debugger/trepan2/core.el, realgud/debugger/trepan2/init.el,
-       realgud/debugger/trepan2/track-mode.el,
-       realgud/debugger/trepan3k/core.el,
-       realgud/debugger/trepan3k/init.el,
-       realgud/debugger/trepan3k/track-mode.el,
-       realgud/debugger/trepanjs/backtrack-mode.el,
-       realgud/debugger/trepanjs/core.el,
-       realgud/debugger/trepanjs/init.el,
-       realgud/debugger/trepanjs/track-mode.el,
-       realgud/debugger/zshdb/core.el, realgud/debugger/zshdb/init.el,
-       realgud/debugger/zshdb/track-mode.el, realgud/lang/js.el,
-       realgud/lang/perl.el, realgud/lang/posix-shell.el,
-       realgud/lang/python.el, realgud/lang/ruby.el,
-       test/test-common-helper.el, test/test-core.el,
-       test/test-regexp-rdebug.el, test/test-regexp-ruby.el,
-       test/test-regexp.el, test/test-track.el: cl -> cl-lib and other
-       goodies * packages/realgud/realgud.el: Add missing cl-lib dependency *
-           <most-other-files>: Remove unneeded (require 'cl) and replace the
-       other ones with (require 'cl-lib) * 
packages/realgud/test/test-common-helper.el (realgud-test-info): * 
packages/realgud/realgud/common/regexp.el (realgud-loc-pat): * 
packages/realgud/realgud/common/lochist.el (realgud-loc-hist): * 
packages/realgud/realgud/common/buffer/info.el
-       (realgud-backtrace-info): * packages/realgud/realgud/common/loc.el 
(realgud-loc): Use
-       `cl-defstruct'.  * packages/realgud/test/test-track.el: * 
packages/realgud/test/test-regexp.el: * 
packages/realgud/test/test-regexp-ruby.el: * 
packages/realgud/test/test-regexp-rdebug.el: * 
packages/realgud/test/test-core.el: Use lexical-binding rather
-       than lexical-let.  * packages/realgud/realgud/common/run.el 
(realgud:run-process,
-       realgud:run-debugger): Use cl-remove-if and cl-remove-duplicates.  * 
packages/realgud/realgud/common/track.el (realgud-track-bp-loc):
-       Fix typo.
-
-2016-08-04  rocky <address@hidden>
-
-       * realgud/common/core.el: (require 'files) is unnecessary -
-       preloaded
-
-2016-08-04  rocky <address@hidden>
-
-       * realgud/common/buffer/command.el, realgud/common/core.el,
-       realgud/common/file.el, realgud/common/run.el,
-       realgud/common/track.el, realgud/debugger/bashdb/init.el,
-       realgud/debugger/jdb/init.el, realgud/debugger/kshdb/init.el,
-       realgud/debugger/remake/init.el, realgud/debugger/trepan.pl/init.el: 
-       Add starting directory in info and...  set top-frame-num in various 
debuggers
-
-2016-08-03  rocky <address@hidden>
-
-       * : commit d7bac581f04756582078cd9ea45e5a28406ee05c Author: rocky
-       <address@hidden> Date:   Wed Aug 3 20:49:31 2016 -0400
-
-2016-08-03  rocky <address@hidden>
-
-       * : commit 3551ab20b46d0cb460c2a4d0c5c2f1c0e107a840 Author: rocky
-       <address@hidden> Date:   Wed Aug 3 06:24:21 2016 -0400
-
-2016-08-02  rocky <address@hidden>
-
-       * realgud.el: I like the word "extensible"
-
-2016-08-02  rocky <address@hidden>
-
-       * realgud/common/core.el, realgud/debugger/gdb/core.el: Avoid
-       reading a binary as a source file * follow symlinks before running 
"file" * don't find-file-noselect if file is large
-
-2016-08-02  rocky <address@hidden>
-
-       * realgud.el: Version 1.4.3
-
-2016-08-02  rocky <address@hidden>
-
-       * : commit b626f31bad820737c634fbac6fae078508b8566c Author: rocky
-       <address@hidden> Date:   Tue Aug 2 11:08:56 2016 -0400
-
-2016-08-02  rocky <address@hidden>
-
-       * realgud/debugger/zshdb/core.el, realgud/debugger/zshdb/zshdb.el,
-       test/test-zshdb.el: Remove ANSI schmutz from zshdb output
-
-2016-08-01  rocky <address@hidden>
-
-       * : commit bbb86b7010cac192f05c274c57115423f8cc5cc7 Author: rocky
-       <address@hidden> Date:   Mon Aug 1 14:44:12 2016 -0400
-
-2016-08-01  R. Bernstein <address@hidden>
-
-       * : Merge pull request #144 from npostavs/nosearch Don't add 
subdirectories to load-path
-
-2016-08-01  rocky <address@hidden>
-
-       * realgud.el: ELPA packaging Add lingo to express including 
subdirectories
-
-2016-07-31  rocky <address@hidden>
-
-       * README.md, realgud.el, realgud/common/buffer/command.el,
-       realgud/debugger/bashdb/bashdb.el, realgud/debugger/gdb/core.el,
-       realgud/debugger/gdb/gdb.el, realgud/debugger/ipdb/ipdb.el,
-       realgud/debugger/jdb/jdb.el, realgud/debugger/kshdb/kshdb.el,
-       realgud/debugger/nodejs/nodejs.el, realgud/debugger/pdb/pdb.el,
-       realgud/debugger/perldb/perldb.el,
-       realgud/debugger/rdebug/rdebug.el,
-       realgud/debugger/remake/remake.el,
-       realgud/debugger/trepan.pl/trepanpl.el,
-       realgud/debugger/trepan/trepan.el,
-       realgud/debugger/trepan3k/trepan3k.el,
-       realgud/debugger/trepanjs/trepanjs.el,
-       realgud/debugger/zshdb/zshdb.el: Reinstate 24.3. That checks out and
-       works
-
-2016-07-31  rocky <address@hidden>
-
-       * realgud.el, realgud/common/buffer/command.el,
-       realgud/debugger/bashdb/bashdb.el, realgud/debugger/gdb/gdb.el,
-       realgud/debugger/jdb/jdb.el, realgud/debugger/nodejs/nodejs.el,
-       realgud/debugger/pdb/pdb.el, realgud/debugger/perldb/perldb.el,
-       realgud/debugger/rdebug/rdebug.el,
-       realgud/debugger/trepan.pl/trepanpl.el,
-       realgud/debugger/zshdb/zshdb.el: Increase minimum versions recorded
-
-2016-07-31  R. Bernstein <address@hidden>
-
-       * : Merge pull request #142 from dunn/helper-cl common/helper: require 
cl
-
-2016-07-31  Alex Dunn <address@hidden>
-
-       * realgud/common/helper.el: common/helper: require cl Otherwise `make 
check` can lead to this error:
-       https://gist.github.com/dunn/ee1080dd3b32aaf8594d3c8368da7bde
-
-2016-07-31  Alex Dunn <address@hidden>
-
-       * el-get-install.el: el-get-install.el: remove list-utils Follow-up to
-
-       
https://github.com/realgud/realgud/commit/b5d5f30780a2bcd13c90f3bf3643ef1509e8ee0band
-
-       
https://github.com/realgud/realgud/commit/a8bd8678db59322dac1015576716c4ebb2c628df
-
-2016-07-31  rocky <address@hidden>
-
-       * realgud.el: Sync with elpa
-
-2016-07-31  rocky <address@hidden>
-
-       * configure.ac, realgud/common/run.el: Remove use of list-utils
-       package
-
-2016-07-30  rocky <address@hidden>
-
-       * : commit b5d5f30780a2bcd13c90f3bf3643ef1509e8ee0b Author: rocky
-       <address@hidden> Date:   Sat Jul 30 16:17:53 2016 -0400
-
-2016-07-30  rocky <address@hidden>
-
-       * : commit a3fd8167747d311c316e096a7b357a305f421f85 Author: rocky
-       <address@hidden> Date:   Sat Jul 30 15:58:18 2016 -0400
-
-2016-07-30  rocky <address@hidden>
-
-       * configure.ac, realgud.el: Release 1.4.0 which will be on melpa
-       stable and elpa
-
-2016-07-30  rocky <address@hidden>
-
-       * el-get-install.el: Need to put back el-get-install.el for travis
-
-2016-07-30  rocky <address@hidden>
-
-       * .gitignore, Makefile.am, cr_exceptions.txt, el-get-install.el,
-       etc/screenshot.el, realgud/common/bp-image-data.el,
-       realgud/common/buffer/helper.el, realgud/common/lang.el,
-       realgud/common/lochist.el, realgud/common/menu.el,
-       realgud/common/regexp.el, realgud/common/reset.el,
-       realgud/common/utils.el, realgud/common/window.el,
-       realgud/debugger/bashdb/track-mode.el,
-       realgud/debugger/gub/core.el, realgud/debugger/gub/track-mode.el,
-       realgud/debugger/ipdb/core.el, realgud/debugger/jdb/core.el,
-       realgud/debugger/jdb/file.el, realgud/debugger/jdb/init.el,
-       realgud/debugger/jdb/jdb.el, realgud/debugger/jdb/track-mode.el,
-       realgud/debugger/kshdb/core.el, realgud/debugger/kshdb/init.el,
-       realgud/debugger/kshdb/kshdb.el, realgud/debugger/nodejs/nodejs.el,
-       realgud/debugger/pdb/core.el, realgud/debugger/perldb/core.el,
-       realgud/debugger/perldb/perldb.el, realgud/debugger/rdebug/core.el,
-       realgud/debugger/rdebug/init.el, realgud/debugger/rdebug/rdebug.el,
-       realgud/debugger/rdebug/track-mode.el,
-       realgud/debugger/remake/core.el,
-       realgud/debugger/remake/track-mode.el,
-       realgud/debugger/trepan.pl/backtrack-mode.el,
-       realgud/debugger/trepan.pl/core.el,
-       realgud/debugger/trepan.pl/track-mode.el,
-       realgud/debugger/trepan.pl/trepanpl.el,
-       realgud/debugger/trepan/core.el,
-       realgud/debugger/trepan/track-mode.el,
-       realgud/debugger/trepan/trepan.el,
-       realgud/debugger/trepan2/init.el,
-       realgud/debugger/trepan2/trepan2.el,
-       realgud/debugger/trepan3k/trepan3k.el,
-       realgud/debugger/zshdb/core.el,
-       realgud/debugger/zshdb/track-mode.el,
-       realgud/debugger/zshdb/zshdb.el, realgud/lang/perl.el,
-       realgud/lang/ruby.el: Finish FSF Copyright assignments
-
-2016-07-30  rocky <address@hidden>
-
-       * Makefile.am, copyright_exceptions, realgud/common/core.el,
-       realgud/common/custom.el, realgud/common/file.el,
-       realgud/common/follow.el, realgud/common/fringe.el,
-       realgud/common/helper.el, realgud/common/init.el,
-       realgud/debugger/trepan2/core.el,
-       realgud/debugger/trepan2/track-mode.el,
-       realgud/debugger/trepan3k/core.el: Assign more copyrights to FSF
-
-2016-07-12  rocky <address@hidden>
-
-       * realgud/common/shortkey.el: One more FSF copyright assignment
-
-2016-06-28  R. Bernstein <address@hidden>
-
-       * : Merge pull request #137 from realgud/gdb-mi-warning Warn if gdb 
--interpreter=mi or -i mi is used
-
-2016-06-28  rocky <address@hidden>
-
-       * realgud/debugger/gdb/core.el, test/test-gdb-core.el: Warn if gdb
-       --interpreter=mi or -i mi is used
-
-2016-06-27  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/bashdb.el, realgud/debugger/gdb/core.el,
-       realgud/debugger/trepan/init.el, realgud/debugger/trepan2/core.el,
-       realgud/debugger/trepan2/init.el,
-       realgud/debugger/trepan2/track-mode.el,
-       realgud/debugger/trepan2/trepan2.el,
-       realgud/debugger/trepan3k/core.el,
-       realgud/debugger/trepan3k/init.el,
-       realgud/debugger/trepan3k/trepan3k.el: Reassign more copyrights to
-       FSF
-
-2016-06-18  rocky <address@hidden>
-
-       * realgud/common/run.el: Another small doc change
-
-2016-06-18  rocky <address@hidden>
-
-       * realgud/common/run.el: Improve realgud:run-process docstring
-
-2016-06-17  rocky <address@hidden>
-
-       * realgud/common/buffer/source.el: Remove code added by mistake
-
-2016-06-15  rocky <address@hidden>
-
-       * realgud/debugger/gdb/gdb.el: Simpler change to previous commit
-
-2016-06-15  rocky <address@hidden>
-
-       * realgud/common/bp.el, realgud/common/buffer/backtrace.el,
-       realgud/common/buffer/command.el, realgud/common/buffer/info.el,
-       realgud/common/buffer/source.el, realgud/common/run.el,
-       realgud/common/track.el, realgud/debugger/gdb/gdb.el: Correct
-       realgud:gdb-pid-associate call Fixes #132 * Add more FSF copyrights.  * 
some 't -> t * track.el: missing prototype in enable/disable use
-
-2016-06-13  rocky <address@hidden>
-
-       * realgud/debugger/trepan.pl/init.el, test/test-regexp-trepanpl.el: 
-       Correct enable/disable pattern for trepan.pl
-
-2016-06-13  Derek <address@hidden>
-
-       * realgud/common/key.el: Don't bind standard keys when disabled by
-       config (#131) The realgud-populate-common-fn-keys-standard map function 
was always
-       run, even when realgud-populate-common-fn-keys-function was
-       configured as nil. Fixes #129
-
-2016-06-12  R. Bernstein <address@hidden>
-
-       * : Merge pull request #130 from realgud/enable-disable Enable disable
-
-2016-06-12  rocky <address@hidden>
-
-       * : commit bc1f4ba4944ff83f19cbf02ff0dd5414589a15ec Author: rocky
-       <address@hidden> Date:   Sun Jun 12 18:32:23 2016 -0400
-
-2016-06-12  Clément Pit--Claudel <address@hidden>
-
-       * realgud/debugger/ipdb/init.el, realgud/debugger/pdb/init.el: Relax
-       deleted breakpoint regexp in PDB to support Python 2 and 3 In Python 3, 
the deleted breakpoint message include a file path and
-       a line number; it doesn't in Python 2.  Related to #115; thanks 
@ilohmar for reporting!
-
-2016-06-08  rocky <address@hidden>
-
-       * realgud/common/cmds.el: Restart should be a confirm command too.
-
-2016-06-08  rocky <address@hidden>
-
-       * realgud/common/run.el, realgud/debugger/ipdb/core.el,
-       realgud/debugger/ipdb/ipdb.el, realgud/debugger/pdb/core.el,
-       realgud/debugger/pdb/pdb.el: Fill out pdb-remote execution Fixes #128 ?
-
-2016-06-08  R. Bernstein <address@hidden>
-
-       * : Merge pull request #126 from realgud/103-jump 103 jump
-
-2016-06-07  rocky <address@hidden>
-
-       * realgud/common/cmds.el: Confirm on debugger quit.
-
-2016-06-06  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/init.el, realgud/debugger/nodejs/init.el,
-       realgud/debugger/perldb/init.el, realgud/debugger/remake/init.el,
-       realgud/debugger/trepan.pl/init.el, realgud/debugger/zshdb/init.el: 
-       Mark debuggers that don't have "jump".
-
-2016-06-06  rocky <address@hidden>
-
-       * : commit 703e08727ee97116f8df36cc7ae2be6c87a64591 Author: rocky
-       <address@hidden> Date:   Mon Jun 6 08:26:04 2016 -0400
-
-2016-06-06  rocky <address@hidden>
-
-       * realgud/lang/posix-shell.el, test/Makefile.am,
-       test/test-regexp-bashdb.el, test/test-regexp-zshdb.el: Correct
-       "breakpoint deleted" regexp test-regexp-zshdb.el: beef up and sync to 
corresponding bashdb test.
-       Makefile.am: make "make check-short" in this directory work
-
-2016-06-04  Clément Pit--Claudel <address@hidden>
-
-       * README.md: Update Travis links
-
-2016-06-04  Clément Pit--Claudel <address@hidden>
-
-       * INSTALL, README.md, realgud.el: A few more link updates (+ small
-       edits in Commentary)
-
-2016-06-04  R. Bernstein <address@hidden>
-
-       * : Merge pull request #121 from
-       realgud/revert-95-revert-94-84-fix-autoloads Revert "Revert "Manually 
generate "recursive" autoloads for
-       subdirectories""
-
-2016-06-02  rocky <address@hidden>
-
-       * realgud.el: Update doc links
-
-2016-06-02  Clément Pit--Claudel <address@hidden>
-
-       * realgud/common/follow.el, realgud/common/fringe.el,
-       realgud/common/shortkey.el: Fix invalid references to
-       realgud:loc-follow `follow-mark' was introduced in
-       dcc152aa6aea8d201596750c1b69b63e57c4fd43, but a few references to
-       loc-follow had remained since then.  Also replace a few instances of 
(interactive "") with (interactive).  Fixes #91.
-
-2016-06-01  Clément Pit--Claudel <address@hidden>
-
-       * README.md, realgud/common/cmds.el, realgud/common/shortkey.el: Add
-       basic support for jumping
-
-2016-06-01  R. Bernstein <address@hidden>
-
-       * : Merge pull request #119 from realgud/improve-break-C-u Further 
cleanups of cmds.el + improved C-u behaviour
-
-2016-06-01  Clément Pit--Claudel <address@hidden>
-
-       * realgud/common/cmds.el: Further cleanup in cmds.el: remove unused
-       arguments Affected commands: kill, next-no-arg, repeat-last, restart, 
and
-       shell.
-
-2016-06-01  Clément Pit--Claudel <address@hidden>
-
-       * realgud/common/send.el: Clarify %p in documentation of
-       expand-format Also ensure %s formats nil as an empty string (for 
consistency with
-       %p).
-
-2016-06-01  R. Bernstein <address@hidden>
-
-       * : Merge pull request #114 from rocky/default-hash Further refactor 
cmds.el
-
-2016-05-31  Clément Pit--Claudel <address@hidden>
-
-       * : Ensure that the Github organization logo is a square
-
-2016-05-31  Clément Pit--Claudel <address@hidden>
-
-       * realgud/common/cmds.el: Further refactor cmds.el Instead of passing a 
default template in each individual call,
-       collect all default templates in a single hash.  Take that
-       opportunity to clean up the two 'cmd-*-no-args' implementations.
-
-2016-05-31  Clément Pit--Claudel <address@hidden>
-
-       * realgud/common/cmds.el: Remove unwanted argument in call to
-       cmd-run-command (this is a leftover from 
d2b8d132388d18c0ce865a21eafc666ecb7d2b03)
-
-2016-05-31  Clément Pit--Claudel <address@hidden>
-
-       * : Merge pull request #113 from rocky/logo New RealGUD logo
-
-2016-05-31  Clément Pit--Claudel <address@hidden>
-
-       * etc/screenshot.el: Update screenshot
-
-2016-05-31  Clément Pit--Claudel <address@hidden>
-
-       * README.md: Slightly shorten setup instructions in README
-
-2016-05-30  Clément Pit--Claudel <address@hidden>
-
-       * realgud/common/file.el: Fix file-column-to-string in the presence
-       of composed characters (- (current-column) (length source-text)) is not 
necessarily a valid
-       source position: indeed, when a line contains composed characters,
-       these characters do not count towards column numbers; thus, the
-       largest column on a line containing n characters can be < n, and
-       thus the existing code could return negative column numbers.  Concrete 
example: starting trepan2 on a buffer created by the
-       following snippet would cause realgud to crash:     
(with-current-buffer (get-buffer-create "*python-prettified*")       
(python-mode)       (erase-buffer)       (setq-local prettify-symbols-alist 
'(("in" . ?∈)))       (insert "for x in [1,2,3]:\n    pass")       
(prettify-symbols-mode)       (pop-to-buffer (current-buffer)))
-
-2016-05-30  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/init.el,
-       realgud/debugger/trepan.pl/init.el,
-       realgud/debugger/trepan2/init.el,
-       realgud/debugger/trepan3k/init.el, realgud/debugger/zshdb/init.el,
-       realgud/lang/posix-shell.el, test/test-regexp-bashdb.el,
-       test/test-regexp-trepanpl.el, test/test-regexp-zshdb.el: Add some
-       enable/disble patterns Note: code for perl, zshdb and bashdb will work 
right only after the
-       next releases of these packages.
-
-2016-05-30  Amelio Vazquez-Reina <address@hidden>
-
-       * README.md: Update README.md Expanded installation instructions.
-
-2016-05-30  R. Bernstein <address@hidden>
-
-       * : Merge pull request #111 from
-       rocky/better-breakpoint-highlighting Improve visibility of breakpoints
-
-2016-05-30  R. Bernstein <address@hidden>
-
-       * : Merge pull request #110 from rocky/delete-multiple-breakpoints 
Allow realgud-track-bp-delete to recognize multiple breakpoints
-
-2016-05-30  Clément Pit--Claudel <address@hidden>
-
-       * realgud/common/track.el, realgud/debugger/gdb/init.el: Allow
-       realgud-track-bp-delete to recognize multiple breakpoints
-
-2016-05-30  rocky <address@hidden>
-
-       * README.md, THANKS: Alway late on this kind of thing.
-
-2016-05-30  rocky <address@hidden>
-
-       * realgud/common/track.el: Typo
-
-2016-05-30  rocky <address@hidden>
-
-       * realgud/common/bp.el, realgud/common/track.el,
-       realgud/debugger/bashdb/init.el, realgud/lang/posix-shell.el,
-       test/test-regexp-bashdb.el: Handle enable/disable bp status messages
-       - 1st cut
-
-2016-05-30  R. Bernstein <address@hidden>
-
-       * : Merge pull request #106 from rocky/75-ipdb-completion Improve IPDB 
completion
-
-2016-05-30  Clément Pit--Claudel <address@hidden>
-
-       * realgud/debugger/ipdb/core.el: Improve IPDB completion Fail 
gracefully if point isn't at prompt, and get prefix from
-       iPython instead of relying on bounds-of-thing-at-point.  Fixes #75.
-
-2016-05-30  Clément Pit--Claudel <address@hidden>
-
-       * README.md, etc/screenshot.el: Rewrite README Closes #72.  Screenshot 
is auto-generated using etc/screenshot.el.
-
-2016-05-30  Clément Pit--Claudel <address@hidden>
-
-       * realgud/common/fringe-utils.py: Add python3 shebang to
-       fringe-utils.py
-
-2016-05-30  Clément Pit--Claudel <address@hidden>
-
-       * Cask: Fill in missing bits of Cask file
-
-2016-05-30  Clément Pit--Claudel <address@hidden>
-
-       * realgud/common/buffer/source.el: Simplify the implementation of
-       realgud:cmdbuf-associate
-
-2016-05-29  Clément Pit--Claudel <address@hidden>
-
-       * realgud/common/buffer/source.el: Show default buffer when
-       automatically attaching
-
-2016-05-29  R. Bernstein <address@hidden>
-
-       * : Merge pull request #104 from rocky/36-auto-attach Automatically 
attach to a command buffer when enabling
-       short-key-mode
-
-2016-05-29  rocky <address@hidden>
-
-       * realgud.el: Update commentary; e.g. link to debuggers handled
-
-2016-05-29  Clément Pit--Claudel <address@hidden>
-
-       * realgud/common/buffer/source.el, realgud/common/shortkey.el: 
-       Automatically attach to a command buffer when enabling
-       short-key-mode When enabling short-key-mode in an orphan source buffer 
(i.e. one
-       that isn't attached to a command buffer), prompt the user for a
-       command buffer to attach to instead of complaining (and complain
-       only if there is no available command buffer).  Additionally make 
shortkey-mode-setup more robust by restoring the
-       original local map properly disabling the toolbar after exiting.  
Closes #36; thanks for the suggestion!
-
-2016-05-29  Clément Pit--Claudel <address@hidden>
-
-       * realgud/common/buffer/source.el, realgud/common/shortkey.el: Minor
-       docstring and code cleanups
-
-2016-05-29  Clément Pit--Claudel <address@hidden>
-
-       * realgud/common/helper.el: Use `buffer-live-p' instead of
-       `buffer-name' in `buffer-killed?'
-
-2016-05-29  R. Bernstein <address@hidden>
-
-       * : Merge pull request #101 from rocky/bp-icon-in-fringe Refactor and 
improve breakpoint UI
-
-2016-05-29  Clément Pit--Claudel <address@hidden>
-
-       * realgud/common/cmds.el: Ignore safe-mode setting when clicking a
-       toolbar button
-
-2016-05-29  R. Bernstein <address@hidden>
-
-       * : Merge pull request #98 from rocky/83-better-scope-keybindings Fix 
83 and 88: refactor cmds.el
-
-2016-05-28  Clément Pit--Claudel <address@hidden>
-
-       * realgud/common/key.el: Add a few bindings to shortkey-mode This is in 
preparation for refactoring cmds.el.  All keys were
-       picked from calls to cmd-remap.
-
-2016-05-28  Clément Pit--Claudel <address@hidden>
-
-       * realgud/debugger/nodejs/init.el,
-       realgud/debugger/nodejs/track-mode.el,
-       realgud/debugger/perldb/track-mode.el,
-       realgud/debugger/remake/track-mode.el,
-       realgud/debugger/zshdb/track-mode.el: Prepare for refactoring of
-       realgud-cmd * all: remove (declare-function cmd-remap) * perldb: Remove 
custom binding for backtrace * nodejs: Remove custom bindings for backtrace.  
Remove rebinding of   “break” and update hash instead.
-
-2016-05-28  Clément Pit--Claudel <address@hidden>
-
-       * realgud/common/cmds.el: Rename
-       realgud:prompt-if-{prefix-or-,}safe-mode The if-prefix part was an 
unfortunate choice.
-
-2016-05-28  R. Bernstein <address@hidden>
-
-       * : Merge pull request #95 from rocky/revert-94-84-fix-autoloads Revert 
"Manually generate "recursive" autoloads for subdirectories"
-
-2016-05-28  R. Bernstein <address@hidden>
-
-       * : Merge pull request #94 from rocky/84-fix-autoloads Manually 
generate "recursive" autoloads for subdirectories
-
-2016-05-28  R. Bernstein <address@hidden>
-
-       * : Merge pull request #93 from cpitclaudel/small-fixes-in-cmds Small 
fixes in cmds.el
-
-2016-05-28  R. Bernstein <address@hidden>
-
-       * : Merge pull request #89 from
-       cpitclaudel/87-improve-delete-command Improve behavior of delete, 
enable, and disable
-
-2016-05-28  Clément Pit--Claudel <address@hidden>
-
-       * realgud/common/cmds.el: Add a "safe mode" setting (on by default) In 
safe mode, prompt and offer a tip on how to disable safe mode
-       before running "continue".
-
-2016-05-28  R. Bernstein <address@hidden>
-
-       * : Merge pull request #90 from cpitclaudel/82-add-prefix-arg-to-c Add 
a prefix arg to "continue" command
-
-2016-05-28  Clément Pit--Claudel <address@hidden>
-
-       * realgud/common/cmds.el: Improve behavior of delete, enable, and
-       disable Interactively, these three commands now disable, enable, or 
delete a
-       breakpoint found on the current line, and only prompt for a
-       breakpoint number if they can't find one.  This default behavior is 
overridden in two cases: * When a numeric prefix argument is given, in which 
case they use
-         that as the breakpoint number (consistent with current behavior) * 
When a generic prefix argument is given, in which case they always   prompt, 
but offer a breakpoint number on the current line as the   default.  Closes #87.
-
-2016-05-28  R. Bernstein <address@hidden>
-
-       * : Merge pull request #86 from cpitclaudel/83-improve-e-binding 
Improve eval: run on region if active, and fall back to prompting
-
-2016-05-27  R. Bernstein <address@hidden>
-
-       * : Merge pull request #85 from cpitclaudel/84-pdb-fixes Improve 
command mappings in pdb-command-hash
-
-2016-05-27  Clément Pit--Claudel <address@hidden>
-
-       * realgud/debugger/pdb/init.el: Improve command mappings in
-       pdb-command-hash This fixes parts of issue #82.
-
-2016-05-25  R. Bernstein <address@hidden>
-
-       * : Merge pull request #81 from rocky/ipdb-complete Ipdb complete
-
-2016-05-25  Clément Pit--Claudel <address@hidden>
-
-       * realgud/common/core.el: Improve completion and default value in
-       realgud-query-cmdline
-
-2016-05-24  rocky <address@hidden>
-
-       * test/test-ipdb.el: fake realgud:run-process better
-
-2016-05-24  rocky <address@hidden>
-
-       * realgud/debugger/ipdb/core.el, realgud/debugger/ipdb/ipdb.el: 
-       Towards fixing up tab completion in ipdb.
-
-2016-05-23  rocky <address@hidden>
-
-       * realgud/common/track.el: Fix wrong setq call [Fixes #79]
-
-2016-03-05  rocky <address@hidden>
-
-       * realgud.el: Reinstate ipdb support
-
-2016-03-03  rocky <address@hidden>
-
-       * realgud.el, realgud/debugger/nodejs/nodejs.el,
-       realgud/debugger/pdb/pdb.el, realgud/debugger/perldb/perldb.el,
-       realgud/debugger/rdebug/rdebug.el,
-       realgud/debugger/trepan.pl/trepanpl.el,
-       realgud/debugger/zshdb/zshdb.el, test/test-regexp-ipdb.el: Disable
-       ipdb until melpa is updated debugger*/*.el: standardize more on emacs 
24.3 test-regexp-ipdb.el:
-       squelch warnings
-
-2016-03-02  rocky <address@hidden>
-
-       * realgud.el: Bump version * Accumulates lots of past changes * removes 
a number of older debuggers in realgud-old-debuggers * adds ipdb
-
-2016-02-29  R. Bernstein <address@hidden>
-
-       * : Merge pull request #74 from rocky/ipdb Add ipdb support and remove 
some of the older debuggers
-
-2016-02-21  rocky <address@hidden>
-
-       * configure.ac, realgud.el, realgud/common/backtrack-mode.el,
-       realgud/debugger/Makefile.am, realgud/debugger/pydb/Makefile.am,
-       realgud/debugger/pydb/core.el, realgud/debugger/pydb/init.el,
-       realgud/debugger/pydb/pydb.el, realgud/debugger/pydb/track-mode.el,
-       realgud/debugger/pydbgr/Makefile.am,
-       realgud/debugger/pydbgr/core.el, realgud/debugger/pydbgr/init.el,
-       realgud/debugger/pydbgr/pydbgr.el,
-       realgud/debugger/pydbgr/track-mode.el,
-       realgud/debugger/trepan8/Makefile.am,
-       realgud/debugger/trepan8/core.el, realgud/debugger/trepan8/init.el,
-       realgud/debugger/trepan8/track-mode.el,
-       realgud/debugger/trepan8/trepan8.el,
-       realgud/debugger/trepanx/Makefile.am,
-       realgud/debugger/trepanx/core.el, realgud/debugger/trepanx/init.el,
-       realgud/debugger/trepanx/track-mode.el,
-       realgud/debugger/trepanx/trepanx.el, test/test-bt-pydb.el,
-       test/test-bt-pydbgr.el, test/test-bt-trepanx.el,
-       test/test-loc-regexp-trepanx.el, test/test-pydb.el,
-       test/test-pydbgr.el, test/test-realgud.el,
-       test/test-regexp-pydb.el, test/test-regexp-pydbgr.el,
-       test/test-regexp-trepanx.el: Move older, lesser-used debuggers to
-       another repo
-
-2016-02-17  rocky <address@hidden>
-
-       * realgud/debugger/kshdb/init.el, realgud/debugger/rdebug/init.el: 
-       Remove stray character Thanks, seanfarley!
-
-2016-02-16  Sean Farley <address@hidden>
-
-       * test/test-regexp-ipdb.el: ipdb: add regex test
-
-2016-02-16  Sean Farley <address@hidden>
-
-       * test/test-ipdb.el: ipdb: add test
-
-2016-02-14  rocky <address@hidden>
-
-       * realgud/common/backtrack-mode.el,
-       realgud/debugger/rdebug/init.el, realgud/debugger/trepan/init.el,
-       realgud/lang/ruby.el: Add rspec loc pattern..  .. in the never-ending 
battle of again location reporting
-       originality init.el: DRY
-
-2016-01-26  Sean Farley <address@hidden>
-
-       * realgud/debugger/ipdb/track-mode.el: ipdb: add tab completion to
-       track-mode
-
-2016-01-24  Sean Farley <address@hidden>
-
-       * realgud/debugger/ipdb/ipdb.el: ipdb: add hook for completion to
-       initialization
-
-2016-01-26  Sean Farley <address@hidden>
-
-       * realgud/debugger/ipdb/core.el, realgud/debugger/ipdb/ipdb.el: 
-       ipdb: add tab completion
-
-2016-02-12  Sean Farley <address@hidden>
-
-       * THANKS, configure.ac, realgud.el, realgud/debugger/Makefile.am,
-       realgud/debugger/ipdb/Makefile.am, realgud/debugger/ipdb/core.el,
-       realgud/debugger/ipdb/init.el, realgud/debugger/ipdb/ipdb.el,
-       realgud/debugger/ipdb/track-mode.el: ipdb: add new debugger based on
-       pdb
-
-2016-01-10  rocky <address@hidden>
-
-       * realgud/debugger/kshdb/init.el: Not sure why this initialization
-       was there, but it is syntactically wrong anyway.
-
-2016-01-10  rocky <address@hidden>
-
-       * realgud/common/shortkey.el: Fix bug in picking out short-key
-       variable name introduced by recent changes
-
-2016-01-10  rocky <address@hidden>
-
-       * realgud/common/backtrack-mode.el,
-       realgud/common/buffer/backtrace.el, realgud/common/track.el,
-       realgud/debugger/gdb/gdb.el, realgud/debugger/gdb/track-mode.el,
-       realgud/debugger/gub/init.el, realgud/debugger/gub/track-mode.el,
-       realgud/debugger/jdb/jdb.el, realgud/debugger/jdb/track-mode.el,
-       realgud/debugger/trepan.pl/init.el: More cleanup from last two
-       commits.
-
-2016-01-10  rocky <address@hidden>
-
-       * realgud/common/buffer/command.el, realgud/common/regexp.el,
-       realgud/common/track.el, realgud/debugger/gdb/init.el,
-       realgud/debugger/jdb/init.el: Redo previous commit handle
-       base-variable determination from debugger name. We now do it via a
-       hash table where entries are set in <debugger>/init.el Cleanup of
-       old code is still needed.
-
-2016-01-09  rocky <address@hidden>
-
-       * realgud/common/helper.el, realgud/common/track.el,
-       realgud/debugger/gdb/gdb.el, realgud/debugger/gdb/track-mode.el,
-       realgud/debugger/jdb/track-mode.el, test/test-common-helper.el: 
-       track.el: Allow us to separate stem variable name to get debugger
-       config from debugger name. This will make it easier
-
-2015-12-15  rocky <address@hidden>
-
-       * realgud/debugger/pdb/init.el, realgud/debugger/trepan2/init.el,
-       realgud/debugger/trepan3k/init.el, realgud/lang/python.el: Add
-       pytest error message pattern in python debuggers
-
-2015-12-15  rocky <address@hidden>
-
-       * test/bt-helper.el: Travis emacs doesn't do font-lock-ensure. Use
-       older form for now
-
-2015-12-15  rocky <address@hidden>
-
-       * realgud/common/track-mode.el, realgud/common/track.el: Add C-c ! d
-       in a command buffer to get from a debugger location line in the
-       command buffer to the corresponding source. Add
-       realgud:goto-debugger-loc-line. Revise doc strings.
-
-2015-12-11  rocky <address@hidden>
-
-       * realgud/common/buffer/command.el, realgud/common/regexp.el,
-       realgud/common/send.el, realgud/common/track.el,
-       realgud/debugger/perldb/init.el, test/bt-helper.el,
-       test/test-common-helper.el, test/test-gdb-core.el,
-       test/test-loc-regexp-nodejs.el, test/test-regexp-gdb.el,
-       test/test-regexp-perldb.el: Add ability to have alternate group
-       location file and line numbers.  This is for perldb's all-over-the 
place location reporting.  perldb.el: adjust locations for perldb's complicated 
location
-       regexps. Probably broke debug output for older perldb, and probably
-       slightly improved it for current perldb.  remove various compiler 
warnings.
-
-2015-12-06  rocky <address@hidden>
-
-       * realgud/debugger/trepan2/init.el,
-       realgud/debugger/trepan3k/init.el: Last commit set wrong variables
-
-2015-12-06  rocky <address@hidden>
-
-       * realgud/debugger/trepan2/init.el,
-       realgud/debugger/trepan3k/init.el: Use quit! in python trepan
-       debuggers
-
-2015-12-04  rocky <address@hidden>
-
-       * THANKS: Add Kilian
-
-2015-12-04  rocky <address@hidden>
-
-       * README.md: Try to tidy badges a little
-
-2015-12-04  R. Bernstein <address@hidden>
-
-       * : Merge pull request #63 from
-       cohomology/feature/empty_command_line Fix several issues when calling 
gdb, Fixes #59
-
-2015-12-03  rocky <address@hidden>
-
-       * realgud/common/buffer/backtrace.el, realgud/common/fringe.el: 
-       Change fringe arrow background colors based on dark or light
-       background.
-
-2015-11-28  rocky <address@hidden>
-
-       * realgud/common/core.el, realgud/debugger/gdb/track-mode.el: Don't
-       try source buffer initialization if it doesn't exist.  That just
-       creates a new buffer. Fixes #60
-
-2015-11-27  rocky <address@hidden>
-
-       * realgud/common/regexp.el, realgud/debugger/gdb/init.el: Partially
-       addresses #61. Handling multiple breakpoints on a line still
-       remains.
-
-2015-11-26  rocky <address@hidden>
-
-       * realgud/debugger/gdb/gdb.el, realgud/debugger/gdb/init.el: 
-       init.el: break and clear command use %X rather than %l Add some
-       support functions for invoking via gdb -p. Fixes issue #58
-
-2015-11-23  rocky <address@hidden>
-
-       * test/test-lochist.el: Typo
-
-2015-11-23  rocky <address@hidden>
-
-       * realgud/debugger/perldb/init.el, test/test-bashdb.el,
-       test/test-bp.el, test/test-bt-pdb.el, test/test-bt-pydb.el,
-       test/test-bt-pydbgr.el, test/test-bt-rdebug.el,
-       test/test-bt-trepan.el, test/test-bt-trepan2.el,
-       test/test-bt-trepan3k.el, test/test-bt-trepanx.el,
-       test/test-bt-zshdb.el, test/test-buf-bt.el, test/test-buf-cmd.el,
-       test/test-core.el, test/test-file.el, test/test-gdb.el,
-       test/test-gub-core.el, test/test-jdb.el, test/test-lang.el,
-       test/test-loc-regexp-gub.el, test/test-loc-regexp-nodejs.el,
-       test/test-loc-regexp-trepan.el, test/test-loc-regexp-trepanpl.el,
-       test/test-loc-regexp-trepanx.el, test/test-loc.el,
-       test/test-lochist.el, test/test-nodejs.el, test/test-pdb.el,
-       test/test-perldb.el, test/test-pydb.el, test/test-pydbgr.el,
-       test/test-rdebug.el, test/test-realgud.el,
-       test/test-regexp-bashdb.el, test/test-regexp-gdb.el,
-       test/test-regexp-gub.el, test/test-regexp-jdb.el,
-       test/test-regexp-nodejs.el, test/test-regexp-pdb.el,
-       test/test-regexp-perldb.el, test/test-regexp-pydb.el,
-       test/test-regexp-pydbgr.el, test/test-regexp-rdebug.el,
-       test/test-regexp-remake.el, test/test-regexp-ruby.el,
-       test/test-regexp-trepan.el, test/test-regexp-trepan2.el,
-       test/test-regexp-trepan3k.el, test/test-regexp-trepanjs.el,
-       test/test-regexp-trepanpl.el, test/test-regexp-trepanx.el,
-       test/test-regexp-zshdb.el, test/test-regexp.el,
-       test/test-remake-core.el, test/test-remake.el, test/test-send.el,
-       test/test-shortkey.el, test/test-srcbuf.el,
-       test/test-track-mode.el, test/test-track.el, test/test-trepan2.el,
-       test/test-trepan3k.el, test/test-trepanpl.el, test/test-utils.el,
-       test/test-zshdb.el: Go over perldb init re's. Attempt smaller
-       cleanup of tests and note how to run non-interactively inside emacs.
-
-2015-11-23  rocky <address@hidden>
-
-       * : commit ca528967ff0595ed2a1f601f9a62f1f923b1aee1 Author: rocky
-       <address@hidden> Date:   Mon Nov 23 07:32:12 2015 -0500
-
-2015-11-22  rocky <address@hidden>
-
-       * : commit 0514c681afe3d06e9a2dd394702a2b431938d6f7 Author: rocky
-       <address@hidden> Date:   Sun Nov 22 09:37:40 2015 -0500
-
-2015-11-21  rocky <address@hidden>
-
-       * realgud/common/buffer/source.el, realgud/common/send.el: Error on
-       realgud:cmdbuf-associate if you assocate a non-command buffer.
-       TODO: only suggest cmdbuf buffers.
-
-2015-11-21  rocky <address@hidden>
-
-       * realgud/common/core.el, realgud/common/run.el,
-       realgud/debugger/gdb/gdb.el: realgud-exec-shell: Make sure we switch
-       to cmdbuf even when there is an error. gdb.el: insert set-annotate
-       only if process is running.
-
-2015-11-15  rocky <address@hidden>
-
-       * realgud/debugger/perldb/init.el: I said remove perl5db as an alias
-
-2015-11-11  rocky <address@hidden>
-
-       * .gitignore, Cask: Try cask
-
-2015-11-10  rocky <address@hidden>
-
-       * realgud/debugger/perldb/perldb.el: perl5db alias messes up
-       realgud-track-mode, so drop that name.
-
-2015-11-02  rocky <address@hidden>
-
-       * realgud/common/cmds.el, realgud/debugger/jdb/init.el,
-       realgud/debugger/jdb/jdb.el, realgud/debugger/nodejs/nodejs.el,
-       test/.gitignore, test/HelloWorld.java: wrong args in jdb invocation;
-       issue #51. Disable some jdb commands we can't support.
-
-2015-10-25  rocky <address@hidden>
-
-       * realgud/common/core.el: Show failure in message and in cmdbuf when
-       we fail to invoke a debugger
-
-2015-10-17  rocky <address@hidden>
-
-       * : commit bdf317ee3b71992044f3efaf288358d12c247d94 Author: rocky
-       <address@hidden> Date:   Sat Oct 17 12:31:54 2015 -0400
-
-2015-10-06  rocky <address@hidden>
-
-       * realgud/common/key.el, realgud/debugger/bashdb/bashdb.el,
-       realgud/debugger/bashdb/core.el, realgud/debugger/gdb/gdb.el,
-       realgud/debugger/nodejs/nodejs.el, realgud/debugger/zshdb/zshdb.el: 
-       Typo: Issue #45
-
-2015-07-29  rocky <address@hidden>
-
-       * realgud/debugger/pdb/core.el, realgud/debugger/pdb/pdb.el: Add
-       realgud:pdb-remote for remote kinds of pdb execution, e.g. telnet
-       hostname port-number. This hasn't been tested.
-
-2015-07-19  rocky <address@hidden>
-
-       * realgud/common/key.el: Fix typo poined out by dfelch.
-
-2015-06-05  rocky <address@hidden>
-
-       * realgud/debugger/gdb/init.el: Doc gdb regexp more.
-
-2015-05-17  rocky <address@hidden>
-
-       * realgud/debugger/trepan2/init.el, realgud/lang/python.el,
-       test/test-regexp-trepan2.el: Python trepan debuggers include
-       instruction offset in location
-
-2015-05-06  rocky <address@hidden>
-
-       * realgud/debugger/trepanjs/init.el: trepanjs backtrace format
-       changes next release
-
-2015-05-04  rocky <address@hidden>
-
-       * realgud/debugger/trepanjs/init.el, test/test-regexp-nodejs.el,
-       test/test-regexp-trepanjs.el: Revise trepanjs regexps and add regexp
-       test.
-
-2015-04-30  rocky <address@hidden>
-
-       * realgud/debugger/gub/init.el: DRY gub init captured numbered re's.
-
-2015-04-29  rocky <address@hidden>
-
-       * realgud/debugger/trepanjs/init.el: trepanjs location format has
-       changed
-
-2015-04-29  rocky <address@hidden>
-
-       * realgud/common/buffer/backtrace.el, realgud/debugger/gub/gub.el,
-       realgud/debugger/remake/remake.el: Administrivia
-
-2015-04-28  rocky <address@hidden>
-
-       * realgud/debugger/trepanjs/init.el: trepanjs msg change: stop in ->
-       call in
-
-2015-04-28  rocky <address@hidden>
-
-       * realgud.el, realgud/debugger/gdb/init.el: gdb: DRY captured number
-       uses.
-
-2015-04-28  rocky <address@hidden>
-
-       * realgud/debugger/trepanjs/core.el,
-       realgud/debugger/trepanjs/init.el: core.el: correct trepanjs options
-       init.el: we can have "stop on" as well as "break on" or "execption
-       on"
-
-2015-04-26  rocky <address@hidden>
-
-       * realgud/common/cmds.el: caddr -> cl-caddr. Fill in %s on format.
-
-2015-04-26  rocky <address@hidden>
-
-       * realgud/common/cmds.el, realgud/debugger/nodejs/core.el,
-       realgud/debugger/nodejs/init.el, realgud/debugger/trepanjs/core.el: 
-       bang on trepanjs and nodejs.  cmds.el: Allow for debug commands not
-       to be implemented
-
-2015-04-24  rocky <address@hidden>
-
-       * realgud/lang/js.el: DRY with respect to
-       realgud:regexp-captured-num
-
-2015-04-24  rocky <address@hidden>
-
-       * realgud/debugger/trepanjs/init.el, test/gcd.js: trepanjs: handle
-       eval properly test/gcd.js: more useful
-
-2015-04-24  rocky <address@hidden>
-
-       * : commit aa3125d819aba3aeb827f023d458e62019879550 Author: rocky
-       <address@hidden> Date:   Thu Apr 23 11:48:02 2015 -0400
-
-2015-04-23  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/init.el,
-       realgud/debugger/bashdb/track-mode.el,
-       realgud/debugger/trepan8/init.el, realgud/debugger/zshdb/init.el,
-       realgud/lang/posix-shell.el: DRY realgud:regexp-capture-num and add
-       more FSF copyrights
-
-2015-04-22  rocky <address@hidden>
-
-       * realgud/debugger/trepanjs/init.el: init.el: bracketed short name
-       is optional
-
-2015-04-22  rocky <address@hidden>
-
-       * realgud/common/regexp.el, realgud/debugger/nodejs/init.el,
-       realgud/lang/js.el: common/regexp.el: start to DRY regexps
-       lang/js.el: term escape is common to nodejs and trepanjs
-
-2015-04-22  rocky <address@hidden>
-
-       * realgud/common/regexp.el, realgud/debugger/nodejs/init.el,
-       realgud/debugger/trepanjs/init.el, realgud/lang/js.el: 
-       trepanjs/init.el: handle newly added fully-qualified paths
-       common/regexp.el: start to DRY regexps lang/js.el: term escape is
-       common to nodejs and trepanjs
-
-2015-04-22  rocky <address@hidden>
-
-       * realgud/debugger/nodejs/nodejs.el,
-       realgud/debugger/trepanjs/trepanjs.el, realgud/lang/js.el: Remove
-       node asci schmutz. put in lang/js.el Add more FSF copyrights
-
-2015-04-22  rocky <address@hidden>
-
-       * test/bt-helper.el: Revert "Squelch one of the many compiler
-       warnings" This reverts commit 33bfa6f551c08cf65012d24b380d1fa7849c8e58.
-
-2015-04-22  rocky <address@hidden>
-
-       * test/bt-helper.el: Revert "Squelch one of the many compiler
-       warnings" This reverts commit b8d8686a88429fb4d1fc603979b6574218ae858e.
-
-2015-04-22  rocky <address@hidden>
-
-       * test/bt-helper.el: Squelch one of the many compiler warnings
-
-2015-04-22  rocky <address@hidden>
-
-       * test/bt-helper.el: Squelch one of the many compiler warnings
-
-2015-04-22  rocky <address@hidden>
-
-       * realgud/debugger/nodejs/init.el,
-       realgud/debugger/nodejs/track-mode.el, realgud/lang/js.el: Start js
-       lang. add js backtrace regexp
-
-2015-04-22  rocky <address@hidden>
-
-       * realgud/debugger/nodejs/init.el,
-       realgud/debugger/nodejs/track-mode.el,
-       realgud/debugger/trepanjs/backtrack-mode.el,
-       realgud/debugger/trepanjs/init.el,
-       realgud/debugger/trepanjs/track-mode.el, realgud/lang/js.el: Start
-       js lang. add js backtrace regexp
-
-2015-04-21  rocky <address@hidden>
-
-       * realgud/debugger/nodejs/init.el: Correct nodejs/init.el bugs -
-       sync with master
-
-2015-04-21  rocky <address@hidden>
-
-       * realgud/debugger/nodejs/init.el: Add breakpoint set to nodejs
-
-2015-04-21  rocky <address@hidden>
-
-       * configure.ac, realgud.el, realgud/debugger/Makefile.am,
-       realgud/debugger/nodejs/init.el,
-       realgud/debugger/trepanjs/Makefile.am,
-       realgud/debugger/trepanjs/backtrack-mode.el,
-       realgud/debugger/trepanjs/core.el,
-       realgud/debugger/trepanjs/init.el,
-       realgud/debugger/trepanjs/track-mode.el,
-       realgud/debugger/trepanjs/trepanjs.el: Add trepanjs
-
-2015-04-17  rocky <address@hidden>
-
-       * realgud/debugger/gdb/core.el, realgud/debugger/gdb/gdb.el,
-       realgud/debugger/gdb/track-mode.el, realgud/debugger/pdb/core.el,
-       realgud/debugger/pdb/init.el, realgud/debugger/pdb/pdb.el: More
-       copyright assignments to FSF
-
-2015-04-17  rocky <address@hidden>
-
-       * realgud/common/core.el, test/test-gdb.el: core.el: remove
-       duplicate command buffer creation test-gdb.el: nuke possibly a
-       dubious gdb invocation
-
-2015-04-13  rocky <address@hidden>
-
-       * realgud/debugger/gdb/track-mode.el,
-       realgud/debugger/trepan8/track-mode.el,
-       realgud/debugger/trepanx/track-mode.el: Make sure we go into
-       realgud-track mode when we have custom mode hooks. Issue #42.
-
-2015-04-10  rocky <address@hidden>
-
-       * realgud/common/attach.el, realgud/common/backtrack-mode.el,
-       realgud/common/buffer/backtrace.el, realgud/common/track.el,
-       realgud/debugger/bashdb/bashdb.el, realgud/debugger/nodejs/core.el,
-       realgud/debugger/nodejs/init.el, realgud/lang/posix-shell.el,
-       test/test-loc-regexp-nodejs.el, test/test-regexp-nodejs.el: 
-       backtrace.el: fix some bugs and remove some warnings posix-shell.el:
-       remove python constants nodejs/init.el Add backtrace regexp to
-       nodejs Add more FSF copyrights
-
-2015-04-02  rocky <address@hidden>
-
-       * README.md: Update README.md to note that we can use in eshell
-
-2015-04-01  rocky <address@hidden>
-
-       * realgud/common/utils.el: Small error message grammar correction
-
-2015-03-31  rocky <address@hidden>
-
-       * realgud/common/buffer/command.el, realgud/common/track.el: Respect
-       shortkey mode setting Add FSF copyright
-
-2015-03-31  rocky <address@hidden>
-
-       * realgud/common/track-mode.el: DRY Comment no longer relvant
-
-2015-03-31  rocky <address@hidden>
-
-       * test/test-track-mode.el: Fix downcase.
-
-2015-03-30  rocky <address@hidden>
-
-       * test/test-track-mode.el: Need more stringent cmdbuf setup
-
-2015-03-30  rocky <address@hidden>
-
-       * realgud/common/send.el, realgud/common/track-mode.el,
-       realgud/common/utils.el, test/test-utils.el: Simplify
-       eshell/comint/shell mode testing.  Thanks to pythonnut:
-       http://emacs.stackexchange.com/users/2642/pythonnut
-
-       
http://emacs.stackexchange.com/questions/10387/how-can-i-tell-if-a-buffer-is-a-comint-buffer-eshell-buffer-or-neither/10390?iemail=1&noredirect=1#10390
-
-2015-03-29  rocky <address@hidden>
-
-       * realgud/common/loc.el, realgud/common/send.el,
-       realgud/common/track-mode.el, realgud/common/track.el: Minimal
-       support for running under eshell More FSF copyrights
-
-2015-03-28  rocky <address@hidden>
-
-       * realgud.el, realgud/common/eval.el: eval.el: issue #40 More FSF
-       copyright assignment
-
-2015-03-28  rocky <address@hidden>
-
-       * realgud/common/backtrace-mode.el, realgud/common/track-mode.el,
-       realgud/debugger/bashdb/core.el,
-       realgud/debugger/jdb/backtrack-mode.el,
-       realgud/debugger/jdb/track-mode.el,
-       realgud/debugger/kshdb/track-mode.el,
-       realgud/debugger/nodejs/track-mode.el,
-       realgud/debugger/pdb/track-mode.el,
-       realgud/debugger/perldb/track-mode.el,
-       realgud/debugger/pydb/track-mode.el,
-       realgud/debugger/trepan/backtrack-mode.el,
-       realgud/debugger/trepan3k/track-mode.el,
-       realgud/debugger/trepan8/track-mode.el: More FSF copyright
-       assignments.  Include mode-map bindings in mode-map variables
-
-2015-03-28  rocky <address@hidden>
-
-       * .travis.yml: Try to fix travis #3
-
-2015-03-28  rocky <address@hidden>
-
-       * .travis.yml: Try to fix travis #2
-
-2015-03-28  rocky <address@hidden>
-
-       * copyright_exceptions, realgud/common/eval.el,
-       realgud/common/track.el: Fix logic for finding region to work on in
-       tracking Possibly fixes issue #40.
-
-2015-03-02  rocky <address@hidden>
-
-       * realgud/common/run.el, realgud/common/send.el,
-       realgud/common/track.el, realgud/debugger/gdb/init.el,
-       realgud/debugger/gdb/track-mode.el: Reassign copyright to FSF in
-       recently change files
-
-2015-03-02  rocky <address@hidden>
-
-       * realgud/debugger/gdb/init.el: gdb's "eval" is "print".
-
-2015-02-27  rocky <address@hidden>
-
-       * realgud/common/eval.el: Make realugd:process-filter-save buffer
-       local
-
-2015-02-27  rocky <address@hidden>
-
-       * realgud/common/buffer/backtrace.el, realgud/common/cmds.el,
-       realgud/common/eval.el, realgud/common/key.el: Bind RET in shortkey
-       to repeat-last; add FSF (C)
-
-2015-02-18  rocky <address@hidden>
-
-       * realgud/common/buffer/command.el, realgud/common/eval.el,
-       realgud/common/track.el, realgud/debugger/jdb/core.el,
-       realgud/debugger/trepan.pl/core.el,
-       realgud/debugger/trepan.pl/init.el: Work on filtering eval output
-
-2015-02-17  rocky <address@hidden>
-
-       * Makefile.am, make-check-filter.rb, test/make-check-filter.rb: Move
-       test helper into test
-
-2015-02-17  rocky <address@hidden>
-
-       * realgud/common/run.el: Remove another warning
-
-2015-02-17  rocky <address@hidden>
-
-       * realgud/debugger/pdb/init.el: In pdb, for to evaluate an
-       expression use "p"
-
-2015-02-17  rocky <address@hidden>
-
-       * realgud.el, realgud/common/eval.el, realgud/common/shortkey.el,
-       test/test-realgud.el: Experimental: mouse2 runs eval
-
-2015-02-13  rocky <address@hidden>
-
-       * realgud.el, test/test-realgud.el: Fix breakage from changing from
-       realgud:string-starts-with to string-prefix-p
-
-2015-02-13  rocky <address@hidden>
-
-       * realgud.el, realgud/common/buffer/source.el,
-       realgud/common/init.el, realgud/common/shortkey.el,
-       realgud/common/utils.el, realgud/debugger/gub/gub.el,
-       realgud/debugger/trepan8/trepan8.el, test/test-realgud.el,
-       test/test-utils.el: realgud:string-starts-with -> string-prefix-p.
-       Thanks to Stefan Monnier for pointing this out.
-
-2015-02-13  rocky <address@hidden>
-
-       * realgud/common/buffer/source.el: Add interactive command
-       realgud:cmdbuf-associate to associate a source-code buffer with a
-       command buffer. Probably not good enough, bujt it's a start.
-
-2015-02-13  rocky <address@hidden>
-
-       * realgud/common/utils.el: Separate utility functions into its own
-       file
-
-2015-02-13  rocky <address@hidden>
-
-       * .gitignore, COPYING: Add GPL COPYING file
-
-2015-02-13  rocky <address@hidden>
-
-       * el-get-install.el, realgud.el, realgud/common/run.el,
-       realgud/debugger/gdb/gdb.el, realgud/debugger/jdb/jdb.el,
-       test/test-realgud.el, test/test-utils.el: Remove dependency on
-       list-utils
-
-2015-02-11  rocky <address@hidden>
-
-       * realgud/debugger/trepan/core.el, realgud/debugger/trepan/init.el: 
-       A couple of trepan bugs.
-
-2015-02-07  rocky <address@hidden>
-
-       * realgud/common/core.el: find-file-noselect is a function, not a
-       variable
-
-2015-02-07  rocky <address@hidden>
-
-       * : commit d70ef4d675279003e05ccc85acffdac988e08538 Author: rocky
-       <address@hidden> Date:   Sat Feb 7 11:04:42 2015 -0500
-
-2015-02-04  rocky <address@hidden>
-
-       * realgud/common/backtrace-mode.el, realgud/common/buffer/info.el,
-       realgud/common/key.el, realgud/common/menu.el,
-       realgud/common/window.el: Small change: realgud-window-bt ->
-       realgud:window-bt
-
-2015-01-26  rocky <address@hidden>
-
-       * realgud/common/buffer/backtrace.el, realgud/common/file.el,
-       realgud/common/track.el, realgud/debugger/jdb/core.el,
-       realgud/debugger/trepan/core.el, realgud/debugger/trepan2/core.el,
-       test/test-file.el: In backtrace buffer create location structure
-       after parsing lines. This information will be used instead of
-       running a "frame" command. Add realgud:backtrace-describe
-
-2015-01-25  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/init.el,
-       realgud/debugger/trepan2/init.el,
-       realgud/debugger/trepan3k/init.el, realgud/debugger/zshdb/init.el,
-       realgud/lang/posix-shell.el, realgud/lang/python.el: Dry
-       trepan2/trepan3 and zshdb/bashdb code by putting more common code in
-       the lang files.
-
-2015-01-25  rocky <address@hidden>
-
-       * realgud/common/follow.el, realgud/debugger/trepan.pl/init.el,
-       test/test-loc-regexp-trepanpl.el, test/test-regexp-trepan2.el,
-       test/test-regexp-trepan3k.el: Work on trepan.pl backtrack patterns
-
-2015-01-25  rocky <address@hidden>
-
-       * .gitignore, realgud/debugger/trepan2/init.el,
-       realgud/debugger/trepan3k/init.el, realgud/lang/python.el,
-       test/node_modules/gcd.js/gcd.js,
-       test/node_modules/gcd.js/package.json, test/test-regexp-trepan3k.el: 
-       DRY python trepan regexps. Add trepan3k regexp test.
-
-2015-01-25  rocky <address@hidden>
-
-       * realgud/common/backtrace-mode.el,
-       realgud/common/buffer/backtrace.el, realgud/common/follow.el,
-       realgud/common/loc.el, realgud/debugger/trepan2/init.el,
-       test/test-regexp-trepan2.el: follow.el loc..el: common routine mouse
-       events to key off of text properties for files, frames and marks.
-       backtrace: Bang more on backtrace buffer.  Work on trepan2 backtrace
-       regexp. Better trepan2 regexp testing.
-
-2015-01-25  rocky <address@hidden>
-
-       * realgud/common/buffer/backtrace.el,
-       realgud/debugger/trepan2/init.el, realgud/debugger/trepan3k/init.el: 
-       init.el: Need minimum match in backtrace regexps. backtrace.el: need
-       to work off of unhighlighed strings
-
-2015-01-24  rocky <address@hidden>
-
-       * README.md: Remove coderwall endorse
-
-2015-01-24  rocky <address@hidden>
-
-       * realgud/common/track.el, realgud/debugger/bashdb/init.el,
-       realgud/debugger/trepan2/init.el, realgud/debugger/trepan3k/init.el: 
-       Try not to delete prompot in diverting output.  Add backtrack regexp
-       for trepan2 and trepan3k (will go into next release)
-
-2015-01-24  rocky <address@hidden>
-
-       * realgud/debugger/trepan3k/init.el, test/gcd.py: test/gcd.py: allow
-       it to work on python3. trpean3k/init.el: fix prompt pattern and
-       allow backtrace, although this doesn't work properly.
-
-2015-01-22  rocky <address@hidden>
-
-       * realgud/common/backtrace-mode.el,
-       realgud/common/backtrack-mode.el,
-       realgud/common/buffer/backtrace.el, realgud/common/shortkey.el,
-       realgud/debugger/trepan2/init.el: Mostly add backtrace pattern for
-       trepan2. Attempt to customize backtrack/backtrace menus.
-
-2015-01-20  rocky <address@hidden>
-
-       * realgud/common/buffer/command.el,
-       realgud/common/buffer/helper.el, realgud/common/buffer/source.el: 
-       Back off realgud:loc-marker -> realgud-loc-marker. Didn't catch all
-       uses.
-
-2015-01-20  rocky <address@hidden>
-
-       * : commit 9fa5ab7ad96a58d44d309ef4734e6b875a53ef14 Author: rocky
-       <address@hidden> Date:   Tue Jan 20 21:29:00 2015 -0500
-
-2015-01-19  rocky <address@hidden>
-
-       * realgud/common/bp.el, realgud/common/buffer/backtrace.el,
-       realgud/common/buffer/command.el, realgud/common/buffer/helper.el,
-       realgud/common/buffer/source.el, realgud/common/fringe.el: mouse
-       button in backtrace buffer works now. Name of buffer change to start
-       with *Backtrace
-
-2015-01-18  rocky <address@hidden>
-
-       * realgud/common/fringe.el, realgud/common/key.el,
-       realgud/common/loc.el, realgud/common/shortkey.el,
-       realgud/common/window.el, test/test-regexp-nodejs.el,
-       test/test-regexp-perldb.el: loc.el: Resolve problem where displayed
-       window was not updating goto-char location.  window.el: simplify
-       logic using loc code.  test-*: reduce more warnings
-
-2015-01-18  rocky <address@hidden>
-
-       * .travis.yml, realgud/common/buffer/command.el,
-       realgud/common/loc.el, realgud/common/lochist.el,
-       realgud/common/shortkey.el, test/test-regexp-gub.el,
-       test/test-regexp-nodejs.el, test/test-regexp-perldb.el: Redo
-       debugger describe info as Org mode (from markdown mode)
-
-2015-01-18  rocky <address@hidden>
-
-       * .travis.yml, realgud/common/buffer/command.el,
-       realgud/common/loc.el, realgud/common/lochist.el: Better tagging of
-       filenames and marks inside command info describe. We're now
-       formatting this as markdown too.  Thanks to wasamasa for the
-       suggestion to use buttons.el
-
-2015-01-18  rocky <address@hidden>
-
-       * realgud/common/buffer/command.el, realgud/common/loc.el: Start to
-       add text properties to command buffer description
-
-2015-01-17  rocky <address@hidden>
-
-       * realgud/common/lochist.el: Don't update history ring if source
-       location position is the same as the last position entered.
-
-2015-01-17  rocky <address@hidden>
-
-       * realgud/debugger/perldb/init.el,
-       realgud/debugger/perldb/perldb.el,
-       realgud/debugger/trepan.pl/init.el, test/test-bashdb.el,
-       test/test-bt-pdb.el, test/test-bt-pydb.el, test/test-bt-pydbgr.el,
-       test/test-bt-rdebug.el, test/test-bt-trepan.el,
-       test/test-bt-trepan2.el, test/test-bt-trepan3k.el,
-       test/test-bt-trepanx.el, test/test-bt-zshdb.el,
-       test/test-common-helper.el, test/test-core.el, test/test-file.el,
-       test/test-gub-core.el, test/test-jdb.el, test/test-lang.el,
-       test/test-loc-regexp-gub.el, test/test-loc-regexp-trepan.el,
-       test/test-loc.el, test/test-lochist.el, test/test-nodejs.el,
-       test/test-pdb.el, test/test-perldb.el, test/test-pydb.el,
-       test/test-pydbgr.el, test/test-rdebug.el, test/test-realgud.el,
-       test/test-regexp-bashdb.el, test/test-regexp-gdb.el,
-       test/test-regexp-jdb.el, test/test-regexp-pdb.el,
-       test/test-regexp-perldb.el, test/test-regexp-trepanpl.el,
-       test/test-regexp.el, test/test-remake-core.el, test/test-remake.el,
-       test/test-shortkey.el, test/test-srcbuf.el,
-       test/test-track-mode.el, test/test-track.el, test/test-trepan2.el: 
-       Save source text in location in for perldb and trepan.pl.  Wrong
-       minibuffer-history variable name in perldb.  Beef up regexp testing
-       in test-regexp-perldb. Same needs to be done in test-regexp-trepanp.
-       require-relative -> load-relative (which is the right name)
-
-2015-01-17  rocky <address@hidden>
-
-       * realgud/common/lochist.el, realgud/common/shortkey.el: Add ability
-       to go back up to 9 places in history with number keys. "u" and "d"
-       shortkey binding messed up.
-
-2015-01-13  rocky <address@hidden>
-
-       * realgud.el, realgud/common/backtrace-mode.el,
-       realgud/common/buffer/backtrace.el, realgud/common/cmds.el,
-       realgud/common/key.el, realgud/common/menu.el,
-       realgud/common/shortkey.el, realgud/common/track-mode.el,
-       realgud/debugger/bashdb/track-mode.el,
-       realgud/debugger/nodejs/track-mode.el,
-       realgud/debugger/perldb/track-mode.el,
-       realgud/debugger/remake/track-mode.el,
-       realgud/debugger/trepan.pl/track-mode.el,
-       realgud/debugger/trepan2/track-mode.el,
-       realgud/debugger/trepan3k/track-mode.el,
-       realgud/debugger/zshdb/init.el,
-       realgud/debugger/zshdb/track-mode.el: Add tool-bar. realgud-cmd- ->
-       realgud:cmd-
-
-2015-01-13  rocky <address@hidden>
-
-       * THANKS: Add NYC Emacs Meetup and Nicolas Dudebout
-
-2015-01-13  rocky <address@hidden>
-
-       * realgud/common/menu.el, realgud/debugger/gdb/gdb.el,
-       realgud/debugger/gdb/track-mode.el, realgud/debugger/jdb/file.el: 
-       gdb: wasn't getting into mode correctly menu.el: up/down mixed up
-       again jdb/file.el: should have added this a while ago
-
-2015-01-12  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/core.el,
-       realgud/debugger/bashdb/track-mode.el,
-       realgud/debugger/gub/core.el, realgud/debugger/rdebug/core.el,
-       realgud/debugger/trepan2/core.el,
-       realgud/debugger/trepan2/track-mode.el,
-       realgud/debugger/trepan3k/core.el: Better last-resort values for
-       script to debug? Use cmd-name which many times is written in the
-       language the debugger accepts.
-
-2015-01-12  rocky <address@hidden>
-
-       * realgud/common/menu.el, realgud/debugger/bashdb/bashdb.el,
-       realgud/debugger/bashdb/track-mode.el,
-       realgud/debugger/gub/track-mode.el,
-       realgud/debugger/pdb/track-mode.el,
-       realgud/debugger/pydb/track-mode.el,
-       realgud/debugger/rdebug/track-mode.el,
-       realgud/debugger/remake/track-mode.el,
-       realgud/debugger/trepan2/track-mode.el,
-       realgud/debugger/zshdb/track-mode.el: menu.el: add menu item for
-       debugger information debugger/*.el wasn't setting up track-mode
-       properly.
-
-2015-01-10  rocky <address@hidden>
-
-       * realgud/common/cmds.el, realgud/common/key.el,
-       realgud/common/menu.el, realgud/common/shortkey.el,
-       realgud/debugger/bashdb/init.el, realgud/debugger/gub/init.el,
-       realgud/debugger/perldb/init.el,
-       realgud/debugger/trepan.pl/init.el,
-       realgud/debugger/trepan2/init.el,
-       realgud/debugger/trepan3k/init.el, realgud/debugger/zshdb/init.el,
-       test/test-lochist.el, test/test-regexp-gdb.el,
-       test/test-regexp-jdb.el, test/test-regexp-pdb.el,
-       test/test-regexp-perldb.el: Add key for "until". Disable shortkey
-       commands that aren't relevant for source or command buffers. Reduce
-       compile warnings in tests.
-
-2015-01-08  rocky <address@hidden>
-
-       * realgud/common/track-mode.el, realgud/debugger/bashdb/bashdb.el,
-       realgud/debugger/gdb/gdb.el, realgud/debugger/gdb/track-mode.el,
-       realgud/debugger/gub/track-mode.el,
-       realgud/debugger/jdb/track-mode.el,
-       realgud/debugger/kshdb/track-mode.el,
-       realgud/debugger/pdb/track-mode.el,
-       realgud/debugger/perldb/track-mode.el,
-       realgud/debugger/pydb/track-mode.el,
-       realgud/debugger/pydbgr/track-mode.el,
-       realgud/debugger/rdebug/track-mode.el,
-       realgud/debugger/remake/core.el, realgud/debugger/remake/remake.el,
-       realgud/debugger/remake/track-mode.el,
-       realgud/debugger/trepan/track-mode.el,
-       realgud/debugger/trepan2/track-mode.el,
-       realgud/debugger/trepan2/trepan2.el,
-       realgud/debugger/trepan3k/track-mode.el,
-       realgud/debugger/trepan8/track-mode.el, test/test-bashdb.el,
-       test/test-zshdb.el: Remove duplicate signal menu in shell, yet
-       again. test-* remove compiler warnings and correct a wrong variable
-       it found.
-
-2015-01-08  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/bashdb.el,
-       realgud/debugger/remake/core.el, realgud/debugger/remake/remake.el,
-       realgud/debugger/trepan2/trepan2.el,
-       realgud/debugger/zshdb/zshdb.el: remake: correct invocation.  rest:
-       respect custom variable debugger-command-name
-
-2015-01-08  rocky <address@hidden>
-
-       * realgud/common/buffer/backtrace.el, realgud/common/core.el,
-       realgud/common/menu.el, realgud/common/shortkey.el,
-       realgud/common/track-mode.el, realgud/debugger/trepan/core.el,
-       test/test-pdb.el, test/test-regexp.el, test/test-send.el,
-       test/test-shortkey.el: Think I now have debugger, and comint menus
-       (signal, in/out.._) appearing only once now. Remove some more
-       compile warnings and fix a bug it found in trepan/core.pl.
-
-2015-01-08  rocky <address@hidden>
-
-       * test/test-bashdb.el, test/test-zshdb.el: More robust zshdb and
-       bashdb test: make outside variable buffer-local for more replicable
-       results
-
-2015-01-07  rocky <address@hidden>
-
-       * realgud/common/core.el, realgud/common/lang.el,
-       realgud/debugger/bashdb/core.el, realgud/debugger/kshdb/core.el,
-       realgud/debugger/zshdb/core.el, test/test-bashdb.el,
-       test/test-lang.el, test/test-zshdb.el: core.el: consider buffers
-       with the right mode in suggest-invocation.  *shdb/core.el: The right
-       mode is sh(-mode), not Shell-Script which is what is displayed.
-
-2015-01-07  rocky <address@hidden>
-
-       * realgud/common/run.el, realgud/debugger/bashdb/bashdb.el,
-       realgud/debugger/nodejs/nodejs.el, realgud/debugger/pdb/pdb.el,
-       realgud/debugger/perldb/perldb.el, realgud/debugger/pydb/pydb.el,
-       realgud/debugger/pydbgr/pydbgr.el,
-       realgud/debugger/rdebug/rdebug.el,
-       realgud/debugger/remake/remake.el,
-       realgud/debugger/trepan.pl/trepanpl.el,
-       realgud/debugger/trepan/trepan.el,
-       realgud/debugger/trepan2/trepan2.el,
-       realgud/debugger/trepan3k/trepan3k.el,
-       realgud/debugger/trepan8/trepan8.el,
-       realgud/debugger/zshdb/zshdb.el, test/test-bashdb.el,
-       test/test-bt-pdb.el, test/test-bt-pydb.el, test/test-bt-pydbgr.el,
-       test/test-bt-rdebug.el, test/test-bt-trepan.el,
-       test/test-bt-trepan2.el, test/test-bt-trepan3k.el,
-       test/test-bt-trepanx.el, test/test-bt-zshdb.el, test/test-lang.el,
-       test/test-loc-regexp-gub.el, test/test-loc-regexp-trepan.el,
-       test/test-loc-regexp-trepanx.el, test/test-nodejs.el,
-       test/test-pdb.el, test/test-pydb.el, test/test-pydbgr.el,
-       test/test-rdebug.el, test/test-regexp-bashdb.el,
-       test/test-regexp-gdb.el, test/test-regexp-ruby.el: Remove mode hook
-       from run-debugger call. Remove some  __FILE__ warnings in tests.
-
-2015-01-06  rocky <address@hidden>
-
-       * : commit 7fcd01ccadb9a598504a0bbfa1ab850cdea2fa7b Author: rocky
-       <address@hidden> Date:   Tue Jan 6 19:41:44 2015 -0500
-
-2015-01-03  rocky <address@hidden>
-
-       * realgud/debugger/gub/init.el: Cut-and-paste Typo in hash name.
-
-2015-01-03  rocky <address@hidden>
-
-       * realgud/debugger/gub/init.el: Add Go language traceback pattern
-
-2015-01-02  rocky <address@hidden>
-
-       * realgud/common/helper.el: Had a stupid bug, wrong variable name,
-       in trepan.pl transformation.
-
-2014-12-31  rocky <address@hidden>
-
-       * realgud/debugger/gdb/core.el, test/test-gdb.el: Add
-       realgud:gdb-executable: attempt to see if a file is a binary using
-       the "file" command.
-
-2014-12-31  rocky <address@hidden>
-
-       * .travis.yml: Travis doesn't have emacs24 without sudo yet.
-       Reinstate sudo.
-
-2014-12-31  rocky <address@hidden>
-
-       * .travis.yml: Try docker non-sudo testing
-
-2014-12-31  rocky <address@hidden>
-
-       * realgud/debugger/gdb/core.el, test/Makefile.am, test/gdb/bar.sh,
-       test/gdb/baz, test/gdb/baz.c, test/gdb/foo, test/gdb/foo.c,
-       test/gdb/test2/bar.sh, test/gdb/test2/baz.c, test/test-bashdb.el,
-       test/test-gdb.el: Redo realgud:gdb-suggest-invocation
-
-2014-12-30  rocky <address@hidden>
-
-       * realgud/common/helper.el: Need to back off of stripping filename
-       extensions from trepan.pl.
-
-2014-12-28  rocky <address@hidden>
-
-       * realgud/debugger/kshdb/core.el: Remove zsh name references
-
-2014-12-28  rocky <address@hidden>
-
-       * realgud/common/helper.el, realgud/debugger/kshdb/kshdb.el: 
-       helper.el: in debugger-name transformation use basically the
-       basename without the extension.  kshdb.el: realgud-run-process ->
-       realgud:run-process
-
-2014-12-27  rocky <address@hidden>
-
-       * realgud/common/helper.el: When checking debugger use just the
-       suffix. Could also try something like basename sans prefix.
-
-2014-12-24  rocky <address@hidden>
-
-       * realgud/debugger/gub/gub.el: realgud-run-process ->
-       realgud:run-process
-
-2014-12-22  rocky <address@hidden>
-
-       * realgud/common/helper.el, realgud/common/track.el: Need to
-       transform "tortoise" into "gub" for realgud:track-set-debugger
-
-2014-12-17  rocky <address@hidden>
-
-       * Makefile.am, realgud.el: Administrivia to make in stable Melpa
-       work.  realgud.el: update version numbers Makefile.am: remove
-       duplicate code that snuck in. remove ChangeLog before remaking
-
-2014-12-16  rocky <address@hidden>
-
-       * Makefile.am, README.md, configure.ac, realgud.el: Bump version and
-       add melpa stable badge
-
-2014-12-16  rocky <address@hidden>
-
-       * configure.ac, realgud.el: Release 1.0
-
-2014-11-22  rocky <address@hidden>
-
-       * test/test-track.el: With recent find-file additon to trepan, the
-       test needs now to load trepan/core.el
-
-2014-11-22  rocky <address@hidden>
-
-       * realgud/common/file.el, realgud/debugger/trepan/core.el,
-       realgud/debugger/trepan/init.el, realgud/debugger/trepan2/core.el,
-       test/test-file.el, test/test-jdb.el: strip leading (and trailing)
-       blanks in trepan and trepan2 for their respective find files.
-       Correct trepan2's call to realgud-file-loc-from-line. trepan now has
-       its own find-file.  Adjust some tests for current conditions.
-
-2014-11-19  rocky <address@hidden>
-
-       * realgud/common/file.el, realgud/common/fringe.el,
-       realgud/common/loc.el, test/test-file.el: Do a little better about
-       saving column position information by stripping blanks and saving
-       the column number in the position. The fringe arrow however still
-       messes moving the column to something other than 0.
-
-2014-11-18  rocky <address@hidden>
-
-       * realgud/debugger/gdb/core.el: gdb: Guard against buffer-file-name
-       returning nil
-
-2014-11-16  rocky <address@hidden>
-
-       * realgud/common/helper.el, realgud/debugger/jdb/core.el,
-       realgud/debugger/jdb/track-mode.el,
-       realgud/debugger/trepan2/core.el, test/Makefile.am: helper.el:
-       transform jdb to realgud:jdb core.el: use langauge-specific
-       extensions in compilation-find-file track-mode.el: remove
-       defvaralias for now.
-
-2014-11-16  rocky <address@hidden>
-
-       * realgud/common/file.el, realgud/common/track.el,
-       realgud/debugger/jdb/core.el, realgud/debugger/jdb/track-mode.el,
-       test/test-regexp-gdb.el: Bugs, bugs, bugs: file.el: wasn't passing
-       filename on callback.  track.el: stop ansi colors from source string
-       core.el: wrong else nesting, wrong signature for
-       realgud-file-loc-from-line track-mode.el: alias variable workaround
-       test-regexp-gdb.el: reduce warnings
-
-2014-11-15  rocky <address@hidden>
-
-       * realgud.el, realgud/common/file.el, realgud/debugger/jdb/core.el,
-       realgud/debugger/trepan2/core.el, realgud/debugger/trepan2/init.el,
-       test/test-bt-trepanx.el, test/test-bt-zshdb.el, test/test-jdb.el,
-       test/test-loc-regexp-gub.el, test/test-loc-regexp-trepan.el,
-       test/test-loc-regexp-trepanx.el, test/test-regexp-gub.el,
-       test/test-trepan2.el: {trepan2,jdb}/{core,init}.el: Start adding
-       debugger-specific find-file routines. jdb needs it the most. trepan2
-       we are trying out now. Add debugger-specific file remaping hashes.
-       test/*.el: reduce warnings.
-
-2014-11-15  rocky <address@hidden>
-
-       * realgud/debugger/jdb/init.el: Correct jdb backtrace location
-       pattern
-
-2014-11-15  rocky <address@hidden>
-
-       * realgud/debugger/jdb/init.el, realgud/debugger/jdb/track-mode.el,
-       test/test-regexp-jdb.el: better prompt matching. Fix some track-mode
-       handling bugs.
-
-2014-11-14  rocky <address@hidden>
-
-       * realgud.el, realgud/debugger/jdb/track-mode.el,
-       test/test-bt-pdb.el, test/test-bt-pydb.el, test/test-bt-pydbgr.el,
-       test/test-bt-rdebug.el, test/test-bt-trepan.el,
-       test/test-bt-trepan2.el, test/test-bt-trepan3k.el,
-       test/test-regexp-gdb.el, test/test-regexp-gub.el,
-       test/test-regexp-perldb.el: realgud.el: Add autoloads for jdb.
-       jdb/track-mode: add realgud: prefix to mode map vars test/*: reduce
-       warnings
-
-2014-11-14  rocky <address@hidden>
-
-       * realgud.el: Update commentary.
-
-2014-11-13  rocky <address@hidden>
-
-       * realgud/common/file.el, realgud/common/track.el,
-       realgud/debugger/jdb/core.el, realgud/debugger/jdb/init.el,
-       realgud/debugger/jdb/jdb.el, realgud/debugger/jdb/track-mode.el,
-       test/test-jdb.el: More work on jdb. Track source text and make
-       track-mode work.
-
-2014-11-13  rocky <address@hidden>
-
-       * realgud/common/track.el, realgud/debugger/gdb/gdb.el,
-       realgud/debugger/jdb/core.el, realgud/debugger/jdb/jdb.el,
-       realgud/debugger/trepan.pl/track-mode.el: common/track.el
-       realgud-track-loc: correct if/else nesting core.eljdb.el: Use gud
-       filename resolution via classpath gdb.el,jdb.el: reduce warnings
-       treapn.pl: preface mode variables with realgud:trepanpl rather than
-       trepanpl remove variable access error.
-
-2014-11-12  rocky <address@hidden>
-
-       * : commit 8afa37cb4844169a90cfd9f80b940360c43f4b9e Author: rocky
-       <address@hidden> Date:   Wed Nov 12 23:46:06 2014 -0500
-
-2014-11-12  rocky <address@hidden>
-
-       * : commit 2d0f9af8cffbd489c976642cae8e451a7e6d2de2 Author: rocky
-       <address@hidden> Date:   Thu Nov 6 22:19:46 2014 -0500
-
-2014-11-06  rocky <address@hidden>
-
-       * realgud/debugger/trepan2/init.el, test/test-regexp-trepan2.el: 
-       Track trepan2 source code lines
-
-2014-11-06  rocky <address@hidden>
-
-       * realgud/common/file.el, test/test-bashdb.el, test/test-file.el,
-       test/test-zshdb.el: Sync zshdb with bashdb. Get column numbers from
-       source text if we can.
-
-2014-11-06  rocky <address@hidden>
-
-       * realgud/common/run.el, realgud/debugger/bashdb/init.el,
-       realgud/debugger/zshdb/core.el, realgud/debugger/zshdb/init.el: 
-       run.el: remove stray character in error message zshdb: fix some
-       stray typos, allow saving source code text.
-
-2014-11-06  rocky <address@hidden>
-
-       * realgud/common/track.el: Strip out ansi color codes when saving
-       source text.
-
-2014-11-05  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/init.el: Match on bashdb source text if
-       that is there
-
-2014-11-05  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/init.el: Match on bashdb source text if
-       that's there.
-
-2014-11-01  rocky <address@hidden>
-
-       * realgud/common/cmds.el, realgud/common/send.el,
-       realgud/common/track.el, realgud/debugger/bashdb/init.el,
-       realgud/debugger/gdb/init.el, realgud/debugger/jdb/Makefile.am,
-       realgud/debugger/jdb/README,
-       realgud/debugger/jdb/backtrack-mode.el,
-       realgud/debugger/jdb/core.el, realgud/debugger/jdb/init.el,
-       realgud/debugger/jdb/jdb.el, realgud/debugger/jdb/track-mode.el,
-       realgud/debugger/kshdb/init.el, realgud/debugger/perldb/init.el,
-       realgud/debugger/zshdb/init.el, test/test-regexp-jdb.el: track.el:
-       "Unable to match.." message was wrong. Deal with no source-str
-       better /init.el: start adding clear command send.el: start to add
-       class name for upcoming jdb
-
-2014-11-01  rocky <address@hidden>
-
-       * realgud/common/cmds.el, realgud/common/send.el,
-       realgud/common/track.el, realgud/debugger/bashdb/init.el,
-       realgud/debugger/gdb/init.el, realgud/debugger/jdb/init.el,
-       realgud/debugger/kshdb/init.el, realgud/debugger/perldb/init.el,
-       realgud/debugger/zshdb/init.el: track.el: "Unable to match.."
-       message was wrong. Deal with no source-str better /init.el: start
-       adding clear command send.el: start to add class name for jdb
-
-2014-10-14  rocky <address@hidden>
-
-       * realgud/common/buffer/command.el, realgud/common/regexp.el,
-       realgud/common/track.el, realgud/debugger/jdb/core.el,
-       realgud/debugger/jdb/init.el, realgud/debugger/remake/core.el,
-       realgud/debugger/trepan2/init.el,
-       realgud/debugger/trepan3k/init.el, realgud/lang/python.el,
-       test/test-regexp-jdb.el: regexp.el: add field for class name, and
-       stop event command.el: add callback to get parse location info.
-       Needed for java trepan2,trepan3k: note that <string> is a
-       pseudo-fiile jdb: closer, but not functional yet.
-
-2014-10-13  rocky <address@hidden>
-
-       * realgud/debugger/jdb/Makefile.am, realgud/debugger/jdb/README,
-       realgud/debugger/jdb/backtrack-mode.el,
-       realgud/debugger/jdb/core.el, realgud/debugger/jdb/init.el,
-       realgud/debugger/jdb/jdb.el, realgud/debugger/jdb/track-mode.el,
-       realgud/debugger/trepan/backtrack-mode.el, test/test-regexp-jdb.el: 
-       First cut at dealing with jdb
-
-2014-09-25  rocky <address@hidden>
-
-       * realgud/common/track.el, realgud/debugger/remake/init.el,
-       test/test-track.el: remake/init.el: Try source line tracking *:
-       realgud-track-from-region -> realgud:track-from-region track.el:
-       correct garbled message to something grammatically correct but
-       sometimes still garbled.
-
-2014-09-24  rocky <address@hidden>
-
-       * realgud/common/buffer/command.el,
-       realgud/common/buffer/source.el, realgud/common/file.el,
-       realgud/common/fringe.el, realgud/common/loc.el,
-       realgud/common/regexp.el, realgud/common/track.el,
-       realgud/debugger/trepan/init.el, realgud/debugger/trepan2/init.el,
-       test/test-common-helper.el, test/test-file.el, test/test-loc.el,
-       test/test-lochist.el, test/test-track.el: Start storing source text
-       in location structures. Use this for seeing if we are out of sync
-       with the source.
-
-2014-09-17  rocky <address@hidden>
-
-       * realgud/debugger/trepan/track-mode.el: Add key bindings for
-       realgud:goto-lang-backtrace-line and
-       realgud:goto-debugger-backtrace-line to trepan-track-mode.
-
-2014-09-14  rocky <address@hidden>
-
-       * realgud/common/cmds.el, realgud/common/core.el,
-       realgud/common/fringe.el, realgud/common/reset.el,
-       realgud/common/track.el, realgud/debugger/rdebug/track-mode.el,
-       realgud/debugger/trepan/backtrack-mode.el,
-       realgud/debugger/trepan/track-mode.el,
-       realgud/debugger/trepan8/track-mode.el,
-       realgud/debugger/trepanx/track-mode.el, realgud/lang/ruby.el: More
-       aggressive about clearing source-buffer marks on termination.  More
-       realgud- -> realgud: name changes.  Try to remove more warnings
-
-2014-08-31  rocky <address@hidden>
-
-       * realgud/debugger/trepan2/trepan2.el: Correct name of trepan2
-       minibuffer history variable
-
-2014-08-26  rocky <address@hidden>
-
-       * realgud/debugger/gdb/core.el: A better (but still not ideal)
-       realgud:gdb-suggest-invocation
-
-2014-08-26  rocky <address@hidden>
-
-       * realgud/common/backtrack-mode.el, realgud/common/bp.el,
-       realgud/common/helper.el, realgud/common/shortkey.el,
-       realgud/common/track.el, realgud/debugger/gdb/gdb.el,
-       realgud/debugger/gdb/track-mode.el, test/test-common-helper.el,
-       test/test-shortkey.el: helper.el: add
-       realgud:debugger-name-transform to adjust between the descrepancies
-       between our internal debugger-name prefix and the real debugger name
-       bp.el an "if" was previously erroreously translated into "when"
-       shortkey.el: use realgud:debugger-name-transform gdb.el: missing a
-       parameter on realgud:run-process See also issue #31.
-
-2014-08-20  rocky <address@hidden>
-
-       * realgud/common/backtrack-mode.el,
-       realgud/common/buffer/command.el, realgud/common/run.el,
-       realgud/common/track-mode.el, realgud/common/track.el,
-       realgud/debugger/bashdb/track-mode.el,
-       realgud/debugger/gdb/track-mode.el,
-       realgud/debugger/gub/track-mode.el,
-       realgud/debugger/kshdb/track-mode.el,
-       realgud/debugger/nodejs/track-mode.el,
-       realgud/debugger/pdb/track-mode.el,
-       realgud/debugger/perldb/track-mode.el,
-       realgud/debugger/pydb/track-mode.el,
-       realgud/debugger/pydbgr/track-mode.el,
-       realgud/debugger/rdebug/track-mode.el,
-       realgud/debugger/remake/track-mode.el,
-       realgud/debugger/trepan.pl/track-mode.el,
-       realgud/debugger/trepan/track-mode.el,
-       realgud/debugger/trepan2/track-mode.el,
-       realgud/debugger/trepan3k/track-mode.el,
-       realgud/debugger/trepan8/track-mode.el,
-       realgud/debugger/trepanx/track-mode.el,
-       realgud/debugger/zshdb/track-mode.el: 
-       realgud-track-set-debugger->realgud:track-set-debugger.  Namespace
-       one command-name at a time. track.el: remove undeclared fn warnings.
-
-2014-08-16  rocky <address@hidden>
-
-       * Makefile.am, realgud/debugger/trepan/trepan.el: Makefile.am: more
-       .PHONY targets. Set realgud:trepan-command-name
-
-2014-08-03  rocky <address@hidden>
-
-       * realgud/common/core.el: realgud:kill-buffer-hook : Only terminate
-       if we are in a command buffer. Don't do anything for killing source
-       buffers.
-
-2014-08-03  rocky <address@hidden>
-
-       * realgud/common/fringe.el, test/test-srcbuf.el: Work around
-       "trepan-short-key-mode-map undefined problem in tests-srcbuf; add
-       yet another definition in fringe to make a warning go away
-
-2014-08-03  R. Bernstein <address@hidden>
-
-       * : Merge pull request #29 from mar-kolya/kill-buffer-fixes Kill buffer 
fixes - even though we have the travis failure. Will
-       work around in next commit.
-
-2014-08-03  Nikolay Martynov <address@hidden>
-
-       * realgud/common/shortkey.el: Do not enable short key mode if
-       debugger is not running If debugger is not running short key mode 
should not be enabled and
-       variable that says that is is enabled should not be set.  This fixes 
the problem when desktop module restores shortkey mode of
-       long gone debuggers.
-
-2014-07-27  rocky <address@hidden>
-
-       * realgud/common/attach.el, realgud/common/backtrace-mode.el,
-       realgud/common/buffer/command.el, realgud/common/cmds.el,
-       realgud/common/lochist.el, realgud/common/menu.el,
-       realgud/common/track-mode.el, realgud/debugger/bashdb/bashdb.el,
-       realgud/debugger/pydbgr/pydbgr.el,
-       realgud/debugger/trepan.pl/init.el: Remove last vestiges of use of
-       "dbgr" in doc strings and a couple of defcustom group fixes
-
-2014-07-27  rocky <address@hidden>
-
-       * realgud/common/attach.el: Commands to associate a source buffer to
-       a command buffer and vice versa.
-
-2014-07-26  rocky <address@hidden>
-
-       * realgud/common/core.el, realgud/debugger/bashdb/bashdb.el,
-       realgud/debugger/bashdb/core.el,
-       realgud/debugger/bashdb/track-mode.el, realgud/debugger/gdb/gdb.el,
-       realgud/debugger/gub/core.el, realgud/debugger/gub/gub.el,
-       realgud/debugger/gub/track-mode.el, realgud/debugger/kshdb/core.el,
-       realgud/debugger/kshdb/kshdb.el, realgud/debugger/nodejs/core.el,
-       realgud/debugger/nodejs/nodejs.el,
-       realgud/debugger/nodejs/track-mode.el,
-       realgud/debugger/pdb/core.el, realgud/debugger/pdb/pdb.el,
-       realgud/debugger/pdb/track-mode.el,
-       realgud/debugger/perldb/perldb.el,
-       realgud/debugger/perldb/track-mode.el,
-       realgud/debugger/pydb/core.el, realgud/debugger/pydb/pydb.el,
-       realgud/debugger/pydb/track-mode.el,
-       realgud/debugger/pydbgr/core.el, realgud/debugger/pydbgr/pydbgr.el,
-       realgud/debugger/pydbgr/track-mode.el,
-       realgud/debugger/rdebug/core.el, realgud/debugger/rdebug/rdebug.el,
-       realgud/debugger/rdebug/track-mode.el,
-       realgud/debugger/remake/core.el, realgud/debugger/remake/remake.el,
-       realgud/debugger/remake/track-mode.el,
-       realgud/debugger/trepan.pl/backtrack-mode.el,
-       realgud/debugger/trepan.pl/track-mode.el,
-       realgud/debugger/trepan.pl/trepanpl.el,
-       realgud/debugger/trepan/backtrack-mode.el,
-       realgud/debugger/trepan/core.el,
-       realgud/debugger/trepan/track-mode.el,
-       realgud/debugger/trepan/trepan.el,
-       realgud/debugger/trepan2/core.el,
-       realgud/debugger/trepan2/track-mode.el,
-       realgud/debugger/trepan2/trepan2.el,
-       realgud/debugger/trepan3k/core.el,
-       realgud/debugger/trepan3k/track-mode.el,
-       realgud/debugger/trepan3k/trepan3k.el,
-       realgud/debugger/trepan8/core.el,
-       realgud/debugger/trepan8/track-mode.el,
-       realgud/debugger/trepan8/trepan8.el,
-       realgud/debugger/trepanx/core.el,
-       realgud/debugger/trepanx/track-mode.el,
-       realgud/debugger/trepanx/trepanx.el,
-       realgud/debugger/zshdb/core.el,
-       realgud/debugger/zshdb/track-mode.el,
-       realgud/debugger/zshdb/zshdb.el: Go over customization groups and
-       add realgud: namespace. Assume a minimum of Emacs 24 now
-
-2014-07-26  rocky <address@hidden>
-
-       * .gitignore, realgud/debugger/nodejs/nodejs.el,
-       realgud/debugger/zshdb/zshdb.el, test/gcd.js: nodejs.el: remove
-       nodejs alias since nodejs is a command in nodejs-repl.  Ignore
-       npmp-debug.log. Corret nodejs minibuffer variable name.  zshdb.el:
-       correct name for location of zshdb-track-mode gcd.js: make
-       interactive which forces us to stop.
-
-2014-07-26  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/core.el, realgud/debugger/gub/core.el,
-       realgud/debugger/kshdb/core.el, realgud/debugger/nodejs/core.el,
-       realgud/debugger/pdb/core.el, realgud/debugger/pydb/core.el,
-       realgud/debugger/pydbgr/core.el, realgud/debugger/rdebug/core.el,
-       realgud/debugger/remake/core.el, realgud/debugger/trepan/core.el,
-       realgud/debugger/trepan2/core.el,
-       realgud/debugger/trepan3k/core.el,
-       realgud/debugger/trepan8/core.el, realgud/debugger/trepanx/core.el,
-       realgud/debugger/zshdb/core.el, realgud/debugger/zshdb/zshdb.el: 
-       nodejs/core.el: Add nodemon as an acceptable debugger name for
-       nodejs */core.el: customize-... -> realgud:customize-...
-
-2014-07-25  rocky <address@hidden>
-
-       * realgud/common/track-mode.el, realgud/debugger/bashdb/bashdb.el,
-       realgud/debugger/gub/gub.el, realgud/debugger/kshdb/kshdb.el,
-       realgud/debugger/nodejs/core.el, realgud/debugger/nodejs/nodejs.el,
-       realgud/debugger/pdb/pdb.el, realgud/debugger/pydb/pydb.el,
-       realgud/debugger/pydbgr/pydbgr.el,
-       realgud/debugger/rdebug/rdebug.el,
-       realgud/debugger/remake/remake.el,
-       realgud/debugger/trepan.pl/trepanpl.el,
-       realgud/debugger/trepan/trepan.el,
-       realgud/debugger/trepan2/trepan2.el,
-       realgud/debugger/trepan3k/trepan3k.el,
-       realgud/debugger/trepan8/trepan8.el,
-       realgud/debugger/trepanx/trepanx.el,
-       realgud/debugger/zshdb/zshdb.el: defcustom names use realgud:
-       prefix, e.g. realgud:pdb instead of pdb.
-       realgud-track-mode-{enable,disable} ->
-       realgud:track-mode-{enable,disable}.
-
-2014-07-25  rocky <address@hidden>
-
-       * realgud/common/lochist.el, realgud/common/track-mode.el: 
-       lochist.el: loc ation indexing was off by one (is zero origin) and
-       we were testing out of bounds after access.  track-mode.el: remove
-       undefined function warnings. Don't go in to comint-mode if we are
-       already in comint mode.
-
-2014-07-21  rocky <address@hidden>
-
-       * realgud/common/reset.el, realgud/common/run.el,
-       realgud/debugger/bashdb/bashdb.el, realgud/debugger/bashdb/core.el,
-       realgud/debugger/nodejs/nodejs.el, realgud/debugger/pdb/pdb.el,
-       realgud/debugger/perldb/core.el, realgud/debugger/perldb/perldb.el,
-       realgud/debugger/pydb/pydb.el, realgud/debugger/pydbgr/pydbgr.el,
-       realgud/debugger/rdebug/rdebug.el,
-       realgud/debugger/trepan.pl/trepanpl.el,
-       realgud/debugger/trepan/trepan.el,
-       realgud/debugger/trepan2/trepan2.el,
-       realgud/debugger/trepan3k/trepan3k.el,
-       realgud/debugger/trepan8/trepan8.el,
-       realgud/debugger/zshdb/core.el, realgud/debugger/zshdb/zshdb.el: 
-       Make rdebug more like the others: use realgud:run-debugger and set
-       name realgud:rdebug. In debugger docstrings, mention
-       realgud:expand-with-file rather than expand-with-file.
-
-2014-07-12  rocky <address@hidden>
-
-       * test/test-trepanpl.el: Debugger name in test changed:
-       realgud:trepanpl -> realgud:trpan.pl
-
-2014-07-12  rocky <address@hidden>
-
-       * realgud.el, realgud/common/run.el,
-       realgud/debugger/bashdb/bashdb.el, realgud/debugger/bashdb/core.el,
-       realgud/debugger/gdb/core.el, realgud/debugger/gub/core.el,
-       realgud/debugger/kshdb/core.el, realgud/debugger/kshdb/kshdb.el,
-       realgud/debugger/nodejs/nodejs.el, realgud/debugger/pdb/core.el,
-       realgud/debugger/pdb/pdb.el, realgud/debugger/perldb/core.el,
-       realgud/debugger/perldb/perldb.el, realgud/debugger/pydb/core.el,
-       realgud/debugger/pydb/pydb.el, realgud/debugger/pydbgr/core.el,
-       realgud/debugger/pydbgr/pydbgr.el, realgud/debugger/rdebug/core.el,
-       realgud/debugger/remake/core.el, realgud/debugger/remake/remake.el,
-       realgud/debugger/trepan.pl/core.el,
-       realgud/debugger/trepan.pl/trepanpl.el,
-       realgud/debugger/trepan/core.el, realgud/debugger/trepan/trepan.el,
-       realgud/debugger/trepan2/core.el,
-       realgud/debugger/trepan2/trepan2.el,
-       realgud/debugger/trepan3k/core.el,
-       realgud/debugger/trepan3k/trepan3k.el,
-       realgud/debugger/trepan8/core.el,
-       realgud/debugger/trepan8/trepan8.el,
-       realgud/debugger/trepanx/core.el,
-       realgud/debugger/trepanx/trepanx.el,
-       realgud/debugger/zshdb/core.el, realgud/debugger/zshdb/zshdb.el,
-       test/test-bashdb.el, test/test-nodejs.el, test/test-pdb.el,
-       test/test-trepanpl.el, test/test-zshdb.el: Properly set the
-       minibuffer history for each debugger.
-
-2014-07-09  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/core.el, realgud/debugger/gdb/core.el,
-       realgud/debugger/gdb/gdb.el, realgud/debugger/kshdb/core.el,
-       realgud/debugger/remake/core.el, realgud/debugger/remake/remake.el,
-       realgud/debugger/trepan/core.el, test/gcd.sh, test/test-bashdb.el,
-       test/test-gub-core.el, test/test-remake-core.el: DRY/fix debugger
-       invocation code. This time, mostly for remake and gdb
-
-2014-07-07  rocky <address@hidden>
-
-       * realgud/debugger/pydbgr/pydbgr.el,
-       realgud/debugger/remake/remake.el,
-       realgud/debugger/trepan2/trepan2.el, test/test-trepanpl.el: Fix up
-       pydbgr and remake somewhat for recent changes
-
-2014-07-06  rocky <address@hidden>
-
-       * realgud/debugger/trepan.pl/trepanpl.el, test/test-trepanpl.el: 
-       Guard more against bad data and set test to better reflect
-       incomplete data. Should fix test-trepanpl test
-
-2014-07-06  rocky <address@hidden>
-
-       * realgud/debugger/nodejs/nodejs.el,
-       realgud/debugger/trepan.pl/trepanpl.el: trepanpl.el: experiment in
-       setting the debugger-specific minibuffer history.
-
-2014-07-06  rocky <address@hidden>
-
-       * make-check-filter.rb, realgud/common/backtrack-mode.el,
-       realgud/common/bp-image-data.el, realgud/common/fringe.el,
-       realgud/common/run.el, test/test-srcbuf.el,
-       test/test-track-mode.el, test/test-trepan2.el,
-       test/test-trepan3k.el: run.el: run realgud-track-set-debugger after
-       creating a new command buffer.  make-rb-check-filter.rb: was failing
-       in non-unicode strings (Elisp byte-compile code) when run with Ruby
-       1.9.  rest: remove more warnings.
-
-2014-07-04  rocky <address@hidden>
-
-       * realgud/common/track.el, realgud/debugger/nodejs/core.el,
-       realgud/debugger/nodejs/nodejs.el, realgud/debugger/perldb/core.el,
-       realgud/debugger/perldb/perldb.el,
-       realgud/debugger/perldb/track-mode.el,
-       realgud/debugger/trepan/track-mode.el, test/test-nodejs.el,
-       test/test-perldb.el: DRY perldb and regularize debugger code more.
-
-2014-07-04  rocky <address@hidden>
-
-       * realgud/debugger/trepan2/core.el,
-       realgud/debugger/trepan3k/core.el: Update copyright for this year on
-       recently changed files
-
-2014-07-04  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/bashdb.el,
-       realgud/debugger/nodejs/nodejs.el, realgud/debugger/pdb/pdb.el,
-       realgud/debugger/pydb/pydb.el, realgud/debugger/trepan/core.el,
-       realgud/debugger/trepan/trepan.el,
-       realgud/debugger/trepan2/core.el,
-       realgud/debugger/trepan2/trepan2.el,
-       realgud/debugger/trepan3k/core.el,
-       realgud/debugger/trepan3k/trepan3k.el,
-       realgud/debugger/trepan8/core.el,
-       realgud/debugger/trepan8/trepan8.el, test/test-core.el,
-       test/test-pdb.el: Go over trepan2 and trepan3k to DRY top-level
-       command and expand script names
-
-2014-07-04  rocky <address@hidden>
-
-       * realgud/debugger/trepan.pl/core.el,
-       realgud/debugger/trepan.pl/trepanpl.el: Small bug in trepan.pl
-       parsing
-
-2014-07-04  rocky <address@hidden>
-
-       * realgud/common/core.el, realgud/debugger/trepan.pl/core.el,
-       realgud/debugger/trepan.pl/trepanpl.el, test/test-core.el,
-       test/test-trepanpl.el: DRY top-level invocation realgud:trepan. Only
-       expand trepan.pl's script name if expansion finds the file.
-       Otherwise, leave unchanged.  core.el: add
-       reaglud:expand-file-name-if-exists
-
-2014-07-04  rocky <address@hidden>
-
-       * realgud/common/core.el, test/test-nodejs.el: Fix bugs in
-       realgud-exec shell and nodejs-test.
-
-2014-07-04  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/core.el: Small bashdb doc changes
-
-2014-07-04  rocky <address@hidden>
-
-       * realgud/debugger/nodejs/nodejs.el: Remove FIXME comment
-
-2014-07-04  rocky <address@hidden>
-
-       * realgud/common/core.el, realgud/common/run.el,
-       realgud/debugger/bashdb/core.el, realgud/debugger/nodejs/core.el,
-       realgud/debugger/nodejs/nodejs.el: DRY nodejs top-level command with
-       newly-created realgud:run-debugger. Improve bashdb parsing to handle
-       bash --debugger variant. Improve error messages when a shell command
-       invoking a debugger fails
-
-2014-07-03  rocky <address@hidden>
-
-       * realgud/common/core.el, realgud/common/run.el,
-       realgud/debugger/bashdb/bashdb.el,
-       realgud/debugger/nodejs/nodejs.el, realgud/debugger/pdb/pdb.el,
-       realgud/debugger/perldb/perldb.el,
-       realgud/debugger/remake/remake.el,
-       realgud/debugger/trepan.pl/trepanpl.el,
-       realgud/debugger/zshdb/zshdb.el, test/gcd.js, test/test-bashdb.el,
-       test/test-nodejs.el, test/test-pdb.el, test/test-remake.el,
-       test/test-trepanpl.el, test/test-zshdb.el: Start to DRY top-level
-       debugger run code.
-
-2014-07-01  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/core.el, realgud/debugger/nodejs/core.el,
-       realgud/debugger/nodejs/nodejs.el, realgud/debugger/pdb/pdb.el,
-       realgud/debugger/trepan.pl/core.el,
-       realgud/debugger/trepan.pl/trepanpl.el,
-       realgud/debugger/zshdb/core.el, realgud/debugger/zshdb/zshdb.el,
-       test/test-nodejs.el: Add Filename expansion on nodejs script name
-
-2014-06-30  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/bashdb.el,
-       realgud/debugger/zshdb/core.el, realgud/debugger/zshdb/zshdb.el,
-       test/test-zshdb.el: Expand path elements in zshdb
-
-2014-06-30  rocky <address@hidden>
-
-       * realgud/debugger/pdb/core.el, realgud/debugger/pdb/pdb.el,
-       realgud/debugger/trepan.pl/core.el,
-       realgud/debugger/trepan.pl/trepanpl.el, test/gcd.pl,
-       test/test-trepanpl.el: Expand path-like elements in trepan.pl. Use
-       trepan.pl command parsing routine more fully now.
-
-2014-06-30  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/bashdb.el,
-       realgud/debugger/bashdb/core.el, realgud/debugger/pdb/core.el,
-       realgud/debugger/pdb/pdb.el, test/test-bashdb.el: Expand path
-       elements in bashdb
-
-2014-06-29  rocky <address@hidden>
-
-       * realgud.el, realgud/common/backtrace-mode.el,
-       realgud/common/buffer/backtrace.el, realgud/common/shortkey.el,
-       realgud/common/track.el, realgud/common/window.el,
-       realgud/debugger/gdb/track-mode.el,
-       realgud/debugger/gub/track-mode.el,
-       realgud/debugger/remake/track-mode.el,
-       realgud/debugger/trepan8/track-mode.el,
-       realgud/debugger/trepanx/track-mode.el, realgud/lang/perl.el,
-       realgud/lang/posix-shell.el, realgud/lang/python.el,
-       realgud/lang/ruby.el, test/test-realgud.el: Change leading - to :
-       for namespace separation more
-
-2014-06-29  rocky <address@hidden>
-
-       * realgud/debugger/pdb/core.el: Correct docstring for pdb-parse-args
-
-2014-06-29  rocky <address@hidden>
-
-       * configure.ac, el-get-install.el, realgud.el,
-       realgud/debugger/pdb/core.el, realgud/debugger/pdb/pdb.el,
-       test/test-pdb.el: pdb.el: Expand script name in pdb via pdb parseing
-       routine.  rest: this Adds a dependency on the list-utils package for
-       list-utils-flatten
-
-2014-06-29  rocky <address@hidden>
-
-       * realgud/common/core.el, test/test-core.el: Make sure we keep
-       separate two invocations that cannonicalize to the same command
-       buffer.  For example "bashdb /etc/profile" and "bashdb /tmp/profile"
-       will canonicalize to buffer "*bashdb profile shell*", but these must
-       remain distinct. We uniquify the former buffer.
-
-2014-06-29  rocky <address@hidden>
-
-       * .gitignore: More ignore
-
-2014-06-29  rocky <address@hidden>
-
-       * realgud/common/buffer/command.el,
-       realgud/common/buffer/helper.el, realgud/common/buffer/source.el,
-       realgud/common/core.el, realgud/common/loc.el,
-       realgud/common/lochist.el: source.el: Remove srcbuf-describe in
-       source which was duplicated in helper.  Remove a compiler warning
-       for buffer-killed? core.el: Add debugger name in error a comint
-       shell error message rest: Use colon (:) for package delimiter on
-       some "describe" functions.
-
-2014-06-28  rocky <address@hidden>
-
-       * configure.ac, realgud/common/core.el,
-       realgud/debugger/bashdb/bashdb.el, realgud/debugger/gdb/gdb.el,
-       realgud/debugger/pdb/pdb.el, realgud/debugger/perldb/perldb.el,
-       realgud/debugger/trepan.pl/trepanpl.el,
-       realgud/debugger/trepan/trepan.el, test/test-pdb.el: Mostly minor
-       doc changes on top-level debugger invocation. TODO: add an auxiliary
-       function to realgud-run-process that can handle interpreter (perl,
-       python, ruby) + debugger name or just debugger name
-
-2014-05-12  rocky <address@hidden>
-
-       * realgud/common/buffer/command.el, realgud/common/send.el: Use json
-       to show command remap hash. Document fake-output-filter(process
-       string.
-
-2014-05-11  rocky <address@hidden>
-
-       * Makefile.am, realgud.el, realgud/common/track.el,
-       realgud/debugger/gub/core.el, realgud/debugger/gub/gub.el,
-       realgud/debugger/gub/init.el, realgud/debugger/gub/track-mode.el,
-       realgud/debugger/kshdb/core.el, realgud/debugger/kshdb/init.el,
-       realgud/debugger/kshdb/kshdb.el,
-       realgud/debugger/kshdb/track-mode.el,
-       realgud/debugger/perldb/core.el, realgud/debugger/perldb/init.el,
-       realgud/debugger/perldb/perldb.el,
-       realgud/debugger/perldb/track-mode.el,
-       realgud/debugger/pydb/core.el, realgud/debugger/pydb/init.el,
-       realgud/debugger/pydb/pydb.el, realgud/debugger/pydb/track-mode.el,
-       realgud/lang/python.el, test/test-perldb.el, test/test-pydb.el,
-       test/test-regexp-gub.el, test/test-regexp-perldb.el,
-       test/test-regexp-pydb.el: Use realgud:*debugger* rather than
-       realgud-*debugger* for remaining debuggers.
-
-2014-05-10  rocky <address@hidden>
-
-       * realgud/debugger/gdb/core.el, realgud/debugger/gdb/init.el,
-       realgud/debugger/nodejs/core.el, realgud/debugger/nodejs/init.el,
-       realgud/debugger/nodejs/nodejs.el,
-       realgud/debugger/nodejs/track-mode.el,
-       realgud/debugger/remake/core.el, realgud/debugger/remake/init.el,
-       realgud/debugger/remake/remake.el,
-       realgud/debugger/remake/track-mode.el, test/test-regexp-nodejs.el,
-       test/test-regexp-remake.el, test/test-remake.el: Go over remake and
-       gdb
-
-2014-05-10  rocky <address@hidden>
-
-       * realgud.el, realgud/common/backtrack-mode.el,
-       realgud/common/track.el, realgud/debugger/gdb/core.el,
-       realgud/debugger/gdb/gdb.el, realgud/debugger/gdb/init.el,
-       realgud/debugger/gdb/track-mode.el, realgud/debugger/zshdb/core.el,
-       realgud/debugger/zshdb/init.el,
-       realgud/debugger/zshdb/track-mode.el,
-       realgud/debugger/zshdb/zshdb.el, test/test-regexp-gdb.el,
-       test/test-regexp-zshdb.el: Work on zshdb and gdb for newer naming
-       conventions
-
-2014-05-10  rocky <address@hidden>
-
-       * Makefile.am, realgud.el, realgud/common/track.el,
-       realgud/debugger/bashdb/bashdb.el, realgud/debugger/bashdb/core.el,
-       realgud/debugger/bashdb/init.el,
-       realgud/debugger/bashdb/track-mode.el,
-       realgud/debugger/pdb/core.el, realgud/debugger/pdb/init.el,
-       realgud/debugger/pdb/pdb.el, realgud/debugger/pdb/track-mode.el,
-       realgud/debugger/rdebug/init.el,
-       realgud/debugger/trepan.pl/backtrack-mode.el,
-       realgud/debugger/trepan.pl/core.el,
-       realgud/debugger/trepan.pl/init.el,
-       realgud/debugger/trepan.pl/track-mode.el,
-       realgud/debugger/trepan.pl/trepanpl.el,
-       realgud/debugger/trepan/backtrack-mode.el,
-       realgud/debugger/trepan/core.el, realgud/debugger/trepan/init.el,
-       realgud/debugger/trepan/track-mode.el,
-       realgud/debugger/trepan/trepan.el,
-       realgud/debugger/trepan2/core.el, realgud/debugger/trepan2/init.el,
-       realgud/debugger/trepan2/track-mode.el,
-       realgud/debugger/trepan2/trepan2.el,
-       realgud/debugger/trepan3k/core.el,
-       realgud/debugger/trepan3k/init.el,
-       realgud/debugger/trepan3k/track-mode.el,
-       realgud/debugger/trepan3k/trepan3k.el,
-       realgud/debugger/trepan8/core.el, realgud/debugger/trepan8/init.el,
-       realgud/debugger/trepan8/track-mode.el,
-       realgud/debugger/trepan8/trepan8.el,
-       realgud/debugger/trepanx/core.el, realgud/debugger/trepanx/init.el,
-       realgud/debugger/trepanx/track-mode.el,
-       realgud/debugger/trepanx/trepanx.el, realgud/lang/ruby.el,
-       test/test-core.el, test/test-pdb.el, test/test-regexp-bashdb.el,
-       test/test-regexp-pdb.el, test/test-regexp-trepan.el,
-       test/test-regexp-trepanpl.el, test/test-regexp-trepanx.el,
-       test/test-track-mode.el, test/test-trepan2.el,
-       test/test-trepan3k.el: start to use : to separate pacakge from
-       reset. e.g.k realgud-trepan -> realgud:trepan
-
-2014-04-05  rocky <address@hidden>
-
-       * realgud/common/shortkey.el: shortkey has to nuke its local map
-       when going out of shortkey-mode.
-
-2014-03-31  rocky <address@hidden>
-
-       * realgud/debugger/zshdb/track-mode.el: Add backtrace to zshdb
-
-2014-03-31  rocky <address@hidden>
-
-       * realgud/common/cmds.el, realgud/common/shortkey.el,
-       realgud/debugger/bashdb/track-mode.el,
-       realgud/debugger/nodejs/init.el,
-       realgud/debugger/nodejs/track-mode.el,
-       realgud/debugger/perldb/track-mode.el,
-       realgud/debugger/remake/core.el,
-       realgud/debugger/remake/track-mode.el,
-       realgud/debugger/trepan.pl/track-mode.el: shortkey.el: remove '.'
-       from mode var name (for trepan.pl).  remake: misc fixes and add
-       backtrace cmds.el: correct docstring for realgud-cmd-backtrace
-       nodejs/init.el: correct regexp for brkpt-set trepan.pl, perldb:
-       correct langauge used.
-
-2014-03-30  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/track-mode.el,
-       realgud/debugger/nodejs/core.el, realgud/debugger/nodejs/init.el,
-       realgud/debugger/nodejs/nodejs.el,
-       realgud/debugger/nodejs/track-mode.el,
-       realgud/debugger/perldb/track-mode.el,
-       realgud/debugger/trepan.pl/track-mode.el,
-       realgud/debugger/trepan2/track-mode.el,
-       realgud/debugger/trepan3k/track-mode.el: Go over specific
-       short-key-mode maps. Had to nuke realgud- prefix in some cases. Add
-       shortkey T for backtrace.
-
-2014-03-30  rocky <address@hidden>
-
-       * el-get-install.el, realgud/debugger/trepan3k/trepan3k.el: Reduce
-       warnings
-
-2014-03-29  rocky <address@hidden>
-
-       * realgud.el, realgud/common/lang.el,
-       realgud/debugger/nodejs/core.el: nodejs/core.el: match js-mode
-       properly on file recommendations. lang.el: use when and unless
-       better. realgud.el: force a load ao custom.el
-
-2014-03-29  rocky <address@hidden>
-
-       * realgud.el: Forgot to pull in node.js debugger code.
-
-2014-03-28  rocky <address@hidden>
-
-       * realgud/debugger/nodejs/core.el, test/test-regexp-nodejs.el: Some
-       small fixes.
-
-2014-03-28  rocky <address@hidden>
-
-       * realgud.el: Hook in nodejs.
-
-2014-03-28  rocky <address@hidden>
-
-       * realgud/debugger/gdb/core.el, realgud/debugger/gdb/gdb.el,
-       realgud/debugger/nodejs/core.el, realgud/debugger/nodejs/nodejs.el,
-       realgud/debugger/nodejs/track-mode.el: Work on nodejs debug
-       invocation. gdb fixes.
-
-2014-03-28  rocky <address@hidden>
-
-       * .travis.yml, el-get-install.el: Can't use snapshot. I don't think
-       we need to pull in emacswiki
-
-2014-03-28  rocky <address@hidden>
-
-       * .travis.yml: Try emacs snapshot
-
-2014-03-27  rocky <address@hidden>
-
-       * : Merge commit 'd02a47b' into nodejs
-
-2014-03-26  rocky <address@hidden>
-
-       * realgud/debugger/nodejs/core.el,
-       realgud/debugger/nodejs/track-mode.el: core.el: qualify names with
-       realgud- more often track-mode.el: add routine to filter extraneous
-       ansi escape sequences in "node debug".
-
-2014-03-26  rocky <address@hidden>
-
-       * realgud/common/custom.el, realgud/common/key.el: Make sure
-       custom.el gets pulled in.
-
-2014-03-26  rocky <address@hidden>
-
-       * realgud/common/cmds.el, realgud/common/shortkey.el,
-       realgud/debugger/nodejs/core.el,
-       realgud/debugger/nodejs/track-mode.el,
-       realgud/debugger/perldb/track-mode.el: shortkey.el: Allow for
-       shortkey mode to be custom to the particular debugger.  cmds.el: Add
-       no-arg versions of step and next perldb: typo in variable name. But
-       more work is needed.
-
-2014-03-25  rocky <address@hidden>
-
-       * realgud/common/core.el: A couple more "declare-function"s
-
-2014-03-24  rocky <address@hidden>
-
-       * test/regexp-helper.el: Sync with master branch
-
-2014-03-24  rocky <address@hidden>
-
-       * realgud/debugger/nodejs/init.el: More conversion
-
-2014-03-24  rocky <address@hidden>
-
-       * realgud/debugger/nodejs/core.el, realgud/debugger/nodejs/init.el,
-       realgud/debugger/nodejs/track-mode.el, test/test-regexp-nodejs.el: 
-       Get source location tracking working. Short-mode keys still need a
-       bit of work.
-
-2014-03-23  rocky <address@hidden>
-
-       * configure.ac, realgud/debugger/Makefile.am,
-       realgud/debugger/nodejs/Makefile.am,
-       realgud/debugger/nodejs/core.el, realgud/debugger/nodejs/init.el,
-       realgud/debugger/nodejs/nodejs.el,
-       realgud/debugger/nodejs/track-mode.el, test/test-regexp-nodejs.el: 
-       Start to handle nodejs debugger. Not nearly done though.
-
-2014-03-23  rocky <address@hidden>
-
-       * test/regexp-helper.el: Better return value on prompt-match()
-
-2014-03-23  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/bashdb.el,
-       realgud/debugger/bashdb/core.el, realgud/debugger/bashdb/init.el: 
-       Comments reflected Ruby inheritence. Simplify regexp.
-
-2014-03-23  rocky <address@hidden>
-
-       * realgud/common/track-mode.el: Went too far last if->when commit.
-
-2014-03-23  rocky <address@hidden>
-
-       * realgud.el, realgud/common/bp.el, realgud/common/core.el,
-       realgud/common/file.el, realgud/common/fringe.el,
-       realgud/common/lang.el, realgud/common/shortkey.el,
-       realgud/common/track-mode.el, realgud/common/window.el,
-       test/test-lang.el: (if ... (progn ...)) => (when ... ) where
-       appropriate.
-
-2014-03-23  rocky <address@hidden>
-
-       * realgud.el: One more package doc change
-
-2014-03-23  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/track-mode.el,
-       realgud/debugger/gdb/track-mode.el,
-       realgud/debugger/gub/track-mode.el,
-       realgud/debugger/kshdb/track-mode.el,
-       realgud/debugger/pdb/track-mode.el,
-       realgud/debugger/perldb/track-mode.el,
-       realgud/debugger/pydb/track-mode.el,
-       realgud/debugger/pydbgr/track-mode.el,
-       realgud/debugger/rdebug/track-mode.el,
-       realgud/debugger/remake/track-mode.el,
-       realgud/debugger/trepan.pl/track-mode.el,
-       realgud/debugger/trepan/track-mode.el,
-       realgud/debugger/trepan2/track-mode.el,
-       realgud/debugger/trepan3k/track-mode.el,
-       realgud/debugger/trepan8/track-mode.el,
-       realgud/debugger/trepanx/track-mode.el,
-       realgud/debugger/zshdb/track-mode.el: Finish and Beef up track-mode
-       docstrings. Remove more warnings
-
-2014-03-22  rocky <address@hidden>
-
-       * realgud.el, realgud/debugger/bashdb/track-mode.el,
-       realgud/debugger/gdb/track-mode.el,
-       realgud/debugger/gub/track-mode.el,
-       realgud/debugger/kshdb/track-mode.el,
-       realgud/debugger/pdb/track-mode.el,
-       realgud/debugger/perldb/track-mode.el,
-       realgud/debugger/pydb/track-mode.el,
-       realgud/debugger/pydbgr/track-mode.el,
-       realgud/debugger/rdebug/track-mode.el: Add key bindings track-mode
-       doc -- up to debugger pydbgr; the other debuggers I still need to
-       do.
-
-2014-03-21  rocky <address@hidden>
-
-       * realgud.el: One more URL tag.
-
-2014-03-21  rocky <address@hidden>
-
-       * realgud.el: Need to add URL to docstring URLs
-
-2014-03-21  rocky <address@hidden>
-
-       * : commit 0182bcaa051892546a37107393052c5d4e3941bb Author: rocky
-       <address@hidden> Date:   Fri Mar 21 19:06:24 2014 -0400
-
-2014-03-19  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/bashdb.el, realgud/debugger/gdb/gdb.el,
-       realgud/debugger/gub/gub.el, realgud/debugger/kshdb/kshdb.el,
-       realgud/debugger/pdb/pdb.el, realgud/debugger/perldb/perldb.el,
-       realgud/debugger/pydb/pydb.el, realgud/debugger/pydbgr/pydbgr.el,
-       realgud/debugger/rdebug/rdebug.el,
-       realgud/debugger/remake/remake.el,
-       realgud/debugger/trepan.pl/trepanpl.el,
-       realgud/debugger/trepan/trepan.el,
-       realgud/debugger/trepan2/trepan2.el,
-       realgud/debugger/trepan3k/trepan3k.el,
-       realgud/debugger/trepan8/trepan8.el,
-       realgud/debugger/trepanx/trepanx.el,
-       realgud/debugger/zshdb/zshdb.el: debugger/<name>/<name>.el Group
-       name changed from dbgr to realgud
-
-2014-03-13  rocky <address@hidden>
-
-       * : commit 153c707a185a7e64113cedf7cde2d7d505482ad5 Merge: 5177850
-       1571d00 Author: R. Bernstein <address@hidden> Date:
-       Thu Mar 13 06:56:27 2014 -0400
-
-2014-03-11  Pete Beardmore <address@hidden>
-
-       * realgud/common/custom.el, realgud/common/shortkey.el: add
-       customisable variable to control source buffer locking -allow users to 
control whether the source buffers associated with
-       the debugger process(es) are locked (read-only mode enabled) when
-       debugging is in progress
-
-2014-03-12  rocky <address@hidden>
-
-       * : commit 517785049df706af0f84f7c4e60d6954c8415b0c Merge: 520d19b
-       e034855 Author: R. Bernstein <address@hidden> Date:
-       Wed Mar 12 20:02:32 2014 -0400
-
-2014-03-12  rocky <address@hidden>
-
-       * realgud/common/track.el: A couple more warnings removed
-
-2014-03-12  R. Bernstein <address@hidden>
-
-       * : Merge pull request #25 from elbeardmorez/cmdbuf-focus fix source 
buffer erroneously receiving focus
-
-2014-03-11  Pete Beardmore <address@hidden>
-
-       * realgud/common/shortkey.el: shortkey, add mode hook call at setup 
-enable 'realgud-short-key-mode-hook' for those who might need it
-
-2014-03-11  Pete Beardmore <address@hidden>
-
-       * realgud/common/shortkey.el: shortkey, clean up
-       'realgud-short-key-mode-setup' (whitespace only) -give nesting a chance 
by removing mix of tabs and spaces
-
-2014-03-08  rocky <address@hidden>
-
-       * realgud/common/track.el: Remove more warnings
-
-2014-03-08  rocky <address@hidden>
-
-       * : commit c6f6d2c6a2041936e3b8cad5d542905116843c79 Author: rocky
-       <address@hidden> Date:   Sat Mar 8 21:41:05 2014 -0500
-
-2014-02-27  rocky <address@hidden>
-
-       * realgud/common/track.el: Yet another attempt to narrow the track
-       region and reduce compile warnings.
-
-2014-02-23  rocky <address@hidden>
-
-       * : I hate conflicted merges
-
-2014-02-23  R. Bernstein <address@hidden>
-
-       * README.md: Update README.md
-
-2014-02-23  R. Bernstein <address@hidden>
-
-       * README.md: Update README.md
-
-2014-02-23  R. Bernstein <address@hidden>
-
-       * README.md: Update README.md
-
-2014-02-17  rocky <address@hidden>
-
-       * realgud/common/track.el: Think I have the reappearing breakpoint
-       problem solved, by setting last-input-end set properly. Should this
-       be called last-input-start instead?
-
-2014-02-17  rocky <address@hidden>
-
-       * realgud/common/buffer/backtrace.el,
-       realgud/common/buffer/command.el, realgud/common/cmds.el,
-       realgud/common/core.el, realgud/common/send.el,
-       realgud/common/shortkey.el, realgud/common/window.el: Reduce
-       warnings
-
-2014-02-16  rocky <address@hidden>
-
-       * realgud/common/buffer/command.el, realgud/common/track.el: Save
-       last end position. More warnings removed.
-
-2014-02-16  rocky <address@hidden>
-
-       * Carton, realgud.el, realgud/common/buffer/command.el,
-       test/Makefile.am: Add go debugger gub. (MELPA recipe is now in git.)
-       Remove Carton
-
-2014-02-16  rocky <address@hidden>
-
-       * realgud/common/core.el, realgud/common/lochist.el,
-       realgud/common/reset.el: Reduce warnings
-
-2014-02-16  rocky <address@hidden>
-
-       * realgud/common/buffer/helper.el, realgud/common/core.el: core.el:
-       srcbuf-init function call had simplified and I missed this call.
-       helper.el: add more declare-functions.
-
-2014-02-16  rocky <address@hidden>
-
-       * README.md: reinstate Travis
-
-2014-02-16  rocky <address@hidden>
-
-       * test/Makefile.am: Add help to Makefile
-
-2014-02-15  rocky <address@hidden>
-
-       * .travis.yml, el-get-install.el: Travis yet again. Try to get
-       emacs24 in there at least
-
-2014-02-15  rocky <address@hidden>
-
-       * el-get-install.el, make-check-filter.rb: Yet another try to get
-       travis working
-
-2014-02-14  rocky <address@hidden>
-
-       * .travis.yml: 4th travis try via el-get
-
-2014-02-14  rocky <address@hidden>
-
-       * .travis.yml, configure.ac: 3rd travis try via el-get
-
-2014-02-14  rocky <address@hidden>
-
-       * .travis.yml: 2nd try via el-get at travis
-
-2014-02-14  rocky <address@hidden>
-
-       * .travis.yml, el-get-install.el, test/Makefile.am: See if travis
-       works via el-get
-
-2014-02-12  rocky <address@hidden>
-
-       * realgud.el, realgud/common/track.el: Yet another attempt to get
-       package-requires correct for MELPA
-
-2014-02-12  rocky <address@hidden>
-
-       * realgud.el: Extraneous ' on loc-change symbol
-
-2014-02-11  rocky <address@hidden>
-
-       * realgud/common/buffer/source.el, realgud/common/core.el,
-       test/test-remake.el, test/test-send.el, test/test-srcbuf.el,
-       test/test-track-mode.el: Remove debugger-name and cmd-args fields
-       from srcbuf. If you need it, get it from the command buffer.
-
-2014-02-11  rocky <address@hidden>
-
-       * realgud/common/core.el, test/test-regexp-bashdb.el: core.el: nil
-       out breakpoints.  test-regexp-bashdb.el: was picking up wrong regexp
-       pat in test
-
-2014-02-10  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/init.el, test/test-regexp-bashdb.el: 
-       correct regexp for matching a bashdb deleted breakpoint.
-
-2014-02-10  rocky <address@hidden>
-
-       * realgud.el: Package names should be symbols, not strings.
-
-2014-02-09  rocky <address@hidden>
-
-       * realgud/common/cmds.el: Messed up on let syntax.
-
-2014-02-09  rocky <address@hidden>
-
-       * realgud.el, realgud/common/cmds.el: realgud.el: forgot quotes
-       fournd required package name. cmds.el: reduce warnings.
-
-2014-02-09  rocky <address@hidden>
-
-       * elisp-comp, realgud.el, realgud/debugger/bashdb/core.el,
-       realgud/debugger/bashdb/track-mode.el,
-       realgud/debugger/gub/core.el,
-       realgud/debugger/trepan.pl/backtrack-mode.el,
-       realgud/debugger/trepan.pl/core.el,
-       realgud/debugger/trepan.pl/track-mode.el,
-       realgud/debugger/trepan8/core.el,
-       realgud/debugger/trepan8/track-mode.el,
-       realgud/debugger/trepan8/trepan8.el,
-       realgud/debugger/trepanx/core.el,
-       realgud/debugger/trepanx/track-mode.el,
-       realgud/debugger/trepanx/trepanx.el,
-       realgud/debugger/zshdb/core.el,
-       realgud/debugger/zshdb/track-mode.el,
-       realgud/debugger/zshdb/zshdb.el, realgud/lang/perl.el,
-       realgud/lang/ruby.el: elisp-comp: recompile only if necessary.
-       realgud.el: add dependent packages. rest: reduce warnings by adding
-       declare-function.
-
-2014-02-09  rocky <address@hidden>
-
-       * realgud/common/cmds.el: Give a message when we try we run deletel
-       breakpoint on a line with no breakpoints on it
-
-2014-02-08  rocky <address@hidden>
-
-       * realgud/common/buffer/source.el, realgud/common/cmds.el: 
-       source.el: realgud-srcbuf-init-or-update - add source buffer to
-       command buffers's list of source buffers. cmds.el: delete can
-       sometimes prompt.
-
-2014-02-06  rocky <address@hidden>
-
-       * realgud.el, realgud/common/key.el: Add [delete] as a breakpoint
-       delete key
-
-2014-02-06  rocky <address@hidden>
-
-       * realgud/common/cmds.el: Make realgud-cmd-delete really work when
-       tied to a key.
-
-2014-02-06  rocky <address@hidden>
-
-       * realgud/common/buffer/source.el, realgud/common/cmds.el,
-       realgud/common/key.el: Work on "delete" shortkey
-
-2014-02-06  rocky <address@hidden>
-
-       * realgud/common/bp.el, realgud/common/cmds.el: Add interface for
-       debugger "delete" "enable" and "disable"
-
-2014-02-06  rocky <address@hidden>
-
-       * realgud/common/bp.el, realgud/debugger/gdb/track-mode.el,
-       realgud/debugger/trepan.pl/backtrack-mode.el,
-       realgud/debugger/trepan.pl/track-mode.el,
-       realgud/debugger/trepan/backtrack-mode.el: Reduce warnings. See
-       previous commit
-
-2014-02-06  rocky <address@hidden>
-
-       * realgud/common/core.el, realgud/common/fringe.el,
-       realgud/common/track.el: Try to reduce some of the warnings. I hate
-       the Emacs compiler's spurious warnings.
-
-2014-02-05  rocky <address@hidden>
-
-       * realgud/common/bp.el, realgud/common/track.el,
-       realgud/debugger/trepan/init.el: Deleting breakpoints now
-       implemented.
-
-2014-02-05  rocky <address@hidden>
-
-       * realgud/common/bp.el, realgud/common/track.el: Work in Progress.
-       Move a little forward on parsing breakpoint deletions
-
-2014-02-05  rocky <address@hidden>
-
-       * realgud/common/core.el: Modify "Failed to invoke shell command" to
-       be more explicit about args
-
-2013-12-22  rocky <address@hidden>
-
-       * realgud/debugger/rdebug/track-mode.el,
-       realgud/debugger/trepan.pl/track-mode.el,
-       realgud/debugger/trepan/track-mode.el,
-       realgud/debugger/trepan8/track-mode.el,
-       realgud/debugger/trepanx/track-mode.el: reduce gratuitous warnings
-       which prevented us from catching a real one that we 've just also
-       fixed.
-
-2013-12-13  rocky <address@hidden>
-
-       * realgud/common/cmds.el, realgud/common/core.el,
-       realgud/common/file.el, realgud/common/window.el: Reduce warnings
-
-2013-12-12  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/bashdb.el, realgud/debugger/gdb/core.el,
-       realgud/debugger/gdb/gdb.el, realgud/debugger/gdb/track-mode.el,
-       realgud/debugger/kshdb/kshdb.el, realgud/debugger/pdb/core.el,
-       realgud/debugger/pdb/pdb.el, realgud/debugger/pdb/track-mode.el,
-       realgud/debugger/perldb/core.el, realgud/debugger/perldb/perldb.el,
-       realgud/debugger/perldb/track-mode.el,
-       realgud/debugger/pydb/track-mode.el,
-       realgud/debugger/pydbgr/core.el, realgud/debugger/pydbgr/pydbgr.el,
-       realgud/debugger/pydbgr/track-mode.el,
-       realgud/debugger/trepan.pl/track-mode.el: Reduce warnings focused
-       mostly in directory debugger
-
-2013-12-11  rocky <address@hidden>
-
-       * test/test-srcbuf.el, test/test-track-mode.el, test/test-track.el: 
-       Reduce warnings in tests.
-
-2013-12-10  rocky <address@hidden>
-
-       * test/test-loc-regexp-gub.el, test/test-loc-regexp-trepan.el,
-       test/test-loc-regexp-trepanpl.el, test/test-loc-regexp-trepanx.el,
-       test/test-realgud.el, test/test-regexp-bashdb.el,
-       test/test-regexp.el: Remove more warnings in test programs
-
-2013-12-10  rocky <address@hidden>
-
-       * realgud/common/backtrace-mode.el,
-       realgud/common/backtrack-mode.el, realgud/common/bp.el,
-       realgud/common/cmds.el: Mostly more declare-function statements
-
-2013-12-07  rocky <address@hidden>
-
-       * realgud/debugger/bashdb/init.el, realgud/debugger/gub/init.el,
-       realgud/debugger/gub/track-mode.el, test/test-regexp-gub.el: Add gub
-       panic backtrace line
-
-2013-12-02  rocky <address@hidden>
-
-       * test/test-buf-bt.el, test/test-buf-cmd.el,
-       test/test-common-helper.el, test/test-core.el, test/test-file.el,
-       test/test-gub-core.el, test/test-loc-regexp-gub.el,
-       test/test-pdb.el, test/test-pydb.el, test/test-pydbgr.el,
-       test/test-send.el, test/test-srcbuf.el, test/test-track-mode.el,
-       test/test-track.el: Reduce the number of warnings in the test
-       directiory. One legit bug in realgud/bashdb/init.el was found/fixed
-       though.
-
-2013-12-01  rocky <address@hidden>
-
-       * realgud/debugger/gub/core.el, test/bt-helper.el,
-       test/regexp-helper.el, test/test-bp.el, test/test-bt-pdb.el,
-       test/test-bt-pydb.el, test/test-bt-pydbgr.el,
-       test/test-bt-rdebug.el, test/test-bt-trepan.el,
-       test/test-bt-trepan2.el, test/test-bt-trepan3k.el,
-       test/test-bt-trepanx.el, test/test-bt-zshdb.el,
-       test/test-gub-core.el, test/test-pdb.el, test/test-perldb.el,
-       test/test-pydb.el, test/test-pydbgr.el, test/test-rdebug.el,
-       test/test-regexp-pydbgr.el, test/test-regexp-rdebug.el,
-       test/test-regexp-trepanpl.el, test/test-regexp-trepanx.el,
-       test/test-track-mode.el, test/test-trepan2.el,
-       test/test-trepan3k.el: Fix gub parse args - this time, for sure! Fix
-       tests to reduce warnings although they are still run rampant.
-
-2013-12-01  rocky <address@hidden>
-
-       * realgud/debugger/gub/core.el, realgud/debugger/gub/gub.el,
-       realgud/debugger/gub/track-mode.el, test/test-gub-core.el: core.el:
-       fix bugs in parsing gub command.  gub.el: Set default gub command to
-       something reasonable track-mode.el: remove some warnings by defining
-       non-local functions
-
-2013-12-01  rocky <address@hidden>
-
-       * realgud/debugger/gub/init.el, test/test-regexp-gub.el: Add golang
-       backtrace regexp
-
-2013-11-18  rocky <address@hidden>
-
-       * compute-lispdir.sh, configure.ac: Fix up spelling when giving an
-       error and regularize options given to emacs between
-       compute-lispdir.sh and configure.ac
-
-2013-11-17  rocky <address@hidden>
-
-       * .travis.yml, README.md: I hate travis
-
-2013-11-17  rocky <address@hidden>
-
-       * .travis.yml: carton is now called cask? (travis yet again)
-
-2013-11-17  rocky <address@hidden>
-
-       * .travis.yml: Wrong path for cask in .travis
-
-2013-11-17  rocky <address@hidden>
-
-       * .travis.yml: Wrong version number for emacs in .travis
-
-2013-11-17  rocky <address@hidden>
-
-       * .travis.yml: Looks like "carton" install now uses python rather
-       than sh
-
-2013-11-17  rocky <address@hidden>
-
-       * .travis.yml: I said use 24.3 for emacs testing
-
-2013-11-17  rocky <address@hidden>
-
-       * .travis.yml: Try only emacs 24 for now. See github.com/magit for
-       how we might use emacs 23
-
-2013-11-17  rocky <address@hidden>
-
-       * configure.ac, install-from-git.sh, realgud.el: realgud.el: Don't
-       try to load gub for now. It's broken and melpa doesn't know about it
-       either.  install-from-git.sh remove old git repositories before
-       (re-)pulling them. Use https protocol by default on git command.
-       configure.ac: add --with-emacs option. Check for cl-lib in emacs.
-
-2013-09-23  R. Bernstein <address@hidden>
-
-       * : Merge pull request #16 from elbeardmorez/ac-lispdir autoconf, fall 
back to default datadir install location
-
-2013-08-24  rocky <address@hidden>
-
-       * .travis.yml: More travis hacking.
-
-2013-08-24  rocky <address@hidden>
-
-       * .travis.yml: More travis hacking.
-
-2013-08-24  rocky <address@hidden>
-
-       * .travis.yml: More travis hacking.
-
-2013-08-24  rocky <address@hidden>
-
-       * .travis.yml: More travis hacking.
-
-2013-08-24  rocky <address@hidden>
-
-       * .travis.yml: More travis hacking.
-
-2013-08-24  rocky <address@hidden>
-
-       * .travis.yml: More travis hacking.
-
-2013-08-24  rocky <address@hidden>
-
-       * .travis.yml: More travis hacking.
-
-2013-08-24  rocky <address@hidden>
-
-       * .travis.yml: More travis hacking.
-
-2013-08-24  rocky <address@hidden>
-
-       * .travis.yml: More travis hacking.
-
-2013-08-24  rocky <address@hidden>
-
-       * .travis.yml: More travis hacking.
-
-2013-08-24  rocky <address@hidden>
-
-       * .travis.yml: More travis hacking.
-
-2013-08-24  rocky <address@hidden>
-
-       * .travis.yml: Carton moved around stuff
-
-2013-08-24  rocky <address@hidden>
-
-       * : commit fe88dcd4e188fcef61e966923ab1584d311e8933 Author: rocky
-       <address@hidden> Date:   Sat Aug 24 20:59:44 2013 -0400
-
-2013-07-26  rocky <address@hidden>
-
-       * .travis.yml, README.md: Include travis build status in README.md
-
-2013-07-26  rocky <address@hidden>
-
-       * .travis.yml: Travis 6th try
-
-2013-07-26  rocky <address@hidden>
-
-       * .travis.yml: Travis 5th try
-
-2013-07-26  rocky <address@hidden>
-
-       * .travis.yml: Travis 4th try
-
-2013-07-26  rocky <address@hidden>
-
-       * .travis.yml: Travis 3rd try
-
-2013-07-26  rocky <address@hidden>
-
-       * .travis.yml: Travis 2nd try
-
-2013-07-26  rocky <address@hidden>
-
-       * .travis.yml: Try travis
-
-2013-07-23  rocky <address@hidden>
-
-       * : commit fef3185ce42d38eaeb22bf352c1ca1abb7638922 Author: rocky
-       <address@hidden> Date:   Tue Jul 23 22:31:33 2013 -0400
-
-2013-07-23  rocky <address@hidden>
-
-       * : commit 19a9dde7f4314c4e83910e46afbe1fa972442ae8 Author: rocky
-       <address@hidden> Date:   Tue Jul 23 22:29:12 2013 -0400
-
-2013-07-12  rocky <address@hidden>
-
-       * realgud/debugger/gub/gub.el: Top-level gub.sh to run the debugger
-       from the outset now works.
-
-2013-07-12  rocky <address@hidden>
-
-       * realgud/debugger/gub/core.el, realgud/debugger/gub/gub.el,
-       test/test-gub-core.el: Attempt to fix up gub invocation
-
-2013-07-10  rocky <address@hidden>
-
-       * .gitignore, realgud.el: Small changes: update version, list of
-       debuggers supported and ignore package (*-pkg.el) files.
-
-2013-07-10  rocky <address@hidden>
-
-       * .gitignore, Carton, realgud-pkg.el: Try using Carton instead of
-       realgud-pkg.el as suggested by Steve Purcell
-
-2013-07-10  rocky <address@hidden>
-
-       * realgud-pkg.el: Make MELPA happy at the expense of making emacs's
-       byte compiler less happy.
-
-2013-07-01  rocky <address@hidden>
-
-       * : commit 6140d4b6441e0c6f568893f8b67d36374fb427e8 Author: rocky
-       <address@hidden> Date:   Mon Jul 1 21:43:22 2013 -0400
-
-2013-07-01  rocky <address@hidden>
-
-       * test/test-common-helper.el, test/test-loc-regexp-gub.el,
-       test/test-loc-regexp-trepan.el, test/test-loc-regexp-trepanpl.el: 
-       Remove more free-variable warnings
-
-2013-07-01  rocky <address@hidden>
-
-       * realgud-pkg.el, test/regexp-helper.el: More testing stuff
-
-2013-07-01  rocky <address@hidden>
-
-       * test/bt-helper.el, test/regexp-helper.el, test/test-bp.el,
-       test/test-bt-pdb.el, test/test-bt-pydb.el, test/test-bt-pydbgr.el,
-       test/test-bt-rdebug.el, test/test-bt-trepan.el,
-       test/test-bt-trepan2.el, test/test-bt-trepan3k.el,
-       test/test-bt-trepanx.el, test/test-bt-zshdb.el,
-       test/test-buf-cmd.el, test/test-core.el, test/test-file.el,
-       test/test-lang.el: Reduce test warnings.
-
-2013-06-30  rocky <address@hidden>
-
-       * realgud/debugger/gub/init.el, realgud/debugger/gub/track-mode.el: 
-       More gub customization
-
-2013-06-30  rocky <address@hidden>
-
-       * realgud/debugger/gub/init.el, test/test-loc-regexp-gub.el: 
-       Disallow filenames in location tracking that start with a blank.
-
-2013-06-29  rocky <address@hidden>
-
-       * realgud/common/shortkey.el: See above.
-
-2013-06-29  rocky <address@hidden>
-
-       * realgud/common/shortkey.el: Add C-x C-q to turn off shortkey mode.
-
-2013-06-27  rocky <address@hidden>
-
-       * realgud/debugger/gub/init.el: Correct gub regexp
-
-2013-06-27  rocky <address@hidden>
-
-       * realgud/debugger/gub/core.el, realgud/debugger/gub/gub.el: Better
-       (but not good) gub invocation settings
-
-2013-06-26  rocky <address@hidden>
-
-       * configure.ac, realgud.el, realgud/debugger/Makefile.am,
-       realgud/debugger/gub/Makefile.am, realgud/debugger/gub/core.el,
-       realgud/debugger/gub/gub.el, realgud/debugger/gub/init.el,
-       realgud/debugger/gub/track-mode.el: Start Go language interpreter
-       debugger gub.
-
-2013-06-14  rocky <address@hidden>
-
-       * README.md: Add a coderwall endorse
-
-2013-06-08  rocky <address@hidden>
-
-       * Makefile.am, common.mk, configure.ac, install-from-git.sh,
-       realgud.el, realgud/common/Makefile.am,
-       realgud/common/buffer/Makefile.am, realgud/debugger/common.mk,
-       realgud/lang/Makefile.am, test/Makefile.am: Administration build
-       stuff
-
-2013-06-08  rocky <address@hidden>
-
-       * realgud/common/file.el, realgud/common/track.el,
-       realgud/debugger/bashdb/bashdb.el,
-       realgud/debugger/remake/remake.el,
-       realgud/debugger/trepan/trepan.el, test/test-file.el: file.el,
-       test-file.el: when we remap files remember what we answered.
-       debugger/*: make (interactive) and testing work together. track.el:
-       start ansi-term tolerance.
-
-2013-04-07  rocky <address@hidden>
-
-       * Makefile.am, realgud.el: One more typo
-
-2013-04-06  rocky <address@hidden>
-
-       * README.md, compute-lispdir.sh, configure.ac,
-       realgud/common/backtrack-mode.el, realgud/common/buffer/command.el,
-       realgud/common/custom.el, realgud/common/fringe.el,
-       realgud/common/init.el, realgud/common/key.el,
-       realgud/common/lochist.el, realgud/common/shortkey.el,
-       realgud/common/track-mode.el, realgud/common/track.el: 
-       compute-lispdir.sh, configure.ac: Figure out a reasonable lisp
-       directory (--with-lispdir). realgud/common/*.el: group is 'realgud,
-       not 'dbgr
-
-2013-04-06  rocky <address@hidden>
-
-       * configure.ac, install-from-git.sh, realgud.el,
-       realgud/debugger/Makefile.am, realgud/debugger/pydbgr/init.el,
-       realgud/debugger/pydbgr/track-mode.el,
-       realgud/debugger/trepan2/Makefile.am,
-       realgud/debugger/trepan2/core.el, realgud/debugger/trepan2/init.el,
-       realgud/debugger/trepan2/track-mode.el,
-       realgud/debugger/trepan2/trepan2.el, test/test-bt-trepan2.el,
-       test/test-bt-trepan3k.el, test/test-trepan2.el,
-       test/test-trepan3k.el: Add trepan2 for Python 2.x - -really
-       copied/renamed from pydbgr.
-
-2013-04-04  rocky <address@hidden>
-
-       * realgud.el: Revise description so it doesn't say the same thing as
-       the summary.
-
-2013-04-04  rocky <address@hidden>
-
-       * install-from-git.sh, realgud-pkg.el: realgud-pkg.el: add
-       dependency on cl-lib.
-
-2013-04-02  rocky <address@hidden>
-
-       * realgud.el, realgud/common/buffer/backtrace.el,
-       realgud/common/buffer/command.el, realgud/common/buffer/source.el,
-       test/test-regexp-pydbgr.el: realgud.el: More doc tweaking.
-       test-regexp-pydbgr.el: remove artifact from dbgr->realgud rename.
-
-2013-04-02  rocky <address@hidden>
-
-       * realgud.el: Small doc-like changes.
-
-2013-04-01  rocky <address@hidden>
-
-       * Makefile.am, THANKS: Why did I take so long to include this THANKS
-       file?
-
-2013-04-01  rocky <address@hidden>
-
-       * README.md: More name change artifacts
-
-2013-04-01  R. Bernstein <address@hidden>
-
-       * : Merge pull request #14 from rocky/realgud Realgud
-
-2013-04-01  rocky <address@hidden>
-
-       * README.md: Move table to wiki.
-
-2013-04-01  rocky <address@hidden>
-
-       * README.md, README.textile, autogen.sh, realgud.el: realgud.el,
-       autogen.el: More things to make dbgr->realgud renmaming work.
-       README.textile->README.md: revise.
-
-2013-04-01  rocky <address@hidden>
-
-       * Makefile.am, configure.ac, dbgr.el, dbgr/Makefile.am,
-       dbgr/common/Makefile.am, dbgr/common/backtrace-mode.el,
-       dbgr/common/backtrack-mode.el, dbgr/common/bp-image-data.el,
-       dbgr/common/bp.el, dbgr/common/buffer/Makefile.am,
-       dbgr/common/buffer/backtrace.el, dbgr/common/buffer/command.el,
-       dbgr/common/buffer/helper.el, dbgr/common/buffer/source.el,
-       dbgr/common/cmds.el, dbgr/common/core.el, dbgr/common/custom.el,
-       dbgr/common/file.el, dbgr/common/fringe.el, dbgr/common/helper.el,
-       dbgr/common/init.el, dbgr/common/key.el, dbgr/common/lang.el,
-       dbgr/common/loc.el, dbgr/common/lochist.el, dbgr/common/menu.el,
-       dbgr/common/regexp.el, dbgr/common/reset.el, dbgr/common/send.el,
-       dbgr/common/shortkey.el, dbgr/common/track-mode.el,
-       dbgr/common/track.el, dbgr/common/window.el,
-       dbgr/debugger/Makefile.am, dbgr/debugger/bashdb/Makefile.am,
-       dbgr/debugger/bashdb/bashdb.el, dbgr/debugger/bashdb/core.el,
-       dbgr/debugger/bashdb/init.el, dbgr/debugger/bashdb/track-mode.el,
-       dbgr/debugger/common.mk, dbgr/debugger/gdb/Makefile.am,
-       dbgr/debugger/gdb/core.el, dbgr/debugger/gdb/gdb.el,
-       dbgr/debugger/gdb/init.el, dbgr/debugger/gdb/track-mode.el,
-       dbgr/debugger/kshdb/Makefile.am, dbgr/debugger/kshdb/core.el,
-       dbgr/debugger/kshdb/init.el, dbgr/debugger/kshdb/kshdb.el,
-       dbgr/debugger/kshdb/track-mode.el, dbgr/debugger/pdb/Makefile.am,
-       dbgr/debugger/pdb/core.el, dbgr/debugger/pdb/init.el,
-       dbgr/debugger/pdb/pdb.el, dbgr/debugger/pdb/track-mode.el,
-       dbgr/debugger/perldb/Makefile.am, dbgr/debugger/perldb/core.el,
-       dbgr/debugger/perldb/init.el, dbgr/debugger/perldb/perldb.el,
-       dbgr/debugger/perldb/track-mode.el, dbgr/debugger/pydb/Makefile.am,
-       dbgr/debugger/pydb/core.el, dbgr/debugger/pydb/init.el,
-       dbgr/debugger/pydb/pydb.el, dbgr/debugger/pydb/track-mode.el,
-       dbgr/debugger/pydbgr/Makefile.am, dbgr/debugger/pydbgr/core.el,
-       dbgr/debugger/pydbgr/init.el, dbgr/debugger/pydbgr/pydbgr.el,
-       dbgr/debugger/pydbgr/track-mode.el,
-       dbgr/debugger/rdebug/Makefile.am, dbgr/debugger/rdebug/core.el,
-       dbgr/debugger/rdebug/init.el, dbgr/debugger/rdebug/rdebug.el,
-       dbgr/debugger/rdebug/track-mode.el,
-       dbgr/debugger/remake/Makefile.am, dbgr/debugger/remake/core.el,
-       dbgr/debugger/remake/init.el, dbgr/debugger/remake/remake.el,
-       dbgr/debugger/remake/track-mode.el,
-       dbgr/debugger/trepan.pl/Makefile.am,
-       dbgr/debugger/trepan.pl/backtrack-mode.el,
-       dbgr/debugger/trepan.pl/core.el, dbgr/debugger/trepan.pl/init.el,
-       dbgr/debugger/trepan.pl/track-mode.el,
-       dbgr/debugger/trepan.pl/trepanpl.el,
-       dbgr/debugger/trepan/Makefile.am,
-       dbgr/debugger/trepan/backtrack-mode.el,
-       dbgr/debugger/trepan/core.el, dbgr/debugger/trepan/init.el,
-       dbgr/debugger/trepan/track-mode.el, dbgr/debugger/trepan/trepan.el,
-       dbgr/debugger/trepan3k/Makefile.am, dbgr/debugger/trepan3k/core.el,
-       dbgr/debugger/trepan3k/init.el,
-       dbgr/debugger/trepan3k/track-mode.el,
-       dbgr/debugger/trepan3k/trepan3k.el,
-       dbgr/debugger/trepan8/Makefile.am, dbgr/debugger/trepan8/core.el,
-       dbgr/debugger/trepan8/init.el, dbgr/debugger/trepan8/track-mode.el,
-       dbgr/debugger/trepan8/trepan8.el,
-       dbgr/debugger/trepanx/Makefile.am, dbgr/debugger/trepanx/core.el,
-       dbgr/debugger/trepanx/init.el, dbgr/debugger/trepanx/track-mode.el,
-       dbgr/debugger/trepanx/trepanx.el, dbgr/debugger/zshdb/Makefile.am,
-       dbgr/debugger/zshdb/core.el, dbgr/debugger/zshdb/init.el,
-       dbgr/debugger/zshdb/track-mode.el, dbgr/debugger/zshdb/zshdb.el,
-       dbgr/lang/Makefile.am, dbgr/lang/perl.el, dbgr/lang/posix-shell.el,
-       dbgr/lang/python.el, dbgr/lang/ruby.el, emacs-dbgr-pkg.el,
-       realgud-pkg.el, realgud.el, realgud/Makefile.am,
-       realgud/common/Makefile.am, realgud/common/backtrace-mode.el,
-       realgud/common/backtrack-mode.el, realgud/common/bp-image-data.el,
-       realgud/common/bp.el, realgud/common/buffer/Makefile.am,
-       realgud/common/buffer/backtrace.el,
-       realgud/common/buffer/command.el, realgud/common/buffer/helper.el,
-       realgud/common/buffer/source.el, realgud/common/cmds.el,
-       realgud/common/core.el, realgud/common/custom.el,
-       realgud/common/file.el, realgud/common/fringe.el,
-       realgud/common/helper.el, realgud/common/init.el,
-       realgud/common/key.el, realgud/common/lang.el,
-       realgud/common/loc.el, realgud/common/lochist.el,
-       realgud/common/menu.el, realgud/common/regexp.el,
-       realgud/common/reset.el, realgud/common/send.el,
-       realgud/common/shortkey.el, realgud/common/track-mode.el,
-       realgud/common/track.el, realgud/common/window.el,
-       realgud/debugger/Makefile.am, realgud/debugger/bashdb/Makefile.am,
-       realgud/debugger/bashdb/bashdb.el, realgud/debugger/bashdb/core.el,
-       realgud/debugger/bashdb/init.el,
-       realgud/debugger/bashdb/track-mode.el, realgud/debugger/common.mk,
-       realgud/debugger/gdb/Makefile.am, realgud/debugger/gdb/core.el,
-       realgud/debugger/gdb/gdb.el, realgud/debugger/gdb/init.el,
-       realgud/debugger/gdb/track-mode.el,
-       realgud/debugger/kshdb/Makefile.am, realgud/debugger/kshdb/core.el,
-       realgud/debugger/kshdb/init.el, realgud/debugger/kshdb/kshdb.el,
-       realgud/debugger/kshdb/track-mode.el,
-       realgud/debugger/pdb/Makefile.am, realgud/debugger/pdb/core.el,
-       realgud/debugger/pdb/init.el, realgud/debugger/pdb/pdb.el,
-       realgud/debugger/pdb/track-mode.el,
-       realgud/debugger/perldb/Makefile.am,
-       realgud/debugger/perldb/core.el, realgud/debugger/perldb/init.el,
-       realgud/debugger/perldb/perldb.el,
-       realgud/debugger/perldb/track-mode.el,
-       realgud/debugger/pydb/Makefile.am, realgud/debugger/pydb/core.el,
-       realgud/debugger/pydb/init.el, realgud/debugger/pydb/pydb.el,
-       realgud/debugger/pydb/track-mode.el,
-       realgud/debugger/pydbgr/Makefile.am,
-       realgud/debugger/pydbgr/core.el, realgud/debugger/pydbgr/init.el,
-       realgud/debugger/pydbgr/pydbgr.el,
-       realgud/debugger/pydbgr/track-mode.el,
-       realgud/debugger/rdebug/Makefile.am,
-       realgud/debugger/rdebug/core.el, realgud/debugger/rdebug/init.el,
-       realgud/debugger/rdebug/rdebug.el,
-       realgud/debugger/rdebug/track-mode.el,
-       realgud/debugger/remake/Makefile.am,
-       realgud/debugger/remake/core.el, realgud/debugger/remake/init.el,
-       realgud/debugger/remake/remake.el,
-       realgud/debugger/remake/track-mode.el,
-       realgud/debugger/trepan.pl/Makefile.am,
-       realgud/debugger/trepan.pl/backtrack-mode.el,
-       realgud/debugger/trepan.pl/core.el,
-       realgud/debugger/trepan.pl/init.el,
-       realgud/debugger/trepan.pl/track-mode.el,
-       realgud/debugger/trepan.pl/trepanpl.el,
-       realgud/debugger/trepan/Makefile.am,
-       realgud/debugger/trepan/backtrack-mode.el,
-       realgud/debugger/trepan/core.el, realgud/debugger/trepan/init.el,
-       realgud/debugger/trepan/track-mode.el,
-       realgud/debugger/trepan/trepan.el,
-       realgud/debugger/trepan3k/Makefile.am,
-       realgud/debugger/trepan3k/core.el,
-       realgud/debugger/trepan3k/init.el,
-       realgud/debugger/trepan3k/track-mode.el,
-       realgud/debugger/trepan3k/trepan3k.el,
-       realgud/debugger/trepan8/Makefile.am,
-       realgud/debugger/trepan8/core.el, realgud/debugger/trepan8/init.el,
-       realgud/debugger/trepan8/track-mode.el,
-       realgud/debugger/trepan8/trepan8.el,
-       realgud/debugger/trepanx/Makefile.am,
-       realgud/debugger/trepanx/core.el, realgud/debugger/trepanx/init.el,
-       realgud/debugger/trepanx/track-mode.el,
-       realgud/debugger/trepanx/trepanx.el,
-       realgud/debugger/zshdb/Makefile.am, realgud/debugger/zshdb/core.el,
-       realgud/debugger/zshdb/init.el,
-       realgud/debugger/zshdb/track-mode.el,
-       realgud/debugger/zshdb/zshdb.el, realgud/lang/Makefile.am,
-       realgud/lang/perl.el, realgud/lang/posix-shell.el,
-       realgud/lang/python.el, realgud/lang/ruby.el, test/bt-helper.el,
-       test/regexp-helper.el, test/test-bp.el, test/test-bt-pdb.el,
-       test/test-bt-pydb.el, test/test-bt-pydbgr.el,
-       test/test-bt-rdebug.el, test/test-bt-trepan.el,
-       test/test-bt-trepanx.el, test/test-bt-zshdb.el,
-       test/test-buf-bt.el, test/test-buf-cmd.el,
-       test/test-common-helper.el, test/test-core.el, test/test-dbgr.el,
-       test/test-file.el, test/test-lang.el,
-       test/test-loc-regexp-trepan.el, test/test-loc-regexp-trepanpl.el,
-       test/test-loc-regexp-trepanx.el, test/test-loc.el,
-       test/test-lochist.el, test/test-pdb.el, test/test-perldb.el,
-       test/test-pydb.el, test/test-pydbgr.el, test/test-rdebug.el,
-       test/test-realgud.el, test/test-regexp-bashdb.el,
-       test/test-regexp-gdb.el, test/test-regexp-pdb.el,
-       test/test-regexp-perldb.el, test/test-regexp-pydb.el,
-       test/test-regexp-pydbgr.el, test/test-regexp-rdebug.el,
-       test/test-regexp-remake.el, test/test-regexp-ruby.el,
-       test/test-regexp-trepan.el, test/test-regexp-trepanpl.el,
-       test/test-regexp-trepanx.el, test/test-regexp-zshdb.el,
-       test/test-regexp.el, test/test-remake-core.el, test/test-remake.el,
-       test/test-send.el, test/test-shortkey.el, test/test-srcbuf.el,
-       test/test-track-mode.el, test/test-track.el: Start the massive
-       rename dbgr -> realgud
-
-2013-03-30  R. Bernstein <address@hidden>
-
-       * : Merge pull request #13 from expez/package Fix typo in package 
declaration.
-
-2013-03-27  R. Bernstein <address@hidden>
-
-       * : Merge pull request #12 from expez/package Add a package description.
-
-2013-03-25  rocky <address@hidden>
-
-       * elisp-comp: Don't create elc files in a temp directory. This
-       messes up the load relative stuff.
-
-2013-03-17  rocky <address@hidden>
-
-       * .gitignore, configure.ac, dbgr.el, dbgr/.gitignore,
-       dbgr/common/.gitignore, dbgr/common/buffer/.gitignore,
-       dbgr/debugger/.gitignore, dbgr/debugger/Makefile.am,
-       dbgr/debugger/bashdb/.gitignore, dbgr/debugger/gdb/.gitignore,
-       dbgr/debugger/kshdb/.gitignore, dbgr/debugger/pdb/.gitignore,
-       dbgr/debugger/perldb/.gitignore, dbgr/debugger/pydb/.gitignore,
-       dbgr/debugger/pydbgr/.gitignore, dbgr/debugger/rdebug/.gitignore,
-       dbgr/debugger/remake/.gitignore,
-       dbgr/debugger/trepan.pl/.gitignore,
-       dbgr/debugger/trepan/.gitignore,
-       dbgr/debugger/trepan3k/Makefile.am, dbgr/debugger/trepan3k/core.el,
-       dbgr/debugger/trepan3k/init.el,
-       dbgr/debugger/trepan3k/track-mode.el,
-       dbgr/debugger/trepan3k/trepan3k.el,
-       dbgr/debugger/trepan8/.gitignore, dbgr/debugger/trepanx/.gitignore,
-       dbgr/debugger/zshdb/.gitignore, dbgr/lang/.gitignore: Add trepan3k
-       debugger
-
-2013-02-20  rocky <address@hidden>
-
-       * autogen.sh: Don't use -v on ln -s command
-
-2013-02-20  rocky <address@hidden>
-
-       * : commit b956bff345480cb5f524a1cd5963d8fb71637474 Author: rocky
-       <address@hidden> Date:   Wed Feb 20 11:52:05 2013 -0500
-
-2013-02-17  rocky <address@hidden>
-
-       * Makefile.am: Tidy and comment Makefile.am
-
-2013-02-17  rocky <address@hidden>
-
-       * Makefile.am: Allow ENV vars to influence git2cl and ruby. Add
-       install-short target.
-
-2013-02-17  John K. Luebs <address@hidden>
-
-       * dbgr/debugger/perldb/init.el: Fix incorrect load paths in perldb
-
-2013-02-17  John K. Luebs <address@hidden>
-
-       * dbgr/common/regexp.el: Add missing eval-when-compile cl to
-       regexp.el
-
-2013-01-12  rocky <address@hidden>
-
-       * dbgr/debugger/pydbgr/init.el, test/test-regexp-pydbgr.el: Allow
-       file remapping in newer pydbgr
-
-2012-12-28  rocky <address@hidden>
-
-       * dbgr/debugger/pydbgr/track-mode.el: Had forgot to turn on mode
-       location tracking.
-
-2012-12-26  rocky <address@hidden>
-
-       * : commit b07e92e15f51e3818fef86d263d73a1e9d2e4b8a Author: rocky
-       <address@hidden> Date:   Wed Dec 26 16:50:38 2012 -0500
-
-2012-12-26  rocky <address@hidden>
-
-       * dbgr.el, dbgr/debugger/pydb/init.el, test/test-regexp-pydb.el: 
-       More pydb debugger fixes. Think it works now.
-
-2012-12-26  rocky <address@hidden>
-
-       * configure.ac, dbgr/common/Makefile.am, dbgr/common/init.el,
-       dbgr/common/init/.gitignore, dbgr/common/init/Makefile.am,
-       dbgr/common/init/pydb.el, dbgr/debugger/Makefile.am,
-       dbgr/debugger/pdb/.gitignore, dbgr/debugger/pydb/.gitignore,
-       dbgr/debugger/pydb/Makefile.am, dbgr/debugger/pydb/core.el,
-       dbgr/debugger/pydb/init.el, dbgr/debugger/pydb/pydb.el,
-       dbgr/debugger/pydb/track-mode.el, test/test-bt-pydb.el,
-       test/test-pydb.el, test/test-regexp-pydb.el: Remove old init
-       directory and convert last debugger pydb to new format.
-
-2012-11-24  rocky <address@hidden>
-
-       * install-from-git.sh: Allow configure options to get passed to
-       "install-from-git.sh"
-
-2012-09-25  rocky <address@hidden>
-
-       * dbgr/common/bp.el, dbgr/debugger/trepan.pl/init.el: Correct
-       trepan.pl breakpoint command. Change fringe string in preparation
-       for toggling breakpoint fringe area.
-
-2012-09-22  rocky <address@hidden>
-
-       * dbgr/common/bp.el, dbgr/common/track.el: Delay testing display
-       until first use. More work is needed.
-
-2012-09-22  rocky <address@hidden>
-
-       * dbgr/common/bp.el, dbgr/debugger/rdebug/track-mode.el: Allow more
-       image formats and separate it into its own file. cmds.el: remove
-       function warning compile message.
-
-2012-09-22  rocky <address@hidden>
-
-       * : commit f219e99806299300bd6ea2a077b48ba3ad20146d Author: rocky
-       <address@hidden> Date:   Sat Sep 22 08:13:33 2012 -0400
-
-2012-09-22  rocky <address@hidden>
-
-       * dbgr/common/bp-image-data.el, dbgr/common/bp.el,
-       dbgr/common/cmds.el: Allow more image formats and separate it into
-       its own file. cmds.el: remove function warning compile message.
-
-2012-09-22  rocky <address@hidden>
-
-       * dbgr/common/bp.el: Guard against trying to show a breakpoint
-       enabed/disabled image when find-image couldn't find one. Issue #4.
-
-2012-09-21  rocky <address@hidden>
-
-       * dbgr/debugger/rdebug/core.el, dbgr/debugger/rdebug/track-mode.el: 
-       dbgr-rdebug wasn't running commit-mode track hooks. Issue #4. Also
-       suggest rdebug as a Ruby program to debug when we can't find
-       anything else.
-
-2012-09-04  rocky <address@hidden>
-
-       * dbgr/common/lang.el, dbgr/debugger/trepanx/core.el,
-       test/test-lang.el: Small change - trepanx suggests trepanx when it
-       can't find another ruby program.
-
-2012-09-03  rocky <address@hidden>
-
-       * dbgr/common/core.el, dbgr/common/lang.el,
-       dbgr/debugger/trepan.pl/core.el, dbgr/debugger/trepan/core.el,
-       test/test-lang.el: Add last-resort parameter to suggest a file to
-       run inrepan.pl: core
-
-2012-09-03  rocky <address@hidden>
-
-       * dbgr/common/core.el, dbgr/common/lang.el,
-       test/test-regexp-perldb.el: Small changes.
-
-2012-09-03  rocky <address@hidden>
-
-       * dbgr/common/bp.el: Untabify
-
-2012-09-03  rocky <address@hidden>
-
-       * dbgr/common/bp.el: One more wafer-thin change
-
-2012-09-03  rocky <address@hidden>
-
-       * dbgr/common/bp.el: Should have been part of last commit.
-
-2012-09-03  rocky <address@hidden>
-
-       * dbgr/common/bp.el: Fix bug in showing breakpoint location when we
-       have a display and not when we don't. This time, for sure!
-
-2012-08-21  rocky <address@hidden>
-
-       * : commit 67b27ae0d12be3d2456155b710fc174b020718e1 Author: rocky
-       <address@hidden> Date:   Sun Aug 12 15:54:05 2012 -0400
-
-2012-07-02  rocky <address@hidden>
-
-       * dbgr/debugger/trepan.pl/init.el, test/regexp-helper.el,
-       test/test-regexp-trepanpl.el, test/test-regexp-trepanx.el: 
-       trepan.pl/init.el: correct breakpoint regexp.
-       test-regexp-trepan*.el: DRY code by putting more in regexp-helper.el
-
-2012-07-02  rocky <address@hidden>
-
-       * test/test-regexp-trepan.el, test/test-regexp-trepanpl.el,
-       test/test-regexp-trepanx.el: More on prompt regexps start trepan.pl
-       regexp test.
-
-2012-07-02  rocky <address@hidden>
-
-       * test/bt-helper.el, test/regexp-helper.el, test/test-bt-pdb.el,
-       test/test-bt-pydbgr.el, test/test-bt-rdebug.el,
-       test/test-bt-trepan.el, test/test-bt-trepanx.el,
-       test/test-bt-zshdb.el, test/test-loc-regexp-trepan.el,
-       test/test-loc-regexp-trepanx.el, test/test-regexp-pydbgr.el,
-       test/test-regexp-ruby.el, test/test-regexp-trepanx.el: DRY test
-       backtace code by putting more common stuff in bt-helper.el
-
-2012-07-01  rocky <address@hidden>
-
-       * test/test-regexp.el: DRY more.
-
-2012-07-01  rocky <address@hidden>
-
-       * Makefile.am, dbgr/debugger/Makefile.am, test/regexp-helper.el,
-       test/test-loc-regexp-trepan.el, test/test-loc-regexp-trepanx.el,
-       test/test-regexp-bashdb.el, test/test-regexp-gdb.el,
-       test/test-regexp-perldb.el, test/test-regexp-rdebug.el,
-       test/test-regexp-remake.el: DRY code. Make "make distcheck" work.
-
-2012-07-01  rocky <address@hidden>
-
-       * test/bt-helper.el, test/regexp-helper.el,
-       test/test-regexp-bashdb.el, test/test-regexp-pdb.el,
-       test/test-regexp-perldb.el, test/test-regexp-remake.el,
-       test/test-regexp-trepan.el, test/test-regexp-zshdb.el: DRY test
-       code.
-
-2012-07-01  rocky <address@hidden>
-
-       * test/Makefile.am, test/regexp-helper.el,
-       test/test-regexp-pydbgr.el, test/test-regexp-rdebug.el,
-       test/test-regexp-ruby.el: DRY regexp tests a tiny bit.
-
-2012-07-01  rocky <address@hidden>
-
-       * install-from-git.sh: No more test-unit. Yay!
-
-2012-07-01  rocky <address@hidden>
-
-       * test/test-loc-regexp-trepan.el, test/test-loc-regexp-trepanx.el,
-       test/test-track.el: test-unit -> test-simple
-
-2012-07-01  rocky <address@hidden>
-
-       * test/Makefile.am, test/bt-helper.el, test/helper.el,
-       test/test-bt-pdb.el, test/test-bt-pydbgr.el,
-       test/test-bt-rdebug.el, test/test-bt-trepan.el,
-       test/test-bt-trepanx.el, test/test-bt-zshdb.el,
-       test/test-regexp-rdebug.el: test-unit -> test-simple
-
-2012-07-01  rocky <address@hidden>
-
-       * test/test-buf-cmd.el, test/test-regexp.el, test/test-srcbuf.el,
-       test/test-track-mode.el: test-unit -> test-simple
-
-2012-07-01  rocky <address@hidden>
-
-       * test/test-core.el, test/test-send.el: test-unit -> test-simple
-
-2012-07-01  rocky <address@hidden>
-
-       * test/test-common-helper.el, test/test-remake-core.el: test-unit ->
-       test-simple
-
-2012-07-01  rocky <address@hidden>
-
-       * test/test-regexp-pydbgr.el, test/test-regexp-ruby.el: test-unit ->
-       test-simple
-
-2012-07-01  rocky <address@hidden>
-
-       * test/test-regexp-bashdb.el, test/test-regexp-gdb.el,
-       test/test-regexp-zshdb.el: test-unit -> test-simple
-
-2012-06-30  rocky <address@hidden>
-
-       * test/test-regexp-perldb.el, test/test-regexp-rdebug.el,
-       test/test-regexp-remake.el, test/test-remake.el: test-unit ->
-       test-simple
-
-2012-06-30  rocky <address@hidden>
-
-       * test/test-perldb.el, test/test-rdebug.el: test-unit -> test-simple
-
-2012-06-29  rocky <address@hidden>
-
-       * dbgr/common/bp.el: Allow running on Emacs where we can't display
-       images.
-
-2012-06-26  rocky <address@hidden>
-
-       * configure.ac, dbgr/common/fringe.el, elisp-comp: finge.el: another
-       gaurd around defining a fringe bitmap.  configure.ac: make sure we
-       don't smash INSTALL et all.
-
-2012-06-15  rocky <address@hidden>
-
-       * install-from-git.sh: Install test-simple as a prerequisite
-
-2012-06-15  rocky <address@hidden>
-
-       * make-check-filter.rb, test/test-file.el,
-       test/test-regexp-trepanx.el: make-check-filter.rb: filter out some
-       "remake" lines. test-unit -> test-simple
-
-2012-06-15  rocky <address@hidden>
-
-       * test/test-bt-pdb.el, test/test-pdb.el, test/test-pydbgr.el,
-       test/test-regexp-trepan.el, test/test-regexp-trepanx.el: test-unit
-       -> test-simple
-
-2012-06-14  rocky <address@hidden>
-
-       * test/test-bt-pdb.el: One more test-unit->test-simple
-
-2012-06-13  rocky <address@hidden>
-
-       * test/test-bp.el: Small change
-
-2012-06-13  rocky <address@hidden>
-
-       * test/test-dbgr.el, test/test-lang.el, test/test-regexp-pdb.el: 
-       Start to use buffer-local-variable's in tests. This reduces the
-       global scope pollution.
-
-2012-06-13  rocky <address@hidden>
-
-       * test/test-regexp-pdb.el: One more test-unit -> test-simple
-
-2012-06-13  rocky <address@hidden>
-
-       * test/test-dbgr.el, test/test-lang.el: A couple more test-unit
-       tests converted to test-simple
-
-2012-06-13  rocky <address@hidden>
-
-       * test/test-loc.el: test-unit -> test-simple
-
-2012-06-13  rocky <address@hidden>
-
-       * test/test-lochist.el, test/test-shortkey.el: test-simple-clear ->
-       test-simple-start
-
-2012-06-13  rocky <address@hidden>
-
-       * : commit 1bd9a458f78335235e1265f417de9145c869dbb5 Author: rocky
-       <address@hidden> Date:   Wed Jun 13 05:18:22 2012 -0400
-
-2012-06-10  rocky <address@hidden>
-
-       * test/test-bp.el, test/test-buf-bt.el: A couple more tests
-       converted to test-simple.
-
-2012-06-10  rocky <address@hidden>
-
-       * dbgr/common/buffer/backtrace.el, test/test-bp.el,
-       test/test-shortkey.el: Start replacing test-unit with test-simple.
-
-2012-06-02  rocky <address@hidden>
-
-       * dbgr/common/buffer/backtrace.el, dbgr/common/track.el: Make use of
-       return value of defvar's return value in make-buffer-local-variable.
-
-2012-05-20  rocky <address@hidden>
-
-       * dbgr/common/loc.el, test/Makefile.am: Makefile.am: adjust options
-       because in Emacs 24 --quick doesn't include site file loc.el: small
-       grammar thing.
-
-2012-05-14  rocky <address@hidden>
-
-       * dbgr/common/loc.el, dbgr/debugger/bashdb/track-mode.el,
-       dbgr/debugger/gdb/track-mode.el, dbgr/debugger/kshdb/track-mode.el,
-       dbgr/debugger/pdb/track-mode.el,
-       dbgr/debugger/remake/track-mode.el,
-       dbgr/debugger/trepan.pl/track-mode.el,
-       dbgr/debugger/zshdb/track-mode.el: Defensive programming
-
-2012-05-14  rocky <address@hidden>
-
-       * : commit d409bf9b79a74508b3ab424ac41fcccf967f5b30 Author: rocky
-       <address@hidden> Date:   Sun May 13 19:23:13 2012 -0400
-
-2012-05-13  rocky <address@hidden>
-
-       * dbgr/common/loc.el, test/test-loc-regexp-trepan.el,
-       test/test-loc-regexp-trepanx.el, test/test-regexp-pdb.el,
-       test/test-regexp-trepan.el: loc.el: we don't need no stinking id's.
-       test-regexp-pdb.el: correct typo prompt_str -> prompt-str
-       test-trepan: add initialization of promp-str
-
-2012-05-12  rocky <address@hidden>
-
-       * .gitignore, README.textile, configure.ac, dbgr.el,
-       dbgr/debugger/Makefile.am, dbgr/debugger/pdb/.gitignore,
-       dbgr/debugger/pdb/Makefile.am, dbgr/debugger/pdb/core.el,
-       dbgr/debugger/pdb/init.el, dbgr/debugger/pdb/pdb.el,
-       dbgr/debugger/pdb/track-mode.el, dbgr/debugger/pydbgr/init.el,
-       dbgr/debugger/pydbgr/pydbgr.el, test/test-bt-pdb.el,
-       test/test-pdb.el, test/test-regexp-pdb.el,
-       test/test-regexp-trepan.el: Add stock Python debugger.
-
-2012-05-12  rocky <address@hidden>
-
-       * dbgr/debugger/bashdb/track-mode.el,
-       dbgr/debugger/gdb/track-mode.el, dbgr/debugger/kshdb/track-mode.el,
-       dbgr/debugger/perldb/track-mode.el,
-       dbgr/debugger/pydbgr/track-mode.el,
-       dbgr/debugger/rdebug/track-mode.el,
-       dbgr/debugger/remake/track-mode.el,
-       dbgr/debugger/trepan.pl/track-mode.el,
-       dbgr/debugger/trepanx/track-mode.el,
-       dbgr/debugger/zshdb/track-mode.el, test/test-loc-regexp-trepan.el: 
-       Set debug-track-mode properly.
-
-2012-05-12  rocky <address@hidden>
-
-       * dbgr/common/track-mode.el: One more incorrect use of
-       dbgr-track-mode call.
-
-2012-05-12  rocky <address@hidden>
-
-       * dbgr/common/buffer/command.el, dbgr/common/loc.el,
-       dbgr/common/lochist.el, dbgr/debugger/trepan/track-mode.el: Add
-       describe funciton to loc. Show full history ring described.
-
-2012-05-11  rocky <address@hidden>
-
-       * dbgr/common/buffer/command.el, dbgr/common/buffer/source.el,
-       dbgr/common/core.el, dbgr/common/shortkey.el: Add
-       dbgr-srcbuf-info-describe(). And revise dbgr-cmdbuf-info-describe.
-
-2012-05-09  rocky <address@hidden>
-
-       * : commit ef076bb12de522b264b25181bcfdf33aacc68825 Author: rocky
-       <address@hidden> Date:   Wed May 9 23:29:06 2012 -0400
-
-2012-04-23  rocky <address@hidden>
-
-       * README.textile: Better wording"
-
-2012-04-23  rocky <address@hidden>
-
-       * README.textile: Add link to "how to use"
-
-2012-04-15  rocky <address@hidden>
-
-       * test/Makefile.am: Use long form options to pass to emacs
-
-2012-04-09  rocky <address@hidden>
-
-       * : commit f47333d4ee517988aafa8327d1967138754ad87d Author: rocky
-       <address@hidden> Date:   Fri Apr 6 07:11:34 2012 -0400
-
-2012-03-31  rocky <address@hidden>
-
-       * : commit c0929a53d3916c956360bde41bd1fd4ae353ab94 Author: rocky
-       <address@hidden> Date:   Sat Mar 31 10:11:31 2012 -0400
-
-2012-03-24  rocky <address@hidden>
-
-       * README.textile, dbgr/common/shortkey.el: Note we support
-       Devel::Trepan. shortkey.el: some change from a while ago.
-
-2012-03-09  R. Bernstein <address@hidden>
-
-       * : Merge pull request #1 from Erkan-Yilmaz/master fix link + add 
missing word
-
-2012-01-17  rocky <address@hidden>
-
-       * : commit 803e3755cad7a3ab12049bd37f219a5e4fdb05d8 Author: rocky
-       <address@hidden> Date:   Sat Dec 31 10:07:28 2011 -0500
-
-2011-12-29  rocky <address@hidden>
-
-       * dbgr/common/core.el: dbgr-terminate, dbg-terminate-srcbuf Coerce
-       string buffer name into a buffer.
-
-2011-12-21  rocky <address@hidden>
-
-       * dbgr/common/core.el: use dbgr-track-mode-off instead of passing 0
-       to dbgr-track-mode. declare-function arguments seem to have added a
-       "file" parameter?
-
-2011-12-16  rocky <address@hidden>
-
-       * : commit 8ca1c7717a73671e473405da5a89f77ab9ad9196 Author: rocky
-       <address@hidden> Date:   Fri Dec 16 23:04:16 2011 -0500
-
-2011-12-13  rocky <address@hidden>
-
-       * : commit acc38e77e4e65bb814f156e20077b104a353a5b0 Author: rocky
-       <address@hidden> Date:   Thu Dec 1 19:48:31 2011 -0500
-
-2011-12-01  rocky <address@hidden>
-
-       * : commit c3b78f013173488b06a939cbae6030d9f2e69f75 Merge: de59b90
-       a2ed07f Author: rocky <address@hidden> Date:   Wed Nov 30 23:31:18
-       2011 -0500
-
-2011-11-30  rocky <address@hidden>
-
-       * : 3   1       dbgr/common/backtrack-mode.el 14        12      
dbgr/common/track.el 2  1
-       dbgr/debugger/perldb/init.el 4  4
-       dbgr/debugger/trepanpl/backtrack-mode.el 0      1
-       dbgr/debugger/trepanpl/trepanpl.el
-
-2011-11-15  rocky <address@hidden>
-
-       * : commit a2ed07fcedc83a5fa7c39a96cf60b211e2889e63 Author: rocky
-       <address@hidden> Date:   Tue Nov 15 05:19:24 2011 -0500
-
-2011-11-14  rocky <address@hidden>
-
-       * dbgr/common/backtrack-mode.el, dbgr/common/track.el,
-       dbgr/debugger/perldb/init.el: Command completion of debuggers in
-       dbgr-track-mode. Also allow perl5db for as an synonym for perldb.
-
-2011-11-13  rocky <address@hidden>
-
-       * dbgr/debugger/perldb/perldb.el: Add perldb and perl5db aliases.
-
-2011-11-01  rocky <address@hidden>
-
-       * : commit 3ae90f5ede0086c1a00f095735f3d7588df4a3f1 Author: rocky
-       <address@hidden> Date:   Tue Nov 1 13:59:40 2011 -0400
-
-2011-11-01  rocky <address@hidden>
-
-       * install-from-git.sh: Allow the use of "su - root" if sudo isn't
-       found of if we just want to "su - root" instead of using sudo.
-
-2011-10-26  rocky <address@hidden>
-
-       * dbgr/common/buffer/command.el, dbgr/common/file.el,
-       dbgr/common/regexp.el, dbgr/common/track.el,
-       dbgr/debugger/rdebug/init.el, dbgr/debugger/trepanpl/init.el,
-       dbgr/debugger/trepanpl/trepanpl.el, dbgr/lang/perl.el,
-       test/test-regexp-perldb.el: Add ability to ignore file in tracking
-       based on a re. For example (eval) in Ruby 1.8 or (eval 
10)[../foo/bar.pl:10] in Perl. Todo: add
-       <string> in Python.
-
-2011-10-23  rocky <address@hidden>
-
-       * dbgr/debugger/perldb/init.el, dbgr/debugger/perldb/track-mode.el,
-       dbgr/debugger/trepanpl/init.el,
-       dbgr/debugger/trepanpl/track-mode.el, dbgr/lang/perl.el,
-       test/test-regexp-perldb.el: Create common Perl language file. Add
-       pattern for Perl error message.
-
-2011-09-05  rocky <address@hidden>
-
-       * configure.ac, dbgr.el, dbgr/common/buffer/.gitignore,
-       dbgr/common/track.el, dbgr/debugger/Makefile.am,
-       dbgr/debugger/perldb/core.el, dbgr/debugger/perldb/track-mode.el,
-       dbgr/debugger/trepanpl/.gitignore,
-       dbgr/debugger/trepanpl/Makefile.am,
-       dbgr/debugger/trepanpl/backtrack-mode.el,
-       dbgr/debugger/trepanpl/core.el, dbgr/debugger/trepanpl/init.el,
-       dbgr/debugger/trepanpl/track-mode.el,
-       dbgr/debugger/trepanpl/trepanpl.el: Start perl trepan debugger mode
-       (trepanpl).
-
-2011-06-30  rocky <address@hidden>
-
-       * elisp-comp: Reinstate old elisp-comp. WE NEED A MODIFIED
-       elisp-comp!
-
-2011-06-29  rocky <address@hidden>
-
-       * README.textile: More clear about Ruby 1.8
-
-2011-06-29  rocky <address@hidden>
-
-       * README.textile, elisp-comp: Add rb8-trepanning to list of
-       debuggers we support.
-
-2011-06-19  rocky <address@hidden>
-
-       * dbgr/common/track-mode.el: Add a simple enable and disable of
-       track mode which is useful in a rails console.
-
-2011-06-03  rocky <address@hidden>
-
-       * dbgr.el: More administrivia
-
-2011-06-03  rocky <address@hidden>
-
-       * configure.ac: Administrivia.
-
-2011-06-03  rocky <address@hidden>
-
-       * dbgr/debugger/Makefile.am, dbgr/debugger/rdebug/init.el,
-       dbgr/debugger/trepan8/.gitignore,
-       dbgr/debugger/trepan8/Makefile.am, dbgr/debugger/trepan8/core.el,
-       dbgr/debugger/trepan8/init.el, dbgr/debugger/trepan8/track-mode.el,
-       dbgr/debugger/trepan8/trepan8.el: Start support for trepan8 which is
-       mostly like trepanx and rdebug (but probably will later have a bit
-       of trepan in it.)
-
-2011-05-29  rocky <address@hidden>
-
-       * dbgr/debugger/rdebug/init.el, dbgr/debugger/trepan/init.el,
-       dbgr/lang/ruby.el: A couple of rdebug/ruby pattern name and variable
-       fixes.
-
-2011-05-24  rocky <address@hidden>
-
-       * dbgr/common/cmds.el, dbgr/common/core.el,
-       dbgr/common/track-mode.el: dbgr-cmd-quit resets source information
-       in source buffers whenone can't find a command buffer for it.
-
-2011-05-24  rocky <address@hidden>
-
-       * dbgr/common/core.el, dbgr/common/track-mode.el,
-       dbgr/common/window.el: Add bidinng "C-c S" to go into source window
-       from command window.  ("frame 0" is lame.) Add commnd to reset
-       source window.
-
-2011-05-24  rocky <address@hidden>
-
-       * dbgr/common/window.el: 'C' dbgr-window-undisturb-src should select
-       the command window, not just show it. Be more agressive about not
-       using a minibuffer window, even if it is active.
-
-2011-05-03  rocky <address@hidden>
-
-       * dbgr/common/track.el: In track-mode, silence failing re position
-       matching messages.
-
-2011-05-01  rocky <address@hidden>
-
-       * Makefile.am, common.mk, dbgr/common/Makefile.am,
-       dbgr/common/buffer/Makefile.am, dbgr/common/buffer/source.el,
-       dbgr/common/track.el, dbgr/debugger/Makefile.am,
-       dbgr/debugger/common.mk, dbgr/debugger/trepan/Makefile.am,
-       test/Makefile.am: Two bugs and a Makefile change. track hook can be
-       called twice with second time no change. Guard for that.
-       (use-local-map) returns nil so use (current-local-map) again. In
-       Makefiles: add "short" targets via an included common.mk more often.
-
-2011-04-26  rocky <address@hidden>
-
-       * dbgr/common/track.el, dbgr/debugger/trepan/init.el,
-       dbgr/debugger/trepan/track-mode.el, dbgr/lang/ruby.el: ruby.el,
-       trepan/init.el: Add syntax error pattern for 1.9 YARV track.el: when
-       loc-matching fails show message returned.
-
-2011-04-24  rocky <address@hidden>
-
-       * dbgr.el, dbgr/debugger/bashdb/bashdb.el,
-       dbgr/debugger/gdb/gdb.el, dbgr/debugger/kshdb/kshdb.el,
-       dbgr/debugger/perldb/core.el, dbgr/debugger/perldb/perldb.el,
-       dbgr/debugger/pydbgr/pydbgr.el, dbgr/debugger/rdebug/rdebug.el,
-       dbgr/debugger/remake/remake.el, dbgr/debugger/trepan/trepan.el,
-       dbgr/debugger/trepanx/trepanx.el, dbgr/debugger/zshdb/zshdb.el: Go
-       over customization groups. Add top-level dbgr group and individual
-       debuggers hang off of this now.
-
-2011-04-24  rocky <address@hidden>
-
-       * dbgr/common/file.el, dbgr/common/track.el, test/test-file.el: 
-       track.el: give a messages if location regexp fails to match a
-       position.  file.el: use compilation-find-file to resolve partial
-       filenames.
-
-2011-04-23  rocky <address@hidden>
-
-       * dbgr/common/core.el: Switch to buffer even when dbgr-exec-shell
-       fails.
-
-2011-04-23  rocky <address@hidden>
-
-       * dbgr/debugger/trepanx/init.el: Another cut-and-paste error from
-       trepan to trepanx
-
-2011-04-23  rocky <address@hidden>
-
-       * dbgr/debugger/trepanx/track-mode.el: ruby-goto-dollar-bang-line
-       not rubinius-goto-dollar-bang-line
-
-2011-04-23  rocky <address@hidden>
-
-       * dbgr/common/track-mode.el, dbgr/common/track.el,
-       dbgr/debugger/trepanx/track-mode.el: C-c!! for is a dollar-bang
-       line, not a lang line. Don't go into shortkey automatically unless
-       called from a shell hook. Add more sanity checks to handle error
-       conditions better such as recovery from setting a bad debugger name.
-
-2011-04-23  rocky <address@hidden>
-
-       * dbgr/debugger/rdebug/init.el, dbgr/debugger/trepan/init.el,
-       dbgr/debugger/trepanx/init.el, dbgr/debugger/trepanx/track-mode.el,
-       dbgr/lang/ruby.el: Add Ruby dollar-bang as its own thing.
-
-2011-04-20  rocky <address@hidden>
-
-       * : commit ca1fd145067bf0fdb485e97f2b57b1950657a894 Author: rocky
-       <address@hidden> Date:   Wed Apr 20 12:34:53 2011 -0400
-
-2011-04-19  rocky <address@hidden>
-
-       * dbgr/debugger/gdb/init.el, dbgr/debugger/remake/init.el,
-       test/test-regexp-gdb.el: Tweak gdb expression for those encountered.
-
-2011-04-19  rocky <address@hidden>
-
-       * dbgr/common/track.el: Attempt to address recently-encountered
-       another window position bug.
-
-2011-04-19  rocky <address@hidden>
-
-       * dbgr/common/window.el: Guard against an uninitialized marker
-       variable in window selection
-
-2011-04-17  rocky <address@hidden>
-
-       * dbgr/common/buffer/command.el, dbgr/common/shortkey.el,
-       dbgr/common/track-mode.el, dbgr/debugger/perldb/track-mode.el,
-       test/test-regexp-remake.el: Add routine to toggle cmdbuf
-       in-debugger? state. Add temporary key for backtrace. Workaround bug
-       in turning off dbgr-track-mode.  Test shortkey customization per
-       debugger. As always much more is needed.
-
-2011-04-17  rocky <address@hidden>
-
-       * dbgr/common/track.el, dbgr/debugger/bashdb/init.el,
-       dbgr/debugger/kshdb/init.el, dbgr/debugger/remake/init.el,
-       dbgr/debugger/trepan/init.el, dbgr/debugger/trepanx/init.el,
-       dbgr/debugger/zshdb/init.el, test/test-track.el: Look for
-       termination message in track mode and use that to terminate
-       debugging.
-
-2011-04-17  rocky <address@hidden>
-
-       * Makefile.am, dbgr/common/buffer/helper.el,
-       dbgr/common/buffer/source.el: Makefile.am: Add --tasks/tasks and
-       *short targets.  move routine from source to helper to remove
-       compile warning.
-
-2011-04-17  rocky <address@hidden>
-
-       * dbgr/debugger/trepan/init.el: YARV 1.9.2 regexp for lang backtrace
-
-2011-04-16  rocky <address@hidden>
-
-       * dbgr/common/track.el: Give a message if we fail to find a
-       backtrace position
-
-2011-04-16  rocky <address@hidden>
-
-       * dbgr/common/buffer/source.el, dbgr/common/lochist.el: Beef up
-       describe for source buffers.
-
-2011-04-16  rocky <address@hidden>
-
-       * dbgr/common/buffer/command.el, dbgr/common/buffer/helper.el,
-       dbgr/common/fringe.el, dbgr/common/track.el, dbgr/common/window.el,
-       dbgr/debugger/gdb/init.el, dbgr/debugger/trepan/init.el,
-       test/test-track.el: Possibly some of the source update redisplay
-       problems has been fixed.  Add ability to understand what frame we
-       might be in. Done for trepan.el. Others may follow. Add Emacs
-       command to toggle whether we stay in source or not and better
-       support for cmdbuf-info-describe.  gdb/init.d fix cut-and-paste
-       error.
-
-2011-04-16  rocky <address@hidden>
-
-       * dbgr/debugger/gdb/init.el: Somehow had lost hash key for gdb
-       debugger.
-
-2011-04-16  rocky <address@hidden>
-
-       * dbgr/common/cmds.el, dbgr/common/track.el: Correct default "break"
-       command. Add a "kill" command. Correct some docstrings.
-
-2011-04-15  rocky <address@hidden>
-
-       * Makefile.am, dbgr/debugger/trepan/init.el, make-check-filter.rb,
-       test/Makefile.am: Add "make check-short" which reduces unuseful
-       output from "make check".  Correct problem in trepan init.el:
-       (format ...) doesn't work here.
-
-2011-04-15  rocky <address@hidden>
-
-       * dbgr/common/buffer/command.el, dbgr/common/core.el,
-       dbgr/common/track-mode.el, dbgr/common/track.el: Put color in
-       running status for track mode.
-
-2011-04-15  rocky <address@hidden>
-
-       * : commit 7a2abb1420302f6344cc6278a15de0a0f44484e9 Author: rocky
-       <address@hidden> Date:   Fri Apr 15 07:35:41 2011 -0400
-
-2011-04-14  rocky <address@hidden>
-
-       * dbgr/common/backtrace-mode.el, dbgr/common/buffer/backtrace.el,
-       dbgr/common/shortkey.el, dbgr/debugger/gdb/init.el,
-       test/test-regexp-bashdb.el, test/test-regexp-gdb.el,
-       test/test-regexp-perldb.el: Supprse insert keys in sparse, read-only
-       keymaps shortkey, and backtrace.  Add backtrace tests for gdb. Other
-       small cleanups.
-
-2011-04-14  rocky <address@hidden>
-
-       * dbgr/debugger/gdb/init.el: Font-lock for gdb.
-
-2011-04-14  rocky <address@hidden>
-
-       * dbgr/debugger/gdb/init.el: Add gdb debugger backtrace regexpl.
-       More to come
-
-2011-04-14  rocky <address@hidden>
-
-       * dbgr/common/backtrace-mode.el, dbgr/common/buffer/backtrace.el,
-       dbgr/common/key.el, dbgr/debugger/perldb/init.el,
-       dbgr/debugger/remake/init.el, dbgr/debugger/trepan/init.el: Set
-       selected frame indicator re in init.el Add font-lock for Perl
-       frames.
-
-2011-04-14  rocky <address@hidden>
-
-       * dbgr/common/buffer/backtrace.el, dbgr/common/fringe.el,
-       dbgr/debugger/perldb/perldb.el, dbgr/debugger/trepan/trepan.el: More
-       perl backtrace hacking. trepan.el: DRY like the others.
-
-2011-04-14  rocky <address@hidden>
-
-       * dbgr/debugger/perldb/init.el, dbgr/debugger/pydbgr/init.el: Some
-       more small perldb customizations.
-
-2011-04-14  rocky <address@hidden>
-
-       * dbgr/common/buffer/backtrace.el, dbgr/common/cmds.el,
-       dbgr/debugger/kshdb/kshdb.el, dbgr/debugger/perldb/init.el,
-       dbgr/debugger/perldb/track-mode.el, dbgr/debugger/zshdb/zshdb.el,
-       test/test-regexp-perldb.el, test/test-regexp-trepan.el: Start
-       dealing with debuggers that don't give a frame number like Perl.
-       DRY debugger invocations for kshdb, and zshdb.  cmds.el: add a
-       backtrace command.
-
-2011-04-13  rocky <address@hidden>
-
-       * dbgr/common/backtrace-mode.el, dbgr/common/buffer/backtrace.el,
-       dbgr/common/core.el, dbgr/common/send.el, dbgr/common/shortkey.el,
-       dbgr/debugger/bashdb/bashdb.el, dbgr/debugger/gdb/gdb.el,
-       dbgr/debugger/gdb/track-mode.el, dbgr/debugger/pydbgr/pydbgr.el,
-       dbgr/debugger/rdebug/rdebug.el, dbgr/debugger/remake/remake.el,
-       dbgr/debugger/trepan/trepan.el, dbgr/debugger/trepanx/trepanx.el: 
-       DRY initial debugger-start code somewhat.  Add keys for buffer 
switching in backtrace-buffer.  Try to guard against sending to process via 
comint when it is dead
-       and set comint-last-output-start to avoid a
-       ansi-color-apply-on-region doesn't bomb.
-
-2011-04-13  rocky <address@hidden>
-
-       * dbgr/common/buffer/command.el, dbgr/common/buffer/source.el: Use
-       macro to create defstruct setters. Add describe routine for
-       defstruct.
-
-2011-04-13  rocky <address@hidden>
-
-       * dbgr/common/buffer/backtrace.el, dbgr/common/buffer/source.el,
-       dbgr/common/helper.el, test/test-common-helper.el: Add macro to
-       create defstruct setter functions. source.el changed. command.el
-       needs to be changed.
-
-2011-04-13  rocky <address@hidden>
-
-       * dbgr/common/buffer/source.el, dbgr/common/shortkey.el: Simplify
-       dbgr-srcbuf-info field setters
-
-2011-04-12  rocky <address@hidden>
-
-       * dbgr/common/init/pydb.el, dbgr/common/track.el,
-       dbgr/debugger/kshdb/core.el, dbgr/debugger/kshdb/track-mode.el,
-       dbgr/debugger/perldb/track-mode.el, dbgr/debugger/pydbgr/init.el,
-       dbgr/debugger/rdebug/init.el, dbgr/debugger/remake/init.el,
-       dbgr/debugger/trepan/init.el, dbgr/debugger/trepanx/init.el,
-       dbgr/debugger/zshdb/core.el, dbgr/lang/python.el,
-       dbgr/lang/ruby.el, test/test-regexp-pydbgr.el,
-       test/test-regexp-rdebug.el, test/test-regexp-trepan.el,
-       test/test-regexp-trepanx.el: regexp key "backtrace" ->
-       "lang-backtrace" to distinguis better from "debugger-backtrace".
-       Remove more redundant code.
-
-2011-04-12  rocky <address@hidden>
-
-       * dbgr/common/buffer/backtrace.el, dbgr/common/track.el,
-       dbgr/debugger/bashdb/init.el, dbgr/debugger/gdb/track-mode.el,
-       dbgr/debugger/kshdb/core.el, dbgr/debugger/kshdb/init.el,
-       dbgr/debugger/kshdb/track-mode.el, dbgr/debugger/perldb/init.el,
-       dbgr/debugger/rdebug/init.el, dbgr/debugger/remake/core.el,
-       dbgr/debugger/remake/init.el, dbgr/debugger/remake/track-mode.el,
-       dbgr/debugger/trepan/init.el, dbgr/debugger/trepanx/init.el,
-       dbgr/debugger/zshdb/init.el, dbgr/lang/posix-shell.el,
-       dbgr/lang/python.el, dbgr/lang/ruby.el, test/test-regexp-bashdb.el,
-       test/test-regexp-perldb.el, test/test-regexp-remake.el,
-       test/test-regexp-trepan.el, test/test-regexp-zshdb.el: regexp key
-       "frame" -> "debugger-backtrace". Remove some redundant
-       goto-backtrace routines.
-
-2011-04-12  rocky <address@hidden>
-
-       * dbgr/common/backtrace-mode.el, dbgr/common/backtrack-mode.el,
-       dbgr/debugger/pydbgr/core.el, dbgr/debugger/remake/core.el,
-       dbgr/debugger/remake/init.el, dbgr/debugger/remake/track-mode.el: 
-       Add remake-goto-backtrace-line. Note weird distinction between
-       debugger backtrace and programming lanugage backtrace. Need to do
-       more here.
-
-2011-04-12  rocky <address@hidden>
-
-       * dbgr/common/cmds.el, dbgr/common/fringe.el,
-       dbgr/common/window.el, dbgr/debugger/remake/init.el: Correct
-       font-lock regexps for remake backtrace.
-
-2011-04-12  rocky <address@hidden>
-
-       * dbgr/debugger/remake/init.el, test/test-bt-pydbgr.el,
-       test/test-bt-rdebug.el, test/test-bt-trepan.el,
-       test/test-bt-trepanx.el, test/test-bt-zshdb.el,
-       test/test-regexp-remake.el: Add bracktrace buffer regexps for remake
-       debugger. font-lock regexps are not right though.
-
-2011-04-11  rocky <address@hidden>
-
-       * dbgr/common/backtrace-mode.el, dbgr/common/buffer/backtrace.el,
-       dbgr/common/buffer/command.el, dbgr/common/buffer/helper.el,
-       dbgr/common/cmds.el, dbgr/common/key.el, dbgr/common/menu.el,
-       dbgr/common/send.el, dbgr/common/shortkey.el,
-       dbgr/common/track-mode.el, dbgr/common/track.el,
-       dbgr/common/window.el, test/test-track.el: Backtrace buffer now has
-       debugger menu and is listed in the debugger mentu. Add command to
-       show the backtrace frame without distribuing the source buffer.
-       Remove verbosity in command buffer field setting routines.
-
-2011-04-11  rocky <address@hidden>
-
-       * : commit e9bc266318979119910046b5d9a87829800863b1 Author: rocky
-       <address@hidden> Date:   Mon Apr 11 21:34:06 2011 -0400
-
-2011-04-10  rocky <address@hidden>
-
-       * dbgr/common/track.el: Internal function is *not* a command
-
-2011-04-10  rocky <address@hidden>
-
-       * dbgr/common/fringe.el: Only update arrows if they are set.
-
-2011-04-09  rocky <address@hidden>
-
-       * test/test-remake-core.el, test/test-remake.el: Add a test for the
-       part that was failin gin the last commit. A bit hoaky, but better
-       than nothing I guess.
-
-2011-04-09  rocky <address@hidden>
-
-       * dbgr/debugger/remake/remake.el: Set a default filename for the
-       process show buffer name
-
-2011-04-07  rocky <address@hidden>
-
-       * dbgr/common/menu.el, dbgr/common/shortkey.el: Add short-key to go
-       to source window. Reorder menu items.
-
-2011-04-07  rocky <address@hidden>
-
-       * : commit fba2fe7aeac871ea8bd7d2f4a0296903c44c5505 Author: rocky
-       <address@hidden> Date:   Thu Apr 7 13:35:07 2011 -0400
-
-2011-04-07  rocky <address@hidden>
-
-       * dbgr/common/cmds.el, dbgr/common/fringe.el, dbgr/common/menu.el,
-       dbgr/common/send.el, dbgr/common/shortkey.el,
-       dbgr/debugger/perldb/track-mode.el, dbgr/debugger/remake/init.el,
-       dbgr/lang/posix-shell.el, test/test-send.el: Add
-       dbg-cmd-eval-region. Add %s to dbgr-expand-format. Add goto arrows
-       1, 2, and 3. More items in Debugger menu.
-
-2011-04-07  rocky <address@hidden>
-
-       * README.textile: Update list of suppported debuggers and add more
-       reference links.
-
-2011-04-07  rocky <address@hidden>
-
-       * dbgr/common/backtrack-mode.el, dbgr/common/cmds.el,
-       dbgr/common/fringe.el, dbgr/common/menu.el, dbgr/common/send.el,
-       dbgr/common/track-mode.el, dbgr/debugger/bashdb/cmds.el,
-       dbgr/debugger/bashdb/init.el, dbgr/debugger/bashdb/track-mode.el,
-       dbgr/debugger/gdb/track-mode.el, dbgr/debugger/kshdb/cmds.el,
-       dbgr/debugger/kshdb/track-mode.el, dbgr/debugger/perldb/.gitignore,
-       dbgr/debugger/perldb/cmds.el, dbgr/debugger/perldb/core.el,
-       dbgr/debugger/perldb/init.el, dbgr/debugger/perldb/perldb.el,
-       dbgr/debugger/perldb/track-mode.el, dbgr/debugger/pydbgr/cmds.el,
-       dbgr/debugger/pydbgr/track-mode.el, dbgr/debugger/rdebug/cmds.el,
-       dbgr/debugger/rdebug/track-mode.el, dbgr/debugger/remake/cmds.el,
-       dbgr/debugger/remake/track-mode.el,
-       dbgr/debugger/trepan/backtrack-mode.el,
-       dbgr/debugger/trepan/cmds.el, dbgr/debugger/trepan/track-mode.el,
-       dbgr/debugger/trepanx/cmds.el, dbgr/debugger/trepanx/track-mode.el,
-       dbgr/debugger/zshdb/cmds.el, dbgr/debugger/zshdb/track-mode.el,
-       dbgr/lang/posix-shell.el, test/test-perldb.el, test/test-track.el: 
-       Clean up command handling somewhat. We now should handle custom
-       commands via the command has (e.g. for perldb) more correctly. More
-       debugger menu items.
-
-2011-04-07  rocky <address@hidden>
-
-       * dbgr/common/cmds.el, dbgr/common/menu.el,
-       dbgr/debugger/perldb/cmds.el, dbgr/debugger/remake/cmds.el,
-       dbgr/debugger/remake/init.el: Add custom remake "break" command. Add
-       "up" and "down" in debugger menus.
-
-2011-04-06  rocky <address@hidden>
-
-       * dbgr/common/fringe.el, dbgr/common/shortkey.el,
-       dbgr/debugger/kshdb/cmds.el: Add positioning on fringe arrows 1,2,3:
-       C-c-l or shortkey 'l'.  Add custom remake "break" command.
-
-2011-04-05  rocky <address@hidden>
-
-       * dbgr/common/cmds.el, dbgr/common/menu.el,
-       dbgr/common/track-mode.el, dbgr/debugger/trepan/track-mode.el: Add
-       "Debugger" menu in track-mode
-
-2011-04-05  rocky <address@hidden>
-
-       * dbgr/common/cmds.el, dbgr/common/key.el, dbgr/common/shortkey.el,
-       dbgr/debugger/gdb/init.el, dbgr/debugger/kshdb/init.el,
-       dbgr/debugger/pydbgr/init.el, dbgr/debugger/rdebug/init.el,
-       dbgr/debugger/trepan/init.el, dbgr/debugger/trepanx/init.el,
-       test/test-regexp-trepan.el, test/test-regexp-trepanx.el: Breakpoint
-       text for trepan and trepanx have changed. Other small changes.
-
-2011-04-05  rocky <address@hidden>
-
-       * dbgr/common/cmds.el: Messed up on some parameters in
-       'dbgr-define-command'
-
-2011-04-05  rocky <address@hidden>
-
-       * dbgr/common/track-mode.el, dbgr/debugger/bashdb/track-mode.el,
-       dbgr/debugger/gdb/track-mode.el, dbgr/debugger/kshdb/track-mode.el,
-       dbgr/debugger/perldb/track-mode.el,
-       dbgr/debugger/pydbgr/track-mode.el,
-       dbgr/debugger/rdebug/track-mode.el,
-       dbgr/debugger/remake/track-mode.el,
-       dbgr/debugger/trepan/track-mode.el,
-       dbgr/debugger/trepanx/track-mode.el,
-       dbgr/debugger/zshdb/track-mode.el: One more small step towards
-       DRYing code.
-
-2011-04-05  rocky <address@hidden>
-
-       * dbgr/debugger/bashdb/core.el, dbgr/debugger/bashdb/init.el,
-       dbgr/debugger/bashdb/track-mode.el,
-       dbgr/debugger/kshdb/track-mode.el,
-       dbgr/debugger/zshdb/track-mode.el, dbgr/lang/posix-shell.el: Start
-       to DRY POSIX shell code. Add a shell command.
-
-2011-04-05  rocky <address@hidden>
-
-       * configure.ac, dbgr.el, dbgr/common/cmds.el,
-       dbgr/common/init/perldb.el, dbgr/common/send.el,
-       dbgr/common/track.el, dbgr/debugger/Makefile.am,
-       dbgr/debugger/bashdb/cmds.el, dbgr/debugger/bashdb/track-mode.el,
-       dbgr/debugger/gdb/init.el, dbgr/debugger/kshdb/cmds.el,
-       dbgr/debugger/kshdb/track-mode.el, dbgr/debugger/perldb/.gitignore,
-       dbgr/debugger/perldb/Makefile.am, dbgr/debugger/perldb/cmds.el,
-       dbgr/debugger/perldb/core.el, dbgr/debugger/perldb/init.el,
-       dbgr/debugger/perldb/perldb.el, dbgr/debugger/perldb/track-mode.el,
-       dbgr/debugger/remake/core.el, dbgr/debugger/trepan/cmds.el,
-       dbgr/debugger/trepanx/cmds.el, dbgr/debugger/zshdb/cmds.el,
-       dbgr/debugger/zshdb/track-mode.el, test/test-regexp-perldb.el,
-       test/test-send.el: More complete customization of command strings
-       used for basic (gdb-like) command set. This is much needed in perldb
-       which is very different.  More complete dbgr-perldb mode.  Add
-       positioning at a backtrace line in POSIX shells and perldb.
-
-2011-04-04  rocky <address@hidden>
-
-       * dbgr/common/buffer/command.el, dbgr/common/cmds.el,
-       dbgr/common/regexp.el, dbgr/common/shortkey.el,
-       dbgr/common/track.el, dbgr/debugger/bashdb/cmds.el,
-       dbgr/debugger/kshdb/cmds.el, dbgr/debugger/remake/cmds.el,
-       dbgr/debugger/trepan/cmds.el, dbgr/debugger/trepan/init.el,
-       dbgr/debugger/zshdb/cmds.el, dbgr/debugger/zshdb/init.el: Provide a
-       way to remap common commands like quit->quit!. This was a
-       longstanding annoyance.  Disabling shortkey in a source buffer doesn't 
disable it in the
-       command bugger. Use dbgr-cmdbuf-set-shortkey for that.
-
-2011-04-04  rocky <address@hidden>
-
-       * : commit 6866620a6a4a30d744c27cd605590c2566635706 Author: rocky
-       <address@hidden> Date:   Mon Apr 4 12:34:28 2011 -0400
-
-2011-04-04  rocky <address@hidden>
-
-       * dbgr/debugger/remake/core.el, test/Makefile.am,
-       test/test-remake.el: Better GNU Makefile file selection priorities.
-       Shorter Makefile patter suggestged by Yaroslav Halchenko.
-
-2011-04-04  rocky <address@hidden>
-
-       * dbgr/common/init/perldb.el, dbgr/common/track.el,
-       dbgr/debugger/remake/init.el, test/Makefile.am, test/helper.el,
-       test/test-helper.el, test/test-regexp-gdb.el,
-       test/test-regexp-perldb.el: Start perldb track mode. I don't think
-       there's another one out there.  Makefile.am: DRY check code - thanks
-       to "remake" for helping me figure this out.
-
-2011-03-24  rocky <address@hidden>
-
-       * dbgr/debugger/remake/core.el, dbgr/debugger/remake/remake.el,
-       dbgr/debugger/trepan/core.el, dbgr/debugger/trepan/trepan.el,
-       test/Makefile.am, test/test-remake.el: We can now run "dbgr-remake"
-       to get a top-level remake shell.
-
-2011-03-22  rocky <address@hidden>
-
-       * dbgr/debugger/remake/init.el: Correct remake location tracking.
-
-2011-03-22  rocky <address@hidden>
-
-       * dbgr/debugger/remake/init.el: Added event icons
-
-2011-03-20  rocky <address@hidden>
-
-       * dbgr/debugger/bashdb/core.el, dbgr/debugger/remake/core.el,
-       dbgr/debugger/zshdb/core.el: Minor fixes from cut-n-paste
-
-2011-03-20  rocky <address@hidden>
-
-       * dbgr.el: Load remake debugger.
-
-2011-03-19  rocky <address@hidden>
-
-       * dbgr/debugger/remake/init.el: Improve breakpoint tracking for
-       remake 3.82.
-
-2011-03-16  rocky <address@hidden>
-
-       * install-from-git.sh: Add program to install from git - full list
-       this time
-
-2011-03-16  rocky <address@hidden>
-
-       * dbgr/debugger/kshdb/.gitignore, install-from-git.sh: Add program
-       to install from git
-
-2011-03-14  rocky <address@hidden>
-
-       * configure.ac, dbgr.el, dbgr/common/init/kshdb.el,
-       dbgr/debugger/Makefile.am, dbgr/debugger/kshdb/.gitignore,
-       dbgr/debugger/kshdb/Makefile.am, dbgr/debugger/kshdb/cmds.el,
-       dbgr/debugger/kshdb/core.el, dbgr/debugger/kshdb/init.el,
-       dbgr/debugger/kshdb/kshdb.el, dbgr/debugger/kshdb/track-mode.el,
-       dbgr/debugger/remake/.gitignore, dbgr/debugger/zshdb/track-mode.el: 
-       Add kshdb to list of full-support debuggers. Moved and expanded from
-       common/init/kshdb.el
-
-2011-02-23  rocky <address@hidden>
-
-       * configure.ac, dbgr/common/init/remake.el,
-       dbgr/debugger/Makefile.am, dbgr/debugger/remake/Makefile.am,
-       dbgr/debugger/remake/cmds.el, dbgr/debugger/remake/core.el,
-       dbgr/debugger/remake/init.el, dbgr/debugger/remake/remake.el,
-       dbgr/debugger/remake/track-mode.el, dbgr/debugger/zshdb/zshdb.el: 
-       Start to make GNU Makefile debugger, remake a full-fledged entry.
-       Previously we just had a couple of regexps.
-
-2011-02-21  rocky <address@hidden>
-
-       * dbgr/common/backtrack-mode.el,
-       dbgr/debugger/trepan/backtrack-mode.el,
-       test/test-loc-regexp-trepan.el: backtrack-mode: like track-mode but
-       there doesn't have to be an associated process. This could be used
-       for log files or processes that have terminated.
-
-2011-02-10  rocky <address@hidden>
-
-       * dbgr/debugger/trepan/track-mode.el,
-       dbgr/debugger/trepanx/track-mode.el: Keymaps for more of the kinds
-       of backtraces
-
-2011-02-10  rocky <address@hidden>
-
-       * dbgr/debugger/trepanx/init.el, dbgr/lang/ruby.el,
-       test/test-loc-regexp-trepanx.el: Add rubinius X-agent backtrace
-       regexp.
-
-2011-02-09  rocky <address@hidden>
-
-       * dbgr/debugger/pydbgr/init.el, dbgr/debugger/pydbgr/track-mode.el,
-       dbgr/lang/python.el: Start a language file for Python (even though
-       right now we only have one debugger pydbgr).
-
-2011-01-27  rocky <address@hidden>
-
-       * dbgr/common/track.el, dbgr/debugger/gdb/init.el: 
-       dbgr-track-set-debugger: handle setting dbg-gdb-track-mode as a
-       special case
-
-2010-12-26  rocky <address@hidden>
-
-       * dbgr/common/buffer/source.el, dbgr/debugger/rdebug/init.el,
-       dbgr/lang/ruby.el, test/Makefile.am, test/test-regexp-pydbgr.el,
-       test/test-regexp-rdebug.el, test/test-regexp-ruby.el,
-       test/test-regexp-trepan.el: ruby.el: add pattern for rails
-       traceback.  source.el: don't assume we have a local keymap test-*
-       DRY a little.
-
-2010-12-14  rocky <address@hidden>
-
-       * dbgr/debugger/trepanx/trepanx.el: Command name typo: should be
-       dbgr-trepanx rather than trepanx.
-
-2010-12-05  rocky <address@hidden>
-
-       * dbgr/debugger/trepan/init.el, test/Makefile.am,
-       test/test-loc-regexp-trepan.el, test/test-regexp-zshdb.el: location
-       regexp for trepan changed. Also add zshdb regexp test.
-
-2010-12-05  rocky <address@hidden>
-
-       * dbgr/debugger/trepanx/init.el, test/Makefile.am,
-       test/test-loc-regexp-trepanx.el, test/test-regexp-trepanx.el: Update
-       trepanx location regexp which recently changed.
-
-2010-11-30  rocky <address@hidden>
-
-       * dbgr/debugger/bashdb/init.el, dbgr/debugger/zshdb/init.el,
-       test/Makefile.am: Add  zshdb "backtrace"/frame regexp. So
-       dbgr-backtrace-init now works for zshdb.
-
-2010-11-29  rocky <address@hidden>
-
-       * dbgr/common/buffer/backtrace.el, dbgr/debugger/bashdb/init.el,
-       dbgr/debugger/rdebug/init.el, dbgr/lang/posix-shell.el,
-       dbgr/lang/ruby.el, test/Makefile.am, test/test-regexp-bashdb.el,
-       test/test-regexp-trepan.el: Add backtrace parsing for bashdb. Make
-       backtrace parsing more robust. Add keys for display refresh and to
-       move to selected frame.
-
-2010-11-28  rocky <address@hidden>
-
-       * ChangeLog, dbgr/common/buffer/backtrace.el,
-       dbgr/debugger/trepan/init.el, dbgr/debugger/trepanx/init.el,
-       dbgr/lang/ruby.el: Create ring of frame positions. Next/prev motion
-       uses this. Also we have places to store additional properties.
-
-2010-11-27  rocky <address@hidden>
-
-       * dbgr/debugger/trepan/init.el, dbgr/lang/ruby.el,
-       test/test-regexp-trepan.el: Add trepan frame regexp tests.
-
-2010-11-27  rocky <address@hidden>
-
-       * dbgr/debugger/rdebug/init.el, dbgr/debugger/trepan/init.el,
-       dbgr/debugger/trepanx/init.el, dbgr/lang/ruby.el: Go over rdebug for
-       backtrace buffer regexp and improve other regexps.
-
-2010-11-27  rocky <address@hidden>
-
-       * dbgr/common/buffer/helper.el, dbgr/debugger/trepan/init.el,
-       dbgr/debugger/trepanx/init.el, dbgr/lang/ruby.el: Work on trepanx
-       regexps for backtrace. (Might have broken trepan regexps)
-
-2010-11-26  rocky <address@hidden>
-
-       * dbgr.el, dbgr/common/buffer/backtrace.el,
-       dbgr/common/buffer/helper.el, dbgr/debugger/trepan/init.el: Parses
-       backtrace lines (more) correctly now. Add text property for frame
-       number and. goto-frame now works.
-
-2010-11-26  rocky <address@hidden>
-
-       * dbgr.el, dbgr/common/bp.el, dbgr/common/buffer/backtrace.el,
-       dbgr/common/file.el, dbgr/common/init/kshdb.el, dbgr/common/loc.el,
-       dbgr/common/regexp.el, dbgr/common/track.el,
-       dbgr/debugger/bashdb/init.el, dbgr/debugger/gdb/init.el,
-       dbgr/debugger/pydbgr/init.el, dbgr/debugger/rdebug/init.el,
-       dbgr/debugger/trepan/init.el, dbgr/debugger/trepanx/init.el,
-       dbgr/debugger/zshdb/init.el, test/test-track.el: Start to add text
-       properties to backtrace buffer. Much more is needed.  Start adding
-       string examples of things matching trepan regexps.
-
-2010-11-26  rocky <address@hidden>
-
-       * configure.ac, dbgr.el, dbgr/common/init/bashdb.el,
-       dbgr/debugger/Makefile.am, dbgr/debugger/bashdb/.gitignore,
-       dbgr/debugger/bashdb/Makefile.am, dbgr/debugger/bashdb/bashdb.el,
-       dbgr/debugger/bashdb/cmds.el, dbgr/debugger/bashdb/core.el,
-       dbgr/debugger/bashdb/init.el, dbgr/debugger/bashdb/track-mode.el,
-       dbgr/debugger/zshdb/core.el, dbgr/debugger/zshdb/init.el,
-       test/test-dbgr.el: Add emacs debugger as a full-fledged front-end.
-
-2010-11-22  rocky <address@hidden>
-
-       * test/test-regexp-trepanx.el: Work on trepanx regexp test
-
-2010-11-22  rocky <address@hidden>
-
-       * dbgr/debugger/pydbgr/pydbgr.el, dbgr/debugger/zshdb/zshdb.el: 
-       Small Doc string fixes from cut-and-paste.
-
-2010-11-22  rocky <address@hidden>
-
-       * dbgr/common/track.el, dbgr/debugger/pydbgr/track-mode.el,
-       dbgr/debugger/trepan/track-mode.el,
-       dbgr/debugger/zshdb/track-mode.el: track.el: call up
-       debugger-specific track mode track-mode.el: experiment with more
-       robust mode hook.
-
-2010-11-22  rocky <address@hidden>
-
-       * dbgr/common/track-mode.el, dbgr/debugger/trepanx/init.el,
-       dbgr/lang/ruby.el: Parent map of track-mode come from shell, not
-       comint. Correct rubinius backtrace regexp.
-
-2010-11-21  rocky <address@hidden>
-
-       * dbgr/common/buffer/command.el, dbgr/debugger/pydbgr/track-mode.el: 
-       Fix some small bugs
-
-2010-11-21  rocky <address@hidden>
-
-       * dbgr/common/track-mode.el, dbgr/debugger/gdb/track-mode.el,
-       dbgr/debugger/pydbgr/track-mode.el,
-       dbgr/debugger/rdebug/track-mode.el,
-       dbgr/debugger/trepan/track-mode.el,
-       dbgr/debugger/trepanx/track-mode.el,
-       dbgr/debugger/zshdb/track-mode.el: keybindings now work properly for
-       specific debugger track modes. Could be better, but this is a start
-       and a big improvement.
-
-2010-11-21  rocky <address@hidden>
-
-       * dbgr/common/fringe.el, dbgr/common/track-mode.el,
-       dbgr/debugger/gdb/track-mode.el,
-       dbgr/debugger/pydbgr/track-mode.el,
-       dbgr/debugger/rdebug/track-mode.el,
-       dbgr/debugger/trepan/track-mode.el,
-       dbgr/debugger/trepanx/track-mode.el, test/test-track-mode.el: Keymap
-       definition (which was probably improper) is messing up
-       define-minor-mode so leave that out for now. rename keymap variable
-       to a value which I hope is picked up automagically.
-
-2010-11-21  rocky <address@hidden>
-
-       * dbgr/common/buffer/helper.el: This time, for sure?
-
-2010-11-21  rocky <address@hidden>
-
-       * dbgr/common/buffer/helper.el, dbgr/common/track.el: Fix an
-       annoying bug where we weren't tracking changes in the source buffer.
-
-2010-11-04  rocky <address@hidden>
-
-       * dbgr/debugger/rdebug/track-mode.el,
-       dbgr/debugger/trepan/track-mode.el,
-       dbgr/debugger/trepanx/track-mode.el: This time, for sure!
-
-2010-11-04  rocky <address@hidden>
-
-       * dbgr/debugger/rdebug/track-mode.el: Now redundant (and wrong)
-       line.
-
-2010-11-04  rocky <address@hidden>
-
-       * dbgr/debugger/rdebug/track-mode.el,
-       dbgr/debugger/trepanx/track-mode.el: One more place to fold in
-       ruby-specific traceback key bindings.
-
-2010-11-04  rocky <address@hidden>
-
-       * dbgr/common/track.el, dbgr/debugger/rdebug/core.el,
-       dbgr/debugger/trepan/core.el, dbgr/debugger/trepan/track-mode.el,
-       dbgr/debugger/trepanx/core.el, dbgr/debugger/trepanx/track-mode.el,
-       dbgr/lang/ruby.el: Dry some code bound to ruby keys. Should do the
-       same for others...
-
-2010-11-03  rocky <address@hidden>
-
-       * dbgr/common/buffer/command.el, dbgr/common/init/Makefile.am,
-       dbgr/common/send.el, dbgr/common/track.el,
-       dbgr/debugger/.gitignore, dbgr/debugger/Makefile.am,
-       dbgr/debugger/pydbgr/pydbgr.el, dbgr/debugger/rdebug/rdebug.el,
-       dbgr/debugger/trepan/trepan.el, dbgr/debugger/trepanx/trepanx.el,
-       dbgr/debugger/zshdb/zshdb.el, test/Makefile.am, test/test-track.el: 
-       Remove output for internal-status commands like dbgr-backtrace-init.
-       Front-end command names now universally start dbgr-, e.g.
-       dbgr-trepan with most having aliases to shorter name, e.g. trepan.
-       The exception is "gdb" which doesn't have an alias, since "gdb" is a
-       well-established and Emacs command.  Go over Makefile's yet again.
-
-2010-11-03  rocky <address@hidden>
-
-       * dbgr/common/init/gdb.el, dbgr/debugger/gdb/init.el,
-       dbgr/debugger/gdb/track-mode.el, test/test-regexp-gdb.el: 
-       common/init/gdb.el -> debugger/gdb/init.el gdb-pat-hash ->
-       dbgr-gdb-pat-hash
-
-2010-11-02  rocky <address@hidden>
-
-       * configure.ac, dbgr.el, dbgr/Makefile.am, dbgr/common.mk,
-       dbgr/common/Makefile.am, dbgr/common/buffer/Makefile.am,
-       dbgr/debugger/.gitignore, dbgr/debugger/Makefile.am,
-       dbgr/debugger/common.mk, dbgr/debugger/gdb/.gitignore,
-       dbgr/debugger/gdb/Makefile.am, dbgr/debugger/gdb/core.el,
-       dbgr/debugger/gdb/gdb.el, dbgr/debugger/gdb/track-mode.el,
-       dbgr/debugger/pydbgr/.gitignore, dbgr/debugger/pydbgr/Makefile.am,
-       dbgr/debugger/pydbgr/cmds.el, dbgr/debugger/pydbgr/core.el,
-       dbgr/debugger/pydbgr/init.el, dbgr/debugger/pydbgr/pydbgr.el,
-       dbgr/debugger/pydbgr/track-mode.el,
-       dbgr/debugger/rdebug/.gitignore, dbgr/debugger/rdebug/Makefile.am,
-       dbgr/debugger/rdebug/cmds.el, dbgr/debugger/rdebug/core.el,
-       dbgr/debugger/rdebug/init.el, dbgr/debugger/rdebug/rdebug.el,
-       dbgr/debugger/rdebug/track-mode.el,
-       dbgr/debugger/trepan/.gitignore, dbgr/debugger/trepan/Makefile.am,
-       dbgr/debugger/trepan/cmds.el, dbgr/debugger/trepan/core.el,
-       dbgr/debugger/trepan/init.el, dbgr/debugger/trepan/track-mode.el,
-       dbgr/debugger/trepan/trepan.el, dbgr/debugger/trepanx/.gitignore,
-       dbgr/debugger/trepanx/Makefile.am, dbgr/debugger/trepanx/cmds.el,
-       dbgr/debugger/trepanx/core.el, dbgr/debugger/trepanx/init.el,
-       dbgr/debugger/trepanx/track-mode.el,
-       dbgr/debugger/trepanx/trepanx.el, dbgr/debugger/zshdb/.gitignore,
-       dbgr/debugger/zshdb/Makefile.am, dbgr/debugger/zshdb/cmds.el,
-       dbgr/debugger/zshdb/core.el, dbgr/debugger/zshdb/init.el,
-       dbgr/debugger/zshdb/track-mode.el, dbgr/debugger/zshdb/zshdb.el,
-       dbgr/gdb/.gitignore, dbgr/gdb/Makefile.am, dbgr/gdb/core.el,
-       dbgr/gdb/gdb.el, dbgr/gdb/track-mode.el, dbgr/lang/Makefile.am,
-       dbgr/pydbgr/.gitignore, dbgr/pydbgr/Makefile.am,
-       dbgr/pydbgr/cmds.el, dbgr/pydbgr/core.el, dbgr/pydbgr/init.el,
-       dbgr/pydbgr/pydbgr.el, dbgr/pydbgr/track-mode.el,
-       dbgr/rdebug/.gitignore, dbgr/rdebug/Makefile.am,
-       dbgr/rdebug/cmds.el, dbgr/rdebug/core.el, dbgr/rdebug/init.el,
-       dbgr/rdebug/rdebug.el, dbgr/rdebug/track-mode.el,
-       dbgr/trepan/.gitignore, dbgr/trepan/Makefile.am,
-       dbgr/trepan/cmds.el, dbgr/trepan/core.el, dbgr/trepan/init.el,
-       dbgr/trepan/track-mode.el, dbgr/trepan/trepan.el,
-       dbgr/trepanx/.gitignore, dbgr/trepanx/Makefile.am,
-       dbgr/trepanx/cmds.el, dbgr/trepanx/core.el, dbgr/trepanx/init.el,
-       dbgr/trepanx/track-mode.el, dbgr/trepanx/trepanx.el,
-       dbgr/zshdb/.gitignore, dbgr/zshdb/Makefile.am, dbgr/zshdb/cmds.el,
-       dbgr/zshdb/core.el, dbgr/zshdb/init.el, dbgr/zshdb/track-mode.el,
-       dbgr/zshdb/zshdb.el, test/test-bt-pydbgr.el,
-       test/test-bt-rdebug.el, test/test-bt-trepan.el,
-       test/test-bt-trepanx.el, test/test-bt-zshdb.el,
-       test/test-buf-cmd.el, test/test-core.el, test/test-pydbgr.el,
-       test/test-rdebug.el, test/test-regexp-pydbgr.el,
-       test/test-regexp-rdebug.el, test/test-regexp-trepan.el,
-       test/test-regexp-trepanx.el, test/test-regexp.el,
-       test/test-send.el, test/test-srcbuf.el, test/test-track-mode.el,
-       test/test-track.el: move debugger-specific code down to a debugger
-       directory.
-
-2010-11-02  rocky <address@hidden>
-
-       * dbgr/Makefile.am, dbgr/common.mk, dbgr/gdb/Makefile.am,
-       dbgr/lang/Makefile.am, dbgr/pydbgr/Makefile.am,
-       dbgr/rdebug/Makefile.am, dbgr/trepan/Makefile.am,
-       dbgr/trepanx/Makefile.am, dbgr/zshdb/Makefile.am: DRY Makefile.am
-       code.
-
-2010-11-02  rocky <address@hidden>
-
-       * configure.ac, dbgr.el, dbgr/Makefile.am, dbgr/common/Makefile.am,
-       dbgr/common/buffer/Makefile.am, dbgr/common/core.el,
-       dbgr/common/init/rbdbgr.el, dbgr/gdb/Makefile.am,
-       dbgr/lang/Makefile.am, dbgr/lang/ruby.el, dbgr/rbdbgr/.gitignore,
-       dbgr/rbdbgr/Makefile.am, dbgr/rbdbgr/cmds.el, dbgr/rbdbgr/core.el,
-       dbgr/rbdbgr/rbdbgr.el, dbgr/rbdbgr/track-mode.el,
-       dbgr/rdebug/init.el, dbgr/trepan/init.el, test/Makefile.am,
-       test/test-buf-cmd.el, test/test-dbgr.el, test/test-regexp-gdb.el,
-       test/test-regexp-rbdbgr.el, test/test-regexp.el, test/test-send.el,
-       test/test-srcbuf.el: Remove rbdbgr. Nevering-ending struggle to DRY
-       code more.
-
-2010-11-02  rocky <address@hidden>
-
-       * configure.ac, dbgr/Makefile.am, dbgr/common/init/bashdb.el,
-       dbgr/common/init/gdb.el, dbgr/common/init/kshdb.el,
-       dbgr/common/init/pydb.el, dbgr/common/init/rbdbgr.el,
-       dbgr/common/init/remake.el, dbgr/gdb/track-mode.el,
-       dbgr/lang/.gitignore, dbgr/lang/Makefile.am, dbgr/lang/ruby.el,
-       dbgr/pydbgr/core.el, dbgr/pydbgr/init.el,
-       dbgr/pydbgr/track-mode.el, dbgr/rbdbgr/core.el,
-       dbgr/rdebug/core.el, dbgr/rdebug/init.el,
-       dbgr/rdebug/track-mode.el, dbgr/trepan/core.el,
-       dbgr/trepan/init.el, dbgr/trepan/track-mode.el,
-       dbgr/trepanx/core.el, dbgr/trepanx/init.el,
-       dbgr/trepanx/track-mode.el, dbgr/zshdb/core.el, dbgr/zshdb/init.el,
-       dbgr/zshdb/track-mode.el, test/test-regexp-rdebug.el: 
-       traceback->backtrace Start to DRY common language regular
-       expressions.
-
-2010-11-02  rocky <address@hidden>
-
-       * dbgr/common/init/trepanx.el, dbgr/trepanx/cmds.el,
-       dbgr/trepanx/core.el, dbgr/trepanx/init.el,
-       dbgr/trepanx/track-mode.el, dbgr/trepanx/trepanx.el,
-       test/Makefile.am, test/test-bt-trepanx.el,
-       test/test-regexp-trepanx.el: common/init/trepanx.el ->
-       trepanx/init.el Add font-lock-default test.
-
-2010-11-01  rocky <address@hidden>
-
-       * dbgr/zshdb/init.el, test/Makefile.am, test/test-bt-zshdb.el: Start
-       font lock for zshdb.
-
-2010-11-01  rocky <address@hidden>
-
-       * dbgr/pydbgr/init.el, dbgr/rdebug/init.el, dbgr/trepan/init.el,
-       test/Makefile.am, test/test-bt-pydbgr.el: Work on pydbgr
-       font-lock-defaults. Comments regexps better.
-
-2010-11-01  rocky <address@hidden>
-
-       * dbgr/common/init.el, dbgr/pydbgr/init.el, dbgr/rdebug/init.el,
-       dbgr/trepan/init.el, test/test-bt-rdebug.el, test/test-bt-trepan.el: 
-       Better backtrace font-lock defaults. Start working on pydbgr
-       backtrace font-lock.
-
-2010-11-01  rocky <address@hidden>
-
-       * dbgr/trepan/init.el, test/Makefile.am, test/test-bt-trepan.el: 
-       trepan backtrace font-lock-default is more correct.
-
-2010-11-01  rocky <address@hidden>
-
-       * dbgr/trepan/init.el, test/Makefile.am, test/test-bt-rdebug.el,
-       test/test-bt-trepan.el, test/test-buf-bt.el: More regourous rdebug
-       backtrace font-lock-default tests. Start work on trepan backtrace
-       font-lock-default.
-
-2010-11-01  rocky <address@hidden>
-
-       * dbgr/common/buffer/backtrace.el, test/test-buf-bt.el: Add 1st
-       fontify test.
-
-2010-10-31  rocky <address@hidden>
-
-       * dbgr/common/buffer/backtrace.el, dbgr/common/buffer/command.el,
-       dbgr/common/init.el, dbgr/rdebug/init.el, dbgr/trepan/init.el: Add
-       font-lock faces to backtrace buffer. Attempt to do for command, but
-       more work is needed.
-
-2010-10-31  rocky <address@hidden>
-
-       * dbgr/common/buffer/backtrace.el, dbgr/common/init/trepan.el,
-       dbgr/trepan/cmds.el, dbgr/trepan/core.el, dbgr/trepan/init.el,
-       dbgr/trepan/track-mode.el, dbgr/trepan/trepan.el,
-       test/test-regexp-trepan.el, test/test-track.el: 
-       common/init/trepan.el -> trepan/init.el backtrace.el: remove compile
-       warnings by commenting out future code
-
-2010-10-31  rocky <address@hidden>
-
-       * dbgr/common/buffer/backtrace.el, test/Makefile.am,
-       test/test-buf-bt.el, test/test-buf-cmd.el, test/test-cmdbuf.el: Work
-       on backtrace buffer and mode. More to come...
-
-2010-10-31  rocky <address@hidden>
-
-       * dbgr/common/init/rdebug.el, dbgr/rdebug/cmds.el,
-       dbgr/rdebug/core.el, dbgr/rdebug/init.el, dbgr/rdebug/rdebug.el,
-       dbgr/rdebug/track-mode.el, test/test-regexp-rdebug.el: 
-       common/init/rdebug.el -> rdebug/init.el
-
-2010-10-31  rocky <address@hidden>
-
-       * dbgr/common/buffer/backtrace.el, dbgr/common/init/pydbgr.el,
-       dbgr/pydbgr/cmds.el, dbgr/pydbgr/core.el, dbgr/pydbgr/init.el,
-       dbgr/pydbgr/pydbgr.el, dbgr/pydbgr/track-mode.el,
-       dbgr/zshdb/core.el, dbgr/zshdb/init.el, dbgr/zshdb/track-mode.el,
-       test/test-regexp-pydbgr.el: Move init/pydbgr.el to pydbgr/init.el.
-       zshdb/*.el: Correct some mistakes in moving from before.
-       buffer/backtrace.el: Make this loadable without error.
-
-2010-10-31  rocky <address@hidden>
-
-       * dbgr/common/init/zshdb.el, dbgr/zshdb/cmds.el,
-       dbgr/zshdb/core.el, dbgr/zshdb/init.el, dbgr/zshdb/track-mode.el,
-       dbgr/zshdb/zshdb.el: Start to move init/*.el into respective
-       debugger-specific directories.
-
-2010-10-31  rocky <address@hidden>
-
-       * configure.ac, dbgr/common/Makefile.am, dbgr/common/bt-buf.el,
-       dbgr/common/buffer.el, dbgr/common/buffer/.gitignore,
-       dbgr/common/buffer/Makefile.am, dbgr/common/buffer/backtrace.el,
-       dbgr/common/buffer/command.el, dbgr/common/buffer/helper.el,
-       dbgr/common/buffer/source.el, dbgr/common/cmdbuf.el,
-       dbgr/common/cmds.el, dbgr/common/core.el, dbgr/common/reset.el,
-       dbgr/common/send.el, dbgr/common/shortkey.el,
-       dbgr/common/srcbuf.el, dbgr/common/track-mode.el,
-       dbgr/common/track.el, dbgr/common/window.el, test/test-cmdbuf.el,
-       test/test-regexp.el, test/test-srcbuf.el: Move buffer-related files
-       into a separate directory. Will help future growth.
-
-2010-10-31  rocky <address@hidden>
-
-       * dbgr.el, dbgr/zshdb/Makefile.am, dbgr/zshdb/core.el: Administrivia
-       around adding zshdb properly.
-
-2010-10-31  rocky <address@hidden>
-
-       * configure.ac, dbgr/Makefile.am, dbgr/zshdb/.gitignore,
-       dbgr/zshdb/Makefile.am, dbgr/zshdb/cmds.el, dbgr/zshdb/core.el,
-       dbgr/zshdb/track-mode.el, dbgr/zshdb/zshdb.el: Start zshdb debugger
-       support.
-
-2010-10-31  rocky <address@hidden>
-
-       * dbgr.el, dbgr/common/bp.el, dbgr/common/bt-buf.el,
-       dbgr/common/buffer.el, dbgr/common/cmdbuf.el, dbgr/common/cmds.el,
-       dbgr/common/core.el, dbgr/common/custom.el, dbgr/common/file.el,
-       dbgr/common/fringe.el, dbgr/common/helper.el, dbgr/common/init.el,
-       dbgr/common/init/bashdb.el, dbgr/common/init/gdb.el,
-       dbgr/common/init/kshdb.el, dbgr/common/init/pydb.el,
-       dbgr/common/init/pydbgr.el, dbgr/common/init/rbdbgr.el,
-       dbgr/common/init/rdebug.el, dbgr/common/init/remake.el,
-       dbgr/common/init/trepan.el, dbgr/common/init/trepanx.el,
-       dbgr/common/init/zshdb.el, dbgr/common/key.el, dbgr/common/lang.el,
-       dbgr/common/loc.el, dbgr/common/lochist.el, dbgr/common/menu.el,
-       dbgr/common/regexp.el, dbgr/common/reset.el, dbgr/common/send.el,
-       dbgr/common/shortkey.el, dbgr/common/srcbuf.el,
-       dbgr/common/track-mode.el, dbgr/common/window.el, dbgr/gdb/core.el,
-       dbgr/gdb/gdb.el, dbgr/gdb/track-mode.el, dbgr/pydbgr/cmds.el,
-       dbgr/pydbgr/core.el, dbgr/pydbgr/pydbgr.el,
-       dbgr/pydbgr/track-mode.el, dbgr/rdebug/cmds.el,
-       dbgr/rdebug/core.el, dbgr/rdebug/rdebug.el,
-       dbgr/rdebug/track-mode.el, dbgr/trepan/cmds.el,
-       dbgr/trepan/core.el, dbgr/trepan/track-mode.el,
-       dbgr/trepan/trepan.el, dbgr/trepanx/cmds.el, dbgr/trepanx/core.el,
-       dbgr/trepanx/track-mode.el, dbgr/trepanx/trepanx.el: Start to add
-       copyright.
-
-2010-10-31  rocky <address@hidden>
-
-       * dbgr/common/bt-buf.el, dbgr/common/track.el: Fix problem with
-       divert-output sequencing problem which caused old output to be used.
-
-2010-10-30  rocky <address@hidden>
-
-       * dbgr/common/bt-buf.el, dbgr/common/cmdbuf.el,
-       dbgr/common/send.el, dbgr/common/tb-buf.el,
-       dbgr/common/track-mode.el, dbgr/common/track.el,
-       test/test-track-mode.el, test/test-track.el: More progress on
-       diverting output.
-
-2010-10-30  rocky <address@hidden>
-
-       * dbgr.el: Add dbgr-reload-features which is really what we probably
-       want rather than dbgr-unload-features.
-
-2010-10-30  rocky <address@hidden>
-
-       * dbgr/common/track-mode.el, test/test-track-mode.el: Fix
-       dbgr-track-mode-vars macro.
-
-2010-10-30  rocky <address@hidden>
-
-       * dbgr/common/send.el, dbgr/common/tb-buf.el, dbgr/common/track.el: 
-       Work on sending commands for status whose output needs to be
-       diverted and sent to a special buffer, like "backtrace"
-
-2010-10-29  rocky <address@hidden>
-
-       * dbgr/common/track-mode.el, dbgr/common/track.el,
-       test/test-track.el: Start working on commands that divert output. We
-       will use this for auxiliary status buffers for breakponts or
-       backtrace, etc.
-
-2010-10-16  rocky <address@hidden>
-
-       * dbgr/pydbgr/core.el: Small bug in recognizing if pydbgr or cli.py
-       given
-
-2010-10-16  rocky <address@hidden>
-
-       * dbgr/common/core.el, dbgr/common/lang.el, dbgr/gdb/core.el,
-       dbgr/pydbgr/core.el, dbgr/rbdbgr/core.el, dbgr/rdebug/core.el,
-       dbgr/trepan/core.el, dbgr/trepanx/core.el, test/Makefile.am,
-       test/test-core.el, test/test-lang.el, test/test-pydbgr.el,
-       test/test-rdebug.el: DRY via dbgr-suggest-lang-file. Fix up tests
-       related to this region.
-
-2010-10-16  rocky <address@hidden>
-
-       * dbgr/common/lang.el, dbgr/pydbgr/core.el, dbgr/rbdbgr/core.el,
-       dbgr/rdebug/core.el, dbgr/trepan/core.el, dbgr/trepanx/core.el,
-       test/test-core.el, test/test-pydbgr.el, test/test-rdebug.el: Better
-       initial suggestion of language file to debug by searching visited
-       buffers.  DRY some of the code a little. Much much much more is DRYness 
is
-       needed. Start putting in Programming-language-specific code into
-       common/lang.el
-
-2010-10-06  rocky <address@hidden>
-
-       * dbgr/trepan/core.el: Tolerate .exe on ruby interpreter for
-       Microsoft.
-
-2010-10-06  rocky <address@hidden>
-
-       * dbgr/common/cmds.el, dbgr/common/core.el,
-       dbgr/common/shortkey.el, dbgr/pydbgr/cmds.el, dbgr/rdebug/cmds.el,
-       dbgr/trepan/cmds.el, dbgr/trepanx/cmds.el: Work on terminating
-       gracefully.  cmds.el: Add dbgr-terminate (reset debugger
-       information) to dbgr-cmd-quit.  core.el: Create dbgr-terminate to
-       encapsulate what needs to be done on reset.  shortkey.el: use 0 to
-       turn off mode.  debugger/cmds.el: call define-gdb-like-commands
-       explicitly trepan/cmds.el: use quit! instead of quit.
-
-2010-10-05  rocky <address@hidden>
-
-       * dbgr/common/core.el: Suppress and emacs warning.
-
-2010-10-05  rocky <address@hidden>
-
-       * dbgr/pydbgr/core.el, dbgr/rdebug/.gitignore,
-       dbgr/rdebug/elc-stamp: core.el: Allow python.exe as an interpreter
-                name on Microsoft.  Allow cli.py as alternative to pydbgr 
rdebug/*:
-       Adminstrivia
-
-2010-10-01  rocky <address@hidden>
-
-       * dbgr/common/cmdbuf.el, dbgr/common/track.el: short-key-on-tracing?
-       -> dbgr-short-key-on-tracing?
-
-2010-10-01  rocky <address@hidden>
-
-       * dbgr/common/cmdbuf.el, dbgr/common/core.el: Do better with respect
-       to cleaning up on process end: Remove fringe arrows, short-key-mode
-       and breakpoints in source buffers.
-
-2010-09-30  rocky <address@hidden>
-
-       * dbgr/common/shortkey.el, dbgr/common/srcbuf.el,
-       dbgr/common/track.el, dbgr/trepan/track-mode.el: Add customizable
-       variable "short-key-on-tracing?" which will set short-key mode for
-       any source buffer that is traced into.
-
-2010-09-30  rocky <address@hidden>
-
-       * dbgr/common/cmds.el, dbgr/common/key.el,
-       dbgr/common/track-mode.el, dbgr/gdb/core.el, dbgr/gdb/gdb.el,
-       dbgr/gdb/track-mode.el, dbgr/pydbgr/track-mode.el,
-       dbgr/rbdbgr/cmds.el, dbgr/rdebug/track-mode.el,
-       dbgr/trepan/track-mode.el, dbgr/trepanx/track-mode.el: Use expanded
-       file name in 'break' command. See also previous commit message since
-       it appears that many changes didn't get pushed from that.
-
-2010-09-29  rocky <address@hidden>
-
-       * dbgr/pydbgr/cmds.el: DRY track mode code. Add M-kp-up and
-       M-kp-down in standard keys.
-
-2010-09-29  rocky <address@hidden>
-
-       * README.textile: rbdbgr -> trepanning
-
-2010-09-29  rocky <address@hidden>
-
-       * dbgr/common/key.el, dbgr/gdb/track-mode.el, dbgr/pydbgr/core.el,
-       dbgr/pydbgr/track-mode.el, dbgr/rdebug/track-mode.el,
-       dbgr/trepan/track-mode.el, dbgr/trepanx/track-mode.el: Work on
-       getting debugger-specific minor-mode keymaps working. Some of the
-       prior workarounds were remove. Still really need to DRY code. Try
-       C-c SPC for break.
-
-2010-09-29  rocky <address@hidden>
-
-       * dbgr/common/srcbuf.el, dbgr/gdb/track-mode.el,
-       dbgr/pydbgr/track-mode.el, dbgr/rbdbgr/track-mode.el,
-       dbgr/rdebug/track-mode.el, dbgr/trepan/track-mode.el,
-       dbgr/trepanx/track-mode.el: Debugger common keys are now set in
-       source-code windows. Figured out how to use debugger keymaps in
-       command window, and setting debugger-specific command buffer keys.
-       However more work is needed here and we really need to DRY code.
-
-2010-09-29  rocky <address@hidden>
-
-       * dbgr/common/init/pydbgr.el, dbgr/common/key.el,
-       dbgr/pydbgr/core.el, dbgr/pydbgr/track-mode.el,
-       test/test-rdebug.el, test/test-regexp-pydbgr.el: key.el: Add "b" for
-       break in shortkey mode.  test-rdebug.el: fix up faulty cut-n-paste:
-       python -> ruby; pydbgr => rdebug pydbgr.el, test-regexp-pydbgr.el
-       traceback -> backtrace
-
-2010-09-24  rocky <address@hidden>
-
-       * dbgr.el, dbgr/trepan/.gitignore, dbgr/trepanx/rbdbgr.el,
-       dbgr/trepanx/trepanx.el, test/test-regexp-trepan.el,
-       test/test-regexp-trepanx.el: Growing pains related to adding
-       trepan(x).
-
-2010-09-24  rocky <address@hidden>
-
-       * configure.ac, dbgr/Makefile.am, dbgr/common/init/trepan.el,
-       dbgr/common/init/trepanx.el, dbgr/trepan/.gitignore,
-       dbgr/trepan/Makefile.am, dbgr/trepan/cmds.el, dbgr/trepan/core.el,
-       dbgr/trepan/track-mode.el, dbgr/trepan/trepan.el,
-       dbgr/trepanx/.gitignore, dbgr/trepanx/Makefile.am,
-       dbgr/trepanx/cmds.el, dbgr/trepanx/core.el, dbgr/trepanx/rbdbgr.el,
-       dbgr/trepanx/track-mode.el, test/Makefile.am: Add trepan and trepanx
-       debuggers.
-
-2010-09-24  rocky <address@hidden>
-
-       * dbgr/gdb/core.el, dbgr/pydbgr/core.el, dbgr/pydbgr/pydbgr.el,
-       dbgr/rbdbgr/core.el, dbgr/rdebug/core.el: Wasn't picking up variable
-       set by xxx-command-name. See comment in
-       http://stackoverflow.com/questions/3764575/using-pydbgr-with-emacs
-
-2010-09-18  rocky <address@hidden>
-
-       * test/test-regexp-pydbgr.el: Add <module> onto the end - just in
-       case.
-
-2010-09-18  rocky <address@hidden>
-
-       * test/test-regexp-pydbgr.el: Add test for MS prompt locations (with
-       drive letter and backslash) and non-MS prompt location without drive
-       and forward slash.
-
-2010-09-09  rocky <address@hidden>
-
-       * dbgr/Makefile.am, dbgr/common/Makefile.am,
-       dbgr/common/init/Makefile.am, dbgr/common/init/rbdbgr.el,
-       test/test-regexp-rbdbgr.el: init/rbdbgr.el: lfp and dfp are *hex*
-       addresses.  Makefile.am: clean now removes compiled lisp files
-       teste-regexp-rbdbgr.el: previously renamed key from traceback to
-       backtrace -- Ooops
-
-2010-08-27  rocky <address@hidden>
-
-       * dbgr/rdebug/track-mode.el: Found one more C-c! -> C-c!!
-
-2010-08-22  rocky <address@hidden>
-
-       * dbgr/common/key.el: More keys for M-up. My PC keyboard has a
-       messed-up up-arrow. So allow Kp-up as well.
-
-2010-08-20  R. Bernstein <address@hidden>
-
-       * dbgr/common/init/rbdbgr.el, dbgr/rbdbgr/core.el,
-       dbgr/rbdbgr/track-mode.el: traceback -> backtrace which is what I
-       think it's called in Ruby (i.e.  rb_backtrace) and use C-c!b which I
-       think is more mnemonic than C-c!e.
-
-2010-08-20  R. Bernstein <address@hidden>
-
-       * dbgr/rbdbgr/core.el: rbdbgr/core.el Match function name listed in
-       init/rbdbgr.el
-
-2010-08-20  R. Bernstein <address@hidden>
-
-       * dbgr/common/init/rbdbgr.el, dbgr/rbdbgr/core.el,
-       dbgr/rbdbgr/track-mode.el, test/test-regexp-rbdbgr.el: Add command
-       to position on control-frame traceback.
-
-2010-08-17  R. Bernstein <address@hidden>
-
-       * INSTALL, dbgr/common/key.el: Customize more for Emacs.
-
-2010-08-17  rocky <address@hidden>
-
-       * configure.ac: Check for required prerequisite packages.
-
-2010-08-17  rocky <address@hidden>
-
-       * configure.ac: Set default value for EMACS to, well, "emacs".
-
-2010-08-17  rocky <address@hidden>
-
-       * configure.ac: Test to make sure we have emacs 23 or greater.
-
-2010-08-13  R. Bernstein <address@hidden>
-
-       * .gitignore, INSTALL: More specific installation instructions.
-
-2010-08-12  rocky <address@hidden>
-
-       * README.textile: Typo
-
-2010-08-12  rocky <address@hidden>
-
-       * README.textile: Better textile linking.
-
-2010-08-12  rocky <address@hidden>
-
-       * README.textile: Add link to detailed installation instructions.
-       Thanks to Andrea Crotti for the suggestion.
-
-2010-08-09  R. Bernstein <address@hidden>
-
-       * dbgr/common/shortkey.el: M-[insert] toggles dbgr-short-key-mode as
-       well. And when you aren't in short-key mode, it works too --
-       provided the buffer has an associated debugger.
-
-2010-08-05  rocky <address@hidden>
-
-       * dbgr/common/shortkey.el: shortkey.el: Add 'c' for 'continue.
-
-2010-08-05  rocky <address@hidden>
-
-       * dbgr/common/init/pydbgr.el, dbgr/common/init/rbdbgr.el,
-       dbgr/common/shortkey.el, test/test-regexp-pydbgr.el: shortkey.el:
-       Shortkey 'b' to set a breakpoint. (Don't have delete or toggle yet).
-       pydbgr.el Add regexp for breakpoint set and deleted.
-
-2010-08-04  rocky <address@hidden>
-
-       * dbgr/pydbgr/core.el: .rb -> .py
-
-2010-08-03  rocky <address@hidden>
-
-       * dbgr/pydbgr/core.el, test/Makefile.am, test/gcd.py, test/gcd.rb,
-       test/test-pydbgr.el, test/test-rdebug.el: As suggesting a Ruby file
-       in pydbgr. Add test for this now.
-
-2010-08-01  rocky <address@hidden>
-
-       * dbgr/rdebug/rdebug.el: M-x rdebug -> M-x dbgr-rdebug so as not to
-       conflict with the older rdebug code.
-
-2010-06-15  rocky <address@hidden>
-
-       * .gitignore, autogen.sh, test/test-track-mode.el: automess needs a
-       README.
-
-2010-06-11  rocky <address@hidden>
-
-       * : commit cd22e2dafdb0294558e887ac2027e896e0409fc4 Author: rocky
-       <address@hidden> Date:   Fri Jun 11 22:21:48 2010 -0400
-
-2010-06-07  R. Bernstein <address@hidden>
-
-       * dbgr/common/init/rdebug.el: Comment typo
-
-2010-05-23  rocky <address@hidden>
-
-       * dbgr/rdebug/rdebug.el, test/Makefile.am, test/test-rdebug.el: Add
-       routine from rdebug to parse out command line options and get script
-       name.
-
-2010-05-22  rocky <address@hidden>
-
-       * ChangeLog, dbgr/common/init/pydb.el: Add "provide-me" for pydb
-
-2010-05-06  rocky <address@hidden>
-
-       * dbgr/common/init/bashdb.el, dbgr/common/init/kshdb.el,
-       dbgr/common/init/pydbgr.el, dbgr/common/init/rbdbgr.el,
-       test/Makefile.am, test/test-dbgr.el, test/test-regexp-rbdbgr.el: 
-       common/init/rbdbgr.el: prompt pattern has changed Makefile.am:
-       wasn't testing rbdbgr reset: Add more provide's in init files.
-
-2010-03-20  rocky <address@hidden>
-
-       * dbgr/pydbgr/Makefile.am: Forgot one python->pydbgr
-
-2010-03-19  R. Bernstein <address@hidden>
-
-       * dbgr.el, dbgr/gdb/gdb.el, dbgr/pydbgr/pydbgr.el,
-       dbgr/rbdbgr/rbdbgr.el, dbgr/rdebug/rdebug.el: Add "dbgr-" prefix to
-       keep namespace separate from other standalones, e.g. dbg-gdb vs gdb.
-
-2010-03-19  rocky <address@hidden>
-
-       * configure.ac: One more python->pydbgr
-
-2010-03-19  R. Bernstein <address@hidden>
-
-       * dbgr.el, dbgr/Makefile.am, dbgr/gdb/core.el,
-       dbgr/gdb/gdb-core.el, dbgr/gdb/gdb-track-mode.el, dbgr/gdb/gdb.el,
-       dbgr/gdb/track-mode.el, dbgr/pydbgr/.gitignore,
-       dbgr/pydbgr/Makefile.am, dbgr/pydbgr/core.el,
-       dbgr/pydbgr/pydbgr.el, dbgr/pydbgr/track-mode.el,
-       dbgr/python/.gitignore, dbgr/python/Makefile.am,
-       dbgr/python/pydbgr-core.el, dbgr/python/pydbgr-track-mode.el,
-       dbgr/python/pydbgr.el, test/Makefile.am,
-       test/test-regexp-pydbgr.el, test/test-regexp-python.el: directory
-       python -> pydbgr. Debugger-specific file anme simplifications.
-
-2010-03-19  R. Bernstein <address@hidden>
-
-       * configure.ac, dbgr.el, dbgr/Makefile.am, dbgr/bp.el,
-       dbgr/buffer.el, dbgr/cmdbuf.el, dbgr/cmds.el,
-       dbgr/common/.gitignore, dbgr/common/Makefile.am, dbgr/common/bp.el,
-       dbgr/common/buffer.el, dbgr/common/cmdbuf.el, dbgr/common/cmds.el,
-       dbgr/common/core.el, dbgr/common/custom.el, dbgr/common/file.el,
-       dbgr/common/fringe.el, dbgr/common/helper.el, dbgr/common/init.el,
-       dbgr/common/init/.gitignore, dbgr/common/init/Makefile.am,
-       dbgr/common/init/bashdb.el, dbgr/common/init/gdb.el,
-       dbgr/common/init/kshdb.el, dbgr/common/init/pydb.el,
-       dbgr/common/init/pydbgr.el, dbgr/common/init/rbdbgr.el,
-       dbgr/common/init/rdebug.el, dbgr/common/init/remake.el,
-       dbgr/common/init/zshdb.el, dbgr/common/key.el, dbgr/common/loc.el,
-       dbgr/common/lochist.el, dbgr/common/menu.el, dbgr/common/regexp.el,
-       dbgr/common/reset.el, dbgr/common/send.el, dbgr/common/shortkey.el,
-       dbgr/common/srcbuf.el, dbgr/common/track-mode.el,
-       dbgr/common/track.el, dbgr/common/window.el, dbgr/core.el,
-       dbgr/custom.el, dbgr/file.el, dbgr/fringe.el, dbgr/gdb/gdb-core.el,
-       dbgr/gdb/gdb-track-mode.el, dbgr/gdb/gdb.el, dbgr/helper.el,
-       dbgr/init.el, dbgr/init/.gitignore, dbgr/init/Makefile.am,
-       dbgr/init/bashdb.el, dbgr/init/gdb.el, dbgr/init/kshdb.el,
-       dbgr/init/pydb.el, dbgr/init/pydbgr.el, dbgr/init/rbdbgr.el,
-       dbgr/init/rdebug.el, dbgr/init/remake.el, dbgr/init/zshdb.el,
-       dbgr/key.el, dbgr/loc.el, dbgr/lochist.el, dbgr/menu.el,
-       dbgr/python/pydbgr-core.el, dbgr/python/pydbgr-track-mode.el,
-       dbgr/python/pydbgr.el, dbgr/rbdbgr/cmds.el, dbgr/rbdbgr/core.el,
-       dbgr/rbdbgr/rbdbgr.el, dbgr/rbdbgr/track-mode.el,
-       dbgr/rdebug/cmds.el, dbgr/rdebug/core.el, dbgr/rdebug/rdebug.el,
-       dbgr/rdebug/track-mode.el, dbgr/regexp.el, dbgr/reset.el,
-       dbgr/send.el, dbgr/shortkey.el, dbgr/srcbuf.el, dbgr/track-mode.el,
-       dbgr/track.el, dbgr/window.el, test/test-bp.el,
-       test/test-cmdbuf.el, test/test-core.el, test/test-file.el,
-       test/test-helper.el, test/test-loc.el, test/test-lochist.el,
-       test/test-regexp-gdb.el, test/test-regexp-python.el,
-       test/test-regexp-rbdbgr.el, test/test-regexp-rdebug.el,
-       test/test-regexp.el, test/test-send.el, test/test-shortkey.el,
-       test/test-srcbuf.el, test/test-track.el: All common code now pushed
-       to common directory one level don. First part an overall filesystem
-       reorganization.  Later on we will remove init, and rename python to
-       pydbgr, and add pydb.
-
-2010-03-13  rocky <address@hidden>
-
-       * dbgr/key.el, dbgr/lochist.el, dbgr/rdebug/.gitignore,
-       dbgr/rdebug/Makefile: key.el: add key to set breakpoints lochist.el:
-       larger default history ring .gitignore, Makefile: is derived from
-       Makefile.am
-
-2010-03-12  R. Bernstein <address@hidden>
-
-       * dbgr/gdb/gdb-track-mode.el, dbgr/python/pydbgr-track-mode.el,
-       dbgr/rbdbgr/track-mode.el, dbgr/rdebug/track-mode.el,
-       test/Makefile.am, test/test-track-mode.el, test/test-track.el: Base
-       the specific debugger track-mode-maps on the generic track-mode map.
-       Start a track-mode unit test.
-
-2010-03-04  R. Bernstein <address@hidden>
-
-       * configure.ac, dbgr.el, dbgr/Makefile.am, dbgr/init/rdebug.el,
-       dbgr/rbdbgr/.gitignore, dbgr/rbdbgr/Makefile.am,
-       dbgr/rbdbgr/cmds.el, dbgr/rbdbgr/core.el, dbgr/rbdbgr/rbdbgr.el,
-       dbgr/rbdbgr/track-mode.el, dbgr/rdebug/.gitignore,
-       dbgr/rdebug/Makefile, dbgr/rdebug/Makefile.am, dbgr/rdebug/cmds.el,
-       dbgr/rdebug/core.el, dbgr/rdebug/elc-stamp, dbgr/rdebug/rdebug.el,
-       dbgr/rdebug/track-mode.el, dbgr/ruby/.gitignore,
-       dbgr/ruby/Makefile.am, dbgr/ruby/cmds.el, dbgr/ruby/core.el,
-       dbgr/ruby/rbdbgr.el, dbgr/ruby/track-mode.el, test/test-core.el: 
-       Start rdebug. Will probably reorganize directories down the line.
-
-2010-01-31  rocky <address@hidden>
-
-       * dbgr/cmdbuf.el, dbgr/cmds.el, dbgr/key.el, dbgr/menu.el,
-       dbgr/ruby/core.el, dbgr/ruby/rbdbgr.el, dbgr/ruby/track-mode.el,
-       dbgr/track.el, test/test-core.el: Move forward on breakpoints. Add
-       breakpoint list to cmdbuf and menu items for breakpoint track.el Reduce 
use of depreciated fields in cmdbuf ruby/*.el: simplify names.
-
-2010-01-31  rocky <address@hidden>
-
-       * dbgr/ruby/cmds.el, dbgr/ruby/core.el, dbgr/ruby/rbdbgr-core.el,
-       dbgr/ruby/rbdbgr-track-mode.el, dbgr/ruby/track-mode.el: Move
-       forward towards handling breakpoints: Keep a list of breakpoints in
-       cmdbuf, add menu item to set a breakpoint ruby/*: simplify names 
track.el: reduce use of depricated loc-regex,
-       file-group, line-group fields.
-
-2010-01-30  rocky <address@hidden>
-
-       * dbgr/cmdbuf.el, dbgr/init/rbdbgr.el, dbgr/track.el: Start to
-       remove dbgr-cmdbuf-info loc-regexp, file-group and line-group. Add
-       pat for in rbdbgr a deleted breakpoint.
-
-2010-01-27  rocky <address@hidden>
-
-       * dbgr.el: dbr.el: dbgr-loaded-features is a command.
-
-2010-01-27  R. Bernstein <address@hidden>
-
-       * dbgr.el, dbgr/bp.el, test/Makefile.am, test/test-bp.el,
-       test/test-dbgr.el: dbgr.el test-dbgr.el: Add ability to get list of
-       feature loaded with dbgr and unload them.  This makes it possible to
-       reload dbgr without leaving the Emacs.  bp.el: More work needed on
-       testing.
-
-2010-01-27  rocky <address@hidden>
-
-       * dbgr/core.el, dbgr/gdb/gdb.el, dbgr/python/pydbgr.el,
-       dbgr/reset.el, dbgr/ruby/rbdbgr.el: Add reset by default to
-       dbg-exec-shell.
-
-2010-01-26  rocky <address@hidden>
-
-       * dbgr/reset.el: Start a reset routine.
-
-2010-01-26  rocky <address@hidden>
-
-       * dbgr/cmdbuf.el, dbgr/track.el, test/test-cmdbuf.el,
-       test/test-track.el: cmdbuf.el: Save source buffers associated with a
-       given command buffer.  track.el: ditto. dbgr-track-from-region():
-       check that cmdbuf is a cmdbuf.
-
-2010-01-24  rocky <address@hidden>
-
-       * dbgr/core.el, dbgr/gdb/gdb.el: gdb.el: expand script filename.
-       core.el: docstring fix.
-
-2010-01-24  rocky <address@hidden>
-
-       * dbgr.el, dbgr/gdb/.gitignore, dbgr/init/gdb.el, dbgr/loc.el,
-       dbgr/regexp.el: Add fields for address, and character offset.
-
-2010-01-21  R. Bernstein <address@hidden>
-
-       * dbgr/gdb/gdb-track-mode.el, dbgr/track.el: Tolerate missing source
-       file. Need to do better though between file.el:
-       dbgr-file-loc-from-line and dbgr/track.el
-
-2010-01-20  rocky <address@hidden>
-
-       * configure.ac: Administrivia
-
-2010-01-20  rocky <address@hidden>
-
-       * dbgr/Makefile.am, dbgr/gdb/.gitignore, dbgr/gdb/Makefile.am,
-       dbgr/gdb/gdb-core.el, dbgr/gdb/gdb-track-mode.el, dbgr/gdb/gdb.el: 
-       Fill out more gdb interaction via dbgr.
-
-2010-01-18  rocky <address@hidden>
-
-       * dbgr/loc.el, test/test-regexp-gdb.el: loc.el: add place holder for
-       column number test-regexp-gdb.el: start unit test for gdb.
-
-2010-01-18  R. Bernstein <address@hidden>
-
-       * dbgr/init/gdb.el: Start gdb mode.
-
-2010-01-09  rocky <address@hidden>
-
-       * dbgr/bp.el, dbgr/track.el, test/test-track.el: Breakpont fixes.
-       Show only one breakpoint icon in margin. Store breakpoint number as
-       a number, not a string.  Show breakpoint in help string. Add a
-       dbgr-track-bp-loc test.
-
-2010-01-02  rocky <address@hidden>
-
-       * dbgr/init/bashdb.el, dbgr/init/kshdb.el, dbgr/init/zshdb.el: Add
-       breakpoint tracking regexp.
-
-2010-01-01  rocky <address@hidden>
-
-       * dbgr/init/rdebug.el: Add breakpoint regexp for rdebug.
-
-2010-01-01  rocky <address@hidden>
-
-       * test/test-regexp-rbdbgr.el, test/test-regexp-rdebug.el,
-       test/test-regexp-ruby.el: Add breakpoint tracking for rdebug.
-
-2010-01-01  rocky <address@hidden>
-
-       * test/Makefile: Makefile is derived
-
-2010-01-01  rocky <address@hidden>
-
-       * dbgr/track.el: Remove erroneous message.
-
-2010-01-01  rocky <address@hidden>
-
-       * dbgr/bp.el, dbgr/file.el, dbgr/init/rbdbgr.el, dbgr/loc.el,
-       dbgr/regexp.el, dbgr/track.el, test/test-bp.el,
-       test/test-regexp-ruby.el, test/test-track.el: Attempt to move
-       forward in tracking breakpoints setting.
-
-2009-12-28  rocky <address@hidden>
-
-       * dbgr/bp.el, dbgr/brkpt.el: Add breakpoint handling test.
-
-2009-12-28  rocky <address@hidden>
-
-       * dbgr/brkpt.el: More display/remove cleanup.
-
-2009-12-27  rocky <address@hidden>
-
-       * dbgr/brkpt.el: Small improvements (?) towards getting breakpoint
-       icons working.
-
-2009-12-27  rocky <address@hidden>
-
-       * Makefile.am, configure.ac, dbgr/Makefile.am, dbgr/brkpt.el,
-       dbgr/fringe.el, test/.gitignore, test/Makefile, test/Makefile.am: 
-       Start working on breakpoint icons. "make test" works inside dbgr
-       directory.
-
-2009-12-22  rocky <address@hidden>
-
-       * dbgr/cmds.el, dbgr/send.el, dbgr/window.el, test/test-send.el: 
-       Some debugger commands prompt. So we need to make sure we show the
-       command buffer for those.
-
-2009-12-21  rocky <address@hidden>
-
-       * dbgr/cmds.el, dbgr/custom.el, dbgr/key.el, dbgr/menu.el,
-       dbgr/shortkey.el: Get menus under control. Works now in "short-key"
-       mode. Help is provided too!
-
-2009-12-20  rocky <address@hidden>
-
-       * dbgr/buffer.el, dbgr/cmds.el, dbgr/menu.el,
-       dbgr/ruby/rbdbgr-track-mode.el, dbgr/shortkey.el,
-       dbgr/track-mode.el: Start to add menu commands. gdb command "finish"
-       added.
-
-2009-12-18  rocky <address@hidden>
-
-       * autogen.sh: Don't overwrite elisp-comp.
-
-2009-12-16  rocky <address@hidden>
-
-       * dbgr/loc.el: Use loc-changes-goto of new package loc-changes to
-       find line number positions.  loc-changes-goto is more tolerant of
-       buffer modifications.
-
-2009-12-16  rocky <address@hidden>
-
-       * .gitignore, Makefile.am, buffer.el, cmdbuf.el, cmds.el,
-       configure.ac, core.el, custom.el, dbgr.el, dbgr/.gitignore,
-       dbgr/Makefile.am, dbgr/buffer.el, dbgr/cmdbuf.el, dbgr/cmds.el,
-       dbgr/core.el, dbgr/custom.el, dbgr/file.el, dbgr/fringe.el,
-       dbgr/helper.el, dbgr/init.el, dbgr/init/.gitignore,
-       dbgr/init/Makefile.am, dbgr/init/bashdb.el, dbgr/init/kshdb.el,
-       dbgr/init/pydb.el, dbgr/init/pydbgr.el, dbgr/init/rbdbgr.el,
-       dbgr/init/rdebug.el, dbgr/init/remake.el, dbgr/init/zshdb.el,
-       dbgr/key.el, dbgr/loc.el, dbgr/lochist.el, dbgr/python/.gitignore,
-       dbgr/python/Makefile.am, dbgr/python/pydbgr-core.el,
-       dbgr/python/pydbgr-track-mode.el, dbgr/python/pydbgr.el,
-       dbgr/regexp.el, dbgr/ruby/.gitignore, dbgr/ruby/Makefile.am,
-       dbgr/ruby/rbdbgr-core.el, dbgr/ruby/rbdbgr-track-mode.el,
-       dbgr/ruby/rbdbgr.el, dbgr/send.el, dbgr/shortkey.el,
-       dbgr/srcbuf.el, dbgr/track-mode.el, dbgr/track.el, dbgr/window.el,
-       file.el, fringe.el, helper.el, init.el, init/.gitignore,
-       init/Makefile.am, init/bashdb.el, init/kshdb.el, init/pydb.el,
-       init/pydbgr.el, init/rbdbgr.el, init/rdebug.el, init/remake.el,
-       init/zshdb.el, key.el, loc.el, lochist.el, python/.gitignore,
-       python/Makefile.am, python/pydbgr-core.el,
-       python/pydbgr-track-mode.el, python/pydbgr.el, regexp.el,
-       ruby/.gitignore, ruby/Makefile.am, ruby/rbdbgr-core.el,
-       ruby/rbdbgr-track-mode.el, ruby/rbdbgr.el, send.el, shortkey.el,
-       srcbuf.el, test/test-cmdbuf.el, test/test-core.el,
-       test/test-file.el, test/test-helper.el, test/test-loc.el,
-       test/test-lochist.el, test/test-regexp-python.el,
-       test/test-regexp-ruby.el, test/test-regexp.el, test/test-send.el,
-       test/test-shortkey.el, test/test-srcbuf.el, test/test-track.el,
-       track-mode.el, track.el, window.el: dbgr.el - loads everything (via
-       load-relative).  Push dbgr source files into dbgr which is where
-       they are installed. Cleaner this way.
-
-2009-12-14  rocky <address@hidden>
-
-       * test/test-srcbuf.el, test/test-track.el: behave -> test-unit
-
-2009-12-13  rocky <address@hidden>
-
-       * test/behave.el, test/test-cmdbuf.el, test/test-core.el,
-       test/test-file.el, test/test-helper.el, test/test-loc.el,
-       test/test-lochist.el, test/test-regexp-python.el,
-       test/test-regexp-ruby.el, test/test-regexp.el, test/test-send.el,
-       test/test-shortkey.el: Remove local behave.el in favor of new
-       test-unit package.
-
-2009-12-10  rocky <address@hidden>
-
-       * track.el: Give error message when track-from-region on a
-       non-debugger command buffer.
-
-2009-12-10  rocky <address@hidden>
-
-       * core.el, fringe.el, track-mode.el, track.el: 
-       dbgr-fringe-history-unset -> dbgr-fringe-erase-history-arrows. Also
-       let it be used as a command.  Update some docstrings.
-
-2009-12-10  rocky <address@hidden>
-
-       * track.el: Make dbgr-track-from-region more interactive useful:
-       call the location tracking routine adjust the display.
-
-2009-12-09  rocky <address@hidden>
-
-       * AUTHORS, init/rdebug.el, track.el: rdebug.el: make more
-       user-friendly for interactive dbgr-track-from-region calls.
-
-2009-12-08  rocky <address@hidden>
-
-       * fringe.el, python/pydbgr.el, ruby/rbdbgr.el: Small changes.
-
-2009-12-06  rocky <address@hidden>
-
-       * key.el, track-mode.el, track.el: track.el: Fix bug in
-       dbgr-goto-line-for-loc-pat key.el, track-mode.el: temporary
-       workaround for VMware keybinding mess up.
-
-2009-12-06  rocky <address@hidden>
-
-       * init/rbdbgr.el, ruby/rbdbgr-track-mode.el, ruby/rbdbgr.el: Make
-       rbdbgr-track-mode.el stand on its own.
-
-2009-11-29  rocky <address@hidden>
-
-       * cmdbuf.el, cmds.el, core.el, key.el, send.el, srcbuf.el,
-       test/test-send.el, track.el: Start adding flags to command-send to
-       indicate whether to record history, and whether we have a
-       frame-changing command. Do more error checking in command-send for
-       running processes and so on. Add more commands and keys bindings to
-       short-key.  core.el: consider source and command buffer past history 
*only* if
-       it was run with the same debugger as we want to currently run.
-
-2009-11-29  rocky <address@hidden>
-
-       * cmds.el, helper.el, key.el, send.el, test/test-send.el: Make gdb
-       commands more short-key friendly - that is can be called from the
-       source window.  Add newer-frame: "<" and older frame ">".
-
-2009-11-29  rocky <address@hidden>
-
-       * fringe.el, track-mode.el, track.el: Handle some error cases, and
-       fix source tracking created in DRYing code.  fringe.el: handle
-       deleting the buffer we are trying to update the fringe arrow for
-       track-mode.el: handle error case where we invoke dbgr-track-mode in
-       a non-process buffer.  track.el: need to switch to source buffer to
-       query overlay arrow.
-
-2009-11-29  rocky <address@hidden>
-
-       * shortkey.el, track.el, window.el: Keep command buffer position and
-       source location position in sync when moving back in the history of
-       positions. See docstring of dbgr-track-hist-fn-internal for which
-       windows get displayed.  DRY code a little.
-
-2009-11-29  rocky <address@hidden>
-
-       * Makefile.am, cmdbuf.el, core.el, key.el, loc.el, shortkey.el,
-       srcbuf.el, test/behave.el, test/test-file.el,
-       test/test-shortkey.el, track-mode.el, track.el, window.el: Fix up
-       and simplify short-key mode so the setting is saved in the process
-       buffer and propagated to the source buffers encountered.  key.el: add 
's' for step.  test/behave.el: add assert-raises! track-mode.el: use standard 
name -setup instead of -body. Pass an
-       explicit parameter.  window.el: remove older, now-unused code.
-
-2009-11-27  rocky <address@hidden>
-
-       * cmdbuf.el, cmds.el, file.el, loc.el, shortkey.el,
-       test/test-cmdbuf.el, track.el, window.el: Bang on (source) window
-       update and display. Less disruption of windows on update. Add
-       variable in cmdbuf to track shortkey mode.  file.el 
(dbgr-file-line-count): remove bug. save-current isn't what
-       we want. Use find-file-noselect so we don't disrupt current buffer.  
cmdbuf.el, cmds,el: at ? to ends of boolean variables.  loc.el: don't change 
the selected buffer.  test-cmdbuf.el: fix improper call to 
dbgr-cmdbuf-info-cmd-args=
-
-2009-11-26  rocky <address@hidden>
-
-       * cmdbuf.el: Remove spurious warning.
-
-2009-11-26  rocky <address@hidden>
-
-       * Makefile.am, elisp-comp, helper.el, test/test-cmdbuf.el: 
-       elisp-comp: remove temp script. Makefile.am: Wasn't running cmdbuf
-       test.  helper.el: current best guess at a setter method.
-
-2009-11-25  rocky <address@hidden>
-
-       * test/behave.el, test/test-send.el: behave.el: fix incorrect
-       initializion of assert count.  test-send.el: Check docstring is set
-       on dbgr-define-command
-
-2009-11-24  rocky <address@hidden>
-
-       * send.el, test/behave.el, test/test-send.el: send.el: docstring
-       elaboration. test-send.el: Add test of dbgr-define-command. Show
-       number of assertions run.
-
-2009-11-24  rocky <address@hidden>
-
-       * ruby/rbdbgr.el: Need to use require-relative-list with prefix?
-
-2009-11-24  rocky <address@hidden>
-
-       * track.el: Force going to the current source-code line when in the
-       case that buffer is already visible. No doubt there will be more
-       work on this.
-
-2009-11-23  rocky <address@hidden>
-
-       * configure.ac: dbgr-loc.el -> dbgr.el
-
-2009-11-23  R. Bernstein <address@hidden>
-
-       * core.el, python/pydbgr-track-mode.el, python/pydbgr.el,
-       ruby/rbdbgr-track-mode.el, ruby/rbdbgr.el, track-mode.el: Deal with
-       process sentinel as part of turning on dbgr-track-mode so that we
-       catch process hangup dbgr-track-mode (as well as running the
-       debugger from the outset).
-
-2009-11-23  R. Bernstein <address@hidden>
-
-       * buffer.el, cmdbuf.el, core.el, lochist.el, srcbuf.el: docstring
-       name regularization.
-
-2009-11-22  rocky <address@hidden>
-
-       * buffer.el, cmdbuf.el, cmds.el, core.el, custom.el,
-       dbgr-buffer.el, dbgr-cmdbuf.el, dbgr-cmds.el, dbgr-core.el,
-       dbgr-custom.el, dbgr-file.el, dbgr-fringe.el, dbgr-helper.el,
-       dbgr-init.el, dbgr-key.el, dbgr-loc.el, dbgr-lochist.el,
-       dbgr-regexp.el, dbgr-send.el, dbgr-shortkey.el, dbgr-srcbuf.el,
-       dbgr-track-mode.el, dbgr-track.el, dbgr-window.el, file.el,
-       fringe.el, helper.el, init.el, init/bashdb.el, init/kshdb.el,
-       init/pydb.el, init/pydbgr.el, init/rbdbgr.el, init/rdebug.el,
-       init/remake.el, init/zshdb.el, key.el, loc.el, lochist.el,
-       python/pydbgr-core.el, python/pydbgr-track-mode.el,
-       python/pydbgr.el, regexp.el, ruby/rbdbgr-core.el,
-       ruby/rbdbgr-track-mode.el, ruby/rbdbgr.el, send.el, shortkey.el,
-       srcbuf.el, test/test-core.el, test/test-file.el,
-       test/test-helper.el, test/test-loc.el, test/test-lochist.el,
-       test/test-regexp.el, test/test-send.el, test/test-srcbuf.el,
-       test/test-track.el, track-mode.el, track.el, window.el: Remove dbgr-
-       from filenames, although the files still provide with a dbgr- prefix
-       thanks to recent changes to load-relative.
-
-2009-11-22  rocky <address@hidden>
-
-       * dbgr-buffer.el, dbgr-cmdbuf.el, dbgr-cmds.el, dbgr-helper.el,
-       dbgr-key.el, dbgr-send.el, dbgr-shortkey.el, dbgr-track-mode.el,
-       dbgr-track.el, dbgr-window.el: Bang on short-key mode. Add variable
-       in command buffer which tell whether to add a cmmand to the history
-       or and to end up in the command buffer. Bugs in dbgr-define-command
-       fixed. provide-me used more often.
-
-2009-11-20  rocky <address@hidden>
-
-       * dbgr-buffer.el, dbgr-cmdbuf.el, dbgr-core.el, dbgr-custom.el,
-       dbgr-file.el, dbgr-helper.el, dbgr-key.el, dbgr-send.el,
-       dbgr-shortkey.el, dbgr-srcbuf.el, dbgr-track.el: (provide 'xxx) ->
-       (provide-me). This ensures we get it right.  Start to fold in
-       Anders' shortkey mode and keybindings and all that other great
-       stuff.
-
-2009-11-20  rocky <address@hidden>
-
-       * dbgr-send.el: dbgr-send-process: send a debugger command and
-       redirect output to a temporary buffer. The hope is that this is will
-       be a cleaner way to make a request and get an answer - no comint
-       filters are involved.
-
-2009-11-20  R. Bernstein <address@hidden>
-
-       * dbgr-core.el, dbgr-fringe.el, dbgr-track.el: Set fringe arrows for
-       dedicated command buffers.
-
-2009-11-20  R. Bernstein <address@hidden>
-
-       * test/test-lochist.el: Test changes since we no longer remove
-       duplicate locations.
-
-2009-11-20  R. Bernstein <address@hidden>
-
-       * dbgr-cmds.el, dbgr-fringe.el, dbgr-lochist.el,
-       dbgr-track-mode.el, python/pydbgr-track-mode.el,
-       ruby/rbdbgr-track-mode.el: dbgr-fringe.el: remove duplicate test.
-       This needs to be done at a higher level. Empirically get fringe
-       history access correct, until I better understand what's wrong.
-       dbgr-cmds.el: add more gdb commands. Use them in the python and ruby
-       debuggers.
-
-2009-11-20  rocky <address@hidden>
-
-       * dbgr-fringe.el, dbgr-track.el: Don't set older marks if the are at
-       the same position as newer ones.
-
-2009-11-20  rocky <address@hidden>
-
-       * dbgr-cmdbuf.el, dbgr-core.el, dbgr-fringe.el, dbgr-loc.el,
-       dbgr-srcbuf.el, dbgr-track-mode.el, dbgr-track.el,
-       test/test-regexp.el: Add history of locations stopped (last 3) in
-       the fringe. Also some associated simplification and cleanup around
-       this code.
-
-2009-11-19  R. Bernstein <address@hidden>
-
-       * dbgr-arrow.el, dbgr-buffer.el, dbgr-cmdbuf.el, dbgr-core.el,
-       dbgr-fringe.el, dbgr-loc.el, dbgr-track.el: dbgr-arrow ->
-       dbgr-fringe. Simplify a tad more.
-
-2009-11-19  rocky <address@hidden>
-
-       * dbgr-arrow.el, dbgr-core.el, dbgr-loc.el, dbgr-track-mode.el,
-       dbgr-track.el: Improve arrow interface to just the essentials.
-       Remove arrow when leaving dbgr-track-mode.
-
-2009-11-19  rocky <address@hidden>
-
-       * dbgr-arrow.el: Fringe arrow cleanup and simplification in advance
-       of reworking to add a source buffer-local variable of ring of
-       history positions and marking them in the fringe in both the source
-       and command buffers.  list of positions
-
-2009-11-19  rocky <address@hidden>
-
-       * dbgr-arrow.el, ruby/rbdbgr-core.el: rbdbgr-core.el: fix invalid fn
-       name dbgr-arrow.el: start allow location history in fringe.
-
-2009-11-18  rocky <address@hidden>
-
-       * test/test-send.el, test/test-srcbuf.el: Attempt more realistic
-       tests.
-
-2009-11-18  R. Bernstein <address@hidden>
-
-       * dbgr-buffer.el, dbgr-cmdbuf.el, dbgr-init.el, dbgr-srcbuf.el,
-       dbgr-track-mode.el, test/test-send.el: Bugs I probably would have
-       caught if I had done more thorough unit testing.
-
-2009-11-18  R. Bernstein <address@hidden>
-
-       * dbgr-core.el, init/Makefile.am: Small bugfix.
-
-2009-11-18  R. Bernstein <address@hidden>
-
-       * Makefile.am, python/pydbgr-core.el, python/pydbgr-track-mode.el,
-       python/pydbgr.el, ruby/rbdbgr-core.el, ruby/rbdbgr-track-mode.el,
-       ruby/rbdbgr.el: Since elisp-comp has been fixed we can use
-       require-relative-list in subdirectories. Reinstate compiling them.
-       DRY code some.
-
-2009-11-18  rocky <address@hidden>
-
-       * .gitignore, Makefile.am, dbgr-cmdbuf.el, dbgr-core.el,
-       dbgr-init.el, dbgr-track-mode.el, elisp-comp,
-       python/pydbgr-core.el, python/pydbgr-track-mode.el,
-       python/pydbgr.el, ruby/rbdbgr-core.el, ruby/rbdbgr.el,
-       test/test-send.el, test/test-track.el: Correct bugs in and clean up
-       track-mode setting and debugger invocation.  Suggested debugger 
invocation command is now the last invocation
-       unless the buffer has a better idea.  elisp-comp: we now need our own 
since we don't want to compile in a
-       directory.  Makefile.am: no subdirs until I have more time to go
-       over this.
-
-2009-11-17  rocky <address@hidden>
-
-       * Makefile.am, configure.ac, dbgr-cmdbuf.el, dbgr-core.el,
-       dbgr-init.el, dbgr-regexp.el, dbgr-track.el, init/.gitignore,
-       init/Makefile.am, init/bashdb.el, init/kshdb.el, init/pydb.el,
-       init/pydbgr.el, init/rbdbgr.el, init/rdebug.el, init/remake.el,
-       init/zshdb.el, python/pydbgr-core.el, python/pydbgr-regexp.el,
-       python/pydbgr.el, ruby/rbdbgr-core.el, ruby/rbdbgr-regexp.el,
-       ruby/rbdbgr-track-mode.el, ruby/rbdbgr.el, test/test-cmdbuf.el,
-       test/test-regexp-python.el, test/test-regexp-ruby.el,
-       test/test-regexp.el, test/test-send.el: Create a global hash which
-       contains regular expression information for each of the debuggers.
-       Each debugger has a regular expression to match a prompt location
-       and a regular expression for the prompt string that comint uses.
-       However there may be other regular expressions for things like stack
-       traces.  Part of a long-needed refactoring. More to follow. Expect 
breakage.
-
-2009-11-17  R. Bernstein <address@hidden>
-
-       * dbgr-cmdbuf.el, test/test-send.el: I think the bug in
-       load-relative may have been the cause of some of the weirdness found
-       here.
-
-2009-11-17  R. Bernstein <address@hidden>
-
-       * dbgr-cmds.el, dbgr-send.el: Add dbgr-define-command and some
-       common gdb-commands.
-
-2009-11-17  R. Bernstein <address@hidden>
-
-       * dbgr-send.el, test/test-send.el: Don't issue message if we are in
-       a command buffer Fill in test cases more.
-
-2009-11-17  rocky <address@hidden>
-
-       * dbgr-send.el, test/test-send.el: Make dbgr-command interactive.
-
-2009-11-17  rocky <address@hidden>
-
-       * Makefile.am, dbgr-send.el, test/test-send.el: Add
-       dbgr-expand-format-string
-
-2009-11-17  rocky <address@hidden>
-
-       * dbgr-arrow.el: dbgr-set-arrow: add optional indicator pair
-
-2009-11-16  rocky <address@hidden>
-
-       * dbgr-arrow.el: Minor
-
-2009-11-16  rocky <address@hidden>
-
-       * dbgr-core.el, python/pydbgr.el, ruby/rbdbgr.el: Hoist some common
-       code. Missing a require in rbdbgr.el and remove an extra prvide in
-       pydbgr.el
-
-2009-11-16  rocky <address@hidden>
-
-       * dbgr-buffer.el, dbgr-cmdbuf.el, dbgr-core.el, dbgr-helper.el,
-       dbgr-srcbuf.el, dbgr-track-mode.el, test/test-helper.el: Simpilify
-       struct access even more by removing "dbgr-" prefix. I like things to
-       look real simple.
-
-2009-11-16  rocky <address@hidden>
-
-       * dbgr-buffer.el, dbgr-cmdbuf.el, dbgr-core.el, dbgr-srcbuf.el,
-       python/pydbgr-core.el, ruby/rbdbgr-core.el: Push forward with
-       simpler access to struct fields.  pydbgr, rbdbgr: remove compilation
-       bug/warning.
-
-2009-11-16  R. Bernstein <address@hidden>
-
-       * dbgr-cmdbuf.el, dbgr-srcbuf.el, dbgr-track-mode.el,
-       dbgr-track.el, python/pydbgr.el, ruby/rbdbgr.el: dbgr-cmdbuf: minor
-       fixes. SMake more use simplified defstruct access, add dbgr-cmdbuf?
-       rbdbgr: pass in pat-hash to get set correctly.
-
-2009-11-16  rocky <address@hidden>
-
-       * dbgr-cmdbuf.el, dbgr-helper.el, dbgr-track.el, test/behave.el,
-       test/test-cmdbuf.el, test/test-helper.el: dbgr-sget: start to
-       simplify access to defstruct fields. More cmdbuf tests.
-
-2009-11-15  rocky <address@hidden>
-
-       * dbgr-cmdbuf.el, dbgr-send.el, dbgr-track-mode.el, dbgr-track.el,
-       python/pydbgr-core.el, python/pydbgr-regexp.el,
-       python/pydbgr-track-mode.el, python/pydbgr.el,
-       ruby/rbdbgr-regexp.el, ruby/rbdbgr-track-mode.el: dbgr-command-send
-       now echos its output. prompt is set correctly for rbdbgr and pydbgr.
-
-2009-11-15  rocky <address@hidden>
-
-       * Makefile.am, dbgr-buffer.el, dbgr-cmdbuf.el, dbgr-core.el,
-       dbgr-helper.el, dbgr-regexp.el, dbgr-scriptbuf.el, dbgr-send.el,
-       dbgr-srcbuf.el, dbgr-track-mode.el, dbgr-track.el,
-       python/pydbgr-core.el, python/pydbgr-regexp.el, python/pydbgr.el,
-       ruby/rbdbgr-core.el, ruby/rbdbgr-regexp.el, ruby/rbdbgr.el,
-       test/test-scriptbuf.el, test/test-srcbuf.el: Bug fix: minibuffer
-       history was not saving prior of debugger invocations.  scriptbuf ->
-       srcbuf.
-
-2009-11-15  rocky <address@hidden>
-
-       * test/test-helper.el, test/test-regexp-ruby.el,
-       test/test-regexp2.el: Add with-current-buffer-safe to guard against
-       deleted buffers.  Set/save comint-prompt-regexp. Correct debugger
-       prompts which are not the same as location matching patterns.
-       Workaround problem in loading pydbg/rbdbgr not pulling in all files.
-       Include python regexp test.
-
-2009-11-15  rocky <address@hidden>
-
-       * dbgr-buffer.el, dbgr-send.el: Start routines which allow us to
-       send commands to the debugger process: dbgr-send-command. Right now
-       though, It is not inserting into the buffer nor the output filter
-       function to kick in.
-
-2009-11-15  rocky <address@hidden>
-
-       * dbgr-buffer.el, dbgr-core.el, dbgr-file.el, dbgr-loc.el,
-       dbgr-lochist.el, dbgr-track.el, dbgr-window.el: Start to use
-       require-relative-list more. Note: require-relative-list has problems
-       when used in subdirectories python or ruby. But for '.' -like
-       require relative, it is fine.
-
-2009-11-15  rocky <address@hidden>
-
-       * dbgr-buffer.el, dbgr-cmdbuf.el, dbgr-core.el, dbgr-file.el,
-       dbgr-scriptbuf.el, dbgr-track.el, test/test-cmdbuf.el: 
-       dbg-buffer.el: Start buffer access routines Start to reduce
-       declare-functions by getting definitions more directly.
-
-2009-11-14  rocky <address@hidden>
-
-       * Makefile.am, dbgr-cmdbuf.el, dbgr-loc.el, dbgr-scriptbuf.el,
-       test/test-cmdbuf.el, test/test-scriptbuf.el: Start cmdbuf tests. Add
-       predicates to see if a buffer is a debugger script or command.
-
-2009-11-13  R. Bernstein <address@hidden>
-
-       * Makefile.am, configure.ac, python/.gitignore, python/Makefile.am,
-       ruby/Makefile.am: Fix up install so that we go to our own directory
-       and have language-specific directories underneath that.
-
-2009-11-13  R. Bernstein <address@hidden>
-
-       * python/.gitignore, python/Makefile.am, python/pydbgr.el,
-       ruby/.gitignore, ruby/rbdbgr.el: Mostly administrivia.
-
-2009-11-13  rockyb <address@hidden>
-
-       * dbgr-core.el, python/pydbgr-track-mode.el, python/pydbgr.el,
-       ruby/rbdbgr.el: Sentinel should detect deleted buffers.  comint
-       output hooks were not installed in pydbgr and rbdbgr.
-
-2009-11-13  R. Bernstein <address@hidden>
-
-       * Makefile.am, configure.ac, dbgr-track-mode.el, dbgr-track.el,
-       python/pydbgr-core.el, python/pydbgr-regexp.el,
-       python/pydbgr-track-mode.el, python/pydbgr.el, ruby/Makefile.am,
-       ruby/rbdbgr-core.el, ruby/rbdbgr-regexp.el,
-       ruby/rbdbgr-track-mode.el, ruby/rbdbgr.el: Add Makefiles in python
-       and ruby. Remove byte-compile warnings in python and ruby.
-       dbgr-track.el: goto-... -> dbgr-goto
-
-2009-11-13  rocky <address@hidden>
-
-       * dbgr-arrow.el, dbgr-cmdbuf.el, dbgr-file.el, dbgr-helper.el,
-       dbgr-loc.el, dbgr-lochist.el, dbgr-scriptbuf.el,
-       dbgr-track-mode.el, dbgr-track.el, dbgr-window.el,
-       python/pydbgr-core.el, python/pydbgr.el, ruby/rbdbgr-core.el,
-       ruby/rbdbgr.el: Switch to using require-relative instead of
-       load-realative.
-
-2009-11-13  rocky <address@hidden>
-
-       * dbgr-cmdbuf.el, dbgr-core.el, dbgr-file.el, dbgr-loc.el,
-       dbgr-lochist.el, dbgr-scriptbuf.el, dbgr-track-mode.el,
-       dbgr-track.el, dbgr-window.el, python/pydbgr-core.el,
-       python/pydbgr-track-mode.el, python/pydbgr.el, ruby/rbdbgr-core.el,
-       ruby/rbdbgr-regexp.el, ruby/rbdbgr-track-mode.el, ruby/rbdbgr.el: 
-       Used in testing require-relative
-
-2009-11-11  rocky <address@hidden>
-
-       * dbgr-cmdbuf.el, dbgr-core.el, dbgr-helper.el,
-       python/pydbgr-core.el, python/pydbgr.el, ruby/rbdbgr-core.el,
-       ruby/rbdbgr.el, test/test-scriptbuf.el: */*-core.el Common routine
-       to query for command line.  dbgr-cmdf.el: fix bugs in command-line
-       retrieval.
-
-2009-11-11  R. Bernstein <address@hidden>
-
-       * dbgr-cmdbuf.el, dbgr-scriptbuf.el, python/pydbgr-core.el,
-       python/pydbgr.el, ruby/rbdbgr-core.el, ruby/rbdbgr.el: First cut at
-       saving command arguments in script buffer. Much improved but More
-       work needed.
-
-2009-11-11  R. Bernstein <address@hidden>
-
-       * dbgr-cmdbuf.el, dbgr-core.el, dbgr-procbuf.el, dbgr-scriptbuf.el,
-       dbgr-track-mode.el, dbgr-track.el, test/test-regexp.el,
-       test/test-scriptbuf.el, test/test-track.el: procbuf -> cmdbuf
-
-2009-11-11  rocky <address@hidden>
-
-       * dbgr-file.el, dbgr-helper.el, dbgr-procbuf.el, dbgr-scriptbuf.el,
-       dbgr-track.el, dbgr-window.el, test/.gitignore, test/behave.el,
-       test/test-helper.el, test/test-scriptbuf.el: behave.el: was not
-       passing assertion message to assert-t Store debugger name inside
-       script buffers. Command invocation to come...  dbgr-window.el: add
-       provide for my name.  Start helper file. xx-p -> xx? because it is
-       cooler.
-
-2009-11-10  rocky <address@hidden>
-
-       * dbgr-loc.el, ruby/rbdbgr.el: dbgr-loc.el: fix M-up/down motion in
-       command buffer to match mark ruby/rbdbgr.el: remove bogus
-       (shell-mode).
-
-2009-11-10  R. Bernstein <address@hidden>
-
-       * dbgr-file.el, dbgr-loc.el, dbgr-lochist.el, dbgr-procbuf.el,
-       dbgr-track.el, test/test-file.el, test/test-load.el,
-       test/test-loc.el, test/test-lochist.el: Move command process mark
-       into location structure. More work is needed.
-
-2009-11-10  rocky <address@hidden>
-
-       * dbgr-loc.el, dbgr-lochist.el, dbgr-procbuf.el, dbgr-track.el: Keep
-       (historical) process buffer position in sync with historical source
-       buffer position.  Warning: this needs refactorization.
-
-2009-11-10  rocky <address@hidden>
-
-       * dbgr-arrow.el: switch-buffer -> set-buffer so we don't mess up
-       window positions.
-
-2009-11-09  rocky <address@hidden>
-
-       * dbgr-core.el: dbgr-exec-shell Deal with nil directory in command
-       invocation
-
-2009-11-09  R. Bernstein <address@hidden>
-
-       * dbgr-core.el, dbgr-loc.el, dbgr-lochist.el, dbgr-procbuf.el,
-       dbgr-regexp.el, dbgr-scriptbuf.el, dbgr-track.el: Remove
-       byte-compile warnings.
-
-2009-11-09  R. Bernstein <address@hidden>
-
-       * dbgr-track-mode.el, dbgr-track.el: Better load-relative uses and
-       remove a failing require.
-
-2009-11-09  rocky <address@hidden>
-
-       * ruby/rbdbgr-core.el, ruby/rbdbgr-regexp.el,
-       ruby/rbdbgr-track-mode.el, ruby/rbdbgr.el: Use require-relative now.
-
-2009-11-09  rocky <address@hidden>
-
-       * dbgr-core.el, dbgr-file.el, dbgr-procbuf.el, dbgr-track.el: Use
-       load-relative with lists of files when possible.
-
-2009-11-09  rocky <address@hidden>
-
-       * README, dbgr-core.el, dbgr-load.el, dbgr-loc.el,
-       dbgr-track-mode.el, dbgr-track.el, test/behave.el: Start to use
-       load-relative. dbgr-core.el: fix bug in dbgr-term-sentinal
-
-2009-11-08  rocky <address@hidden>
-
-       * dbgr-core.el, dbgr-procbuf.el, dbgr-scriptbuf.el, dbgr-track.el,
-       ruby/rbdbgr-core.el, test/test-scriptbuf.el: Clean up code with sets
-       buffer-local variables in scriptbuf and procbuf. Although this is a
-       big improvement, more work is needed.
-
-2009-11-08  rocky <address@hidden>
-
-       * Makefile.am, dbgr-arrow.el, dbgr-core.el, dbgr-scriptbuf-var.el,
-       dbgr-scriptbuf.el, dbgr-track.el, python/pydbgr-core.el,
-       ruby/rbdbgr-core.el, test/test-scriptbuf.el: Set debugger
-       buffer-local variables for command/process and source buffers.  Set
-       default directory in command buffer. Source buffer now has last
-       command invocation and a pointer to the process buffer.
-
-2009-11-07  rocky <address@hidden>
-
-       * dbgr-arrow.el, dbgr-core.el, dbgr-load.el, dbgr-loc.el,
-       dbgr-procbuf-var.el, dbgr-procbuf.el, dbgr-scriptbuf-var.el,
-       dbgr-track-mode.el, dbgr-track.el, test/test-regexp.el,
-       test/test-track.el: Put overla/arrow/fringe arrow on current
-       location in source window.
-
-2009-11-02  rocky <address@hidden>
-
-       * dbgr-regexp.el, dbgr-track-mode.el, dbgr-track.el: dbgr-regexp.el:
-       regexp bug fixes for rdebug.  dbgr-track-mode.el: docstring typo
-       dbgr-track.el: don't run hooks if dbgr-track-mode is not set.
-
-2009-11-02  R. Bernstein <address@hidden>
-
-       * dbgr-file.el, dbgr-track.el, python/pydbgr-core.el,
-       ruby/rbdbgr-core.el, ruby/rbdbgr-regexp.el: Keep history of pydbgr,
-       rbdbgr invocations and modify minibuffer mode map to do filename
-       completion.  FIXME: need to DRY this code.
-
-2009-11-02  rocky <address@hidden>
-
-       * dbgr-core.el, dbgr-scriptbuf-var.el, python/pydbgr.el,
-       ruby/rbdbgr-core.el, ruby/rbdbgr.el: Save the last invocation as a
-       buffer-local variable in the process buffer.
-
-2009-11-01  rocky <address@hidden>
-
-       * test/behave.el, test/test-regexp-python.el: Add an optional
-       message parmater on assert-... .
-
-2009-11-01  rocky <address@hidden>
-
-       * test/behave.el: Tidy behave.el a little bit more.
-
-2009-11-01  rocky <address@hidden>
-
-       * test/behave.el, test/test-core.el, test/test-file.el,
-       test/test-load.el, test/test-loc.el, test/test-lochist.el,
-       test/test-regexp-python.el, test/test-regexp.el,
-       test/test-regexp2.el, test/test-track.el: behave.el: expect- =>
-       assert- . DRY assert-t.
-
-2009-11-01  rocky <address@hidden>
-
-       * dbgr-core.el, dbgr-track.el, python/pydbgr-core.el,
-       python/pydbgr-regexp.el, python/pydbgr-track-mode.el,
-       python/pydbgr.el, ruby/.gitignore, ruby/rbdbgr-core.el,
-       ruby/rbdbgr-track-mode.el, test/test-regexp-python.el: Add a 2nd
-       debugger. In the process DRY and make common some code.
-
-2009-10-31  rocky <address@hidden>
-
-       * dbgr-core.el, dbgr-loc.el: Don't kill existing processes in
-       processe buffers when rerunning the same command Showing location
-       negotiates the buffers correctly now.
-
-2009-10-31  rocky <address@hidden>
-
-       * dbgr-core.el, dbgr-file.el, dbgr-track-mode.el, dbgr-track.el,
-       dbgr-window.el, ruby/rbdbgr-core.el, ruby/rbdbgr-track-mode.el,
-       ruby/rbdbgr.el: rbdbgr via comint now works.
-
-2009-10-30  R. Bernstein <address@hidden>
-
-       * dbgr-core.el, dbgr-file.el, ruby/rbdbgr.el: More work on term
-       mode.
-
-2009-10-30  rocky <address@hidden>
-
-       * Makefile.am, configure.ac, dbgr-core.el, dbgr-file.el,
-       dbgr-regexp.el, dbgr-track-mode.el, dbgr-track.el, ruby/.gitignore,
-       ruby/Makefile.am, ruby/rbdbgr-core.el, ruby/rbdbgr-regexp.el,
-       ruby/rbdbgr-track-mode.el, ruby/rbdbgr.el, test/behave.el,
-       test/test-core.el, test/test-track.el: For now rbdbgr uses term.el
-       for its process buffer. However term.el doesn't have an output
-       filter function - yet.
-
-2009-10-29  R. Bernstein <address@hidden>
-
-       * dbgr-core.el, ruby/rbdbgr-core.el, test/test-core.el: More
-       detailed command-line parsing. Warning - is in intermediate state.
-
-2009-10-29  R. Bernstein <address@hidden>
-
-       * dbgr-core.el, ruby/rbdbgr-core.el, ruby/rbdbgr.el: Closer to
-       having command rbdbgr working.
-
-2009-10-29  R. Bernstein <address@hidden>
-
-       * dbgr-core.el: Start dbgr-exec-shell and dbgr-term-sential -
-       creation of an eterm shell to run debugger in.
-
-2009-10-29  rocky <address@hidden>
-
-       * dbgr-file.el, dbgr-track-mode.el, dbgr-track.el,
-       ruby/rbdbgr-core.el, test/test-core.el, test/test-file.el,
-       test/test-load.el, test/test-loc.el, test/test-lochist.el,
-       test/test-regexp.el, test/test-regexp2.el, test/test-track.el: Use
-       save-current-buffer. clean up dbgr-track-mode.el and misc small
-       fixes.
-
-2009-10-29  rocky <address@hidden>
-
-       * dbgr-core.el, dbgr-track-mode.el, ruby/rbdbgr-core.el,
-       test/behave.el, test/gcd.rb, test/test-core.el, test/test-file.el,
-       test/test-load.el, test/test-loc.el, test/test-lochist.el,
-       test/test-regexp.el, test/test-regexp2.el: test/behave.el: add
-       expect-equal, expect-t, expect-nil and show actual + expected on
-       error dbgr-core.el: move option parsing here rbdbgr-core.el: fn-name
-       typo; adjust for new dbgr-core test-core.el: add more
-       rbdbgr-file-mode tests
-
-2009-10-28  rocky <address@hidden>
-
-       * dbgr-track-mode.el, dbgr-track.el, ruby/rbdbgr-core.el,
-       ruby/rbdbgr-regexp.el, ruby/rbdbgr-track-mode.el: 
-       dbgr-track-mode.el: simplify mode hook code by using
-       define-minor-mode macro more effectively.  dbgr-track.el: we'll see if 
we can get away with not having dbg-info
-       global.  ruby/*.el: rbdbgr-track-mode now works again
-
-2009-10-28  rocky <rocky@sanchez.(none)>
-
-       * dbgr-track-mode.el, dbgr-track.el, ruby/rbdbgr-track-mode.el: 
-       dbgr-track-mode sets status dynamically based on debugger name.
-
-2009-10-28  rockyb <address@hidden>
-
-       * autogen.sh, configure.ac, dbgr-file.el, dbgr-load.el,
-       dbgr-loc.el, dbgr-scriptbuf-var.el, dbgr-track-mode.el,
-       dbgr-track.el, ruby/rbdbgr-core.el, test/test-core.el: 
-       dbgr-track-mode minimally works.
-
-2009-10-28  rockyb <address@hidden>
-
-       * Start the Grand Unified Debugger Rewrite.
-
diff --git a/packages/realgud/INSTALL.md b/packages/realgud/INSTALL.md
deleted file mode 100644
index 3990d1c..0000000
--- a/packages/realgud/INSTALL.md
+++ /dev/null
@@ -1,15 +0,0 @@
-* Have `test-simple`, `loc-changes`, `cl-lib` and `load-relative` installed.
-* From inside emacs, evaluate:
-```lisp
-  (compile (format "EMACSLOADPATH=:%s:%s:%s:%s ./autogen.sh" 
(file-name-directory (locate-library "test-simple.elc")) (file-name-directory 
(locate-library "load-relative.elc")) (file-name-directory (locate-library 
"loc-changes.elc")) (file-name-directory (locate-library "realgud.elc")) ))
-  ```
-
-After this you should be able to run:
-
-    $ make         # byte compile everything
-    $ make check   # run unit tests
-    $ make install # may need to prefix with sudo
-
-
-Also you can run from the source directory by running `eval-current-buffer`
-when inside to top level `realgud.el` (that's the one that is in this folder).
diff --git a/packages/realgud/Makefile.am b/packages/realgud/Makefile.am
deleted file mode 100644
index f671e72..0000000
--- a/packages/realgud/Makefile.am
+++ /dev/null
@@ -1,17 +0,0 @@
-SUBDIRS = realgud
-
-lisp_files = realgud.el
-lisp_LISP = $(lisp_files)
-include common.mk
-
-#: Run all tests
-test: check
-
-check check-short:
-       $(MAKE) -C test $@
-
-#: Run "make install" non-verbosely
-install-short:
-       $(MAKE) install 2>&1  | $(RUBY) test/make-check-filter.rb
-
-.PHONY: test check check-short rmChangeLog
diff --git a/packages/realgud/NEWS b/packages/realgud/NEWS
deleted file mode 100644
index e69de29..0000000
diff --git a/packages/realgud/README.md b/packages/realgud/README.md
deleted file mode 100644
index dde134c..0000000
--- a/packages/realgud/README.md
+++ /dev/null
@@ -1,110 +0,0 @@
-[![Build Status][travis-image]][travis-url]
-[![MELPA][melpa-image]][melpa]
-[![MELPA Stable][melpa-stable-image]][melpa-stable]
-
-![RealGUD logo](etc/realgud-logo.png)
-
-**A extensible, modular GNU Emacs front-end for interacting with external 
debuggers**, brought to you by **Rocky Bernstein** 
([@rocky](https://github.com/rocky)) and **Clément Pit-Claudel** 
([@cpitclaudel](https://github.com/cpitclaudel)).
-
-![RealGUD screenshot](etc/realgud.png)
-
-# Setup
-
-You can install RealGUD from [MELPA](http://melpa.org/#/getting-started), a 
repository of Emacs packages. If you don't have MELPA set up, add the following 
to your `.emacs` and restart Emacs:
-
-```elisp
-(require 'package)
-(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/";) t)
-(package-initialize)
-```
-
-You can then run the following commands to install RealGUD:
-
-```
-M-x package-refresh-contents RET      (to refresh your package database)
-M-x package-install RET realgud RET   (to install and compile `realgud` and 
its dependencies)
-```
-
-Alternatively, you can install RealGUD using 
[el-get](http://www.emacswiki.org/emacs/el-get) or from source directly. See 
[this article](https://github.com/realgud/realgud/wiki/How-to-Install) in our 
wiki for more info.
-
-# Quick start
-
-Use `M-x load-library RET realgud RET` to load RealGUD.
-
-## Launching the debugger
-
-Open a source file, then use `M-x realgud:<debugger-name>` to start your 
favorite debugger (for example, you can use `M-x realgud:pdb` to launch PDB, a 
Python debugger).  RealGUD opens two windows: the *command window* (showing the 
debugger's REPL), and the *source window*, showing your code (with some 
debuggers, such as `realgud:gdb`, this window does not appear until you type 
`start` in the *command window*).  An solid arrow `▶` indicates the current 
line in the source window.  Grayed  [...]
-
-## Using the debugger
-
-All usual debugger commands work in the command window: for example, you can 
type `n RET` in the command window to step forward one source line. But 
RealGUD's power lies in the source window: in it, most single keys correspond 
to a debugger action. For example, you can press `n` in the source window to 
step forward.
-
-## Source window commands
-
-Here is a quick rundown of the most useful commands. “🐁” indicates mouse 
commands (commands that can be run by clicking on a variable or in the 
margins). Many of the commands are accessible from the tool bar 
(`tool-bar-mode`) and the menu (`menu-bar-mode`).
-
-* **Motion commands**
-
-    | Command                                       | Action                   
                     |
-    | --------------------------------------------- | 
--------------------------------------------- |
-    | <kbd>n</kbd>, <kbd>F10</kbd>                  | Next (aka “step over”, 
“step through”)        |
-    | <kbd>s</kbd>, <kbd>SPC</kbd>, <kbd>F11</kbd>  | Step (aka “step into”)   
                     |
-    | <kbd>f</kbd>, <kbd>S-F11</kbd>                | Finish (aka “step out”, 
“return”)             |
-    | <kbd>c</kbd>, <kbd>F5</kbd>                   | Continue (run to next 
break point)            |
-
-* **Using breakpoints**
-
-    | Command                                       | Action                   
                     |
-    | --------------------------------------------- | 
--------------------------------------------- |
-    | <kbd>b</kbd>, <kbd>F9</kbd>                   | Set breakpoint 🐁         
                     |
-    | <kbd>D</kbd>                                  | Clear breakpoint 🐁 (by 
number)                |
-
-* **Inspecting variables**
-
-    | Command                                       | Action                   
                     |
-    | --------------------------------------------- | 
--------------------------------------------- |
-    | <kbd>mouse-2</kbd> (middle button)            | Inspect variable under 
cursor (in tooltip) 🐁  |
-    | <kbd>e</kbd>                                  | Evaluate expression      
                     |
-
-* **Control commands**
-
-    | Command                                       | Action                   
                     |
-    | --------------------------------------------- | 
--------------------------------------------- |
-    | <kbd>q</kbd>, <kbd>S-F5</kbd>                 | Quit                     
                     |
-    | <kbd>R</kbd>, <kbd>r</kbd>                    | Run (aka “restart”)      
                     |
-    | <kbd>S</kbd>                                  | Go to command window     
                     |
-
-# Supported debuggers
-
-RealGUD supports [many external 
debuggers](https://github.com/realgud/realgud/wiki/Debuggers-Supported).  Help 
us [support even 
more](https://github.com/realgud/realgud/wiki/How-to-add-a-new-debugger)!
-
-# Advanced topics
-
-## Extra commands
-
-“⚙” indicates a work-in-progress (contributions welcome!)
-
-| Command                                      | Action                        
                 |
-| -------------------------------------------- | 
---------------------------------------------- |
-| <kbd>U</kbd>                                 | Until (run to a greater 
source line)           |
-| <kbd>u</kbd>, <kbd>&gt;</kbd>                | Up stack (move to older stack 
frame)           |
-| <kbd>d</kbd>, <kbd>&lt;</kbd>                | Down stack (move to younger 
stack frame)       |
-| <kbd>X</kbd>                                 | Clear breakpoint (by line)    
                 |
-| <kbd>j</kbd>                                 | Jump to current line ⚙        
                 |
-| <kbd>-</kbd>                                 | Disable breakpoint ⚙          
                 |
-| <kbd>+</kbd>                                 | Enable breakpoint ⚙           
                 |
-
-## Tracking an existing debugger process
-
-Use `M-x realgud-track-mode` inside an existing 
[shell](http://www.gnu.org/software/emacs/manual/html_node/emacs/Shell.html), 
or [eshell](https://www.gnu.org/software/emacs/manual/html_mono/eshell.html) 
buffer to track an already-running debugger process.
-
-### RealGUD's wiki
-
-Browse the [wiki](http://wiki.github.com/realgud/realgud/) for more 
information about [setting 
up](http://wiki.github.com/realgud/realgud/how-to-install), [using 
realgud](http://wiki.github.com/realgud/realgud/how-to-use), [exploring 
features](https://github.com/realgud/realgud/wiki/Features), and lots more.
-
-[travis-image]: https://api.travis-ci.org/realgud/realgud.svg?branch=master
-[travis-url]: https://travis-ci.org/realgud/realgud
-[melpa-stable-image]: http://stable.melpa.org/packages/realgud-badge.svg
-[melpa-stable]: http://stable.melpa.org/#/realgud
-[melpa-image]: http://melpa.org/packages/realgud-badge.svg
-[melpa]: http://melpa.org/#/realgud
diff --git a/packages/realgud/THANKS b/packages/realgud/THANKS
deleted file mode 100644
index 3bac612..0000000
--- a/packages/realgud/THANKS
+++ /dev/null
@@ -1,17 +0,0 @@
-Lars Andersen (expez) - Getting this packaged and put on to Melpa. Also the 
new name, realgud, is basically his idea.
-
-Anders Lindgren - The inspiration behind in an earlier incarnation of this 
code, ruby-debug. Ideas like short-key-mode are his.
-
-Nick Roberts - We used some of the code for the fringe icons from gdb-mi.
-
-NYC Emacs Meetup and Nicolas Dudebout - straightening me out on 
set-keymap-parent
-
-Kilian Kilger - gdb fixes
-
-Sean Farley - ipdb support
-
-Clément Pit-Claudel - improvements, bug fixes, and emacs compliance too varied 
to categorize.
-                      See git commits for details
-
-Stefan Monnier <address@hidden> - Elisp and ELPA guidance
-amelio-vazquez-reina - documentation
diff --git a/packages/realgud/autogen.sh b/packages/realgud/autogen.sh
deleted file mode 100755
index fce38da..0000000
--- a/packages/realgud/autogen.sh
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-# An autoconf setup script.
-# From inside emacs, make sure test-simple is installed and then
-# Press C-x C-e at the end of the next line run this script
-# (test-simple-run "EMACSLOADPATH=%s ./autogen.sh"  (mapconcat 'identity 
load-path ":"))
-ln -fs README.md README
-touch common.mk
-autoreconf -vi && \
-autoconf && {
-  echo "Running configure with --enable-maintainer-mode $@"
-  ./configure --enable-maintainer-mode $@
-}
diff --git a/packages/realgud/common.mk.in b/packages/realgud/common.mk.in
deleted file mode 100644
index 6c10f1d..0000000
--- a/packages/realgud/common.mk.in
+++ /dev/null
@@ -1,23 +0,0 @@
-MOSTLYCLEANFILES = *.elc
-
-short:
-       $(MAKE) 2>&1 >/dev/null | ruby $(top_srcdir)/make-check-filter.rb
-
-%.short:
-       $(MAKE) $(@:.short=) 2>&1 >/dev/null
-
-# This is the default rule, but we need to include an EMACLOADPATH
-.el.elc:
-       if test "$(EMACS)" != "no"; then \
-         am__dir=. am__subdir_includes=''; \
-         case $@ in */*) \
-           am__dir=`echo '$@' | sed 's,/[^/]*$$,,'`; \
-           am__subdir_includes="-L $$am__dir -L $(srcdir)/$$am__dir"; \
-         esac; \
-         test -d "$$am__dir" || $(MKDIR_P) "$$am__dir" || exit 1; \
-         EMACSLOADPATH=$(EMACSLOADPATH) $(EMACS) --batch \
-           $(AM_ELCFLAGS) $(ELCFLAGS) \
-           $$am__subdir_includes -L $(builddir) -L $(srcdir) \
-           --eval "(defun byte-compile-dest-file (f) \"$@\")" \
-           --eval "(unless (byte-compile-file \"$<\") (kill-emacs 1))"; \
-       else :; fi
diff --git a/packages/realgud/configure.ac b/packages/realgud/configure.ac
deleted file mode 100644
index 8914c39..0000000
--- a/packages/realgud/configure.ac
+++ /dev/null
@@ -1,87 +0,0 @@
-dnl FIXME: pick up from realgud.el
-AC_INIT(emacs-realgud, 1.4.3,)
-AC_CONFIG_SRCDIR(realgud.el)
-AM_INIT_AUTOMAKE([foreign])
-AM_MAINTAINER_MODE
-
-AC_PATH_PROG([EMACS], [emacs], [emacs])
-AC_ARG_WITH(emacs, AC_HELP_STRING([--with-emacs],
-                  [location of emacs program]), EMACS=$withval)
-
-AC_MSG_NOTICE("Checking emacs version")
-$EMACS -batch -q --no-site-file -eval \
-  '(if (<= emacs-major-version 23)
-       (progn
-         (error "You need GNU Emacs 24 or better.")
-         (kill-emacs 1)
-       )
-   )'
-if test $? -ne 0 ; then
-    AC_MSG_ERROR([Can't continue until above error is corrected.])
-fi
-
-if test "$NO_CHECK_EMACS_PACKAGES" = "" ; then
-AC_MSG_NOTICE("Checking prerequiste packages")
-$EMACS -batch -q --no-site-file -eval \
-  '(dolist (package
-         (quote (cl-lib loc-changes load-relative test-simple)))
-        (require package))
-   )'
-fi
-if test $? -ne 0 ; then
-    AC_MSG_ERROR([Can't continue until above error is corrected.])
-fi
-
-##################################################################
-# See if --with-lispdir was set. If not, set it to a reasonable default
-# based on where bash thinks bashdb is supposed to be installed.
-##################################################################
-
-AM_MISSING_PROG(GIT2CL, git2cl, $missing_dir)
-
-# Check whether --with-lispdir was given.
-if test "${with_lispdir+set}" = set; then :
-else
-  my_lispdir="${datadir}/emacs/site-lisp"
-  if test "${my_lispdir+set}" = set; then :
-    with_lispdir=$my_lispdir
-  fi
-fi
-
-##
-## Find out where to install the debugger emacs lisp files
-##
-AM_PATH_LISPDIR
-lispdir_realgud=$lispdir/realgud
-AC_SUBST([lispdir])
-AC_SUBST([lispdir_realgud])
-
-AM_CONDITIONAL(INSTALL_EMACS_LISP, test "x$lispdir_realgud" != "x")
-
-AC_CONFIG_FILES([Makefile \
-                common.mk \
-                realgud/Makefile \
-                realgud/common/Makefile \
-                realgud/common/buffer/Makefile \
-                realgud/debugger/Makefile \
-                realgud/debugger/bashdb/Makefile \
-                realgud/debugger/gdb/Makefile \
-                realgud/debugger/gub/Makefile \
-                realgud/debugger/ipdb/Makefile \
-                realgud/debugger/jdb/Makefile \
-                realgud/debugger/kshdb/Makefile \
-                realgud/debugger/nodejs/Makefile \
-                realgud/debugger/perldb/Makefile \
-                realgud/debugger/pdb/Makefile \
-                realgud/debugger/rdebug/Makefile \
-                realgud/debugger/remake/Makefile \
-                realgud/debugger/trepan/Makefile \
-                realgud/debugger/trepan2/Makefile \
-                realgud/debugger/trepan3k/Makefile \
-                realgud/debugger/trepan.pl/Makefile \
-                realgud/debugger/trepanjs/Makefile \
-                realgud/debugger/zshdb/Makefile \
-                realgud/lang/Makefile \
-                test/Makefile \
-                ])
-AC_OUTPUT
diff --git a/packages/realgud/cr_exceptions.txt 
b/packages/realgud/cr_exceptions.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/packages/realgud/elisp-comp b/packages/realgud/elisp-comp
deleted file mode 100755
index 8277552..0000000
--- a/packages/realgud/elisp-comp
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/bin/sh
-# Copyright (C) 1995-2012 Free Software Foundation, Inc.
-
-scriptversion=2014-02-09.22; # UTC
-
-# Franc,ois Pinard <address@hidden>, 1995.
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# This file is maintained in Automake, please report
-# bugs to <address@hidden> or send patches to
-# <address@hidden>.
-
-case $1 in
-  '')
-     echo "$0: No files.  Try '$0 --help' for more information." 1>&2
-     exit 1;
-     ;;
-  -h | --h*)
-    cat <<\EOF
-Usage: elisp-comp [--help] [--version] FILES...
-
-This script byte-compiles all '.el' files listed as FILES using GNU
-Emacs, and put the resulting '.elc' files into the current directory,
-so disregarding the original directories used in '.el' arguments.
-
-This script manages in such a way that all Emacs LISP files to
-be compiled are made visible between themselves, in the event
-they require or load-library one another.
-
-Report bugs to <address@hidden>.
-EOF
-    exit $?
-    ;;
-  -v | --v*)
-    echo "elisp-comp $scriptversion"
-    exit $?
-    ;;
-esac
-
-if test -z "$EMACS" || test "$EMACS" = "t"; then
-  # Value of "t" means we are running in a shell under Emacs.
-  # Just assume Emacs is called "emacs".
-  EMACS=emacs
-fi
-
-tempdir=elc.$$
-
-# Cleanup the temporary directory on exit.
-trap 'ret=$?; rm -rf "$tempdir" && exit $ret' 0
-do_exit='(exit $ret); exit $ret'
-trap "ret=129; $do_exit" 1
-trap "ret=130; $do_exit" 2
-trap "ret=141; $do_exit" 13
-trap "ret=143; $do_exit" 15
-
-# mkdir $tempdir
-# cp "$@" $tempdir
-
-(
-  # cd $tempdir
-  echo "(setq load-path (cons nil (cons \"$abs_srcdir\" load-path)))" > script
-  $EMACS -batch -q -l script -f batch-byte-compile-if-not-done *.el || exit $?
-  # mv *.elc ..
-) || exit $?
-
-(exit 0); exit 0
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/packages/realgud/etc/.nosearch b/packages/realgud/etc/.nosearch
deleted file mode 100644
index e69de29..0000000
diff --git a/packages/realgud/etc/realgud-logo-square.png 
b/packages/realgud/etc/realgud-logo-square.png
deleted file mode 100644
index d6a5d40..0000000
Binary files a/packages/realgud/etc/realgud-logo-square.png and /dev/null differ
diff --git a/packages/realgud/etc/realgud-logo.png 
b/packages/realgud/etc/realgud-logo.png
deleted file mode 100644
index c1349ce..0000000
Binary files a/packages/realgud/etc/realgud-logo.png and /dev/null differ
diff --git a/packages/realgud/etc/realgud-logo.svg 
b/packages/realgud/etc/realgud-logo.svg
deleted file mode 100644
index 99ad3fc..0000000
--- a/packages/realgud/etc/realgud-logo.svg
+++ /dev/null
@@ -1,106 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/";
-   xmlns:cc="http://creativecommons.org/ns#";
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
-   xmlns:svg="http://www.w3.org/2000/svg";
-   xmlns="http://www.w3.org/2000/svg";
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
-   xml:space="preserve"
-   id="svg4768"
-   viewBox="0.171 0.201 2880.0002 640"
-   height="60"
-   width="270"
-   version="1.0"
-   inkscape:version="0.91 r"
-   sodipodi:docname="realgud.svg"
-   inkscape:export-filename="/home/clement/desktop/realgud.png"
-   inkscape:export-xdpi="180"
-   inkscape:export-ydpi="180"><sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="1920"
-     inkscape:window-height="1030"
-     id="namedview72"
-     showgrid="false"
-     inkscape:zoom="4"
-     inkscape:cx="115.47042"
-     inkscape:cy="38.714008"
-     inkscape:window-x="0"
-     inkscape:window-y="0"
-     inkscape:window-maximized="1"
-     inkscape:current-layer="svg4768"
-     fit-margin-top="3"
-     fit-margin-left="3"
-     fit-margin-right="3"
-     fit-margin-bottom="3" />
-<!-- Parts of this image extracted from GNU Emacs' icon (the white wave-like 
shape) -->
-<defs
-     id="defs4770" /><rect
-     style="display:none;fill:none"
-     id="rect4772"
-     y="101.52715"
-     x="-665.96661"
-     height="512"
-     width="512" /><g
-     style="display:none"
-     id="g4788"
-     transform="translate(-666.13763,101.32614)"><g
-       style="display:inline"
-       id="g4790" /></g><g
-     style="display:none"
-     id="g4806"
-     transform="translate(-666.13763,101.32614)"><g
-       style="display:inline"
-       id="g4808"><path
-         style="display:none;fill:#050505"
-         id="path4810"
-         d="m 349.098,256.651 c -0.265,-0.254 37.637,27.605 39.421,25.012 
6.362,-9.252 82.046,-93.137 84.784,-116.236 0.242,-2.003 -0.516,-4.096 
-0.516,-4.096 0,0 -1.19,-0.144 -6.325,-4.314 -2.692,-2.192 -5.483,-4.581 
-5.483,-4.581 -16.054,0.998 -57.885,41.559 -111.062,103.568"
-         inkscape:connector-curvature="0" /></g></g><text
-     xml:space="preserve"
-     
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:688.39953613px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu
 
Medium';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="-25.458374"
-     y="569.73444"
-     id="text3492"
-     sodipodi:linespacing="125%"><tspan
-       sodipodi:role="line"
-       id="tspan3494"
-       x="-25.458374"
-       y="569.73444"
-       
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu
 Medium';fill:#000000">R</tspan></text>
-<g
-     id="g3515"
-     transform="matrix(0.89624184,0,0,0.89624184,406.60585,174.82476)"
-     inkscape:export-xdpi="349.85999"
-     inkscape:export-ydpi="349.85999"><path
-       
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:13.33816814;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4235-9"
-       d="m 501.09769,256.201 c 0,136.65118 -109.6574,247.42885 
-244.92663,247.42885 -135.26924,0 -244.92675,-110.77767 -244.92675,-247.42886 
0,-136.6512 109.65751,-247.4288435 244.92675,-247.4288435 135.26923,0 
244.92663,110.7776435 244.92663,247.4288435 z"
-       inkscape:connector-curvature="0" /><path
-       
style="opacity:1;fill:#a40000;fill-opacity:1;stroke:#ffffff;stroke-width:13.33816814;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4235"
-       d="m 489.28614,256.20099 c 0,130.06122 -104.36919,235.49665 
-233.11509,235.49665 -128.7459,0 -233.1152,-105.43543 -233.1152,-235.49665 
0,-130.06122 104.3693,-235.496645 233.1152,-235.496645 128.7459,0 
233.11509,105.435425 233.11509,235.496645 z"
-       inkscape:connector-curvature="0" /><path
-       
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
-       id="path4237"
-       d="m 175.0003,422.31057 c 0,0 19.7385,1.39634 45.1312,-0.84159 
10.2834,-0.9063 49.3267,-4.74128 78.5169,-11.14289 0,0 35.5899,-7.61669 
54.6301,-14.63335 19.9225,-7.34185 30.7636,-13.57304 35.6433,-22.40243 
-0.2128,-1.80907 1.5024,-8.22438 -7.685,-12.07788 -23.4887,-9.85199 
-50.73,-8.06998 -104.6338,-9.21285 -59.7772,-2.05391 -79.6627,-12.05971 
-90.2556,-20.11838 -10.1579,-8.17519 -5.05,-30.79254 38.4742,-50.71499 
21.9244,-10.60898 107.8705,-30.18698 107.8705,-30.18698 -28.9451,-14 [...]
-       inkscape:connector-curvature="0" /></g><text
-     xml:space="preserve"
-     
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:688.3994751px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu
 
Medium';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
-     x="860.70557"
-     y="569.73444"
-     id="text3492-3"
-     sodipodi:linespacing="125%"><tspan
-       sodipodi:role="line"
-       id="tspan3494-6"
-       x="860.70557"
-       y="569.73444"
-       
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu
 Medium';fill:#000000">alGUD</tspan></text>
-</svg>
diff --git a/packages/realgud/etc/realgud.png b/packages/realgud/etc/realgud.png
deleted file mode 100644
index 6e8c4e9..0000000
Binary files a/packages/realgud/etc/realgud.png and /dev/null differ
diff --git a/packages/realgud/etc/screenshot.el 
b/packages/realgud/etc/screenshot.el
deleted file mode 100644
index ef19a46..0000000
--- a/packages/realgud/etc/screenshot.el
+++ /dev/null
@@ -1,100 +0,0 @@
-;;; Prepare a RealGUD screenshot
-
-;; Copyright (C) 2016 Free Software Foundation, Inc
-
-;; Author: Clément Pit--Claudel
-
-;; 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/>.
-;; Run ‘cask exec emacs -Q -L . -l etc/screenshot.el’ from the project's root 
to
-;; build a screenshot.
-
-(defvar my/fringe-width 12)
-
-(defun my/cleanup ()
-  (dolist (buffer (buffer-list))
-    (kill-buffer buffer)))
-
-(defun my/prepare-UI ()
-  "Prepare UI for taking a screenshot."
-  (ido-mode)
-  (tool-bar-mode)
-  (menu-bar-mode -1)
-  (scroll-bar-mode -1)
-  (column-number-mode)
-  (fringe-mode (cons my/fringe-width my/fringe-width))
-  (blink-cursor-mode -1)
-  (setq-default cursor-type 'bar
-                split-width-threshold 80
-                truncate-partial-width-windows t
-                frame-title-format (format "RealGUD:PDB @ 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 90)
-  (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 140 20)
-  (redisplay t))
-
-(defun my/load-RealGUD ()
-  "Load RealGUD."
-  (package-initialize)
-  (load-library "realgud")
-  (setq realgud-bp-fringe-indicator-style
-        '(realgud-bp-filled . realgud-bp-hollow)))
-
-(defvar my/source-buffer nil)
-(defvar my/command-buffer nil)
-
-(defun my/load-example ()
-  "Prepare an example file and start the debugger."
-  (save-window-excursion
-    (find-file "realgud/common/fringe-utils.py")
-    (setq my/source-buffer (current-buffer))
-    (hl-line-mode 1)
-    (realgud:pdb (format "python3 -m pdb %S" buffer-file-name))
-    (sit-for 3) ;; Give PDB some time to start
-    (setq my/command-buffer (current-buffer))
-    (font-lock-add-keywords ;; Hide default directory
-     nil `((,(regexp-quote default-directory) 0 '(face nil display "<demo>/") 
append)) t)
-    (font-lock-mode 1))
-  (switch-to-buffer my/source-buffer)
-  (set-window-buffer (split-window-horizontally) my/command-buffer))
-
-(defun my/prepare-screenshot-1 ()
-  "Prepare for taking a screenshot."
-  (my/prepare-UI)
-  (my/load-RealGUD)
-  (my/load-example)
-  (with-current-buffer my/source-buffer
-    (dolist (line '(4 12 17))
-      (goto-char (point-min))
-      (forward-line (1- line))
-      (realgud:cmd-break nil)
-      (sit-for 1)))
-  (goto-char (point-min))
-  (recenter-top-bottom 0)
-  (realgud:cmd-next)
-  (sit-for 1)
-  (realgud:cmd-continue)
-  (sit-for 1)
-  (hl-line-highlight)
-  (set-window-start (get-buffer-window my/command-buffer) 1)
-  (message nil))
-
-(print default-directory)
-(run-with-idle-timer 0 nil #'my/prepare-screenshot-1)
diff --git a/packages/realgud/install-from-git.sh 
b/packages/realgud/install-from-git.sh
deleted file mode 100755
index 76d5c3c..0000000
--- a/packages/realgud/install-from-git.sh
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/bin/bash
-
-# This installs all realgud and its prerequisites. If you are lucky
-# you can just run this:
-#
-#   bash ./install-from-git.sh
-#
-# However we do provide for some customization...
-#
-# 1. GIT PROTOCOL
-# ===============
-#
-# If your "git clone" can't handle the "http" protocol, you might be
-# able to use the "git" protocol. To do this set the GIT_PROTOCOL
-# variable like this:
-#
-#     GIT_PROTOCOL=git sh ./install-from-git.sh
-#
-# 2. configure options (e.g --prefix)
-# ====================================
-
-# If you want to customize configuration parameters, for example,
-# choose where to install, you can pass configure options to this
-# script. For example:# can pass configure options.
-#
-#     sh ./install-from-git.sh --prefix=/tmp
-#
-# 3. TO "sudo" or not to "sudo"?
-# ==============================
-# If you are running as root on a *Nix-like box, then there's no problem.
-#
-# If you are not running as root, "sudo" might be invoked to install
-# code.  On systems that don't have a "sudo" command but need
-# filesystem permission, then you get by with setting SUDO_CMD to "su root-c"
-# For example:
-#
-#    SUDO_CMD='su root -c' sh ./install-from-git.sh
-#
-# If you have sufficient filesystem permission (which is often the
-# case on Windows or cygwin) then you might not need or want sudo. So
-# here, set SUDO_CMD to a blank:
-#
-#      SUDO_CMD=' ' sh ./install-from-git.sh
-#
-#
-# To finish here is an invocation using all 3 above options:
-#   GIT_PROTOCOL='git' SUDO_CMD=' ' sh ./install-from-git.sh --prefix=/tmp
-
-GIT_PROTOCOL=${GIT_PROTOCOL:-https}
-MAKE=${MAKE:-make}
-
-# Run and echo a command
-run_cmd() {
-    echo "--- Running command: $@"
-    $@
-    rc=$?
-    echo "--- $@ exit status is $?"
-    return $rc
-}
-
-# environment variable SUDO_CMD could be "sudo" or "su root -c" or " "
-# for don't need sudo
-
-if (( $(id -u) != 0)) ; then
-    if [[ -z "$SUDO_CMD" ]] ; then
-       need_sudo='sudo'
-       if which $need_sudo >/dev/null 2>&1 ; then
-           try_cmd=''
-       else
-           need_sudo='su root -c'
-           try_cmd='su'
-       fi
-    else
-       need_sudo="$SUDO_CMD"
-    fi
-else
-    need_sudo=''
-    try_cmd=''
-fi
-
-for program in git make $try_cmd ; do
-    if ! which $program >/dev/null 2>&1 ; then
-       echo 2>&1 "Can't find program $program in $PATH"
-       exit 1
-    fi
-done
-
-cd /tmp
-for pkg in rocky/emacs-{test-simple,load-relative,loc-changes} realgud/realgud 
; do
-    echo '******************************************'
-    echo Trying to install ${pkg}...
-    echo '******************************************'
-    pkg_short=$(basename $pkg)
-    if [[ -d $pkg_short ]]; then
-       run_cmd $need_sudo rm -fr $pkg_short
-    fi
-    run_cmd git clone ${GIT_PROTOCOL}://github.com/${pkg}.git
-    (cd $pkg_short && \
-        run_cmd $SHELL ./autogen.sh && \
-       run_cmd ./configure $@ && \
-       run_cmd ${MAKE} && \
-       run_cmd ${MAKE} check && \
-        run_cmd $need_sudo ${MAKE} install
-    )
-done
diff --git a/packages/realgud/realgud-recursive-autoloads.el 
b/packages/realgud/realgud-recursive-autoloads.el
deleted file mode 100644
index 63539c5..0000000
--- a/packages/realgud/realgud-recursive-autoloads.el
+++ /dev/null
@@ -1,1300 +0,0 @@
-;;; realgud-recursive-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-
-;;;### (autoloads nil "realgud/common/backtrace-mode" 
"realgud/common/backtrace-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/backtrace-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/backtrace-mode" '("realgud-backtrace-mode-map" 
"realgud-backtrace-mode" "realgud:frames-menu")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/backtrack-mode" 
"realgud/common/backtrack-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/backtrack-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/backtrack-mode" '("realgud-backtrack-set-debugger" 
"realgud-backtrack-mode" "realgud-backtrack-mode-map" 
"realgud-backtrack-mode-vars")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/bp" "realgud/common/bp.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/bp.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/bp" '("realgud-bp-")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/bp-image-data" 
"realgud/common/bp-image-data.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/bp-image-data.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/bp-image-data" '("realgud-bp-disabled-" 
"realgud-bp-enabled-tiff-data" "realgud-bp-enabled-svg-data" 
"realgud-bp-enabled-pbm-data" "realgud-bp-xpm-data")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/buffer/backtrace" 
"realgud/common/buffer/backtrace.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/buffer/backtrace.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/buffer/backtrace" '("realgud-backtrace-" "realgud-goto-" 
"realgud:backtrace-" "realgud-track-divert-string" "realgud-backtrace?")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/buffer/command" 
"realgud/common/buffer/command.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/buffer/command.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/buffer/command" '("realgud-cmdbuf-" 
"realgud:cmdbuf-buffers-describe" "realgud:cmdbuf-info-describe" 
"realgud-cmdbuf?")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/buffer/helper" 
"realgud/common/buffer/helper.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/buffer/helper.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/buffer/helper" '("realgud:srcbuf-info-describe" 
"realgud-get-process" "realgud-get-srcbuf-from-cmdbuf" 
"realgud-get-cmdbuf-from-srcbuf" "realgud-get-cmdbuf-from-backtrace")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/buffer/info" 
"realgud/common/buffer/info.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/buffer/info.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/buffer/info" '("realgud:info-mode-hook" "realgud:info-mode" 
"realgud-backtrace-info")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/buffer/source" 
"realgud/common/buffer/source.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/buffer/source.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/buffer/source" '("realgud-srcbuf-" "realgud-srcbuf?")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/cmds" "realgud/common/cmds.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/cmds.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/cmds" '("realgud-safe-mode" "realgud:cmd-quit" 
"realgud:cmd-terminate")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/core" "realgud/common/core.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/core.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/core" '("realgud-" "realgud:")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/custom" "realgud/common/custom.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/custom.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/custom" '("realgud-srcbuf-lock" "realgud-key-prefix")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/eval" "realgud/common/eval.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/eval.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/eval" '("realgud:tooltip-eval" "realgud:eval-process-output")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/file" "realgud/common/file.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/file.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/file" '("realgud-file-remap")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/fringe" "realgud/common/fringe.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/fringe.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/fringe" '("realgud-overlay-" 
"realgud-fringe-erase-history-arrows" "realgud-fringe-history-set" 
"realgud-fringe-set-arrow")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/helper" "realgud/common/helper.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/helper.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/helper" '("realgud-" "with-current-buffer-safe" 
"buffer-killed?" "realgud:debugger-name-transform" "fn-p-to-fn?-alias")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/init" "realgud/common/init.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/init.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/init" '("realgud-line-number-face" 
"realgud-backtrace-number-face" "realgud-file-name-face")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/key" "realgud/common/key.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/key.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/key" '("realgud-populate-src-buffer-map-plain" 
"realgud-populate-common-keys" "realgud-populate-common-fn-keys-function" 
"realgud-populate-common-fn-keys-standard")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/lang" "realgud/common/lang.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/lang.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/lang" '("realgud-suggest-lang-file" "realgud-lang-mode?" 
"realgud:suggest-file-from-buffer")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/loc" "realgud/common/loc.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/loc.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/loc" '("realgud-loc?" "realgud-loc" "realgud:loc-describe")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/lochist" "realgud/common/lochist.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/lochist.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/lochist" '("realgud-loc-hist-" "realgud-loc-hist")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/menu" "realgud/common/menu.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/menu.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/menu" '("realgud-menu-item" "realgud-populate-debugger-menu")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/regexp" "realgud/common/regexp.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/regexp.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/regexp" '("realgud:regexp-captured-num" 
"realgud:variable-basename-hash" "realgud-loc-pat" "realgud-pat-hash" 
"realgud-command-hash")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/reset" "realgud/common/reset.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/reset.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/reset" '("realgud:reset")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/run" "realgud/common/run.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/run.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/run" '("realgud:run-debugger")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/send" "realgud/common/send.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/send.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/send" '("realgud:send-" "realgud-send-" 
"comint-output-filter-orig" "realgud-expand-format" "realgud-command")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/shortkey" "realgud/common/shortkey.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/shortkey.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/shortkey" '("realgud:goto-loc-hist-" "realgud-short-key-" 
"realgud:shortkey-mode-map" "realgud-get-short-key-mode-map" 
"realgud-populate-src-buffer-map")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/track" "realgud/common/track.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/track.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/track" '("realgud-goto-line-for-" "realgud-track-" 
"realgud:goto-" "realgud-short-key-on-tracing?" "realgud:track-set-debugger")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/track-mode" 
"realgud/common/track-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/track-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/track-mode" '("realgud-track-mode" "realgud:tool-bar-map" 
"realgud-track-mode-map" "realgud-track-mode-setup" "realgud-track-mode-vars")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/utils" "realgud/common/utils.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/utils.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/utils" '("realgud:strip" "realgud:flatten")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/common/window" "realgud/common/window.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/common/window.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/common/window" '("realgud:window-bt-undisturb-src" 
"realgud-window-cmd-undisturb-src" "realgud-window-src-undisturb-cmd" 
"realgud-window-src" "realgud-window-update-position")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/bashdb/bashdb" 
"realgud/debugger/bashdb/bashdb.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/bashdb/bashdb.el
-
-(autoload 'realgud:bashdb "realgud/debugger/bashdb/bashdb" "\
-Invoke the bashdb shell debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE specifies how to run bash. You will be prompted
-for a command line is one isn't supplied.
-
-OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `bashdb-parse-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-
-\(fn &optional OPT-CMD-LINE NO-RESET)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/bashdb/bashdb" '("realgud:bashdb-command-name" "bashdb")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/bashdb/core" 
"realgud/debugger/bashdb/core.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/bashdb/core.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/bashdb/core" '("realgud:bashdb-" "bashdb-query-cmdline" 
"bashdb-parse-cmd-args" "bashdb-suggest-invocation" "bashdb-reset")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/bashdb/init" 
"realgud/debugger/bashdb/init.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/bashdb/init.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/bashdb/init" '("realgud:bashdb-pat-hash" 
"realgud:bashdb-command-hash")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/bashdb/track-mode" 
"realgud/debugger/bashdb/track-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/bashdb/track-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/bashdb/track-mode" '("bashdb-track-mode")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/gdb/core" 
"realgud/debugger/gdb/core.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/gdb/core.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/gdb/core" '("realgud:gdb-")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/gdb/gdb" "realgud/debugger/gdb/gdb.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/gdb/gdb.el
-
-(autoload 'realgud:gdb "realgud/debugger/gdb/gdb" "\
-Invoke the gdb debugger and start the Emacs user interface.
-
-OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-
-\(fn &optional OPT-CMD-LINE NO-RESET)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/gdb/gdb" '("realgud:gdb-pid-associate" 
"realgud:gdb-pid-command-buffer" "realgud:gdb-pid" 
"realgud:gdb-find-command-buffer" "realgud:gdb-command-name")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/gdb/init" 
"realgud/debugger/gdb/init.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/gdb/init.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/gdb/init" '("realgud:gdb-frame-num-regexp" 
"realgud:gdb-frame-start-regexp" "realgud:gdb-frame-file-regexp" 
"realgud:gdb-command-hash" "realgud:gdb-pat-hash")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/gdb/track-mode" 
"realgud/debugger/gdb/track-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/gdb/track-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/gdb/track-mode" '("realgud:gdb-track-mode")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/gub/core" 
"realgud/debugger/gub/core.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/gub/core.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/gub/core" '("realgud:gub-" "gub-query-cmdline" 
"gub-parse-cmd-args" "gub-suggest-invocation" "gub-reset")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/gub/gub" "realgud/debugger/gub/gub.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/gub/gub.el
-
-(autoload 'realgud-gub "realgud/debugger/gub/gub" "\
-Invoke the Go SSA debugger, gub and start the Emacs user interface.
-
-String COMMAND-LINE specifies how to run gub.
-
-Normally command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset.
-
-\(fn &optional OPT-COMMAND-LINE NO-RESET)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/gub/gub" '("realgud:gub-command-name" "realgud-gub-fn" 
"gub")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/gub/init" 
"realgud/debugger/gub/init.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/gub/init.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/gub/init" '("realgud:gub-frame-" "realgud:gub-command-hash" 
"realgud:gub-selected-frame-arrow" "realgud:gub-pat-hash")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/gub/track-mode" 
"realgud/debugger/gub/track-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/gub/track-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/gub/track-mode" '("realgud:gub-goto-panic-location" 
"realgud:gub-goto-location" "gub-track-mode")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/ipdb/core" 
"realgud/debugger/ipdb/core.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/ipdb/core.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/ipdb/core" '("realgud:ipdb-" "ipdb-parse-" "ipdb-reset" 
"ipdb-suggest-invocation" "ipdb-query-cmdline")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/ipdb/init" 
"realgud/debugger/ipdb/init.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/ipdb/init.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/ipdb/init" '("realgud:ipdb-pat-hash" 
"realgud:ipdb-command-hash")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/ipdb/ipdb" 
"realgud/debugger/ipdb/ipdb.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/ipdb/ipdb.el
-
-(autoload 'realgud:ipdb "realgud/debugger/ipdb/ipdb" "\
-Invoke the ipdb Python debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE specifies how to run ipdb. You will be prompted
-for a command line is one isn't supplied.
-
-OPT-COMMAND-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `ipdb-parse-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-
-\(fn &optional OPT-CMD-LINE NO-RESET)" t nil)
-
-(autoload 'realgud:ipdb-remote "realgud/debugger/ipdb/ipdb" "\
-Invoke the ipdb Python debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE specifies how to run ipdb. You will be prompted
-for a command line is one isn't supplied.
-
-OPT-COMMAND-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `ipdb-parse-remote-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-
-\(fn &optional OPT-CMD-LINE NO-RESET)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/ipdb/ipdb" '("realgud:ipdb-command-name" "ipdb")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/ipdb/track-mode" 
"realgud/debugger/ipdb/track-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/ipdb/track-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/ipdb/track-mode" '("ipdb-track-mode")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/jdb/backtrack-mode" 
"realgud/debugger/jdb/backtrack-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/jdb/backtrack-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/jdb/backtrack-mode" '("realgud:jdb-goto-control-frame-line" 
"jdb-backtrack-mode")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/jdb/core" 
"realgud/debugger/jdb/core.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/jdb/core.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/jdb/core" '("realgud:jdb-" "jdb-reset" 
"jdb-suggest-invocation")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/jdb/file" 
"realgud/debugger/jdb/file.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/jdb/file.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/jdb/file" '("gud-jdb-")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/jdb/init" 
"realgud/debugger/jdb/init.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/jdb/init.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/jdb/init" '("realgud:jdb-")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/jdb/jdb" "realgud/debugger/jdb/jdb.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/jdb/jdb.el
-
-(autoload 'realgud:jdb "realgud/debugger/jdb/jdb" "\
-Invoke the Java jdb debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `jdb-parse-cmd-args' and path elements found by that
-are expanded using `expand-file-name'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-
-\(fn &optional OPT-CMD-LINE NO-RESET)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/jdb/jdb" '("realgud:jdb-command-name" "jdb")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/jdb/track-mode" 
"realgud/debugger/jdb/track-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/jdb/track-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/jdb/track-mode" '("realgud:jdb-track-mode" 
"realgud:jdb-goto-control-frame-line" "realgud:jdb-goto-syntax-error-line")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/kshdb/core" 
"realgud/debugger/kshdb/core.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/kshdb/core.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/kshdb/core" '("realgud:kshdb-" "kshdb-query-cmdline" 
"kshdb-parse-cmd-args" "kshdb-suggest-invocation" "kshdb-reset")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/kshdb/init" 
"realgud/debugger/kshdb/init.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/kshdb/init.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/kshdb/init" '("realgud:kshdb-pat-hash" 
"realgud:kshdb-command-hash")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/kshdb/kshdb" 
"realgud/debugger/kshdb/kshdb.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/kshdb/kshdb.el
-
-(autoload 'realgud:kshdb "realgud/debugger/kshdb/kshdb" "\
-Invoke the Korn shell debugger, kshdb, and start the Emacs user interface.
-
-String COMMAND-LINE specifies how to run kshdb.
-
-Normally command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset.
-
-\(fn &optional OPT-COMMAND-LINE NO-RESET)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/kshdb/kshdb" '("realgud:kshdb-command-name" "kshdb")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/kshdb/track-mode" 
"realgud/debugger/kshdb/track-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/kshdb/track-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/kshdb/track-mode" '("kshdb-track-mode")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/nodejs/core" 
"realgud/debugger/nodejs/core.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/nodejs/core.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/nodejs/core" '("realgud:nodejs-" "nodejs-query-cmdline" 
"nodejs-parse-cmd-args")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/nodejs/init" 
"realgud/debugger/nodejs/init.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/nodejs/init.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/nodejs/init" '("realgud:nodejs-frame-" 
"realgud:nodejs-pat-hash" "realgud:nodejs-debugger-name" 
"realgud:nodejs-command-hash")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/nodejs/nodejs" 
"realgud/debugger/nodejs/nodejs.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/nodejs/nodejs.el
-
-(autoload 'realgud:nodejs "realgud/debugger/nodejs/nodejs" "\
-Invoke the nodejs shell debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE specifies how to run nodejs.
-
-OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `nodejs-parse-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-
-\(fn &optional OPT-CMD-LINE NO-RESET)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/nodejs/nodejs" '("realgud:nodejs-command-name")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/nodejs/track-mode" 
"realgud/debugger/nodejs/track-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/nodejs/track-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/nodejs/track-mode" '("realgud:nodejs-track-mode-internal" 
"nodejs-track-mode")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/pdb/core" 
"realgud/debugger/pdb/core.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/pdb/core.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/pdb/core" '("realgud:pdb-" "pdb-parse-" "pdb-reset" 
"pdb-suggest-invocation" "pdb-query-cmdline")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/pdb/init" 
"realgud/debugger/pdb/init.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/pdb/init.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/pdb/init" '("realgud:pdb-pat-hash" 
"realgud:pdb-command-hash")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/pdb/pdb" "realgud/debugger/pdb/pdb.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/pdb/pdb.el
-
-(autoload 'realgud:pdb "realgud/debugger/pdb/pdb" "\
-Invoke the pdb Python debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE specifies how to run pdb. You will be prompted
-for a command line is one isn't supplied.
-
-OPT-COMMAND-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `pdb-parse-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-
-\(fn &optional OPT-CMD-LINE NO-RESET)" t nil)
-
-(autoload 'realgud:pdb-remote "realgud/debugger/pdb/pdb" "\
-Invoke the pdb Python debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE specifies how to run pdb. You will be prompted
-for a command line is one isn't supplied.
-
-OPT-COMMAND-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `pdb-parse-remote-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-
-\(fn &optional OPT-CMD-LINE NO-RESET)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/pdb/pdb" '("realgud:pdb-command-name" "pdb")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/pdb/track-mode" 
"realgud/debugger/pdb/track-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/pdb/track-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/pdb/track-mode" '("pdb-track-mode")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/perldb/core" 
"realgud/debugger/perldb/core.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/perldb/core.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/perldb/core" '("realgud:perldb-")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/perldb/init" 
"realgud/debugger/perldb/init.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/perldb/init.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/perldb/init" '("realgud:perldb-loc-regexp" 
"realgud:perldb-loc-noeval-regexp" "realgud:perldb-loc-eval-regexp" 
"realgud:perldb-command-hash" "realgud:perldb-pat-hash")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/perldb/perldb" 
"realgud/debugger/perldb/perldb.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/perldb/perldb.el
-
-(autoload 'realgud:perldb "realgud/debugger/perldb/perldb" "\
-Invoke the Perl debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE specifies how to run nodejs.
-
-OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `perldb-parse-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-
-\(fn &optional OPT-CMD-LINE NO-RESET)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/perldb/perldb" '("realgud:perldb-command-name")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/perldb/track-mode" 
"realgud/debugger/perldb/track-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/perldb/track-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/perldb/track-mode" '("perldb-track-mode")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/rdebug/core" 
"realgud/debugger/rdebug/core.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/rdebug/core.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/rdebug/core" '("realgud:rdebug-" "rdebug-query-cmdline" 
"rdebug-parse-cmd-args" "rdebug-suggest-invocation" "rdebug-reset")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/rdebug/init" 
"realgud/debugger/rdebug/init.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/rdebug/init.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/rdebug/init" '("realgud-rdebug-pat-hash" 
"realgud-rdebug-command-hash" "realgud-rdebug-frame-file-line-regexp" 
"realgud-rdebug-frame-start-regexp" "realgud-rdebug-frame-num-regexp")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/rdebug/rdebug" 
"realgud/debugger/rdebug/rdebug.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/rdebug/rdebug.el
-
-(autoload 'realgud:rdebug "realgud/debugger/rdebug/rdebug" "\
-Invoke the rdebug Ruby debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `trepan8-parse-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-
-\(fn &optional OPT-CMD-LINE NO-RESET)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/rdebug/rdebug" '("realgud:rdebug-command-name" 
"rdebug-get-script-name" "rdebug")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/rdebug/track-mode" 
"realgud/debugger/rdebug/track-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/rdebug/track-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/rdebug/track-mode" '("rdebug-track-mode" 
"rdebug-track-mode-internal")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/remake/core" 
"realgud/debugger/remake/core.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/remake/core.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/remake/core" '("realgud:remake-" "remake-suggest-" 
"remake-query-cmdline" "remake-parse-cmd-args" "remake-reset")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/remake/init" 
"realgud/debugger/remake/init.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/remake/init.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/remake/init" '("realgud:remake-frame-" 
"realgud:remake-command-hash" "realgud:remake-selected-frame-arrow" 
"realgud:remake-pat-hash")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/remake/remake" 
"realgud/debugger/remake/remake.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/remake/remake.el
-
-(autoload 'realgud:remake "realgud/debugger/remake/remake" "\
-See `realgud:remake' for details
-
-\(fn &optional OPT-CMD-LINE NO-RESET)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/remake/remake" '("realgud:remake-run-debugger" 
"realgud:remake-command-name" "remake")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/remake/track-mode" 
"realgud/debugger/remake/track-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/remake/track-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/remake/track-mode" '("remake-track-mode")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepan.pl/backtrack-mode"
-;;;;;;  "realgud/debugger/trepan.pl/backtrack-mode.el" (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepan.pl/backtrack-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepan.pl/backtrack-mode" 
'("realgud:trepanpl-goto-control-frame-line" "trepanpl-backtrack-mode")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepan.pl/core" 
"realgud/debugger/trepan.pl/core.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepan.pl/core.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepan.pl/core" '("realgud:trepanpl-")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepan.pl/init" 
"realgud/debugger/trepan.pl/init.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepan.pl/init.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepan.pl/init" '("realgud:trepanpl-")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepan.pl/track-mode" 
"realgud/debugger/trepan.pl/track-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepan.pl/track-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepan.pl/track-mode" 
'("realgud:trepanpl-goto-syntax-error-line" "realgud:trepanpl-track-mode")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepan.pl/trepanpl" 
"realgud/debugger/trepan.pl/trepanpl.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepan.pl/trepanpl.el
-
-(autoload 'realgud:trepan\.pl "realgud/debugger/trepan.pl/trepanpl" "\
-Invoke the trepan.pl Perl debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE specifies how to run trepan.pl. You will be prompted
-for a command line is one isn't supplied.
-
-OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `realgud:trepanpl-parse-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-
-\(fn &optional OPT-CMD-LINE NO-RESET)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepan.pl/trepanpl" '("realgud:trepanpl-command-name" 
"trepan.pl")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepan/backtrack-mode" 
"realgud/debugger/trepan/backtrack-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepan/backtrack-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepan/backtrack-mode" 
'("realgud:trepan-goto-control-frame-line" "trepan-backtrack-mode")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepan/core" 
"realgud/debugger/trepan/core.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepan/core.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepan/core" '("realgud:trepan-" "trepan-reset" 
"trepan-suggest-invocation")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepan/init" 
"realgud/debugger/trepan/init.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepan/init.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepan/init" '("realgud:trepan-command-hash" 
"realgud:trepan-debugger-name" "realgud:trepan-frame-file-regexp" 
"realgud:trepan-selected-frame-indicator" "realgud:trepan-pat-hash")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepan/track-mode" 
"realgud/debugger/trepan/track-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepan/track-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepan/track-mode" '("trepan-track-mode" 
"realgud:trepan-goto-control-frame-line" 
"realgud:trepan-goto-syntax-error-line")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepan/trepan" 
"realgud/debugger/trepan/trepan.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepan/trepan.el
-
-(autoload 'realgud:trepan "realgud/debugger/trepan/trepan" "\
-Invoke the trepan Ruby debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `trepan-parse-cmd-args' and path elements found by that
-are expanded using `expand-file-name'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-
-\(fn &optional OPT-CMD-LINE NO-RESET)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepan/trepan" '("realgud:trepan-command-name" "trepan")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepan2/core" 
"realgud/debugger/trepan2/core.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepan2/core.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepan2/core" '("realgud:trepan2-" "trepan2-query-cmdline" 
"trepan2-parse-cmd-args" "trepan2-suggest-invocation" "trepan2-reset")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepan2/init" 
"realgud/debugger/trepan2/init.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepan2/init.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepan2/init" '("realgud:trepan2-pat-hash" 
"realgud:trepan2-command-hash")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepan2/track-mode" 
"realgud/debugger/trepan2/track-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepan2/track-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepan2/track-mode" '("trepan2-track-mode")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepan2/trepan2" 
"realgud/debugger/trepan2/trepan2.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepan2/trepan2.el
-
-(autoload 'realgud:trepan2 "realgud/debugger/trepan2/trepan2" "\
-Invoke the trepan2 Python debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `trepan2-parse-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-
-\(fn &optional OPT-CMD-LINE NO-RESET)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepan2/trepan2" '("realgud:trepan2-command-name" "trepan2")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepan3k/core" 
"realgud/debugger/trepan3k/core.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepan3k/core.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepan3k/core" '("realgud:trepan3k-" "trepan3k-query-cmdline" 
"trepan3k-parse-cmd-args" "trepan3k-suggest-invocation" "trepan3k-reset")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepan3k/init" 
"realgud/debugger/trepan3k/init.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepan3k/init.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepan3k/init" '("realgud:trepan3k-pat-hash" 
"realgud:trepan3k-command-hash")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepan3k/track-mode" 
"realgud/debugger/trepan3k/track-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepan3k/track-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepan3k/track-mode" '("trepan3k-track-mode")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepan3k/trepan3k" 
"realgud/debugger/trepan3k/trepan3k.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepan3k/trepan3k.el
-
-(autoload 'realgud:trepan3k "realgud/debugger/trepan3k/trepan3k" "\
-Invoke the trepan3k Python debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `trepan2-parse-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-
-\(fn &optional OPT-CMD-LINE NO-RESET)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepan3k/trepan3k" '("realgud:trepan3k-command-name" 
"trepan3k")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepanjs/backtrack-mode"
-;;;;;;  "realgud/debugger/trepanjs/backtrack-mode.el" (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepanjs/backtrack-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepanjs/backtrack-mode" 
'("realgud:trepanjs-goto-control-frame-line" "trepanjs-backtrack-mode")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepanjs/core" 
"realgud/debugger/trepanjs/core.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepanjs/core.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepanjs/core" '("realgud:trepanjs-")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepanjs/init" 
"realgud/debugger/trepanjs/init.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepanjs/init.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepanjs/init" '("realgud:trepanjs-frame-" 
"realgud:trepanjs-pat-hash" "realgud:trepanjs-file-regexp" 
"realgud:trepanjs-debugger-name" "realgud:trepanjs-command-hash")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepanjs/track-mode" 
"realgud/debugger/trepanjs/track-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepanjs/track-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepanjs/track-mode" 
'("realgud:trepanjs-goto-syntax-error-line" "trepanjs-track-mode")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/trepanjs/trepanjs" 
"realgud/debugger/trepanjs/trepanjs.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/trepanjs/trepanjs.el
-
-(autoload 'realgud:trepanjs "realgud/debugger/trepanjs/trepanjs" "\
-Invoke the trepanjs Ruby debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `trepanjs-parse-cmd-args' and path elements found by that
-are expanded using `expand-file-name'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-
-\(fn &optional OPT-CMD-LINE NO-RESET)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/trepanjs/trepanjs" '("realgud:trepanjs-command-name" 
"trepanjs")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/zshdb/core" 
"realgud/debugger/zshdb/core.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/zshdb/core.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/zshdb/core" '("realgud:zshdb-" "zshdb-query-cmdline" 
"zshdb-parse-cmd-args" "zshdb-suggest-invocation" "zshdb-reset")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/zshdb/init" 
"realgud/debugger/zshdb/init.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/zshdb/init.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/zshdb/init" '("realgud:zshdb-pat-hash" 
"realgud:zshdb-command-hash")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/zshdb/track-mode" 
"realgud/debugger/zshdb/track-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/zshdb/track-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/zshdb/track-mode" '("zshdb-track-mode")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/debugger/zshdb/zshdb" 
"realgud/debugger/zshdb/zshdb.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/debugger/zshdb/zshdb.el
-
-(autoload 'realgud:zshdb "realgud/debugger/zshdb/zshdb" "\
-Invoke the zshdb Z-shell debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE specifies how to run zshdb.
-
-OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `zshdb-parse-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-
-\(fn &optional OPT-CMD-LINE NO-RESET)" t nil)
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/debugger/zshdb/zshdb" '("realgud:zshdb-command-name" "zshdb")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/lang/js" "realgud/lang/js.el" (0 0
-;;;;;;  0 0))
-;;; Generated autoloads from realgud/lang/js.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/lang/js" '("realgud:js-backtrace-loc-pat" "realgud:js-term-escape")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/lang/perl" "realgud/lang/perl.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/lang/perl.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/lang/perl" '("realgud:perl-goto-errmsg-line" 
"realgud-perl-populate-command-keys" "realgud-perl-ignore-file-re" 
"realgud-perl-errmsg-loc-pat" "realgud-perl-carp-loc-pat")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/lang/posix-shell" "realgud/lang/posix-shell.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/lang/posix-shell.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/lang/posix-shell" '("realgud-shell-frame-" "realgud:POSIX-debugger-" 
"realgud-shell-backtrace-loc-pat" "realgud-posix-shell-populate-command-keys")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/lang/python" "realgud/lang/python.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/lang/python.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/lang/python" '("realgud:python-trepan-" "realgud-python-" 
"realgud:python-debugger-font-lock-keywords" "realgud-pytest-error-loc-pat" 
"realgud:pytest-goto-errmsg-line")))
-
-;;;***
-
-;;;### (autoloads nil "realgud/lang/ruby" "realgud/lang/ruby.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from realgud/lang/ruby.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"realgud/lang/ruby" '("realgud:" "realgud-ruby-" "realgud-rubinius-" 
"realgud-rspec-backtrace-loc-pat" "realgud-rails-backtrace-loc-pat")))
-
-;;;***
-
-;;;### (autoloads nil "test/test-common-helper" "test/test-common-helper.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from test/test-common-helper.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"test/test-common-helper" '("realgud-test-info")))
-
-;;;***
-
-;;;### (autoloads nil "test/test-gdb" "test/test-gdb.el" (0 0 0 0))
-;;; Generated autoloads from test/test-gdb.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"test/test-gdb" '("realgud:gdb-executable")))
-
-;;;***
-
-;;;### (autoloads nil "test/test-remake" "test/test-remake.el" (0
-;;;;;;  0 0 0))
-;;; Generated autoloads from test/test-remake.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"test/test-remake" '("realgud-exec-shell")))
-
-;;;***
-
-;;;### (autoloads nil "test/test-send" "test/test-send.el" (0 0 0
-;;;;;;  0))
-;;; Generated autoloads from test/test-send.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"test/test-send" '("setup")))
-
-;;;***
-
-;;;### (autoloads nil "test/test-srcbuf" "test/test-srcbuf.el" (0
-;;;;;;  0 0 0))
-;;; Generated autoloads from test/test-srcbuf.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"test/test-srcbuf" '("temp-cmdbuf" "setup")))
-
-;;;***
-
-;;;### (autoloads nil "test/test-track-mode" "test/test-track-mode.el"
-;;;;;;  (0 0 0 0))
-;;; Generated autoloads from test/test-track-mode.el
-
-(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"test/test-track-mode" '("temp-cmdbuf" "setup")))
-
-;;;***
-
-;;;### (autoloads nil nil ("realgud/common/attach.el" 
"realgud/common/follow.el"
-;;;;;;  "test/bt-helper.el" "test/regexp-helper.el" "test/test-bashdb.el"
-;;;;;;  "test/test-bp.el" "test/test-bt-pdb.el" "test/test-bt-rdebug.el"
-;;;;;;  "test/test-bt-trepan.el" "test/test-bt-trepan2.el" 
"test/test-bt-trepan3k.el"
-;;;;;;  "test/test-bt-zshdb.el" "test/test-buf-bt.el" "test/test-buf-cmd.el"
-;;;;;;  "test/test-core.el" "test/test-file.el" "test/test-gdb-core.el"
-;;;;;;  "test/test-gub-core.el" "test/test-ipdb.el" "test/test-jdb.el"
-;;;;;;  "test/test-lang.el" "test/test-loc-regexp-gub.el" 
"test/test-loc-regexp-nodejs.el"
-;;;;;;  "test/test-loc-regexp-trepan.el" "test/test-loc-regexp-trepanpl.el"
-;;;;;;  "test/test-loc.el" "test/test-lochist.el" "test/test-nodejs.el"
-;;;;;;  "test/test-pdb.el" "test/test-perldb.el" "test/test-rdebug.el"
-;;;;;;  "test/test-realgud.el" "test/test-regexp-bashdb.el" 
"test/test-regexp-gdb.el"
-;;;;;;  "test/test-regexp-gub.el" "test/test-regexp-ipdb.el" 
"test/test-regexp-jdb.el"
-;;;;;;  "test/test-regexp-nodejs.el" "test/test-regexp-pdb.el" 
"test/test-regexp-perldb.el"
-;;;;;;  "test/test-regexp-rdebug.el" "test/test-regexp-remake.el"
-;;;;;;  "test/test-regexp-ruby.el" "test/test-regexp-trepan.el" 
"test/test-regexp-trepan2.el"
-;;;;;;  "test/test-regexp-trepan3k.el" "test/test-regexp-trepanjs.el"
-;;;;;;  "test/test-regexp-trepanpl.el" "test/test-regexp-zshdb.el"
-;;;;;;  "test/test-regexp.el" "test/test-remake-core.el" 
"test/test-shortkey.el"
-;;;;;;  "test/test-track.el" "test/test-trepan2.el" "test/test-trepan3k.el"
-;;;;;;  "test/test-trepanpl.el" "test/test-utils.el" "test/test-zshdb.el")
-;;;;;;  (0 0 0 0))
-
-;;;***
-
-(provide 'realgud-recursive-autoloads)
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; realgud-recursive-autoloads.el ends here
diff --git a/packages/realgud/realgud.el b/packages/realgud/realgud.el
deleted file mode 100644
index d15b324..0000000
--- a/packages/realgud/realgud.el
+++ /dev/null
@@ -1,199 +0,0 @@
-;;; realgud.el --- A modular front-end for interacting with external debuggers
-
-;; Author: Rocky Bernstein <address@hidden>
-;; Version: 1.4.5
-;; Package-Type: multi
-;; Package-Requires: ((load-relative "1.2") (loc-changes "1.2") (test-simple  
"1.2.0") (cl-lib "0.5") (emacs "24"))
-;; URL: http://github.com/realgud/realgud/
-;; Keywords: gdb, python, perl, go, bash, nodejs, zsh, bashdb, zshdb, remake, 
make, trepan, perldb, pdb
-
-;; Copyright (C) 2015-2018 Free Software Foundation, Inc
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; A modular, extensible GNU Emacs front-end for interacting with
-;; external debuggers.
-;;
-;; Quick start: https://github.com/realgud/realgud/
-;;
-;; See URL `https://github.com/realgud/realgud/wiki/Features' for features, and
-;; URL `https://github.com/realgud/realgud/wiki/Debuggers-Supported' for
-;; debuggers we can handle.
-;;
-;; Once upon a time in an Emacs far far away and a programming-style
-;; deservedly banished, there was a monolithic Cathederal-like
-;; debugger front-end called gud.  This interfaced with a number of
-;; debuggers, many now dead.[1]  Is there anyone still alive that
-;; remembers sdb from UNIX/32V circa 1980?
-;;
-;; This isn't that.  Here we make use of more modern programming
-;; practices, more numerous and smaller files, unit tests, and better
-;; use of Emacs primitives, e.g. buffer marks, buffer-local variables,
-;; structures, rings, hash tables.  Although there is still much to be
-;; desired, this code is more scalable and suitable as a common base for
-;; an Emacs front-end to modern debuggers.
-;;
-;; Oh, and because global variables are largely banned, we can support
-;; several simultaneous debug sessions.
-
-;; RealGUD supports many external debuggers. See URL
-;; `https://github.com/realgud/realgud/wiki/Debuggers-Supported' for a
-;; list.  However, if you don't see your favorite debugger, see URL
-;; `https://github.com/realgud/realgud/wiki/How-to-add-a-new-debugger/'
-;; for how you can add your own.
-
-;; The debugger is run out of a comint process buffer, or you can use
-;; a `realgud-track-mode' inside an existing comint shell, or eshell
-;; buffer.
-
-;; To install you will need a couple of other Emacs packages
-;; installed.  If you install via melpa (`package-install') or
-;; `el-get', these will be pulled in automatically.  See the
-;; installation instructions URL
-;; `https://github.com/realgud/realgud/wiki/How-to-Install' for all
-;; the ways to to install and more details on installation.
-
-;; [1] Four or more years in, as of 2018 realgud sports a number of
-;; old debuggers too.  However we *mark* them as such, and move them
-;; out of the main code base. See for example:
-;; https://github.com/realgud/realgud-old-debuggers.  So that's
-;; another difference: this code better *maintained*.
-
-;;; Code:
-
-;; Press C-x C-e at the end of the next line configure the program in
-;; for building via "make" to get set up.
-;; (compile (format "EMACSLOADPATH=:%s:%s:%s ./autogen.sh" 
(file-name-directory (locate-library "test-simple.elc")) (file-name-directory 
(locate-library "load-relative.elc")) (file-name-directory (locate-library 
"loc-changes.elc"))))
-
-(require 'load-relative)
-
-(defgroup realgud nil
-  "The Grand Cathedral Debugger rewrite"
-  :group 'processes
-  :group 'tools
-  :version "24.3")
-
-;; FIXME: extend require-relative for "autoload".
-(defun realgud:load-features()
-  (progn
-    (require-relative-list
-     '(
-       "./realgud/common/track-mode"
-       "./realgud/common/utils"
-       "./realgud/debugger/bashdb/bashdb"
-       "./realgud/debugger/gdb/gdb"
-       "./realgud/debugger/gub/gub"
-       "./realgud/debugger/ipdb/ipdb"
-       "./realgud/debugger/jdb/jdb"
-       "./realgud/debugger/kshdb/kshdb"
-       "./realgud/debugger/nodejs/nodejs"
-       "./realgud/debugger/pdb/pdb"
-       "./realgud/debugger/perldb/perldb"
-       "./realgud/debugger/rdebug/rdebug"
-       "./realgud/debugger/remake/remake"
-       "./realgud/debugger/trepan/trepan"
-       "./realgud/debugger/trepanjs/trepanjs"
-       "./realgud/debugger/trepan.pl/trepanpl"
-       "./realgud/debugger/trepan2/trepan2"
-       "./realgud/debugger/trepan3k/trepan3k"
-       "./realgud/debugger/zshdb/zshdb"
-       ) "realgud-")
-    (realgud:loaded-features)
-    )
-  )
-
-(load-relative "./realgud/common/custom")
-
-(defun realgud-feature-starts-with(feature prefix)
-  "realgud-strings-starts-with on stringified FEATURE and PREFIX."
-  (declare (indent 1))
-  (string-prefix-p (symbol-name feature) prefix)
-  )
-
-(defun realgud:loaded-features()
-  "Return a list of loaded debugger features. These are the features
-that start with 'realgud-' and 'realgud:'"
-
-  (delq nil
-               (mapcar (lambda (x) (and (string-match-p 
"^\\(realgud:\\|realgud-\\)" (symbol-name x)) x))
-                               features)))
-
-(defun realgud:unload-features()
-  "Remove all features loaded from this package. Used in
-`realgud:reload-features'. See that."
-  (let ((removal-set (realgud:loaded-features)))
-       (dolist (feature removal-set)
-         (unload-feature feature t))
-       removal-set)) ; return removed set
-
-(defun realgud:reload-features()
-  "Reload all features loaded from this package. Useful if have
-changed some code or want to reload another version, say a newer
-development version and you already have this package loaded."
-  (interactive "")
-  (realgud:unload-features)
-  (realgud:load-features)
-  )
-
-;; Load everything.
-(realgud:load-features)
-
-
-;;; Autoloads-related code
-
-;; This section is needed because package.el doesn't recurse into 
subdirectories
-;; when looking for autoload-able forms.  As a workaround, we statically
-;; generate our own autoloads, and force Emacs to read them by adding an extra
-;; autoloded form.
-
-;;;###autoload
-(defconst realgud--recursive-autoloads-file-name 
"realgud-recursive-autoloads.el"
-  "Where to store autoloads for subdirectory contents.")
-
-;;;###autoload
-(defconst realgud--recursive-autoloads-base-directory
-  (file-name-directory
-   (if load-in-progress load-file-name
-     buffer-file-name)))
-
-;;;###autoload
-(with-demoted-errors "Error in RealGUD's autoloads: %s"
-  (load (expand-file-name realgud--recursive-autoloads-file-name
-                          realgud--recursive-autoloads-base-directory)
-        t t))
-
-(defun realgud--rebuild-recursive-autoloads ()
-  "Update RealGUD's recursive autoloads.
-This is needed because the package.el infrastructure doesn't
-process autoloads in subdirectories; instead we create an
-additional autoloads file of our own, and we load it from an
-autoloaded form.  Maintainers should run this after adding
-autoloaded functions, and commit the resulting changes."
-  (interactive)
-  (let ((generated-autoload-file
-         (expand-file-name realgud--recursive-autoloads-file-name
-                           realgud--recursive-autoloads-base-directory)))
-    (when (file-exists-p generated-autoload-file)
-      (delete-file generated-autoload-file))
-    (dolist (name (with-no-warnings
-                    (directory-files-recursively
-                     realgud--recursive-autoloads-base-directory "" t)))
-      (when (file-directory-p name)
-        (update-directory-autoloads name)))))
-
-(provide-me)
-
-;;; realgud.el ends here
diff --git a/packages/realgud/realgud/.nosearch 
b/packages/realgud/realgud/.nosearch
deleted file mode 100644
index d9771c7..0000000
--- a/packages/realgud/realgud/.nosearch
+++ /dev/null
@@ -1,11 +0,0 @@
-The default install-from-git.sh can install realgud into a site-lisp,
-e.g /usr/local/share/emacs-site-lisp.
-
-site-lisp directories and their subdirectories may be automatically
-added to load path, in particular in Debian
-/usr/local/share/emacs/site-lisp/ is added to load-path before emacs
-system directories.  So realgud's common/buffer/info.el is loaded
-before emacs's info.el
-
-Adding this ".nosearch" file prevents emacs from adding realgud to the
-load-path.
diff --git a/packages/realgud/realgud/Makefile.am 
b/packages/realgud/realgud/Makefile.am
deleted file mode 100644
index c87e282..0000000
--- a/packages/realgud/realgud/Makefile.am
+++ /dev/null
@@ -1,21 +0,0 @@
-# Directories to run recursive makes
-SUBDIRS = common debugger lang
-
-# lispdir needs to get set here because it seems
-# to automatically use the parent root. Not sure
-# why that is since none of the other subdirectories have this
-# problem.
-lispdir = ${datarootdir}/emacs/site-lisp/realgud
-
-# By default this is based off of $lispdir, but that
-# is set funny, so we'll be explicit about lispdir_realgud,
-# although in fact it isn't used.
-lispdir_realgud = ${datarootdir}/emacs/site-lisp/realgud
-
-# .nosearch isn't a lisp file, but we want it installed along with the
-# lisp files.
-lisp_LISP = .nosearch
-
-# Overwrite clean-lisp target so it doesn't remove .nosearch
-# Note: There are no lisp files in this directory
-clean-lisp:
diff --git a/packages/realgud/realgud/common/Makefile.am 
b/packages/realgud/realgud/common/Makefile.am
deleted file mode 100644
index 673782e..0000000
--- a/packages/realgud/realgud/common/Makefile.am
+++ /dev/null
@@ -1,8 +0,0 @@
-SUBDIRS = buffer
-
-include $(top_srcdir)/common.mk
-lispdir = @lispdir_realgud@/$(notdir $(subdir))
-
-lisp_files = $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-EXTRA_DIST = $(lisp_files)
diff --git a/packages/realgud/realgud/common/attach.el 
b/packages/realgud/realgud/common/attach.el
deleted file mode 100644
index aefd62f..0000000
--- a/packages/realgud/realgud/common/attach.el
+++ /dev/null
@@ -1,68 +0,0 @@
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-;;; Emacs Commands to associate or attach a source buffer to a command
-;;; buffer and vice versa.
-
-(require 'load-relative)
-(require-relative-list  '("buffer/command" "buffer/source")
-                       "realgud-buffer-")
-(require-relative-list  '("shortkey") "realgud-")
-
-(declare-function realgud-cmdbuf-add-srcbuf           'realgud-buffer-command)
-(declare-function realgud-cmdbuf?                     'realgud-buffer-command)
-(declare-function realgud-srcbuf-init-or-update       'realgud-source)
-(declare-function realgud-short-key-mode-setup        'realgud-shortkey)
-
-(defun realgud:attach-source-buffer(srcbuf)
-  "Associate a source buffer with the current command buffer"
-  (interactive "bsource buffer: ")
-  (unless (realgud-cmdbuf?)
-    (error "The command only works inside a command buffer"))
-  (unless (get-buffer-process (current-buffer))
-    (warn "Can't find a process for command buffer %s" (current-buffer)))
-
-  (let* ((cmdbuf (current-buffer))
-        (shortkey-mode? (realgud-sget 'cmdbuf-info 'src-shortkey?)))
-    (if (stringp srcbuf) (setq srcbuf (get-buffer srcbuf)))
-    (realgud-cmdbuf-add-srcbuf srcbuf)
-    (realgud-srcbuf-init-or-update srcbuf cmdbuf)
-    (if shortkey-mode?
-       (with-current-buffer srcbuf
-         (realgud-short-key-mode-setup 't))
-      )
-    )
-  )
-
-(defun realgud:attach-command-buffer(cmdbuf)
-  "Associate a command buffer with the current source buffer"
-
-  (interactive "bcommand buffer: ")
-  (if (stringp cmdbuf) (setq cmdbuf (get-buffer cmdbuf)))
-  (let* ((srcbuf (current-buffer))
-        (shortkey-mode?))
-    (with-current-buffer cmdbuf
-      (unless (realgud-cmdbuf?)
-       (error "The buffer is not a command buffer"))
-      (unless (get-buffer-process (current-buffer))
-       (warn "Can't find a process for command buffer %s" (current-buffer)))
-      (setq shortkey-mode? (realgud-sget 'cmdbuf-info 'src-shortkey?)))
-    (realgud-cmdbuf-add-srcbuf srcbuf)
-    (realgud-srcbuf-init-or-update srcbuf cmdbuf)
-    (if shortkey-mode? (realgud-short-key-mode-setup 't)))
-  )
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/backtrace-mode.el 
b/packages/realgud/realgud/common/backtrace-mode.el
deleted file mode 100644
index 96fec26..0000000
--- a/packages/realgud/realgud/common/backtrace-mode.el
+++ /dev/null
@@ -1,118 +0,0 @@
-;; Copyright (C) 2015 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-;;; Debugger Backtrace buffer mode settings
-(require 'load-relative)
-(require-relative-list  '("menu" "key") "realgud-")
-(require-relative-list  '("buffer/command") "realgud-buffer-")
-
-(declare-function realgud-populate-debugger-menu 'realgud-menu)
-(declare-function realgud-populate-common-keys 'realgud-menu)
-(declare-function realgud-cmdbuf-pat 'realgud-menu)
-
-(defvar realgud:frames-menu nil
-  "Frames menu in Backtrace menu.")
-
-;; (setq realgud:frames-menu
-;;       (let ((map (make-sparse-keymap "Goto Specific Frames")))
-;;     (define-key map [frames-menu]
-;;       (list 'menu-item "Specific Frames" 'realgud:frames-menu))
-;;     (realgud-menu-item map "Frame 1" 'realgud-goto-frame-1)
-;;     (realgud-menu-item map "Frame 2" 'realgud-goto-frame-2)
-;;     (realgud-menu-item map "Frame 3" 'realgud-goto-frame-3)
-;;     )
-;;       map)
-
-(defvar realgud-backtrace-mode-map
-  (let ((map  (realgud-populate-debugger-menu (make-sparse-keymap))))
-    (suppress-keymap map)
-    (realgud-populate-common-keys map)
-    (define-key map "."       'realgud-backtrace-moveto-frame-selected)
-    (define-key map "r"       'realgud:backtrace-init)
-    (define-key map [double-mouse-1] 'realgud:follow-event)
-    (define-key map [mouse-2] 'realgud:follow-event)
-    (define-key map [enter]   'realgud:follow-event)
-    (define-key map [mouse-3] 'realgud:follow-event)
-    (define-key map [enter]   'realgud:follow-event)
-    (define-key map [return]  'realgud:follow-point)
-    (define-key map [up]      'realgud-backtrace-moveto-frame-prev)
-    (define-key map [down]    'realgud-backtrace-moveto-frame-next)
-    (define-key map "l"       'realgud-recenter-arrow)
-
-    (define-key map [frames-menu]
-      (list 'menu-item "Specific Frames" 'realgud:frames-menu))
-
-    ;; FIXME: these can go to a common routine. See also shortkey.el and
-    ;; key.el
-    (define-key map "<"       'realgud:cmd-newer-frame)
-    (define-key map ">"       'realgud:cmd-older-frame)
-    (define-key map "d"       'realgud:cmd-newer-frame)
-    (define-key map "u"       'realgud:cmd-older-frame)
-    (define-key map "q"       'realgud:cmd-quit)
-    (define-key map "C"       'realgud-window-cmd-undisturb-src)
-    (define-key map "F"       'realgud:window-bt)
-    (define-key map "I"       'realgud:cmdbuf-info-describe)
-    (define-key map "S"       'realgud-window-src-undisturb-cmd)
-
-    (define-key map "n"       'realgud-backtrace-moveto-frame-next)
-    (define-key map "p"       'realgud-backtrace-moveto-frame-prev)
-    (define-key map "0"       'realgud-goto-frame-n)
-    (define-key map "1"       'realgud-goto-frame-n)
-    (define-key map "2"       'realgud-goto-frame-n)
-    (define-key map "3"       'realgud-goto-frame-n)
-    (define-key map "4"       'realgud-goto-frame-n)
-    (define-key map "5"       'realgud-goto-frame-n)
-    (define-key map "6"       'realgud-goto-frame-n)
-    (define-key map "7"       'realgud-goto-frame-n)
-    (define-key map "8"       'realgud-goto-frame-n)
-    (define-key map "9"       'realgud-goto-frame-n)
-
-    ;; --------------------
-    ;; The "Stack window" submenu.
-    ;; (let ((submenu realgud:frames-menu))
-    ;;   (define-key-after map [menu-bar debugger stack]
-    ;;     (cons "Stack window" submenu)
-    ;;     'placeholder))
-    map)
-  "Keymap to navigate realgud stack frames.
-
-\\{realgud-backtrace-mode-map}")
-
-(defun realgud-backtrace-mode (&optional cmdbuf)
-  "Major mode for displaying the stack frames.
-\\{realgud-frames-mode-map}"
-  (interactive)
-  (kill-all-local-variables)
-  (setq buffer-read-only 't)
-  (setq major-mode 'realgud-backtrace-mode)
-  (setq mode-name "Realgud Stack Frames")
-  ;; (set (make-local-variable 'realgud-secondary-buffer) t)
-  (setq mode-line-process 'realgud-mode-line-process)
-  (use-local-map realgud-backtrace-mode-map)
-
-  ;; FIXME: make buffer specific
-  (if cmdbuf
-      (let* ((font-lock-keywords
-             (with-current-buffer cmdbuf
-               (realgud-cmdbuf-pat "font-lock-keywords"))))
-       (if font-lock-keywords
-           (set (make-local-variable 'font-lock-defaults)
-                (list font-lock-keywords)))
-       ))
-  ;; (run-mode-hooks 'realgud-backtrace-mode-hook)
-  )
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/backtrack-mode.el 
b/packages/realgud/realgud/common/backtrack-mode.el
deleted file mode 100644
index a4bbfc5..0000000
--- a/packages/realgud/realgud/common/backtrack-mode.el
+++ /dev/null
@@ -1,115 +0,0 @@
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;;  Used to parse programming-language backtrace-like tracks
-;;  output. In contrast to track-mode, there doesn't have to be a
-;;  process shell arround Compare with backtrace-mode.el which
-;;  handles backtraces inside the debugger
-
-(require 'shell)
-
-(require 'load-relative)
-(require-relative-list
- '("core"   "helper" "track" "loc" "lochist" "file"
-   "fringe" "window" "regexp" "menu"
-   "send"   "shortkey") "realgud-")
-
-(require-relative-list  '("buffer/command") "realgud-buffer-")
-
-(declare-function realgud:debugger-name-transform 'realgud-helper)
-(declare-function realgud-populate-debugger-menu  'realgud-menu)
-(declare-function realgud:track-set-debugger      'realgud-track)
-
-(defvar realgud-backtrack-mode-map
-  (let ((map (make-sparse-keymap)))
-    (define-key map [frames-menu]
-      (list 'menu-item "Specific Frames" 'realgud:frames-menu))
-    (define-key map [M-right]  'realgud-track-hist-newest)
-    (define-key map [M-down]   'realgud-track-hist-newer)
-    (define-key map [M-up]     'realgud-track-hist-older)
-    (define-key map [M-print]  'realgud-track-hist-older)
-    (define-key map [M-S-down] 'realgud-track-hist-newest)
-    (define-key map [M-S-up]   'realgud-track-hist-oldest)
-    (realgud-populate-debugger-menu map)
-    map)
-  "Keymap used in `realgud-backtrack-minor-mode'.")
-
-;; FIXME figure out if I can put this in something like a header file.
-;; FIXME: combine with realgud:track-set-debugger's completing read
-(defun realgud-backtrack-set-debugger (debugger-name)
-  "Set debugger name This info is returned or nil if we can't find a
-debugger with that information"
-  (interactive
-   (list (completing-read "Debugger name: " realgud-pat-hash)))
-  (let ((regexp-hash (gethash debugger-name realgud-pat-hash)))
-    (if regexp-hash
-       (let* ((base-variable-name
-               (or (gethash debugger-name realgud:variable-basename-hash)
-                   debugger-name))
-              (specific-track-mode (intern (concat base-variable-name 
"-backtrack-mode")))
-              )
-         (if (and (not (eval specific-track-mode))
-                  (functionp specific-track-mode))
-             (funcall specific-track-mode 't))
-         )
-      (progn
-       (message "I Don't have %s listed as a debugger." debugger-name)
-       nil)
-      )))
-
-(define-minor-mode realgud-backtrack-mode
-  "Minor mode for backtracking parsing."
-  :init-value nil
-  :global nil
-  :group 'realgud
-
-  :lighter
-  (:eval (progn
-          (concat " "
-                  (if (realgud-cmdbuf-info-set?)
-                      (realgud-sget 'cmdbuf-info 'debugger-name)
-                    "dbgr??"))))
-
-  :keymap realgud-backtrack-mode-map
-  ;; Setup/teardown
-  )
-
-(defmacro realgud-backtrack-mode-vars (name)
-  `(progn
-     (defvar ,(intern (concat name "-backtrack-mode")) nil
-       ,(format "Non-nil if using %s-backtrack-mode as a minor mode of some 
other mode.
-Use the command `%s-track-mode' to toggle or set this variable." name name))
-     (defvar ,(intern (concat name "-backtrack-mode-map")) (make-sparse-keymap)
-       ,(format "Keymap used in `%s-backtrack-mode'." name))
-    ))
-
-;; FIXME: The below could be a macro? I have a hard time getting
-;; macros right.
-(defun realgud-backtrack-mode-body(name)
-  "Used in by custom debuggers: pydbgr, trepan, gdb, etc. NAME is
-the name of the debugger which is used to preface variables."
-  (realgud:track-set-debugger name)
-  (funcall (intern (concat "realgud-define-" name "-commands")))
-  (if (intern (concat name "-backtrack-mode"))
-      (progn
-       (realgud-backtrack-mode 't)
-       (run-mode-hooks (intern (concat name "-backtrack-mode-hook"))))
-    (progn
-      (realgud-backtrack-mode nil)
-      )))
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/bp-image-data.el 
b/packages/realgud/realgud/common/bp-image-data.el
deleted file mode 100644
index d0aaca3..0000000
--- a/packages/realgud/realgud/common/bp-image-data.el
+++ /dev/null
@@ -1,378 +0,0 @@
-;; Copyright (C) 2016 Free Software Foundation, Inc
-
-;; Authors: Clément Pit--Claudel, Nick Roberts <address@hidden>,
-;; Rocky Bernstein
-
-;; 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/>.
-;; Run ‘cask exec emacs -Q -L . -l etc/screenshot.el’ from the project's root 
to
-;; build a screenshot.
-
-(require 'load-relative)
-
-(defconst realgud-bp-xpm-data
-        "/* XPM */
-static char *magick[] = {
-/* columns rows colors chars-per-pixel */
-\"10 10 2 1\",
-\"  c red\",
-\"+ c None\",
-/* pixels */
-\"+++    +++\",
-\"++      ++\",
-\"+        +\",
-\"          \",
-\"          \",
-\"          \",
-\"          \",
-\"+        +\",
-\"++      ++\",
-\"+++    +++\",
-};"
-  "XPM data used for breakpoint enable and disable icon.")
-
-;; For seeing what above icon looks like:
-(if nil
-    (progn
-      (let ((image
-            (find-image `((:type xpm :data
-                                 ,realgud-bp-xpm-data
-                                 :ascent 100 :pointer hand)))))
-       (insert-image image))   ;; eval-last-sexp after previous ))
-      (let ((image
-            (find-image `((:type xpm :data
-                                 ,realgud-bp-xpm-data
-                                 :conversion disabled
-                                 :ascent 100 :pointer hand)))))
-       (insert-image image))   ;; eval-last-sexp after previous ))
-      )
-  )
-
-(defconst realgud-bp-enabled-pbm-data
-  "P1
-10 10\",
-0 0 0 0 1 1 1 1 0 0 0 0
-0 0 0 1 1 1 1 1 1 0 0 0
-0 0 1 1 1 1 1 1 1 1 0 0
-0 1 1 1 1 1 1 1 1 1 1 0
-0 1 1 1 1 1 1 1 1 1 1 0
-0 1 1 1 1 1 1 1 1 1 1 0
-0 1 1 1 1 1 1 1 1 1 1 0
-0 0 1 1 1 1 1 1 1 1 0 0
-0 0 0 1 1 1 1 1 1 0 0 0
-0 0 0 0 1 1 1 1 0 0 0 0"
-  "PBM data used for enabled breakpoint icon.")
-
-;; For seeing what above icon looks like:
-(if nil
-    (let ((image
-         (find-image `((:type pbm :data
-                              ,realgud-bp-enabled-pbm-data
-                              :ascent 100 :pointer hand)))))
-      (insert-image image))   ;; eval-last-sexp after previous ))
-  )
-
-(defconst realgud-bp-disabled-pbm-data
-  "P1
-10 10\",
-1 1 1 1 0 0 0 0 1 1 1 1
-1 1 1 0 0 0 0 0 0 1 1 1
-1 1 0 0 0 0 0 0 0 0 1 1
-1 0 0 0 0 0 0 0 0 0 0 1
-1 0 0 0 0 0 0 0 0 0 0 1
-1 0 0 0 0 0 0 0 0 0 0 1
-1 0 0 0 0 0 0 0 0 0 0 1
-1 1 0 0 0 0 0 0 0 0 1 1
-1 1 1 0 0 0 0 0 0 1 1 1
-1 1 1 1 0 0 0 0 1 1 1 1"
-  "PBM data used for disabled breakpoint icon.")
-
-;; For seeing what above icon looks like:
-(if nil
-    (let ((image
-         (find-image `((:type pbm :data
-                              ,realgud-bp-disabled-pbm-data
-                              :ascent 100 :pointer hand)))))
-      (insert-image image))   ;; eval-last-sexp after previous ))
-  )
-
-
-
-(defconst realgud-bp-enabled-svg-data
-"<?xml version='1.0' standalone='no'?>
-<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 20010904//EN'
-  'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'>
-<svg width='10' height='10'>
-  <circle cx='0' cy='0' r='1' fill='none'/>
-  <circle cx='1' cy='0' r='1' fill='none'/>
-  <circle cx='2' cy='0' r='1' fill='none'/>
-  <circle cx='3' cy='0' r='1' fill='red'/>
-  <circle cx='4' cy='0' r='1' fill='red'/>
-  <circle cx='5' cy='0' r='1' fill='red'/>
-  <circle cx='6' cy='0' r='1' fill='red'/>
-  <circle cx='7' cy='0' r='1' fill='none'/>
-  <circle cx='8' cy='0' r='1' fill='none'/>
-  <circle cx='9' cy='0' r='1' fill='none'/>
-  <circle cx='0' cy='1' r='1' fill='none'/>
-  <circle cx='1' cy='1' r='1' fill='none'/>
-  <circle cx='2' cy='1' r='1' fill='red'/>
-  <circle cx='3' cy='1' r='1' fill='red'/>
-  <circle cx='4' cy='1' r='1' fill='red'/>
-  <circle cx='5' cy='1' r='1' fill='red'/>
-  <circle cx='6' cy='1' r='1' fill='red'/>
-  <circle cx='7' cy='1' r='1' fill='red'/>
-  <circle cx='8' cy='1' r='1' fill='none'/>
-  <circle cx='9' cy='1' r='1' fill='none'/>
-  <circle cx='0' cy='2' r='1' fill='none'/>
-  <circle cx='1' cy='2' r='1' fill='red'/>
-  <circle cx='2' cy='2' r='1' fill='red'/>
-  <circle cx='3' cy='2' r='1' fill='red'/>
-  <circle cx='4' cy='2' r='1' fill='red'/>
-  <circle cx='5' cy='2' r='1' fill='red'/>
-  <circle cx='6' cy='2' r='1' fill='red'/>
-  <circle cx='7' cy='2' r='1' fill='red'/>
-  <circle cx='8' cy='2' r='1' fill='red'/>
-  <circle cx='9' cy='2' r='1' fill='none'/>
-  <circle cx='0' cy='3' r='1' fill='red'/>
-  <circle cx='1' cy='3' r='1' fill='red'/>
-  <circle cx='2' cy='3' r='1' fill='red'/>
-  <circle cx='3' cy='3' r='1' fill='red'/>
-  <circle cx='4' cy='3' r='1' fill='red'/>
-  <circle cx='5' cy='3' r='1' fill='red'/>
-  <circle cx='6' cy='3' r='1' fill='red'/>
-  <circle cx='7' cy='3' r='1' fill='red'/>
-  <circle cx='8' cy='3' r='1' fill='red'/>
-  <circle cx='9' cy='3' r='1' fill='red'/>
-  <circle cx='0' cy='4' r='1' fill='red'/>
-  <circle cx='1' cy='4' r='1' fill='red'/>
-  <circle cx='2' cy='4' r='1' fill='red'/>
-  <circle cx='3' cy='4' r='1' fill='red'/>
-  <circle cx='4' cy='4' r='1' fill='red'/>
-  <circle cx='5' cy='4' r='1' fill='red'/>
-  <circle cx='6' cy='4' r='1' fill='red'/>
-  <circle cx='7' cy='4' r='1' fill='red'/>
-  <circle cx='8' cy='4' r='1' fill='red'/>
-  <circle cx='9' cy='4' r='1' fill='red'/>
-  <circle cx='0' cy='5' r='1' fill='red'/>
-  <circle cx='1' cy='5' r='1' fill='red'/>
-  <circle cx='2' cy='5' r='1' fill='red'/>
-  <circle cx='3' cy='5' r='1' fill='red'/>
-  <circle cx='4' cy='5' r='1' fill='red'/>
-  <circle cx='5' cy='5' r='1' fill='red'/>
-  <circle cx='6' cy='5' r='1' fill='red'/>
-  <circle cx='7' cy='5' r='1' fill='red'/>
-  <circle cx='8' cy='5' r='1' fill='red'/>
-  <circle cx='9' cy='5' r='1' fill='red'/>
-  <circle cx='0' cy='6' r='1' fill='red'/>
-  <circle cx='1' cy='6' r='1' fill='red'/>
-  <circle cx='2' cy='6' r='1' fill='red'/>
-  <circle cx='3' cy='6' r='1' fill='red'/>
-  <circle cx='4' cy='6' r='1' fill='red'/>
-  <circle cx='5' cy='6' r='1' fill='red'/>
-  <circle cx='6' cy='6' r='1' fill='red'/>
-  <circle cx='7' cy='6' r='1' fill='red'/>
-  <circle cx='8' cy='6' r='1' fill='red'/>
-  <circle cx='9' cy='6' r='1' fill='red'/>
-  <circle cx='0' cy='7' r='1' fill='none'/>
-  <circle cx='1' cy='7' r='1' fill='red'/>
-  <circle cx='2' cy='7' r='1' fill='red'/>
-  <circle cx='3' cy='7' r='1' fill='red'/>
-  <circle cx='4' cy='7' r='1' fill='red'/>
-  <circle cx='5' cy='7' r='1' fill='red'/>
-  <circle cx='6' cy='7' r='1' fill='red'/>
-  <circle cx='7' cy='7' r='1' fill='red'/>
-  <circle cx='8' cy='7' r='1' fill='red'/>
-  <circle cx='9' cy='7' r='1' fill='none'/>
-  <circle cx='0' cy='8' r='1' fill='none'/>
-  <circle cx='1' cy='8' r='1' fill='none'/>
-  <circle cx='2' cy='8' r='1' fill='red'/>
-  <circle cx='3' cy='8' r='1' fill='red'/>
-  <circle cx='4' cy='8' r='1' fill='red'/>
-  <circle cx='5' cy='8' r='1' fill='red'/>
-  <circle cx='6' cy='8' r='1' fill='red'/>
-  <circle cx='7' cy='8' r='1' fill='red'/>
-  <circle cx='8' cy='8' r='1' fill='none'/>
-  <circle cx='9' cy='8' r='1' fill='none'/>
-  <circle cx='0' cy='9' r='1' fill='none'/>
-  <circle cx='1' cy='9' r='1' fill='none'/>
-  <circle cx='2' cy='9' r='1' fill='none'/>
-  <circle cx='3' cy='9' r='1' fill='red'/>
-  <circle cx='4' cy='9' r='1' fill='red'/>
-  <circle cx='5' cy='9' r='1' fill='red'/>
-  <circle cx='6' cy='9' r='1' fill='red'/>
-  <circle cx='7' cy='9' r='1' fill='none'/>
-  <circle cx='8' cy='9' r='1' fill='none'/>
-  <circle cx='9' cy='9' r='1' fill='none'/>
-</svg>")
-
-;; For seeing what above icon looks like:
-(if nil
-    (let ((image
-         (find-image `((:type svg :data
-                              ,realgud-bp-enabled-svg-data
-                              :ascent 100 :pointer hand)))))
-      (insert-image image))   ;; eval-last-sexp after previous ))
-  )
-
-(defconst realgud-bp-disabled-svg-data
-"<?xml version='1.0' standalone='no'?>
-<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 20010904//EN'
-  'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'>
-<svg width='10' height='10'>
-  <circle cx='0' cy='0' r='1' fill='none'/>
-  <circle cx='1' cy='0' r='1' fill='none'/>
-  <circle cx='2' cy='0' r='1' fill='none'/>
-  <circle cx='3' cy='0' r='1' fill='gray'/>
-  <circle cx='4' cy='0' r='1' fill='gray'/>
-  <circle cx='5' cy='0' r='1' fill='gray'/>
-  <circle cx='6' cy='0' r='1' fill='gray'/>
-  <circle cx='7' cy='0' r='1' fill='none'/>
-  <circle cx='8' cy='0' r='1' fill='none'/>
-  <circle cx='9' cy='0' r='1' fill='none'/>
-  <circle cx='0' cy='1' r='1' fill='none'/>
-  <circle cx='1' cy='1' r='1' fill='none'/>
-  <circle cx='2' cy='1' r='1' fill='gray'/>
-  <circle cx='3' cy='1' r='1' fill='gray'/>
-  <circle cx='4' cy='1' r='1' fill='gray'/>
-  <circle cx='5' cy='1' r='1' fill='gray'/>
-  <circle cx='6' cy='1' r='1' fill='gray'/>
-  <circle cx='7' cy='1' r='1' fill='gray'/>
-  <circle cx='8' cy='1' r='1' fill='none'/>
-  <circle cx='9' cy='1' r='1' fill='none'/>
-  <circle cx='0' cy='2' r='1' fill='none'/>
-  <circle cx='1' cy='2' r='1' fill='gray'/>
-  <circle cx='2' cy='2' r='1' fill='gray'/>
-  <circle cx='3' cy='2' r='1' fill='gray'/>
-  <circle cx='4' cy='2' r='1' fill='gray'/>
-  <circle cx='5' cy='2' r='1' fill='gray'/>
-  <circle cx='6' cy='2' r='1' fill='gray'/>
-  <circle cx='7' cy='2' r='1' fill='gray'/>
-  <circle cx='8' cy='2' r='1' fill='gray'/>
-  <circle cx='9' cy='2' r='1' fill='none'/>
-  <circle cx='0' cy='3' r='1' fill='gray'/>
-  <circle cx='1' cy='3' r='1' fill='gray'/>
-  <circle cx='2' cy='3' r='1' fill='gray'/>
-  <circle cx='3' cy='3' r='1' fill='gray'/>
-  <circle cx='4' cy='3' r='1' fill='gray'/>
-  <circle cx='5' cy='3' r='1' fill='gray'/>
-  <circle cx='6' cy='3' r='1' fill='gray'/>
-  <circle cx='7' cy='3' r='1' fill='gray'/>
-  <circle cx='8' cy='3' r='1' fill='gray'/>
-  <circle cx='9' cy='3' r='1' fill='gray'/>
-  <circle cx='0' cy='4' r='1' fill='gray'/>
-  <circle cx='1' cy='4' r='1' fill='gray'/>
-  <circle cx='2' cy='4' r='1' fill='gray'/>
-  <circle cx='3' cy='4' r='1' fill='gray'/>
-  <circle cx='4' cy='4' r='1' fill='gray'/>
-  <circle cx='5' cy='4' r='1' fill='gray'/>
-  <circle cx='6' cy='4' r='1' fill='gray'/>
-  <circle cx='7' cy='4' r='1' fill='gray'/>
-  <circle cx='8' cy='4' r='1' fill='gray'/>
-  <circle cx='9' cy='4' r='1' fill='gray'/>
-  <circle cx='0' cy='5' r='1' fill='gray'/>
-  <circle cx='1' cy='5' r='1' fill='gray'/>
-  <circle cx='2' cy='5' r='1' fill='gray'/>
-  <circle cx='3' cy='5' r='1' fill='gray'/>
-  <circle cx='4' cy='5' r='1' fill='gray'/>
-  <circle cx='5' cy='5' r='1' fill='gray'/>
-  <circle cx='6' cy='5' r='1' fill='gray'/>
-  <circle cx='7' cy='5' r='1' fill='gray'/>
-  <circle cx='8' cy='5' r='1' fill='gray'/>
-  <circle cx='9' cy='5' r='1' fill='gray'/>
-  <circle cx='0' cy='6' r='1' fill='gray'/>
-  <circle cx='1' cy='6' r='1' fill='gray'/>
-  <circle cx='2' cy='6' r='1' fill='gray'/>
-  <circle cx='3' cy='6' r='1' fill='gray'/>
-  <circle cx='4' cy='6' r='1' fill='gray'/>
-  <circle cx='5' cy='6' r='1' fill='gray'/>
-  <circle cx='6' cy='6' r='1' fill='gray'/>
-  <circle cx='7' cy='6' r='1' fill='gray'/>
-  <circle cx='8' cy='6' r='1' fill='gray'/>
-  <circle cx='9' cy='6' r='1' fill='gray'/>
-  <circle cx='0' cy='7' r='1' fill='none'/>
-  <circle cx='1' cy='7' r='1' fill='gray'/>
-  <circle cx='2' cy='7' r='1' fill='gray'/>
-  <circle cx='3' cy='7' r='1' fill='gray'/>
-  <circle cx='4' cy='7' r='1' fill='gray'/>
-  <circle cx='5' cy='7' r='1' fill='gray'/>
-  <circle cx='6' cy='7' r='1' fill='gray'/>
-  <circle cx='7' cy='7' r='1' fill='gray'/>
-  <circle cx='8' cy='7' r='1' fill='gray'/>
-  <circle cx='9' cy='7' r='1' fill='none'/>
-  <circle cx='0' cy='8' r='1' fill='none'/>
-  <circle cx='1' cy='8' r='1' fill='none'/>
-  <circle cx='2' cy='8' r='1' fill='gray'/>
-  <circle cx='3' cy='8' r='1' fill='gray'/>
-  <circle cx='4' cy='8' r='1' fill='gray'/>
-  <circle cx='5' cy='8' r='1' fill='gray'/>
-  <circle cx='6' cy='8' r='1' fill='gray'/>
-  <circle cx='7' cy='8' r='1' fill='gray'/>
-  <circle cx='8' cy='8' r='1' fill='none'/>
-  <circle cx='9' cy='8' r='1' fill='none'/>
-  <circle cx='0' cy='9' r='1' fill='none'/>
-  <circle cx='1' cy='9' r='1' fill='none'/>
-  <circle cx='2' cy='9' r='1' fill='none'/>
-  <circle cx='3' cy='9' r='1' fill='gray'/>
-  <circle cx='4' cy='9' r='1' fill='gray'/>
-  <circle cx='5' cy='9' r='1' fill='gray'/>
-  <circle cx='6' cy='9' r='1' fill='gray'/>
-  <circle cx='7' cy='9' r='1' fill='none'/>
-  <circle cx='8' cy='9' r='1' fill='none'/>
-  <circle cx='9' cy='9' r='1' fill='none'/>
-</svg>")
-
-;; For seeing what above icon looks like:
-(if nil
-    (let ((image
-         (find-image `((:type svg :data
-                              ,realgud-bp-disabled-svg-data
-                              :ascent 100 :pointer hand)))))
-      (insert-image image))   ;; eval-last-sexp after previous ))
-  )
-
-(defconst realgud-bp-enabled-tiff-data
-"II*(����������@@@@������������������������BBBB��������������������@@@@��������������������������������BBBB������������������������������������������������BBBB����������������������������������������������������������������������������������������������������������������������������
 [...]
-
-
-

&f 
4<()>D?TR/tmp/en.tiffHH�F@V@���(@`�@@33@�ff&@���
        @<
-�@"
-  "TIFF data used for breakpoint enabled icon.")
-
-;; For seeing what above icon looks like:
-(if nil
-    (let ((image
-         (find-image `((:type tiff :data
-                              ,realgud-bp-enabled-tiff-data
-                              :ascent 100 :pointer hand)))))
-      (insert-image image))   ;; eval-last-sexp after previous ))
-  )
-
-(defconst realgud-bp-disabled-tiff-data
-"II*�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
-
-
-
�����()>�?�R/tmp/dis.tiffHH�F@V@���(@`�@@33@�ff&@���
    @<
-�@"
-  "TIFF data used for breakpoint disabled icon.")
-
-;; For seeing what above icon looks like:
-(if nil
-    (let ((image
-         (find-image `((:type tiff :data
-                              ,realgud-bp-disabled-tiff-data
-                              :ascent 100 :pointer hand)))))
-      (insert-image image))   ;; eval-last-sexp after previous ))
-  )
-
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/bp.el 
b/packages/realgud/realgud/common/bp.el
deleted file mode 100644
index 6e685f1..0000000
--- a/packages/realgud/realgud/common/bp.el
+++ /dev/null
@@ -1,231 +0,0 @@
-;; Copyright (C) 2010, 2012-2015, 2017-2018 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-;; Code associated with breakpoints
-
-(require 'image)
-(require 'load-relative)
-(require-relative-list '("loc" "bp-image-data") "realgud-")
-
-(defun realgud-bp-remove-icons (&optional begin-pos end-pos bpnum)
-  "Remove breakpoint icons (overlays) in BEGIN-POS .. END-POS.
-The default value for BEGIN-POS is `point'.  The default value
-for END-POS is BEGIN-POS.  When BPNUM is non-nil, only remove
-overlays with that breakpoint number.
-
-The way we determine if an overlay is ours is by inspecting the
-overlay for a realgud property."
-  (interactive "r")
-  (setq begin-pos (or begin-pos (point))
-        end-pos (or end-pos begin-pos))
-  (dolist (overlay (overlays-in begin-pos end-pos))
-    (when (overlay-get overlay 'realgud)
-      (when (or (null bpnum) (equal bpnum (overlay-get overlay 
'realgud-bp-num)))
-        (delete-overlay overlay)))))
-
-(defvar realgud-bp-enabled-icon nil
-  "Icon for an enabled breakpoint in display margin.")
-
-(defvar realgud-bp-disabled-icon nil
-  "Icon for a disabled breakpoint in display margin.")
-
-(defun realgud-set-bp-icons()
-  "Load breakpoint icons, if needed."
-  (when (display-images-p)
-    (unless realgud-bp-enabled-icon
-      (setq realgud-bp-enabled-icon
-            (find-image `((:type xpm :data
-                                 ,realgud-bp-xpm-data
-                                 :ascent 100 :pointer hand)
-                          (:type svg :data
-                                 ,realgud-bp-enabled-svg-data
-                                 :ascent 100 :pointer hand)
-                          (:type tiff :data
-                                 ,realgud-bp-enabled-tiff-data
-                                 :ascent 100 :pointer hand)
-                          (:type pbm :data
-                                 ,realgud-bp-enabled-pbm-data
-                                 :ascent 100 :pointer hand)))))
-    (unless realgud-bp-disabled-icon
-      (setq realgud-bp-disabled-icon
-            (find-image `((:type xpm :data
-                                 ,realgud-bp-xpm-data
-                                 :conversion disabled ; different than 
'enabled'
-                                 :ascent 100 :pointer hand)
-                          (:type svg :data
-                                 ,realgud-bp-disabled-svg-data
-                                 :ascent 100 :pointer hand)
-                          (:type tiff :data
-                                 ,realgud-bp-disabled-tiff-data
-                                 :ascent 100 :pointer hand)
-                          (:type pbm :data
-                                 ,realgud-bp-disabled-pbm-data
-                                 :ascent 100 :pointer hand)
-                          (:type svg :data
-                                 ,realgud-bp-disabled-svg-data
-                                 :ascent 100 :pointer hand)))))))
-
-(declare-function define-fringe-bitmap "fringe.c"
-                  (bitmap bits &optional height width align))
-
-(when (display-images-p)
-  ;; Taken from gdb-mi
-  (define-fringe-bitmap 'realgud-bp-filled
-    "\x3c\x7e\xff\xff\xff\xff\x7e\x3c")
-  (define-fringe-bitmap 'realgud-bp-hollow
-    "\x3c\x42\x81\x81\x81\x81\x42\x3c"))
-
-(defgroup realgud-bp nil
-  "RealGUD breakpoints UI"
-  :group 'realgud
-  :prefix 'realgud-bp-)
-
-(defface realgud-bp-enabled-face
-  '((t :foreground "red" :weight bold))
-  "Face for enabled breakpoints (in the fringe or margin)."
-  :group 'realgud-bp)
-
-(defface realgud-bp-disabled-face
-  '((t :foreground "grey" :weight bold))
-  "Face for disabled breakpoints (in the fringe or margin).
-Only used in text terminals: fringe icons always use
-`realgud-bp-enabled-face'."
-  :group 'realgud-bp)
-
-(defface realgud-bp-line-enabled-face
-  '((t (:box (:color "red"))))
-  "Face for lines with enabled breakpoints."
-  :group 'realgud-bp)
-
-(defface realgud-bp-line-disabled-face
-  '((t (:box (:color "grey"))))
-  "Face for lines with disabled breakpoints."
-  :group 'realgud-bp)
-
-(defcustom realgud-bp-fringe-indicator-style '(filled-rectangle . 
hollow-rectangle)
-  "Which fringe icon to use for breakpoints."
-  :type '(choice (const :tag "Disc" (realgud-bp-filled . realgud-bp-hollow))
-                 (const :tag "Square" (filled-square . hollow-square))
-                 (const :tag "Rectangle" (filled-rectangle . 
hollow-rectangle)))
-  :group 'realgud-bp)
-
-(defcustom realgud-bp-use-fringe t
-  "Whether to use the fringe to display breakpoints.
-If nil, use margins instead."
-  :type '(boolean)
-  :group 'realgud-bp)
-
-(defun realgud-bp--fringe-width ()
-  "Compute width of left fringe."
-  (let ((window (get-buffer-window (current-buffer))))
-    (or left-fringe-width
-        (and window (car (window-fringes window)))
-        0)))
-
-(defun realgud-bp-add-fringe-icon (overlay icon)
-  "Add a fringe icon to OVERLAY.
-ICON is a symbol registered with `define-fringe-bitmap'."
-  ;; Ensure that the fringe is wide enough
-  (unless (>= (realgud-bp--fringe-width) 8)
-    (set-fringe-mode `(8 . ,right-fringe-width)))
-  ;; Add the fringe icon
-  (let* ((fringe-spec `(left-fringe ,icon realgud-bp-enabled-face)))
-    (overlay-put overlay 'before-string (propertize "x" 'display 
fringe-spec))))
-
-(defun realgud-bp-add-margin-indicator (overlay text image face)
-  "Add a margin breakpoint indicator to OVERLAY.
-TEXT is a string, IMAGE an IMAGE spec or nil; TEXT gets
-highlighted with FACE."
-  ;; Ensure that the margin is large enough (Taken from gdb-mi)
-  (when (< left-margin-width 2)
-    (save-current-buffer
-      (setq left-margin-width 2)
-      (let ((window (get-buffer-window (current-buffer) 0)))
-        (if window
-            (set-window-margins
-             window left-margin-width right-margin-width)))))
-  ;; Add the margin string
-  (let* ((indicator (or image (propertize text 'face face)))
-         (spec `((margin left-margin) ,indicator)))
-    (overlay-put overlay 'before-string (propertize text 'display spec))))
-
-(defun realgud-bp-put-icon (pos enable? bp-num &optional buf)
-  "Add a breakpoint icon at POS according to breakpoint-display-style.
-Use the fringe if available, and the margin otherwise.  Record
-breakpoint status ENABLE? and breakpoint number BP-NUM in
-overlay.  BUF is the buffer that POS refers to; it defaults to
-the current buffer."
-  (let* ((bp-text) (bp-face) (line-face) (margin-icon) (fringe-icon))
-    (realgud-set-bp-icons)
-    (if enable?
-        (setq bp-text "B"
-              bp-face 'realgud-bp-enabled-face
-              line-face 'realgud-bp-line-enabled-face
-              margin-icon realgud-bp-enabled-icon
-              fringe-icon (car realgud-bp-fringe-indicator-style))
-      (setq bp-text "b"
-            bp-face 'realgud-bp-disabled-face
-            line-face 'realgud-bp-line-disabled-face
-            margin-icon realgud-bp-disabled-icon
-            fringe-icon (cdr realgud-bp-fringe-indicator-style)))
-    (let ((help-echo (format "%s%s: mouse-1 to clear" bp-text bp-num)))
-      (setq bp-text (propertize bp-text 'help-echo help-echo)))
-    (with-current-buffer (or buf (current-buffer))
-      (realgud-bp-remove-icons pos (1+ pos) bp-num)
-      (let* ((eol (save-excursion (goto-char pos) (point-at-eol)))
-             (ov (make-overlay pos (1+ eol) (current-buffer) t nil)))
-        (if (and realgud-bp-use-fringe (display-images-p))
-            (realgud-bp-add-fringe-icon ov fringe-icon)
-          (realgud-bp-add-margin-indicator ov bp-text margin-icon bp-face))
-        (overlay-put ov 'face line-face)
-        (overlay-put ov 'realgud t)
-        (overlay-put ov 'realgud-bp-num bp-num)
-        (overlay-put ov 'realgud-bp-enabled enable?)))))
-
-(defun realgud-bp-del-icon (pos &optional buf bpnum)
-  "Delete breakpoint icon at POS.
-BUF is the buffer which pos refers to (default: current buffer).
-If BPNUM is non-nil, only remove overlays maching that breakpoint
-number."
-  (with-current-buffer (or buf (current-buffer))
-    (realgud-bp-remove-icons pos (1+ pos) bpnum)))
-
-(defun realgud-bp-add-info (loc)
-  "Record bp information for location LOC."
-  (if (realgud-loc? loc)
-      (let* ((marker (realgud-loc-marker loc))
-             (bp-num (realgud-loc-num loc)))
-        (realgud-bp-put-icon marker t bp-num))))
-
-(defun realgud-bp-del-info (loc)
-  "Remove bp information for location LOC."
-  (if (realgud-loc? loc)
-      (let* ((marker (realgud-loc-marker loc))
-             (bp-num (realgud-loc-num loc)))
-        (realgud-bp-del-icon marker (current-buffer) bp-num))))
-
-(defun realgud-bp-enable-disable-info (bp-num enable? loc buf)
-  "Enable or disable bp with BP-NUM at location LOC in BUF."
-  (if (realgud-loc? loc)
-      (let* ((marker (realgud-loc-marker loc))
-             (bp-num-check (realgud-loc-num loc)))
-       (if (eq bp-num bp-num-check)
-           (realgud-bp-put-icon marker enable? bp-num buf)
-         (message "Internal error - bp number found %s doesn't match requested 
%s"
-                  bp-num-check bp-num)
-         ))))
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/buffer/Makefile.am 
b/packages/realgud/realgud/common/buffer/Makefile.am
deleted file mode 100644
index c55e7db..0000000
--- a/packages/realgud/realgud/common/buffer/Makefile.am
+++ /dev/null
@@ -1,7 +0,0 @@
-include $(top_srcdir)/common.mk
-
-lispdir = @lispdir_realgud@/common/buffer
-
-lisp_files = $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-EXTRA_DIST = $(lisp_files)
diff --git a/packages/realgud/realgud/common/buffer/backtrace.el 
b/packages/realgud/realgud/common/buffer/backtrace.el
deleted file mode 100644
index 0a7908f..0000000
--- a/packages/realgud/realgud/common/buffer/backtrace.el
+++ /dev/null
@@ -1,491 +0,0 @@
-;;; Backtrace buffer
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; Copyright (C) 2015-2017 Free Software Foundation, Inc
-
-;; This program is free software: you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as
-;; published by the Free Software Foundation, either version 3 of the
-;; License, or (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-;; General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see
-;; <http://www.gnu.org/licenses/>.
-
-(require 'ansi-color)
-(require 'ring)
-(require 'load-relative)
-(eval-when-compile (require 'cl-lib))
-(require-relative-list
- '("../key" "helper" "../follow" "../loc") "realgud-")
-
-(require-relative-list
- '("command") "realgud-buffer-")
-
-(declare-function realgud-cmdbuf-debugger-name        'realgud-buffer-command)
-(declare-function realgud-cmdbuf?                     'realgud-buffer-command)
-(declare-function realgud-cmdbuf-info-divert-output?= 'realgud-buffer-command)
-(declare-function realgud-backtrace-mode (cmdbuf))
-(declare-function realgud:cmd-backtrace (arg))
-(declare-function realgud-cmdbuf-pat(key))
-(declare-function realgud-cmdbuf-info-in-srcbuf?= (arg))
-(declare-function realgud-get-cmdbuf 'realgud-buffer-helper)
-(declare-function realgud:file-loc-from-line 'realgud-file)
-(declare-function buffer-killed?       'realgud-helper)
-(declare-function realgud:loc-describe 'realgud-loc)
-
-(cl-defstruct realgud-backtrace-info
-  "debugger object/structure specific to a (top-level) program to be debugged."
-  (cmdbuf    nil)  ;; buffer of the associated debugger process
-  (cur-pos   0)    ;; Frame we are at
-  frame-ring       ;; ring of marks in buffer of frame numbers. The
-                   ;; text at that marker has additional properties about the
-                   ;; frame
-)
-
-(declare-function realgud:cmd-frame 'realgud-buffer-command)
-(declare-function realgud-get-cmdbuf(&optional opt-buffer))
-(declare-function realgud-command 'realgud-send)
-
-(make-variable-buffer-local (defvar realgud-backtrace-info))
-
-;: FIXME: not picked up from track. Why?
-(defvar realgud-track-divert-string nil)
-
-(defvar realgud-goto-entry-acc "")
-
-(defun realgud-get-buffer-base-name(string)
-  "Leading and ending * in string. For example:
-   *shell<2>* -> shell<2>
-   *foo shell* -> foo
-   buffer.c -> buffer.c"
-  (if (string-match "^[*]?\\([^*]+\\)[*]?$" string)
-      (let ((string-sans-stars (match-string 1 string)))
-       (if (string-match "\\(.+\\) shell" string-sans-stars)
-           (match-string 1 string-sans-stars)
-         string-sans-stars)
-       )
-    string
-    )
-)
-
-(defun realgud:backtrace-describe (&optional buffer)
-  (interactive "")
-  (unless buffer (setq buffer (current-buffer)))
-  (with-current-buffer buffer
-    (let ((frames (realgud-backtrace-info-frame-ring realgud-backtrace-info))
-         (frame)
-         (loc)
-         (i 0))
-      (switch-to-buffer (get-buffer-create "*Describe*"))
-      (while (and (< i (ring-length frames)) (setq frame (ring-ref frames i)))
-       (insert (format "*** %d\n" i))
-       (insert (format "%s\n" frame))
-       (when (markerp frame)
-         (with-current-buffer (marker-buffer frame)
-           (goto-char frame)
-           (setq loc (get-text-property (point) 'loc))
-         )
-         (when loc (realgud:loc-describe loc)))
-       (setq i (1+ i))
-      )
-    )
-    ))
-
-;; FIXME: create this in a new frame.
-(defun realgud:backtrace-init ()
-  (interactive)
-  (let ((buffer (current-buffer))
-       (cmdbuf (realgud-get-cmdbuf))
-       (process)
-       )
-    (with-current-buffer-safe cmdbuf
-      (let ((frame-pat (realgud-cmdbuf-pat "debugger-backtrace"))
-           (indicator-re (or (realgud-cmdbuf-pat "selected-frame-indicator")
-                             "->"))
-           (selected-frame-num)
-           (frame-pos-ring)
-           (sleep-count 0)
-           )
-       (unless frame-pat
-         (error "No 'debugger-backtrace' regular expression recorded for 
debugger %s"
-                (realgud-cmdbuf-debugger-name)))
-       (setq process (get-buffer-process (current-buffer)))
-       (realgud-cmdbuf-info-in-srcbuf?= (not (realgud-cmdbuf? buffer)))
-       (realgud-cmdbuf-info-divert-output?= t)
-       (setq realgud-track-divert-string nil)
-       (realgud:cmd-backtrace 0)
-       (while (and (eq 'run (process-status process))
-                   (null realgud-track-divert-string)
-                   (> 1000 (setq sleep-count (1+ sleep-count))))
-         (sleep-for 0.001)
-         )
-       (if (>= sleep-count 1000)
-           (message "Timeout on running debugger command")
-         ;; else
-         ;; (message "+++4 %s" realgud-track-divert-string)
-         (let ((bt-buffer (get-buffer-create
-                           (format "*Backtrace %s*"
-                                   (realgud-get-buffer-base-name
-                                    (buffer-name)))))
-               (divert-string realgud-track-divert-string)
-               )
-           (realgud-cmdbuf-info-bt-buf= bt-buffer)
-           (with-current-buffer bt-buffer
-             (setq buffer-read-only nil)
-             (delete-region (point-min) (point-max))
-             (if divert-string
-                 (let* ((triple
-                         (realgud:backtrace-add-text-properties
-                          frame-pat cmdbuf divert-string indicator-re))
-                        (string-with-props
-                         (ansi-color-filter-apply (car triple)))
-                        (frame-num-pos-list (cl-caddr triple))
-                        )
-                   (setq selected-frame-num (cadr triple))
-                   (insert string-with-props)
-                   ;; add marks for each position
-                   (realgud-backtrace-mode cmdbuf)
-                   (setq frame-pos-ring
-                         (make-ring (length frame-num-pos-list)))
-                   (dolist (pos frame-num-pos-list)
-                     (goto-char (1+ pos))
-                     (ring-insert-at-beginning frame-pos-ring (point-marker))
-                     )
-                   )
-               )
-             ;; realgud-backtrace-mode kills all local variables so
-             ;; we set this after. Alternatively change realgud-backtrace-mode.
-             (set (make-local-variable 'realgud-backtrace-info)
-                  (make-realgud-backtrace-info
-                   :cmdbuf cmdbuf
-                   :frame-ring frame-pos-ring
-                   ))
-             (if selected-frame-num
-                 (realgud-backtrace-moveto-frame selected-frame-num))
-             )
-           )
-         )
-       )
-      )
-    (unless cmdbuf
-      (message "Unable to find debugger command buffer for %s" buffer))
-    )
-  )
-
-(defun realgud-backtrace? ( &optional buffer)
-  "Return true if BUFFER is a debugger command buffer."
-  (with-current-buffer-safe
-   (or buffer (current-buffer))
-   (realgud-backtrace-info-set?)))
-
-
-(defalias 'realgud-backtrace-info? 'realgud-backtrace-info-p)
-
-(defun realgud-backtrace-info-set? ()
-  "Return true if realgud-backtrace-info is set."
-  (and (boundp 'realgud-backtrace-info)
-       realgud-backtrace-info
-       (realgud-backtrace-info? realgud-backtrace-info)))
-
-
-(defun realgud-backtrace-moveto-frame-selected ()
-  "Set point to the selected frame."
-  (interactive)
-  (if (realgud-backtrace?)
-      (let* ((cur-pos (realgud-sget 'backtrace-info 'cur-pos))
-            (ring-size (ring-size (realgud-sget 'backtrace-info 'frame-ring)))
-            )
-       (if (and cur-pos (> ring-size 0))
-           (realgud-backtrace-moveto-frame cur-pos)
-         ;else
-         (message "No frame information recorded")
-         )
-       )
-    )
-  )
-
-(defun realgud-backtrace-moveto-frame (num &optional _opt-buffer)
-  (if (integerp num)
-      (if (realgud-backtrace?)
-         (let* ((ring (realgud-sget 'backtrace-info 'frame-ring))
-                (marker (ring-ref ring num)))
-           (setf (realgud-backtrace-info-cur-pos realgud-backtrace-info) num)
-           (goto-char marker)
-           )
-       )
-    ; else
-    (message "frame number %s is not an integer" num)
-    )
-  )
-
-(defun realgud-backtrace-moveto-frame-next ()
-  "Set point to the next frame. If we are at the end, wrap to the
-beginning. Note that we are just moving in the backtrace buffer,
-not updating the frame stack."
-  (interactive)
-  (if (realgud-backtrace?)
-      (let* ((cur-pos (realgud-sget 'backtrace-info 'cur-pos))
-            (ring-size (ring-size (realgud-sget 'backtrace-info 'frame-ring)))
-            )
-       (if (and cur-pos (> ring-size 0))
-           (realgud-backtrace-moveto-frame (ring-plus1 cur-pos ring-size))
-         ;else
-         (message "No frame information recorded")
-         )
-       )
-    )
-  )
-
-(defun realgud-backtrace-moveto-frame-prev ()
-  "Set point to the next frame. If we are at the beginning, wrap to the
-end. Note that we are just moving in the backtrace buffer,
-not updating the frame stack."
-  (interactive)
-  (if (realgud-backtrace?)
-      (let* ((cur-pos (realgud-sget 'backtrace-info 'cur-pos))
-            (ring-size (ring-size (realgud-sget 'backtrace-info 'frame-ring)))
-            )
-       (if (and cur-pos (> ring-size 0))
-           (realgud-backtrace-moveto-frame (ring-minus1 cur-pos ring-size))
-         ;else
-         (message "No frame information recorded")
-         )
-      )
-    )
-  )
-
-(defun realgud-goto-frame-n-internal (keys)
-  (if (and (stringp keys)
-           (= (length keys) 1))
-      (progn
-        (setq realgud-goto-entry-acc (concat realgud-goto-entry-acc keys))
-        ;; Try to find the longest suffix.
-        (let ((acc realgud-goto-entry-acc))
-          (while (not (string= acc ""))
-            (if (not (realgud-goto-entry-try acc))
-                (setq acc (substring acc 1))
-              (realgud:cmd-frame (string-to-number acc))
-              ;; Break loop.
-              (setq acc "")))))
-    (message "`realgud-goto-frame-n' must be bound to a number key")))
-
-;; FIXME: replace with ring.
-(defun realgud-goto-entry-try (str)
-  "See if there is an entry with number STR.  If not return nil."
-  (goto-char (point-min))
-  (if (re-search-forward (concat "^[^0-9]*\\(" str "\\)[^0-9]") nil t)
-      (progn
-        (goto-char (match-end 1))
-        t)
-    nil))
-
-
-;; The following is split in two to facilitate debugging.
-(defun realgud-goto-entry-n-internal (keys)
-  (if (and (stringp keys)
-           (= (length keys) 1))
-      (progn
-        (setq realgud-goto-entry-acc (concat realgud-goto-entry-acc keys))
-        ;; Try to find the longest suffix.
-        (let ((acc realgud-goto-entry-acc)
-              (p (point)))
-          (while (not (string= acc ""))
-            (if (not (realgud-goto-entry-try acc))
-                (setq acc (substring acc 1))
-              (setq p (point))
-              ;; Break loop.
-              (setq acc "")))
-          (goto-char p)))
-    (message "`realgud-goto-entry-n' must be bound to a number key")))
-
-
-(defun realgud-goto-entry-n ()
-  "Go to an entry number.
-
-Breakpoints, Display expressions and Stack Frames all have
-numbers associated with them which are distinct from line
-numbers.  In a secondary buffer, this function is usually bound to
-a numeric key which will position you at that entry number.  To
-go to an entry above 9, just keep entering the number.  For
-example, if you press 1 and then 9, you should jump to entry
-1 (if it exists) and then 19 (if that exists).  Entering any
-non-digit will start entry number from the beginning again."
-  (interactive)
-  (if (not (eq last-command 'realgud-goto-entry-n))
-      (setq realgud-goto-entry-acc ""))
-  (realgud-goto-entry-n-internal (this-command-keys)))
-
-(defun realgud-goto-frame ()
-  "Go to the frame number. We get the frame number from the
-'frame-num property"
-  (interactive)
-  (if (realgud-backtrace?)
-      (let ((frame-num (get-text-property (point) 'frame-num)))
-       (if frame-num
-           (realgud:cmd-frame frame-num)
-         (message "No frame property found at this point")
-         )
-       )
-    )
-  )
-
-(defun realgud-goto-frame-1 ()
-  "Go to the frame 1"
-  (interactive)
-  (if (realgud-backtrace?)
-      (realgud:cmd-frame 1)
-    )
-  )
-
-(defun realgud-goto-frame-2 ()
-  "Go to the frame 2"
-  (interactive)
-  (if (realgud-backtrace?)
-      (realgud:cmd-frame 2)
-    )
-  )
-
-(defun realgud-goto-frame-3 ()
-  "Go to the frame 3"
-  (interactive)
-  (if (realgud-backtrace?)
-      (realgud:cmd-frame 3)
-    )
-  )
-
-(defun realgud-goto-frame-mouse (event)
-  (interactive "e")
-  (let* ((pos (posn-point (event-end event)))
-        (frame-num (get-text-property pos 'frame-num)))
-    (if (realgud-backtrace?)
-       (if frame-num
-           (realgud:cmd-frame frame-num)
-         (message "No frame property found at this point")
-         )
-      )
-    )
-)
-
-(defun realgud-goto-frame-n ()
-  "Go to the frame number indicated by the accumulated numeric keys just 
entered.
-
-This function is usually bound to a numeric key in a 'frame'
-secondary buffer. To go to an entry above 9, just keep entering
-the number. For example, if you press 1 and then 9, frame 1 is selected
-\(if it exists) and then frame 19 (if that exists). Entering any
-non-digit will start entry number from the beginning again."
-  (interactive)
-  (if (not (eq last-command 'realgud-goto-frame-n))
-      (setq realgud-goto-entry-acc ""))
-  (realgud-goto-frame-n-internal (this-command-keys)))
-
-(defun realgud:backtrace-add-text-properties(frame-pat cmdbuf &optional 
opt-string
-                                                      frame-indicator-re)
-  "Parse OPT-STRING or the current buffer and add frame properties: frame 
number,
-filename, line number, whether the frame is selected as text properties."
-
-  (let* ((string (or opt-string
-                   (buffer-substring (point-min) (point-max))
-                   ))
-        (stripped-string (ansi-color-filter-apply string))
-        (frame-regexp (realgud-loc-pat-regexp frame-pat))
-        (frame-group-pat (realgud-loc-pat-num frame-pat))
-        (file-group-pat (realgud-loc-pat-file-group frame-pat))
-        (line-group-pat (realgud-loc-pat-line-group frame-pat))
-        (alt-frame-num -1)
-        (last-pos 0)
-        (selected-frame-num nil)
-        (frame-num-pos-list '())
-        )
-    (while (string-match frame-regexp stripped-string last-pos)
-      (let ((frame-num-str) (frame-num) (line-num) (filename)
-           ;; FIXME: Remove hack that group 1 is always the frame indicator.
-           (frame-indicator
-            (substring stripped-string (match-beginning 1) (match-end 1)))
-           ;; From https://github.com/realgud/realgud/pull/192
-           ;; Each frame of backtrace is searched via string-match
-           ;; invocation and a position of the current frame is
-           ;; updated via (setq last-pos (match-end 0)) in the end of
-           ;; the loop. But somewhere in the body of the loop (I do
-           ;; not know exactly where), there is another call to
-           ;; string-match and it messes up all positions.
-           (whole-match-begin (match-beginning 0))
-           (whole-match-end (match-end 0))
-           (frame-num-pos)
-
-           )
-       (if frame-group-pat
-           (progn
-             (setq frame-num-str
-                   (substring stripped-string
-                              (match-beginning frame-group-pat)
-                              (match-end frame-group-pat)))
-             (setq frame-num (string-to-number frame-num-str))
-             (setq frame-num-pos (match-beginning frame-group-pat))
-             (cl-pushnew frame-num-pos frame-num-pos-list)
-             (add-text-properties (match-beginning frame-group-pat)
-                                  (match-end frame-group-pat)
-                                  (list 'mouse-face 'highlight
-                                        'help-echo "mouse-2: goto this frame"
-                                        'frame frame-num)
-                                  string)
-             )
-         ; else
-         (progn
-           (setq frame-num-str
-                   (substring stripped-string (match-beginning 0)
-                              (match-end 0)))
-           (setq frame-num (cl-incf alt-frame-num))
-           (setq frame-num-pos (match-beginning 0))
-           (cl-pushnew frame-num-pos frame-num-pos-list)
-           (add-text-properties (match-beginning 0) (match-end 0)
-                                (list 'mouse-face 'highlight
-                                      'help-echo "mouse-2: goto this frame"
-                                      'frame frame-num)
-                                string)
-           )
-         )
-       (when file-group-pat
-         (setq filename (substring stripped-string
-                                   (match-beginning file-group-pat)
-                                   (match-end file-group-pat)))
-         (add-text-properties (match-beginning file-group-pat)
-                              (match-end file-group-pat)
-                              (list 'mouse-face 'highlight
-                                    'help-echo "mouse-2: goto this file"
-                                    'action 'realgud:follow-event
-                                    'file filename)
-                              string)
-           )
-       (when line-group-pat
-         (let ((line-num-str (substring stripped-string
-                                   (match-beginning line-group-pat)
-                                   (match-end line-group-pat))))
-           (setq line-num (string-to-number (or line-num-str "1")))
-         ))
-
-       (when (and (stringp filename) (numberp line-num))
-         (let ((loc (realgud:file-loc-from-line filename line-num cmdbuf)))
-           (put-text-property whole-match-begin whole-match-end
-                              'loc loc string)
-           ))
-       (put-text-property whole-match-begin whole-match-end
-                          'frame-num  frame-num string)
-       (setq last-pos whole-match-end)
-
-       (if (string-match frame-indicator-re frame-indicator)
-         (setq selected-frame-num frame-num))
-       ))
-
-    (list string selected-frame-num (nreverse frame-num-pos-list))
-    )
-  )
-
-(provide-me "realgud-buffer-")
diff --git a/packages/realgud/realgud/common/buffer/command.el 
b/packages/realgud/realgud/common/buffer/command.el
deleted file mode 100644
index db159f8..0000000
--- a/packages/realgud/realgud/common/buffer/command.el
+++ /dev/null
@@ -1,482 +0,0 @@
-;; Copyright (C) 2015-2018 Free Software Foundation, Inc
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-;;; process-command buffer things
-
-(require 'load-relative)
-(require 'json)
-(require-relative-list
- '("../fringe"  "../loc" "../lochist" "../regexp")  "realgud-")
-(require-relative-list '("info")  "realgud-buffer-")
-
-(declare-function realgud-get-cmdbuf 'realgud-buffer-helper)
-
-(eval-when-compile
-  (byte-compile-disable-warning 'cl-functions)
-  ;; Somehow disabling cl-functions causes the erroneous message:
-  ;;   Warning: the function `reduce' might not be defined at runtime.
-  ;; FIXME: isolate, fix and/or report back to Emacs developers a bug
-  (byte-compile-disable-warning 'unresolved)
-  (defvar realgud-cmdbuf-info)
-  )
-(require 'cl-lib)
-
-(defface debugger-running
-  '((((class color) (min-colors 16) (background light))
-     (:foreground "Green4" :weight bold))
-    (((class color) (min-colors 88) (background dark))
-     (:foreground "Green1" :weight bold))
-    (((class color) (min-colors 16) (background dark))
-     (:foreground "Green" :weight bold))
-    (((class color)) (:foreground "green" :weight bold))
-    (t (:weight bold)))
-  "Face used to highlight debugger run information."
-  :group 'realgud
-  :version "24.3")
-
-(defface debugger-not-running
-  '((t :inherit font-lock-warning-face))
-  "Face used when debugger or process is not running."
-  :group 'realgud
-  :version "24.3")
-
-
-(cl-defstruct realgud-cmdbuf-info
-  "The debugger object/structure specific to a process buffer."
-  debugger-name        ;; Name of debugger
-  base-variable-name   ;; prefix used in variables pertinent to this
-                       ;; debugger sometimes it is the same as the debugger
-                       ;; and sometimes it is different
-  cmd-args             ;; Command-line invocation arguments
-  frame-switch?        ;; Should the selected window be the source buffer or
-                      ;; command buffer?
-  in-srcbuf?           ;; If true, selected window should be the source buffer.
-                      ;; Otherwise, the command buffer?
-  last-input-end       ;; point where input last ended. Set from
-                       ;; comint-last-input-end
-  prior-prompt-regexp  ;; regular expression prompt (e.g.
-                       ;; comint-prompt-regexp) *before* setting
-                       ;; loc-regexp
-  no-record?           ;; Should we update the location history?
-  in-debugger?         ;; True if we think we are in a debugger
-  src-shortkey?        ;; Are source buffers in realgud-short-key mode?
-  regexp-hash          ;; hash table of regular expressions appropriate for
-                       ;; this debugger. Eventually loc-regexp, file-group
-                       ;; and line-group below will removed and stored here.
-  srcbuf-list          ;; list of source buffers we have stopped at
-  bt-buf               ;; backtrace buffer if it exists
-  bp-list              ;; list of breakpoints
-  divert-output?       ;; Output is part of a conversation between front-end
-                       ;; debugger.
-  cmd-hash             ;; Allows us to remap command names like
-                       ;; quit => quit!
-  callback-loc-fn      ;; If we need, as in the case of Java, to do
-                       ;; special handling to map output to a file
-                       ;; location, this is set to that special
-                       ;; function
-  callback-eval-filter ;; If set, this function strip extraneous output
-                       ;; when evaluating an expression. For example,
-                       ;; some trepan debuggers expression values prefaced 
with:
-                       ;; $DB::D[0] =
-
-  ;; FIXME: REMOVE THIS and use regexp-hash
-  loc-regexp   ;; Location regular expression string
-  file-group
-  line-group
-  alt-file-group
-  alt-line-group
-  text-group
-  ignore-file-re
-
-  loc-hist     ;; ring of locations seen in the course of execution
-               ;; see realgud-lochist
-  starting-directory    ;; directory where initial debug command was issued.
-                        ;; this can be used to resolve relative file names
-  )
-(make-variable-buffer-local 'realgud-cmdbuf-info)
-(make-variable-buffer-local 'realgud-last-output-start)
-
-(defalias 'realgud-cmdbuf-info? 'realgud-cmdbuf-info-p)
-
-;; FIXME: figure out how to put in a loop.
-(realgud-struct-field-setter "realgud-cmdbuf-info" "bp-list")
-(realgud-struct-field-setter "realgud-cmdbuf-info" "bt-buf")
-(realgud-struct-field-setter "realgud-cmdbuf-info" "cmd-args")
-(realgud-struct-field-setter "realgud-cmdbuf-info" "last-input-end")
-(realgud-struct-field-setter "realgud-cmdbuf-info" "divert-output?")
-(realgud-struct-field-setter "realgud-cmdbuf-info" "frame-switch?")
-(realgud-struct-field-setter "realgud-cmdbuf-info" "in-srcbuf?")
-(realgud-struct-field-setter "realgud-cmdbuf-info" "no-record?")
-(realgud-struct-field-setter "realgud-cmdbuf-info" "prior-prompt-regexp")
-(realgud-struct-field-setter "realgud-cmdbuf-info" "src-shortkey?")
-(realgud-struct-field-setter "realgud-cmdbuf-info" "in-debugger?")
-(realgud-struct-field-setter "realgud-cmdbuf-info" "callback-loc-fn")
-(realgud-struct-field-setter "realgud-cmdbuf-info" "callback-eval-filter")
-(realgud-struct-field-setter "realgud-cmdbuf-info" "starting-directory")
-
-(defun realgud:cmdbuf-follow-buffer(event)
-  (interactive "e")
-  (let* ((pos (posn-point (event-end event)))
-        (buffer (get-text-property pos 'buffer)))
-    (find-file-other-window (buffer-file-name buffer))))
-
-(defun realgud:cmdbuf-buffers-describe (info)
-  (let* ((buffer-list (realgud-cmdbuf-info-srcbuf-list info))
-        (debugger-name (realgud-cmdbuf-info-debugger-name info))
-        (file-remap-name  (intern (format "realgud:%s-file-remap" 
debugger-name)))
-        (file-remap (and (boundp file-remap-name) (eval file-remap-name)))
-        (filename)
-        (remapped-filename)
-        )
-    (insert "** Source Buffers Seen (srcbuf-list)\n")
-
-    (dolist (buffer buffer-list)
-      (insert "  - ")
-      (put-text-property
-       (insert-text-button
-       (setq filename (buffer-name buffer))
-       'action 'realgud:cmdbuf-follow-buffer
-       'help-echo "mouse-2: visit this file")
-       (point)
-       'buffer buffer)
-      (when (setq remapped-filename (and file-remap (gethash filename 
file-remap)))
-       (insert (format "\tremapped to: %s" remapped-filename)))
-      (insert "\n")
-      )))
-
-;; FIXME: this is a cheat. We are inserting
-;; and afterwards inserting ""
-(defun realgud:cmdbuf-bp-list-describe (info)
-  (let ((bp-list (realgud-cmdbuf-info-bp-list info)))
-    (cond (bp-list
-          (insert "** Breakpoint list (bp-list)\n")
-          (dolist (loc bp-list "")
-            (let ((bp-num (realgud-loc-num loc)))
-              (insert (format "*** Breakpoint %d\n" bp-num))
-              (realgud:org-mode-append-loc loc))))
-         ;; Since we are inserting, the below in fact
-         ;; inserts nothing. The string return is
-         ;; aspirational for when this is fixed
-         (t "\n")
-         )))
-
-(defun realgud:org-mode-encode (header object)
-  "Return an org-mode representation of OBJECT as an org-mode string."
-  (format "%s%s" header
-         (cond ((not object) "nil\n")
-               ((stringp object)      (format "%s\n" object))
-               ((keywordp object)     (json-encode-string
-                                        (substring (symbol-name object) 1)))
-               ((symbolp object)      (json-encode-string
-                                        (symbol-name object)))
-               ((numberp object)      (json-encode-number object))
-               ((arrayp object)       (json-encode-array object))
-               ((hash-table-p object) (realgud:org-mode-encode-htable object))
-               ;; ((listp object)        (realgud:org-mode-encodelist object))
-               (t                     (signal 'error (list object))))))
-
-(defun realgud:org-mode-encode-htable (hash-table)
-  "Return an  org-mode representation of HASH-TABLE as a s."
-  (format "%s"
-         (json-join
-          (let (r)
-            (maphash
-             (lambda (k v)
-               (push (format
-                      "  - %s\t::\t%s" k (realgud:org-mode-encode v ""))
-                     r))
-             hash-table)
-            r)
-          "")))
-
-(defun realgud:cmdbuf-info-describe (&optional buffer)
-  "Display realgud-cmdcbuf-info fields of BUFFER.
-BUFFER is either a debugger command or source buffer. If BUFFER is not given
-the current buffer is used as a starting point.
-Information is put in an internal buffer called *Describe*."
-  (interactive "")
-  (setq buffer (realgud-get-cmdbuf buffer))
-  (if buffer
-      (with-current-buffer buffer
-       (lexical-let ((info realgud-cmdbuf-info)
-             (cmdbuf-name (buffer-name)))
-         (if info
-             (progn
-               (switch-to-buffer (get-buffer-create "*Describe*"))
-               (setq buffer-read-only 'nil)
-               (delete-region (point-min) (point-max))
-               ;;(insert "#+OPTIONS:    H:2 num:nil toc:t \\n:nil ::t |:t 
^:nil -:t f:t *:t tex:t d:(HIDE) tags:not-in-toc\n")
-               (insert (format "#+TITLE: Debugger info for %s
-
-This is based on an org-mode buffer. Hit tab to expand/contract sections.
-\n"
-                               cmdbuf-name))
-               (insert "** General Information (realgud-cmdbuf-info)\n")
-               ;; (insert "** General Information (")
-               ;; (insert-text-button
-               ;;  "realgud-cmdbuf-info"
-               ;;  ;; FIXME figure out how to set buffer to cmdbuf so we get 
cmdbuf value
-               ;;  'action (lambda(button) (describe-variable 
'realgud-cmdbuf-info))
-               ;;  'help-echo "mouse-2: help-on-variable")
-               ;; (insert ")\n")
-
-               (mapc 'insert
-                     (list
-                      (format "  - Debugger name     ::\t%s\n"
-                              (realgud-cmdbuf-info-debugger-name info))
-                      (format "  - Command-line args ::\t%s\n"
-                              (json-encode (realgud-cmdbuf-info-cmd-args 
info)))
-                      (format "  - Starting directory ::\t%s\n"
-                              (realgud-cmdbuf-info-starting-directory info))
-                      (format "  - Selected window should contain source? :: 
%s\n"
-                              (realgud-cmdbuf-info-in-srcbuf? info))
-                      (format "  - Last input end    ::\t%s\n"
-                              (realgud-cmdbuf-info-last-input-end info))
-                      (format "  - Source should go into short-key mode? :: 
%s\n"
-                              (realgud-cmdbuf-info-src-shortkey? info))
-                      (format "  - In debugger?      ::\t%s\n"
-                              (realgud-cmdbuf-info-in-debugger? info))
-
-                      (realgud:org-mode-encode "\n*** Remap table for debugger 
commands\n"
-                                                     
(realgud-cmdbuf-info-cmd-hash info))
-                      ;; (realgud:org-mode-encode "\n*** Backtrace buffer"
-                      ;;                               
(realgud-cmdbuf-info-bt-buf info))
-                      ;; (format "  - Backtrace buffer  ::\t%s\n"
-                      ;;   (realgud-cmdbuf-info-bt-buf info))
-                      ))
-               (insert "\n")
-               (realgud:cmdbuf-bp-list-describe info)
-               (insert "\n")
-               (realgud:cmdbuf-buffers-describe info)
-               (insert "\n")
-               (realgud:loc-hist-describe (realgud-cmdbuf-info-loc-hist info))
-               (insert "
-#+STARTUP: overview
-     #+STARTUP: content
-     #+STARTUP: showall
-     #+STARTUP: showeverything
-")
-               (goto-char (point-min))
-               (realgud:info-mode)
-               )
-           (message "realgud-cmdbuf-info is nil")
-         )
-       ))
-    (message "Buffer %s is not a debugger source or command buffer; nothing 
done."
-            (or buffer (current-buffer)))
-    )
-  )
-
-(defun realgud-cmdbuf? (&optional buffer)
-  "Return true if BUFFER is a debugger command buffer."
-  (with-current-buffer-safe
-   (or buffer (current-buffer))
-   (realgud-cmdbuf-info-set?)))
-
-(defun realgud-cmdbuf-info-set? ()
-  "Return true if realgud-cmdbuf-info is set."
-  (and (boundp 'realgud-cmdbuf-info)
-       realgud-cmdbuf-info
-       (realgud-cmdbuf-info? realgud-cmdbuf-info)))
-
-(defun realgud-cmdbuf-toggle-in-debugger? (&optional buffer)
-  "Toggle state of whether we think we are in the debugger or not"
-  (interactive "")
-  (setq buffer (realgud-get-cmdbuf buffer))
-  (if buffer
-      (with-current-buffer buffer
-       (realgud-cmdbuf-info-in-debugger?=
-        (not (realgud-sget 'cmdbuf-info 'in-debugger?)))
-       (message "Command buffer is in debugger?: %s\n"
-                (realgud-cmdbuf-info-in-debugger? realgud-cmdbuf-info))
-       (realgud-cmdbuf-mode-line-update)
-       )
-    (message "Buffer %s is not a debugger buffer; nothing done."
-            (or buffer (current-buffer)))
-    )
-  )
-
-(defun realgud-cmdbuf-stay-in-source-toggle (&optional buffer)
-  "Toggle state of whether we should stay in source code or not"
-  (interactive "")
-  (setq buffer (realgud-get-cmdbuf buffer))
-  (if buffer
-      (with-current-buffer buffer
-       (realgud-cmdbuf-info-in-srcbuf?=
-        (not (realgud-sget 'cmdbuf-info 'in-srcbuf?)))
-       (message "Selected window should contain source?: %s\n"
-                (realgud-cmdbuf-info-in-srcbuf? realgud-cmdbuf-info))
-       )
-    (message "Buffer %s is not a debugger buffer; nothing done."
-            (or buffer (current-buffer)))
-    )
-  )
-
-(defun realgud-cmdbuf-add-srcbuf(srcbuf &optional cmdbuf)
-  "Add SRCBUF to srcbuf-list field of INFO unless it is already included."
-  (setq cmdbuf (or cmdbuf (current-buffer)))
-  (if (realgud-cmdbuf? cmdbuf)
-      (with-current-buffer-safe cmdbuf
-       (unless (memq srcbuf (realgud-cmdbuf-info-srcbuf-list 
realgud-cmdbuf-info))
-         (setf (realgud-cmdbuf-info-srcbuf-list realgud-cmdbuf-info)
-               (cons srcbuf (realgud-cmdbuf-info-srcbuf-list 
realgud-cmdbuf-info))))
-       )
-    )
-  )
-
-(defun realgud-cmdbuf-set-shortkey(&optional cmdbuf unset)
-  (interactive "")
-  (setq cmdbuf (or cmdbuf (current-buffer)))
-  (if (realgud-cmdbuf? cmdbuf)
-      (with-current-buffer-safe cmdbuf
-       (setf (realgud-cmdbuf-info-src-shortkey? realgud-cmdbuf-info) (not 
unset))
-       (message "Set source to shortkey is now %s" (not unset))
-       ))
-  )
-
-(defun realgud-cmdbuf-command-string(cmd-buffer)
-  "Get the command string invocation for this command buffer"
-    (cond
-     ((realgud-cmdbuf? cmd-buffer)
-      (with-current-buffer cmd-buffer
-       (let*
-           ((cmd-args (realgud-sget 'cmdbuf-info 'cmd-args))
-            (result (car cmd-args)))
-         (and cmd-args
-              (reduce (lambda(result x)
-                        (setq result (concat result " " x)))
-                      cmd-args)))))
-     (t nil)))
-
-;; FIXME cmd-hash should not be optional. And while I am at it, remove
-;; parameters loc-regexp, file-group, and line-group which can be found
-;; inside pat-hash
-;;
-;; To do this however we need to fix up the caller
-;; realgud:track-set-debugger by changing realgud-pat-hash to store a hash
-;; rather than the loc, file, and line fields; those fields then get
-;; removed.
-
-(defun realgud-cmdbuf-init
-    (cmd-buf debugger-name regexp-hash &optional cmd-hash base-variable-name
-            starting-directory)
-  "Initialize CMD-BUF for a working with a debugger.
-DEBUGGER-NAME is the name of the debugger; REGEXP-HASH are debugger-specific
-values set in the debugger's init.el."
-  (with-current-buffer-safe cmd-buf
-    (let ((realgud-loc-pat (gethash "loc" regexp-hash))
-         (font-lock-keywords)
-         )
-      (setq realgud-cmdbuf-info
-           (make-realgud-cmdbuf-info
-            :in-srcbuf? nil
-            :debugger-name debugger-name
-             :base-variable-name (or base-variable-name debugger-name)
-            :loc-regexp (realgud-sget 'loc-pat 'regexp)
-            :file-group (realgud-sget 'loc-pat 'file-group)
-            :line-group (realgud-sget 'loc-pat 'line-group)
-            :alt-file-group (realgud-sget 'loc-pat 'alt-file-group)
-            :alt-line-group (realgud-sget 'loc-pat 'alt-line-group)
-            :text-group (realgud-sget 'loc-pat 'text-group)
-            :ignore-file-re (realgud-sget 'loc-pat 'ignore-file-re)
-            :loc-hist (make-realgud-loc-hist)
-            :regexp-hash regexp-hash
-            :bt-buf nil
-            :last-input-end (point-max)
-            :cmd-hash cmd-hash
-            :src-shortkey? t
-            :in-debugger? nil
-            :callback-loc-fn (gethash "loc-callback-fn" regexp-hash)
-            :callback-eval-filter (gethash "callback-eval-filter"
-                                           regexp-hash)
-            ))
-      (setq font-lock-keywords (realgud-cmdbuf-pat "font-lock-keywords"))
-      (if font-lock-keywords
-         (set (make-local-variable 'font-lock-defaults)
-              (list font-lock-keywords)))
-      )
-
-    (put 'realgud-cmdbuf-info 'variable-documentation
-        "Debugger object for a process buffer."))
-  )
-
-(defun realgud-cmdbuf-reset (cmd-buf)
-  "nil out variable realgud-cmdbuf-info in CMD-BUF"
-  (with-current-buffer-safe cmd-buf
-    (setq realgud-cmdbuf-info nil)
-  ))
-
-(defun realgud-cmdbuf-debugger-name (&optional cmd-buf)
-  "Return the debugger name recorded in the debugger command-process buffer."
-  (with-current-buffer-safe (or cmd-buf (current-buffer))
-    (if (realgud-cmdbuf?)
-       (realgud-sget 'cmdbuf-info 'debugger-name)
-      nil))
-  )
-
-(defun realgud-cmdbuf-pat(key)
-  "Extract regexp stored under KEY in a realgud-cmdbuf via realgud-cmdbuf-info"
-  (if (realgud-cmdbuf?)
-      (let*
-         ((debugger-name (realgud-cmdbuf-debugger-name))
-          (regexp-hash (gethash debugger-name realgud-pat-hash))
-          (loc-pat (gethash key regexp-hash)))
-       loc-pat)
-    nil))
-
-(defun realgud-cmdbuf-loc-hist(cmd-buf)
-  "Return the history ring of locations that a debugger
-command-process buffer has stored."
-  (with-current-buffer-safe cmd-buf
-    (realgud-sget 'cmdbuf-info 'loc-hist))
-)
-
-(defun realgud-cmdbuf-src-marker(cmd-buf)
-  "Return a marker to current source location stored in the history ring."
-  (with-current-buffer cmd-buf
-    (lexical-let* ((loc (realgud-loc-hist-item (realgud-cmdbuf-loc-hist 
cmd-buf))))
-      (and loc (realgud-loc-marker loc)))))
-
-(defun realgud-cmdbuf-mode-line-update (&optional opt-cmdbuf)
-  "Force update of command buffer to include process status"
-  (let ((cmdbuf (realgud-get-cmdbuf opt-cmdbuf))
-       (debug-status)
-       (status)
-       (cmd-process)
-       )
-    (if (and cmdbuf (buffer-name cmdbuf))
-       (with-current-buffer cmdbuf
-         (setq cmd-process (get-buffer-process cmdbuf))
-         (setq debug-status
-               (if (realgud-sget 'cmdbuf-info 'in-debugger?)
-                   " debugger"
-                 ""))
-         (setq status
-               (if cmd-process
-                   (list (propertize
-                          (format ":%s%s"
-                                  (process-status cmd-process) debug-status)
-                          'face 'realgud-debugger-running))
-                 (list (propertize ":not running" 'face
-                       'realgud-debugger-not-running))
-                 ))
-         (setq mode-line-process status)
-         ;; Force mode line redisplay soon.
-         (force-mode-line-update))
-      ))
-  )
-
-
-(provide-me "realgud-buffer-")
diff --git a/packages/realgud/realgud/common/buffer/helper.el 
b/packages/realgud/realgud/common/buffer/helper.el
deleted file mode 100644
index 97e73da..0000000
--- a/packages/realgud/realgud/common/buffer/helper.el
+++ /dev/null
@@ -1,181 +0,0 @@
-; Copyright (C) 2010, 2014 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-(require 'load-relative)
-(require-relative-list '("../fringe" "../helper" "../lochist")
-                      "realgud-")
-(require-relative-list '("command" "source" "backtrace") "realgud-buffer-")
-
-(declare-function realgud-backtrace?        'realgud-buffer-backtace)
-(declare-function realgud-cmdbuf?           'realgud-buffer-command)
-(declare-function realgud:loc-hist-describe 'realgud-lochist)
-(declare-function realgud-loc-hist-item     'realgud-lochist)
-(declare-function realgud-srcbuf?           'realgud-buffer-command)
-(declare-function buffer-killed?            'realgud-helper)
-
-(defvar realgud-cmdbuf-info)
-
-(defun realgud-get-cmdbuf-from-backtrace ( &optional opt-buffer)
-  "Return the command buffer associated with source
-OPT-BUFFER or if that is ommited `current-buffer' which is
-assumed to be a source-code buffer."
-  (let ((buffer (or opt-buffer (current-buffer))))
-    (if (realgud-backtrace? buffer)
-       (with-current-buffer-safe buffer
-         (realgud-sget 'backtrace-info 'cmdbuf))
-      nil)))
-
-(defun realgud-get-cmdbuf-from-srcbuf ( &optional opt-buffer)
-  "Return the command buffer associated with source
-OPT-BUFFER or if that is ommited `current-buffer' which is
-assumed to be a source-code buffer."
-  (let ((buffer (or opt-buffer (current-buffer))))
-    (if (realgud-srcbuf? buffer)
-       (with-current-buffer-safe buffer
-         (realgud-sget 'srcbuf-info 'cmdproc))
-      nil)))
-
-(defun realgud-get-srcbuf-from-cmdbuf ( &optional opt-buffer opt-loc)
-  "Return the source-code buffer associated with command
-OPT-BUFFER or if that is ommited `current-buffer' which is
-assumed to be a process-command buffer."
-  (let ((buffer (or opt-buffer (current-buffer))))
-    (if (realgud-cmdbuf? buffer)
-       (with-current-buffer-safe buffer
-         (let ((loc
-                (or opt-loc
-                    (realgud-loc-hist-item
-                     (realgud-cmdbuf-info-loc-hist realgud-cmdbuf-info)))))
-           (if loc
-               (marker-buffer (realgud-loc-marker loc))
-             nil)
-           ))
-      nil)))
-
-(defun realgud-get-srcbuf( &optional opt-buffer opt-loc)
-  "Return source-code buffer associated with OPT-BUFFER or
-`current-buffer' if that is omitted. nil is returned if we don't
-find anything. If we started out with a buffer that is set up to
-be a source-code buffer we will use that even though it might not
-be the source code buffer for the frame that the debugger is
-using. See also `realgud-get-current-srcbuf'."
-
-  (let ((buffer (or opt-buffer (current-buffer))))
-    (with-current-buffer-safe buffer
-      (cond
-       ;; Perhaps buffer is a source source-code buffer?
-       ((realgud-srcbuf? buffer) buffer)
-       ;; Perhaps buffer is a process-command buffer.
-       ((realgud-cmdbuf? buffer)
-       (realgud-get-srcbuf-from-cmdbuf buffer opt-loc))
-       (t nil)))))
-
-(defun realgud-get-current-srcbuf( &optional opt-buffer)
-  "Return the source-code buffer associated with OPT-BUFFER
-or `current-buffer' if that is omitted. nil is returned
-if we don't find anything."
-
-  (let ((buffer (or opt-buffer (current-buffer))))
-    (with-current-buffer-safe buffer
-      (let ((cmdbuf
-            (cond
-             ((realgud-srcbuf? buffer)
-              (realgud-get-cmdbuf-from-srcbuf buffer))
-             ((realgud-cmdbuf? buffer)
-              buffer)
-             (t nil))))
-       (if cmdbuf
-           (realgud-get-srcbuf-from-cmdbuf cmdbuf)
-         nil)))))
-
-(defun realgud-get-cmdbuf( &optional opt-buffer)
-  "Return the command buffer associated with OPT-BUFFER
-or `current-buffer' if that is omitted. nil is returned
-if we don't find anything."
-
-  (let ((buffer (or opt-buffer (current-buffer))))
-    (with-current-buffer-safe buffer
-      (cond
-       ;; Perhaps buffer is a process-command buffer?
-       ((realgud-cmdbuf? buffer) buffer)
-       ;; Perhaps buffer is a source-code buffer?
-       ((realgud-srcbuf? buffer)
-       (realgud-get-cmdbuf-from-srcbuf buffer))
-       ;; Perhaps buffer is a backtrace buffer?
-       ((realgud-backtrace? buffer)
-       (realgud-get-cmdbuf-from-backtrace buffer))
-       (t nil)))))
-
-(defun realgud-get-backtrace-buf( &optional opt-buffer)
-  "Return the backtrace buffer associated with
-OPT-BUFFER or if that is ommited `current-buffer'."
-  (let* ((buffer (or opt-buffer (current-buffer)))
-        (cmdbuf (realgud-get-cmdbuf buffer)))
-    (with-current-buffer-safe cmdbuf
-      (realgud-sget 'cmdbuf-info 'bt-buf)
-      ))
-  )
-
-(defun realgud-get-process (&optional opt-buffer)
-  "Return the process buffer associated with OPT-BUFFER or
-  `current-buffer' if that is omitted. nil is returned if
-we don't find anything."
-  (let* ((buffer (or opt-buffer (current-buffer)))
-        (cmdbuf (realgud-get-cmdbuf buffer)))
-    (if cmdbuf
-       (get-buffer-process cmdbuf)
-      nil)
-    )
-)
-
-(defun realgud:srcbuf-info-describe (&optional buffer)
-  "Provide descriptive information of the buffer-local variable
-`realgud-srcbuf-info', a defstruct. BUFFER if given is the buffer to
-use to get the information from.
-"
-  (interactive "")
-  (setq buffer (realgud-get-srcbuf buffer))
-  (if buffer
-      (with-current-buffer buffer
-       (let ((info realgud-srcbuf-info)
-             (srcbuf-name (buffer-name))
-             (a1 realgud-overlay-arrow1)
-             (a2 realgud-overlay-arrow2)
-             (a3 realgud-overlay-arrow3)
-             )
-         (switch-to-buffer (get-buffer-create "*Describe*"))
-         (delete-region (point-min) (point-max))
-         (mapc 'insert
-               (list
-                (format "srcbuf-info for %s\n" srcbuf-name)
-                (format "Was previously read only?: %s\n"
-                        (realgud-srcbuf-info-was-read-only? info))
-                (format "Command Process buffer: %s\n"
-                        (realgud-srcbuf-info-cmdproc info))
-
-                ;; FIXME This info isn't part of the src info structure.
-                (format "Overlay arrow 1: %s\n" a1)
-                (format "Overlay arrow 2: %s\n" a2)
-                (format "Overlay arrow 3: %s\n" a3)
-                (format "Location history:\n")
-                ))
-         (realgud:loc-hist-describe  (realgud-srcbuf-info-loc-hist info))
-         )
-       )
-    (message "Buffer %s is not a debugger source buffer; nothing done."
-            (or buffer (current-buffer)))
-    )
-  )
-
-(provide-me "realgud-buffer-")
diff --git a/packages/realgud/realgud/common/buffer/info.el 
b/packages/realgud/realgud/common/buffer/info.el
deleted file mode 100644
index 246f302..0000000
--- a/packages/realgud/realgud/common/buffer/info.el
+++ /dev/null
@@ -1,64 +0,0 @@
-;; Copyright (C) 2015-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/>.
-;;; process-command buffer things
-
-;;; A mode based off of org mode to show debugger information
-
-(eval-when-compile (require 'cl-lib))
-(require 'org)
-
-(require 'load-relative)
-
-(cl-defstruct realgud-backtrace-info
-  "debugger object/structure specific to debugger info."
-  (cmdbuf    nil)  ;; buffer of the associated debugger process
-)
-
-;; Can't load because this causes a cyclic dependency on
-;; buffer/commands via cmd and buffer/commands uses us.
-;; (require-relative-list  '("menu") "realgud-")
-
-;; FIXME: full definition is in menu.
-(defvar realgud:info-mode-map)
-
-(defcustom realgud:info-mode-hook '()
-  "Hook for customizing realgud info mode."
-  :type 'hook
-  :group 'realgud)
-
-
-(define-derived-mode realgud:info-mode org-mode "Debugger Info"
-  "Major mode for interacting realgud debugger information."
-  (use-local-map realgud:info-mode-map)
-  (setq buffer-read-only t)
-  )
-
-;; FIXME:
-;; (defvar realgud:info-mode-map
-;;   (realgud-populate-debugger-menu
-;;           (make-sparse-keymap "Debugger")))
-
-;; (define-key realgud:info-mode-map [menu-bar debugger]
-;;   (cons "Debugger" (realgud-populate-debugger-menu
-;;           (make-sparse-keymap "Debugger"))))
-
-;; (define-key realgud:info-mode-map [menu-bar debugger backtrace]
-;;   '("Backtrace" . realgud:window-bt))
-;;(define-key realgud:info-mode-map  [menu-bar debugger command]
-;;  '("Go to Command Buffer" . realgud-window-cmd-undisturb-src))
-;;(define-key realgud:info-mode-map [menu-bar debugger source]
-;;  '("Go to Source Buffer" . realgud-window-src-undisturb-cmd))
-
-(provide-me "realgud-buffer-")
diff --git a/packages/realgud/realgud/common/buffer/source.el 
b/packages/realgud/realgud/common/buffer/source.el
deleted file mode 100644
index c609e42..0000000
--- a/packages/realgud/realgud/common/buffer/source.el
+++ /dev/null
@@ -1,208 +0,0 @@
-;;; Copyright (C) 2010, 2012-2015, 2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;;; source-code buffer code
-(eval-when-compile
-  (defvar realgud-srcbuf-info) ;; is buffer local
-  (defvar realgud-cmdbuf-info) ;; in the cmdbuf, this is buffer local
-  )
-
-(require 'cl-lib)
-(require 'load-relative)
-(require-relative-list '("../helper" "../key") "realgud-")
-
-(declare-function realgud-populate-common-keys 'realgud-menu)
-(declare-function buffer-killed?               'realgud-helper)
-(declare-function buffer-loc-line-number?      'realgud-loc)
-(declare-function realgud-cmdbuf-add-srcbuf    'realgud-cmdbuf)
-(declare-function realgud-cmdbuf-info-bp-list  'realgud-cmdbuf)
-(declare-function realgud-cmdbuf?              'realgud-cmdbuf)
-(declare-function realgud-loc-marker           'realgud-loc)
-(declare-function realgud-loc-line-number      'realgud-loc)
-(declare-function realgud-loc-num              'realgud-loc)
-(declare-function make-realgud-loc-hist        'realgud-lochist)
-(declare-function realgud-get-srcbuf           'helper)
-(declare-function realgud-short-key-mode-setup 'realgud-shortkey)
-
-(cl-defstruct realgud-srcbuf-info
-  "debugger object/structure specific to a (top-level) source program
-to be debugged."
-  cmdproc        ;; buffer of the associated debugger process
-  cur-pos        ;; If not nil, the debugger thinks we are currently
-                ;; positioned at a corresponding place in the
-                ;; program.
-  short-key?     ;; Was the source buffer previously in short-key
-                ;; mode? Used to deterimine when short-key mode
-                ;; changes state in a source buffer, so we need to
-                ;; perform on/off actions.
-  was-read-only? ;; Was buffer initially read only? (i.e. the original
-                ;; value of the buffer's buffer-read-only
-                ;; variable. Short-key-mode may change the read-only
-                ;; state, so we need restore this value when leaving
-                ;; short-key mode
-  prev-local-map ;; Local map before enabling short-key-mode
-
-  loc-hist       ;; ring of locations seen
-
-  ;; FILL IN THE FUTURE
-  ;;(brkpt-alist '())  ;; alist of breakpoints the debugger has referring
-                       ;; to this buffer. Each item is (brkpt-name . marker)
-  ;;
-)
-
-
-(defalias 'realgud-srcbuf-info? 'realgud-srcbuf-p)
-
-;; FIXME: figure out how to put in a loop.
-(realgud-struct-field-setter "realgud-srcbuf-info" "cmdproc")
-(realgud-struct-field-setter "realgud-srcbuf-info" "short-key?")
-(realgud-struct-field-setter "realgud-srcbuf-info" "was-read-only?")
-(realgud-struct-field-setter "realgud-srcbuf-info" "prev-local-map")
-
-(defun realgud-srcbuf-info-set? ()
-  "Return non-nil if `realgud-srcbuf-info' is set."
-  (and (bound-and-true-p realgud-srcbuf-info)
-       (realgud-srcbuf-info? realgud-srcbuf-info)))
-
-(defun realgud-srcbuf? (&optional buffer)
-  "Return non-nil if BUFFER is a debugger source buffer."
-  (with-current-buffer-safe (or buffer (current-buffer))
-    (and (realgud-srcbuf-info-set?)
-        (not (buffer-killed? (realgud-sget 'srcbuf-info 'cmdproc)))
-   )))
-
-(defun realgud--read-cmd-buf (prompt)
-  "Read a command buffer, prompting with PROMPT."
-  (let* ((cmd-bufs (cl-remove-if-not #'realgud-cmdbuf? (buffer-list)))
-         (buf-names (mapcar #'buffer-name cmd-bufs))
-         (default (car buf-names)))
-    (when buf-names
-      ;; Use completing-read instead of read-buffer: annoyingly, ido's
-      ;; read-buffer ignores predicates.
-      (setq prompt (format "%s (default: %s): " prompt default))
-      (get-buffer (completing-read prompt buf-names nil t nil nil default)))))
-
-(defun realgud--ensure-attached (&optional src-buf)
-  "Try to attach SRC-BUF to a command buffer.
-If SRC-BUF is already attached, do nothing.  Otherwise, prompt
-the user for a command buffer to associate SRC-BUF to.  Returns
-non-nil if association was successful.  SRC-BUF defaults to
-current buffer."
-  (setq src-buf (or src-buf (current-buffer)))
-  (unless (realgud-srcbuf? src-buf)
-    (let ((cmd-buf (realgud--read-cmd-buf "Command buffer to attach to")))
-      (if cmd-buf
-          (realgud-srcbuf-init src-buf cmd-buf)
-        (message "No debugger process found to attach %s to" (buffer-name)))))
-  (realgud-srcbuf? src-buf))
-
-(defun realgud-srcbuf-debugger-name (&optional src-buf)
-  "Return the debugger name recorded in the debugger command-process buffer."
-  (with-current-buffer-safe (or src-buf (current-buffer))
-    (realgud-sget 'srcbuf-info 'debugger-name))
-)
-
-(defun realgud-srcbuf-loc-hist(src-buf)
-  "Return the history ring of locations that a debugger process has stored."
-  (with-current-buffer-safe src-buf
-    (realgud-sget 'srcbuf-info 'loc-hist))
-)
-
-(declare-function fn-p-to-fn?-alias(sym))
-(fn-p-to-fn?-alias 'realgud-srcbuf-info-p)
-(declare-function realgud-srcbuf-info?(var))
-(declare-function realgud-cmdbuf-info-name(cmdbuf-info))
-
-;; FIXME: support a list of cmdprocs's since we want to allow
-;; a source buffer to potentially participate in several debuggers
-;; which might be active.
-(make-variable-buffer-local 'realgud-srcbuf-info)
-
-(defun realgud-srcbuf-init
-  (src-buffer cmdproc-buffer)
-  "Initialize SRC-BUFFER as a source-code buffer for a debugger.
-CMDPROC-BUFFER is the process-command buffer containing the
-debugger."
-  (with-current-buffer cmdproc-buffer
-    (set-buffer src-buffer)
-    (set (make-local-variable 'realgud-srcbuf-info)
-        (make-realgud-srcbuf-info
-         :cmdproc cmdproc-buffer
-         :loc-hist (make-realgud-loc-hist)))
-    (put 'realgud-srcbuf-info 'variable-documentation
-        "Debugger information for a buffer containing source code.")))
-
-(defun realgud-srcbuf-init-or-update (src-buffer cmdproc-buffer)
-  "Call `realgud-srcbuf-init' for SRC-BUFFER update `realgud-srcbuf-info' 
variables
-in it with those from CMDPROC-BUFFER"
-  (realgud-cmdbuf-add-srcbuf src-buffer cmdproc-buffer)
-  (with-current-buffer-safe src-buffer
-    (realgud-populate-common-keys
-     ;; use-local-map returns nil so e have to call (current-local-map)
-     ;; again in this case.
-     (or (current-local-map) (use-local-map (make-sparse-keymap))
-        (current-local-map)))
-    (if (realgud-srcbuf-info? realgud-srcbuf-info)
-       (realgud-srcbuf-info-cmdproc= cmdproc-buffer)
-      (realgud-srcbuf-init src-buffer cmdproc-buffer))))
-
-(defun realgud:cmdbuf-associate ()
-  "Associate a command buffer with the current (source-code) buffer."
-  ;; realgud-short-key-mode-setup will attempt to associate if needed.
-  (realgud-short-key-mode-setup t))
-
-(defun realgud-srcbuf-bp-list(&optional buffer)
-  "Return a list of breakpoint loc structures that reside in
-BUFFER. BUFFER should be an initialized source buffer."
-  (let ((src-buffer (realgud-get-srcbuf buffer)))
-    (if src-buffer
-       (with-current-buffer src-buffer
-       (let* ((info realgud-srcbuf-info)
-              (cmdbuf (realgud-srcbuf-info-cmdproc info)))
-         (with-current-buffer cmdbuf
-           (let ((bp-list
-                  (realgud-cmdbuf-info-bp-list realgud-cmdbuf-info)))
-             (delq nil
-                   (mapcar (lambda (loc)
-                             (cond ((eq src-buffer
-                                        (marker-buffer (realgud-loc-marker 
loc)))
-                                    loc)
-                                   (nil)))
-                           bp-list))
-             )))))))
-
-(defun realgud-get-bpnum-from-line-num(line-num &optional buffer)
-  "Find a breakpoint number associated with LINE-NUM in source code BUFFER.
-If none exists return nil"
-  (let ((src-buffer (realgud-get-srcbuf buffer))
-       (bp-num nil)
-       (bp)
-       (bp-list)
-       )
-    (if src-buffer
-       (progn
-         (setq bp-list (realgud-srcbuf-bp-list src-buffer))
-         (while (and (not bp-num) bp-list)
-           (setq bp (car bp-list))
-           (setq bp-list (cdr bp-list))
-           (if (eq line-num (realgud-loc-line-number bp))
-               (setq bp-num (realgud-loc-num bp)))
-           ))
-      )
-    bp-num))
-
-(provide-me "realgud-buffer-")
diff --git a/packages/realgud/realgud/common/cmds.el 
b/packages/realgud/realgud/common/cmds.el
deleted file mode 100644
index 594b8a0..0000000
--- a/packages/realgud/realgud/common/cmds.el
+++ /dev/null
@@ -1,447 +0,0 @@
-;; Copyright (C) 2015-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-(require 'load-relative)
-(require 'thingatpt)
-(require-relative-list  '("send" "core") "realgud-")
-(require-relative-list  '("buffer/command") "realgud-buffer-")
-(require-relative-list  '("buffer/source") "realgud-buffer-")
-
-(declare-function buffer-killed? 'helper)
-(declare-function realgud-cmdbuf-info-in-srcbuf?=   'realgud-buffer-command)
-(declare-function realgud-cmdbuf?      'realgud-buffer-command)
-(declare-function realgud-command      'realgud-send)
-(declare-function realgud-get-cmdbuf   'realgud-buffer-helper)
-(declare-function realgud-get-command  'realgud-buffer-command)
-(declare-function realgud-get-bpnum-from-line-num 'realgud-buffer-source)
-
-(declare-function realgud:terminate 'realgud-core)
-(declare-function realgud:terminate-srcbuf 'realdgud-core)
-
-(defcustom realgud-safe-mode t
-  "Confirm certain commands before running them.
-Similar to GDB's “set confirm”."
-  :type 'boolean
-  :group 'realgud)
-
-(defun realgud:prompt-if-safe-mode(message)
-  "Ask use to confirm current command if in safe mode.
-Use MESSAGE plus a space as the prompt string.  Do not confirm
-when command was run from a menu."
-  (if (and realgud-safe-mode
-           last-nonmenu-event
-           (not (equal last-nonmenu-event '(tool-bar))))
-      (when (y-or-n-p (concat message " "))
-        (run-with-timer
-         0 nil #'message
-         "Customize `realgud-safe-mode' to disable confirmation prompts.")
-        t)
-    t))
-
-(defun realgud:cmd--line-number-from-prefix-arg ()
-  "Guess or read a line number based on prefix arg.
-Returns (nil) for current line, and a list whose car is the line
-number otherwise."
-  (cond
-   ((numberp current-prefix-arg)
-    current-prefix-arg)
-   ((consp current-prefix-arg)
-    (let* ((min-line (save-excursion
-                       (goto-char (point-min))
-                       (line-number-at-pos)))
-           (max-line (save-excursion
-                       (goto-char (point-max))
-                       (line-number-at-pos)))
-           (prompt (format "Line number (%d..%d)? " min-line max-line))
-           (picked-line 0))
-      (while (not (<= min-line picked-line max-line))
-        (setq picked-line (read-number prompt)))
-      (list picked-line)))))
-
-(defmacro realgud:cmd--with-line-override (line &rest body)
-  "Run BODY with %l format specifier bound to LINE.
-This is needed because going to LINE explicitly would interfere
-with other motion initiated by debugger messages."
-  (declare (indent 1)
-           (debug t))
-  (let ((line-var (make-symbol "--line--")))
-    `(let* ((,line-var ,line)
-            (realgud-expand-format-overrides
-             (cons (cons ?l (and ,line-var (number-to-string ,line-var)))
-                   realgud-expand-format-overrides)))
-       ,@body)))
-
-(defconst realgud-cmd:default-hash
-  (let ((hash (make-hash-table :test 'equal)))
-    (puthash "backtrace"   "backtrace" hash)
-    (puthash "break"       "break %X:%l" hash)
-    (puthash "break_fn"    "break %s" hash)
-    (puthash "clear"       "clear %l" hash)
-    (puthash "continue"    "continue" hash)
-    (puthash "delete"      "delete %p" hash)
-    (puthash "delete_all"  "delete" hash)
-    (puthash "disable"     "disable %p" hash)
-    (puthash "disable_all" "disable" hash)
-    (puthash "down"        "down %p" hash)
-    (puthash "enable"      "enable %p" hash)
-    (puthash "enable_all"  "enable" hash)
-    (puthash "eval"        "eval %s" hash)
-    (puthash "finish"      "finish" hash)
-    (puthash "frame"       "frame %p" hash)
-    (puthash "help"        "help" hash)
-    (puthash "jump"        "jump %l" hash)
-    (puthash "kill"        "kill" hash)
-    (puthash "next"        "next %p" hash)
-    (puthash "repeat-last" "\n" hash)
-    (puthash "restart"     "run" hash)
-    (puthash "shell"       "shell" hash)
-    (puthash "step"        "step %p" hash)
-    (puthash "until"       "until" hash)
-    (puthash "up"          "up %p" hash)
-    hash)
-  "Default hash of command name → debugger command.
-This is used as a fallback when the debugger-specific command
-hash does not specify a custom debugger command.")
-
-(defun realgud:cmd-run-command(arg cmd-name &optional
-                                   default-cmd-template no-record?
-                                   frame-switch? realgud-prompts?)
-  "Run debugger command CMD-NAME.
-If CMD-NAME isn't set in the command buffer's command hash, use
-DEFAULT-CMD-TEMPLATE and fall back to looking CMD-NAME up in
-`realgud:cmd-get-cmd-hash'."
-  (let* ((buffer (current-buffer))
-         (cmdbuf (realgud-get-cmdbuf))
-         (cmd-hash (with-current-buffer-safe cmdbuf
-                     (realgud-cmdbuf-info-cmd-hash realgud-cmdbuf-info)))
-         (cmd (or (and (hash-table-p cmd-hash)
-                       (gethash cmd-name cmd-hash))
-                  default-cmd-template
-                  (gethash cmd-name realgud-cmd:default-hash))))
-    (if (or (null cmd) (equal cmd "*not-implemented*"))
-       (message "Command %s is not implemented for this debugger" cmd-name)
-      (progn
-        ;; Set flag to know which buffer to jump back to
-        (with-current-buffer-safe cmdbuf
-          (realgud-cmdbuf-info-in-srcbuf?= (not (realgud-cmdbuf? buffer))))
-        ;; Run actual command
-       (realgud-command cmd arg no-record? frame-switch? realgud-prompts?)
-       ;; FIXME: Figure out how to update the position if the source
-       ;; buffer is displayed.
-       ;; (if frame-switch?
-       ;;      (let* ((src-buffer (realgud-get-srcbuf-from-cmdbuf cmdbuf))
-       ;;             (src-window (get-buffer-window src-buffer))
-       ;;             ))
-       ;;        (with-selected-window src-window
-       ;;          (message "recentering...")
-       ;;          (realgud-recenter-arrow)
-       ;;        ))
-        )
-      )
-    ))
-
-(defun realgud:cmd-remap (arg cmd-name default-cmd-template
-                              &optional key no-record? frame-switch?
-                              realgud-prompts?)
-  "Compatibility alias for `realgud:cmd-run-command'.
-ARG, CMD-NAME, DEFAULT-CMD-TEMPLATE are as in `realgud:cmd-run-command'.
-KEY is ignored.  NO-RECORD?, FRAME-SWITCH?, REALGUD-PROMPTS? are
-as in `realgud:cmd-run-command'."
-  (realgud:cmd-run-command arg cmd-name default-cmd-template
-                           no-record? frame-switch?
-                           realgud-prompts?))
-
-(make-obsolete 'realgud:cmd-remap 'realgud:cmd-run-command "1.3.1")
-
-(defun realgud:cmd-backtrace(arg)
-  "Show the current call stack."
-  (interactive "p")
-  (realgud:cmd-run-command arg "backtrace")
-  )
-
-(defun realgud:cmd-break (&optional line-number)
-  "Set a breakpoint at the current line.
-With prefix argument LINE-NUMBER, prompt for line number."
-  (interactive (realgud:cmd--line-number-from-prefix-arg))
-  (realgud:cmd--with-line-override line-number
-                                   (realgud:cmd-run-command line-number 
"break")))
-
-(defun realgud:cmd-clear(&optional line-number)
-  "Delete breakpoint at the current line.
-With prefix argument LINE-NUMBER, prompt for line number."
-  (interactive (realgud:cmd--line-number-from-prefix-arg))
-  (realgud:cmd--with-line-override line-number
-                                   (realgud:cmd-run-command line-number 
"clear")))
-
-(defun realgud:cmd-jump(&optional line-number)
-  "Jump to current line.
-With prefix argument LINE-NUMBER, prompt for line number."
-  (interactive (realgud:cmd--line-number-from-prefix-arg))
-  (realgud:cmd--with-line-override line-number
-    (realgud:cmd-run-command (line-number-at-pos) "jump")))
-
-(defun realgud:cmd-continue(&optional arg)
-    "Continue execution.
-With prefix argument ARG, prompt for argument to \"continue\"
-command.  In safe mode (or with prefix arg), confirm before
-running."
-    (interactive (when (consp current-prefix-arg)
-                   (list (read-string "Continue args: " nil nil nil t))))
-    (when (or arg (realgud:prompt-if-safe-mode
-                   "Continue to next breakpoint?"))
-      (realgud:cmd-run-command arg "continue")))
-
-(defun realgud:bpnum-on-current-line()
-  "Return number of one breakpoint on current line, if any.
-If none is found, return nil."
-  (realgud-get-bpnum-from-line-num (line-number-at-pos)))
-
-(defun realgud:bpnum-from-prefix-arg()
-  "Return number of one breakpoint on current line, if any.
-If none is found, or if `current-prefix-arg' is a cons (i.e. a
-C-u prefix arg), ask user for a breakpoint number.  If
-`current-prefix-arg' is a number (i.e. a numeric prefix arg),
-return it unmodified."
-  (let ((must-prompt (consp current-prefix-arg))
-        (current-bp (realgud:bpnum-on-current-line)))
-    (list
-     (if (numberp current-prefix-arg)
-         current-prefix-arg
-       (or (and (not must-prompt) current-bp)
-           (read-number "Breakpoint number: " current-bp))))))
-
-(defun realgud:cmd-delete(bpnum)
-    "Delete breakpoint by number.
-Interactively, find breakpoint on current line, if any.  With
-numeric prefix argument, delete breakpoint with that number
-instead.  With prefix argument (C-u), or when no breakpoint can
-be found on the current line, prompt for a breakpoint number."
-    (interactive (realgud:bpnum-from-prefix-arg))
-    (realgud:cmd-run-command bpnum "delete"))
-
-(defun realgud:cmd-disable(bpnum)
-    "Disable breakpoint BPNUM.
-Interactively, find breakpoint on current line, if any.  With
-numeric prefix argument, disable breakpoint with that number
-instead.  With prefix argument (C-u), or when no breakpoint can
-be found on the current line, prompt for a breakpoint number."
-    (interactive (realgud:bpnum-from-prefix-arg))
-    (realgud:cmd-run-command bpnum "disable"))
-
-(defun realgud:cmd-enable(bpnum)
-    "Enable breakpoint BPNUM.
-Interactively, find breakpoint on current line, if any.  With
-numeric prefix argument, enable breakpoint with that number
-instead.  With prefix argument (C-u), or when no breakpoint can
-be found on the current line, prompt for a breakpoint number."
-    (interactive (realgud:bpnum-from-prefix-arg))
-    (realgud:cmd-run-command bpnum "enable"))
-
-(defun realgud-cmds--add-remove-bp (pos)
-  "Add or delete breakpoint at POS."
-  (save-excursion
-    (goto-char pos)
-    (let ((existing-bp-num (realgud:bpnum-on-current-line)))
-      (if existing-bp-num
-          (realgud:cmd-delete existing-bp-num)
-        (realgud:cmd-break)))))
-
-(defun realgud-cmds--mouse-add-remove-bp (event)
-  "Add or delete breakpoint on line pointed to by EVENT.
-EVENT should be a mouse click on the left fringe or margin."
-  (interactive "e")
-  (let* ((posn (event-end event))
-         (pos (posn-point posn)))
-    (when (numberp pos)
-      (with-current-buffer (window-buffer (posn-window posn))
-        (realgud-cmds--add-remove-bp pos)))))
-
-(defun realgud:cmd-eval(arg)
-    "Evaluate an expression."
-    (interactive "MEval expression: ")
-    (realgud:cmd-run-command arg "eval")
-)
-
-(defun realgud:cmd-eval-region(start end)
-    "Evaluate current region."
-    (interactive "r")
-    (let ((text (buffer-substring-no-properties start end)))
-      (realgud:cmd-run-command text "eval")))
-
-(defun realgud:cmd-eval-dwim()
-  "Eval the current region if active; otherwise, prompt."
-  (interactive)
-  (call-interactively (if (region-active-p)
-                          #'realgud:cmd-eval-region
-                        #'realgud:cmd-eval)))
-
-(defun realgud:cmd-eval-at-point()
-  "Eval symbol under point."
-  (interactive)
-
-  (beginning-of-thing 'symbol)
-  (set-mark-command 'nil)
-  (end-of-thing 'symbol)
-
-  (realgud:cmd-run-command
-   (read-string "Eval: " (thing-at-point 'symbol))
-   "eval"))
-
-(defun realgud:cmd-finish(&optional arg)
-    "Run until the completion of the current stack frame.
-
-This command is often referred to as 'step out' as opposed to
-'step over' or 'step into'."
-    (interactive "p")
-    (realgud:cmd-run-command arg "finish")
-)
-
-(defun realgud:cmd-frame(arg)
-    "Change the current frame number to the value of the numeric argument.
-If no argument specified use 0 or the most recent frame."
-    (interactive "p")
-    (realgud:cmd-run-command arg "frame" nil t t)
-)
-
-(defun realgud:cmd-kill()
-  "Kill debugger process."
-  (interactive)
-  (realgud:cmd-run-command nil "kill" nil nil nil t))
-
-(defun realgud:cmd-newer-frame(&optional arg)
-    "Move the current frame to a newer (more recent) frame.
-With a numeric argument move that many levels forward."
-    (interactive "p")
-    (realgud:cmd-run-command arg "down" nil t t)
-)
-
-(defun realgud:cmd-next(&optional count)
-    "Step one source line at current call level.
-
-With numeric argument COUNT, step that many times. This command is
-often referred to as `step through' as opposed to `step into' or
-`step out'.
-
-The definition of `next' is debugger specific, so see the
-documentation of your debugger for a more complete definition of
-what is getting stepped."
-    (interactive "p")
-    (realgud:cmd-run-command count "next"))
-
-(defun realgud:cmd-next-no-arg()
-  "Step one source line at current call level.
-
-The definition of 'next' is debugger specific so, see the
-debugger documentation for a more complete definition of what is
-getting stepped."
-    (interactive)
-    (realgud:cmd-next))
-
-(defun realgud:cmd-older-frame(&optional arg)
-  "Move the current frame to an older (less recent) frame.
-With a numeric argument move that many levels back."
-    (interactive "p")
-    (realgud:cmd-run-command arg "up" nil t t)
-)
-
-(defun realgud:cmd-repeat-last()
-  "Repeat the last command (or generally what <enter> does."
-  (interactive)
-  (realgud:cmd-run-command nil "repeat-last" nil t nil t))
-
-(defun realgud:cmd-restart()
-  "Restart execution."
-  (interactive)
-  (if (realgud:prompt-if-safe-mode
-                "Restart program?")
-      (realgud:cmd-run-command nil "restart" nil t nil t)))
-
-(defun realgud:cmd-shell()
-  "Drop to a shell."
-  (interactive)
-  (realgud:cmd-run-command nil "shell"))
-
-(defun realgud:cmd-step(&optional count)
-    "Step one source line.
-
-With a numeric prefix argument COUNT, step that many times.
-This command is often referred to as `step into' as opposed to
-`step over' or `step out'.
-
-The definition of `step' is debugger specific, so see the
-documentation of your debugger for a more complete definition of
-what is getting stepped."
-    (interactive "p")
-    (realgud:cmd-run-command count "step"))
-
-(defun realgud:cmd-step-no-arg()
-    "Step one source line.
-
-The definition of `step' is debugger specific, so see the
-documentation of your debugger for a more complete definition of
-what is getting stepped."
-    (interactive)
-    (realgud:cmd-step))
-
-(defun realgud:cmd-terminate ()
-  "Gently terminate source and command buffers without possibly
-issuing a command to the underlying debuger.  Use this if the
-underlying debugger has died or you want to get out of all
-shortkey modes in the source window and possibly restart
-debugging after editing source."
-  (interactive)
-  (realgud:terminate (current-buffer))
-)
-
-(defun realgud:cmd-until(&optional arg)
-    "Run until the completion of the current stack frame.
-
-Continue until the current line. In some cases this is really
-two commands - setting a temporary breakpoint on the line and
-continuing execution."
-    (interactive "p")
-    (realgud:cmd-run-command arg "until")
-)
-
-(defun realgud:cmd-quit (&optional arg)
-  "Gently terminate execution of the debugged program."
-  (interactive "p")
-  (if (realgud:prompt-if-safe-mode
-                "Quit debugger?")
-      (let ((buffer (current-buffer))
-           (cmdbuf (realgud-get-cmdbuf))
-           (cmd-hash)
-           (cmd)
-           )
-       (if cmdbuf
-           (progn
-             (with-current-buffer cmdbuf
-               (realgud-cmdbuf-info-in-srcbuf?= (not (realgud-cmdbuf? buffer)))
-               (setq cmd-hash (realgud-cmdbuf-info-cmd-hash 
realgud-cmdbuf-info))
-               (unless (and cmd-hash (setq cmd (gethash "quit" cmd-hash)))
-                 (setq cmd "quit"))
-               )
-          (realgud-command cmd arg t)
-         (if cmdbuf (realgud:terminate cmdbuf))
-         )
-         ;; else
-         (realgud:terminate-srcbuf buffer)
-         )
-       )
-    ))
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/core.el 
b/packages/realgud/realgud/common/core.el
deleted file mode 100644
index 25de3d7..0000000
--- a/packages/realgud/realgud/common/core.el
+++ /dev/null
@@ -1,331 +0,0 @@
-;; Copyright (C) 2010-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;; (require 'term)
-
-(if (< emacs-major-version 24)
-    (error
-     "You need at least Emacs 24 or greater to run this - you have version %d"
-     emacs-major-version))
-
-(require 'comint)
-(require 'load-relative)
-(require 'loc-changes)
-(require-relative-list '("fringe" "helper" "lang" "reset")
-                      "realgud-")
-(require-relative-list '("buffer/command" "buffer/source") "realgud-buffer-")
-
-(declare-function comint-exec  'comint)
-(declare-function comint-mode  'comint)
-(declare-function realgud-bp-remove-icons             'realgud-bp)
-(declare-function realgud:suggest-file-from-buffer    'realgud-lang)
-(declare-function realgud-cmdbuf-args=                'realgud-buffer-command)
-(declare-function realgud-cmdbuf-command-string       'realgud-buffer-command)
-(declare-function realgud-cmdbuf-debugger-name        'realgud-buffer-command)
-(declare-function realgud-cmdbuf-info-bp-list=        'realgud-buffer-command)
-(declare-function realgud-cmdbuf-info-in-debugger?=   'realgud-buffer-command)
-(declare-function realgud-cmdbuf-info-starting-directory= 
'realgud-buffer-command)
-(declare-function realgud-cmdbuf-mode-line-update     'realgud-buffer-command)
-(declare-function realgud-cmdbuf?                     'realgud-helper)
-(declare-function realgud-command-string              'realgud-buffer-command)
-(declare-function realgud-fringe-erase-history-arrows 'realgud-buffer-command)
-(declare-function realgud-get-cmdbuf                  'realgud-helper)
-(declare-function realgud:reset                       'realgud-reset)
-(declare-function realgud-short-key-mode-setup        'realgud-shortkey)
-(declare-function realgud-srcbuf-command-string       'realgud-buffer-source)
-(declare-function realgud-srcbuf-debugger-name        'realgud-buffer-source)
-(declare-function realgud-srcbuf-init                 'realgud-buffer-source)
-(declare-function realgud-srcbuf?                     'realgud-buffer-source)
-(declare-function realgud-suggest-lang-file           'realgud-lang)
-
-(defvar realgud-srcbuf-info)
-(defvar starting-directory)
-
-(defun realgud:expand-file-name-if-exists (filename)
-  "Return FILENAME expanded using `expand-file-name' if that name exists.
-Otherwise, just return FILENAME."
-  (let* ((expanded-filename (expand-file-name filename))
-        (result (cond ((file-exists-p expanded-filename)
-                         expanded-filename)
-                        ('t filename))))
-    result)
-)
-
-(defun realgud-suggest-invocation
-  (debugger-name _minibuffer-history lang-str lang-ext-regexp
-                &optional last-resort)
-  "Suggest a debugger command invocation. If the current buffer
-is a source file or process buffer previously set, then use the
-value of that the command invocations found by buffer-local
-variables.  Otherwise, we try to find a suitable program file
-using LANG-STR and LANG-EXT-REGEXP."
-  (let* ((buf (current-buffer))
-        (filename)
-        (cmd-str-cmdbuf (realgud-cmdbuf-command-string buf))
-        )
-    (cond
-     ((and cmd-str-cmdbuf (equal debugger-name (realgud-cmdbuf-debugger-name 
buf)))
-      cmd-str-cmdbuf)
-     ((setq filename (realgud:suggest-file-from-buffer lang-str))
-      (concat debugger-name " " (shell-quote-argument filename)))
-     (t (concat debugger-name " "
-                (shell-quote-argument
-                 (realgud-suggest-lang-file lang-str lang-ext-regexp 
last-resort))))
-     )))
-
-(defun realgud-query-cmdline
-  (suggest-invocation-fn
-   minibuffer-local-map
-   minibuffer-history
-   &optional opt-debugger)
-  "Prompt for a debugger command invocation to run.
-Analogous to `gud-query-cmdline'.
-
-If you happen to be in a debugger process buffer, the last command invocation
-for that first one suggested. Failing that, some amount of guessing is done
-to find a suitable file via SUGGEST-INVOCATION-FN.
-
-We also set filename completion and use a history of the prior
-dbgr invocations "
-  (let ((debugger (or opt-debugger
-                  (realgud-sget 'srcbuf-info 'debugger-name))))
-    (read-shell-command
-     (format "Run %s (like this): " debugger)  ;; prompt string
-     (funcall suggest-invocation-fn debugger)  ;; initial value
-     minibuffer-history                        ;; history variable
-     )))
-
-(defun realgud-parse-command-arg (args two-args opt-two-args)
-  "Return a cons node where the car is a list containing the
-entire first option and the cdr is the remaining arguments from ARGS.
-
-We determine if an option has length one or two using the lists
-TWO-ARGS and OPT-TWO-ARGS. Both of these are list of 'options',
-that is strings without the leading dash. TWO-ARGS takes a
-mandatory additional argument. OPT-TWO-ARGS might take two
-arguments. The rule for an optional argument that we use is if
-the next parameter starts with a dash ('-'), it is not part of
-the preceeding parameter when that parameter is optional.
-
-NOTE: we don't check whether the first arguments of ARGS is an
-option by testing to see if it starts say with a dash. So on
-return the first argument is always removed.
-"
-  (let ((arg (car args))
-       (d-two-args (mapcar (lambda(x) (concat "-" x)) two-args))
-       (d-opt-two-args (mapcar (lambda(x) (concat "-" x)) opt-two-args))
-       (remaining (cdr args)))
-    (cond
-     ((member arg d-two-args)
-      (if (not remaining)
-           (progn
-             (message "Expecting an argument after %s. Continuing anyway."
-                      arg)
-             (cons (list arg) (list remaining)))
-       (cons (list arg (car remaining)) (list (cdr remaining)))))
-     ((member arg d-opt-two-args)
-      (if (and remaining (not (string-match "^-" (car remaining))))
-         (cons (list arg (car remaining)) (list (cdr remaining)))
-       (cons (list arg) (list remaining))))
-     (t (cons (list arg) (list remaining))))))
-
-(defun realgud:terminate-srcbuf (&optional srcbuf)
-  "Resets source buffer."
-  (interactive "bsource buffer: ")
-  (if (stringp srcbuf) (setq srcbuf (get-buffer srcbuf)))
-  (with-current-buffer srcbuf
-    (realgud-fringe-erase-history-arrows)
-    (realgud-bp-remove-icons (point-min) (point-max))
-    (when (realgud-srcbuf?)
-      (realgud-short-key-mode-setup nil)
-      (redisplay)
-      )
-    (loc-changes-clear-buffer)
-    ))
-
-(defun realgud:terminate (&optional buf)
-  "Resets state in all buffers associated with source or command
-buffer BUF) This does things like remove fringe arrows breakpoint
-icons and resets short-key mode."
-  (interactive "bbuffer: ")
-  (if (stringp buf) (setq buf (get-buffer buf)))
-  (let ((cmdbuf (realgud-get-cmdbuf buf)))
-    (if cmdbuf
-       (with-current-buffer cmdbuf
-         (realgud-cmdbuf-info-in-debugger?= nil)
-         (realgud-cmdbuf-info-bp-list= '())
-         (realgud-cmdbuf-mode-line-update)
-         (realgud-fringe-erase-history-arrows)
-         (if realgud-cmdbuf-info
-             (dolist (srcbuf (realgud-cmdbuf-info-srcbuf-list 
realgud-cmdbuf-info))
-               (if (realgud-srcbuf? srcbuf)
-                   (with-current-buffer srcbuf
-                     (realgud:terminate-srcbuf srcbuf)
-                     ))
-               )
-           )
-         )
-      (error "Buffer %s does not seem to be attached to a debugger"
-            (buffer-name))
-      )
-    )
-  )
-
-(defun realgud:kill-buffer-hook ()
-  "When a realgud command buffer is killed, call `realgud:terminate' to
-clean up.
-Note that `realgud-term-sentinel' is not helpful here because
-the buffer and data associated with it are already gone."
-  (when (realgud-cmdbuf?) (realgud:terminate (current-buffer)))
-)
-(add-hook 'kill-buffer-hook 'realgud:kill-buffer-hook)
-
-(defun realgud-term-sentinel (process string)
-  "Called when PROCESS dies. We call `realgud:terminate' to clean up."
-  (let ((cmdbuf (realgud-get-cmdbuf)))
-    (if cmdbuf (realgud:terminate cmdbuf)))
-  (message "That's all folks.... %s" string))
-
-(defun realgud:binary (file-name)
-  "Return a whether FILE-NAME is executable or not or very large"
-  (let* ((truename (file-chase-links file-name))
-        (output (shell-command-to-string
-                 (format "file %s" truename)))
-        (filesize (nth 7 (file-attributes truename)))
-        )
-    (cond
-     ((string-match "ELF" output) t)
-     ((and large-file-warning-threshold filesize
-          (> filesize large-file-warning-threshold)) t)
-     ('t nil))))
-
-
-(defun realgud-exec-shell (debugger-name script-filename program
-                                     &optional no-reset &rest args)
-  "Run the specified SCRIPT-FILENAME in under debugger DEBUGGER-NAME a
-comint process buffer. ARGS are the arguments passed to the
-PROGRAM.  At the moment, no piping of input is allowed.
-
-SCRIPT-FILENAME will have local variable `realgud-script-info' set
-which contains the debugger name and debugger process-command
-buffer.
-
-Normally command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset."
-
-  (let* ((non-nil-filename (or script-filename "+No filename+"))
-        (current-directory
-         (or (file-name-directory non-nil-filename)
-             default-directory "./"))
-        (cmdproc-buffer-name
-         (replace-regexp-in-string
-          "\s+" "\s"
-          (format "*%s %s shell*"
-                  (file-name-nondirectory debugger-name)
-                  (file-name-nondirectory non-nil-filename))))
-        (cmdproc-buffer (get-buffer-create cmdproc-buffer-name))
-        (realgud-buf (current-buffer))
-        (cmd-args (cons program args))
-        (process (get-buffer-process cmdproc-buffer)))
-
-    (with-current-buffer cmdproc-buffer
-      ;; If the found command buffer isn't for the same debugger
-      ;; invocation command, rename that and start a new one.
-      ;;
-      ;; For example: "bashdb /tmp/foo" does not match "bashdb
-      ;; /etc/foo" even though they both canonicalize to the buffer
-      ;; "*bashdb foo shell*"
-      (when (and (realgud-cmdbuf?)
-                (not
-                 (equal cmd-args
-                        (realgud-cmdbuf-info-cmd-args realgud-cmdbuf-info))
-                 ))
-       (rename-uniquely)
-       (setq cmdproc-buffer (get-buffer-create cmdproc-buffer-name))
-       (setq process nil)
-       ))
-
-    (if (and process (eq 'run (process-status process)))
-        cmdproc-buffer
-      (with-current-buffer cmdproc-buffer
-       (and (realgud-cmdbuf?) (not no-reset) (realgud:reset))
-       (make-local-variable 'starting-directory)
-       (setq starting-directory current-directory)
-
-       (insert "Current directory: " current-directory "\n")
-       (insert "Command: " (mapconcat 'identity cmd-args " ") "\n")
-
-
-       ;; For term.el
-       ;; (term-mode)
-       ;; (set (make-local-variable 'term-term-name) realgud-term-name)
-       ;; (make-local-variable 'realgud-parent-buffer)
-       ;; (setq realgud-parent-buffer realgud-buf)
-
-       ;; For comint.el.
-       (comint-mode)
-
-       ;; Making overlay-arrow-variable-list buffer local has to be
-       ;; done after running commint mode. FIXME: find out why and if
-       ;; this reason is justifyable. Also consider moving this somewhere
-       ;; else.
-       (make-local-variable 'overlay-arrow-variable-list)
-       (make-local-variable 'realgud-overlay-arrow1)
-       (make-local-variable 'realgud-overlay-arrow2)
-       (make-local-variable 'realgud-overlay-arrow3)
-
-       (condition-case failure
-           (comint-exec cmdproc-buffer debugger-name program nil args)
-         (error
-          (let ((text (format "%S\n" failure)))
-            (insert text)
-            (message text)(sit-for 1)
-            text)))
-
-       (setq process (get-buffer-process cmdproc-buffer))
-
-       (if (and process (eq 'run (process-status process)))
-         (let ((src-buffer)
-               (cmdline-list (cons program args)))
-           ;; is this right?
-           (when (and script-filename (file-exists-p script-filename)
-                      (not (realgud:binary script-filename)))
-             (setq src-buffer (find-file-noselect script-filename))
-             (point-max)
-             (realgud-srcbuf-init src-buffer cmdproc-buffer))
-           (process-put process 'buffer cmdproc-buffer))
-         ;; else
-         (let ((text
-                (format
-                 "Failed to invoke debugger %s on program %s with args %s\n"
-                 debugger-name program (mapconcat 'identity args " "))))
-           (with-current-buffer cmdproc-buffer (insert text))
-           (message text)
-         ))
-    cmdproc-buffer))))
-
-;; Start of a term-output-filter for term.el
-(defun realgud-term-output-filter (process string)
-  (let ((process-buffer (process-get process 'buffer)))
-    (if process-buffer
-       (save-current-buffer
-         (set-buffer process-buffer)
-         ;; (insert-before-markers (format "+++1 %s" string))
-         (insert-before-markers string)))))
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/custom.el 
b/packages/realgud/realgud/common/custom.el
deleted file mode 100644
index d429b23..0000000
--- a/packages/realgud/realgud/common/custom.el
+++ /dev/null
@@ -1,28 +0,0 @@
-;; Copyright (C) 2010 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-(require 'load-relative)
-
-(defcustom realgud-key-prefix "\C-x\C-a"
-  "Prefix of all realgud commands valid in source buffers."
-  :type 'string
-  :group 'realgud)
-
-(defcustom realgud-srcbuf-lock t
-  "Set source buffers read-only when the debugger is active.
-A setting of `nil` allows editing, but Short-Key-mode use may inhibit this."
-  :type 'boolean
-  :group 'realgud)
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/eval.el 
b/packages/realgud/realgud/common/eval.el
deleted file mode 100644
index 1ba52a4..0000000
--- a/packages/realgud/realgud/common/eval.el
+++ /dev/null
@@ -1,101 +0,0 @@
-;; show expressions using tooltip
-
-;; Author: Rocky Bernstein <address@hidden>
-;; Version: 1.1
-;; Keywords: internal
-;; URL: http://github.com/rocky/emacs-load-relative
-;; Compatibility: GNU Emacs 24.x
-
-;; Copyright (C) 2015 Free Software Foundation, Inc
-
-;; This program is free software: you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License as
-;; published by the Free Software Foundation, either version 3 of the
-;; License, or (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful, but
-;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-;; General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see
-;; <http://www.gnu.org/licenses/>.
-
-(require 'tooltip)
-(require 'ansi-color)
-(require 'load-relative)
-
-(require-relative-list '("cmds" "helper" "utils")  "realgud-")
-(require-relative-list '("buffer/command")         "realgud-buffer-")
-
-(declare-function realgud:cmd-eval   'realgud-cmd)
-(declare-function realgud-get-cmdbuf 'realgud-helper)
-(declare-function realgud-cmdbuf-pat 'realgud-send)
-(declare-function realgud:strip      'realgud-utils)
-
-(make-variable-buffer-local
- (defvar realgud:process-filter-save nil
-   "realgud saves/restores the previous process filter here"))
-
-(defun realgud:tooltip-eval (event)
-  "Show tip for identifier or selection under the mouse.
-The mouse must either point at an identifier or inside a selected
-region for the tip window to be shown.
-
-This function must return nil if it doesn't handle EVENT."
-  (interactive "e")
-  (let ((process)
-       (cmdbuf (realgud-get-cmdbuf))
-       (process))
-    (when (and (eventp event)
-              cmdbuf
-              (setq process (get-buffer-process cmdbuf))
-              (posn-point (event-end event))
-              )
-      (let ((expr (tooltip-expr-to-print event)))
-       (when expr
-         (with-current-buffer cmdbuf
-           (setq realgud:process-filter-save (process-filter process))
-           (set-process-filter process 'realgud:eval-process-output))
-         (realgud:cmd-eval expr)
-         ))
-      )))
-
-(defun realgud:eval-process-output (process output-str)
-  "Process debugger output and show it in a tooltip window."
-  (set-process-filter process
-                     (or realgud:process-filter-save 'comint-output-filter))
-  (with-current-buffer (realgud-get-cmdbuf)
-    (goto-char (process-mark process))
-    (setq comint-last-input-end (process-mark process))
-    (insert output-str)
-    (set-marker (process-mark process) (point)))
-    (setq comint-last-output-start
-         (setq realgud-last-output-start (process-mark process)))
-
-  (tooltip-show (realgud:eval-strip process output-str))
-  )
-
-(defun realgud:eval-strip-default(prompt-regexp output-str)
-  (realgud:strip
-   (ansi-color-filter-apply
-    (if (string-match prompt-regexp output-str)
-       (substring output-str 0 (match-beginning 0))
-      output-str))))
-
-
-(defun realgud:eval-strip(process output-str)
-  "Return OUTPUT-STR with any prompt of PROCESS stripped from its end."
-  (save-match-data
-    (with-current-buffer (process-buffer process)
-      (let* ((prompt-pat (realgud-cmdbuf-pat "prompt"))
-            (prompt-regexp (realgud-loc-pat-regexp prompt-pat))
-            (eval-filter (realgud-sget 'cmdbuf-info 'callback-eval-filter))
-            )
-       (if eval-filter
-           (funcall eval-filter output-str)
-         (realgud:eval-strip-default prompt-regexp output-str))
-       ))))
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/file.el 
b/packages/realgud/realgud/common/file.el
deleted file mode 100644
index f3694ba..0000000
--- a/packages/realgud/realgud/common/file.el
+++ /dev/null
@@ -1,150 +0,0 @@
-;; Copyright (C) 2010-2011, 2013-2014, 2016-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-; Should realgud:file-loc-from-line be here or elsewhere?
-(require 'load-relative)
-(require 'compile) ;; for compilation-find-file
-(require-relative-list '("helper" "loc") "realgud-")
-
-(defvar realgud-file-remap (make-hash-table :test 'equal)
-  "How to remap files we otherwise can't find in the
-  filesystem. The hash key is the file string we saw, and the
-  value is associated filesystem string presumably in the
-  filesystem")
-
-
-(declare-function realgud:strip         'realgud)
-(declare-function realgud-loc-goto      'realgud-loc)
-(declare-function buffer-killed?        'helper)
-(declare-function compilation-find-file 'compile)
-
-(defcustom realgud-file-find-function 'compilation-find-file
-  "Function to call when we can't easily find file"
-  :type 'function
-  :group 'realgud)
-
-(defun realgud:file-line-count(filename)
-  "Return the number of lines in file FILENAME, or nil FILENAME can't be
-found"
-  (if (file-exists-p filename)
-      (let ((file-buffer (find-file-noselect filename)))
-       (with-current-buffer-safe file-buffer
-         (line-number-at-pos (point-max))))
-    nil))
-
-(defun realgud:file-column-from-string(filename line-number source-text
-                                               &optional no-strip-blanks)
-  "Return the column of the first column position of SOURCE-TEXT
-at LINE-NUMBER or nil if it is not there"
-  (condition-case nil
-      (when (and source-text (file-exists-p filename))
-        (let ((file-buffer (find-file-noselect filename)))
-          (with-current-buffer-safe file-buffer
-            (save-excursion
-              (goto-char (point-min))
-              (forward-line (1- line-number))
-              (unless no-strip-blanks
-                (setq source-text (realgud:strip source-text)))
-              (when (search-forward source-text (point-at-eol))
-                (goto-char (match-beginning 0))
-                (current-column))))))
-    (error nil)))
-
-;; FIXME: should allow column number to be passed in.
-(defun realgud:file-loc-from-line(filename line-number
-                                          &optional cmd-marker source-text 
bp-num
-                                          ;; FIXME: remove ignore-file-re and 
cover with
-                                          ;; find-file-fn.
-                                          ignore-file-re find-file-fn 
directory)
-  "Return a realgud-loc for FILENAME and LINE-NUMBER and the
-other optional position information.
-
-CMD-MARKER and BP-NUM get stored in the realgud-loc
-object. FIND-FILE-FN is a function which do special things to
-transform filename so it can be found. This could include
-searching classpaths (in Java), stripping leading and trailing
-blanks, or deliberately ignoring 'pseudo-file patterns like (eval
-1) of Perl and <string> of Python.
-
-If we're unable find the source code we return a string describing the
-problem as best as we can determine."
-
-  (unless (and filename (file-readable-p filename))
-    (if find-file-fn
-        (setq filename (funcall find-file-fn filename))
-      ;; FIXME: Remove the below by refactoring to use the above find-file-fn
-      ;; else
-      (if (and ignore-file-re (string-match ignore-file-re filename))
-          (message "tracking ignored for pseudo-file %s" filename)
-        ;; else
-        (let ((remapped-filename))
-          (if (gethash filename realgud-file-remap)
-              (progn
-                (setq remapped-filename (gethash filename realgud-file-remap))
-                (if (file-exists-p remapped-filename)
-                    (setq filename remapped-filename)
-                  (remhash filename realgud-file-remap)))
-            ;; else
-            (let ((found-file (funcall realgud-file-find-function 
(point-marker) filename directory)))
-                (when found-file
-                  (setq remapped-filename (buffer-file-name found-file))
-                  (when (and remapped-filename (file-exists-p 
remapped-filename))
-                    (puthash filename remapped-filename realgud-file-remap)
-                    (setq filename remapped-filename)
-                    ))
-                )))
-        )
-      ;; FIXME: remove above -----------------------------------.
-      ))
-  (if filename
-      (if (file-readable-p filename)
-         (if (integerp line-number)
-             (if (> line-number 0)
-                 (let ((line-count))
-                   (if (setq line-count (realgud:file-line-count filename))
-                       (if (> line-count line-number)
-                           (let* ((column-number
-                                   (realgud:file-column-from-string filename
-                                                                   line-number
-                                                                   
source-text))
-                                  (source-buffer (find-file-noselect filename))
-                                  (source-mark))
-
-                             ;; And you thought we'd never get around to
-                             ;; doing something other than validation?
-                             (with-current-buffer source-buffer
-                               (goto-char (point-min))
-                               ;; FIXME also allow column number and byte 
offset
-                               (forward-line (1- line-number))
-                               (make-realgud-loc
-                                     :num           bp-num
-                                     :cmd-marker    cmd-marker
-                                     :filename      filename
-                                     :line-number   line-number
-                                     :column-number column-number
-                                     :source-text   source-text
-                                     :marker        (point-marker)
-                                     )
-                               ))
-                         ;; else
-                         (format "File %s has only %d lines. (Line %d 
requested.)"
-                                 filename line-count line-number))
-                     (format "Problem getting line count for file `%s'" 
filename)))
-               (format "line number %s should be greater than 0" line-number))
-           (format "%s is not an integer" line-number))
-       ;; else
-       (format "File named `%s' not readable" filename)))
-  )
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/follow.el 
b/packages/realgud/realgud/common/follow.el
deleted file mode 100644
index 65aa879..0000000
--- a/packages/realgud/realgud/common/follow.el
+++ /dev/null
@@ -1,50 +0,0 @@
-;; Copyright (C) 2015 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;;; Follows or goto's something
-(require 'load-relative)
-
-(declare-function realgud:cmd-frame 'realgud-cmds)
-
-(defun realgud:follow-mark(mark)
-  (when (markerp mark)
-    (let ((buffer (marker-buffer mark)))
-      (set-buffer buffer)
-      (set-window-point (display-buffer buffer) mark)
-      (goto-char mark)
-    )))
-
-
-(defun realgud:follow(pos)
-  (interactive "%d")
-  (let* ((mark (get-text-property pos 'mark))
-        (filename (get-text-property pos 'file))
-        (frame-num (get-text-property pos 'frame-num))
-        )
-    (cond ((markerp mark) (realgud:follow-mark mark) 't)
-         ((stringp filename)
-          (find-file-other-window filename))
-         ((numberp frame-num) (realgud:cmd-frame frame-num))
-         ('t (message "No location property found here")))
-    ))
-
-(defun realgud:follow-point()
-  (interactive)
-  (realgud:follow (point)))
-
-(defun realgud:follow-event(event)
-  (interactive "e")
-  (realgud:follow (posn-point (event-end event))))
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/fringe-utils.py 
b/packages/realgud/realgud/common/fringe-utils.py
deleted file mode 100755
index 784cdb0..0000000
--- a/packages/realgud/realgud/common/fringe-utils.py
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/usr/bin/env python3
-
-def bit2char(byte, offset):
-    return "X" if byte & (1 << offset) else " "
-
-def char2bit(char, offset):
-    return (0 if char == " " else 1) << offset
-
-def decompile_bitmap(bmp_bytes):
-    lines = []
-    for b in bmp_bytes:
-        lines.append("".join(bit2char(b, offset) for offset in range(8)))
-    return lines
-
-def compile_bitmap(bmp_lines):
-    bmp_bytes = []
-    for line in bmp_lines:
-        s = sum(char2bit(c, offset) for (offset, c) in enumerate(line))
-        bmp_bytes.append(s.to_bytes(1, byteorder="big"))
-    return b"".join(bmp_bytes)
-
-hollow_circle = ["  XXXX  ",
-                 " X    X ",
-                 "X      X",
-                 "X      X",
-                 "X      X",
-                 "X      X",
-                 " X    X ",
-                 "  XXXX  "]
-
-def print_compiled(bmp):
-    print("".join(r'\x{:02x}'.format(b) for b in bmp))
-
-print("\n".join(decompile_bitmap(b"\x3c\x7e\xff\xff\xff\xff\x7e\x3c")))
-print_compiled(compile_bitmap(decompile_bitmap(b"\x3c\x7e\xff\xff\xff\xff\x7e\x3c")))
-print_compiled(compile_bitmap(hollow_circle))
-
diff --git a/packages/realgud/realgud/common/fringe.el 
b/packages/realgud/realgud/common/fringe.el
deleted file mode 100644
index b3ee9eb..0000000
--- a/packages/realgud/realgud/common/fringe.el
+++ /dev/null
@@ -1,224 +0,0 @@
-;; Copyright (C) 2010, 2012, 2014-2016, 2018 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;; Fringe marks for history of stopping points
-(require 'load-relative)
-(require-relative-list '("helper") "realgud-")
-
-(declare-function realgud-loc-hist-item-at       'realgud-lochist)
-(declare-function buffer-killed?                 'helper)
-(declare-function realgud-loc-cmd-marker         'realgud-loc)
-(declare-function realgud:follow-mark            'realgud-follow)
-(declare-function realgud-loc-marker             'realgud-loc)
-
-;; Bitmap for hollow overlay-arrow in fringe
-(if (display-images-p)
-    (define-fringe-bitmap 'hollow-right-triangle
-      "\xe0\x90\x88\x84\x84\x88\x90\xe0"))
-
-(defface realgud-debugger-running
-  '((((class color) (min-colors 16) (background light))
-     (:foreground "Green4" :weight bold))
-    (((class color) (min-colors 88) (background dark))
-     (:foreground "Green1" :weight bold))
-    (((class color) (min-colors 16) (background dark))
-     (:foreground "Green" :weight bold))
-    (((class color)) (:foreground "green" :weight bold))
-    (t (:weight bold)))
-  "Face used to highlight debugger run information."
-  :group 'realgud
-  :version "24.3")
-
-(defface realgud-debugger-not-running
-  '((t :inherit font-lock-warning-face))
-  "Face used when debugger or process is not running."
-  :group 'realgud
-  :version "24.3")
-
-
-;; FIXME: Figure out how to do this as a macro.
-
-(defface realgud-overlay-arrow1
-  '((t :inherit realgud-debugger-running))
-    "Realgud fringe face for current position indicator."
-    :group 'realgud)
-
-(defface realgud-overlay-arrow2
-  '((((background  dark)) :foreground "white" :weight bold)
-    (((background light)) :foreground "tan1" :weight bold))
-  "Fringe face for current position."
-  :group 'realgud)
-
-(defface realgud-overlay-arrow3
-  '((((background  dark)) :foreground "DimGray")
-    (((background light)) :foreground "tan4"))
-  "Fringe face for current position."
-  :group 'realgud)
-
-
-(defvar realgud-overlay-arrow1 nil
-  "Overlay arrow variable which contains the most recent debugger
-position.")
-(defvar realgud-overlay-arrow2 nil
-  "Overlay arrow variable which contains the 2nd most recent debugger
-position.")
-(defvar realgud-overlay-arrow3 nil
-  "Overlay arrow variable which contains the 3rd most recent debugger
-position.")
-
-;; FIXME: since overlay overlay-arrow-list can be global, and perhaps
-;; has to stay that way since some Emacs code may expect that, we
-;; should use different global overlay arrow variables for the
-;; different debuggers. E.g. trepan-overlay-arrow1,
-;; pyrealgud-overlay-arrow1 and so on. That way, if those debuggers are
-;; running concurrently, the fringe for one doesn't interfere with the
-;; fringe for another.
-
-;; Loop to set up fringe position markers.
-
-;; Here is an example of what each iteration does:
-;;
-;;   (make-local-variable 'realgud-overlay-arrow1) ;; or 2, or 3
-;;   (put 'realgud-overlay-arrow1 'overlay-arrow-string "=>" ;; or "2>", or 
">3"
-;;   (define-fringe-bitmap 'realgud-overlay-arrow1 "\xc0...")
-;;   (add-to-list 'overlay-arrow-variable-list 'realgud-overlay-arrow1)
-
-(dolist (pair
-        '( ("3" . "3>")  ("2" . "2>") ("1" . "=>")))
-  (let ((arrow-symbol (intern (concat "realgud-overlay-arrow" (car pair))))
-       (arrow-bitmap (intern (concat "realgud-right-triangle" (car pair))))
-       (arrow-face (intern (concat "realgud-overlay-arrow" (car pair)))))
-    (make-local-variable arrow-symbol)
-    (put arrow-symbol 'overlay-arrow-string (cdr pair))
-    (if (display-images-p)
-       (progn
-         (define-fringe-bitmap arrow-bitmap "\xc0\xf0\xf8\xfc\xfc\xf8\xf0\xc0")
-         (put arrow-symbol 'overlay-arrow-bitmap arrow-bitmap)
-         (set-fringe-bitmap-face arrow-bitmap arrow-face)))
-    (add-to-list 'overlay-arrow-variable-list arrow-symbol)))
-
-(defun realgud-fringe-set-arrow (overlay-arrow marker)
-  "Set the fringe indicator or overlay arrow to MARKER. This is done
-for example to indicate a debugger position."
-  (let ((position (marker-position marker)))
-    (if position
-       (with-current-buffer (marker-buffer marker)
-         (save-excursion
-           (save-restriction
-             (widen)
-             (progn
-               (goto-char position)
-               ;; We need to ignore field boundaries, so we use
-               ;; forward-line rather than beginning-of-line.
-               (forward-line 0)
-               (set overlay-arrow (point-marker)))))))))
-
-(defun realgud-fringe-history-set (loc-hist &optional do-cmdbuf?)
-  "Set arrows on the last positions we have stopped on."
-  ;; FIXME DRY somehow
-  (let* (
-        (loc1 (realgud-loc-hist-item-at loc-hist 2))
-        (loc2 (realgud-loc-hist-item-at loc-hist 1))
-        (loc3 (realgud-loc-hist-item-at loc-hist 0))
-        (mark1 (and loc3 (realgud-loc-marker loc3)))
-        (mark2 (and loc2 (realgud-loc-marker loc2)))
-        (mark3 (and loc1 (realgud-loc-marker loc1)))
-        (cmd-mark1 (and loc3 (realgud-loc-cmd-marker loc3)))
-        (cmd-mark2 (and loc2 (realgud-loc-cmd-marker loc2)))
-        (cmd-mark3 (and loc1 (realgud-loc-cmd-marker loc1)))
-        )
-    (when (and loc3 (not (equal mark3 mark2)))
-      (realgud-fringe-set-arrow 'realgud-overlay-arrow3 mark3)
-      (if do-cmdbuf?
-         (realgud-fringe-set-arrow 'realgud-overlay-arrow3 cmd-mark3)))
-    (when (and loc2 (not (equal mark2 mark1)))
-      (realgud-fringe-set-arrow 'realgud-overlay-arrow2 mark2)
-      (if do-cmdbuf?
-         (realgud-fringe-set-arrow 'realgud-overlay-arrow2 cmd-mark2)))
-    (when loc1
-      (realgud-fringe-set-arrow 'realgud-overlay-arrow1 mark1)
-      (when (and do-cmdbuf? cmd-mark1)
-         (realgud-fringe-set-arrow 'realgud-overlay-arrow1 cmd-mark1)
-         (goto-char (marker-position cmd-mark1)))
-      )
-    ))
-
-(defun realgud-fringe-erase-history-arrows ()
-  "Erase the history arrows from the fringe. You might want call
-this command interactively if you have conceptually stopped
-debugging and now find the fringe arrows distracting. But you
-don't want to kill the debugger process or quit a debugger
-session which should also erase those fringe arrows."
-  (interactive)
-  (setq realgud-overlay-arrow1 nil)
-  (setq realgud-overlay-arrow2 nil)
-  (setq realgud-overlay-arrow3 nil))
-
-(defun realgud-goto-arrow1()
-  "Goto the position stored in realgud-overlay-arrow1"
-  (interactive "")
-  (if realgud-overlay-arrow1
-      (realgud:follow-mark realgud-overlay-arrow1))
-  )
-
-(defun realgud-goto-arrow2()
-  "Goto the position stored in realgud-overlay-arrow2"
-  (interactive "")
-  (if realgud-overlay-arrow2
-      (realgud:follow-mark realgud-overlay-arrow2))
-  )
-
-
-(defun realgud-goto-arrow3()
-  "Goto the position stored in realgud-overlay-arrow3"
-  (interactive "")
-  (if realgud-overlay-arrow3
-      (realgud:follow-mark realgud-overlay-arrow3))
-  )
-
-(defun realgud-recenter-arrow1()
-  "If the current buffer contains realgud-overlay-arrow1 go to that position"
-  (interactive "")
-  (if (and realgud-overlay-arrow1
-          (eq (marker-buffer realgud-overlay-arrow1) (current-buffer)))
-      (goto-char realgud-overlay-arrow1))
-  )
-
-(defun realgud-recenter-arrow(&optional opt-buffer)
-  "If the current buffer contains realgud-overlay-arrows 1, 2 or 3
-   recenter window to show that"
-  (interactive "")
-  (let ((buffer (or opt-buffer (current-buffer))))
-    ;; We need to update in the order 3..1 so that if there are more than on
-    ;; arrows in the same buffer the smaller number (e.g. arrow 1) is the
-    ;; position we are at rather than the earlier one (e.g. arrow 3).
-    (with-current-buffer-safe buffer
-      (if (and realgud-overlay-arrow3
-              (eq (marker-buffer realgud-overlay-arrow3) buffer))
-         (realgud:follow-mark realgud-overlay-arrow3)
-       )
-      (if (and realgud-overlay-arrow2
-              (eq (marker-buffer realgud-overlay-arrow2) buffer))
-         (realgud:follow-mark realgud-overlay-arrow2)
-      )
-      (if (and realgud-overlay-arrow1
-              (eq (marker-buffer realgud-overlay-arrow1) buffer))
-         (realgud:follow-mark realgud-overlay-arrow1)
-       )
-      (redisplay)
-      )
-    ))
-
-
-(provide 'realgud-fringe)
diff --git a/packages/realgud/realgud/common/helper.el 
b/packages/realgud/realgud/common/helper.el
deleted file mode 100644
index 95c61ec..0000000
--- a/packages/realgud/realgud/common/helper.el
+++ /dev/null
@@ -1,109 +0,0 @@
-;; Copyright (C) 2010, 2014, 2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-(eval-when-compile (require 'cl-lib))   ;For setf.
-
-;;; Miscellaneous utility functions
-(require 'load-relative)
-
-(defun fn-p-to-fn?-alias (fn-sym)
-  "FN-SYM is assumed to be a symbol which is a function.  If it
-ends in a 'p' or '-p', that suffix is stripped; in either case, a
-suffix with '?' is added this name is a new alias for that
-function FN-SYM."
-  (if (and (symbolp fn-sym) (functionp fn-sym))
-      (let*
-         ((fn-str (symbol-name fn-sym))
-          (new-fn-str
-            (cond
-             ((and (> (length fn-str) 2) (equal "-p" (substring fn-str -2)))
-              (substring fn-str 0 -2))
-             ((and (> (length fn-str) 1) (equal "p" (substring fn-str -1)))
-              (substring fn-str 0 -1))
-             (t fn-str)))
-          (new-fn-sym (intern (concat new-fn-str "?"))))
-       (defalias new-fn-sym fn-sym))))
-
-;; FIXME push the special casing into the debuggers themselves.
-(defun realgud:debugger-name-transform (debugger-name)
-  "In some cases we need to prefix a short debugger name, like
-'gdb' with 'realgud:'. This does that."
-  (let ((debugger-name-short
-        (file-name-sans-extension (file-name-nondirectory debugger-name))))
-    (cond
-     ;; ((equal debugger-name-short "gdb") "realgud:gdb")
-     ;; ((equal debugger-name-short "jdb") "realgud:jdb")
-     ((equal debugger-name-short "tortoise") "gub")
-     ((or (equal debugger-name "trepan.pl")
-         (equal debugger-name-short "trepanpl"))
-      "realgud:trepanpl")
-     ('t debugger-name-short))))
-
-(defun buffer-killed? (buffer)
-  "Return t if BUFFER is killed."
-  (not (buffer-live-p buffer)))
-
-(defmacro with-current-buffer-safe (buffer &rest body)
-  "Check that BUFFER is not nil and has not been deleted before
-calling `with-current-buffer'. If it has been deleted return
-nil."
-  (declare (indent 1) (debug t))
-  `(if (or (not ,buffer) (buffer-killed? ,buffer))
-       nil
-     (with-current-buffer ,buffer
-       ,@body)))
-
-
-;; FIXME: prepend realgud- onto the beginning of struct-symbol
-(defmacro realgud-sget (struct-symbol struct-field)
-  "Simplified access to a field of a `defstruct'
-variable. STRUCT-SYMBOL is a defstruct symbol name. STRUCT-FIELD
-is a field in that. Access (STRUCT-SYMBOL-STRUCT-FIELD STRUCT-SYMBOL)"
-  (declare (indent 1) (debug t))
-  `(let* ((realgud-symbol-str
-          (concat "realgud-" (symbol-name ,struct-symbol)))
-         (realgud-field-access
-          (intern (concat realgud-symbol-str "-" (symbol-name, 
struct-field)))))
-    (funcall realgud-field-access (eval (intern realgud-symbol-str)))))
-
-
-(defmacro realgud-struct-field-setter (variable-name field)
-  "Creates an defstruct setter method for field FIELD with
-of defstruct variable VARIABLE-NAME. For example:
-
-  (realgud-struct-field-setter \"realgud-srcbuf-info\" \"short-key?\")
-gives:
-  (defun realgud-srcbuf-info-short-key?=(value)
-    (setf (realgud-srcbuf-info-short-key? realgud-srcbuf-info) value))
-"
-  (declare (indent 1) (debug t))
-  `(defun ,(intern (concat variable-name "-" field "=")) (value)
-     ;; FIXME: figure out how to add docstring
-     ;; ,(concat "Sets field" ,field " of " ,variable-name " to VALUE")
-     (if ,(intern variable-name)
-        (setf (,(intern (concat variable-name "-" field))
-               ,(intern variable-name)) value))
-    ))
-
-;; (defun realgud-struct-field (var-sym field-sym)
-;;   (setq var-str (symbol-name var-sym))
-;;   (setq field-str (symbol-name field-sym))
-;;   (funcall (symbol-function (intern (concat var-str "-" field-str)))
-;;        (eval (intern var-str))))
-
-(provide-me "realgud-")
-
-;; Local Variables:
-;; byte-compile-warnings: (not cl-functions)
-;; End:
diff --git a/packages/realgud/realgud/common/init.el 
b/packages/realgud/realgud/common/init.el
deleted file mode 100644
index 7001d85..0000000
--- a/packages/realgud/realgud/common/init.el
+++ /dev/null
@@ -1,45 +0,0 @@
-;; Copyright (C) 2010, 2015 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-(require 'load-relative)
-
-(defface realgud-line-number
-  '((t :inherit font-lock-variable-name-face))
-  "Face for displaying line numbers in."
-  :group 'realgud
-  :version "23.4")
-
-(defvar realgud-line-number-face 'realgud-line-number
-  "Face name to use for line numbers.")
-
-(defface realgud-file-name
-  '((t :inherit font-lock-preprocessor-face))
-  "Face for displaying file names."
-  :group 'realgud
-  :version "23.4")
-
-(defface realgud-backtrace-number
-  '((t
-     :foreground "black"
-     :weight bold))
-  "Fringe face for current position."
-  :group 'realgud)
-
-(defvar realgud-backtrace-number-face 'realgud-backtrace-number
-  "Face name to use for backtrace numbers.")
-
-(defvar realgud-file-name-face 'realgud-file-name
-  "Face name to use for file names.")
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/key.el 
b/packages/realgud/realgud/common/key.el
deleted file mode 100644
index bb5ed7c..0000000
--- a/packages/realgud/realgud/common/key.el
+++ /dev/null
@@ -1,137 +0,0 @@
-;; Author: Rocky Bernstein <address@hidden>
-;; Version: 1.1
-;; Keywords: internal
-;; URL: http://github.com/rocky/emacs-load-relative
-;; Compatibility: GNU Emacs 24.x
-
-;; Copyright (C) 2015, 2017 Free Software Foundation, Inc
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-(provide 'key)
-;;; key.el ends here
-
-(require 'load-relative)
-(require-relative "custom" nil "realgud-")
-
-(defcustom realgud-populate-common-fn-keys-function
-  'realgud-populate-common-fn-keys-standard
-  "The function to call to populate key bindings common to all realgud windows.
-This includes the secondary windows, the debugger shell, and all
-realgud source buffers when the debugger is active.
-
-This variable can be bound to the following:
-
-* `realgud-populate-common-fn-keys-none' -- Don't bind any keys.
-* `realgud-populate-common-fn-keys-standard' -- Bind the function
-* Any other value is expected to be a callable function that takes one
-  argument, the keymap, and populates it with suitable keys."
-  :type 'function
-  :group 'realgud)
-
-;; -------------------------------------------------------------------
-;; Key bindings
-;;
-
-(defun realgud-populate-common-fn-keys-standard (&optional map)
-  "Bind the debugger function key layout used by many debuggers.
-
-\\{realgud-example-map-standard}"
-  (define-key map [f5]    'realgud:cmd-continue)
-  (define-key map [S-f5]  'realgud:cmd-quit)
-  ;; (define-key map [f9]    'realgud-toggle-source-breakpoint)
-  (define-key map [f9]    'realgud:cmd-break)
-  ;; (define-key map [C-f9]  'realgud-toggle-source-breakpoint-enabled)
-  (define-key map [f10]   'realgud:cmd-next)
-  (define-key map [f11]   'realgud:cmd-step)
-  (define-key map [S-f11] 'realgud:cmd-finish)
-  (define-key map [M-down]    'realgud-track-hist-newer)
-  (define-key map [A-down]    'realgud-track-hist-newer)
-  (define-key map [M-kp-2]    'realgud-track-hist-newer)
-  (define-key map [M-up]      'realgud-track-hist-older)
-  (define-key map [A-up]      'realgud-track-hist-older)
-  (define-key map [M-kp-8]    'realgud-track-hist-older)
-  (define-key map [M-kp-up]   'realgud-track-hist-older)
-  (define-key map [M-kp-down] 'realgud-track-hist-newer)
-  (define-key map [M-print]   'realgud-track-hist-older)
-  (define-key map [M-S-down]  'realgud-track-hist-newest)
-  (define-key map [M-S-up]    'realgud-track-hist-oldest)
-  (define-key map "\C-c " 'realgud:cmd-break)
-  )
-
-(defun realgud-populate-common-fn-keys-none (&optional map)
-  "Do not any debugger function keys"
-  )
-
-;; TODO: add eclipse, and netbeans
-
-(defun realgud-populate-common-keys (map)
-  "Define the keys that are used by all debugger buffers, including
-source-code buffers
-
-The variable `realgud-populate-common-fn-keys-function' controls the layout."
-  (define-key map "\C-x\C-a\C-q" 'realgud-short-key-mode)
-  (if realgud-populate-common-fn-keys-function
-      (funcall realgud-populate-common-fn-keys-function map)))
-
-(defun realgud-populate-src-buffer-map-plain (map)
-  "Bind ordinary text characters used in debugger source-code buffers.
-
-This does not touch change menus; for that see 
`realgud-populate-debugger-menu'.
-Nor does it touch prefix keys; for that see `realgud-populate-keys-standard'"
-  ;; Common Debugger functions
-  (let ((prefix-map (make-sparse-keymap)))
-    (define-key map "b" 'realgud:cmd-break)
-    (define-key map "D" 'realgud:cmd-delete)
-    (define-key map "X" 'realgud:cmd-clear)
-    (define-key map "-" 'realgud:cmd-disable)
-    (define-key map "+" 'realgud:cmd-enable)
-    (define-key map "T" 'realgud:cmd-backtrace)
-    (define-key map [delete] 'realgud:cmd-delete)
-    (define-key map [enter] 'realgud:cmd-repeat-last)
-    (define-key map (kbd "RET") 'realgud:cmd-repeat-last)
-    (define-key map " " 'realgud:cmd-step)
-    (define-key map "f" 'realgud:cmd-finish)
-    (define-key map "n" 'realgud:cmd-next)
-    (define-key map "q" 'realgud:cmd-quit)
-    (define-key map "k" 'realgud:cmd-kill)
-    (define-key map "r" 'realgud:cmd-restart)
-    (define-key map "R" 'realgud:cmd-restart)
-    (define-key map "s" 'realgud:cmd-step)
-    (define-key map "!" 'realgud:cmd-shell)
-
-    ;; FIXME: these can go to a common routine. See also shortkey.el
-    ;; and backtrace-mode.el
-    (define-key map "<" 'realgud:cmd-newer-frame)
-    (define-key map ">" 'realgud:cmd-older-frame)
-    (define-key map "d" 'realgud:cmd-newer-frame)
-    (define-key map "u" 'realgud:cmd-older-frame)
-    (define-key map "C" 'realgud-window-cmd-undisturb-src)
-    (define-key map "F" 'realgud:window-bt)
-    (define-key map "Q" 'realgud:cmd-terminate)
-    (define-key map "S" 'realgud-window-src-undisturb-cmd)
-    (define-key map "U" 'realgud:cmd-until)
-
-    (define-key map [M-down]    'realgud-track-hist-newer)
-    (define-key map [M-kp-2]    'realgud-track-hist-newer)
-    (define-key map [M-up]      'realgud-track-hist-older)
-    (define-key map [M-kp-8]    'realgud-track-hist-older)
-    (define-key map [M-kp-up]   'realgud-track-hist-older)
-    (define-key map [M-kp-down] 'realgud-track-hist-newer)
-    (define-key map [M-print]   'realgud-track-hist-older)
-    (define-key map [M-S-down]  'realgud-track-hist-newest)
-    (define-key map [M-S-up]    'realgud-track-hist-oldest)
-    ))
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/lang.el 
b/packages/realgud/realgud/common/lang.el
deleted file mode 100644
index d3b4cb3..0000000
--- a/packages/realgud/realgud/common/lang.el
+++ /dev/null
@@ -1,111 +0,0 @@
-;; Copyright (C) 2010, 2012, 2014-2015 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;;; Programming language specific stuff.
-(require 'load-relative)
-
-(defun realgud-lang-mode? (filename lang-str)
-  "Return true if FILENAME is a buffer we are visiting a buffer
-that is in LANG-STR mode. The test is just that the major mode
-starts LANG-STR."
-  (let ((buffer (and filename (find-buffer-visiting filename)))
-        (match-pos))
-    (cond (buffer
-          (save-current-buffer
-            (set-buffer buffer)
-            (setq match-pos
-                  (string-match (format "^%s-" lang-str)
-                                (format "%s" major-mode))))
-          (and match-pos (= 0 match-pos)))
-         ('t nil)
-         ))
-  )
-
-(defun realgud:suggest-file-from-buffer (lang-str &optional opt-buff-list)
-    "Suggest the first in the buffer list for which test-func is
-    't. Typically this is used. To search for a buffer in one of
-    the programming modes like Ruby or Python."
-    (let ((file)
-          (buff)
-          (not-found 't)
-          (buff-list (or opt-buff-list (buffer-list)))
-          )
-      (while (and not-found (setq buff (car-safe buff-list)))
-        (setq buff-list (cdr buff-list))
-        (setq file (buffer-file-name buff))
-        (if (realgud-lang-mode? file lang-str)
-            (setq not-found nil)
-          ))
-      (if not-found nil file)
-      )
-    )
-
-(defun realgud-suggest-lang-file (lang-str lang-ext-regexp &optional 
last-resort)
- "Suggest a file to debug. We search for the the major mode for
-that programming language using we check filenames using
-LANG-EXT-REGEXP. For example, for ruby LANG-STR would be 'ruby'
-and LANG-EXT-REGEXP would be '\\.rb$'.
-
-Buffers and files are ranked with a priority. Higher is more
-priority and selected will be selected over lower-priorities.
-
-The first priority is given to the current buffer. If the major
-mode matches LANG-STR, then we are done. If not, we'll set
-priority 2 and we keep going.  Then we will try files in the
-default-directory. Of those buffers we are visiting, we check the
-major mode. The first one we find we will return.  Failing this,
-we see if the file is executable and has a LANG-EXT suffix. These
-have priority 8.  Failing that, we'll go for just having a
-LANG-EXT suffix. These have priority 7. And other executable
-files that are not directories have priority 6 if they have the
-right LANG-EXT, otherwise they are priority 5.
-
-Within a given priority, we use the first one we find."
-    (let* ((file)
-           (file-list (directory-files default-directory))
-           (priority 2)
-           (is-not-directory)
-           (result (buffer-file-name)))
-      (unless (realgud-lang-mode? result lang-str)
-       (while (and (setq file (car-safe file-list)) (< priority 8))
-         (setq file-list (cdr file-list))
-         (when (realgud-lang-mode? file lang-str)
-           (setq result file)
-           (setq priority
-                 (if (file-executable-p file)
-                     (setq priority 8)
-                   (setq priority 7))))
-         ;; The file isn't in a language-mode buffer,
-         ;; Check for an executable file with a language extension.
-         (if (and file (file-executable-p file)
-                  (setq is-not-directory (not (file-directory-p file))))
-             (if (and (string-match lang-ext-regexp file))
-                 (if (< priority 6)
-                     (progn
-                       (setq result file)
-                       (setq priority 6))))
-           (when (and is-not-directory (< priority 5))
-             ;; Found some sort of regular file.
-             (setq result file)
-             (setq priority 5))
-           ))
-       )
-      (if (< priority 6)
-         (if (setq file (realgud:suggest-file-from-buffer lang-str))
-             (setq result file)
-           (if last-resort (setq result last-resort))))
-      result)
-    )
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/loc.el 
b/packages/realgud/realgud/common/loc.el
deleted file mode 100644
index f90436f..0000000
--- a/packages/realgud/realgud/common/loc.el
+++ /dev/null
@@ -1,200 +0,0 @@
-;; Copyright (C) 2015-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;; This describes a debugger location structure and has code for
-;; working with them.
-
-(eval-when-compile (require 'cl-lib))
-
-(require 'load-relative)
-(require 'loc-changes)
-(require-relative-list '("fringe" "follow") "realgud-")
-(require-relative-list '("buffer/source") "realgud-buffer-")
-
-;; FIXME: removed because of recursive loads
-;; (require-relative-list '("buffer/helper") "realgud-buffer-")
-
-(declare-function realgud:strip                  'realgud)
-(declare-function realgud-get-cmdbuf-from-srcbuf 'realgud-buffer-helper)
-(declare-function realgud-srcbuf?                'realgud-buffer-source)
-
-(cl-defstruct realgud-loc
-"Our own location type. Even though a mark contains a
-file-name (via a buffer) and a line number (via an offset), we
-want to save the values that were seen/requested originally."
-   num           ;; If there is a number such as a breakpoint or frame
-                ;; number associated with this location, this is set.
-                ;; nil otherwise.
-   filename
-   line-number
-   column-number ;; Column offset within line
-   source-text   ;; Source text if available
-   marker        ;; Position in source code
-   cmd-marker    ;; Position in command process buffer
-)
-
-(defalias 'realgud-loc? 'realgud-loc-p)
-
-;; The below function is generic and might be found in standard
-;; library. Or it might be moved someplace more generic.
-(defun realgud:buffer-line-no-props()
-  "Returns a string containing the line that `point' is at,
-without buffer properties."
-  (buffer-substring-no-properties (point-at-bol)
-                                 (point-at-eol)))
-
-(defun realgud:loc-describe (loc)
-  "Display realgud-cmdcbuf-info.
-Information is put in an internal buffer called *Describe*."
-  (interactive "")
-  (switch-to-buffer (get-buffer-create "*Describe*"))
-  (realgud:org-mode-append-loc loc))
-
-(defun realgud:org-mode-append-loc (loc)
-  "Display realgud-cmdcbuf-info.
-Information is put in an internal buffer called *Describe*."
-  (let ((column-number (realgud-loc-column-number loc))
-       (bp-num (realgud-loc-num loc))
-       (source-text (realgud-loc-source-text loc))
-       (filename (realgud-loc-filename loc)))
-    (insert "  - filename      :: ")
-    (put-text-property
-     (insert-text-button filename
-                        'action 'realgud:follow-event
-                        'help-echo "mouse-2: go to this file")
-     (point)
-     'file filename)
-    (insert "\n")
-    (mapc 'insert
-         (list
-          (format "  - line number   :: %s\n" (realgud-loc-line-number loc))
-          (if bp-num
-              (format "  - brkpt num     :: %s\n" (realgud-loc-num loc))
-            "")
-          (if column-number
-              (format "  - column number :: %s\n"
-                      (realgud-loc-column-number loc))
-            "")
-          (if source-text
-              (format "  - source text   :: %s\n" (realgud-loc-source-text 
loc))
-            "")
-          ))
-    ;; Make locations clickable
-    (insert "  - source marker :: ")
-    (put-text-property
-     (insert-text-button (format "%s" (realgud-loc-marker loc))
-                        'action 'realgud:follow-event
-                        'help-echo "mouse-2: go to this source location")
-     (point)
-     'mark (realgud-loc-marker loc))
-
-    (insert "\n  - cmdbuf marker :: ")
-    (put-text-property
-     (insert-text-button (format "%s" (realgud-loc-cmd-marker loc))
-                        'action 'realgud:follow-event
-                        'help-echo "mouse-2: go to this command-buffer 
location")
-     (point)
-     'mark (realgud-loc-cmd-marker loc))
-    (insert "\n")
-    )
-  )
-
-
-(defun realgud-loc-current(&optional source-buffer cmd-marker)
-  "Create a location object for the point in the current buffer.
-   If SOURCE-BUFFER is not given, take the current buffer as the
-   source buffer."
-  (interactive "")
-  (unless source-buffer
-    (setq source-buffer (current-buffer)))
-  (unless (realgud-srcbuf? source-buffer)
-    (error "%s is not a realgud source buffer" source-buffer))
-  (unless cmd-marker
-    (setq cmd-marker
-         (realgud-get-cmdbuf-from-srcbuf source-buffer))
-    )
-  (with-current-buffer source-buffer
-    (let ((mark (point-marker))
-         (text (realgud:buffer-line-no-props)))
-      (make-realgud-loc
-       :filename (buffer-file-name source-buffer)
-       :column-number (current-column)
-       :line-number (line-number-at-pos)
-       :source-text text
-       :marker      mark
-       :cmd-marker cmd-marker
-       )
-      )))
-
-(defun realgud-loc-marker=(loc marker)
-  (setf (realgud-loc-marker loc) marker))
-
-(defun realgud-loc-goto(loc)
-  "Position point in the buffer referred to by LOC. This may
-involve reading in a file. In the process, the marker inside LOC
-may be updated.
-
-If LOC is found, The buffer containing the location referred to,
-the source-code buffer, is returned. Otherwise, nil is returned."
-  (if (realgud-loc? loc)
-      (let* ((filename    (realgud-loc-filename loc))
-            (line-number (realgud-loc-line-number loc))
-            (column-number (realgud-loc-column-number loc))
-            (marker      (realgud-loc-marker loc))
-            (cmd-marker  (realgud-loc-cmd-marker loc))
-            (use-marker  nil)
-            (src-buffer  (marker-buffer (or marker (make-marker)))))
-       (if (and (not src-buffer) filename)
-           (setq src-buffer (find-file-noselect filename)))
-       (if cmd-marker
-           (with-current-buffer (marker-buffer cmd-marker)
-             (goto-char cmd-marker)))
-       (if src-buffer
-           (with-current-buffer src-buffer
-             (when (and marker (marker-position marker))
-               ;; A marker has been set in loc, so use that.
-               (goto-char (marker-position marker))
-               (setq use-marker 't)
-               (let ((current-text (realgud:buffer-line-no-props))
-                     (loc-text (realgud-loc-source-text loc)))
-                 (unless (and loc-text
-                              (equal (realgud:strip current-text) 
(realgud:strip loc-text)))
-                   (loc-changes-goto line-number)
-                   (setq current-text (realgud:buffer-line-no-props))
-                   (when (equal current-text loc-text)
-                     (message "Marked location needed updating")
-                     (setq use-marker nil))
-                   )))
-             (if use-marker
-                 (goto-char (marker-position marker))
-               ;; else
-               ;; We don't have a position set in the source buffer
-               ;; so find it and go there. We use `loc-changes-goto'
-               ;; to find that spot. `loc-changes-goto' keeps a
-               ;; record of the first time we went to that spot, so
-               ;; in the face of buffer modifications, it may be more
-               ;; reliable.
-               (let ((src-marker))
-                 (loc-changes-goto line-number)
-                 (when column-number
-                   (move-to-column column-number))
-                 (setq src-marker (point-marker))
-                 (realgud-loc-marker= loc src-marker)
-                 ))))
-       src-buffer )))
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/lochist.el 
b/packages/realgud/realgud/common/lochist.el
deleted file mode 100644
index 088589f..0000000
--- a/packages/realgud/realgud/common/lochist.el
+++ /dev/null
@@ -1,145 +0,0 @@
-;; Copyright (C) 2010, 2012, 2014-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;;; Debugger location ring
-;;; Commentary:
-
-;; This file manages a ring of (recently stopped) positions to allow
-;; the programmer to move between them.
-
-;;; Code:
-
-(eval-when-compile (require 'cl-lib))
-(require 'ring)
-(require 'org)
-(require 'load-relative)
-(require-relative-list '("loc") "realgud-")
-
-(declare-function realgud:loc-describe 'realgud-loc)
-
-(defcustom realgud-loc-hist-size 20  ; For testing. Should really be larger.
-  "Size of realgud's position history ring"
-  :type 'integer
-  :group 'realgud)
-
-(cl-defstruct realgud-loc-hist
-  "A list of source-code positions recently encountered"
-  (position -1)
-  (ring (make-ring realgud-loc-hist-size)))
-
-(defun realgud:loc-hist-describe(loc-hist)
-  "Format LOC-HIST values inside buffer *Describe*"
-  (switch-to-buffer (get-buffer-create "*Describe*"))
-  (org-mode)
-  (insert "** Source Positions Stopped at (loc-hist)\n")
-  (mapc 'insert
-       (list
-        (format "  -  buffer size  :: %d\n" realgud-loc-hist-size)
-        (format "  -  position     :: %d\n"
-                (realgud-loc-hist-position loc-hist))))
-  (let ((locs (cddr (realgud-loc-hist-ring loc-hist)))
-       (loc)
-       (i 0))
-    (while (and (< i (length locs)) (setq loc (elt locs i)) (realgud-loc? loc) 
)
-      (insert (format "*** %d\n" i))
-      (realgud:loc-describe loc)
-      (setq i (1+ i))
-      )
-    )
-)
-
-(defun realgud-loc-hist-item-at(loc-hist position)
-  "Get the current item stored at POSITION of the ring
-component in LOC-HIST"
-  (lexical-let ((ring (realgud-loc-hist-ring loc-hist)))
-    (unless (ring-empty-p ring)
-      (ring-ref ring position))))
-
-(defun realgud-loc-hist-item(loc-hist)
-  "Get the current item of LOC-HIST at the position previously set"
-  (realgud-loc-hist-item-at
-   loc-hist
-   (realgud-loc-hist-position loc-hist)))
-
-(defun realgud-loc-hist-add(loc-hist loc)
-  "Add FRAME to LOC-HIST"
-  ;; Switching frames shouldn't save a new ring
-  ;; position. Also make sure no position is different.
-  ;; Perhaps duplicates should be controlled by an option.
-  (let* ((ring (realgud-loc-hist-ring loc-hist))
-        (old-loc (realgud-loc-hist-item loc-hist)))
-    (unless (and
-            old-loc
-            (equal (realgud-loc-filename old-loc)
-                   (realgud-loc-filename loc))
-            (equal (realgud-loc-line-number old-loc)
-                   (realgud-loc-line-number loc))
-            (equal (realgud-loc-column-number old-loc)
-                   (realgud-loc-column-number old-loc)))
-      (setf (realgud-loc-hist-position loc-hist) 0)
-      (ring-insert ring loc)
-    )
-    ))
-
-(defun realgud-loc-hist-clear(loc-hist)
-  "Clear out all source locations in LOC-HIST"
-  (lexical-let* ((ring (ring-ref (realgud-loc-hist-ring loc-hist)
-                                (realgud-loc-hist-position loc-hist)))
-                (head (car ring)))
-    (setf (realgud-loc-hist-position loc-hist) (- head 1))
-    (while (not (ring-empty-p ring))
-      (ring-remove ring))))
-
-(defun realgud-loc-hist-index(loc-hist)
-  "Return the ring-index value of LOC-HIST"
-  (lexical-let* (
-                (ring (realgud-loc-hist-ring loc-hist))
-                (head (car ring))
-                (ringlen (cadr ring))
-                (index (mod (+ ringlen head
-                               (- (realgud-loc-hist-position loc-hist)))
-                            ringlen)))
-    (if (zerop index) ringlen index)
-    ))
-
-(defun realgud-loc-hist-set (loc-hist position)
-  "Set LOC-HIST to POSITION in the stopping history"
-  (setf (realgud-loc-hist-position loc-hist) position))
-
-;; FIXME: add numeric arg?
-(defun realgud-loc-hist-newer (loc-hist)
-  "Set LOC-HIST position to an newer position."
-
-  (setf (realgud-loc-hist-position loc-hist)
-       (ring-minus1 (realgud-loc-hist-position loc-hist)
-                   (ring-length (realgud-loc-hist-ring loc-hist)))))
-
-(defun realgud-loc-hist-newest (loc-hist)
-  "Set LOC-HIST position to the newest position."
-  (setf (realgud-loc-hist-position loc-hist) -1))
-
-;; FIXME: add numeric arg?
-(defun realgud-loc-hist-older (loc-hist)
-  "Set LOC-HIST position to an older position."
-    (setf (realgud-loc-hist-position loc-hist)
-        (ring-plus1 (realgud-loc-hist-position loc-hist)
-                     (ring-length (realgud-loc-hist-ring loc-hist)))))
-
-(defun realgud-loc-hist-oldest (loc-hist)
-  "Set LOC-HIST to the oldest stopping point."
-  (lexical-let* ((ring (realgud-loc-hist-ring loc-hist))
-                (head (car ring)))
-    (setf (realgud-loc-hist-position loc-hist) head)))
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/menu.el 
b/packages/realgud/realgud/common/menu.el
deleted file mode 100644
index 2d3209c..0000000
--- a/packages/realgud/realgud/common/menu.el
+++ /dev/null
@@ -1,183 +0,0 @@
-; Copyright (C) 2010-2011, 2015 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;; -------------------------------------------------------------------
-;; Menu support.
-;;
-
-(require 'load-relative)
-
-;; We want the doc strings from gdb-like commands for our help
-;; menus.
-(require-relative-list '("cmds") "realgud-")
-
-;; Note: We want the key binding to show in the menu. However, our
-;; situation is a little bit complex:
-;;
-;; 1) We want the binding of the `common' man (i.e. the function key
-;;    the user has selected.)
-;;
-;; 2) We want this even when the menu is disabled and the key isn't
-;;    bound, typically when the debugger isn't running.
-;;
-;; This has been solved by setting up an explicit ":keys" properly.
-(defun realgud-menu-item (common-map name cmd &rest args)
-  "Return a menu item entry with the correct key bindings.
-
-A command can be bound to a number of different key sequences. If
-the realgud common map contains a binding it is displayed in the
-menu. (The common map typically contains function key bindings.)"
-  (let ((key-binding (where-is-internal cmd (list common-map) t))
-        (hint '()))
-    (if key-binding
-        (setq hint (list :keys (key-description key-binding))))
-    (append (list 'menu-item name cmd)
-            hint
-            args)))
-
-
-;; I had a *lot* of trouble with emacs keymaps and duplicate menus.
-;; Don't use set-parent-mode on any minor mode.
-;; It is possible that realgud-track-mode could be a derived major mode whose 
parent
-;; is comint, but that seems drastic.
-;; Instead we take the various minor modes and add a debugger menu to that.
-(defun realgud-populate-debugger-menu (map)
-  "Populate the 'Debugger' menu inside an existing menu (short-key or 
track-mode)."
-  (let ((debugger-map (make-sparse-keymap "Debugger")))
-    (define-key map [menu-bar debugger] (cons "Debugger" debugger-map))
-    (define-key debugger-map [command]
-      (realgud-menu-item debugger-map "Go to Command Buffer"
-                        'realgud-window-cmd-undisturb-src
-                        :enable '(and (realgud-get-process) (not 
(realgud-cmdbuf?)))
-                        :help (documentation 'realgud-window-cmd-undisturb-src)
-                        ))
-
-    (define-key debugger-map [source]
-      (realgud-menu-item debugger-map "Go to Source Buffer"
-                        'realgud-window-src-undisturb-cmd
-                        :enable '(and (realgud-get-process) (not 
(realgud-srcbuf?)))
-                        :help (documentation 'realgud-window-src-undisturb-cmd)
-                        ))
-
-    (define-key debugger-map [info]
-      (realgud-menu-item debugger-map "Debugger Info"
-                        'realgud:cmdbuf-info-describe
-                        :help (documentation 'realgud:cmdbuf-info-describe)
-                        ))
-
-    (define-key debugger-map [backtrace]
-      (realgud-menu-item debugger-map "Backtrace" 'realgud:window-bt
-                        :enable '(realgud-get-process)
-                        :help (documentation 'realgud:window-bt)
-                        ))
-
-    (define-key debugger-map [arrow3]
-      (realgud-menu-item debugger-map "Arrow 3" 'realgud-goto-arrow3
-                        :enable '(realgud-get-process)
-                        :help (documentation 'realgud-goto-arrow3)
-                        ))
-
-    (define-key debugger-map [arrow2]
-      (realgud-menu-item debugger-map "Arrow 2" 'realgud-goto-arrow2
-                        :enable '(realgud-get-process)
-                        :help (documentation 'realgud-goto-arrow2)
-                        ))
-
-    (define-key debugger-map [arrow1]
-      (realgud-menu-item debugger-map "Arrow 1" 'realgud-goto-arrow1
-                        :enable '(realgud-get-process)
-                        :help (documentation 'realgud-goto-arrow1)
-                        ))
-
-    (define-key debugger-map [break]
-       (realgud-menu-item debugger-map "Set Breakpoint" 'realgud:cmd-break
-                          :enable '(realgud-get-process)
-                          :help (documentation 'realgud:cmd-break)
-                          ))
-
-    (define-key debugger-map [continue]
-      (realgud-menu-item debugger-map "Continue" 'realgud:cmd-continue
-                        :enable '(realgud-get-process)
-                        :help (documentation 'realgud:cmd-continue)
-                        ))
-
-    (define-key debugger-map [until]
-      (realgud-menu-item debugger-map "Continue to Line" 'realgud:cmd-until
-                        :enable '(and (realgud-get-process) 
realgud-short-key-mode)
-                        :help (documentation 'realgud:cmd-until)
-                        ))
-
-    (define-key debugger-map [next]
-      (realgud-menu-item debugger-map "Next (step through)" 'realgud:cmd-next
-                        :enable '(realgud-get-process)
-                          :help (documentation 'realgud:cmd-next)
-                          ))
-
-    (define-key debugger-map [finish]
-      (realgud-menu-item debugger-map "Finish (step out)" 'realgud:cmd-finish
-                        :enable '(realgud-get-process)
-                          :help (documentation 'realgud:cmd-finish)
-                          ))
-
-    (define-key debugger-map [step]
-      (realgud-menu-item debugger-map "Step (step into)" 'realgud:cmd-step
-                        :enable '(realgud-get-process)
-                        :help (documentation 'realgud:cmd-step)
-                        ))
-
-    (define-key debugger-map [menu-bar debugger line1] '(menu-item "--"))
-
-    (define-key debugger-map [down]
-      (realgud-menu-item debugger-map "Down Stack" 'realgud:cmd-newer-frame
-                        :enable '(realgud-get-process)
-                        :help (documentation 'realgud:cmd-newer-frame)
-                        ))
-
-    (define-key debugger-map [up]
-      (realgud-menu-item debugger-map "Up Stack" 'realgud:cmd-older-frame
-                        :enable '(realgud-get-process)
-                        :help (documentation 'realgud:cmd-older-frame)
-                        ))
-
-    (define-key debugger-map [menu-bar debugger line1] '(menu-item "--"))
-
-    (define-key debugger-map [quit]
-      (realgud-menu-item debugger-map "Quit" 'realgud:cmd-quit
-                        :enable '(realgud-get-process)
-                        :help (documentation 'realgud:cmd-quit)
-                        ))
-
-    (define-key debugger-map [restart]
-      (realgud-menu-item debugger-map "Restart" 'realgud:cmd-restart
-                        :enable '(realgud-get-process)
-                        :help (documentation 'realgud:cmd-restart)
-                        ))
-
-    (define-key debugger-map [eval]
-      (realgud-menu-item debugger-map "Evaluate region or string" 
'realgud:cmd-eval-dwim
-                        :enable '(realgud-get-process)
-                        :help (documentation 'realgud:cmd-eval-dwim)
-                        ))
-
-    (define-key debugger-map [Recenter]
-      (realgud-menu-item debugger-map "Recenter" 'realgud-recenter-arrow
-                        :enable '(realgud-get-process)
-                        :help (documentation 'realgud-recenter-arrow)
-                        ))
-    ;; Put them in the menu bar:
-    (setq menu-bar-final-items (append '(debugger) menu-bar-final-items))
-    map
-  ))
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/regexp.el 
b/packages/realgud/realgud/common/regexp.el
deleted file mode 100644
index e21de25..0000000
--- a/packages/realgud/realgud/common/regexp.el
+++ /dev/null
@@ -1,76 +0,0 @@
-;; Copyright (C) 2010-2011, 2014-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;;; FIXME - think of a better name.
-;;;
-;;; Debugger regular expressions for many kinds of
-;;;  debuggers
-
-;;; Here we have hash tables used in each kind of debugger
-;;; and names for patterns matching fields in a location
-;;; structure
-
-;;; Code:
-
-;; -------------------------------------------------------------------
-;; Variables defining regular expressions (regexp:s).
-;;
-
-(eval-when-compile (require 'cl-lib))
-
-(cl-defstruct realgud-loc-pat
-  "Information to match and extract position and other related information 
typically
-output by a debugger inside a process shell"
-  (num)                ;; General number. Could be for example
-                      ;; breakpoint number,
-  (string)             ;; General string, Could be for example a list of
-                       ;; breakpoint number. Or can be used if for example
-                       ;; if we need more than one in a complicated re
-                       ;; where we can't assign a single number to a
-                       ;; file position as in Perl locations.
-  (regexp)             ;; a stack position, or thread number.
-  (file-group)         ;; Filename position in struct
-  (line-group)         ;; Line number position in struct
-  (alt-file-group)     ;; Used when regexp is too complicated and use \|
-                       ;; e.g. perldb file loc regexps
-  (alt-line-group)     ;; ditto
-  (char-offset-group)  ;; Character offset position in struct
-  (instruction-address-group)
-  (column-group)
-  (ignore-file-re)     ;; Some debuggers create pseudo files in eval strings
-                       ;; for example "(eval)" in Ruby and Perl
-  (text-group)         ;; Some source text that should found at position
-  (class-group)        ;; Java doesn't refer to files, but class names
-  (event-group)        ;; Stopping event, e.g.statement, breakpoint,
-                      ;; call, return, exception, etc.
-)
-
-(defconst realgud:regexp-captured-num  "\\([0-9]+\\)")
-
-(defvar realgud-pat-hash (make-hash-table :test 'equal)
-  "Hash key is the debugger name, a string. The values of a hash entry
-  is a realgud-loc-pat struct")
-
-(defvar realgud-command-hash (make-hash-table :test 'equal)
-  "Hash key is the debugger name, a string. The value of a hash
-  entry is a hash table mapping cannonic command name
-  debugger-specific command name. For example, for trepanning:
-  'quit' -> 'quit!'")
-
-(defvar realgud:variable-basename-hash (make-hash-table :test 'equal)
-  "Hash key is the debugger name, a string. The value of a hash
-  entry is the base name to use that variables of that debugger use.
-  For example, for 'gdb' it is 'realgud:gdb'.")
-
-(provide 'realgud-regexp)
diff --git a/packages/realgud/realgud/common/reset.el 
b/packages/realgud/realgud/common/reset.el
deleted file mode 100644
index 03f734b..0000000
--- a/packages/realgud/realgud/common/reset.el
+++ /dev/null
@@ -1,58 +0,0 @@
-;; Copyright (C) 2010, 2014, 2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;; reset state on quit or restart
-
-(require 'load-relative)
-(require 'loc-changes)
-(require-relative-list '("bp" "fringe" "helper") "realgud-")
-(require-relative-list '("buffer/helper" "buffer/command" "buffer/source")
-                      "realgud-buffer-")
-
-(declare-function loc-changes-clear-buffer       'loc-changes)
-(declare-function realgud-bp-remove-icons        'realgud-buffer-command)
-(declare-function realgud-cmdbuf?                'realgud-buffer-command)
-(declare-function realgud-get-cmdbuf-from-srcbuf 'realgud-buffer-helper)
-(declare-function realgud-fringe-erase-history-arrows
-                 'realgud-buffer-command)
-
-(defun realgud:reset (&optional opt-buffer)
-  "Reset state prior to quitting or restarting"
-  (interactive)
-  (let* ((buf (or opt-buffer (current-buffer)))
-        (cmdbuf
-         (cond ((realgud-cmdbuf? buf) buf)
-               ((realgud-get-cmdbuf-from-srcbuf buf))
-               ('t nil))))
-    (if cmdbuf
-       (with-current-buffer cmdbuf
-         (realgud-fringe-erase-history-arrows)
-         (let ((buf-list (realgud-sget 'cmdbuf-info 'srcbuf-list)))
-           (dolist (buf buf-list buf-list)
-             (with-current-buffer buf
-               (loc-changes-clear-buffer)
-               (realgud-fringe-erase-history-arrows)
-               ;; FIXME: iterate over specific breakpoints.
-               (realgud-bp-remove-icons (point-min) (point-max))
-               )
-             (message "buffer %s" buf)
-             ))
-         (setq realgud-cmdbuf-info nil)
-         )
-      ;; else
-      (error "Unable to find command buffer from %s" buf)
-      ))
-  )
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/run.el 
b/packages/realgud/realgud/common/run.el
deleted file mode 100644
index b34a3f0..0000000
--- a/packages/realgud/realgud/common/run.el
+++ /dev/null
@@ -1,220 +0,0 @@
-;; Copyright (C) 2015-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-; (require 'term)
-
-(require 'cl-lib)
-(require 'shell)
-(require 'load-relative)
-(require-relative-list '("core" "track" "utils") "realgud-")
-(require-relative-list '("buffer/command") "realgud-buffer-")
-
-(declare-function realgud-cmdbuf-info-in-debugger?=   'realgud-buffer-command)
-(declare-function realgud-cmdbuf-info-cmd-args=       'realgud-buffer-command)
-(declare-function realgud:track-set-debugger          'realgud-track)
-(declare-function realgud-cmdbuf-info-starting-directory= 
'realgud-buffer-command)
-(declare-function realgud-parse-command-arg           'realgud-core)
-(declare-function realgud:expand-file-name-if-exists  'realgud-core)
-(declare-function realgud:flatten                     'realgud-utils)
-
-(defvar starting-directory)
-
-(defun realgud:parse-cmd-args(args two-args opt-two-args interp-regexp 
debugger-regexp
-                                  path-args-list annotate-args)
-  "Parse command line ARGS for the annotate level and name of script to debug.
-
-ARGS should contain a tokenized list of the command line to run.
-
-We return the a list containing:
-* the command processor (e.g. bash) and it's arguments if any - a list of 
strings
-* the name of the debugger given (e.g. bashdb) and its arguments - a list of 
strings.
-  If there is no debugger, for example gdb, nodejs then nil is returned.
-* the script name and its arguments - list of strings
-* whether the annotate or emacs option was given ('-A', '--annotate' or 
'--emacs) - a boolean
-
-The script name and options mentioning paths are file expanded
-
-For example for the following input
-  (map 'list 'symbol-name
-   '(bash --norc bashdb -l . --emacs ./gcd.sh a b))
-
-we might return:
-   ((\"bash\" \"--norc\") (\"bashdb\" \"-l\" \"/tmp\" \"--emacs\") 
(\"/tmp/gcd.sh\" \"a\" \"b\") t)
-
-Note that path elements have been expanded via `expand-file-name'.
-"
-  ;; Parse the following kind of pattern:
-  ;;  [bash bash-options] bashdb bashdb-options script-name script-options
-  (let (
-       (pair)
-       ;; Things returned
-       (script-name nil)
-       (debugger-name nil)
-       (interpreter-args '())
-       (debugger-args '())
-       (script-args '())
-       (annotate-p nil))
-
-    (if (not (and args))
-       ;; Got nothing: return '(nil, nil nil nil)
-       (list interpreter-args debugger-args script-args annotate-p)
-      ;; else
-      ;; Strip off optional interpreter name
-      (when (and interp-regexp
-                (string-match interp-regexp
-                              (file-name-sans-extension
-                               (file-name-nondirectory (car args)))))
-       (setq interpreter-args (list (pop args)))
-
-       ;; Strip off compiler/intepreter-specific options
-       (while (and args
-                   (string-match "^-" (car args)))
-         (setq pair (realgud-parse-command-arg
-                     args two-args opt-two-args))
-         (nconc interpreter-args (car pair))
-         (setq args (cadr pair))))
-
-      ;; Skip to the first non-option argument.
-      (while (and args (not script-name))
-       (let ((arg (car args)))
-         (cond
-          ;; path-like options
-          ((member arg path-args-list)
-           (setq arg (pop args))
-           (nconc debugger-args
-                  (list arg (realgud:expand-file-name-if-exists
-                             (pop args)))))
-          ;; Other options with arguments.
-          ((string-match "^-" arg)
-           (setq pair (realgud-parse-command-arg
-                       args two-args opt-two-args))
-           (nconc debugger-args (car pair))
-           (setq args (cadr pair)))
-          ;; Anything else must be the script to debug.
-          (t (setq script-name (realgud:expand-file-name-if-exists arg))
-             (setq script-args (cons script-name (cdr args))))
-          )))
-      (list interpreter-args debugger-args script-args annotate-p))))
-
-(defun realgud:run-process(debugger-name script-filename cmd-args
-                                        minibuffer-history
-                                        &optional no-reset)
-  "Runs `realgud-exec-shell' with DEBUGGER-NAME SCRIPT-FILENAME
-and CMD-ARGS. If this succeeds, we save CMD-ARGS in command-buffer
-for use if we want to restart.  If we don't succeed in running
-the program, we will switch to the command buffer which shows
-details of the error. The command buffer or nil is returned.
-
-DEBUGGER-NAME is used in selecting the tracking mode inside the
-command buffer. The debugger name and SCRIPT-FILENAME are used in
-selecting a buffer name for the command buffer.
-
-Normally command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset."
-
-  (let ((cmd-buf))
-    (setq cmd-buf
-         (apply 'realgud-exec-shell debugger-name script-filename
-                (car cmd-args) no-reset (cdr cmd-args)))
-    ;; FIXME: Is there probably is a way to remove the
-    ;; below test and combine in condition-case?
-    (let ((process (get-buffer-process cmd-buf)))
-      (if (and process (eq 'run (process-status process)))
-         (progn
-           (switch-to-buffer cmd-buf)
-           (realgud:track-set-debugger debugger-name)
-           (realgud-cmdbuf-info-in-debugger?= 't)
-           (realgud-cmdbuf-info-cmd-args= cmd-args)
-           (when cmd-buf
-             (switch-to-buffer cmd-buf)
-             (when realgud-cmdbuf-info
-               (let* ((info realgud-cmdbuf-info)
-                      (cmd-args (realgud-cmdbuf-info-cmd-args info))
-                      (cmd-str  (mapconcat 'identity  cmd-args " ")))
-                 (if (boundp 'starting-directory)
-                     (realgud-cmdbuf-info-starting-directory= 
starting-directory))
-                 (set minibuffer-history
-                      (cl-remove-duplicates
-                       (cons cmd-str (eval minibuffer-history)) :from-end)
-                      ))
-               )))
-       ;; else
-       (progn
-         (if cmd-buf (switch-to-buffer cmd-buf))
-         (message "Error running command: %s" (mapconcat 'identity cmd-args " 
"))
-         )
-       )
-      )
-    cmd-buf
-    )
-  )
-
-(defun realgud:run-debugger (debugger-name query-cmdline-fn parse-cmd-args-fn
-                                          minibuffer-history
-                                          &optional opt-command-line
-                                          no-reset opt-script-name)
-  "Invoke the a debugger and start the Emacs user interface.
-
-String OPT-COMMAND-LINE specifies how to run DEBUGGER-NAME. You
-will be prompted for a command line using QUERY-CMDLINE-FN is one
-isn't supplied.
-
-OPT-COMMAND-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by PARSE-CMD-FN and path elements found by that
-are expanded using `expand-file-name'.
-
-If successful, The command buffer of the debugger process is returned.
-Otherwise nil is returned.
-"
-  (let* ((cmd-str (or opt-command-line (funcall query-cmdline-fn 
debugger-name)))
-        (cmd-args (split-string-and-unquote cmd-str))
-        (parsed-args (funcall parse-cmd-args-fn cmd-args))
-        (script-args (caddr parsed-args))
-        (script-name (or opt-script-name (car script-args)))
-        (parsed-cmd-args
-         (cl-remove-if 'nil (realgud:flatten parsed-args)))
-        )
-    (realgud:run-process debugger-name script-name parsed-cmd-args
-                        minibuffer-history no-reset)
-    )
-  )
-
-;; For name = trepan2 we produce:
-;;
-;; (defalias 'trepan2 'realgud:trepan2)
-;; (defvar realgud:trepan2-delayed-minibuffer-history nil
-;;   "minibuffer history list for the command `realgud:trepan2-delayed'.")
-
-(defmacro realgud-deferred-invoke-setup (name)
-  `(progn
-     (defalias
-       ',(intern (concat name "-delayed"))
-       ',(intern (concat "realgud:" name "-delayed")))
-     (defvar ,(intern (concat "realgud:" name "-delayed-minibuffer-history")) 
nil
-      ,(format "minibuffer history for the command `%s-delayed'" name))
-     ))
-
-(provide-me "realgud:")
-
-;; Local Variables:
-;; byte-compile-warnings: (not cl-functions)
-;; End:
diff --git a/packages/realgud/realgud/common/send.el 
b/packages/realgud/realgud/common/send.el
deleted file mode 100644
index 4c112c1..0000000
--- a/packages/realgud/realgud/common/send.el
+++ /dev/null
@@ -1,281 +0,0 @@
-;; Copyright (C) 2015-2016, 2018 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-(require 'comint)
-(require 'eshell)
-(require 'load-relative)
-(require-relative-list '("utils" "window") "realgud-")
-(require-relative-list '("buffer/helper") "realgud-buffer-")
-
-(declare-function realgud-get-cmdbuf        'realgud-buffer-helper)
-(declare-function realgud-window-cmd-undisturb-src 'realgud-window)
-(declare-function comint-goto-process-mark  'comint)
-(declare-function comint-send-input         'comint)
-(declare-function realgud:canonic-major-mode 'realgud-utils)
-
-(defun realgud:send-input ()
-  "Sends command buffer line either to comint or eshell"
-  (interactive)
-  (let ((mode (realgud:canonic-major-mode)))
-    (ignore-errors
-      (cond ((eq mode 'eshell)
-            (eshell-send-input))
-           ((eq mode 'comint)
-            (comint-send-input))
-           ))))
-
-(defun realgud:send-command-common (process command-str)
-  "Assume we are in a comint buffer. Insert COMMAND-STR and
-send that input onto the process."
-  (if (eq 'run (process-status process))
-      (let ((mode (realgud:canonic-major-mode)))
-       (cond ((eq mode 'eshell)
-              (goto-char eshell-last-output-end)
-              (setq eshell-last-output-start
-                    (setq realgud-last-output-start (point-marker))))
-             ((eq mode 'comint)
-              (comint-check-proc (current-buffer))
-              (comint-goto-process-mark)
-              (setq comint-last-output-start
-                   (setq realgud-last-output-start (point-marker)))))
-       (insert command-str)
-       (realgud:send-input)
-       )
-    ;; else
-    (message "Process %s not in `run' state; not issuing %s"
-            process command-str)
-    )
-  )
-
-(defalias 'comint-output-filter-orig
-  (symbol-function 'comint-output-filter))
-
-(defvar realgud-last-output-start)
-(defun fake-output-filter(process string)
-  "A process output filter that saves the results into a temporary buffer."
-  (with-current-buffer (get-buffer-create "*realgud-process-output-temp*")
-    (goto-char (point-max))
-    (set (make-local-variable 'realgud-last-output-start)
-        (point-marker))
-    (insert (concat "\n" string))
-    (goto-char (point-max))))
-
-(defun realgud-send-command-process (process command-str)
-  "Invoke debugger COMMAND adding that command and the
-results into the command buffer."
-  (fset 'comint-output-filter (symbol-function 'fake-output-filter))
-  (apply comint-input-sender (list process command-str))
-  (sit-for 0.25) ;; FIXME with something better
-  (fset 'comint-output-filter (symbol-function 'comint-output-filter-orig))
-  )
-
-;; Here are some other possibilities for functions.
-;; Comint-specific: doesn't insert input into the buffer which is
-;; what gud-call does.
-;;   (apply comint-input-sender (list proc command))
-;;
-;; Works on any process-oriented buffer, not just comint.
-;;   (process-send-string (get-buffer-process (current-buffer))
-;;                        (concat command "\n"))
-
-
-(defun realgud-send-command (command &optional opt-send-fn opt-buffer)
-  "Invoke the debugger COMMAND adding that command and the
-results into the command buffer."
-  (let* ((cmdbuf (realgud-get-cmdbuf opt-buffer))
-        (send-command-fn (or opt-send-fn (function 
realgud:send-command-common)))
-        )
-    (if cmdbuf
-       (with-current-buffer cmdbuf
-         (let ((process (get-buffer-process cmdbuf)))
-           (unless process
-             (realgud-cmdbuf-info-in-debugger?= nil)
-             (error "Command process buffer is not running")
-             )
-           (if (realgud-sget 'cmdbuf-info 'in-debugger?)
-               (funcall send-command-fn process command)
-             (error "Command buffer doesn't think a debugger is running - Use 
`realgud-cmdbuf-toggle-in-debugger?' to toggle")
-             )
-           ))
-      (error "Can't find command process buffer")
-      )))
-
-(defun realgud-send-command-invisible (command-str)
-  (realgud-send-command command-str (function realgud-send-command-process)))
-
-(defvar realgud-expand-format-overrides nil
-  "An alist of overrides for `realgud-expand-format'.
-Each element should have the form (KEY . VALUE).  Key should be a
-single-character escape accepted by `realgud-expand-format';
-value should be a string.  Every time %KEY is encountered in te
-string, it will be replaced by VALUE instead of being processed
-as usual.  If VALUE is nil, the override is ignored.")
-
-(defun realgud-expand-format (fmt-str &optional opt-str opt-buffer)
-  "Expands commands format characters inside FMT-STR.
-OPT-STR is an optional string (used with %p and %s).  Values are
-taken from current buffer, or OPT-BUFFER if non-nil.  Some
-%-escapes in the string arguments are expanded.  These are:
-
-  %f -- Name without directory of current source file.
-  %F -- Name without directory or extension of current source file.
-  %x -- Name of current source file.
-  %X -- Expanded name of current source file.
-  %d -- Directory of current source file.
-  %l -- Number of current source line.
-  %c -- Fully qualified class name derived from the expression
-        surrounding point.
-  %p -- Value of OPT-STR, converted to string using `int-to-string'
-  %q -- Value of OPT-STR with string escapes (as ksh, bash, and zsh do).
-  %s -- Value of OPT-STR.
-
-%p and %s are replaced by an empty string if OPT-STR is nil."
-  (let* ((buffer (or opt-buffer (current-buffer)))
-        (srcbuf (realgud-get-srcbuf buffer))
-        (src-file-name (and srcbuf (buffer-file-name srcbuf)))
-        result)
-    (while (and fmt-str
-               (let ((case-fold-search nil))
-                 (string-match "\\([^%]*\\)%\\([dfFlpqxXs]\\)" fmt-str)))
-      (let* ((key-str (match-string 2 fmt-str))
-            (key (string-to-char key-str)))
-       (setq result
-             (concat
-              result (match-string 1 fmt-str)
-              (cond
-               ((cdr (assq key realgud-expand-format-overrides)))
-               ((eq key ?d)
-                (or (and src-file-name
-                         (file-name-directory src-file-name))
-                    "*source-file-not-found-for-%d"))
-               ((eq key ?f)
-                (or (and src-file-name
-                         (file-name-nondirectory src-file-name))
-                    "*source-file-not-found-for-%f*"))
-               ((eq key ?F)
-                (or (and src-file-name
-                         (file-name-sans-extension
-                          (file-name-nondirectory src-file-name)))
-                    "*source-file-not-found-for-%F"))
-               ((eq key ?l)
-                (if srcbuf
-                    (with-current-buffer srcbuf
-                      (int-to-string
-                       (save-restriction
-                         (widen)
-                         (+ (count-lines (point-min) (point))
-                            (if (bolp) 1 0)))))
-                  "source-buffer-not-found-for-%l"))
-
-                ((eq key ?p) (if opt-str (int-to-string opt-str) ""))
-
-               ;; String with escapes. %q follows shell (ksh, bash, zsh)
-               ;; The other possibility was Python's %r, !r or "repr".
-               ;; That isn't as perfect a fit though.
-                ((eq key ?q) (if opt-str
-                                (let ((print-escape-newlines t))
-                                  (prin1-to-string opt-str))
-                                ""))
-
-               ;; String
-                ((eq key ?s) (or opt-str ""))
-
-               ((eq key ?x)
-                (or (and src-file-name src-file-name)
-                    "*source-file-not-found-for-%x"))
-               ((eq key ?X)
-                (or (and src-file-name (expand-file-name src-file-name))
-                    "*source-file-not-found-for-%X"))
-
-               ;; ((eq key ?e)
-               ;;  (gud-find-expr))
-               ;; ((eq key ?a)
-               ;;  (gud-read-address))
-               ;; ((eq key ?c)
-               ;;   (gud-find-class srcbuf))
-
-                (t key)))))
-      (setq fmt-str (substring fmt-str (match-end 2))))
-    ;; There might be text left in FMT-STR when the loop ends.
-    (concat result fmt-str)))
-
-(defun realgud-command (fmt &optional arg no-record? frame-switch? 
realgud-prompts?)
-  "Sends a command to the process associated with the command
-buffer of the current buffer. A bit of checking is done before
-sending the command to make sure that we can find a command
-buffer, and that it has a running process associated with it.
-
-FMT is a string which may contain format characters that are
-expanded. See `realgud-expand-format' for a list of the format
-characters and their meanings.
-
-If NO-RECORD? is set, the command won't be recorded in the
-position history. This is often done in status and information
-gathering or frame setting commands and is generally *not* done
-in commands that continue execution.
-
-If FRAME-SWITCH? is set, the fringe overlay array icon is set to
-indicate the depth of the frame.
-
-If REALGUD-PROMPTS? is set, then then issuing the command will cause a
-debugger prompt.
-"
-  (interactive "sCommand (may contain format chars): ")
-  (let* ((command-str (realgud-expand-format fmt arg))
-        (cmd-buff (realgud-get-cmdbuf))
-        )
-    (unless cmd-buff
-      (error "Can't find command buffer for buffer %s" (current-buffer)))
-
-    ;; Display the expanded command in the message area unless the
-    ;; current buffer is the command buffer.
-    (unless (realgud-cmdbuf?)
-      (message "Command: %s" command-str))
-
-    (with-current-buffer cmd-buff
-      (let* ((process (get-buffer-process cmd-buff))
-            (last-output-end (point-marker))
-            (in-srcbuf? (realgud-sget 'cmdbuf-info 'in-srcbuf?))
-            )
-       (unless process
-         (error "Can't find process for command buffer %s" cmd-buff))
-       (unless (eq 'run (process-status process))
-         (error "Process %s isn't running; status %s" process
-                (process-status process)))
-
-       (realgud-cmdbuf-info-no-record?= no-record?)
-       (realgud-cmdbuf-info-frame-switch?= frame-switch?)
-
-       ;; Down the line we may handle prompting in a more
-       ;; sophisticated way. But for now, we handle this by forcing
-       ;; display of the command buffer.
-       (if realgud-prompts? (realgud-window-cmd-undisturb-src nil 't))
-
-       (realgud-send-command command-str (function 
realgud:send-command-common))
-
-       ;; Wait for the process-mark to change before changing variables
-       ;; that effect the hook processing.
-       (while (and (eq 'run (process-status process))
-                   (equal last-output-end (process-mark process)))
-         (sit-for 0))
-
-       ;; Reset temporary hook-processing variables to their default state.
-       (realgud-cmdbuf-info-no-record?= nil)
-       (realgud-cmdbuf-info-frame-switch?=  nil)
-       ))))
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/shortkey.el 
b/packages/realgud/realgud/common/shortkey.el
deleted file mode 100644
index 3483eed..0000000
--- a/packages/realgud/realgud/common/shortkey.el
+++ /dev/null
@@ -1,225 +0,0 @@
-;; Copyright (C) 2010-2015, 2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-(require 'load-relative)
-(require-relative-list '("cmds" "custom" "eval" "helper" "key" "lochist" "loc"
-                        "menu")
-                      "realgud-")
-(require-relative-list '("buffer/command" "buffer/helper" "buffer/source")
-                      "realgud-buffer-")
-
-(eval-when-compile
-  (defvar realgud:tool-bar-map) ;; Fully defined in track-mode
-)
-
-
-(declare-function realgud-cmds--mouse-add-remove-bp     'realgud-cmds)
-(declare-function realgud-cmdbuf?                       
'realgud-buffer-command)
-(declare-function realgud:debugger-name-transform       'realgud-helper)
-(declare-function realgud-get-cmdbuf                    'realgud-buffer-helper)
-(declare-function realgud:follow-mark                   'realgud-follow)
-(declare-function realgud-loc-hist-item-at              'realgud-lochist)
-(declare-function realgud-cmdbuf-loc-hist               'realgud-command)
-(declare-function realgud-populate-debugger-menu        'realgud-menu)
-(declare-function realgud-populate-common-keys          'realgud-key)
-(declare-function realgud-populate-src-buffer-map-plain 'realgud-key)
-(declare-function realgud-srcbuf-info-short-key?=,      'realgud-source)
-(declare-function realgud-srcbuf-info-was-read-only?=   'realgud-source)
-(declare-function realgud-srcbuf-info-prev-local-map=   'realgud-source)
-(declare-function realgud-srcbuf?                       'realgud-buffer-source)
-(declare-function realgud--ensure-attached              'realgud-buffer-source)
-(declare-function realgud-srcbuf-info-set?              'realgud-buffer-source)
-
-;; (defvar realgud::tool-bar-map) ;; fully defined in track-mode.el
-
-(defvar realgud:shortkey-mode-map
-  (let ((map (make-sparse-keymap)))
-    (suppress-keymap map)
-    (realgud-populate-debugger-menu map)
-    (realgud-populate-common-keys map)
-    (realgud-populate-src-buffer-map-plain map)
-    (define-key map "1"        'realgud-goto-arrow1)
-    (define-key map "2"        'realgud-goto-arrow2)
-    (define-key map "3"        'realgud-goto-arrow3)
-    (define-key map "4"        'realgud:goto-loc-hist-4)
-    (define-key map "5"        'realgud:goto-loc-hist-5)
-    (define-key map "6"        'realgud:goto-loc-hist-6)
-    (define-key map "7"        'realgud:goto-loc-hist-7)
-    (define-key map "8"        'realgud:goto-loc-hist-8)
-    (define-key map "9"        'realgud:goto-loc-hist-9)
-    (define-key map "b"        'realgud:cmd-break)
-    (define-key map "j"        'realgud:cmd-jump)
-    (define-key map "c"        'realgud:cmd-continue)
-    (define-key map "e"        'realgud:cmd-eval-dwim)
-    (define-key map "E"        'realgud:cmd-eval-at-point)
-    (define-key map "U"        'realgud:cmd-until)
-    (define-key map [mouse-2]  'realgud:tooltip-eval)
-    (define-key map [left-fringe mouse-1] #'realgud-cmds--mouse-add-remove-bp)
-    (define-key map [left-margin mouse-1] #'realgud-cmds--mouse-add-remove-bp)
-
-    ;; FIXME: these can go to a common routine
-    (define-key map "<"        'realgud:cmd-newer-frame)
-    (define-key map ">"        'realgud:cmd-older-frame)
-    (define-key map "d"        'realgud:cmd-newer-frame)
-    (define-key map "u"        'realgud:cmd-older-frame)
-    (define-key map "l"        'realgud-recenter-arrow)
-    (define-key map "C"        'realgud-window-cmd-undisturb-src)
-    (define-key map "I"        'realgud:cmdbuf-info-describe)
-    (define-key map "S"        'realgud-window-src-undisturb-cmd)
-
-    (define-key map "R"        'realgud:cmd-restart)
-    (define-key map "!"        'realgud:cmd-shell)
-    (define-key map [insert]   'realgud-short-key-mode)
-    (define-key map [(control x)(control q)] 'realgud-short-key-mode)
-    map)
-  "Keymap used in `realgud-short-key-mode'.")
-
-;; Implementation note: This is the mode that does all the work, it's
-;; local to the buffer that is affected.
-(define-minor-mode realgud-short-key-mode
-  "Minor mode with short keys for source buffers for the `realgud' debugger.
-If `realgud-srcbuf-lock' is set, the buffer is read-only when the
-minor mode is active.
-
-\\{realgud:shortkey-mode-map}"
-  :group 'realgud
-  :global nil
-  :init-value nil
-  :lighter " ShortKeys"
-  :keymap realgud:shortkey-mode-map
-  ;; executed on activation/deactivation:
-  (realgud-short-key-mode-setup realgud-short-key-mode))
-
-(defun realgud-get-short-key-mode-map (cmdbuf)
-  (when (realgud-cmdbuf? cmdbuf)
-    (with-current-buffer cmdbuf
-      (let* ((info realgud-cmdbuf-info)
-            (debugger-name (realgud-cmdbuf-info-debugger-name info))
-            (base-variable-name
-             (or (gethash debugger-name realgud:variable-basename-hash)
-             debugger-name))
-            (keymap-symbol
-             (intern
-              (replace-regexp-in-string
-               "\\." ""
-               (concat base-variable-name "-short-key-mode-map"))))
-            (keymap (eval keymap-symbol))
-            )
-       (cond ((keymapp keymap) keymap)
-             ('t nil))
-       ))
-    ))
-
-(defun realgud-short-key-mode-setup (mode-on?)
-  "Set up or tear down `realgud-short-key-mode'.
-MODE-ON? is a boolean indicating whether the mode should be
-turned on or off."
-  (setq realgud-short-key-mode mode-on?)
-  ;; When enabling, try to find a command buffer to attach to.
-  (when (and realgud-short-key-mode (not (realgud--ensure-attached)))
-    (setq realgud-short-key-mode nil))
-  ;; Now apply mode change
-  (cond
-   ;; Mode was just enabled
-   (realgud-short-key-mode
-    ;; Record info to restore it when disabling
-    (unless (equal (realgud-sget 'srcbuf-info 'short-key?) 
realgud-short-key-mode)
-      (realgud-srcbuf-info-prev-local-map= (current-local-map))
-      (realgud-srcbuf-info-was-read-only?= buffer-read-only))
-    ;; Apply local map
-    (let ((keymap (realgud-get-short-key-mode-map (realgud-get-cmdbuf))))
-      (when keymap (use-local-map keymap)))
-    ;; Finish setting up
-    (set (make-local-variable 'tool-bar-map) realgud:tool-bar-map)
-    (local-set-key [m-insert] #'realgud-short-key-mode)
-    (setq buffer-read-only realgud-srcbuf-lock)
-    (run-mode-hooks 'realgud-short-key-mode-hook))
-   ;; Mode was just disabled
-   (t
-    (kill-local-variable 'tool-bar-map)
-    (when (realgud-srcbuf-info-set?)
-      ;; Restore previous state
-      (use-local-map (realgud-sget 'srcbuf-info 'prev-local-map))
-      (setq buffer-read-only (realgud-sget 'srcbuf-info 'was-read-only?)))))
-  ;; Record state
-  (when (realgud-srcbuf-info-set?)
-    (realgud-srcbuf-info-short-key?= realgud-short-key-mode)))
-
-(defun realgud-short-key-mode-off ()
-  "Turn off `realgud-short-key-mode' in all buffers."
-  (interactive)
-  (save-excursion
-      (dolist (buf (buffer-list))
-        (set-buffer buf)
-        (when realgud-short-key-mode
-         (realgud-short-key-mode -1)))))
-
-(defun realgud-populate-src-buffer-map (map)
-  "Bind all common keys and menu used in src buffers.
-This includes the keys bound to `realgud-key-prefix' (typically C-x
-C-a)."
-  (realgud-populate-src-buffer-map-plain map)
-  (realgud-populate-common-keys map)
-  (let ((prefix-map (make-sparse-keymap)))
-    (realgud-populate-debugger-menu map)
-    (realgud-populate-src-buffer-map-plain prefix-map)
-    (define-key map realgud-key-prefix prefix-map)))
-
-(defun realgud:goto-loc-hist(num)
-  "Go to position nth from the newest position."
-  (let ((cmdbuf (realgud-get-cmdbuf)))
-    (if cmdbuf
-      (let* ((loc-hist (realgud-cmdbuf-loc-hist cmdbuf))
-           (loc (realgud-loc-hist-item-at loc-hist (- num)))
-           (loc-marker (realgud-loc-marker loc)))
-       (realgud:follow-mark loc-marker))
-      ;; else
-       (message "No command buffer associated with this buffer")
-    )))
-
-
-(defun realgud:goto-loc-hist-4 ()
-  "Go to position 4th from the newest position."
-  (interactive)
-  (realgud:goto-loc-hist 4))
-
-(defun realgud:goto-loc-hist-5 ()
-  "Go to position 5th from the newest position."
-  (interactive)
-  (realgud:goto-loc-hist 5))
-
-(defun realgud:goto-loc-hist-6 ()
-  "Go to position 6th from the newest position."
-  (interactive)
-  (realgud:goto-loc-hist 6))
-
-(defun realgud:goto-loc-hist-7 ()
-  "Go to position 7th from the newest position."
-  (interactive)
-  (realgud:goto-loc-hist 7))
-
-(defun realgud:goto-loc-hist-8 ()
-  "Go to position 8th from the newest position."
-  (interactive)
-  (realgud:goto-loc-hist 8))
-
-(defun realgud:goto-loc-hist-9 ()
-  "Go to position 9th from the newest position."
-  (interactive)
-  (realgud:goto-loc-hist 9))
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/track-mode.el 
b/packages/realgud/realgud/common/track-mode.el
deleted file mode 100644
index 4ca2c63..0000000
--- a/packages/realgud/realgud/common/track-mode.el
+++ /dev/null
@@ -1,239 +0,0 @@
-;; Copyright (C) 2015-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-;; tracks shell output
-
-(require 'shell)
-
-(require 'load-relative)
-(require-relative-list
- '("core"   "helper" "track" "loc" "lochist" "file"
-   "fringe" "window" "regexp" "menu" "backtrace-mode"
-   "send"   "shortkey" "utils") "realgud-")
-
-(require-relative-list  '("buffer/command") "realgud-buffer-")
-
-;; FIXME figure out if I can put this in something like a header file.
-(declare-function realgud-fringe-erase-history-arrows 'realgud-buffer-command)
-(declare-function realgud:track-set-debugger          'realgud-track)
-(declare-function realgud-populate-debugger-menu      'realgud-menu)
-(declare-function realgud-cmdbuf-info-divert-output?= 'realgud-buffer-command)
-(declare-function realgud-cmdbuf-info-prior-prompt-regexp=
-                 'realgud-buffer-command)
-(declare-function realgud-cmdbuf-info-set?
-                 'realgud-buffer-command)
-(declare-function realgud:canonic-major-mode
-                 'realgud-utils)
-(declare-function shell-mode 'shell)
-
-(defvar realgud-track-mode-map
-  (let ((map  (copy-keymap shell-mode-map)))
-    (realgud-populate-debugger-menu map)
-    (define-key map "\r"       'realgud:send-input)
-    (define-key map [M-right]  'realgud-track-hist-newest)
-    (define-key map [M-down]   'realgud-track-hist-newer)
-    (define-key map [M-up]     'realgud-track-hist-older)
-    (define-key map [M-print]  'realgud-track-hist-older)
-    (define-key map [M-S-down] 'realgud-track-hist-newest)
-    (define-key map [M-S-up]   'realgud-track-hist-oldest)
-    (define-key map "\C-cS" 'realgud-window-src-undisturb-cmd)
-    (define-key map (kbd "C-c !d") 'realgud:goto-debugger-loc-line)
-    map)
-  "Keymap used in `realgud-track-minor-mode'.
-
-\\{realgud-track-mode-map}")
-
-
-(defvar realgud:tool-bar-map
-  (let ((map (make-sparse-keymap)))
-    (dolist (x '((realgud:cmd-break . "gud/break")
-                ;; (realgud:cmd-remove . "gud/remove")
-                ;; (realgud:cmd-print . "gud/print")
-                ;; (realgud:cmd-pstar . "gud/pstar")
-                ;; (realgud:cmd-pp . "gud/pp")
-                ;; (realgud:cmd-watch . "gud/watch")
-                (realgud:cmd-restart . "gud/run")
-                ;; (realgud:cmd-go . "gud/go")
-                ;; (realgud:cmd-stop-subjob . "gud/stop")
-                (realgud:cmd-continue . "gud/cont")
-                (realgud:cmd-until . "gud/until")
-                (realgud:cmd-next . "gud/next")
-                (realgud:cmd-step . "gud/step")
-                (realgud:cmd-finish . "gud/finish")
-                ;; (realgud:cmd-nexti . "gud/nexti")
-                ;; (realgud:cmd-stepi . "gud/stepi")
-                (realgud:cmd-older-frame . "gud/up")
-                (realgud:cmd-newer-frame . "gud/down")
-                (realgud:cmdbuf-info-describe . "info"))
-              map)
-      (tool-bar-local-item-from-menu
-       (car x) (cdr x) map realgud-track-mode-map)))
-  "toolbar use when `realgud' interface is active"
-  )
-
-(define-minor-mode realgud-track-mode
-  "Minor mode for tracking debugging inside a process shell."
-  :init-value nil
-  :global nil
-  :group 'realgud
-
-  :lighter
-  (:eval (progn
-          (concat " "
-                  (if (realgud-cmdbuf-info-set?)
-                      (realgud-sget 'cmdbuf-info 'debugger-name)
-                    "dbgr??"))))
-
-  :keymap realgud-track-mode-map
-  ;; Setup/teardown
-  (realgud-track-mode-setup realgud-track-mode)
-  )
-
-;; FIXME: this should have been picked up by require'ing track.
-(defvar realgud-track-divert-string)
-
-(defun realgud-track-mode-setup (mode-on?)
-  "Called when entering or leaving `realgud-track-mode'. Variable
-MODE-ON is a boolean which specifies if we are going into or out
-of this mode."
-  (if mode-on?
-      (let ((process (get-buffer-process (current-buffer))))
-       (unless process
-         (setq realgud-track-mode nil)
-         (error "Can't find a process for buffer %s" (current-buffer)))
-
-       (setq realgud-track-divert-string "")
-       (setq realgud-track-mode 't)
-
-       ;; FIXME: save and chain process-sentinel via
-       ;; (process-sentinel (get-buffer-process (current-buffer)))
-       (set-process-sentinel process 'realgud-term-sentinel)
-       (unless (and (realgud-cmdbuf-info-set?)
-                    (realgud-sget 'cmdbuf-info 'debugger-name))
-         (call-interactively 'realgud:track-set-debugger))
-       (if (boundp 'comint-last-output-start)
-           (progn
-             (realgud-cmdbuf-info-prior-prompt-regexp= comint-prompt-regexp)
-             (realgud-cmdbuf-info-divert-output?= nil)
-             (let* ((regexp-hash
-                     (and (realgud-cmdbuf-info? realgud-cmdbuf-info)
-                          (realgud-sget 'cmdbuf-info 'regexp-hash)))
-                    (prompt-pat (and regexp-hash
-                                     (gethash "prompt" regexp-hash))))
-               (if prompt-pat
-                   (setq comint-prompt-regexp
-                           (realgud-loc-pat-regexp prompt-pat)))))
-         (set-marker comint-last-output-start (point)))
-
-       (set (make-local-variable 'tool-bar-map) realgud:tool-bar-map)
-       (let ((mode (realgud:canonic-major-mode)))
-         (cond ((eq mode 'eshell)
-                (add-hook 'eshell-output-filter-functions
-                          'realgud-track-eshell-output-filter-hook))
-               ((eq mode 'comint)
-                (add-hook 'comint-output-filter-functions
-                          'realgud-track-comint-output-filter-hook))
-               ))
-       (run-mode-hooks 'realgud-track-mode-hook))
-  ;; else
-    (progn
-      (if (and (boundp 'comint-last-output-start) realgud-cmdbuf-info)
-       (setq comint-prompt-regexp
-          (realgud-sget 'cmdbuf-info 'prior-prompt-regexp))
-       )
-      (kill-local-variable 'realgud:tool-bar-map)
-      (realgud-fringe-erase-history-arrows)
-      (let ((mode (realgud:canonic-major-mode)))
-       (cond ((eq mode 'eshell)
-              (remove-hook 'eshell-output-filter-functions
-                   'realgud-track-eshell-output-filter-hook))
-             ((eq mode 'comint)
-              (remove-hook 'comint-output-filter-functions
-                           'realgud-track-comint-output-filter-hook))
-             ))
-      (let* ((cmd-process (get-buffer-process (current-buffer)))
-            (status (if cmd-process
-                        (list (propertize (format ":%s"
-                                                  (process-status cmd-process))
-                           'face 'realgud-debugger-running))
-                      ""))
-            )
-       (setq mode-line-process status)
-       ;; Force mode line redisplay soon.
-       (force-mode-line-update)
-       ;; FIXME: This is a workaround. Without this, we comint doesn't
-       ;; process commands
-       (unless (member 'comint-mode minor-mode-list) (comint-mode))
-       )
-
-      ;; FIXME: restore/unchain old process sentinels.
-      )
-    )
-  )
-
-;; For name == "trepan", produces:
-;;   (defvar trepan-track-mode nil
-;;     "Non-nil if using trepan track-mode ... "
-;;   (defvar trepan-track-mode-map (make-sparse-keymap))
-;;   (defvar trepan-short-key-mode-map (make-sparse-keymap))
-;;   (set-keymap-parent trepan-short-key-mode-map realgud-short-key-mode-map)
-(defmacro realgud-track-mode-vars (name)
-  `(progn
-     (defvar ,(intern (concat name "-track-mode")) nil
-       ,(format "Non-nil if using %s-track-mode as a minor mode of some other 
mode.
-Use the command `%s-track-mode' to toggle or set this variable." name name))
-     (defvar ,(intern (concat name "-track-mode-map")) (make-sparse-keymap)
-       ,(format "Keymap used in `%s-track-mode'." name))
-     (defvar ,(intern (concat name "-short-key-mode-map")) 
(make-sparse-keymap))
-    ))
-
-;; FIXME: The below could be a macro? I have a hard time getting
-;; macros right.
-(defun realgud-track-mode-body(name)
-  "Used in by custom debuggers: pydbgr, trepan, gdb, etc. NAME is
-the name of the debugger which is used to preface variables."
-  (realgud:track-set-debugger name)
-  (funcall (intern (concat "realgud-define-" name "-commands")))
-  (if (intern (concat name "-track-mode"))
-      (progn
-       (setq realgud-track-mode 't)
-       (run-mode-hooks (intern (concat name "-track-mode-hook"))))
-    (progn
-      (setq realgud-track-mode nil)
-      )))
-
-(defun realgud:track-mode-disable()
-  "Disable the debugger track-mode hook"
-  (interactive "")
-  (if realgud-track-mode
-      (progn
-       (setq realgud-track-mode nil)
-       ;; FIXME: for some reason, disabling trak mode also
-       ;; disables shell mode. Reinitialize it?
-       (if (equal mode-name "Shell")
-           (shell-mode))
-       )
-    (message "Debugger is not in track mode")))
-
-(defun realgud:track-mode-enable()
-  "Enable the debugger track-mode hook"
-  (interactive "")
-  (if realgud-track-mode
-      (message "Debugger track mode is already enabled.")
-    (setq realgud-track-mode t))
-  )
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/track.el 
b/packages/realgud/realgud/common/track.el
deleted file mode 100644
index d081449..0000000
--- a/packages/realgud/realgud/common/track.el
+++ /dev/null
@@ -1,895 +0,0 @@
-;; Copyright (C) 2015-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-(declare-function realgud:terminate &optional cmdbuf)
-
-(defconst realgud-track-char-range 10000
-  "Max number of characters from end of buffer to search for stack entry.")
-
-;; Shell process buffers that we can hook into:
-(require 'esh-mode)
-(require 'ansi-color)
-(require 'comint)
-
-(require 'load-relative)
-(require-relative-list
- '("core"           "file"     "fringe"
-   "helper"         "init"     "loc"    "lochist"
-   "regexp"         "shortkey" "window" "utils"
-   "bp"
-   ) "realgud-")
-
-
-(require-relative-list
- '("buffer/command" "buffer/helper" "buffer/source") "realgud-buffer-")
-
-(defcustom realgud-short-key-on-tracing? nil
-"If non-nil, set short-key mode for any source buffer that is traced into"
-  :type 'symbolp
-  :group 'realgud)
-
-(defcustom realgud-eval-message-print-length 1000
-"If non-nil, truncate eval output into the echo area"
-  :type 'symbolp
-  :group 'realgud)
-
-(declare-function buffer-killed?                      'realgud-helper)
-(declare-function fn-p-to-fn?-alias                   'realgud-helper)
-(declare-function realgud-bp-add-info                 'realgud-bp)
-(declare-function realgud-bp-del-info                 'realgud-bp)
-(declare-function realgud-bp-enable-disable-info      'realgud-bp)
-(declare-function realgud-cmdbuf-add-srcbuf           'realgud-buffer-command)
-(declare-function realgud-cmdbuf-debugger-name        'realgud-buffer-command)
-(declare-function realgud-cmdbuf-info-bp-list=        'realgud-buffer-command)
-(declare-function realgud-cmdbuf-info-divert-output?= 'realgud-buffer-command)
-(declare-function realgud-cmdbuf-info-in-debugger?    'realgud-buffer-command)
-(declare-function realgud-cmdbuf-info-in-debugger?=   'realgud-buffer-command)
-(declare-function realgud-cmdbuf-info-last-input-end= 'realgud-buffer-command)
-(declare-function realgud-cmdbuf-init                 'realgud-buffer-command)
-(declare-function realgud-cmdbuf-loc-hist             'realgud-buffer-command)
-(declare-function realgud-cmdbuf-mode-line-update     'realgud-buffer-command)
-(declare-function realgud-cmdbuf-mode-line-update     'realgud-buffer-command)
-(declare-function realgud-cmdbuf-pat                  'realgud-buffer-command)
-(declare-function realgud-cmdbuf?                     'realgud-buffer-command)
-(declare-function realgud-cmdbuf-info-in-srcbuf?=     'realgud-buffer-command)
-(declare-function realgud:debugger-name-transform     'realgud-helper)
-(declare-function realgud:terminate                   'realgud-core)
-(declare-function realgud:file-loc-from-line          'realgud-file)
-(declare-function realgud-fringe-history-set          'realgud-fringe)
-(declare-function realgud-get-cmdbuf                  'realgud-buffer-command)
-(declare-function realgud-get-srcbuf-from-cmdbuf      'realgud-buffer-helper)
-(declare-function realgud-loc-goto                    'realgud-loc)
-(declare-function realgud-loc-hist-add                'realgud-lochist)
-(declare-function realgud-loc-hist-index              'realgud-lochist)
-(declare-function realgud-loc-hist-item               'realgud-lochist)
-(declare-function realgud-loc?                        'realgud-loc)
-(declare-function realgud-short-key-mode-setup        'realgud-shortkey)
-(declare-function realgud-srcbuf-init-or-update       'realgud-source)
-(declare-function realgud-srcbuf-loc-hist             'realgud-source)
-(declare-function realgud-window-src                  'realgud-window)
-(declare-function realgud-window-src-undisturb-cmd    'realgud-window)
-(declare-function realgud-window-update-position      'realgud-window)
-(declare-function realgud:join-string                 'realgud-utils)
-
-(make-variable-buffer-local  (defvar realgud-track-mode))
-(fn-p-to-fn?-alias 'realgud-loc-p)
-
-(defvar realgud-track-divert-string)
-(defvar starting-directory)
-
-(defun realgud-track-comint-output-filter-hook(text)
-  "An output-filter hook custom for comint shells.  Find
-location/s, if any, and run the action(s) associated with
-finding a new location/s.  The parameter TEXT appears because it
-is part of the comint-output-filter-functions API. Instead we use
-marks set in buffer-local variables to extract text"
-
-  ;; Instead of trying to piece things together from partial text
-  ;; (which can be almost useless depending on Emacs version), we
-  ;; monitor to the point where we have the next dbgr prompt, and then
-  ;; check all text from comint-last-input-end to process-mark.
-
-  ;; FIXME: Add unwind-protect?
-  (if (and realgud-track-mode (realgud-cmdbuf? (current-buffer)))
-      (let* ((cmd-buff (current-buffer))
-            (cmd-mark (point-marker))
-            (shortkey
-             (realgud-cmdbuf-info-src-shortkey?
-              realgud-cmdbuf-info))
-            (curr-proc (get-buffer-process cmd-buff))
-            (cmdbuf-last-output-end
-             (realgud-cmdbuf-info-last-input-end realgud-cmdbuf-info))
-            (last-output-end
-             (if curr-proc
-                 (process-mark curr-proc)
-               cmdbuf-last-output-end))
-            (last-output-start (max comint-last-input-start
-                                    (- last-output-end 
realgud-track-char-range))))
-       ;; Sometimes we get called twice and the second time nothing
-       ;; changes. Guard against this.
-       (unless (= last-output-start last-output-end)
-         (unless (= last-output-end cmdbuf-last-output-end)
-           (setq last-output-start (max last-output-start
-                                        cmdbuf-last-output-end))
-           )
-         ;; Done with using old command buffer's last-input-end.
-         ;; Update that for next time.
-         (realgud-cmdbuf-info-last-input-end= last-output-start)
-         (realgud:track-from-region last-output-start
-                                    last-output-end cmd-mark cmd-buff
-                                    shortkey 't))
-       )
-    )
-  )
-
-(defun realgud-track-eshell-output-filter-hook()
-  "An output-filter hook custom for eshell shells.  Find
-location(s), if any, and run the action(s) associated with We use
-marks set in buffer-local variables to extract text"
-
-  ;; FIXME: Add unwind-protect?
-  (if realgud-track-mode
-      (lexical-let* ((cmd-buff (current-buffer))
-                    (cmd-mark (point-marker))
-                    (shortkey
-                     (realgud-cmdbuf-info-src-shortkey?
-                      realgud-cmdbuf-info))
-                    (loc (realgud:track-from-region
-                          eshell-last-output-start
-                          eshell-last-output-end cmd-mark cmd-buff
-                          shortkey)))
-       (realgud-track-loc-action loc cmd-buff 't shortkey))
-    ))
-
-(defun realgud-track-term-output-filter-hook(text)
-  "An output-filter hook custom for ansi-term shells.  Find
-location/s, if any, and run the action(s) associated with
-finding a new location/s.  The parameter TEXT appears because it
-is part of the comint-output-filter-functions API. Instead we use
-marks set in buffer-local variables to extract text"
-  (if (and realgud-track-mode (realgud-cmdbuf? (current-buffer)))
-      (realgud-track-loc text (point-marker))
-    ))
-
-(defun realgud:track-complain-if-not-in-cmd-buffer (&optional buf errorp)
-  "Complain if BUF (default: current buffer) is not a command buffer.
-With non-nil ERRORP, raise an exception.  Otherwise, print a
-message."
-  (setq buf (or buf (current-buffer)))
-  (unless (realgud-cmdbuf? buf)
-    (funcall (if errorp #'error #'message)
-             "Buffer %s is not a debugger command buffer" buf)
-    t))
-
-(defun realgud:get-output-command(text)
-  "Splits the TEXT by newline."
-  (car (split-string text "\n")))
-
-(defun realgud:get-eval-output(text)
-  "Gets the output stripping the command and debugger prompt from the TEXT."
-  (realgud:join-string (butlast (cdr (split-string text "\n"))) "\n"))
-
-(defun realgud:get-command-name(command-name)
-  "Gets the COMMAND-NAME for this particular debugger."
-  (gethash command-name (buffer-local-value 'realgud-command-name-hash 
(current-buffer))))
-
-(defun realgud:eval-command-p(text)
-  "Checks the TEXT if the command that was ran was an eval command."
-  (let ((cmd-name (realgud:get-command-name "eval")))
-       (and (stringp cmd-name) (string-prefix-p (realgud:get-command-name 
"eval") (realgud:get-output-command text)))))
-
-(defun realgud:truncate-eval-message(text)
-  "Truncates the TEXT to the size of realgud-eval-message-print-length."
-  (if (< realgud-eval-message-print-length (length text))
-      (substring text 0 realgud-eval-message-print-length)
-    text))
-
-(defun realgud:message-eval-results(text)
-  "Output the TEXT to the message area."
-  (message (realgud:truncate-eval-message (realgud:get-eval-output text))))
-
-(defun realgud:track-from-region(from to &optional cmd-mark opt-cmdbuf
-                                     shortkey-on-tracing? no-warn-if-no-match?)
-  "Find and position a buffer at the location found in the marked region.
-
-You might want to use this function interactively after marking a
-region in a debugger-tracked shell buffer (see `realgud-track-mode')
-or a more dedicated debugger command buffer.
-
-The marked region location should match the regexp found in the
-buffer-local variable `realgud-cmdbuf-info' structure under the
-field loc-regexp. You can see what this is by
-evaluating (realgud-cmdbuf-info-loc-regexp realgud-cmdbuf-info)"
-
-  (interactive "r")
-  (if (> from to) (psetq to from from to))
-  (let* ((text (buffer-substring-no-properties from to))
-        (loc (realgud-track-loc text cmd-mark))
-        ;; If we see a selected frame number, it is stored
-        ;; in frame-num. Otherwise, nil.
-        (frame-num)
-        (text-sans-loc)
-        (cmdbuf (or opt-cmdbuf (current-buffer)))
-        )
-    (unless (realgud:track-complain-if-not-in-cmd-buffer cmdbuf t)
-      (if (realgud:eval-command-p text)
-          (realgud:message-eval-results text))
-
-      (if (not (equal "" text))
-          (with-current-buffer cmdbuf
-            (if (realgud-sget 'cmdbuf-info 'divert-output?)
-                (realgud-track-divert-prompt text cmdbuf to))
-            ;; FIXME: instead of these fixed filters,
-            ;; put into a list and iterate over that.
-            (realgud-track-termination? text)
-            (setq text-sans-loc (or (realgud-track-loc-remaining text) text))
-            (setq frame-num (realgud-track-selected-frame text))
-            (if (and frame-num (not loc))
-                (setq loc (realgud-track-loc-from-selected-frame
-                           text cmd-mark)))
-
-            (realgud:track-handle-breakpoints text-sans-loc cmd-mark cmdbuf)
-
-            (if loc
-                (let ((selected-frame
-                       (or (not frame-num)
-                           (eq frame-num (realgud-cmdbuf-pat 
"top-frame-num")))))
-                  (realgud-track-loc-action loc cmdbuf (not selected-frame)
-                                            shortkey-on-tracing?)
-                  (realgud-cmdbuf-info-in-debugger?= 't)
-                  (realgud-cmdbuf-mode-line-update)))
-
-            )
-        )
-      )
-    )
-  )
-
-(defun realgud:track-handle-breakpoints (text-sans-loc cmd-mark cmdbuf)
-  (realgud:track-add-breakpoint text-sans-loc cmd-mark cmdbuf)
-  (realgud:track-remove-breakpoints text-sans-loc cmd-mark cmdbuf))
-
-(defun realgud:track-add-breakpoint (text-sans-loc cmd-mark cmdbuf)
-  "Add a breakpoint fringe in source window if BP-LOC."
-  (realgud-track-bp-enable-disable text-sans-loc
-                                   (realgud-cmdbuf-pat "brkpt-enable")
-                                   't)
-
-  (let ((bp-loc (realgud-track-bp-loc text-sans-loc cmd-mark cmdbuf)))
-    (if bp-loc
-        (let ((src-buffer (realgud-loc-goto bp-loc)))
-          (realgud-cmdbuf-add-srcbuf src-buffer cmdbuf)
-          (with-current-buffer src-buffer
-            (realgud-bp-add-info bp-loc))))))
-
-(defun realgud:track-remove-breakpoints (text-sans-loc cmd-mark cmdbuf)
-  "Remove all breakpoints in source window found in BP-LOCS."
-  (realgud-track-bp-enable-disable text-sans-loc
-                                   (realgud-cmdbuf-pat "brkpt-disable")
-                                   nil)
-
-  (dolist (bp-loc (realgud-track-bp-delete text-sans-loc cmd-mark cmdbuf))
-    (let ((src-buffer (realgud-loc-goto bp-loc)))
-      (realgud-cmdbuf-add-srcbuf src-buffer cmdbuf)
-      (with-current-buffer src-buffer
-        (realgud-bp-del-info bp-loc)))))
-
-(defun realgud-track-hist-fn-internal(fn)
-  "Update both command buffer and a source buffer to reflect the
-selected location in the location history. If we started in a
-command buffer, we stay in a command buffer. Moving inside a
-command buffer always shows the corresponding source
-file. However it is possible in shortkey mode to show only the
-source code window, even the commmand buffer is updated albeit
-unshown."
-
-  (let ((cmdbuf (realgud-get-cmdbuf (current-buffer))))
-    (if cmdbuf
-       (let* ((loc-hist (realgud-cmdbuf-loc-hist cmdbuf))
-              (window (selected-window))
-              (position (funcall fn loc-hist))
-              (stay-in-cmdbuf?
-               (or (eq (current-buffer) cmdbuf)
-                   (with-current-buffer cmdbuf
-                     (not (realgud-sget 'cmdbuf-info 'in-srcbuf?)))))
-              (loc (realgud-loc-hist-item loc-hist))
-              (srcbuf (realgud-get-srcbuf-from-cmdbuf cmdbuf loc))
-              )
-         (set-buffer (realgud-loc-goto loc))
-
-         ;; Make sure command buffer is updated
-         (realgud-window-update-position cmdbuf
-                                      (realgud-loc-cmd-marker loc))
-
-         ;; FIXME turn into fn. combine with realgud-track-loc-action.
-         (if stay-in-cmdbuf?
-             (let ((cmd-window (realgud-window-src-undisturb-cmd srcbuf)))
-               (if cmd-window (select-window cmd-window)))
-           (realgud-window-src srcbuf)
-         )
-
-         ;; Make sure source buffer is updated
-         (realgud-window-update-position srcbuf
-                                      (realgud-loc-marker loc))
-
-         (message "history position %s line %s"
-                  (realgud-loc-hist-index loc-hist)
-                  (realgud-loc-line-number loc))
-         (select-window window)))
-  ))
-
-;; FIXME: Can we dry code more via a macro?
-(defun realgud-track-hist-newer()
-  (interactive)
-  (realgud-track-hist-fn-internal 'realgud-loc-hist-newer))
-
-(defun realgud-track-hist-newest()
-  (interactive)
-  (realgud-track-hist-fn-internal 'realgud-loc-hist-newest))
-
-(defun realgud-track-hist-older()
-  (interactive)
-  (realgud-track-hist-fn-internal 'realgud-loc-hist-older))
-
-(defun realgud-track-hist-oldest()
-  (interactive)
-  (realgud-track-hist-fn-internal 'realgud-loc-hist-oldest))
-
-(defun realgud-track-loc-action (loc cmdbuf &optional not-selected-frame
-                                 shortkey-on-tracing?)
-  "If loc is valid, show loc and do whatever actions we do for
-encountering a new loc."
-  (if (realgud-loc? loc)
-      (let*
-         ((cmdbuf-loc-hist (realgud-cmdbuf-loc-hist cmdbuf))
-          (cmdbuf-local-overlay-arrow?
-           (with-current-buffer cmdbuf
-             (local-variable-p 'overlay-arrow-variable-list)))
-          (stay-in-cmdbuf?
-           (with-current-buffer cmdbuf
-             (not (realgud-sget 'cmdbuf-info 'in-srcbuf?))))
-          (shortkey-mode?
-           (with-current-buffer cmdbuf
-             (realgud-sget 'cmdbuf-info 'src-shortkey?)))
-          (srcbuf)
-          (srcbuf-loc-hist)
-          )
-
-       (setq srcbuf (realgud-loc-goto loc))
-       (realgud-srcbuf-init-or-update srcbuf cmdbuf)
-       (setq srcbuf-loc-hist (realgud-srcbuf-loc-hist srcbuf))
-       (realgud-cmdbuf-add-srcbuf srcbuf cmdbuf)
-
-       (with-current-buffer srcbuf
-         (realgud-short-key-mode-setup
-          (and shortkey-on-tracing?
-               (or realgud-short-key-on-tracing? shortkey-mode?))
-          ))
-
-        ;; Do we need to go back to the process/command buffer because other
-        ;; output-filter hooks run after this may assume they are in that
-        ;; buffer? If so, we may have to use set-buffer rather than
-       ;; switch-to-buffer in some cases.
-       (set-buffer cmdbuf)
-
-       (unless (realgud-sget 'cmdbuf-info 'no-record?)
-         (realgud-loc-hist-add srcbuf-loc-hist loc)
-         (realgud-loc-hist-add cmdbuf-loc-hist loc)
-         (realgud-fringe-history-set cmdbuf-loc-hist 
cmdbuf-local-overlay-arrow?)
-         )
-
-       ;; FIXME turn into fn. combine with realgud-track-hist-fn-internal
-       (if stay-in-cmdbuf?
-           (let ((cmd-window (realgud-window-src-undisturb-cmd srcbuf)))
-             (with-current-buffer srcbuf
-               (if (and (boundp 'realgud-overlay-arrow1)
-                        (markerp realgud-overlay-arrow1))
-                   (progn
-                     ;; Doesn't work
-                     ;; (if not-selected-frame
-                     ;;          (set-fringe-bitmap-face 'hollow-right-triangle
-                     ;;                                  
'realgud-overlay-arrow1)
-                     ;;                        ; else
-                     ;;        (set-fringe-bitmap-face 'realgud-right-triangle1
-                     ;;                                'realgud-overlay-arrow1)
-                     ;;        )
-                     (realgud-window-update-position srcbuf 
realgud-overlay-arrow1)))
-               )
-             (if cmd-window (select-window cmd-window)))
-         ; else
-         (with-current-buffer srcbuf
-           (realgud-window-src srcbuf)
-           (realgud-window-update-position srcbuf realgud-overlay-arrow1))
-         ;; reset 'in-srcbuf' to allow the command buffer to keep point focus
-         ;; when used directly. 'in-srcbuf' is set 't' early in the stack
-         ;; (prior to common command code, e.g. this) when any command is run
-         ;; from a source buffer
-         (with-current-buffer cmdbuf
-           (realgud-cmdbuf-info-in-srcbuf?= nil))
-         )
-       ))
-  )
-
-(defun realgud-track-loc(text cmd-mark &optional opt-regexp opt-file-group
-                          opt-line-group no-warn-on-no-match?
-                          opt-ignore-file-re)
-  "Do regular-expression matching to find a file name and line number inside
-string TEXT. If we match, we will turn the result into a realgud-loc struct.
-Otherwise return nil."
-
-  ;; NOTE: realgud-cmdbuf-info is a buffer variable local to the process 
running
-  ;; the debugger. It contains a realgud-cmdbuf-info "struct". In that struct 
are
-  ;; the fields loc-regexp, file-group, line-group, alt-file-group, and 
alt-line-group.
-  ;;
-  ;; By setting the the fields of realgud-cmdbuf-info appropriately, we
-  ;; can accomodate a family of debuggers -- one at a time -- for the
-  ;; buffer process.
-
-  (unless (realgud:track-complain-if-not-in-cmd-buffer)
-      (let
-         ((loc-regexp (or opt-regexp
-                          (realgud-sget 'cmdbuf-info 'loc-regexp)))
-          (file-group (or opt-file-group
-                          (realgud-sget 'cmdbuf-info 'file-group)))
-          (line-group (or opt-line-group
-                          (realgud-sget 'cmdbuf-info 'line-group)))
-          (alt-file-group (realgud-sget 'cmdbuf-info 'alt-file-group))
-          (alt-line-group (realgud-sget 'cmdbuf-info 'alt-line-group))
-          (text-group (realgud-sget 'cmdbuf-info 'text-group))
-          (ignore-file-re (or opt-ignore-file-re
-                              (realgud-sget 'cmdbuf-info 'ignore-file-re)))
-          (callback-loc-fn (realgud-sget 'cmdbuf-info 'callback-loc-fn))
-          )
-       (if loc-regexp
-           (if (string-match loc-regexp text)
-               (let* ((filename (or (match-string file-group text)
-                                    (match-string alt-file-group text)))
-                      (line-str (or (match-string line-group text)
-                                    (match-string alt-line-group text)))
-                      (source-str (and text-group
-                                       (match-string text-group text)))
-                      (lineno (string-to-number (or line-str "1")))
-                      (directory
-                       (cond ((boundp 'starting-directory) starting-directory)
-                                    (t nil)))
-                      )
-                 (when source-str
-                   (setq source-str (ansi-color-filter-apply
-                                     source-str)))
-                 (cond (callback-loc-fn
-                        (funcall callback-loc-fn text
-                                 filename lineno source-str
-                                 ignore-file-re cmd-mark))
-                       ('t
-                        (unless line-str
-                          (message "line number not found -- using 1"))
-                        (if (and filename lineno)
-                            (realgud:file-loc-from-line filename lineno
-                                                        cmd-mark
-                                                        source-str nil
-                                                        ignore-file-re
-                                                        nil
-                                                        directory
-                                                        )
-                          ;; else
-                          nil)))))
-         ;; else
-         (and (message
-               (concat "Buffer variable for regular expression pattern not"
-                        " given and not passed as a parameter"))
-               nil)))
-    )
-  )
-
-(defun realgud-track-bp-loc(text &optional cmd-mark cmdbuf ignore-file-re)
-  "Do regular-expression matching to find a file name and line number inside
-string TEXT. If we match, we will turn the result into a realgud-loc struct.
-Otherwise return nil. CMD-MARK is set in the realgud-loc object created.
-"
-
-  ; NOTE: realgud-cmdbuf-info is a buffer variable local to the process
-  ; running the debugger. It contains a realgud-cmdbuf-info "struct". In
-  ; that struct is the regexp hash to match positions. By setting the
-  ; the fields of realgud-cmdbuf-info appropriately we can accomodate a
-  ; family of debuggers -- one at a time -- for the buffer process.
-
-  (setq cmdbuf (or cmdbuf (current-buffer)))
-  (with-current-buffer cmdbuf
-    (unless (realgud:track-complain-if-not-in-cmd-buffer cmdbuf t)
-      (let* ((loc-pat (realgud-cmdbuf-pat "brkpt-set"))
-            (shortkey-mode? (realgud-sget 'cmdbuf-info 'src-shortkey?)))
-       (if loc-pat
-           (let ((bp-num-group   (realgud-loc-pat-num loc-pat))
-                 (loc-regexp     (realgud-loc-pat-regexp loc-pat))
-                 (file-group     (realgud-loc-pat-file-group loc-pat))
-                 (line-group     (realgud-loc-pat-line-group loc-pat))
-                 (text-group     (realgud-loc-pat-text-group loc-pat))
-                 (ignore-file-re (realgud-loc-pat-ignore-file-re loc-pat))
-                 (callback-loc-fn (realgud-sget 'cmdbuf-info 'callback-loc-fn))
-                   )
-             (if loc-regexp
-                 (if (string-match loc-regexp text)
-                     (let* ((bp-num (match-string bp-num-group text))
-                            (filename (match-string file-group text))
-                            (line-str (match-string line-group text))
-                            (source-str (and text-group (match-string 
text-group text)))
-                            (lineno (string-to-number (or line-str "1")))
-                            )
-                       (cond (callback-loc-fn
-                              (funcall callback-loc-fn text
-                                       filename lineno source-str
-                                       ignore-file-re cmd-mark))
-
-                             ('t
-                              (unless line-str
-                                (message "line number not found -- using 1"))
-                              (if (and filename lineno)
-                                  (let* ((directory
-                                          (cond ((boundp 'starting-directory) 
starting-directory)
-                                                (t nil)))
-                                         (srcbuf)
-                                         (loc-or-error
-                                          (realgud:file-loc-from-line
-                                           filename lineno
-                                           cmd-mark
-                                           source-str
-                                           (string-to-number bp-num)
-                                           ignore-file-re nil directory
-                                           )))
-                                    (if (stringp loc-or-error)
-                                        (progn
-                                          (message loc-or-error)
-                                          ;; set to return nil
-                                          nil)
-                                      ;; else
-                                      (let ((loc loc-or-error)
-                                            (bp-list (realgud-sget 
'cmdbuf-info 'bp-list)))
-
-                                        ;; Add src buffer mentioned and set it 
possibly to go into shortkey mode
-                                        (setq srcbuf (realgud-loc-goto loc))
-                                        (realgud-cmdbuf-add-srcbuf srcbuf 
cmdbuf)
-                                        (realgud-srcbuf-init-or-update srcbuf 
cmdbuf)
-                                        (with-current-buffer srcbuf
-                                          (realgud-short-key-mode-setup
-                                           (or realgud-short-key-on-tracing? 
shortkey-mode?)
-                                           ))
-
-                                        ;; Add breakpoint to list of 
breakpoints
-                                        (with-current-buffer-safe 
(marker-buffer (realgud-loc-marker loc))
-                                                                  
(realgud-bp-add-info loc))
-
-                                        (unless (member loc bp-list)
-                                          (realgud-cmdbuf-info-bp-list= (cons 
loc bp-list)))
-
-                                        ;; Set to return location
-                                        loc-or-error))))
-                              nil))))
-               nil))
-         nil))
-      )
-    )
-  )
-
-(defun realgud-track-bp-delete(text &optional cmd-mark cmdbuf ignore-file-re)
-  "Do regular-expression matching to see if a breakpoint has been
-deleted inside string TEXT. Return a list of breakpoint locations
-of the breakpoints found in command buffer."
-
-  ; NOTE: realgud-cmdbuf-info is a buffer variable local to the process
-  ; running the debugger. It contains a realgud-cmdbuf-info "struct". In
-  ; that struct is the regexp hash to match positions. By setting the
-  ; the fields of realgud-cmdbuf-info appropriately we can accomodate a
-  ; family of debuggers -- one at a time -- for the buffer process.
-
-  (setq cmdbuf (or cmdbuf (current-buffer)))
-  (with-current-buffer cmdbuf
-    (unless (realgud:track-complain-if-not-in-cmd-buffer cmdbuf t)
-      (let* ((loc-pat (realgud-cmdbuf-pat "brkpt-del")))
-        (when loc-pat
-          (let ((bp-num-group (realgud-loc-pat-num loc-pat))
-                (loc-regexp   (realgud-loc-pat-regexp loc-pat)))
-            (when (and loc-regexp (string-match loc-regexp text))
-              (let* ((bp-nums-str (match-string bp-num-group text))
-                     (bp-num-strs (split-string bp-nums-str "[^0-9]+" t))
-                     (bp-nums (mapcar #'string-to-number bp-num-strs))
-                     (info realgud-cmdbuf-info)
-                     (all-bps (realgud-cmdbuf-info-bp-list info))
-                     (found-locs nil))
-                (dolist (loc all-bps)
-                  (when (memq (realgud-loc-num loc) bp-nums)
-                    (push loc found-locs)
-                    ;; Remove loc from breakpoint list
-                    (realgud-cmdbuf-info-bp-list=
-                     (remove loc (realgud-cmdbuf-info-bp-list info)))))
-                ;; return the locations
-                found-locs))))))))
-
-(defun realgud-track-bp-enable-disable(text loc-pat enable? &optional cmdbuf)
-  "Do regular-expression matching see if a breakpoint has been enabled or 
disabled inside
-string TEXT. If we match, we will do the action to the breakpoint found and 
return the
-breakpoint location. Otherwise return nil.
-"
-  (setq cmdbuf (or cmdbuf (current-buffer)))
-  (with-current-buffer cmdbuf
-    (if (realgud-cmdbuf?)
-       (let* ((found-loc nil))
-         (if loc-pat
-             (let ((bp-num-group (realgud-loc-pat-num loc-pat))
-                   (loc-regexp   (realgud-loc-pat-regexp loc-pat)))
-               (if (and loc-regexp (string-match loc-regexp text))
-                   (let* ((bp-num (string-to-number (match-string bp-num-group 
text)))
-                          (info realgud-cmdbuf-info)
-                          (bp-list (realgud-cmdbuf-info-bp-list info))
-                          (loc)
-                          )
-                     (while (and (not found-loc) (setq loc (car-safe bp-list)))
-                       (setq bp-list (cdr bp-list))
-                       (when (eq (realgud-loc-num loc) bp-num)
-                         (setq found-loc loc)
-                         (let ((src-buffer (realgud-loc-goto loc)))
-                           (realgud-cmdbuf-add-srcbuf src-buffer cmdbuf)
-                           (with-current-buffer src-buffer
-                             (realgud-bp-enable-disable-info bp-num enable? 
loc src-buffer)
-                             )))
-                       )
-                     ;; return the location:
-                     found-loc)
-                 nil))
-           nil))
-      (and (message "Current buffer %s is not a debugger command buffer"
-                   (current-buffer)) nil)
-      )
-    )
-)
-
-(defun realgud-track-loc-remaining(text)
-  "Return the portion of TEXT starting with the part after the
-loc-regexp pattern"
-  (if (realgud-cmdbuf?)
-      (let* ((loc-pat (realgud-cmdbuf-pat "loc"))
-            (loc-regexp (realgud-loc-pat-regexp loc-pat))
-            )
-       (if loc-regexp
-           (if (string-match loc-regexp text)
-               (substring text (match-end 0))
-             nil)
-         nil))
-    nil)
-  )
-
-(defun realgud-track-selected-frame(text)
-  "Return a selected frame number found in TEXT or nil if none found."
-  (if (realgud-cmdbuf?)
-      (let ((selected-frame-pat (realgud-cmdbuf-pat "selected-frame"))
-           (frame-num-regexp)
-           )
-       (if (and selected-frame-pat
-                (setq frame-num-regexp (realgud-loc-pat-regexp
-                                        selected-frame-pat)))
-           (if (string-match frame-num-regexp text)
-               (let ((frame-num-group (realgud-loc-pat-num 
selected-frame-pat)))
-                 (string-to-number (match-string frame-num-group text)))
-             nil)
-         nil))
-    nil)
-  )
-
-
-(defun realgud-track-loc-from-selected-frame(text cmd-mark &optional
-                                                 opt-regexp opt-ignore-file-re)
-  "Return a selected frame number found in TEXT or nil if none found."
-  (if (realgud-cmdbuf?)
-      (let ((selected-frame-pat (realgud-cmdbuf-pat "selected-frame"))
-           (frame-num-regexp)
-           (ignore-file-re (or opt-ignore-file-re
-                               (realgud-sget 'cmdbuf-info 'ignore-file-re))))
-       (if (and selected-frame-pat
-                (setq frame-num-regexp (realgud-loc-pat-regexp
-                                        selected-frame-pat)))
-           (if (string-match frame-num-regexp text)
-               (let* ((file-group (realgud-loc-pat-file-group 
selected-frame-pat))
-                      (line-group (realgud-loc-pat-line-group 
selected-frame-pat))
-                      (filename (match-string file-group text))
-                      (lineno (string-to-number (match-string line-group 
text))))
-                 (if (and filename lineno)
-                     (realgud:file-loc-from-line filename lineno
-                                                 cmd-mark nil nil 
ignore-file-re)
-                   nil))
-             nil)
-         nil))
-    nil))
-
-(defun realgud-track-termination?(text)
-  "Return 't and call `realgud:terminate' we we have a termination message"
-  (if (realgud-cmdbuf?)
-      (let ((termination-re (realgud-cmdbuf-pat "termination"))
-           )
-       (if (and termination-re (string-match termination-re text))
-           (progn
-             (realgud:terminate (current-buffer))
-             't)
-         nil)
-       )
-    )
-  )
-
-(defun realgud-track-divert-prompt(text cmdbuf to)
-  "Return a cons node of the part before the prompt-regexp and the part
-   after the prompt-regexp-prompt. If not found return nil."
-  (with-current-buffer cmdbuf
-    ;; (message "+++3 %s, buf: %s" text (buffer-name))
-    (if (realgud-cmdbuf?)
-       (let* ((prompt-pat (realgud-cmdbuf-pat "prompt"))
-              (prompt-regexp (realgud-loc-pat-regexp prompt-pat))
-              )
-         (if prompt-regexp
-             (if (string-match prompt-regexp text)
-                 (progn
-                   (setq realgud-track-divert-string
-                         (substring text 0 (match-beginning 0)))
-                   ;; We've got desired output, so reset divert output.
-                   (realgud-cmdbuf-info-divert-output?= nil)
-                   (cond ((search-backward-regexp prompt-regexp)
-                          (kill-region realgud-last-output-start (point))
-                          (goto-char (point-max)))
-                         ('t (kill-region realgud-last-output-start to)))
-                   )
-             ))
-         )
-      )
-    )
-  )
-
-(defun realgud-goto-line-for-loc-pat (pt &optional opt-realgud-loc-pat)
-  "Display the location mentioned in line described by
-PT. OPT-REALGUD-LOC-PAT is used to get regular-expresion pattern
-matching information. If not supplied we use the current buffer's \"location\"
-pattern found via realgud-cmdbuf information. nil is returned if we can't
-find a location. non-nil if we can find a location.
-"
-  (interactive "d")
-  (save-excursion
-    (goto-char pt)
-    (let*
-       ((cmdbuf (current-buffer))
-        (cmd-mark (point-marker))
-        (curr-proc (get-buffer-process cmdbuf))
-        (start (line-beginning-position))
-        (end (line-end-position))
-        (loc-pat (or opt-realgud-loc-pat (realgud-cmdbuf-pat "loc")))
-        (loc)
-        )
-      (unless (and loc-pat (realgud-loc-pat-p loc-pat))
-       (error "Can't find location information for %s" cmdbuf))
-      (setq loc (realgud-track-loc (buffer-substring-no-properties start end)
-                               cmd-mark
-                               (realgud-loc-pat-regexp loc-pat)
-                               (realgud-loc-pat-file-group loc-pat)
-                               (realgud-loc-pat-line-group loc-pat)
-                               nil
-                               (realgud-loc-pat-ignore-file-re loc-pat)
-                               ))
-      (if (stringp loc)
-         (message loc)
-       (if loc (or (realgud-track-loc-action loc cmdbuf) 't)
-         nil))
-      ))
-  )
-
-(defun realgud:populate-command-hash(key value)
-  "Adds a KEY and VALUE to the realgud-command-name-hash the command name to a 
debugger specific command."
-  (puthash key
-           (replace-regexp-in-string "%.*" "" (car (split-string value " ")))
-           realgud-command-name-hash))
-
-(defun realgud-set-command-name-hash-to-buffer-local (command-hash)
-  "Sets the eval string as a buffer local variable from the COMMAND-HASH."
-  (set (make-local-variable 'realgud-command-name-hash) (make-hash-table :test 
'equal))
-  (maphash 'realgud:populate-command-hash command-hash))
-
-(defun realgud:track-set-debugger (debugger-name)
-  "Set debugger name and information associated with that
-debugger for the buffer process. This info is returned or nil if
-we can't find a debugger with that information.`.
-"
-  ;; FIXME: turn into fn which can be used by realgud-backtrack-set-debugger
-  (interactive
-   (list (completing-read "Debugger name: " realgud-pat-hash)))
-  (let* ((base-variable-name
-         (or (gethash debugger-name realgud:variable-basename-hash)
-             debugger-name))
-         (regexp-hash (gethash debugger-name realgud-pat-hash))
-         (command-hash (gethash debugger-name realgud-command-hash))
-       )
-    (unless regexp-hash
-      ;; FIXME: phase out realgud:debugger-name-transform
-      (setq base-variable-name (realgud:debugger-name-transform debugger-name))
-      (setq regexp-hash (gethash base-variable-name realgud-pat-hash))
-      (setq command-hash (gethash base-variable-name realgud-command-hash))
-      )
-
-    (realgud-set-command-name-hash-to-buffer-local command-hash)
-
-    (if regexp-hash
-       (let* (
-              (mode-name (concat " " (capitalize base-variable-name) "-Track"))
-              (specific-track-mode (intern (concat base-variable-name 
"-track-mode")))
-              )
-         (realgud-cmdbuf-init (current-buffer)
-                               debugger-name regexp-hash
-                               command-hash base-variable-name)
-         (if (and (not (eval specific-track-mode))
-                  (functionp specific-track-mode))
-             (funcall specific-track-mode 't))
-         )
-      (progn
-       (message "I don't have %s listed as a debugger." debugger-name)
-       nil)
-      )))
-
-;; FIXME: need better name for this and next fn.
-(defun realgud-goto-line-for-pt-and-type (pt type pat-hash)
-  "Position the source code at the location that is matched by
-PAT-HASH with key TYPE. The line at PT is used as the string
-to match against and has location info embedded in it"
-  (realgud-goto-line-for-loc-pat pt (gethash type pat-hash)))
-
-
-(defun realgud-goto-line-for-pt (pt pattern-key)
-  "Position the source code at the location indicated by a
-pattern found in the command buffer with pattern-key
-PATTERN-KEY. (PATTERN-KEY is something like 'debugger-backtrace'
-or 'loc'.) The line at PT is used as the string to match against
-and has location info embedded in it"
-  (interactive "d")
-  (unless (realgud-cmdbuf?)
-    (error "You need to be in a debugger command buffer to run this"))
-  (let* ((debugger-name (realgud-cmdbuf-debugger-name))
-        (debugger-pat-hash (gethash debugger-name realgud-pat-hash)))
-    (realgud-goto-line-for-pt-and-type pt pattern-key debugger-pat-hash)
-    )
-  )
-
-(defun realgud:goto-debugger-backtrace-line (pt)
-  "Position the source code at the location indicated by matching a
-command buffer's debugger backtrace pattern against the line at PT."
-  (interactive "d")
-  (unless (realgud-goto-line-for-pt pt "debugger-backtrace")
-    (message "Line didn't match a debugger backtrace location.")
-    ))
-
-(defun realgud:goto-lang-backtrace-line (pt)
-  "Position the source code at the location indicated by matching a
-command buffer's programming-language backtrace pattern against the line at 
PT."
-  (interactive "d")
-  (unless (realgud-goto-line-for-pt pt "lang-backtrace")
-    (message "Line didn't match a programming-language backtrace location.")
-    ))
-
-(defun realgud:goto-debugger-loc-line (pt)
-  "Position the source-code at the location indicated by matching a
-command buffer's debugger location pattern against the line at PT."
-  (interactive "d")
-  (unless (realgud-goto-line-for-pt pt "loc")
-    (message "Line didn't match a debugger location indicator line.")
-    ))
-
-(provide-me "realgud-")
-
-;; Local Variables:
-;; byte-compile-warnings: (not cl-functions)
-;; End:
diff --git a/packages/realgud/realgud/common/utils.el 
b/packages/realgud/realgud/common/utils.el
deleted file mode 100644
index 9a6d8d3..0000000
--- a/packages/realgud/realgud/common/utils.el
+++ /dev/null
@@ -1,67 +0,0 @@
-;; Copyright (C) 2016-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-(require 'load-relative)
-(require 'comint)
-(require 'eshell)
-
-(defun realgud:strip (str)
-      "Remove leading and tailing whitespace from STR."
-      (while (string-match "\\`\n+\\|^\\s-+\\|\\s-+$\\|\n+\\'"
-                           str)
-        (setq str (replace-match "" t t str)))
-      str)
-
-;; From http://rosettacode.org/wiki/Flatten_a_list#Emacs_Lisp
-(defun realgud:flatten (mylist)
-  (cond
-   ((null mylist) nil)
-   ((atom mylist) (list mylist))
-   (t
-    (append (realgud:flatten (car mylist)) (realgud:flatten (cdr mylist))))))
-
-(if (or (< emacs-major-version 24)
-       (and (= emacs-major-version 24) (<= emacs-minor-version 3)))
-    ;; From
-    ;; 
https://stackoverflow.com/questions/12999530/is-there-a-function-that-joins-a-string-into-a-delimited-string
-    (defun realgud:join-string (list joiner)
-      (mapconcat 'identity list joiner))
-  (progn
-    (require 'subr-x)
-    (defalias 'realgud:join-string 'string-join)))
-
-(defun realgud:canonic-major-mode()
-  "Return
-    - 'eshell if we are in eshell-mode,
-    - 'comint if the major comint-mode or shell-mode
-Or raise an error if neither."
-
-  (cond ((eq major-mode 'eshell-mode)
-       'eshell)
-       ((or (eq major-mode 'comint-mode) (eq major-mode 'shell-mode))
-         'comint)
-       ('t (error "We can only handle comint, shell, or eshell buffers"))
-       ))
-
-(defun realgud:remove-ansi-schmutz()
-  "Remove ASCII escape sequences that node.js 'decorates' in
-prompts and interactive output with"
-  (interactive "")
-  (add-to-list
-   'comint-preoutput-filter-functions
-   (lambda (output)
-     (replace-regexp-in-string "\033\\[[0-9]*[GKJhl]" "" output)))
-  )
-
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/common/window.el 
b/packages/realgud/realgud/common/window.el
deleted file mode 100644
index e922094..0000000
--- a/packages/realgud/realgud/common/window.el
+++ /dev/null
@@ -1,180 +0,0 @@
-;; Copyright (C) 2010, 2014-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-(require 'load-relative)
-(require-relative-list '("helper") "realgud-")
-(require-relative-list '("buffer/helper") "realgud-buffer-")
-
-(declare-function realgud:backtrace-init    'realgud-buffer-helper)
-(declare-function realgud-get-backtrace-buf 'realgud-buffer-helper)
-(declare-function realgud-get-cmdbuf        'realgud-buffer-helper)
-(declare-function realgud-get-srcbuf        'realgud-buffer-helper)
-(declare-function buffer-killed?            'realgud-helper)
-
-(declare-function one-window-p(bool))
-
-(defun realgud-window-update-position (buffer marker)
-  "Update BUFFER to position specified with MARKER.
-We assume MARKER points inside BUFFER"
-  (with-current-buffer buffer
-    (goto-char marker)
-    (let ((window (get-buffer-window buffer)))
-      (if window (set-window-point window marker))
-      )))
-
-
-(defun realgud-window-src ( &optional opt-buffer )
-  "Make sure the source buffer is displayed in a window
-We don't care if the command buffer is also displayed.
-See also `realgud-window-src-undisturb-cmd'"
-  (let* ((buffer (or opt-buffer (current-buffer)))
-        (src-buffer (realgud-get-srcbuf buffer))
-        (src-window (get-buffer-window src-buffer 'visible))
-        (window (selected-window)))
-    (if src-buffer
-       (unless (and src-window (not (window-minibuffer-p)))
-         (set-window-buffer window src-buffer))
-       )
-    ))
-
-(defun realgud-window-src-undisturb-cmd ( &optional opt-buffer )
-  "Make sure the source buffers is displayed in windows without
-disturbing the command window if it is also displayed. Returns
-the command window
-See also `realgud-window-src'"
-  (interactive)
-  (let* ((buffer (or opt-buffer (current-buffer)))
-        (src-buffer (realgud-get-srcbuf buffer))
-        (src-window (get-buffer-window src-buffer))
-        (cmd-buffer (realgud-get-cmdbuf buffer))
-        (cmd-window (get-buffer-window cmd-buffer))
-        (window (selected-window))
-        )
-    (if src-buffer
-       (unless src-window
-         (setq src-window
-               (if (eq window cmd-window)
-                   ;; FIXME: generalize what to do here.
-                   (if (one-window-p 't)
-                       (split-window)
-                     (next-window window 'no-minibuf))
-                 window))
-         (set-window-buffer src-window src-buffer))
-       )
-    (select-window src-window)
-    cmd-window)
-  )
-
-(defun realgud-window-cmd-undisturb-src ( &optional opt-buffer switch?)
-  "Make sure the source buffer is displayed in windows without
-disturbing the command window if it is also displayed. Returns
-the source window.
-See also `realgud-window-src'"
-  (interactive)
-  (let* ((buffer (or opt-buffer (current-buffer)))
-        (src-buffer (realgud-get-srcbuf buffer))
-        (src-window (get-buffer-window src-buffer))
-        (cmd-buffer (realgud-get-cmdbuf buffer))
-        (cmd-window (get-buffer-window cmd-buffer))
-        (window (selected-window))
-        )
-    (when cmd-buffer
-      (unless cmd-window
-       (setq cmd-window
-             (if (eq window src-window)
-                 ;; FIXME: generalize what to do here.
-                 (if (one-window-p 't)
-                     (split-window)
-                   (next-window window 'no-minibuf))
-               window))
-       (set-window-buffer cmd-window cmd-buffer)
-       )
-      (if switch?
-         (and (select-window cmd-window)
-              (switch-to-buffer cmd-buffer)))
-
-      )
-    (select-window cmd-window)
-    src-window)
-  )
-
-(defun realgud:window-bt-undisturb-src ( &optional opt-buffer switch?)
-  "Make sure the backtrace buffer is displayed in windows without
-disturbing the source window if it is also displayed. Returns
-the source window
-See also `realgud-window-src'"
-  (interactive)
-  (let* ((buffer (or opt-buffer (current-buffer)))
-        (src-buffer (realgud-get-srcbuf buffer))
-        (src-window (get-buffer-window src-buffer))
-        (cmd-buffer (realgud-get-cmdbuf buffer))
-        (cmd-window (get-buffer-window cmd-buffer))
-        (bt-buffer (realgud-get-backtrace-buf cmd-buffer))
-        (bt-window (get-buffer-window bt-buffer))
-        (window (selected-window))
-        )
-    (when cmd-buffer
-      (unless bt-window
-       (setq bt-window
-             (if (eq window src-window)
-                 ;; FIXME: generalize what to do here.
-                 (if (one-window-p 't)
-                     (split-window)
-                   (next-window window 'no-minibuf))
-               window))
-       (set-window-buffer bt-window bt-buffer)
-       )
-      (if switch?
-         (and (select-window bt-window)
-              (switch-to-buffer bt-buffer)))
-
-      )
-    src-window)
-  )
-
-(defun realgud:window-bt()
-  "Refresh backtrace information and display that in a buffer"
-  (interactive)
-  (with-current-buffer-safe (realgud-get-cmdbuf)
-    (realgud:backtrace-init)
-    (realgud:window-bt-undisturb-src)
-    )
-  )
-
-
-;; (defun realgud-window-src-and-cmd ( &optional opt-buffer )
-;;   "Make sure the source buffers is displayed in windows without
-;; disturbing the command window if it is also displayed. Returns
-;; the command window
-;; See also `realgud-window-src-window'"
-;;   (interactive)
-;;   (let* ((buffer (or opt-buffer (current-buffer)))
-;;      (src-buffer (realgud-get-srcbuf buffer))
-;;      (src-window (get-buffer-window src-buffer))
-;;      (cmd-buffer (realgud-get-cmdbuf buffer))
-;;      (cmd-window (get-buffer-window cmd-buffer))
-;;      (window (selected-window))
-;;      )
-;;     (if src-buffer
-;;     (unless src-window
-;;       (setq src-window
-;;             (if (eq window cmd-window)
-;;                 (if (one-window-p 't) (split-window) (next-window window))
-;;               window))
-;;       (set-window-buffer src-window src-buffer))
-;;     )
-;;     cmd-window)
-;;   )
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/debugger/Makefile.am 
b/packages/realgud/realgud/debugger/Makefile.am
deleted file mode 100644
index 5f7a769..0000000
--- a/packages/realgud/realgud/debugger/Makefile.am
+++ /dev/null
@@ -1,8 +0,0 @@
-SUBDIRS = \
-       bashdb gdb gub ipdb jdb kshdb nodejs \
-       pdb perldb rdebug remake \
-       trepan trepan2 trepan3k trepan.pl trepanjs \
-       zshdb
-EXTRA_DIST = common.mk
-
-.PHONY: check all
diff --git a/packages/realgud/realgud/debugger/bashdb/Makefile.am 
b/packages/realgud/realgud/debugger/bashdb/Makefile.am
deleted file mode 100644
index e6c68b4..0000000
--- a/packages/realgud/realgud/debugger/bashdb/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-include ../common.mk
-
-lisp_files = $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-EXTRA_DIST = $(lisp_files)
diff --git a/packages/realgud/realgud/debugger/bashdb/bashdb.el 
b/packages/realgud/realgud/debugger/bashdb/bashdb.el
deleted file mode 100644
index 9853b01..0000000
--- a/packages/realgud/realgud/debugger/bashdb/bashdb.el
+++ /dev/null
@@ -1,108 +0,0 @@
-;; Copyright (C) 2015-2016, 2018 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;;  `bashdb' Main interface to bashdb via Emacs
-(require 'load-relative)
-(require-relative-list '("../../common/helper") "realgud-")
-(require-relative-list '("../../common/run")    "realgud:")
-(require-relative-list '("core" "track-mode")   "realgud:bashdb-")
-
-;; This is needed, or at least the docstring part of it is needed to
-;; get the customization menu to work in Emacs 24.
-(defgroup realgud:bashdb nil
-  "The realgud interface to bashdb"
-  :group 'realgud
-  :version "24.3")
-
-;; -------------------------------------------------------------------
-;; User-definable variables
-;;
-
-(defcustom realgud:bashdb-command-name
-  ;;"bashdb --emacs 3"
-  "bashdb"
-  "File name for executing the bash debugger and command options.
-This should be an executable on your path, or an absolute file name."
-  :type 'string
-  :group 'realgud:bashdb)
-
-;; -------------------------------------------------------------------
-;; The end.
-;;
-
-(declare-function bashdb-track-mode     'realgud-bashdb-track-mode)
-(declare-function bashdb-query-cmdline  'realgud:bashdb-core)
-(declare-function bashdb-parse-cmd-args 'realgud:bashdb-core)
-(declare-function realgud:run-debugger 'realgud:run)
-
-;;;###autoload
-(defun realgud:bashdb (&optional opt-cmd-line no-reset)
-  "Invoke the bashdb shell debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE specifies how to run bash. You will be prompted
-for a command line is one isn't supplied.
-
-OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `bashdb-parse-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-"
-  (interactive)
-  (realgud:run-debugger "bashdb"
-                       'bashdb-query-cmdline
-                       'bashdb-parse-cmd-args
-                       'realgud:bashdb-minibuffer-history
-                       opt-cmd-line no-reset)
-  )
-
-(defun realgud:bashdb-large (&optional opt-cmd-line no-reset)
-  "Use this is the program you are debugging is large, say over 1,000 lines or 
so.
-"
-  (interactive)
-  (let ((cmd-buf
-        (realgud:run-debugger "bashdb"
-                              'bashdb-query-cmdline
-                              'bashdb-parse-cmd-args
-                              'realgud:bashdb-minibuffer-history
-                              opt-cmd-line no-reset)
-        ))
-    (if cmd-buf
-       (let ((process (get-buffer-process cmd-buf)))
-         (if (and process (eq 'run (process-status process)))
-             (with-current-buffer cmd-buf
-               (sleep-for 1)
-               (realgud-command "frame 0" nil nil nil)
-               )))
-      )
-    ))
-
-
-;;;###autoload
-(defalias 'bashdb 'realgud:bashdb)
-
-;;;###autoload
-(defalias 'bashdb-large 'realgud:bashdb-large)
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/debugger/bashdb/core.el 
b/packages/realgud/realgud/debugger/bashdb/core.el
deleted file mode 100644
index 155b09b..0000000
--- a/packages/realgud/realgud/debugger/bashdb/core.el
+++ /dev/null
@@ -1,197 +0,0 @@
-;; Copyright (C) 2015-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-(require 'load-relative)
-(require-relative-list '("../../common/track" "../../common/core")
-                      "realgud-")
-(require-relative-list '("init") "realgud:bashdb-")
-
-(declare-function realgud:expand-file-name-if-exists 'realgud-core)
-(declare-function realgud-parse-command-arg  'realgud-core)
-(declare-function realgud-query-cmdline      'realgud-core)
-(declare-function realgud-suggest-invocation 'realgud-core)
-
-;; FIXME: I think the following could be generalized and moved to
-;; realgud-... probably via a macro.
-(defvar realgud:bashdb-minibuffer-history nil
-  "minibuffer history list for the command `realgud:bashdb'.")
-
-(easy-mmode-defmap bashdb-minibuffer-local-map
-  '(("\C-i" . comint-dynamic-complete-filename))
-  "Keymap for minibuffer prompting of bashdb startup command."
-  :inherit minibuffer-local-map)
-
-;; FIXME: I think this code and the keymaps and history
-;; variable chould be generalized, perhaps via a macro.
-(defun bashdb-query-cmdline (&optional opt-debugger)
-  (realgud-query-cmdline
-   'bashdb-suggest-invocation
-   bashdb-minibuffer-local-map
-   'realgud:bashdb-minibuffer-history
-   opt-debugger))
-
-;;; FIXME: DRY this with other *-parse-cmd-args routines
-(defun bashdb-parse-cmd-args (orig-args)
-  "Parse command line ORIG-ARGS for the annotate level and name of script to 
debug.
-
-ORIG-ARGS should contain a tokenized list of the command line to run.
-
-We return the a list containing:
-* the command processor (e.g. bash) and it's arguments if any - a list of 
strings
-* the name of the debugger given (e.g. bashdb) and its arguments - a list of 
strings
-* the script name and its arguments - list of strings
-* whether the annotate or emacs option was given ('-A', '--annotate' or 
'--emacs) - a boolean
-
-The script name and options mentioning paths are file expanded
-
-For example for the following input
-  (map 'list 'symbol-name
-   '(bash --norc bashdb -l . --emacs ./gcd.sh a b))
-
-we might return:
-   ((\"bash\" \"--norc\") (\"bashdb\" \"-l\" \"/tmp\" \"--emacs\") 
(\"/tmp/gcd.sh\" \"a\" \"b\") t)
-
-Note that path elements have been expanded via 
`realgud:expand-file-name-if-exists'.
-"
-
-  ;; Parse the following kind of pattern:
-  ;;  [bash bash-options] bashdb bashdb-options script-name script-options
-  (let (
-       (args orig-args)
-       (pair)          ;; temp return from
-       ;; bash doesn't have any optional two-arg options
-       (bash-opt-two-args '())
-       (bash-two-args '("o" "c"))
-
-       ;; One dash is added automatically to the below, so
-       ;; h is really -h and -host is really --host.
-       (bashdb-two-args '("A" "-annotate" "l" "-library"
-                          "c" "-command" "-t" "-tty"
-                          "x" "-eval-command"))
-       (bashdb-opt-two-args '())
-       (interp-regexp
-        (if (member system-type (list 'windows-nt 'cygwin 'msdos))
-            "^bash*\\(.exe\\)?$"
-          "^bash*$"))
-       (bashdb-two-arg-name)
-       (debugger-flag nil) ;; 't if "bash --debugger" given
-
-       ;; Things returned
-       (script-name nil)
-       (debugger-name nil)
-       (interpreter-args '())
-       (debugger-args '())
-       (script-args '())
-       (annotate-p nil))
-
-    (if (not (and args))
-       ;; Got nothing: return '(nil, nil)
-       (list interpreter-args debugger-args script-args annotate-p)
-      ;; else
-      ;; Strip off optional "bash" or "bash4" etc.
-      (when (string-match interp-regexp
-                         (file-name-sans-extension
-                          (file-name-nondirectory (car args))))
-       (setq interpreter-args (list (pop args)))
-
-       ;; Strip off bash-specific options
-       (while (and args
-                   (string-match "^-" (car args)))
-         (setq pair (realgud-parse-command-arg
-                     args bash-two-args bash-opt-two-args))
-         (if (equal "--debugger" (caar pair))
-             (setq debugger-flag 't))
-         (nconc interpreter-args (car pair))
-         (setq args (cadr pair))))
-
-      ;; Remove "bashdb" from "bashdb --bashdb-options script
-      ;; --script-options"
-      (unless debugger-flag
-       (setq debugger-name (file-name-sans-extension
-                            (file-name-nondirectory (car args))))
-       (unless (string-match "^bashdb$" debugger-name)
-         (message
-          "Expecting debugger name `%s' to be `bashdb'"
-          debugger-name))
-       (setq debugger-args (list (pop args)))
-       )
-
-      ;; Skip to the first non-option argument.
-      (while (and args (not script-name))
-       (let ((arg (car args)))
-         (cond
-          ;; Annotation or emacs option with level number.
-          ((member arg '("--annotate" "-A" "--emacs"))
-           (setq annotate-p t)
-           (nconc debugger-args (list (pop args))))
-          ;; Combined annotation and level option.
-          ((string-match "^--annotate=[0-9]" arg)
-           (nconc debugger-args (list (pop args)) )
-           (setq annotate-p t))
-          ;; Library option
-          ((member arg '("--library" "-l"))
-           (setq arg (pop args))
-           (nconc debugger-args
-                  (list arg (realgud:expand-file-name-if-exists
-                             (pop args)))))
-          ;; Other options with arguments.
-          ((string-match "^-" arg)
-           (setq pair (realgud-parse-command-arg
-                       args bashdb-two-args bashdb-opt-two-args))
-           (nconc debugger-args (car pair))
-           (setq args (cadr pair)))
-          ;; Anything else must be the script to debug.
-          (t (setq script-name (realgud:expand-file-name-if-exists arg))
-             (setq script-args (cons script-name (cdr args))))
-          )))
-      (list interpreter-args debugger-args script-args annotate-p))))
-
-;; To silence Warning: reference to free variable
-(defvar realgud:bashdb-command-name)
-
-(defun bashdb-suggest-invocation (debugger-name)
-  "Suggest a bashdb command invocation via `realgud-suggest-invocaton'"
-  (realgud-suggest-invocation (or debugger-name realgud:bashdb-command-name)
-                             realgud:bashdb-minibuffer-history
-                             "sh" "\\.\\(?:ba\\)?sh$"
-                             realgud:bashdb-command-name))
-
-(defun bashdb-reset ()
-  "Bashdb cleanup - remove debugger's internal buffers (frame,
-breakpoints, etc.)."
-  (interactive)
-  ;; (bashdb-breakpoint-remove-all-icons)
-  (dolist (buffer (buffer-list))
-    (when (string-match "\\*bashdb-[a-z]+\\*" (buffer-name buffer))
-      (let ((w (get-buffer-window buffer)))
-        (when w
-          (delete-window w)))
-      (kill-buffer buffer))))
-
-;; (defun bashdb-reset-keymaps()
-;;   "This unbinds the special debugger keys of the source buffers."
-;;   (interactive)
-;;   (setcdr (assq 'bashdb-debugger-support-minor-mode minor-mode-map-alist)
-;;       bashdb-debugger-support-minor-mode-map-when-deactive))
-
-
-(defun realgud:bashdb-customize ()
-  "Use `customize' to edit the settings of the `bashdb' debugger."
-  (interactive)
-  (customize-group 'realgud:bashdb))
-
-(provide-me "realgud:bashdb-")
diff --git a/packages/realgud/realgud/debugger/bashdb/init.el 
b/packages/realgud/realgud/debugger/bashdb/init.el
deleted file mode 100644
index e527b2d..0000000
--- a/packages/realgud/realgud/debugger/bashdb/init.el
+++ /dev/null
@@ -1,110 +0,0 @@
-;; Copyright (C) 2015-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;; Regular expressions for Bash shell debugger: bashdb
-
-(eval-when-compile (require 'cl-lib))   ;For setf.
-(require 'load-relative)
-(require-relative-list '("../../common/regexp"
-                        "../../common/loc"
-                        "../../common/init")
-                      "realgud-")
-(require-relative-list '("../../lang/posix-shell") "realgud-lang-")
-
-(defvar realgud:bashdb-pat-hash)
-(declare-function make-realgud-loc-pat (realgud-loc))
-
-(defvar realgud:bashdb-pat-hash (make-hash-table :test 'equal)
-  "Hash key is the what kind of pattern we want to match:
-backtrace, prompt, etc.  The values of a hash entry is a
-realgud-loc-pat struct")
-
-;; Regular expression that describes a bashdb location generally shown
-;; before a command prompt.
-;; For example:
-;;   (/etc/init.d/apparmor:35):
-(setf (gethash "loc" realgud:bashdb-pat-hash) realgud:POSIX-debugger-loc-pat)
-
-;; Top frame number
-(setf (gethash "top-frame-num" realgud:bashdb-pat-hash) 0)
-
-;; Regular expression that describes a bashdb command prompt
-;; For example:
-;;   bashdb<10>
-;;   bashdb<(5)>
-;;   bashdb<<1>>
-(setf (gethash "prompt" realgud:bashdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp  (format  "^bashdb[<]+[(]*%s[)]*[>]+ "
-                        realgud:regexp-captured-num)
-       :num 1
-       ))
-
-;;  realgud-loc-pat that describes a "breakpoint set" line
-(setf (gethash "brkpt-set" realgud:bashdb-pat-hash)
-      realgud:POSIX-debugger-brkpt-set-pat)
-
-;; realgud-loc-pat that describes a debugger "delete" (breakpoint) response.
-;; For example:
-;;   Deleted breakpoint 1.
-(setf (gethash "brkpt-del" realgud:bashdb-pat-hash)
-      realgud:POSIX-debugger-brkpt-del-pat)
-
-;; realgud-loc-pat that describes a debugger "disable" (breakpoint) response.
-;; For example:
-;;   Breakpoint entry 4 disabled.
-(setf (gethash "brkpt-disable" realgud:bashdb-pat-hash)
-      realgud:POSIX-debugger-brkpt-disable-pat)
-
-;; realgud-loc-pat that describes a debugger "enable" (breakpoint) response.
-;; For example:
-;;   Breakpoint entry 4 enabled.
-(setf (gethash "brkpt-enable" realgud:bashdb-pat-hash)
-      realgud:POSIX-debugger-brkpt-enable-pat)
-
-;; realgud-loc-pat that describes a debugger "backtrace" command line.
-;; For example:
-;;   ->0 in file `../bashdb/test/example/subshell.sh' at line 6
-;;   ##1 source("../bashdb/shell.sh") called from file `/bin/bashdb' at line 
140
-;;   ##2 main() called from file `/bin/bashdb' at line 0
-(setf (gethash "debugger-backtrace" realgud:bashdb-pat-hash)
-      realgud:POSIX-debugger-backtrace-pat)
-
-;; realgud-loc-pat for a termination message.
-(setf (gethash "termination" realgud:bashdb-pat-hash)
-       "^bashdb: That's all, folks...\n")
-
-(setf (gethash "font-lock-keywords" realgud:bashdb-pat-hash)
-      realgud:POSIX-debugger-font-lock-keywords)
-
-(setf (gethash "bashdb" realgud-pat-hash) realgud:bashdb-pat-hash)
-
-(defvar realgud:bashdb-command-hash (make-hash-table :test 'equal)
-  "Hash key is command name like 'quit' and the value is
-  the bashdb command to use, like 'quit!'")
-
-(setf (gethash "bashdb" realgud-command-hash) realgud:bashdb-command-hash)
-
-(setf (gethash "clear"  realgud:bashdb-command-hash) "clear %l")
-(setf (gethash "eval"   realgud:bashdb-command-hash) "eval %s")
-(setf (gethash "quit"   realgud:bashdb-command-hash) "quit")
-(setf (gethash "until"  realgud:bashdb-command-hash) "continue %l")
-
-;; Unsupported features:
-(setf (gethash "jump"  realgud:bashdb-command-hash) "*not-implemented*")
-
-(provide-me "realgud:bashdb-")
diff --git a/packages/realgud/realgud/debugger/bashdb/track-mode.el 
b/packages/realgud/realgud/debugger/bashdb/track-mode.el
deleted file mode 100644
index d01d6c7..0000000
--- a/packages/realgud/realgud/debugger/bashdb/track-mode.el
+++ /dev/null
@@ -1,73 +0,0 @@
-;; Copyright (C) 2012-2016 Free Software Foundation, Inc
-
-;; Author: 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.
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; Bash Debugger tracking in a comint or eshell buffer.
-
-(require 'load-relative)
-(require-relative-list '(
-                        "../../common/cmds"
-                        "../../common/menu"
-                        "../../common/track"
-                        "../../common/track-mode"
-                        )
-                      "realgud-")
-(require-relative-list '("core" "init") "realgud:bashdb-")
-(require-relative "../../lang/posix-shell" nil "realgud-lang-")
-
-(declare-function realgud-track-mode 'realgud-track-mode)
-(declare-function realgud-track-mode-hook 'realgud-track-mode)
-(declare-function realgud-track-mode-setup   'realgud-track-mode)
-(declare-function realgud:track-set-debugger 'realgud-track-mode)
-(declare-function realgud-posix-shell-populate-command-keys
-                 'realgud-lang-posix-shell)
-
-(realgud-track-mode-vars "bashdb")
-
-(defun bashdb-track-mode-hook()
-  (if bashdb-track-mode
-      (progn
-       (use-local-map bashdb-track-mode-map)
-       (message "using bashdb mode map")
-       )
-    (message "bashdb track-mode-hook disable called"))
-)
-
-(define-minor-mode bashdb-track-mode
-  "Minor mode for tracking bashdb source locations inside a process shell via 
realgud. bashdb is a Bash debugger. See URL `http://bashdb.sf.net'.
-
-If called interactively with no prefix argument, the mode is toggled. A prefix 
argument, captured as ARG, enables the mode if the argument is positive, and 
disables it otherwise.
-
-\\{bashdb-track-mode-map}"
-  :init-value nil
-  ;; :lighter " bashdb"   ;; mode-line indicator from realgud-track is 
sufficient.
-  ;; The minor mode bindings.
-  :global nil
-  :group 'realgud:bashdb
-  :keymap bashdb-track-mode-map
-
-  (realgud:track-set-debugger "bashdb")
-  (if bashdb-track-mode
-      (progn
-        (realgud-track-mode-setup 't)
-        (bashdb-track-mode-hook))
-    (progn
-      (setq realgud-track-mode nil)
-      ))
-)
-
-(define-key bashdb-short-key-mode-map "T" 'realgud:cmd-backtrace)
-
-(provide-me "realgud:bashdb-")
diff --git a/packages/realgud/realgud/debugger/common.mk 
b/packages/realgud/realgud/debugger/common.mk
deleted file mode 100644
index b09deeb..0000000
--- a/packages/realgud/realgud/debugger/common.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-include $(top_srcdir)/common.mk
-
-lispdir = @lispdir_realgud@/debugger/$(notdir $(subdir))
diff --git a/packages/realgud/realgud/debugger/gdb/Makefile.am 
b/packages/realgud/realgud/debugger/gdb/Makefile.am
deleted file mode 100644
index e6c68b4..0000000
--- a/packages/realgud/realgud/debugger/gdb/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-include ../common.mk
-
-lisp_files = $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-EXTRA_DIST = $(lisp_files)
diff --git a/packages/realgud/realgud/debugger/gdb/core.el 
b/packages/realgud/realgud/debugger/gdb/core.el
deleted file mode 100644
index 50b8ce3..0000000
--- a/packages/realgud/realgud/debugger/gdb/core.el
+++ /dev/null
@@ -1,223 +0,0 @@
-;; Copyright (C) 2015-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-(require 'load-relative)
-(require-relative-list '("../../common/track"
-                        "../../common/core"
-                        "../../common/lang")
-                      "realgud-")
-
-(declare-function realgud:expand-file-name-if-exists 'realgud-core)
-(declare-function realgud-lang-mode? 'realgud-lang)
-(declare-function realgud-parse-command-arg 'realgud-core)
-(declare-function realgud-query-cmdline 'realgud-core)
-
-;; FIXME: I think the following could be generalized and moved to
-;; realgud-... probably via a macro.
-(defvar realgud:gdb-minibuffer-history nil
-  "minibuffer history list for the command `gdb'.")
-
-(easy-mmode-defmap realgud:gdb-minibuffer-local-map
-  '(("\C-i" . comint-dynamic-complete-filename))
-  "Keymap for minibuffer prompting of gud startup command."
-  :inherit minibuffer-local-map)
-
-;; FIXME: I think this code and the keymaps and history
-;; variable chould be generalized, perhaps via a macro.
-(defun realgud:gdb-query-cmdline (&optional opt-debugger)
-  (realgud-query-cmdline
-   'realgud:gdb-suggest-invocation
-   realgud:gdb-minibuffer-local-map
-   'realgud:gdb-minibuffer-history
-   opt-debugger))
-
-(defun realgud:gdb-parse-cmd-args (orig-args)
-  "Parse command line ARGS for the annotate level and name of script to debug.
-
-ORIG_ARGS should contain a tokenized list of the command line to run.
-
-We return the a list containing
-* the name of the debugger given (e.g. gdb) and its arguments - a list of 
strings
-* nil (a placeholder in other routines of this ilk for a debugger
-* the script name and its arguments - list of strings
-* whether the annotate or emacs option was given ('-A', '--annotate' or 
'--emacs) - a boolean
-
-For example for the following input
-  (map 'list 'symbol-name
-   '(gdb --tty /dev/pts/1 -cd ~ --emacs ./gcd.py a b))
-
-we might return:
-   ((\"gdb\" \"--tty\" \"/dev/pts/1\" \"-cd\" \"home/rocky\' \"--emacs\") nil 
\"(/tmp/gcd.py a b\") 't\")
-
-Note that path elements have been expanded via `expand-file-name'.
-"
-
-  ;; Parse the following kind of pattern:
-  ;;  gdb gdb-options script-name script-options
-  (let (
-       (args orig-args)
-       (pair)          ;; temp return from
-
-       ;; One dash is added automatically to the below, so
-       ;; h is really -h and -host is really --host.
-       (gdb-two-args '("x" "-command" "b" "-exec"
-                       "cd" "-pid"  "-core" "-directory"
-                       "-annotate"
-                       "i" "-interpreter"
-                       "se" "-symbols" "-tty"))
-       ;; gdb doesn't optionsl 2-arg options.
-       (gdb-opt-two-args '())
-
-       ;; Things returned
-       (script-name nil)
-       (debugger-name nil)
-       (debugger-args '())
-       (script-args '())
-       (annotate-p nil))
-
-    (if (not (and args))
-       ;; Got nothing: return '(nil nil nil nil)
-       (list debugger-args nil script-args annotate-p)
-      ;; else
-      (progn
-
-       ;; Remove "gdb" from "gdb --gdb-options script
-       ;; --script-options"
-       (setq debugger-name (file-name-sans-extension
-                            (file-name-nondirectory (car args))))
-       (unless (string-match "^gdb.*" debugger-name)
-         (message
-          "Expecting debugger name `%s' to be `gdb'"
-          debugger-name))
-       (setq debugger-args (list (pop args)))
-
-       ;; Skip to the first non-option argument.
-       (while (and args (not script-name))
-         (let ((arg (car args)))
-           (cond
-            ;; Annotation or emacs option with level number.
-            ((or (member arg '("--annotate" "-A"))
-                 (equal arg "--emacs"))
-             (setq annotate-p t)
-             (nconc debugger-args (list (pop args) (pop args))))
-            ;; Combined annotation and level option.
-            ((string-match "^--annotate=[0-9]" arg)
-             (nconc debugger-args (list (pop args) (pop args)) )
-             (setq annotate-p t))
-            ((string-match "^--interpreter=" arg)
-             (warn "realgud doesn't support the --interpreter option; option 
ignored")
-             (setq args (cdr args)))
-            ((equal "-i" arg)
-             (warn "realgud doesn't support the -i option; option ignored")
-             (setq args (cddr args)))
-            ;; path-argument options
-            ((member arg '("-cd" ))
-             (setq arg (pop args))
-             (nconc debugger-args
-                    (list arg (realgud:expand-file-name-if-exists
-                               (pop args)))))
-            ;; Options with arguments.
-            ((string-match "^-" arg)
-             (setq pair (realgud-parse-command-arg
-                         args gdb-two-args gdb-opt-two-args))
-             (nconc debugger-args (car pair))
-             (setq args (cadr pair)))
-            ;; Anything else must be the script to debug.
-            (t (setq script-name (realgud:expand-file-name-if-exists arg))
-               (setq script-args (cons script-name (cdr args))))
-            )))
-       (list debugger-args nil script-args annotate-p)))))
-
-(defvar realgud:gdb-command-name)
-
-(defun realgud:gdb-executable (file-name)
-  "Return a priority for whether FILE-NAME is likely we can run gdb on"
-  (let ((output (shell-command-to-string
-                (format "file %s" (file-chase-links file-name)))))
-    (cond
-     ((string-match "ASCII" output) 2)
-     ((string-match "ELF" output) 7)
-     ((string-match "executable" output) 6)
-     ('t 5))))
-
-(defun realgud:gdb-suggest-invocation (&optional debugger-name)
-  "Suggest a gdb command invocation. Here is the priority we use:
-* an executable file with the name of the current buffer stripped of its 
extension
-* any executable file in the current directory with no extension
-* the last invocation in gdb:minibuffer-history
-* any executable in the current directory
-When all else fails return the empty string."
-  (let* ((file-list (directory-files default-directory))
-        (priority 2)
-        (best-filename nil)
-        (try-filename (file-name-base (or (buffer-file-name) "gdb"))))
-    (when (member try-filename (directory-files default-directory))
-       (setq best-filename try-filename)
-       (setq priority (+ (realgud:gdb-executable try-filename) 2)))
-
-    ;; FIXME: I think a better test would be to look for
-    ;; c-mode in the buffer that have a corresponding executable
-    (while (and (setq try-filename (car-safe file-list)) (< priority 8))
-      (setq file-list (cdr file-list))
-      (if (and (file-executable-p try-filename)
-              (not (file-directory-p try-filename)))
-         (if (equal try-filename (file-name-sans-extension try-filename))
-             (progn
-               (setq best-filename try-filename)
-               (setq priority (1+ (realgud:gdb-executable best-filename))))
-           ;; else
-           (progn
-             (setq best-filename try-filename)
-             (setq priority (realgud:gdb-executable best-filename))
-             ))
-       ))
-    (if (< priority 8)
-       (cond
-        (realgud:gdb-minibuffer-history
-         (car realgud:gdb-minibuffer-history))
-        ((equal priority 7)
-         (concat "gdb " best-filename))
-        (t "gdb "))
-      ;; else
-      (concat "gdb " best-filename))
-    ))
-
-(defun realgud:gdb-reset ()
-  "Gdb cleanup - remove debugger's internal buffers (frame,
-breakpoints, etc.)."
-  (interactive)
-  ;; (gdb-breakpoint-remove-all-icons)
-  (dolist (buffer (buffer-list))
-    (when (string-match "\\*gdb-[a-z]+\\*" (buffer-name buffer))
-      (let ((w (get-buffer-window buffer)))
-        (when w
-          (delete-window w)))
-      (kill-buffer buffer))))
-
-;; (defun gdb-reset-keymaps()
-;;   "This unbinds the special debugger keys of the source buffers."
-;;   (interactive)
-;;   (setcdr (assq 'gdb-debugger-support-minor-mode minor-mode-map-alist)
-;;       gdb-debugger-support-minor-mode-map-when-deactive))
-
-
-(defun realgud:gdb-customize ()
-  "Use `customize' to edit the settings of the `realgud:gdb' debugger."
-  (interactive)
-  (customize-group 'realgud:gdb))
-
-(provide-me "realgud:gdb-")
diff --git a/packages/realgud/realgud/debugger/gdb/gdb.el 
b/packages/realgud/realgud/debugger/gdb/gdb.el
deleted file mode 100644
index 4c2853f..0000000
--- a/packages/realgud/realgud/debugger/gdb/gdb.el
+++ /dev/null
@@ -1,141 +0,0 @@
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;;  `realgud:gdb' Main interface to gdb via Emacs
-(require 'load-relative)
-(require-relative-list '("../../common/helper" "../../common/utils")
-                      "realgud-")
-
-(require-relative-list '("../../common/buffer/command"
-                        "../../common/buffer/source")
-                      "realgud-buffer-")
-
-(require-relative-list '("core" "track-mode") "realgud:gdb-")
-
-(declare-function realgud-cmdbuf? 'realgud-buffer-command)
-(declare-function realgud:cmdbuf-associate 'realgud-buffer-source)
-(declare-function realgud-parse-command-arg 'realgud-core)
-
-;; This is needed, or at least the docstring part of it is needed to
-;; get the customization menu to work in Emacs 24.
-(defgroup realgud:gdb nil
-  "The realgud interface to gdb"
-  :group 'realgud
-  :version "24.3")
-
-;; -------------------------------------------------------------------
-;; User definable variables
-;;
-
-(defcustom realgud:gdb-command-name
-  ;;"gdb --emacs 3"
-  "gdb"
-  "File name for executing the and command options.
-This should be an executable on your path, or an absolute file name."
-  :type 'string
-  :group 'realgud:gdb)
-
-(declare-function realgud:gdb-track-mode     'realgud:gdb-track-mode)
-(declare-function realgud-command            'realgud:gdb-core)
-(declare-function realgud:gdb-parse-cmd-args 'realgud:gdb-core)
-(declare-function realgud:gdb-query-cmdline  'realgud:gdb-core)
-(declare-function realgud:run-process        'realgud-core)
-(declare-function realgud:flatten            'realgud-utils)
-
-;; -------------------------------------------------------------------
-;; The end.
-;;
-
-(defun realgud:gdb-pid-command-buffer (pid)
-  "Return the command buffer used when gdb -p PID is invoked"
-  (format "*gdb %d shell*" pid)
-  )
-
-(defun realgud:gdb-find-command-buffer (pid)
-  "Find the among current buffers a buffer that is a realgud command buffer
-running gdb on process number PID"
-  (let ((find-cmd-buf (realgud:gdb-pid-command-buffer pid)))
-    (dolist (buf (buffer-list))
-      (if (and (equal find-cmd-buf (buffer-name buf))
-               (realgud-cmdbuf? buf)
-               (get-buffer-process buf))
-       (return buf)))))
-
-(defun realgud:gdb-pid (pid)
-  "Start debugging gdb process with pid PID."
-  (interactive "nEnter the pid that gdb should attach to: ")
-  (realgud:gdb (format "%s -p %d" realgud:gdb-command-name pid))
-  ;; FIXME: should add code to test if attach worked.
-  )
-
-(defun realgud:gdb-pid-associate (pid)
-  "Start debugging gdb process with pid PID and associate the
-current buffer to that realgud command buffer."
-  (interactive "nEnter the pid that gdb should attach to and associate the 
current buffer to: ")
-  (let* ((command-buf)
-        (source-buf (current-buffer))
-        )
-    (realgud:gdb-pid pid)
-    (setq command-buf (realgud:gdb-find-command-buffer pid))
-    (if command-buf
-       (with-current-buffer source-buf
-         (realgud:cmdbuf-associate))
-      )))
-
-;;;###autoload
-(defun realgud:gdb (&optional opt-cmd-line no-reset)
-  "Invoke the gdb debugger and start the Emacs user interface.
-
-OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-"
-
-  (interactive)
-  (let* ((cmd-str (or opt-cmd-line (realgud:gdb-query-cmdline "gdb")))
-        (cmd-args (split-string-and-unquote cmd-str))
-        (parsed-args (realgud:gdb-parse-cmd-args cmd-args))
-        (script-args (caddr parsed-args))
-        (script-name (or (car script-args) ""))
-        (parsed-cmd-args
-           (cl-remove-if-not 'stringp (realgud:flatten parsed-args)))
-        (cmd-buf (realgud:run-process realgud:gdb-command-name
-                                      script-name parsed-cmd-args
-                                      'realgud:gdb-minibuffer-history
-                                      nil))
-        )
-    (if cmd-buf
-       (let ((process (get-buffer-process cmd-buf)))
-         (if (and process (eq 'run (process-status process)))
-             (with-current-buffer cmd-buf
-               (realgud-command "set annotate 1" nil nil nil)
-               )))
-      )
-    ))
-
-(provide-me "realgud-")
-
-;; Local Variables:
-;; byte-compile-warnings: (not cl-functions)
-;; End:
diff --git a/packages/realgud/realgud/debugger/gdb/init.el 
b/packages/realgud/realgud/debugger/gdb/init.el
deleted file mode 100644
index e2c4a80..0000000
--- a/packages/realgud/realgud/debugger/gdb/init.el
+++ /dev/null
@@ -1,145 +0,0 @@
-;; Copyright (C) 2015-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;;; gdb debugger
-
-(eval-when-compile (require 'cl-lib))
-
-(require 'load-relative)
-(require-relative-list '("../../common/regexp" "../../common/loc") "realgud-")
-
-(defvar realgud-pat-hash)
-(declare-function make-realgud-loc-pat (realgud-loc))
-
-(defvar realgud:gdb-pat-hash (make-hash-table :test 'equal)
-  "hash key is the what kind of pattern we want to match:
-backtrace, prompt, etc.  the values of a hash entry is a
-realgud-loc-pat struct")
-
-(declare-function make-realgud-loc "realgud-loc" (a b c d e f))
-
-(defconst realgud:gdb-frame-file-regexp
-  (format "\\(.+\\):%s" realgud:regexp-captured-num))
-
-;; Regular expression that describes a lldb location generally shown
-;; before a command prompt. NOTE: we assume annotate 1!
-;; For example:
-;; /src/build/ruby-2.1.5/main.c:24:454:beg:0x55555557659f
-(setf (gethash "loc" realgud:gdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp (format "^%s:%s:beg:0x\\([0-9a-f]+\\)"
-                      realgud:gdb-frame-file-regexp 
realgud:regexp-captured-num)
-       :file-group 1
-       :line-group 2
-       :char-offset-group 3))
-
-;; Regular expression that describes a gdb prompt
-;; For example:
-;;   (gdb)
-(setf (gethash "prompt" realgud:gdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp   "^(gdb) "
-       ))
-
-;; Regular expression that describes a "breakpoint set" line
-;; For example:
-;;   Breakpoint 1, main (argc=1, argv=0x7fffffffdbd8) at main.c:24
-(setf (gethash "brkpt-set" realgud:gdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp (format "^Breakpoint %s at 0x\\([0-9a-f]*\\): file \\(.+\\), 
line %s.\n"
-                      realgud:regexp-captured-num realgud:regexp-captured-num)
-       :num 1
-       :file-group 3
-       :line-group 4))
-
-;; Regular expression that describes a debugger "delete" (breakpoint)
-;; response.
-;; For example:
-;;   Deleted breakpoint 1
-;;   Deleted breakpoints 1 2 3 4
-(setf (gethash "brkpt-del" realgud:gdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^Deleted breakpoints? \\(\\([0-9]+ *\\)+\\)\n"
-       :num 1))
-
-(defconst realgud:gdb-frame-start-regexp
-  "\\(?:^\\|\n\\)")
-
-(defconst realgud:gdb-frame-num-regexp
-  (format "#%s " realgud:regexp-captured-num))
-
-;; Regular expression that describes a gdb "backtrace" command line.
-;; For example:
-;; #0  main (argc=2, argv=0xbffff564, envp=0xbffff570) at main.c:935
-;; #1  0xb7e9f4a5 in *__GI___strdup (s=0xbffff760 "/tmp/remake/remake") at 
strdup.c:42
-;; #2  0x080593ac in main (argc=2, argv=0xbffff5a4, envp=0xbffff5b0)
-;;    at main.c:952
-;; #46 0xb7f51b87 in vm_call_cfunc (th=0x804d188, reg_cfp=0xb7ba9e88, num=0,
-;;    recv=157798080, blockptr=0x0, me=0x80d12a0) at vm_insnhelper.c:410
-
-(setf (gethash "debugger-backtrace" realgud:gdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp         (concat realgud:gdb-frame-start-regexp
-                       realgud:gdb-frame-num-regexp
-                       "\\(?:.\\|\\(?:[\n] \\)\\)+[ ]+at "
-                       realgud:gdb-frame-file-regexp
-                       )
-       :num 1
-       :file-group 2
-       :line-group 3)
-      )
-
-(setf (gethash "font-lock-keywords" realgud:gdb-pat-hash)
-      '(
-       ;; #2  0x080593ac in main (argc=2, argv=0xbffff5a4, envp=0xbffff5b0)
-       ;;    at main.c:952
-       ("[ \n]+at \\(.*\\):\\([0-9]+\\)"
-        (1 realgud-file-name-face)
-        (2 realgud-line-number-face))
-
-       ;; The frame number and first type name, if present.
-       ;; E.g. =>#0  Makefile.in at /tmp/Makefile:216
-       ;;      ---^
-       ( "#\\(?:^\\|\n\\)\\([0-9]+\\)  "
-        (1 realgud-backtrace-number-face))
-       ))
-
-(setf (gethash "gdb" realgud-pat-hash) realgud:gdb-pat-hash)
-
-;;  Prefix used in variable names (e.g. short-key-mode-map) for
-;; this debugger
-
-(setf (gethash "gdb" realgud:variable-basename-hash) "realgud:gdb")
-
-(defvar realgud:gdb-command-hash (make-hash-table :test 'equal)
-  "Hash key is command name like 'continue' and the value is
-  the gdb command to use, like 'continue'")
-
-(setf (gethash "break"    realgud:gdb-command-hash) "break %X:%l")
-(setf (gethash "clear"    realgud:gdb-command-hash) "clear %X:%l")
-(setf (gethash "continue" realgud:gdb-command-hash) "continue")
-(setf (gethash "delete"   realgud:gdb-command-hash) "delete %p")
-(setf (gethash "eval"     realgud:gdb-command-hash) "print %s")
-(setf (gethash "quit"     realgud:gdb-command-hash) "quit")
-(setf (gethash "run"      realgud:gdb-command-hash) "run")
-(setf (gethash "step"     realgud:gdb-command-hash) "step %p")
-
-(setf (gethash "gdb" realgud-command-hash) realgud:gdb-command-hash)
-
-(setf (gethash "gdb" realgud-pat-hash) realgud:gdb-pat-hash)
-
-(provide-me "realgud:gdb-")
diff --git a/packages/realgud/realgud/debugger/gdb/track-mode.el 
b/packages/realgud/realgud/debugger/gdb/track-mode.el
deleted file mode 100644
index 9497657..0000000
--- a/packages/realgud/realgud/debugger/gdb/track-mode.el
+++ /dev/null
@@ -1,74 +0,0 @@
-;;; track-mode.el ---
-
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;; gdb tracking a comint or eshell buffer.
-
-(require 'load-relative)
-(require-relative-list '(
-                        "../../common/cmds"
-                        "../../common/menu"
-                        "../../common/track"
-                        "../../common/track-mode"
-                        )
-                      "realgud-")
-(require-relative-list '("core" "init") "realgud:gdb-")
-
-(realgud-track-mode-vars "realgud:gdb")
-
-(declare-function realgud-track-mode         'realgud-track-mode)
-(declare-function realgud:track-mode-hook    'realgud-track-mode)
-(declare-function realgud:track-mode-enable  'realgud-track-mode)
-(declare-function realgud-track-mode-setup   'realgud-track-mode)
-(declare-function realgud:track-set-debugger 'realgud-track-mode)
-
-(define-key realgud:gdb-track-mode-map
-  (kbd "C-c !b") 'realgud:goto-debugger-backtrace-line)
-
-(defun realgud:gdb-track-mode-hook()
-  (use-local-map realgud:gdb-track-mode-map)
-  (realgud-track-mode-setup 't)
-  (message "realgud:gdb track-mode-hook called")
-)
-
-(define-minor-mode realgud:gdb-track-mode
-  "Minor mode for tracking gdb inside a process shell via realgud.
-
-If called interactively with no prefix argument, the mode is toggled. A prefix 
argument, captured as ARG, enables the mode if the argument is positive, and 
disables it otherwise.
-
-Key bindings:
-\\{realgud:gdb-track-mode-map}
-"
-  :init-value nil
-  ;; :lighter " gdb"   ;; mode-line indicator from realgud-track is sufficient.
-  ;; The minor mode bindings.
-  :global nil
-  :group 'realgud:gdb
-  :keymap realgud:gdb-track-mode-map
-  (if realgud:gdb-track-mode
-      (progn
-       (realgud:track-set-debugger "gdb")
-        (realgud:gdb-track-mode-hook)
-        (realgud:track-mode-enable))
-    (progn
-      (setq realgud-track-mode nil)
-      ))
-)
-
-(provide-me "realgud:gdb-")
-;;; track-mode.el ends here
diff --git a/packages/realgud/realgud/debugger/gub/Makefile.am 
b/packages/realgud/realgud/debugger/gub/Makefile.am
deleted file mode 100644
index e6c68b4..0000000
--- a/packages/realgud/realgud/debugger/gub/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-include ../common.mk
-
-lisp_files = $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-EXTRA_DIST = $(lisp_files)
diff --git a/packages/realgud/realgud/debugger/gub/core.el 
b/packages/realgud/realgud/debugger/gub/core.el
deleted file mode 100644
index df444b7..0000000
--- a/packages/realgud/realgud/debugger/gub/core.el
+++ /dev/null
@@ -1,181 +0,0 @@
-;; Copyright (C) 2013-2014, 2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-(require 'load-relative)
-(require-relative-list '("../../common/track" "../../common/lang"
-                        "../../common/core") "realgud-")
-(require-relative-list '("init") "realgud:gub-")
-
-(declare-function realgud-query-cmdline      'realgud-core)
-(declare-function realgud-suggest-invocation 'realgud-core)
-(declare-function realgud-lang-mode?         'realgud-lang)
-
-;; FIXME: I think the following could be generalized and moved to
-;; realgud-... probably via a macro.
-(defvar realgud:gub-minibuffer-history nil
-  "minibuffer history list for the command `gub'.")
-
-(easy-mmode-defmap gub-minibuffer-local-map
-  '(("\C-i" . comint-dynamic-complete-filename))
-  "Keymap for minibuffer prompting of gud startup command."
-  :inherit minibuffer-local-map)
-
-;; FIXME: I think this code and the keymaps and history
-;; variable chould be generalized, perhaps via a macro.
-(defun gub-query-cmdline (&optional opt-debugger)
-  (realgud-query-cmdline
-   'gub-suggest-invocation
-   gub-minibuffer-local-map
-   'realgud:gub-minibuffer-history
-   opt-debugger))
-
-(defun gub-parse-cmd-args (orig-args)
-  "Parse command line ARGS for the name of script to debug and its args.
-
-ARGS should contain a tokenized list of the command line to run.
-
-We return the a list containing
-
-- the command processor (e.g. gub.sh) and it's arguments if any - a list of 
strings
-For example for the following input
-  \'./gub.sh --gub=\"-I\" -- ./gcd.go a b\'
-
-we might return:
-   (gub (\"-gub=-I\") (./gcd.rb a b))
-
-NOTE: the above should have each item listed in quotes.
-"
-
-  (let (
-       (args orig-args)
-       (interp-regexp ".*\\(^gub\.sh\\|tortoise\\)$")
-
-       ;; Things returned
-       (gub-name "gub.sh")
-       (gub-args '())
-       (go-prog-and-args '())
-       )
-
-    (if (not (and args))
-       ;; Got nothing
-       (list gub-name gub-args go-prog-and-args)
-      ;; else
-      ;; Strip off "gub.sh"
-      (when (string-match interp-regexp
-                          (file-name-nondirectory (car args)))
-       (setq gub-name (pop args))
-       )
-
-      ;; parse options
-      (while args
-       (let ((arg (pop args)))
-         (cond
-          ((string-match "^-[-]?gub=" arg)
-           (setq gub-args (nconc gub-args (list arg))))
-
-          ((string-match "^-run" arg)
-           (setq gub-args (nconc gub-args (list arg))))
-
-          ((string-match "^-interp=SS" arg)
-           (setq gub-args (nconc gub-args (list arg))))
-
-          ((equal arg "--")) ;; Ignore
-
-          ;; Anything else add to gub-args
-          ('t (setq go-prog-and-args (nconc go-prog-and-args (list arg))))
-          ))))
-      (list gub-name gub-args go-prog-and-args)
-    ))
-
-(defconst realgud:gub-auto-suffix-regexp
-  "\\.go$"
-  "Go file suffix"
-)
-
-(defun gub-suggest-file-priority(filename)
-  (let ((priority 2)
-       (is-not-directory)
-       )
-    (if (realgud-lang-mode? filename "go")
-       (progn
-         (if (string-match realgud:gub-auto-suffix-regexp filename)
-             (setq priority 5)
-           (setq priority 7))
-         ))
-    priority
-    )
-)
-
-;; To silence Warning: reference to free variable
-(defvar realgud:gub-command-name)
-
-(defun gub-suggest-invocation (debugger-name)
-  "Suggest a command invocation via `realgud-suggest-invocaton'"
-  (realgud-suggest-invocation (or debugger-name realgud:gub-command-name)
-                             realgud:gub-minibuffer-history
-                             "go" "\\.go$"))
-
-;; Convert a command line as would be typed normally to run a script
-;; into one that invokes an Emacs-enabled debugging session.
-;; "--debugger" in inserted as the first switch.
-
-(defun realgud:gub-massage-args (command-line)
-  (let* ((new-args (list "--debugger"))
-        (args (split-string-and-unquote command-line))
-        (program (car args))
-        (seen-e nil)
-        (shift (lambda ()
-                 (setq new-args (cons (car args) new-args))
-                 (setq args (cdr args)))))
-
-    ;; Pass all switches and -e scripts through.
-    (while (and args
-               (string-match "^-" (car args))
-               (not (equal "-" (car args)))
-               (not (equal "--" (car args))))
-      (funcall shift))
-
-    (if (or (not args)
-           (string-match "^-" (car args)))
-       (error "Can't use stdin as the script to debug"))
-    ;; This is the program name.
-    (funcall shift)
-
-    (while args
-      (funcall shift))
-
-    (nreverse new-args)
-    )
-  )
-
-(defun gub-reset ()
-  "Gub cleanup - remove debugger's internal buffers (frame,
-breakpoints, etc.)."
-  (interactive)
-  ;; (gub-breakpoint-remove-all-icons)
-  (dolist (buffer (buffer-list))
-    (when (string-match "\\*gub-[a-z]+\\*" (buffer-name buffer))
-      (let ((w (get-buffer-window buffer)))
-        (when w
-          (delete-window w)))
-      (kill-buffer buffer))))
-
-;; (defun gub-reset-keymaps()
-;;   "This unbinds the special debugger keys of the source buffers."
-;;   (interactive)
-;;   (setcdr (assq 'gub-debugger-support-minor-mode minor-mode-map-alist)
-;;       gub-debugger-support-minor-mode-map-when-deactive))
-
-
-(defun realgud:gub-customize ()
-  "Use `customize' to edit the settings of the `gub' debugger."
-  (interactive)
-  (customize-group 'realgud:gub))
-
-(provide-me "realgud:gub-")
diff --git a/packages/realgud/realgud/debugger/gub/gub.el 
b/packages/realgud/realgud/debugger/gub/gub.el
deleted file mode 100644
index 5338501..0000000
--- a/packages/realgud/realgud/debugger/gub/gub.el
+++ /dev/null
@@ -1,87 +0,0 @@
-;; Copyright (C) 2015 Free Software Foundation, Inc
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;;  `gub' Main interface to Go gub via Emacs
-(require 'load-relative)
-(require-relative-list '("../../common/helper") "realgud-")
-(require-relative-list '("../../common/track") "realgud-")
-(require-relative-list '("core" "track-mode") "realgud:gub-")
-
-(eval-when-compile (require 'cl-lib))
-
-;; This is needed, or at least the docstring part of it is needed to
-;; get the customization menu to work in Emacs 24.
-(defgroup realgud:gub nil
-  "The realgud interface to the Go SSA interpreter debugger, gub"
-  :group 'realgud
-  :version "23.4")
-
-;; -------------------------------------------------------------------
-;; User definable variables
-;;
-
-(defcustom realgud:gub-command-name
-  "tortoise -run -gub= -interp=SS --"
-  "File name for executing the Go SSA interpreter/debugger, gub, and command 
options.
-This should be an executable on your path, or an absolute file name."
-  :type 'string
-  :group 'realgud:gub)
-
-(declare-function gub-query-cmdline  'realgud-gub-core)
-(declare-function gub-parse-cmd-args 'realgud-gub-core)
-(declare-function realgud:run-process 'realgud-core)
-
-
-(defun realgud-gub-fn (&optional opt-command-line no-reset)
-  "See `realgud-gub' for details"
-
-  (let* ((cmd-str (or opt-command-line (gub-query-cmdline "gub")))
-        (cmd-args (split-string-and-unquote cmd-str))
-        (parsed-args (gub-parse-cmd-args cmd-args))
-        (gub-program (car parsed-args))
-        (gub-args (cadr parsed-args))
-        (go-prog-and-args (caddr parsed-args))
-        (script-filename (car go-prog-and-args))
-        (cmd-buf))
-    (realgud:run-process gub-program script-filename cmd-args
-                        'gub-track-mode no-reset)
-    )
-  )
-
-;;;###autoload
-(defun realgud-gub (&optional opt-command-line no-reset)
-  "Invoke the Go SSA debugger, gub and start the Emacs user interface.
-
-String COMMAND-LINE specifies how to run gub.
-
-Normally command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset."
-
-
-  (interactive)
-  (realgud-gub-fn opt-command-line no-reset)
-  )
-
-;;;###autoload
-(defalias 'gub 'realgud-gub)
-
-(provide-me "realgud-")
-;;; gub.el ends here
diff --git a/packages/realgud/realgud/debugger/gub/init.el 
b/packages/realgud/realgud/debugger/gub/init.el
deleted file mode 100644
index f244267..0000000
--- a/packages/realgud/realgud/debugger/gub/init.el
+++ /dev/null
@@ -1,206 +0,0 @@
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;; Regular expressions for Go SSA debugger: gub
-
-(eval-when-compile (require 'cl-lib))   ;For setf.
-
-(require 'load-relative)
-(require-relative-list '("../../common/regexp"
-                        "../../common/loc"
-                        "../../common/init")
-                      "realgud-")
-
-(defvar realgud-pat-hash)
-(declare-function make-realgud-loc-pat (realgud-loc))
-
-(defvar realgud:gub-pat-hash (make-hash-table :test 'equal)
-  "Hash key is the what kind of pattern we want to match:
-backtrace, prompt, etc.  The values of a hash entry is a
-realgud-loc-pat struct")
-
-;; Regular expression that describes a gub location generally shown
-;; before a command prompt.
-;; For example:
-;; interp/testdata/square.go:16:2-17
-(setf (gethash "loc" realgud:gub-pat-hash)
-      (make-realgud-loc-pat
-       :regexp
-       
"\\(?:^\\|\n\\)\\(\\(?:[a-zA-Z]:\\)?[a-zA-Z0-9_/.\\\\][-a-zA-Z0-9_/.\\\\ 
]*\\.go\\):\\([0-9]+\\)"
-       :file-group 1
-       :line-group 2))
-
-;; Regular expression that describes a Go backtrace line.
-;; For example:
-;; ssa-interp/interp/interp.go:202 (0x506c84)
-;;     visitInstr: *fr.get(instr.Addr).(*Value) = copyVal(fr.get(instr.Val))
-;; sa-interp/interp/interp.go:604 (0x50b5b1)
-;;     runFrame: switch visitInstr(fr, instr) {
-(setf (gethash "lang-backtrace" realgud:gub-pat-hash)
-  (make-realgud-loc-pat
-   :regexp
-   
"\\(?:^\\|\n\\)\\(\\(?:[a-zA-Z]:\\)?[a-zA-Z0-9_/.\\\\][-a-zA-Z0-9_/.\\\\]*\\.go\\):\\([0-9]+\\)"
-   :file-group 1
-   :line-group 2))
-
-
-;; Regular expression that describes a gub location generally shown
-;; before a command prompt.
-;; For example:
-;;   gub[1]:
-;;   gub[1@3]:
-(setf (gethash "prompt" realgud:gub-pat-hash)
-      (make-realgud-loc-pat
-       :regexp  (format  "^gub\\[%s\\(?:@%s\\)?\\]: "
-                        realgud:regexp-captured-num
-                        realgud:regexp-captured-num)
-       :num 1
-       ))
-
-;;  Regular expression that describes a "breakpoint set" line
-(setf (gethash "brkpt-set" realgud:gub-pat-hash)
-      (make-realgud-loc-pat
-       :regexp (format
-               "^Breakpoint %s set\\(?:in function \\) in file 
\\([a-zA-Z0-9_/.\\\\][-a-zA-Z0-9_/.\\\\ ]*\\.go\\) line %s, column %s"
-               realgud:regexp-captured-num realgud:regexp-captured-num
-               realgud:regexp-captured-num)
-       :num 1
-       :file-group 2
-       :line-group 3
-       :char-offset-group 4))
-
-;; Regular expression that describes a debugger "delete" (breakpoint) response.
-;; For example:
-;;   Deleted breakpoint 1.
-(setf (gethash "brkpt-del" realgud:gub-pat-hash)
-      (make-realgud-loc-pat
-       :regexp (format
-               "^Deleted breakpoint %s\n"
-               realgud:regexp-captured-num)
-       :num 1))
-
-;; Regular expression describes general location. In contrast to loc
-;; which triggers automatically, we bind this to a key like C-c !s
-;; For example:
-;;               interp/testdata/square.go:16:2-17
-;  ^^^^^^ spaces
-(setf (gethash "general-location" realgud:gub-pat-hash)
-      (make-realgud-loc-pat
-       :regexp
-       (format
-       "\\(?:^\\|\n\\)[ 
\t]*\\(\\(?:[a-zA-Z]:\\)?[a-zA-Z0-9_/.\\\\][-a-zA-Z0-9_/.\\\\ ]*\\.go\\):%s" 
realgud:regexp-captured-num)
-       :file-group 1
-       :line-group 2))
-
-(defconst realgud:gub-selected-frame-arrow "=>"
-"String that describes which frame is selected in a debugger
-backtrace listing.")
-(defconst realgud:gub-frame-arrow (format "\\(%s\\|  \\)"
-                                         realgud:gub-selected-frame-arrow))
-(defconst realgud:gub-frame-num-regexp
-  (format " #%s " realgud:regexp-captured-num))
-
-(defconst realgud:gub-frame-file-regexp
-  (format " at \\(.*\\):%s" realgud:regexp-captured-num))
-
-
-;; Regular expression that describes a debugger "backtrace" command line.
-;; For example:
-;; => #0 square(n)
-;;    #1 main()
-(setf (gethash "debugger-backtrace" realgud:gub-pat-hash)
-      (make-realgud-loc-pat
-       :regexp         (concat "^"
-                       realgud:gub-frame-arrow
-                       realgud:gub-frame-num-regexp
-                       "\\(.*\\)"
-                       realgud:gub-frame-file-regexp
-                       )
-       :num 2
-       :file-group 4
-       :line-group 5)
-      )
-
-(setf (gethash "selected-frame-indicator" realgud:gub-pat-hash)
-      realgud:gub-selected-frame-arrow)
-
-;; Regular expression that describes a Go backtrace line
-;; For example:
-;;    /usr/local/go/src/pkg/runtime/panic.c:482 (0x805c956)
-;;    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-^^^-----------
-(setf (gethash "lang-backtrace" realgud:gub-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^\\(/.+\\):\\([0-9]+\\) \\((0x[0-9a-f]+)\\)?$"
-       :file-group 1
-       :line-group 2))
-
-;; Regular expression that describes a Go runtime panic
-;; For example:
-;;     /tmp/github.com/rocky/ssa-interp/eval/selectorexpr.go:18 +0x9f
-;;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-^^------
-(setf (gethash "panic-backtrace" realgud:gub-pat-hash)
-      (make-realgud-loc-pat
-       :regexp (format "^[ \t]*\\(/.+\\):%s \\(+0x[0-9a-f]+\\)?$"
-                      realgud:regexp-captured-num)
-       :file-group 1
-       :line-group 2))
-
-;; Regular expression for a termination message.
-(setf (gethash "termination" realgud:gub-pat-hash)
-       "^gub: That's all, folks...\n")
-
-(setf (gethash "font-lock-keywords" realgud:gub-pat-hash)
-      '(
-       ;; File name and line number
-       ;; E.g. =>#0  Makefile.in at /tmp/Makefile:216
-       ;;                        ---^^^^^^^^^^^^^-^^^
-       (" at \\(.*\\):\\([0-9]+\\)"
-        (1 realgud-file-name-face)
-        (2 realgud-line-number-face))
-
-       ;; The frame number and first type name, if present.
-       ;; E.g. =>#0  Makefile.in at /tmp/Makefile:216
-       ;;      ---^
-       ("#\\([0-9]+\\)  "
-        (1 realgud-backtrace-number-face))
-       ))
-
-(setf (gethash "gub" realgud-pat-hash) realgud:gub-pat-hash)
-
-;;  Prefix used in variable names (e.g. short-key-mode-map) for
-;; this debugger
-
-(setf (gethash "tortoise" realgud:variable-basename-hash) "realgud:gub")
-
-(defvar realgud:gub-command-hash (make-hash-table :test 'equal)
-  "Hash key is command name like 'quit' and the value is
-  the gub command to use, like 'q'")
-
-(setf (gethash "backtrace" realgud:gub-command-hash) "backtrace")
-(setf (gethash "break"     realgud:gub-command-hash) "break %l")
-(setf (gethash "continue"  realgud:gub-command-hash) "continue")
-;;(setf (gethash "eval"      realgud:gub-command-hash) "x %s")
-(setf (gethash "quit"      realgud:gub-command-hash) "quit")
-(setf (gethash "restart"   realgud:gub-command-hash) "R")
-(setf (gethash "run"       realgud:gub-command-hash) "R")
-(setf (gethash "step"      realgud:gub-command-hash) "step")
-(setf (gethash "next"      realgud:gub-command-hash) "next")
-(setf (gethash "until"     realgud:gub-command-hash) "until %l")
-(setf (gethash "gub" realgud-command-hash) realgud:gub-command-hash)
-
-
-(provide-me "realgud:gub-")
diff --git a/packages/realgud/realgud/debugger/gub/track-mode.el 
b/packages/realgud/realgud/debugger/gub/track-mode.el
deleted file mode 100644
index b48bb0c..0000000
--- a/packages/realgud/realgud/debugger/gub/track-mode.el
+++ /dev/null
@@ -1,85 +0,0 @@
-;; Copyright (C) 2013-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;;; Golang SSA gub tracking a comint buffer.
-
-(require 'load-relative)
-(require-relative-list '(
-                        "../../common/cmds"
-                        "../../common/menu"
-                        "../../common/track"
-                        "../../common/track-mode"
-                        )
-                      "realgud-")
-(require-relative-list '("core" "init") "realgud:gub-")
-
-(realgud-track-mode-vars "gub")
-
-(declare-function realgud-goto-line-for-pt 'realgud-track-mode)
-(declare-function realgud-track-mode 'realgud-track-mode)
-(declare-function realgud:track-set-debugger 'realgud-track-mode)
-(declare-function realgud-track-mode-setup 'realgud-track-mode)
-
-(defun realgud:gub-goto-location (pt)
-  "Display the location mentioned in a location
-described by PT."
-  (interactive "d")
-  (realgud-goto-line-for-pt pt "general-location"))
-
-
-(defun realgud:gub-goto-panic-location (pt)
-  "Display the location mentioned in a location
-described by PT."
-  (interactive "d")
-  (realgud-goto-line-for-pt pt "panic-backtrace"))
-
-
-(define-key gub-track-mode-map
-  (kbd "C-c !!") 'realgud:goto-lang-backtrace-line)
-(define-key gub-track-mode-map
-  (kbd "C-c !b") 'realgud:goto-debugger-backtrace-line)
-(define-key gub-track-mode-map
-  (kbd "C-c !s") 'realgud:gub-goto-location)
-(define-key gub-track-mode-map
-  (kbd "C-c !p") 'realgud:gub-goto-panic-location)
-
-(defun gub-track-mode-hook()
-  (if gub-track-mode
-      (progn
-       (use-local-map gub-track-mode-map)
-       (message "using gub mode map")
-       )
-    (message "gub track-mode-hook disable called"))
-)
-
-(define-minor-mode gub-track-mode
-  "Minor mode for tracking gub source locations inside a process shell via 
realgud. gub is a Go language debugger.
-
-If called interactively with no prefix argument, the mode is toggled. A prefix 
argument, captured as ARG, enables the mode if the argument is positive, and 
disables it otherwise.
-
-\\{gub-track-mode-map}
-"
-  :init-value nil
-  ;; :lighter " gub"   ;; mode-line indicator from realgud-track is sufficient.
-  ;; The minor mode bindings.
-  :global nil
-  :group 'realgud:gub
-  :keymap gub-track-mode-map
-
-  (realgud:track-set-debugger "gub")
-  (if gub-track-mode
-      (progn
-       (realgud-track-mode-setup 't)
-        (gub-track-mode-hook))
-    (progn
-      (setq realgud-track-mode nil)
-      ))
-)
-
-(provide-me "realgud:gub-")
diff --git a/packages/realgud/realgud/debugger/ipdb/Makefile.am 
b/packages/realgud/realgud/debugger/ipdb/Makefile.am
deleted file mode 100644
index e6c68b4..0000000
--- a/packages/realgud/realgud/debugger/ipdb/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-include ../common.mk
-
-lisp_files = $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-EXTRA_DIST = $(lisp_files)
diff --git a/packages/realgud/realgud/debugger/ipdb/core.el 
b/packages/realgud/realgud/debugger/ipdb/core.el
deleted file mode 100644
index 12939f2..0000000
--- a/packages/realgud/realgud/debugger/ipdb/core.el
+++ /dev/null
@@ -1,255 +0,0 @@
-;; Copyright (C) 2016-2017 Free Software Foundation, Inc
-
-;; Author: Sean Farley <address@hidden>, Rocky Bernstein (address@hidden)
-
-;; 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.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.or/licenses/>.
-
-
-(require 'comint)
-(require 'load-relative)
-(require-relative-list '("../../common/track"
-                        "../../common/core"
-                        "../../common/lang")
-                      "realgud-")
-(require-relative-list '("init") "realgud:ipdb-")
-
-
-(declare-function realgud-lang-mode? 'realgud-lang)
-(declare-function realgud-parse-command-arg 'realgud-core)
-(declare-function realgud-query-cmdline 'realgud-core)
-(declare-function realgud-suggest-invocation 'realgud-core)
-(declare-function realgud-get-cmdbuf   'realgud-buffer-helper)
-
-;; FIXME: I think the following could be generalized and moved to
-;; realgud-... probably via a macro.
-(defvar realgud:ipdb-minibuffer-history nil
-  "minibuffer history list for the command `ipdb'.")
-
-(defvar realgud:ipdb-remote-minibuffer-history nil
-  "minibuffer history list for the command `ipdb-remote'.")
-
-(easy-mmode-defmap ipdb-minibuffer-local-map
-  '(("\C-i" . comint-dynamic-complete-filename))
-  "Keymap for minibuffer prompting of debugger startup command."
-  :inherit minibuffer-local-map)
-
-;; FIXME: I think this code and the keymaps and history
-;; variable chould be generalized, perhaps via a macro.
-(defun ipdb-query-cmdline (&optional opt-debugger)
-  (realgud-query-cmdline
-   'ipdb-suggest-invocation
-   ipdb-minibuffer-local-map
-   'realgud:ipdb-minibuffer-history
-   opt-debugger))
-
-;; FIXME: I think this code and the keymaps and history
-;; variable chould be generalized, perhaps via a macro.
-(defun ipdb-remote-query-cmdline ()
-  (realgud-query-cmdline
-   'ipdb-suggest-invocation
-   ipdb-minibuffer-local-map
-   'realgud:ipdb-remote-minibuffer-history
-   "telnet"))
-
-(defun ipdb-parse-cmd-args (orig-args)
-  "Parse command line ORIG-ARGS for the annotate level and name of script to 
debug.
-
-ORIG-ARGS should contain a tokenized list of the command line to run.
-
-We return the a list containing:
-* the command processor (e.g. python) and it's arguments if any - a list of 
strings
-* the name of the debugger given (e.g. ipdb) and its arguments - a list of 
strings
-* the script name and its arguments - list of strings
-* whether the annotate or emacs option was given ('-A', '--annotate' or 
'--emacs) - a boolean
-
-For example for the following input:
-  (map 'list 'symbol-name
-   '(python2.6 -O -Qold ./gcd.py a b))
-
-we might return:
-   ((\"python2.6\" \"-O\" \"-Qold\") (\"ipdb\") (\"/tmp/gcd.py\" \"a\" \"b\") 
nil)
-
-Note that the script name path has been expanded via `expand-file-name'.
-"
-
-  ;; Parse the following kind of pattern:
-  ;;  [python python-options] ipdb ipdb-options script-name script-options
-  (let (
-       (args orig-args)
-       (pair)          ;; temp return from
-       (python-opt-two-args '())
-       ;; Python doesn't have mandatory 2-arg options in our sense,
-       ;; since the two args can be run together, e.g. "-C/tmp" or "-C /tmp"
-       ;;
-       (python-two-args '())
-       ;; ipdb doesn't have any arguments
-       (ipdb-two-args '())
-       (ipdb-opt-two-args '())
-       (interp-regexp
-        (if (member system-type (list 'windows-nt 'cygwin 'msdos))
-            "^python[-0-9.]*\\(.exe\\)?$"
-          "^python[-0-9.]*$"))
-
-       ;; Things returned
-       (annotate-p nil)
-       (debugger-args '())
-       (debugger-name nil)
-       (interpreter-args '())
-       (script-args '())
-       (script-name nil)
-       )
-
-    (if (not (and args))
-       ;; Got nothing: return '(nil, nil)
-       (list interpreter-args debugger-args script-args annotate-p)
-      ;; else
-      ;; Strip off optional "python" or "python182" etc.
-      (when (string-match interp-regexp
-                         (file-name-sans-extension
-                          (file-name-nondirectory (car args))))
-       (setq interpreter-args (list (pop args)))
-
-       ;; Strip off Python-specific options
-       (while (and args
-                   (string-match "^-" (car args)))
-         (setq pair (realgud-parse-command-arg
-                     args python-two-args python-opt-two-args))
-         (nconc interpreter-args (car pair))
-         (setq args (cadr pair))))
-
-      ;; Remove "ipdb" from "ipdb --ipdb-options script
-      ;; --script-options"
-      (setq debugger-name (file-name-sans-extension
-                          (file-name-nondirectory (car args))))
-      (unless (string-match "^\\(ipdb\\|cli.py\\)$" debugger-name)
-       (message
-        "Expecting debugger name `%s' to be `ipdb' or `cli.py'"
-        debugger-name))
-      (setq debugger-args (list (pop args)))
-
-      ;; Skip to the first non-option argument.
-      (while (and args (not script-name))
-       (let ((arg (car args)))
-         (cond
-          ;; Options with arguments.
-          ((string-match "^-" arg)
-           (setq pair (realgud-parse-command-arg
-                       args ipdb-two-args ipdb-opt-two-args))
-           (nconc debugger-args (car pair))
-           (setq args (cadr pair)))
-          ;; Anything else must be the script to debug.
-          (t (setq script-name (expand-file-name arg))
-             (setq script-args (cons script-name (cdr args))))
-          )))
-      (list interpreter-args debugger-args script-args annotate-p))))
-
-(defun ipdb-parse-remote-cmd-args (orig-args)
-    "Parse command line ORIG-ARGS
-ORIG-ARGS should contain a tokenized list of the command line to run.
-
-We return the a list containing:
-* the command processor (e.g. python) and it's arguments if any - a list of 
strings
-* the name of the debugger given (e.g. ipdb) and its arguments - a list of 
strings
-* the script name and its arguments - list of strings
-* nil
-
-For example for the following input:
-  (map 'list 'symbol-name
-   '(telnet localhost 6900))
-
-we might return:
-   ((\"telnet\" \"localhost\" \"6900\") nil nil nil)
-
-Note that the script name path has been expanded via `expand-file-name'.
-"
-    (list orig-args '("ipdb") nil nil nil)
-  )
-
-  ;; To silence Warning: reference to free variable
-(defvar realgud:ipdb-command-name)
-
-(defun ipdb-remote-suggest-invocation (debugger-name)
-  "Suggest an ipdb command invocation via `realgud-suggest-invocaton'"
-  "telnet 127.0.0.1 4000")
-
-(defun ipdb-suggest-invocation (debugger-name)
-  "Suggest a ipdb command invocation via `realgud-suggest-invocaton'"
-  (realgud-suggest-invocation (or debugger-name realgud:ipdb-command-name)
-                             realgud:ipdb-minibuffer-history
-                             "python" "\\.py"))
-
-(defun ipdb-reset ()
-  "Ipdb cleanup - remove debugger's internal buffers (frame,
-breakpoints, etc.)."
-  (interactive)
-  ;; (ipdb-breakpoint-remove-all-icons)
-  (dolist (buffer (buffer-list))
-    (when (string-match "\\*ipdb-[a-z]+\\*" (buffer-name buffer))
-      (let ((w (get-buffer-window buffer)))
-        (when w
-          (delete-window w)))
-      (kill-buffer buffer))))
-
-;; (defun ipdb-reset-keymaps()
-;;   "This unbinds the special debugger keys of the source buffers."
-;;   (interactive)
-;;   (setcdr (assq 'ipdb-debugger-support-minor-mode minor-mode-map-alist)
-;;       ipdb-debugger-support-minor-mode-map-when-deactive))
-
-(defconst realgud:ipdb-complete-script
-  (concat
-   "from IPython import get_ipython;"
-   "comp = '''%s''';"
-   "prefix, candidates = get_ipython().Completer.complete(line_buffer = comp);"
-   "print(';'.join([prefix] + candidates))"))
-
-(defun realgud:ipdb-backend-complete ()
-  "Send a command to the ipdb buffer and parse the output.
-
-The idea here is to rely on the
-`comint-redirect-send-command-to-process' function to send a
-python command `realgud:ipdb-complete-script' that will return
-the completions for the given input."
-  (interactive)
-  (let ((buffer (current-buffer))
-        (cmdbuf (realgud-get-cmdbuf))
-        (process (get-buffer-process (current-buffer)))
-        (start-pos (save-excursion (comint-goto-process-mark) (point)))
-        (end-pos (point)))
-
-    ;; get the input string
-    (when (> end-pos start-pos)
-      (let* ((input-str (buffer-substring-no-properties start-pos end-pos))
-             (command-str (format realgud:ipdb-complete-script input-str))
-             (output-str (with-temp-buffer
-                           (comint-redirect-send-command-to-process
-                            command-str (current-buffer) process nil t)
-                           ;; Wait for the process to complete
-                           (with-current-buffer (process-buffer process)
-                             (while (null comint-redirect-completed)
-                               (accept-process-output nil 0 5))) ;; wait 5ms
-                           (buffer-substring (point-min) (1- (point-max)))))
-             (output-values (split-string output-str ";"))
-             (prefix (car output-values)))
-        (list (- end-pos (length prefix)) end-pos (cdr output-values))))))
-
-(defun realgud:ipdb-completion-at-point ()
-  (let ((ipdb (realgud:ipdb-backend-complete)))
-    (when ipdb
-      (list (nth 0 ipdb)
-            (nth 1 ipdb)
-            (nth 2 ipdb)
-            :exclusive 'yes))))
-
-(defun realgud:ipdb-customize ()
-  "Use `customize' to edit the settings of the `ipdb' debugger."
-  (interactive)
-  (customize-group 'realgud:ipdb))
-
-(provide-me "realgud:ipdb-")
diff --git a/packages/realgud/realgud/debugger/ipdb/init.el 
b/packages/realgud/realgud/debugger/ipdb/init.el
deleted file mode 100644
index cdcfce2..0000000
--- a/packages/realgud/realgud/debugger/ipdb/init.el
+++ /dev/null
@@ -1,136 +0,0 @@
-;; Copyright (C) 2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-;; Author: Sean Farley <address@hidden>
-
-;; 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/>.
-;; Stock Python debugger ipdb
-
-(eval-when-compile (require 'cl-lib))   ;For setf.
-
-(require 'load-relative)
-(require-relative-list '("../../common/regexp"
-                        "../../common/loc"
-                        "../../common/init")
-                      "realgud-")
-(require-relative-list '("../../lang/python") "realgud-lang-")
-
-(defvar realgud-pat-hash)
-(declare-function make-realgud-loc-pat (realgud-loc))
-
-(defvar realgud:ipdb-pat-hash (make-hash-table :test 'equal)
-  "Hash key is the what kind of pattern we want to match:
-backtrace, prompt, etc.  The values of a hash entry is a
-realgud-loc-pat struct")
-
-(declare-function make-realgud-loc "realgud-loc" (a b c d e f))
-
-;; realgud-loc-pat that describes a ipdb location generally shown
-;; before a command prompt.
-;;
-;; Program-location lines look like this:
-;;   > /usr/bin/zonetab2pot.py(15)<module>()
-;; or MS Windows:
-;;   > c:\\mydirectory\\gcd.py(10)<module>
-(setf (gethash "loc" realgud:ipdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^> \\(\\(?:[a-zA-Z]:\\)?[-a-zA-Z0-9_/.\\\\ ]+\\)(\\([0-9]+\\))"
-       :file-group 1
-       :line-group 2))
-
-(setf (gethash "prompt" realgud:ipdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp   "^ipdb[>] "
-       ))
-
-;;  realgud-loc-pat that describes a Python backtrace line.
-(setf (gethash "lang-backtrace" realgud:ipdb-pat-hash)
-      realgud-python-backtrace-loc-pat)
-
-;;  realgud-loc-pat that describes location in a pytest error
-(setf (gethash "pytest-error" realgud:ipdb-pat-hash)
-      realgud-pytest-error-loc-pat)
-
-;;  Regular expression that describes location in a flake8 message
-(setf (gethash "flake8-msg" realgud:ipdb-pat-hash)
-      realgud-flake8-msg-loc-pat)
-
-;;  realgud-loc-pat that describes a "breakpoint set" line. For example:
-;;     Breakpoint 1 at /usr/bin/ipdb:7
-(setf (gethash "brkpt-set" realgud:ipdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^Breakpoint \\([0-9]+\\) at[ 
\t\n]+\\(.+\\):\\([0-9]+\\)\\(\n\\|$\\)"
-       :num 1
-       :file-group 2
-       :line-group 3))
-
-;; realgud-loc-pat that describes a "delete breakpoint" line
-;; Python 3 includes a file name and line number; Python 2 doesn't
-(setf (gethash "brkpt-del" realgud:ipdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^Deleted breakpoint \\([0-9]+\\)"
-       :num 1))
-
-(setf (gethash "font-lock-keywords" realgud:ipdb-pat-hash)
-      '(
-       ;; The frame number and first type name, if present.
-       ("^\\(->\\|##\\)\\([0-9]+\\) \\(<module>\\)? 
*\\([a-zA-Z_][a-zA-Z0-9_]*\\)(\\(.+\\))?"
-        (2 realgud-backtrace-number-face)
-        (4 font-lock-function-name-face nil t))     ; t means optional.
-
-       ;; Parameter sequence, E.g. gcd(a=3, b=5)
-       ;;                             ^^^^^^^^^
-       ("(\\(.+\\))"
-        (1 font-lock-variable-name-face))
-
-       ;; File name. E.g  file '/test/gcd.py'
-       ;;                 ------^^^^^^^^^^^^-
-       ("[ \t]+file '\\([^ ]+*\\)'"
-        (1 realgud-file-name-face))
-
-       ;; Line number. E.g. at line 28
-        ;;                  ---------^^
-       ("[ \t]+at line \\([0-9]+\\)$"
-        (1 realgud-line-number-face))
-
-       ;; Function name.
-       ("\\<\\([a-zA-Z_][a-zA-Z0-9_]*\\)\\.\\([a-zA-Z_][a-zA-Z0-9_]*\\)"
-        (1 font-lock-type-face)
-        (2 font-lock-function-name-face))
-       ;; (ipdb-frames-match-current-line
-       ;;  (0 ipdb-frames-current-frame-face append))
-       ))
-
-(setf (gethash "ipdb" realgud-pat-hash) realgud:ipdb-pat-hash)
-
-(defvar realgud:ipdb-command-hash (make-hash-table :test 'equal)
-  "Hash key is command name like 'finish' and the value is
-the ipdb command to use, like 'return'")
-
-(setf (gethash "ipdb" realgud-command-hash) realgud:ipdb-command-hash)
-
-;; Mappings between ipdb-specific names and GUD names
-(setf (gethash "finish" realgud:ipdb-command-hash) "return")
-(setf (gethash "kill" realgud:ipdb-command-hash) "quit")
-(setf (gethash "backtrace" realgud:ipdb-command-hash) "where")
-;; Clear in Python does both the usual “delete” and “clear”
-(setf (gethash "delete" realgud:ipdb-command-hash) "clear %p")
-(setf (gethash "clear" realgud:ipdb-command-hash) "clear %X:%l")
-(setf (gethash "eval" realgud:ipdb-command-hash) "pp %s")
-
-;; Unsupported features:
-(setf (gethash "shell" realgud:ipdb-command-hash) "*not-implemented*")
-(setf (gethash "frame" realgud:ipdb-command-hash) "*not-implemented*")
-
-(provide-me "realgud:ipdb-")
diff --git a/packages/realgud/realgud/debugger/ipdb/ipdb.el 
b/packages/realgud/realgud/debugger/ipdb/ipdb.el
deleted file mode 100644
index 23ba2ad..0000000
--- a/packages/realgud/realgud/debugger/ipdb/ipdb.el
+++ /dev/null
@@ -1,123 +0,0 @@
-;; Copyright (C) 2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-;; Author: Sean Farley <address@hidden>
-
-;; 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/>.
-
-;;  `ipdb' Main interface to ipdb via Emacs
-(require 'load-relative)
-(require-relative-list '("core" "track-mode") "realgud:ipdb-")
-(require-relative-list '("../../common/run")  "realgud:")
-(require-relative-list '("core" "track-mode") "realgud:ipdb-")
-
-;; This is needed, or at least the docstring part of it is needed to
-;; get the customization menu to work in Emacs 24.
-(defgroup realgud:ipdb nil
-  "The realgud interface to the Python ipdb debugger"
-  :group 'realgud
-  :version "24.3")
-
-;; -------------------------------------------------------------------
-;; User-definable variables
-;;
-
-(defcustom realgud:ipdb-command-name
-  "ipdb"
-  "File name for executing the stock Python debugger and command options.
-This should be an executable on your path, or an absolute file name."
-  :type 'string
-  :group 'realgud:ipdb)
-;; -------------------------------------------------------------------
-;; The end.
-;;
-
-(declare-function ipdb-track-mode       'realgud:ipdb-track)
-(declare-function ipdb-query-cmdline    'realgud:ipdb-core)
-(declare-function ipdb-parse-cmd-args   'realgud:ipdb-core)
-(declare-function realgud:ipdb-completion-at-point 'realgud:ipdb-core)
-(declare-function realgud:run-debugger 'realgud:run)
-
-;;;###autoload
-(defun realgud:ipdb (&optional opt-cmd-line no-reset)
-  "Invoke the ipdb Python debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE specifies how to run ipdb. You will be prompted
-for a command line is one isn't supplied.
-
-OPT-COMMAND-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `ipdb-parse-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-"
-  (interactive)
-  (let ((cmd-buf (realgud:run-debugger "ipdb" 'ipdb-query-cmdline
-                                       'ipdb-parse-cmd-args
-                                       'realgud:ipdb-minibuffer-history
-                                       opt-cmd-line no-reset))
-        )
-    (add-hook 'completion-at-point-functions
-              'realgud:ipdb-completion-at-point nil t)
-    (with-current-buffer cmd-buf
-      (add-hook 'completion-at-point-functions
-               'realgud:ipdb-completion-at-point nil t)
-      )
-    cmd-buf)
-  )
-
-
-;;;###autoload
-(defun realgud:ipdb-remote (&optional opt-cmd-line no-reset)
-  "Invoke the ipdb Python debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE specifies how to run ipdb. You will be prompted
-for a command line is one isn't supplied.
-
-OPT-COMMAND-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `ipdb-parse-remote-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-"
-  (interactive)
-  (let ((cmd-buf (realgud:run-debugger "ipdb" 'ipdb-remote-query-cmdline
-                                       'ipdb-parse-remote-cmd-args
-                                       'realgud:ipdb-remote-minibuffer-history
-                                       opt-cmd-line no-reset "remote-ipdb"))
-        )
-    (add-hook 'completion-at-point-functions
-              'realgud:ipdb-completion-at-point nil t)
-    cmd-buf)
-  )
-
-
-;;;###autoload
-(defalias 'ipdb 'realgud:ipdb)
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/debugger/ipdb/track-mode.el 
b/packages/realgud/realgud/debugger/ipdb/track-mode.el
deleted file mode 100644
index b723a07..0000000
--- a/packages/realgud/realgud/debugger/ipdb/track-mode.el
+++ /dev/null
@@ -1,77 +0,0 @@
-;; Copyright (C) 2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-;; Author: Sean Farley <address@hidden>
-
-;; 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/>.
-;; Python "ipdb" Debugger tracking a comint buffer.
-
-(require 'load-relative)
-(require-relative-list '(
-                         "../../common/cmds"
-                         "../../common/menu"
-                         "../../common/track"
-                         "../../common/track-mode"
-                         )
-                       "realgud-")
-(require-relative-list '("core" "init") "realgud:ipdb-")
-
-(realgud-track-mode-vars "ipdb")
-
-(declare-function realgud-track-mode 'realgud-track-mode)
-(declare-function realgud-track-mode-setup 'realgud-track-mode)
-(declare-function realgud:track-set-debugger 'realgud-track-mode)
-(declare-function realgud-python-populate-command-keys 'realgud-lang-python)
-(declare-function realgud:ipdb-completion-at-point 'realgud:ipdb-core)
-
-(realgud-python-populate-command-keys ipdb-track-mode-map)
-
-(defun ipdb-track-mode-hook()
-  (if ipdb-track-mode
-      (progn
-        (use-local-map ipdb-track-mode-map)
-        (add-hook 'completion-at-point-functions
-                  'realgud:ipdb-completion-at-point nil t)
-        (message "using ipdb mode map")
-        )
-    (message "ipdb track-mode-hook disable called")
-    )
-)
-
-(define-minor-mode ipdb-track-mode
-  "Minor mode for tracking ipdb source locations inside a process shell via 
realgud. ipdb is a Python debugger based on ipython.
-
-If called interactively with no prefix argument, the mode is toggled. A prefix 
argument, captured as ARG, enables the mode if the argument is positive, and 
disables it otherwise.
-
-a process shell.
-
-\\{ipdb-track-mode-map}
-"
-  :init-value nil
-  ;; :lighter " ipdb"   ;; mode-line indicator from realgud-track is 
sufficient.
-  ;; The minor mode bindings.
-  :global nil
-  :group 'realgud:ipdb
-  :keymap ipdb-track-mode-map
-  (realgud:track-set-debugger "ipdb")
-  (if ipdb-track-mode
-      (progn
-       (realgud-track-mode-setup 't)
-        (ipdb-track-mode-hook))
-    (progn
-      (setq realgud-track-mode nil)
-      ))
-)
-
-(provide-me "realgud:ipdb-")
diff --git a/packages/realgud/realgud/debugger/jdb/Makefile.am 
b/packages/realgud/realgud/debugger/jdb/Makefile.am
deleted file mode 100644
index 2c88842..0000000
--- a/packages/realgud/realgud/debugger/jdb/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-include $(srcdir)/../common.mk
-
-lisp_files = $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-EXTRA_DIST = $(lisp_files)
diff --git a/packages/realgud/realgud/debugger/jdb/README 
b/packages/realgud/realgud/debugger/jdb/README
deleted file mode 100644
index d37044a..0000000
--- a/packages/realgud/realgud/debugger/jdb/README
+++ /dev/null
@@ -1,2 +0,0 @@
-Supporting JDB is going to be a mess.
-Consider using something else. Eclipse anyone?
diff --git a/packages/realgud/realgud/debugger/jdb/backtrack-mode.el 
b/packages/realgud/realgud/debugger/jdb/backtrack-mode.el
deleted file mode 100644
index 1454edc..0000000
--- a/packages/realgud/realgud/debugger/jdb/backtrack-mode.el
+++ /dev/null
@@ -1,78 +0,0 @@
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-;; Mode for parsing various kinds of backtraces found in Java
-
-(require 'load-relative)
-(require-relative-list '(
-                        "../../common/cmds"
-                        "../../common/menu"
-                        "../../common/track-mode"
-                        "../../common/backtrack-mode"
-                        )
-                      "realgud-")
-(require-relative-list '("core" "init") "realgud:jdb-")
-(require-relative-list '("../../lang/ruby") "realgud-lang-")
-
-(realgud-backtrack-mode-vars "jdb")
-(set-keymap-parent jdb-backtrack-mode-map realgud-backtrack-mode-map)
-
-(declare-function realgud-backtrack-mode         
'realgud-common-backtrack-mode)
-(declare-function realgud-backtrack-set-debugger 
'realgud-common-backtrack-mode)
-(declare-function realgud-goto-line-for-pt       
'realgud-common-backtrack-mode)
-(declare-function realgud:ruby-populate-command-keys 'realgud-lang-ruby)
-
-(defun realgud:jdb-goto-control-frame-line (pt)
-  "Display the location mentioned by a control-frame line
-described by PT."
-  (interactive "d")
-  (realgud-goto-line-for-pt pt "control-frame"))
-
-(realgud:ruby-populate-command-keys jdb-backtrack-mode-map)
-(define-key jdb-backtrack-mode-map
-  (kbd "C-c !c") 'realgud:jdb-goto-control-frame-line)
-
-(define-minor-mode jdb-backtrack-mode
-  "Minor mode for tracking ruby debugging inside a file which may not have 
process shell.
-
-\\{jdb-backtrack-mode-map}"
-  :init-value nil
-  ;; :lighter " jdb"   ;; mode-line indicator from realgud-track is sufficient.
-  ;; The minor mode bindings.
-  :global nil
-  :group 'realgud:jdb
-  :keymap jdb-backtrack-mode-map
-
-  (realgud-backtrack-set-debugger "jdb")
-  (if jdb-backtrack-mode
-      (progn
-       (realgud-backtrack-mode 't)
-       (run-mode-hooks (intern (jdb-backtrack-mode-hook))))
-    (progn
-      (realgud-backtrack-mode nil)
-      ))
-)
-
-(defun jdb-backtrack-mode-hook()
-  (if jdb-backtrack-mode
-      (progn
-       (use-local-map jdb-backtrack-mode-map)
-       (message "using jdb mode map")
-       )
-    (message "jdb backtrack-mode-hook disable called"))
-)
-
-(provide-me "realgud:jdb-")
diff --git a/packages/realgud/realgud/debugger/jdb/core.el 
b/packages/realgud/realgud/debugger/jdb/core.el
deleted file mode 100644
index 2d8b543..0000000
--- a/packages/realgud/realgud/debugger/jdb/core.el
+++ /dev/null
@@ -1,190 +0,0 @@
-;; Copyright (C) 2014, 2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;; We use gud to handle the classpath-to-filename mapping
-(require 'gud)
-(require 'compile) ;; for compilation-find-file
-
-(require 'load-relative)
-(require-relative-list '("../../common/track"
-                         "../../common/core"
-                         "../../common/file"
-                         "../../common/lang"
-                         "../../common/utils")
-                       "realgud-")
-(require-relative-list '("init") "realgud:jdb-")
-
-(declare-function realgud:strip              'realgud-utils)
-(declare-function realgud:expand-file-name-if-exists 'realgud-core)
-(declare-function realgud-parse-command-arg  'realgud-core)
-(declare-function realgud-query-cmdline      'realgud-core)
-(declare-function realgud-suggest-invocation 'realgud-core)
-(declare-function realgud:file-loc-from-line 'realgud-file)
-
-;; FIXME: I think the following could be generalized and moved to
-;; realgud-... probably via a macro.
-(defvar realgud:jdb-minibuffer-history nil
-  "minibuffer history list for the command `realgud:jdb'.")
-
-(easy-mmode-defmap jdb-minibuffer-local-map
-  '(("\C-i" . comint-dynamic-complete-filename))
-  "Keymap for minibuffer prompting of gud startup command."
-  :inherit minibuffer-local-map)
-
-;; FIXME: I think this code and the keymaps and history
-;; variable chould be generalized, perhaps via a macro.
-(defun realgud:jdb-query-cmdline (&optional opt-debugger)
-  (realgud-query-cmdline
-   'jdb-suggest-invocation
-   jdb-minibuffer-local-map
-   'realgud:jdb-minibuffer-history
-   opt-debugger))
-
-(defun realgud:jdb-dot-to-slash (str)
-  "Change '.' to '/' in STR but chop off from the last . to the end. For 
example
-ca.mgcill.rocky.snpEff.main => ca/mcgill/rocky/snpEff"
-      ;;(setq str (replace-regexp-in-string "\\([^\\.]+\\.\\)[^\\.]+$" "\\1" 
str))
-      ;;(setq str (replace-regexp-in-string "\\.$" "" str))
-      (setq str (replace-regexp-in-string "\\." "/" str))
-      str)
-
-(defvar realgud:jdb-file-remap (make-hash-table :test 'equal)
-  "How to remap Java files in jdb when we otherwise can't find in
-  the filesystem. The hash key is the file string we saw, and the
-  value is associated filesystem string presumably in the
-  filesystem")
-
-(defun realgud:jdb-find-file(filename)
-  "A find-file specific for java/jdb. We use `gdb-jdb-find-source' to map a
-name to a filename. Failing that we can add on .java to the name. Failing that
-we will prompt for a mapping and save that in `realgud:jdb-file-remap' when
-that works."
-  (let* ((transformed-file)
-        (stripped-filename (realgud:strip filename))
-        (gud-jdb-filename (gud-jdb-find-source stripped-filename))
-       )
-    (cond
-     ((and gud-jdb-filename (file-exists-p gud-jdb-filename))
-      gud-jdb-filename)
-     ((file-exists-p (setq transformed-file (concat stripped-filename 
".java")))
-      transformed-file)
-     ('t
-      (if (gethash stripped-filename realgud:jdb-file-remap)
-         (let ((remapped-filename))
-           (setq remapped-filename (gethash stripped-filename 
realgud:jdb-file-remap))
-           (if (file-exists-p remapped-filename)
-               remapped-filename
-             ;; else
-             (and (remhash filename realgud-file-remap) nil)))
-       ;; else
-       (let ((remapped-filename)
-             (guess-filename (realgud:jdb-dot-to-slash filename)))
-         (setq remapped-filename
-               (buffer-file-name
-                (compilation-find-file (point-marker) guess-filename
-                                       nil "%s.java")))
-         (when (and remapped-filename (file-exists-p remapped-filename))
-           (puthash stripped-filename remapped-filename realgud:jdb-file-remap)
-           remapped-filename
-           ))
-       ))
-     ))
-  )
-
-(defun realgud:jdb-loc-fn-callback(text filename lineno source-str
-                                       ignore-file-re cmd-mark)
-  (realgud:file-loc-from-line filename lineno
-                             cmd-mark source-str nil
-                             ignore-file-re 'realgud:jdb-find-file))
-
-(defun realgud:jdb-parse-cmd-args (orig-args)
-  "Parse command line ARGS for the annotate level and name of script to debug.
-
-ORIG-ARGS should contain a tokenized list of the command line to run.
-
-We return the a list containing
-
-* the command debugger (e.g. jdb)
-
-* debugger command rguments if any - a list of strings
-
-* the script name and its arguments - list of strings
-
-For example for the following input
-   '(\"jdb\" \"-classpath . ./TestMe.java a b\"))
-
-we might return:
-   (\"jdb\" nil \"TestMe\"))
-
-Note that the script name path has been expanded via `expand-file-name'.
-"
-
-  ;; Parse the following kind of pattern:
-  ;;  [ruby ruby-options] jdb jdb-options script-name script-options
-  (let (
-        (args orig-args)
-       (interp-regexp
-        (if (member system-type (list 'windows-nt 'cygwin 'msdos))
-            "^jdb*\\(.exe\\)?$"
-          "^jdb*$"))
-       (jdb-name)
-        ;;
-        ;; One dash is added automatically to the below, so
-        ;; attach is really -attach
-       (jdb-two-args '("attach" "sourcepath" "classpath" "dbgtrace"))
-
-        ;; Things returned
-        (debugger-args '())
-        (program-args '()))
-
-    (if (not (and args))
-        ;; Got nothing: return '(nil nil nil)
-        (list jdb-name nil debugger-args program-args)
-      ;; else
-      ;; Strip off optional "jdb" or "jdb.exe" etc.
-      (when (string-match interp-regexp (car args))
-       (setq jdb-name (car args))
-        (setq program-args (nconc program-args (cdr args))))
-
-      (list jdb-name debugger-args program-args))))
-
-;; To silence Warning: reference to free variable
-(defvar realgud:jdb-command-name)
-
-(defun jdb-suggest-invocation (debugger-name)
-  "Suggest a jdb command invocation via `realgud-suggest-invocaton'"
-  (realgud-suggest-invocation (or debugger-name realgud:jdb-command-name)
-                             realgud:jdb-minibuffer-history
-                             "java" "\\.java$" "jdb"))
-
-(defun jdb-reset ()
-  "Jdb cleanup - remove debugger's internal buffers (frame,
-breakpoints, etc.)."
-  (interactive)
-  ;; (jdb-breakpoint-remove-all-icons)
-  (dolist (buffer (buffer-list))
-    (when (string-match "\\*jdb-[a-z]+\\*" (buffer-name buffer))
-      (let ((w (get-buffer-window buffer)))
-        (when w
-          (delete-window w)))
-      (kill-buffer buffer))))
-
-;; (defun jdb-reset-keymaps()
-;;   "This unbinds the special debugger keys of the source buffers."
-;;   (interactive)
-;;   (setcdr (assq 'jdb-debugger-support-minor-mode minor-mode-map-alist)
-;;        jdb-debugger-support-minor-mode-map-when-deactive))
-
-
-(defun realgud:jdb-customize ()
-  "Use `customize' to edit the settings of the `jdb' debugger."
-  (interactive)
-  (customize-group 'realgud:jdb))
-
-(provide-me "realgud:jdb-")
diff --git a/packages/realgud/realgud/debugger/jdb/file.el 
b/packages/realgud/realgud/debugger/jdb/file.el
deleted file mode 100644
index 388478a..0000000
--- a/packages/realgud/realgud/debugger/jdb/file.el
+++ /dev/null
@@ -1,241 +0,0 @@
-;; Copyright (C) 2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-;; Association list of fully qualified class names (package + class name)
-;; and their source files.
-(defvar gud-jdb-class-source-alist nil
-  "Association list of fully qualified class names and source files.")
-
-;; This is used to hold a source file during analysis.
-(defvar gud-jdb-analysis-buffer nil)
-
-(defvar gud-jdb-classpath-string nil
-  "Holds temporary classpath values.")
-
-(defun gud-jdb-build-source-files-list (path extn)
-  "Return a list of java source files (absolute paths).
-PATH gives the directories in which to search for files with
-extension EXTN.  Normally EXTN is given as the regular expression
- \"\\.java$\" ."
-  (apply 'nconc (mapcar (lambda (d)
-                         (when (file-directory-p d)
-                           (directory-files d t extn nil)))
-                       path)))
-
-;; Move point past whitespace.
-(defun gud-jdb-skip-whitespace ()
-  (skip-chars-forward " \n\r\t\014"))
-
-;; Move point past a "// <eol>" type of comment.
-(defun gud-jdb-skip-single-line-comment ()
-  (end-of-line))
-
-;; Move point past a "/* */" or "/** */" type of comment.
-(defun gud-jdb-skip-traditional-or-documentation-comment ()
-  (forward-char 2)
-  (catch 'break
-    (while (not (eobp))
-      (if (eq (following-char) ?*)
-         (progn
-           (forward-char)
-           (if (not (eobp))
-               (if (eq (following-char) ?/)
-                   (progn
-                     (forward-char)
-                     (throw 'break nil)))))
-       (forward-char)))))
-
-;; Move point past any number of consecutive whitespace chars and/or comments.
-(defun gud-jdb-skip-whitespace-and-comments ()
-  (gud-jdb-skip-whitespace)
-  (catch 'done
-    (while t
-      (cond
-       ((looking-at "//")
-       (gud-jdb-skip-single-line-comment)
-       (gud-jdb-skip-whitespace))
-       ((looking-at "/\\*")
-       (gud-jdb-skip-traditional-or-documentation-comment)
-       (gud-jdb-skip-whitespace))
-       (t (throw 'done nil))))))
-
-;; Move point past things that are id-like.  The intent is to skip regular
-;; id's, such as class or interface names as well as package and interface
-;; names.
-(defun gud-jdb-skip-id-ish-thing ()
-  (skip-chars-forward "^ /\n\r\t\014,;{"))
-
-;; Move point past a string literal.
-(defun gud-jdb-skip-string-literal ()
-  (forward-char)
-  (while (not (cond
-              ((eq (following-char) ?\\)
-               (forward-char))
-              ((eq (following-char) ?\042))))
-    (forward-char))
-  (forward-char))
-
-;; Move point past a character literal.
-(defun gud-jdb-skip-character-literal ()
-  (forward-char)
-  (while
-      (progn
-       (if (eq (following-char) ?\\)
-           (forward-char 2))
-       (not (eq (following-char) ?\')))
-    (forward-char))
-  (forward-char))
-
-;; Move point past the following block.  There may be (legal) cruft before
-;; the block's opening brace.  There must be a block or it's the end of life
-;; in petticoat junction.
-(defun gud-jdb-skip-block ()
-
-  ;; Find the beginning of the block.
-  (while
-      (not (eq (following-char) ?{))
-
-    ;; Skip any constructs that can harbor literal block delimiter
-    ;; characters and/or the delimiters for the constructs themselves.
-    (cond
-     ((looking-at "//")
-      (gud-jdb-skip-single-line-comment))
-     ((looking-at "/\\*")
-      (gud-jdb-skip-traditional-or-documentation-comment))
-     ((eq (following-char) ?\042)
-      (gud-jdb-skip-string-literal))
-     ((eq (following-char) ?\')
-      (gud-jdb-skip-character-literal))
-     (t (forward-char))))
-
-  ;; Now at the beginning of the block.
-  (forward-char)
-
-  ;; Skip over the body of the block as well as the final brace.
-  (let ((open-level 1))
-    (while (not (eq open-level 0))
-      (cond
-       ((looking-at "//")
-       (gud-jdb-skip-single-line-comment))
-       ((looking-at "/\\*")
-       (gud-jdb-skip-traditional-or-documentation-comment))
-       ((eq (following-char) ?\042)
-       (gud-jdb-skip-string-literal))
-       ((eq (following-char) ?\')
-       (gud-jdb-skip-character-literal))
-       ((eq (following-char) ?{)
-       (setq open-level (+ open-level 1))
-       (forward-char))
-       ((eq (following-char) ?})
-       (setq open-level (- open-level 1))
-       (forward-char))
-       (t (forward-char))))))
-
-;; Find the package and class definitions in Java source file FILE.  Assumes
-;; that FILE contains a legal Java program.  BUF is a scratch buffer used
-;; to hold the source during analysis.
-(defun gud-jdb-analyze-source (buf file)
-  (let ((l nil))
-    (set-buffer buf)
-    (insert-file-contents file nil nil nil t)
-    (goto-char 0)
-    (catch 'abort
-      (let ((p ""))
-       (while (progn
-                (gud-jdb-skip-whitespace)
-                (not (eobp)))
-         (cond
-
-          ;; Any number of semi's following a block is legal.  Move point
-          ;; past them.  Note that comments and whitespace may be
-          ;; interspersed as well.
-          ((eq (following-char) ?\073)
-           (forward-char))
-
-          ;; Move point past a single line comment.
-          ((looking-at "//")
-           (gud-jdb-skip-single-line-comment))
-
-          ;; Move point past a traditional or documentation comment.
-          ((looking-at "/\\*")
-           (gud-jdb-skip-traditional-or-documentation-comment))
-
-          ;; Move point past a package statement, but save the PackageName.
-          ((looking-at "package")
-           (forward-char 7)
-           (gud-jdb-skip-whitespace-and-comments)
-           (let ((s (point)))
-             (gud-jdb-skip-id-ish-thing)
-             (setq p (concat (buffer-substring s (point)) "."))
-             (gud-jdb-skip-whitespace-and-comments)
-             (if (eq (following-char) ?\073)
-                 (forward-char))))
-
-          ;; Move point past an import statement.
-          ((looking-at "import")
-           (forward-char 6)
-           (gud-jdb-skip-whitespace-and-comments)
-           (gud-jdb-skip-id-ish-thing)
-           (gud-jdb-skip-whitespace-and-comments)
-           (if (eq (following-char) ?\073)
-               (forward-char)))
-
-          ;; Move point past the various kinds of ClassModifiers.
-          ((looking-at "public")
-           (forward-char 6))
-          ((looking-at "abstract")
-           (forward-char 8))
-          ((looking-at "final")
-           (forward-char 5))
-
-          ;; Move point past a ClassDeclaration, but save the class
-          ;; Identifier.
-          ((looking-at "class")
-           (forward-char 5)
-           (gud-jdb-skip-whitespace-and-comments)
-           (let ((s (point)))
-             (gud-jdb-skip-id-ish-thing)
-             (setq
-              l (nconc l (list (concat p (buffer-substring s (point)))))))
-           (gud-jdb-skip-block))
-
-          ;; Move point past an interface statement.
-          ((looking-at "interface")
-           (forward-char 9)
-           (gud-jdb-skip-block))
-
-          ;; Anything else means the input is invalid.
-          (t
-           (message "Error parsing file %s." file)
-           (throw 'abort nil))))))
-    l))
-
-(defun gud-jdb-build-class-source-alist-for-file (file)
-  (mapcar
-   (lambda (c)
-     (cons c file))
-   (gud-jdb-analyze-source gud-jdb-analysis-buffer file)))
-
-;; Return an alist of fully qualified classes and the source files
-;; holding their definitions.  SOURCES holds a list of all the source
-;; files to examine.
-(defun gud-jdb-build-class-source-alist (sources)
-  (setq gud-jdb-analysis-buffer (get-buffer-create " *gud-jdb-scratch*"))
-  (prog1
-      (apply
-       'nconc
-       (mapcar
-       'gud-jdb-build-class-source-alist-for-file
-       sources))
-    (kill-buffer gud-jdb-analysis-buffer)
-    (setq gud-jdb-analysis-buffer nil)))
diff --git a/packages/realgud/realgud/debugger/jdb/init.el 
b/packages/realgud/realgud/debugger/jdb/init.el
deleted file mode 100644
index b29602a..0000000
--- a/packages/realgud/realgud/debugger/jdb/init.el
+++ /dev/null
@@ -1,234 +0,0 @@
-;; Copyright (C) 2014-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-(eval-when-compile (require 'cl-lib))   ;For setf.
-
-(require 'load-relative)
-(require-relative-list '("../../common/regexp"
-                        "../../common/loc"
-                        "../../common/init")
-                      "realgud-")
-
-(require-relative-list '("../../lang/java") "realgud-lang-")
-
-(defvar realgud-pat-hash)
-(declare-function make-realgud-loc-pat (realgud-loc))
-
-(defconst realgud:jdb-identifier "[A-Za-z_][A-Za-z0-9_.]+"
-"Regexp string that matches a Java identifier possily with class
-name. For example java.lang.Class.getDeclaredMethods")
-
-(defvar realgud:jdb-pat-hash (make-hash-table :test 'equal)
-  "Hash key is the what kind of pattern we want to match:
-backtrace, prompt, etc.  The values of a hash entry is a
-realgud-loc-pat struct")
-
-(setf (gethash "loc-callback-fn" realgud:jdb-pat-hash) 
'realgud:jdb-loc-fn-callback)
-
-;; realgud-loc-pat that describes a jdb location generally shown
-;; before a command prompt. For example:
-;;   Breakpoint hit: "thread=main", TestMe.main(), line=7 bci=0
-;;   Step completed: "thread=main", TestMe.<init>(), line=15 bci=0
-
-(setf (gethash "loc" realgud:jdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "\\(?:Breakpoint hit\\|Step completed\\): \"thread=.+\", 
\\(.+\\)?[.]\\(.+\\)(), line=\\([0-9]+\\) 
bci=\\([0-9]+\\)\\(?:\n\\([0-9]+\\)\\(.*\\)\\)?"
-       :file-group 1
-       :line-group 3
-       :text-group 6))
-
-;; realgud-loc-pat that describes a jdb command prompt
-;; For example:
-;;   main[1]
-;;   main[2]
-;;   >
-;; FIXME: I think the pattern is thread-name[stack-level]
-;; Here, we only deal with main.
-(setf (gethash "prompt" realgud:jdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^\\(?:main\\[\\([0-9]+\\)\\]\\|>\\) "
-       :num 1
-       ))
-
-;; realgud-loc-pat that describes a Java syntax error line.
-;; (setf (gethash "syntax-error" realgud:jdb-pat-hash)
-;;       realgud-java-syntax-error-pat)
-
-;; realgud-loc-pat that describes a Java backtrace line.
-;; For example:
-;;  [1] ca.snpEffect.commandLine.SnpEff.run (SnpEff.java:7)
-(setf (gethash "lang-backtrace" realgud:jdb-pat-hash)
-  (make-realgud-loc-pat
-   ;; FIXME: use realgud:jdb-identifier
-   :regexp "^\\(?:[     ]*[\\[0-9\\]+]\\) \\([A-Za-z_.][A-Za-z0-9.]+\\) 
(\\([A-Za-z_.][A-Za-z0-9.]+\\):\\([0-9]+\\))"
-   :file-group 1
-   :line-group 2))
-
-;; realgud-loc-pat that describes a "breakpoint set" line.
-;; For example:
-;;   Set breakpoint TestMe:7
-(setf (gethash "brkpt-set" realgud:jdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^Set breakpoint \\(.+\\):\\([0-9]+\\)"
-       :num 1
-       :line-group 2))
-
-;; realgud-loc-pat that describes a debugger "delete" (breakpoint) response.
-;; For example:
-;;   Removed: breakpoint TestMe:7
-(setf (gethash "brkpt-del" realgud:jdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^Removed breakpoint \\(.+\\):\\([0-9]+\\)\n"
-       :line-group 1))
-
-(defconst realgud:jdb-selected-frame-indicator "-->"
-"String that describes which frame is selected in a debugger
-backtrace listing.")
-
-(defconst realgud:jdb-frame-file-regexp
-  "[ \t\n]+in file \\([^ \n]+\\)")
-
-(defconst realgud:jdb-debugger-name "jdb" "Name of debugger")
-
-;; Top frame number
-(setf (gethash "top-frame-num" realgud:jdb-pat-hash) 0)
-
-;; realgud-loc-pat that describes a debugger "selected" frame in
-;; a frame-motion command.
-;; For example:
-;; --> #1 [1] TestMe.main (TestMe.java:7)
-;; Rocky: sometimes I am not getting the frame indicator.
-(setf (gethash "selected-frame" realgud:jdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp
-       (format "^%s #\\([0-9]+\\) .*%s"
-              realgud:jdb-selected-frame-indicator
-              realgud:jdb-frame-file-regexp)
-       :num 1))
-
-;; realgud-loc-pat that describes a jdb backtrace line.
-;; For example:
-;;  [1] TestMe.main (TestMe.java:7)
-;;  [2] java.lang.Class.privateGetDeclaredMethods (Class.java:2,570)
-;;  [3] java.lang.Class.getMethod0 (Class.java:2,813)
-;;  [4] java.lang.Class.getMethod (Class.java:1,663)
-;;  [5] sun.launcher.LauncherHelper.getMainMethod (LauncherHelper.java:494)
-;;  [6] sun.launcher.LauncherHelper.checkAndLoadMain (LauncherHelper.java:486)
-(setf (gethash "debugger-backtrace" realgud:jdb-pat-hash)
-  (make-realgud-loc-pat
-   :regexp "^\\(?:[\t ]*[\\[[0-9]+\\] 
\\)\\([A-Za-z_.][A-Za-z0-9.]+\\):\\([0-9]+\\)"
-   :file-group 1
-   :line-group 2))
-
-;;  Regular expression that describes location in a maven error
-(setf (gethash "maven-error" realgud:jdb-pat-hash)
-      realgud-maven-error-loc-pat)
-
-(setf (gethash "font-lock-keywords" realgud:jdb-pat-hash)
-      '(
-       ;; The frame number and first type name, if present.
-       ;; FIXME: use realgud:jdb-identifier
-       ("^\\(-->\\|   \\)? #\\([0-9]+\\) \\([A-Z]+\\) 
*\\([A-Z_][a-zA-Z0-9_]*\\)[#]\\([a-zA-Z_][a-zA-Z_[0-9]]*\\)?"
-        (2 realgud-backtrace-number-face)
-        (3 font-lock-keyword-face)         ; e.g. METHOD, TOP
-        (4 font-lock-constant-face)        ; e.g. Object
-        (5 font-lock-function-name-face nil t))   ; t means optional
-       ;; Instruction sequence
-       ("<\\(.+\\)>"
-        (1 font-lock-variable-name-face))
-       ;; "::Type", which occurs in class name of function and in parameter 
list.
-       ;; Parameter sequence
-       ("(\\(.+\\))"
-        (1 font-lock-variable-name-face))
-       ;; "::Type", which occurs in class name of function and in parameter 
list.
-       ("::\\([a-zA-Z_][a-zA-Z0-9_]*\\)"
-        (1 font-lock-type-face))
-       ;; File name.
-       ("[ \t]+in file \\([^ ]+*\\)"
-        (1 realgud-file-name-face))
-       ;; Line number.
-       ("[ \t]+at line \\([0-9]+\\)$"
-        (1 realgud-line-number-face))
-       ;; Function name.
-       ("\\<\\([a-zA-Z_][a-zA-Z0-9_]*\\)\\.\\([a-zA-Z_][a-zA-Z0-9_]*\\)"
-        (1 font-lock-type-face)
-        (2 font-lock-function-name-face))
-       ;; (jdb-frames-match-current-line
-       ;;  (0 jdb-frames-current-frame-face append))
-       ))
-
-;; (setf (gethash "font-lock-keywords" realgud:jdb-pat-hash)
-;;       '(
-;;     ;; The frame number and first type name, if present.
-;;     ((concat realgud:jdb-frame-start-regexp " "
-;;                     realgud:jdb-frame-num-regexp " "
-;;                     "\\([A-Z]+\\) 
*\\([A-Z_][a-zA-Z0-9_]*\\)[#]\\([a-zA-Z_][a-zA-Z_[0-9]]*\\)?")
-;;      (2 realgud-backtrace-number-face)
-;;      (3 font-lock-keyword-face)         ; e.g. METHOD, TOP
-;;      (4 font-lock-constant-face)        ; e.g. Object
-;;      (5 font-lock-function-name-face nil t))   ; t means optional
-;;     ;; Instruction sequence
-;;     ("<\\(.+\\)>"
-;;      (1 font-lock-variable-name-face))
-;;     ;; "::Type", which occurs in class name of function and in
-;;     ;; parameter list.  Parameter sequence
-;;     ("(\\(.+\\))"
-;;      (1 font-lock-variable-name-face))
-;;     ;; "::Type", which occurs in class name of function and in
-;;     ;; parameter list.
-;;     ("::\\([a-zA-Z_][a-zA-Z0-9_]*\\)"
-;;      (1 font-lock-type-face))
-;;     ;; File name.
-;;     (realgud:jdb-frame-file-regexp (1 realgud-file-name-face))
-;;     ;; Line number.
-;;     (realgud:jdb-frame-line-regexp (1 realgud-line-number-face))
-;;     ;; Function name.
-;;     ("\\<\\([a-zA-Z_][a-zA-Z0-9_]*\\)\\.\\([a-zA-Z_][a-zA-Z0-9_]*\\)"
-;;      (1 font-lock-type-face)
-;;      (2 font-lock-function-name-face))
-;;     ;; (jdb-frames-match-current-line
-;;     ;;  (0 jdb-frames-current-frame-face append))
-;;     ))
-
-;; realgud-loc-pat for a termination message.
-(setf (gethash "termination" realgud:jdb-pat-hash)
-       "^The application exited\n")
-
-(setf (gethash realgud:jdb-debugger-name realgud-pat-hash) 
realgud:jdb-pat-hash)
-
-(defvar realgud:jdb-command-hash (make-hash-table :test 'equal)
-  "Hash key is command name like 'quit' and the value is
-  the jdb command to use, like 'quit!'")
-
-(setf (gethash realgud:jdb-debugger-name
-              realgud-command-hash) realgud:jdb-command-hash)
-
-;;  Prefix used in variable names (e.g. short-key-mode-map) for
-;; this debugger
-
-(setf (gethash "jdb" realgud:variable-basename-hash) "realgud:jdb")
-
-
-(setf (gethash "backtrace"   realgud:jdb-command-hash) "where")
-
-;; For these we need to deal with java classpaths.
-;; Also jdb is pretty sucky when it comes to giving an prompt that
-;; we can write a regex for. So we don't even know often when there
-;; is a prompt!
-(setf (gethash "break"       realgud:jdb-command-hash) "*not-implemented*")
-(setf (gethash "clear"       realgud:jdb-command-hash) "*not-implemented*")
-(setf (gethash "restart"     realgud:jdb-command-hash) "*not-implemented*")
-
-(setf (gethash "continue"    realgud:jdb-command-hash) "cont")
-(setf (gethash "finish"      realgud:jdb-command-hash) "step up")
-(setf (gethash "up"          realgud:jdb-command-hash) "up\C-Mwhere")
-(setf (gethash "down"        realgud:jdb-command-hash) "down\C-Mwhere")
-
-
-(provide-me "realgud:jdb-")
diff --git a/packages/realgud/realgud/debugger/jdb/jdb.el 
b/packages/realgud/realgud/debugger/jdb/jdb.el
deleted file mode 100644
index 047dd51..0000000
--- a/packages/realgud/realgud/debugger/jdb/jdb.el
+++ /dev/null
@@ -1,111 +0,0 @@
-;; Copyright (C) 2014-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;;  `jdb' Main interface to jdb via Emacs
-
-(require 'gud) ;; For class-path and source-path handling
-
-(require 'load-relative)
-(require-relative-list '("../../common/run") "realgud:")
-(require-relative-list '("../../common/helper" "../../common/utils")
-                      "realgud-")
-(require-relative-list '("core" "track-mode") "realgud:jdb-")
-
-(declare-function realgud:jdb-query-cmdline  'realgud:jdb-core)
-(declare-function realgud:jdb-parse-cmd-args 'realgud:jdb-core)
-(declare-function realgud:run-process        'realgud:core)
-(declare-function realgud:flatten            'realgud-utils)
-
-
-;; This is needed, or at least the docstring part of it is needed to
-;; get the customization menu to work in Emacs 24.
-(defgroup realgud:jdb nil
-  "The realgud interface to the Java's jdb debugger"
-  :group 'java
-  :group 'realgud
-  :version "24.3")
-
-;; -------------------------------------------------------------------
-;; User-definable variables
-;;
-
-(defcustom realgud:jdb-command-name
-  ;;"jdb --emacs 3"
-  "jdb"
-  "File name for executing the Java debugger and command options.
-This should be an executable on your path, or an absolute file name."
-  :type 'string
-  :group 'realgud:jdb)
-
-;;;###autoload
-(defun realgud:jdb (&optional opt-cmd-line no-reset)
-  "Invoke the Java jdb debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `jdb-parse-cmd-args' and path elements found by that
-are expanded using `expand-file-name'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-"
-  (interactive)
-
-  (setq gud-jdb-classpath nil)
-  (setq gud-jdb-sourcepath nil)
-  ;; Set gud-jdb-classpath from the CLASSPATH environment variable,
-  ;; if CLASSPATH is set.
-  (setq gud-jdb-classpath-string (or (getenv "CLASSPATH") "."))
-  (if gud-jdb-classpath-string
-      (setq gud-jdb-classpath
-           (gud-jdb-parse-classpath-string gud-jdb-classpath-string)))
-
-  (setq gud-jdb-class-source-alist
-       (gud-jdb-build-class-source-alist
-        (setq gud-jdb-source-files
-              (gud-jdb-build-source-files-list gud-jdb-directories
-                                               "\\.java$"))))
-  (fset 'gud-jdb-find-source 'gud-jdb-find-source-file)
-
-
-  ;; reset for future invocations
-  (setq gud-jdb-classpath-string nil)
-
-  (let* (
-        (cmd-str (or opt-cmd-line (realgud:jdb-query-cmdline "jdb")))
-        (cmd-args (split-string-and-unquote cmd-str))
-        (parsed-args (realgud:jdb-parse-cmd-args cmd-args))
-        (script-args (caddr parsed-args))
-        (script-name (car script-args))
-        (parsed-cmd-args
-         (cl-remove-if 'nil (realgud:flatten parsed-args)))
-        (cmd-buf (realgud:run-process "jdb" script-name parsed-cmd-args
-                        'realgud:jdb-track-mode-hook no-reset))
-        )
-    (if cmd-buf
-       (with-current-buffer cmd-buf
-         (set (make-local-variable 'realgud:jdb-file-remap)
-              (make-hash-table :test 'equal))
-         )
-      )
-    )
-  )
-
-;;;###autoload
-(defalias 'jdb 'realgud:jdb)
-(provide-me "realgud-")
-
-;; Local Variables:
-;; byte-compile-warnings: (not cl-functions)
-;; End:
diff --git a/packages/realgud/realgud/debugger/jdb/track-mode.el 
b/packages/realgud/realgud/debugger/jdb/track-mode.el
deleted file mode 100644
index 567cc74..0000000
--- a/packages/realgud/realgud/debugger/jdb/track-mode.el
+++ /dev/null
@@ -1,93 +0,0 @@
-;; Copyright (C) 2015-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;; Java "jdb" Debugger tracking a comint or eshell buffer.
-
-(require 'load-relative)
-(require-relative-list '(
-                        "../../common/cmds"
-                        "../../common/menu"
-                        "../../common/track"
-                        "../../common/track-mode"
-                        )
-                      "realgud-")
-(require-relative-list '("core" "init") "realgud:jdb-")
-(require-relative-list '("../../lang/java") "realgud-lang-")
-
-(declare-function realgud-track-mode 'realgud-track-mode)
-(declare-function realgud-track-mode-hook 'realgud-track-mode)
-(declare-function realgud-track-mode-setup 'realgud-track-mode)
-(declare-function realgud:track-set-debugger 'realgud-track-mode)
-(declare-function realgud-goto-line-for-pt 'realgud-track-mode)
-(declare-function realgud-java-populate-command-keys 'realgud-lang-java)
-
-(realgud-track-mode-vars "realgud:jdb")
-;;(defvaralias 'jdb-short-key-mode-map 'realgud:jdb-short-key-mode-map)
-;;(defvaralias 'jdb-track-mode         'realgud:track-mode)
-
-(realgud-java-populate-command-keys realgud:jdb-track-mode-map)
-
-
-(define-key realgud-track-mode-map
-  (kbd "C-c !!") 'realgud:goto-lang-backtrace-line)
-(define-key realgud-track-mode-map
-  (kbd "C-c !b") 'realgud:goto-debugger-backtrace-line)
-
-(defun realgud:jdb-goto-control-frame-line (pt)
-  "Display the location mentioned by a control-frame line
-described by PT."
-  (interactive "d")
-  (realgud-goto-line-for-pt pt "control-frame"))
-
-(defun realgud:jdb-goto-syntax-error-line (pt)
-  "Display the location mentioned in a Syntax error line
-described by PT."
-  (interactive "d")
-  (realgud-goto-line-for-pt pt "syntax-error"))
-
-(define-key realgud:jdb-track-mode-map
-  (kbd "C-c !c") 'realgud:jdb-goto-control-frame-line)
-(define-key realgud:jdb-track-mode-map
-  (kbd "C-c !s") 'realgud:jdb-goto-syntax-error-line)
-
-(defun realgud:jdb-track-mode-hook()
-  (if realgud:jdb-track-mode
-      (progn
-       (use-local-map realgud:jdb-track-mode-map)
-       (message "using realgud:jdb-track-mode-map"))
-    ;; else
-    (progn
-      (setq realgud-track-mode nil)
-      ))
-)
-
-(define-minor-mode realgud:jdb-track-mode
-  "Minor mode for tracking jdb source locations inside a process shell via 
realgud. jdb is a Ruby debugger.
-
-If called interactively with no prefix argument, the mode is toggled. A prefix 
argument, captured as ARG, enables the mode if the argument is positive, and 
disables it otherwise.
-
-\\{realgud:jdb-track-mode-map}
-"
-  :init-value nil
-  ;; :lighter " jdb"   ;; mode-line indicator from realgud-track is sufficient.
-  ;; The minor mode bindings.
-  :global nil
-  :group 'realgud:jdb
-  :keymap realgud:jdb-track-mode-map
-  (realgud:track-set-debugger "jdb")
-  (if realgud:jdb-track-mode
-      (progn
-       (realgud-track-mode-setup 't)
-       (realgud:jdb-track-mode-hook))
-    (progn
-      (setq realgud-track-mode nil)
-      ))
-)
-
-(provide-me "realgud:jdb-")
diff --git a/packages/realgud/realgud/debugger/kshdb/Makefile.am 
b/packages/realgud/realgud/debugger/kshdb/Makefile.am
deleted file mode 100644
index e6c68b4..0000000
--- a/packages/realgud/realgud/debugger/kshdb/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-include ../common.mk
-
-lisp_files = $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-EXTRA_DIST = $(lisp_files)
diff --git a/packages/realgud/realgud/debugger/kshdb/core.el 
b/packages/realgud/realgud/debugger/kshdb/core.el
deleted file mode 100644
index a9dd6a8..0000000
--- a/packages/realgud/realgud/debugger/kshdb/core.el
+++ /dev/null
@@ -1,175 +0,0 @@
-;; Copyright (C) 2010, 2014-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-(require 'load-relative)
-(require-relative-list '("../../common/track" "../../common/core") "realgud-")
-(require-relative-list '("init") "realgud:kshdb-")
-
-(declare-function realgud:expand-file-name-if-exists 'realgud-core)
-(declare-function realgud-parse-command-arg  'realgud-core)
-(declare-function realgud-query-cmdline      'realgud-core)
-(declare-function realgud-suggest-invocation 'realgud-core)
-
-;; FIXME: I think the following could be generalized and moved to
-;; realgud-... probably via a macro.
-(defvar realgud:kshdb-minibuffer-history nil
-  "minibuffer history list for the command `kshdb'.")
-
-(easy-mmode-defmap kshdb-minibuffer-local-map
-  '(("\C-i" . comint-dynamic-complete-filename))
-  "Keymap for minibuffer prompting of gud startup command."
-  :inherit minibuffer-local-map)
-
-;; FIXME: I think this code and the keymaps and history
-;; variable chould be generalized, perhaps via a macro.
-(defun kshdb-query-cmdline (&optional opt-debugger)
-  (realgud-query-cmdline
-   'kshdb-suggest-invocation
-   kshdb-minibuffer-local-map
-   'realgud:kshdb-minibuffer-history
-   opt-debugger))
-
-;;; FIXME: DRY this with other *-parse-cmd-args routines
-(defun kshdb-parse-cmd-args (orig-args)
-  "Parse command line ARGS for the annotate level and name of script to debug.
-
-ARGS should contain a tokenized list of the command line to run.
-
-We return the a list containing
-- the command processor (e.g. kshdb) and it's arguments if any - a list of 
strings
-- the name of the debugger given (e.g. kshdb) and its arguments - a list of 
strings
-- the script name and its arguments - list of strings
-- whether the annotate or emacs option was given ('-A', '--annotate' or 
'--emacs) - a boolean
-
-For example for the following input
-  (map 'list 'symbol-name
-   '(ksh -W -C /tmp kshdb --emacs ./gcd.rb a b))
-
-we might return:
-   ((ksh -W -C) (kshdb --emacs) (./gcd.rb a b) 't)
-
-NOTE: the above should have each item listed in quotes.
-"
-
-  ;; Parse the following kind of pattern:
-  ;;  [ksh ksh-options] kshdb kshdb-options script-name script-options
-  (let (
-       (args orig-args)
-       (pair)          ;; temp return from
-       ;; ksh doesn't have any optional two-arg options
-       (ksh-opt-two-args '())
-       (ksh-two-args '("o" "c"))
-
-       ;; One dash is added automatically to the below, so
-       ;; h is really -h and -host is really --host.
-       (kshdb-two-args '("A" "-annotate" "l" "-library"
-                         "-highlight" "-no-highlight"
-                          "c" "-command" "-t" "-tty"
-                          "x" "-eval-command"))
-       (kshdb-opt-two-args '())
-       (interp-regexp
-        (if (member system-type (list 'windows-nt 'cygwin 'msdos))
-            "^ksh*\\(.exe\\)?$"
-          "^ksh*$"))
-
-       ;; Things returned
-       (script-name nil)
-       (debugger-name nil)
-       (interpreter-args '())
-       (debugger-args '())
-       (script-args '())
-       (annotate-p nil))
-
-    (if (not (and args))
-       ;; Got nothing: return '(nil, nil)
-       (list interpreter-args debugger-args script-args annotate-p)
-      ;; else
-      ;; Strip off optional "ruby" or "ruby182" etc.
-      (when (string-match interp-regexp
-                         (file-name-sans-extension
-                          (file-name-nondirectory (car args))))
-       (setq interpreter-args (list (pop args)))
-
-       ;; Strip off Ruby-specific options
-       (while (and args
-                   (string-match "^-" (car args)))
-         (setq pair (realgud-parse-command-arg
-                     args ksh-two-args ksh-opt-two-args))
-         (nconc interpreter-args (car pair))
-         (setq args (cadr pair))))
-
-      ;; Remove "kshdb" from "kshdb --kshdb-options script
-      ;; --script-options"
-      (setq debugger-name (file-name-sans-extension
-                          (file-name-nondirectory (car args))))
-      (unless (string-match "^kshdb$" debugger-name)
-       (message
-        "Expecting debugger name `%s' to be `kshdb'"
-        debugger-name))
-      (setq debugger-args (list (pop args)))
-
-      ;; Skip to the first non-option argument.
-      (while (and args (not script-name))
-       (let ((arg (car args)))
-         (cond
-          ;; Annotation or emacs option with level number.
-          ((or (member arg '("--annotate" "-A"))
-               (equal arg "--emacs"))
-           (setq annotate-p t)
-           (nconc debugger-args (list (pop args))))
-          ;; Combined annotation and level option.
-          ((string-match "^--annotate=[0-9]" arg)
-           (nconc debugger-args (list (pop args)) )
-           (setq annotate-p t))
-          ;; Options with arguments.
-          ((string-match "^-" arg)
-           (setq pair (realgud-parse-command-arg
-                       args kshdb-two-args kshdb-opt-two-args))
-           (nconc debugger-args (car pair))
-           (setq args (cadr pair)))
-          ;; Anything else must be the script to debug.
-          (t (setq script-name (realgud:expand-file-name-if-exists arg))
-              (setq script-args (cons script-name (cdr args))))
-          )))
-      (list interpreter-args debugger-args script-args annotate-p))))
-
-;;To silence Warning: reference to free variable
-(defvar realgud:kshdb-command-name)
-
-(defun kshdb-suggest-invocation (debugger-name)
-  "Suggest a kshdb command invocation via `realgud-suggest-invocaton'"
-  (realgud-suggest-invocation (or debugger-name realgud:kshdb-command-name)
-                             realgud:kshdb-minibuffer-history
-                             "sh" "\\.\\(?:k\\)?sh$"))
-
-(defun kshdb-reset ()
-  "Kshdb cleanup - remove debugger's internal buffers (frame,
-breakpoints, etc.)."
-  (interactive)
-  ;; (kshdb-breakpoint-remove-all-icons)
-  (dolist (buffer (buffer-list))
-    (when (string-match "\\*kshdb-[a-z]+\\*" (buffer-name buffer))
-      (let ((w (get-buffer-window buffer)))
-        (when w
-          (delete-window w)))
-      (kill-buffer buffer))))
-
-;; (defun kshdb-reset-keymaps()
-;;   "This unbinds the special debugger keys of the source buffers."
-;;   (interactive)
-;;   (setcdr (assq 'kshdb-debugger-support-minor-mode minor-mode-map-alist)
-;;       kshdb-debugger-support-minor-mode-map-when-deactive))
-
-
-(defun realgud:kshdb-customize ()
-  "Use `customize' to edit the settings of the `kshdb' debugger."
-  (interactive)
-  (customize-group 'realgud:kshdb))
-
-(provide-me "realgud:kshdb-")
diff --git a/packages/realgud/realgud/debugger/kshdb/init.el 
b/packages/realgud/realgud/debugger/kshdb/init.el
deleted file mode 100644
index ed4281c..0000000
--- a/packages/realgud/realgud/debugger/kshdb/init.el
+++ /dev/null
@@ -1,126 +0,0 @@
-;; Copyright (C) 2010-2011, 2016-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;;Regular expressions for Korn shell debugger: kshdb
-
-(eval-when-compile (require 'cl-lib))   ;For setf.
-
-(require 'load-relative)
-(require-relative-list '("../../common/regexp"
-                        "../../common/loc"
-                        "../../common/init")
-                      "realgud-")
-(require-relative-list '("../../lang/posix-shell") "realgud-lang-")
-
-(defvar realgud-pat-hash)
-(declare-function make-realgud-loc-pat (realgud-loc))
-
-(defvar realgud:kshdb-pat-hash (make-hash-table :test 'equal)
-  "Hash key is the what kind of pattern we want to match:
-backtrace, prompt, etc.  The values of a hash entry is a
-realgud-loc-pat struct")
-
-;; Top frame number
-(setf (gethash "top-frame-num" realgud:kshdb-pat-hash) 0)
-
-;; Regular expression that describes a kshdb location generally shown
-;; before a command prompt.
-;; For example:
-;;   (/etc/init.d/apparmor:35):
-(setf (gethash "loc" realgud:kshdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "\\(^\\|\n\\)(\\([^:]+\\):\\([0-9]*\\))"
-       :file-group 2
-       :line-group 3))
-
-;; For example:
-;;   kshdb<10>
-;;   kshdb<(5)>
-;;   kshdb<<1>>
-(setf (gethash "prompt" realgud:kshdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp   "^kshdb[<]+[(]*\\([0-9]+\\)[)]*[>]+ "
-       :num 1
-       ))
-
-;;  Regular expression that describes a "breakpoint set" line
-(setf (gethash "brkpt-set" realgud:kshdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^Breakpoint \\([0-9]+\\) set in file \\(.+\\), line 
\\([0-9]+\\).\n"
-       :num 1
-       :file-group 2
-       :line-group 3))
-
-;; Regular expression that describes a debugger "delete" (breakpoint) response.
-;; For example:
-;;   Removed 1 breakpoint(s).
-(setf (gethash "brkpt-del" realgud:kshdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^Removed \\([0-9]+\\) breakpoints(s).\n"
-       :num 1))
-
-;; Regular expression that describes a debugger "backtrace" command line.
-;; For example:
-;;   ->0 in file `/etc/apparmor/fns' at line 24
-;;   ##1 /etc/apparmor/fns called from file `/etc/init.d/apparmor' at line 35
-;;   ##2 /etc/init.d/apparmor called from file `/usr/bin/kshdb' at line 129
-(setf (gethash "debugger-backtrace" realgud:kshdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp         (concat realgud-shell-frame-start-regexp
-                       realgud-shell-frame-num-regexp "[ ]?"
-                       "\\(.*\\)"
-                       realgud-shell-frame-file-regexp
-                       "\\(?:" realgud-shell-frame-line-regexp "\\)?"
-                       )
-       :num 2
-       :file-group 4
-       :line-group 5)
-      )
-
-;; Regular expression that for a termination message.
-(setf (gethash "termination" realgud:kshdb-pat-hash)
-       "^kshdb: That's all, folks...\n")
-
-(setf (gethash "font-lock-keywords" realgud:kshdb-pat-hash)
-      '(
-       ;; The frame number and first type name, if present.
-       ;; E.g. ->0 in file `/etc/init.d/apparmor' at line 35
-       ;;      --^-
-       ("^\\(->\\|##\\)\\([0-9]+\\) "
-        (2 realgud-backtrace-number-face))
-
-       ;; File name.
-       ;; E.g. ->0 in file `/etc/init.d/apparmor' at line 35
-       ;;          ---------^^^^^^^^^^^^^^^^^^^^-
-       ("[ \t]+\\(in\\|from\\) file `\\(.+\\)'"
-        (2 realgud-file-name-face))
-
-       ;; File name.
-       ;; E.g. ->0 in file `/etc/init.d/apparmor' at line 35
-       ;;                                         --------^^
-       ;; Line number.
-       ("[ \t]+at line \\([0-9]+\\)$"
-        (1 realgud-line-number-face))
-       ;; (trepan-frames-match-current-line
-       ;;  (0 trepan-frames-current-frame-face append))
-       ))
-
-(setf (gethash "kshdb" realgud-pat-hash) realgud:kshdb-pat-hash)
-
-(defvar realgud:kshdb-command-hash (make-hash-table :test 'equal)
-  "hash key is command name like 'quit' and the value is
-  the trepan command to use, like 'quit!'")
-
-;; (setf (gethash "quit" realgud:kshdb-command-hash) "quit!")
-
-(setf (gethash "kshdb" realgud-pat-hash) realgud:kshdb-pat-hash)
-(setf (gethash "clear" realgud:kshdb-command-hash) "clear %l")
-(setf (gethash "eval" realgud:kshdb-command-hash) "eval %s")
-
-(provide-me "realgud:kshdb-")
diff --git a/packages/realgud/realgud/debugger/kshdb/kshdb.el 
b/packages/realgud/realgud/debugger/kshdb/kshdb.el
deleted file mode 100644
index 397d832..0000000
--- a/packages/realgud/realgud/debugger/kshdb/kshdb.el
+++ /dev/null
@@ -1,71 +0,0 @@
-;; Copyright (C) 2011, 2014-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;;  `kshdb' Main interface to kshdb via Emacs
-(require 'load-relative)
-(require-relative-list '("../../common/helper") "realgud-")
-(require-relative-list '("../../common/track") "realgud-")
-(require-relative-list '("core" "track-mode") "realgud:kshdb-")
-;; This is needed, or at least the docstring part of it is needed to
-;; get the customization menu to work in Emacs 24.
-(defgroup realgud:kshdb nil
-  "The realgud interface to the Korn shell debugger, kshdb"
-  :group 'realgud
-  :version "24.3")
-
-;; -------------------------------------------------------------------
-;; User definable variables
-;;
-
-(defcustom realgud:kshdb-command-name
-  ;;"kshdb --emacs 3"
-  "kshdb"
-  "File name for executing the kshdb and its command options.
-This should be an executable on your path, or an absolute file name."
-  :type 'string
-  :group 'realgud:kshdb)
-
-(declare-function kshdb-track-mode (bool))
-(declare-function kshdb-query-cmdline  'realgud:kshdb-core)
-(declare-function kshdb-parse-cmd-args 'realgud:kshdb-core)
-(declare-function realgud:run-process 'realgud-run)
-
-;; -------------------------------------------------------------------
-;; The end.
-;;
-
-;;;###autoload
-(defun realgud:kshdb (&optional opt-command-line no-reset)
-  "Invoke the Korn shell debugger, kshdb, and start the Emacs user interface.
-
-String COMMAND-LINE specifies how to run kshdb.
-
-Normally command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset."
-  (interactive)
-  (let* ((cmd-str (or opt-command-line (kshdb-query-cmdline "kshdb")))
-        (cmd-args (split-string-and-unquote cmd-str))
-        (parsed-args (kshdb-parse-cmd-args cmd-args))
-        (script-args (cdr cmd-args))
-        (script-name (car script-args))
-        (cmd-buf))
-    (realgud:run-process "kshdb" script-name cmd-args
-                        'realgud:kshdb-minibuffer-history
-                        no-reset)
-    ))
-
-;;;###autoload
-(defalias 'kshdb 'realgud:kshdb)
-(provide-me "realgud-")
-
-;;; kshdb.el ends here
diff --git a/packages/realgud/realgud/debugger/kshdb/track-mode.el 
b/packages/realgud/realgud/debugger/kshdb/track-mode.el
deleted file mode 100644
index a80da63..0000000
--- a/packages/realgud/realgud/debugger/kshdb/track-mode.el
+++ /dev/null
@@ -1,72 +0,0 @@
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-;;; "kshdb" Debugger tracking a comint or eshell buffer.
-
-(require 'load-relative)
-(require-relative-list '(
-                        "../../common/cmds"
-                        "../../common/menu"
-                        "../../common/track"
-                        "../../common/track-mode"
-                        )
-                      "realgud-")
-(require-relative-list '("core" "init") "realgud:kshdb-")
-
-(declare-function realgud:track-set-debugger 'realgud-track-mode)
-(declare-function realgud-track-mode-setup   'realgud-track-mode)
-(declare-function realgud-posix-shell-populate-command-keys
-                 'realgud-lang-posix-shell)
-
-(realgud-track-mode-vars "kshdb")
-(realgud-posix-shell-populate-command-keys kshdb-track-mode-map)
-
-(declare-function realgud-track-mode(bool))
-
-(defun kshdb-track-mode-hook()
-  (if kshdb-track-mode
-      (progn
-       (use-local-map kshdb-track-mode-map)
-       (message "using kshdb mode map")
-       )
-    (message "kshdb track-mode-hook disable called"))
-)
-
-(define-minor-mode kshdb-track-mode
-  "Minor mode for tracking kshdb source locations inside a process shell via 
realgud. kshdb is a Korn Shell debugger.
-
-If called interactively with no prefix argument, the mode is toggled. A prefix 
argument, captured as ARG, enables the mode if the argument is positive, and 
disables it otherwise.
-
-\\{kshdb-track-mode-map}
-"
-  :init-value nil
-  ;; :lighter " kshdb"   ;; mode-line indicator from realgud-track is 
sufficient.
-  ;; The minor mode bindings.
-  :global nil
-  :group 'kshdb
-  :keymap kshdb-track-mode-map
-
-  (realgud:track-set-debugger "kshdb")
-  (if kshdb-track-mode
-      (progn
-       (realgud-track-mode 't)
-        (kshdb-track-mode-hook))
-    (progn
-      (realgud-track-mode nil)
-      ))
-)
-
-(provide-me "realgud:kshdb-")
diff --git a/packages/realgud/realgud/debugger/nodejs/Makefile.am 
b/packages/realgud/realgud/debugger/nodejs/Makefile.am
deleted file mode 100644
index e6c68b4..0000000
--- a/packages/realgud/realgud/debugger/nodejs/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-include ../common.mk
-
-lisp_files = $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-EXTRA_DIST = $(lisp_files)
diff --git a/packages/realgud/realgud/debugger/nodejs/core.el 
b/packages/realgud/realgud/debugger/nodejs/core.el
deleted file mode 100644
index c60af97..0000000
--- a/packages/realgud/realgud/debugger/nodejs/core.el
+++ /dev/null
@@ -1,166 +0,0 @@
-;; Copyright (C) 2015-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-(require 'load-relative)
-(require-relative-list '("../../common/track" "../../common/core")
-                      "realgud-")
-(require-relative-list '("init") "realgud:nodejs-")
-
-(declare-function realgud:expand-file-name-if-exists 'realgud-core)
-(declare-function realgud-parse-command-arg  'realgud-core)
-(declare-function realgud-query-cmdline      'realgud-core)
-(declare-function realgud-suggest-invocation 'realgud-core)
-
-;; FIXME: I think the following could be generalized and moved to
-;; realgud-... probably via a macro.
-(defvar realgud:nodejs-minibuffer-history nil
-  "minibuffer history list for the command `nodejs'.")
-
-(easy-mmode-defmap realgud:nodejs-minibuffer-local-map
-  '(("\C-i" . comint-dynamic-complete-filename))
-  "Keymap for minibuffer prompting of nodejs startup command."
-  :inherit minibuffer-local-map)
-
-;; FIXME: I think this code and the keymaps and history
-;; variable chould be generalized, perhaps via a macro.
-(defun nodejs-query-cmdline (&optional opt-debugger)
-  (realgud-query-cmdline
-   'realgud:nodejs-suggest-invocation
-   realgud:nodejs-minibuffer-local-map
-   'realgud:nodejs-minibuffer-history
-   opt-debugger))
-
-;;; FIXME: DRY this with other *-parse-cmd-args routines
-(defun nodejs-parse-cmd-args (orig-args)
-  "Parse command line ORIG-ARGS for the name of script to debug.
-
-ORIG-ARGS should contain a tokenized list of the command line to run.
-
-We return the a list containing
-* the name of the debugger given (e.g. nodejs) and its arguments - a list of 
strings
-* the script name and its arguments - list of strings
-
-For example for the following input:
-  (map 'list 'symbol-name
-   '(node --interactive --debugger-port 5858 /tmp nodejs ./gcd.js a b))
-
-we might return:
-   ((\"node\" \"--interactive\" \"--debugger-port\" \"5858\") nil 
(\"/tmp/gcd.js\" \"a\" \"b\"))
-
-Note that path elements have been expanded via `expand-file-name'.
-"
-
-  ;; Parse the following kind of pattern:
-  ;;  node nodejs-options script-name script-options
-  (let (
-       (args orig-args)
-       (pair)          ;; temp return from
-       (node-two-args '("-debugger_port" "C" "D" "i" "l" "m" "-module" "x"))
-       ;; node doesn't have any optional two-arg options
-       (node-opt-two-args '())
-
-       ;; One dash is added automatically to the below, so
-       ;; h is really -h and -debugger_port is really --debugger_port.
-       (nodejs-two-args '("-debugger_port"))
-       (nodejs-opt-two-args '())
-
-       ;; Things returned
-       (script-name nil)
-       (debugger-name nil)
-       (interpreter-args '())
-       (script-args '())
-       )
-    (if (not (and args))
-       ;; Got nothing: return '(nil, nil, nil)
-       (list interpreter-args nil script-args)
-      ;; else
-      (progn
-       ;; Remove "nodejs" (or "nodemon" or "node") from invocation like:
-       ;; nodejs --nodejs-options script --script-options
-       (setq debugger-name (file-name-sans-extension
-                            (file-name-nondirectory (car args))))
-       (unless (string-match "^node\\(?:js\\|mon\\)?$" debugger-name)
-         (message
-          "Expecting debugger name `%s' to be `node', `nodemon', or `nodejs'"
-          debugger-name))
-       (setq interpreter-args (list (pop args)))
-
-       ;; Skip to the first non-option argument.
-       (while (and args (not script-name))
-         (let ((arg (car args)))
-           (cond
-            ((equal "debug" arg)
-             (nconc interpreter-args (list arg))
-             (setq args (cdr args))
-             )
-
-            ;; Options with arguments.
-            ((string-match "^-" arg)
-             (setq pair (realgud-parse-command-arg
-                         args nodejs-two-args nodejs-opt-two-args))
-             (nconc interpreter-args (car pair))
-             (setq args (cadr pair)))
-            ;; Anything else must be the script to debug.
-            (t (setq script-name (realgud:expand-file-name-if-exists arg))
-              (setq script-args (cons script-name (cdr args))))
-            )))
-       (list interpreter-args nil script-args)))
-    ))
-
-;; To silence Warning: reference to free variable
-(defvar realgud:nodejs-command-name)
-
-(defun realgud:nodejs-suggest-invocation (debugger-name)
-  "Suggest a nodejs command invocation via `realgud-suggest-invocaton'"
-  (realgud-suggest-invocation realgud:nodejs-command-name
-                             realgud:nodejs-minibuffer-history
-                             "js" "\\.js$"))
-
-(defun realgud:nodejs-remove-ansi-shmutz()
-  "Remove ASCII escape sequences that node.js 'decorates' in
-prompts and interactive output with"
-  (add-to-list
-   'comint-preoutput-filter-functions
-   (lambda (output)
-     (replace-regexp-in-string "\033\\[[0-9]+[GKJ]" "" output)))
-  )
-
-(defun realgud:nodejs-reset ()
-  "Nodejs cleanup - remove debugger's internal buffers (frame,
-breakpoints, etc.)."
-  (interactive)
-  ;; (nodejs-breakpoint-remove-all-icons)
-  (dolist (buffer (buffer-list))
-    (when (string-match "\\*nodejs-[a-z]+\\*" (buffer-name buffer))
-      (let ((w (get-buffer-window buffer)))
-        (when w
-          (delete-window w)))
-      (kill-buffer buffer))))
-
-;; (defun nodejs-reset-keymaps()
-;;   "This unbinds the special debugger keys of the source buffers."
-;;   (interactive)
-;;   (setcdr (assq 'nodejs-debugger-support-minor-mode minor-mode-map-alist)
-;;       nodejs-debugger-support-minor-mode-map-when-deactive))
-
-
-(defun realgud:nodejs-customize ()
-  "Use `customize' to edit the settings of the `nodejs' debugger."
-  (interactive)
-  (customize-group 'realgud:nodejs))
-
-(provide-me "realgud:nodejs-")
diff --git a/packages/realgud/realgud/debugger/nodejs/init.el 
b/packages/realgud/realgud/debugger/nodejs/init.el
deleted file mode 100644
index a095dec..0000000
--- a/packages/realgud/realgud/debugger/nodejs/init.el
+++ /dev/null
@@ -1,185 +0,0 @@
-;; Copyright (C) 2015-2016, 2018 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;;; "node debug" debugger
-
-;;; Note: this code is obsolete. FIXME: Move into another repository
-;;; Regular expressions for nodejs Javascript debugger.
-
-(eval-when-compile (require 'cl-lib))   ;For setf.
-
-(require 'load-relative)
-(require-relative-list '("../../common/regexp"
-                        "../../common/loc"
-                        "../../common/init")
-                      "realgud-")
-(require-relative-list '("../../lang/js") "realgud-lang-")
-
-(defvar realgud:nodejs-pat-hash)
-(declare-function make-realgud-loc-pat (realgud-loc))
-
-(defvar realgud:nodejs-pat-hash (make-hash-table :test 'equal)
-  "Hash key is the what kind of pattern we want to match:
-backtrace, prompt, etc.  The values of a hash entry is a
-realgud-loc-pat struct")
-
-;; before a command prompt.
-;; For example:
-;;   break in /home/indutny/Code/git/indutny/myscript.js:1
-(setf (gethash "loc" realgud:nodejs-pat-hash)
-      (make-realgud-loc-pat
-       :regexp (format
-               "\\(?:%s\\)*\\(?:break\\|exception\\) in %s:%s"
-               realgud:js-term-escape "\\([^:]+\\)"
-               realgud:regexp-captured-num)
-       :file-group 1
-       :line-group 2))
-
-;; Regular expression that describes a node-debug command prompt
-;; For example:
-;;   debug>
-(setf (gethash "prompt" realgud:nodejs-pat-hash)
-      (make-realgud-loc-pat
-       :regexp (format "^\\(?:%s\\)*debug> " realgud:js-term-escape)
-       ))
-
-;;  Regular expression that describes a "breakpoint set" line
-;;
-;; (setf (gethash "brkpt-set" realgud:nodejs-pat-hash)
-;;       (make-realgud-loc-pat
-;;        :regexp "^[*] \\([0-9]+\\) "
-;;        :line-group 1))
-
-;; Regular expression that describes a V8 backtrace line.
-;; For example:
-;;    at repl:1:7
-;;    at Interface.controlEval 
(/src/external-vcs/github/trepanjs/lib/interface.js:352:18)
-;;    at REPLServer.b [as eval] (domain.js:183:18)
-(setf (gethash "lang-backtrace" realgud:nodejs-pat-hash)
-  realgud:js-backtrace-loc-pat)
-
-;; Regular expression that describes a debugger "delete" (breakpoint)
-;; response.
-;; For example:
-;;   Removed 1 breakpoint(s).
-(setf (gethash "brkpt-del" realgud:nodejs-pat-hash)
-      (make-realgud-loc-pat
-       :regexp (format "^Removed %s breakpoint(s).\n"
-                      realgud:regexp-captured-num)
-       :num 1))
-
-
-(defconst realgud:nodejs-frame-start-regexp  "\\(?:^\\|\n\\)\\(?:#\\)")
-(defconst realgud:nodejs-frame-num-regexp    realgud:regexp-captured-num)
-(defconst realgud:nodejs-frame-module-regexp "[^ \t\n]+")
-(defconst realgud:nodejs-frame-file-regexp   "[^ \t\n]+")
-
-;; Regular expression that describes a node-debug location generally shown
-;; Regular expression that describes a debugger "backtrace" command line.
-;; For example:
-;; #0 module.js:380:17
-;; #1 dbgtest.js:3:9
-;; #2 Module._compile module.js:456:26
-;; #3 Module._extensions..js module.js:474:10
-;; #4 Module.load module.js:356:32
-;; #5 Module._load module.js:312:12
-;; #6 Module.runMain module.js:497:10
-; ;#7 timers.js:110:15
-(setf (gethash "debugger-backtrace" realgud:nodejs-pat-hash)
-      (make-realgud-loc-pat
-       :regexp         (concat realgud:nodejs-frame-start-regexp
-                       realgud:nodejs-frame-num-regexp " "
-                       "\\(?:" realgud:nodejs-frame-module-regexp " \\)?"
-                       "\\(" realgud:nodejs-frame-file-regexp "\\)"
-                       ":"
-                       realgud:regexp-captured-num
-                       ":"
-                       realgud:regexp-captured-num
-                       )
-       :num 1
-       :file-group 2
-       :line-group 3
-       :char-offset-group 4))
-
-(defconst realgud:nodejs-debugger-name "nodejs" "Name of debugger")
-
-;; ;; Regular expression that for a termination message.
-;; (setf (gethash "termination" realgud:nodejs-pat-hash)
-;;        "^nodejs: That's all, folks...\n")
-
-(setf (gethash "font-lock-keywords" realgud:nodejs-pat-hash)
-      '(
-       ;; The frame number and first type name, if present.
-       ;; E.g. ->0 in file `/etc/init.d/apparmor' at line 35
-       ;;      --^-
-       ("^\\(->\\|##\\)\\([0-9]+\\) "
-        (2 realgud-backtrace-number-face))
-
-       ;; File name.
-       ;; E.g. ->0 in file `/etc/init.d/apparmor' at line 35
-       ;;          ---------^^^^^^^^^^^^^^^^^^^^-
-       ("[ \t]+\\(in\\|from\\) file `\\(.+\\)'"
-        (2 realgud-file-name-face))
-
-       ;; File name.
-       ;; E.g. ->0 in file `/etc/init.d/apparmor' at line 35
-       ;;                                         --------^^
-       ;; Line number.
-       ("[ \t]+at line \\([0-9]+\\)$"
-        (1 realgud-line-number-face))
-       ))
-
-(setf (gethash realgud:nodejs-debugger-name realgud-pat-hash)
-      realgud:nodejs-pat-hash)
-
-;;  Prefix used in variable names (e.g. short-key-mode-map) for
-;; this debugger
-
-(setf (gethash "nodejs" realgud:variable-basename-hash)
-      "nodejs")
-
-(defvar realgud:nodejs-command-hash (make-hash-table :test 'equal)
-  "Hash key is command name like 'finish' and the value is
-  the nodejs command to use, like 'out'")
-
-(setf (gethash realgud:nodejs-debugger-name
-              realgud-command-hash)
-      realgud:nodejs-command-hash)
-
-(setf (gethash "backtrace"  realgud:nodejs-command-hash) "backtrace")
-(setf (gethash "break"      realgud:nodejs-command-hash)
-      "setBreakpoint('%X',%l)")
-(setf (gethash "continue"   realgud:nodejs-command-hash) "cont")
-(setf (gethash "quit"       realgud:nodejs-command-hash) "quit")
-(setf (gethash "finish"     realgud:nodejs-command-hash) "out")
-(setf (gethash "shell"      realgud:nodejs-command-hash) "repl")
-(setf (gethash "eval"       realgud:nodejs-command-hash) "exec(%q)")
-
-;; We need aliases for step and next because the default would
-;; do step 1 and nodejs doesn't handle this. And if it did,
-;; it would probably look like step(1).
-(setf (gethash "step"       realgud:nodejs-command-hash) "step")
-(setf (gethash "next"       realgud:nodejs-command-hash) "next")
-
-;; Unsupported features:
-(setf (gethash "jump"       realgud:nodejs-command-hash) "*not-implemented*")
-(setf (gethash "up"         realgud:nodejs-command-hash) "*not-implemented*")
-(setf (gethash "down"       realgud:nodejs-command-hash) "*not-implemented*")
-(setf (gethash "frame"      realgud:nodejs-command-hash) "*not-implemented*")
-
-
-(provide-me "realgud:nodejs-")
diff --git a/packages/realgud/realgud/debugger/nodejs/nodejs.el 
b/packages/realgud/realgud/debugger/nodejs/nodejs.el
deleted file mode 100644
index 055d004..0000000
--- a/packages/realgud/realgud/debugger/nodejs/nodejs.el
+++ /dev/null
@@ -1,87 +0,0 @@
-;; Copyright (C) 2014-2016, 2018 Free Software Foundation, Inc
-
-;; Author: 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.
-
-;;  `nodejs' Main interface to nodejs debugger via Emacs
-(require 'load-relative)
-(require-relative-list '("../../common/helper") "realgud-")
-(require-relative-list '("../../common/run")    "realgud:")
-(require-relative-list '("core" "track-mode")   "realgud:nodejs-")
-(require-relative-list '("../../lang/js") "realgud-lang-")
-
-(declare-function realgud:run-debugger 'realgud:run)
-
-;; This is needed, or at least the docstring part of it is needed to
-;; get the customization menu to work in Emacs 24.
-(defgroup realgud:nodejs nil
-  "The realgud interface to the nodejs debugger"
-  :group 'realgud
-  :version "24.3")
-
-;; -------------------------------------------------------------------
-;; User-definable variables
-;;
-
-(defcustom realgud:nodejs-command-name
-  "node debug"
-  "File name for executing the Javascript debugger and command options.
-This should be an executable on your path, or an absolute file name."
-  :type 'string
-  :group 'realgud:nodejs)
-
-;; -------------------------------------------------------------------
-;; The end.
-;;
-
-(declare-function nodejs-track-mode     'realgud-nodejs-track-mode)
-(declare-function nodejs-query-cmdline  'realgud:nodejs-core)
-(declare-function nodejs-parse-cmd-args 'realgud:nodejs-core)
-
-;;;###autoload
-(defun realgud:nodejs (&optional opt-cmd-line no-reset)
-  "Invoke the nodejs shell debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE specifies how to run nodejs.
-
-OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `nodejs-parse-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-"
-  (interactive)
-  (let ((cmd-buf
-        (realgud:run-debugger "nodejs"
-                              'nodejs-query-cmdline 'nodejs-parse-cmd-args
-                              'realgud:nodejs-minibuffer-history
-                              opt-cmd-line no-reset)))
-    ;; (if cmd-buf
-    ;;         (with-current-buffer cmd-buf
-    ;;           ;; FIXME should allow customization whether to do or not
-    ;;           ;; and also only do if hook is not already there.
-    ;;           (realgud:remove-ansi-schmutz)
-    ;;           )
-    ;;   )
-    ))
-
-;; Note: There is already a nodejs command in `nodejs-repl'.
-
-;;;###autoload
-(defalias 'realgud:node-debug 'realgud:nodejs)
-
-;;;###autoload
-(defalias 'node-debug 'realgud:nodejs)
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/debugger/nodejs/track-mode.el 
b/packages/realgud/realgud/debugger/nodejs/track-mode.el
deleted file mode 100644
index 2c4c88c..0000000
--- a/packages/realgud/realgud/debugger/nodejs/track-mode.el
+++ /dev/null
@@ -1,90 +0,0 @@
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-;;; nodejs tracking a comint buffer.
-
-(require 'load-relative)
-(require-relative-list '(
-                        "../../common/cmds"
-                        "../../common/menu"
-                        "../../common/track"
-                        "../../common/track-mode"
-                        "../../common/utils"
-                        )
-                      "realgud-")
-(require-relative-list '("core" "init") "realgud:nodejs-")
-;; (require-relative-list '("../../lang/js") "realgud-lang-")
-
-(declare-function realgud:track-set-debugger 'realgud-track-mode)
-(declare-function realgud-track-mode-setup   'realgud-track-mode)
-(declare-function realgud:remove-ansi-schmutz 'realgud:utils)
-
-(realgud-track-mode-vars "nodejs")
-
-(declare-function realgud-track-mode(bool))
-
-(defun nodejs-track-mode-hook()
-  (if nodejs-track-mode
-      (progn
-       (use-local-map nodejs-track-mode-map)
-       (realgud:remove-ansi-schmutz)
-       (message "using nodejs mode map")
-       )
-    (message "nodejs track-mode-hook disable called"))
-)
-
-(define-minor-mode nodejs-track-mode
-  "Minor mode for tracking nodejs source locations inside a nodejs shell via 
realgud.
-
-If called interactively with no prefix argument, the mode is toggled. A prefix 
argument, captured as ARG, enables the mode if the argument is positive, and 
disables it otherwise.
-
-\\{nodejs-track-mode-map}"
-  :init-value nil
-  ;; :lighter " nodejs"   ;; mode-line indicator from realgud-track is 
sufficient.
-  ;; The minor mode bindings.
-  :global nil
-  :group 'realgud:nodejs
-
-  :keymap nodejs-track-mode-map
-
-  (realgud:track-set-debugger "nodejs")
-  (realgud:nodejs-track-mode-internal)
-)
-
-(defun realgud:nodejs-track-mode-internal (&optional arg)
-  (realgud:track-set-debugger "nodejs")
-  (if nodejs-track-mode
-      (progn
-        (realgud-track-mode-setup 't)
-        (nodejs-track-mode-hook))
-    (progn
-      (setq realgud-track-mode nil)
-      ))
-  )
-
-;; ;; Debugger commands that nodejs doesn't have
-;; (define-key nodejs-track-mode-map
-;;   [remap realgud:cmd-newer-frame] 'undefined)
-;; (define-key nodejs-track-mode-map
-;;   [remap realgud:cmd-older-frame] 'undefined)
-(define-key nodejs-short-key-mode-map
-  [remap realgud:cmd-step] 'realgud:cmd-step-no-arg)
-(define-key nodejs-short-key-mode-map
-  [remap realgud:cmd-step] 'realgud:cmd-step-no-arg)
-(define-key nodejs-short-key-mode-map
-  [remap realgud:cmd-next] 'realgud:cmd-next-no-arg)
-
-(provide-me "realgud:nodejs-")
diff --git a/packages/realgud/realgud/debugger/pdb/Makefile.am 
b/packages/realgud/realgud/debugger/pdb/Makefile.am
deleted file mode 100644
index e6c68b4..0000000
--- a/packages/realgud/realgud/debugger/pdb/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-include ../common.mk
-
-lisp_files = $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-EXTRA_DIST = $(lisp_files)
diff --git a/packages/realgud/realgud/debugger/pdb/core.el 
b/packages/realgud/realgud/debugger/pdb/core.el
deleted file mode 100644
index 3d80fb9..0000000
--- a/packages/realgud/realgud/debugger/pdb/core.el
+++ /dev/null
@@ -1,208 +0,0 @@
-;; Copyright (C) 2014-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-(require 'load-relative)
-(require-relative-list '("../../common/track"
-                        "../../common/core"
-                        "../../common/lang")
-                      "realgud-")
-(require-relative-list '("init") "realgud:pdb-")
-
-
-(declare-function realgud:expand-file-name-if-exists 'realgud-core)
-(declare-function realgud-lang-mode? 'realgud-lang)
-(declare-function realgud-parse-command-arg 'realgud-core)
-(declare-function realgud-query-cmdline 'realgud-core)
-(declare-function realgud-suggest-invocation 'realgud-core)
-
-;; FIXME: I think the following could be generalized and moved to
-;; realgud-... probably via a macro.
-(defvar realgud:pdb-minibuffer-history nil
-  "minibuffer history list for the command `pdb'.")
-
-(defvar realgud:pdb-remote-minibuffer-history nil
-  "minibuffer history list for the command `pdb-remote'.")
-
-(easy-mmode-defmap pdb-minibuffer-local-map
-  '(("\C-i" . comint-dynamic-complete-filename))
-  "Keymap for minibuffer prompting of debugger startup command."
-  :inherit minibuffer-local-map)
-
-;; FIXME: I think this code and the keymaps and history
-;; variable chould be generalized, perhaps via a macro.
-(defun pdb-query-cmdline (&optional opt-debugger)
-  (realgud-query-cmdline
-   'pdb-suggest-invocation
-   pdb-minibuffer-local-map
-   'realgud:pdb-minibuffer-history
-   opt-debugger))
-
-;; FIXME: I think this code and the keymaps and history
-;; variable chould be generalized, perhaps via a macro.
-(defun pdb-remote-query-cmdline (not-used)
-  (realgud-query-cmdline
-   'pdb-remote-suggest-invocation
-   pdb-minibuffer-local-map
-   'realgud:pdb-remote-minibuffer-history
-   "telnet"))
-
-(defun pdb-parse-cmd-args (orig-args)
-  "Parse command line ORIG-ARGS for the annotate level and name of script to 
debug.
-
-ORIG-ARGS should contain a tokenized list of the command line to run.
-
-We return the a list containing:
-* the command processor (e.g. python) and it's arguments if any - a list of 
strings
-* the name of the debugger given (e.g. pdb) and its arguments - a list of 
strings
-* the script name and its arguments - list of strings
-* whether the annotate or emacs option was given ('-A', '--annotate' or 
'--emacs) - a boolean
-
-For example for the following input:
-  (map 'list 'symbol-name
-   '(python2.6 -O -Qold ./gcd.py a b))
-
-we might return:
-   ((\"python2.6\" \"-O\" \"-Qold\") (\"pdb\") (\"/tmp/gcd.py\" \"a\" \"b\") 
nil)
-
-Note that the script name path has been expanded via `expand-file-name'.
-"
-
-  ;; Parse the following kind of pattern:
-  ;;  [python python-options] pdb pdb-options script-name script-options
-  (let (
-       (args orig-args)
-       (pair)          ;; temp return from
-       (python-opt-two-args '())
-       ;; Python doesn't have mandatory 2-arg options in our sense,
-       ;; since the two args can be run together, e.g. "-C/tmp" or "-C /tmp"
-       ;;
-       (python-two-args '())
-       ;; pdb doesn't have any arguments
-       (pdb-two-args '())
-       (pdb-opt-two-args '())
-       (interp-regexp
-        (if (member system-type (list 'windows-nt 'cygwin 'msdos))
-            "^python[-0-9.]*\\(.exe\\)?$"
-          "^python[-0-9.]*$"))
-
-       ;; Things returned
-       (annotate-p nil)
-       (debugger-args '())
-       (debugger-name nil)
-       (interpreter-args '())
-       (script-args '())
-       (script-name nil)
-       )
-
-    (if (not (and args))
-       ;; Got nothing: return '(nil, nil)
-       (list interpreter-args debugger-args script-args annotate-p)
-      ;; else
-      ;; Strip off optional "python" or "python182" etc.
-      (when (string-match interp-regexp
-                         (file-name-sans-extension
-                          (file-name-nondirectory (car args))))
-       (setq interpreter-args (list (pop args)))
-
-       ;; Strip off Python-specific options
-       (while (and args
-                   (string-match "^-" (car args)))
-         (setq pair (realgud-parse-command-arg
-                     args python-two-args python-opt-two-args))
-         (nconc interpreter-args (car pair))
-         (setq args (cadr pair))))
-
-      ;; Remove "pdb" from "pdb --pdb-options script
-      ;; --script-options"
-      (setq debugger-name (file-name-sans-extension
-                          (file-name-nondirectory (car args))))
-      (unless (string-match "^\\(pdb\\|cli.py\\)$" debugger-name)
-       (message
-        "Expecting debugger name `%s' to be `pdb' or `cli.py'"
-        debugger-name))
-      (setq debugger-args (list (pop args)))
-
-      ;; Skip to the first non-option argument.
-      (while (and args (not script-name))
-       (let ((arg (car args)))
-         (cond
-          ;; Options with arguments.
-          ((string-match "^-" arg)
-           (setq pair (realgud-parse-command-arg
-                       args pdb-two-args pdb-opt-two-args))
-           (nconc debugger-args (car pair))
-           (setq args (cadr pair)))
-          ;; Anything else must be the script to debug.
-          (t (setq script-name (realgud:expand-file-name-if-exists arg))
-             (setq script-args (cons script-name (cdr args))))
-          )))
-      (list interpreter-args debugger-args script-args annotate-p))))
-
-(defun pdb-parse-remote-cmd-args (orig-args)
-    "Parse command line ORIG-ARGS
-ORIG-ARGS should contain a tokenized list of the command line to run.
-
-We return the a list containing:
-* the command processor (e.g. python) and it's arguments if any - a list of 
strings
-* the name of the debugger given (e.g. pdb) and its arguments - a list of 
strings
-* the script name and its arguments - list of strings
-* nil
-
-For example for the following input:
-  (map 'list 'symbol-name
-   '(telnet localhost 6900))
-
-we might return:
-   ((\"telnet\" \"localhost\" \"6900\") nil nil nil)
-
-Note that the script name path has been expanded via `expand-file-name'.
-"
-    (list orig-args nil nil nil)
-  )
-
-  ;; To silence Warning: reference to free variable
-(defvar realgud:pdb-command-name)
-
-(defun pdb-remote-suggest-invocation (debugger-name)
-  "Suggest a pdb command invocation via `realgud-suggest-invocaton'"
-  "telnet 127.0.0.1 4000"
-  )
-
-
-(defun pdb-suggest-invocation (debugger-name)
-  "Suggest a pdb command invocation via `realgud-suggest-invocaton'"
-  (realgud-suggest-invocation realgud:pdb-command-name
-                             realgud:pdb-minibuffer-history
-                             "python" "\\.py"))
-
-(defun pdb-reset ()
-  "Pdb cleanup - remove debugger's internal buffers (frame,
-breakpoints, etc.)."
-  (interactive)
-  ;; (pdb-breakpoint-remove-all-icons)
-  (dolist (buffer (buffer-list))
-    (when (string-match "\\*pdb-[a-z]+\\*" (buffer-name buffer))
-      (let ((w (get-buffer-window buffer)))
-        (when w
-          (delete-window w)))
-      (kill-buffer buffer))))
-
-;; (defun pdb-reset-keymaps()
-;;   "This unbinds the special debugger keys of the source buffers."
-;;   (interactive)
-;;   (setcdr (assq 'pdb-debugger-support-minor-mode minor-mode-map-alist)
-;;       pdb-debugger-support-minor-mode-map-when-deactive))
-
-
-(defun realgud:pdb-customize ()
-  "Use `customize' to edit the settings of the `pdb' debugger."
-  (interactive)
-  (customize-group 'realgud:pdb))
-
-(provide-me "realgud:pdb-")
diff --git a/packages/realgud/realgud/debugger/pdb/init.el 
b/packages/realgud/realgud/debugger/pdb/init.el
deleted file mode 100644
index cf0f743..0000000
--- a/packages/realgud/realgud/debugger/pdb/init.el
+++ /dev/null
@@ -1,137 +0,0 @@
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-;; Stock Python debugger pdb
-
-(eval-when-compile (require 'cl-lib))   ;For setf.
-
-(require 'load-relative)
-(require-relative-list '("../../common/regexp"
-                        "../../common/loc"
-                        "../../common/init")
-                      "realgud-")
-(require-relative-list '("../../lang/python") "realgud-lang-")
-
-(defvar realgud-pat-hash)
-(declare-function make-realgud-loc-pat (realgud-loc))
-
-(defvar realgud:pdb-pat-hash (make-hash-table :test 'equal)
-  "Hash key is the what kind of pattern we want to match:
-backtrace, prompt, etc.  The values of a hash entry is a
-realgud-loc-pat struct")
-
-(declare-function make-realgud-loc "realgud-loc" (a b c d e f))
-
-;; Regular expression that describes a pdb location generally shown
-;; before a command prompt.
-;;
-;; Program-location lines look like this:
-;;   > /usr/bin/zonetab2pot.py(15)<module>()
-;; or MS Windows:
-;;   > c:\\mydirectory\\gcd.py(10)<module>
-(setf (gethash "loc" realgud:pdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^> \\(\\(?:[a-zA-Z]:\\)?[-a-zA-Z0-9_/.\\\\ ]+\\)(\\([0-9]+\\))"
-       :file-group 1
-       :line-group 2))
-
-(setf (gethash "prompt" realgud:pdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp   "^[(]+Pdb[)]+ "
-       ))
-
-;;  Regular expression that describes a Python backtrace line.
-(setf (gethash "lang-backtrace" realgud:pdb-pat-hash)
-      realgud-python-backtrace-loc-pat)
-
-;;  Regular expression that describes location in a pytest error
-(setf (gethash "pytest-error" realgud:pdb-pat-hash)
-      realgud-pytest-error-loc-pat)
-
-;;  Regular expression that describes location in a flake8 message
-(setf (gethash "flake8-msg" realgud:pdb-pat-hash)
-      realgud-flake8-msg-loc-pat)
-
-;;  Regular expression that describes a "breakpoint set" line. For example:
-;;     Breakpoint 1 at /usr/bin/pdb:7
-(setf (gethash "brkpt-set" realgud:pdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^Breakpoint \\([0-9]+\\) at[ 
\t\n]+\\(.+\\):\\([0-9]+\\)\\(\n\\|$\\)"
-       :num 1
-       :file-group 2
-       :line-group 3))
-
-;;  Regular expression that describes a "delete breakpoint" line
-;; Python 3 includes a file name and line number; Python 2 doesn't
-(setf (gethash "brkpt-del" realgud:pdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^Deleted breakpoint \\([0-9]+\\)"
-       :num 1))
-
-(setf (gethash "font-lock-keywords" realgud:pdb-pat-hash)
-      '(
-       ;; The frame number and first type name, if present.
-       ("^\\(->\\|##\\)\\([0-9]+\\) \\(<module>\\)? 
*\\([a-zA-Z_][a-zA-Z0-9_]*\\)(\\(.+\\))?"
-        (2 realgud-backtrace-number-face)
-        (4 font-lock-function-name-face nil t))     ; t means optional.
-
-       ;; Parameter sequence, E.g. gcd(a=3, b=5)
-       ;;                             ^^^^^^^^^
-       ("(\\(.+\\))"
-        (1 font-lock-variable-name-face))
-
-       ;; File name. E.g  file '/test/gcd.py'
-       ;;                 ------^^^^^^^^^^^^-
-       ("[ \t]+file '\\([^ ]+*\\)'"
-        (1 realgud-file-name-face))
-
-       ;; Line number. E.g. at line 28
-        ;;                  ---------^^
-       ("[ \t]+at line \\([0-9]+\\)$"
-        (1 realgud-line-number-face))
-
-       ;; Function name.
-       ("\\<\\([a-zA-Z_][a-zA-Z0-9_]*\\)\\.\\([a-zA-Z_][a-zA-Z0-9_]*\\)"
-        (1 font-lock-type-face)
-        (2 font-lock-function-name-face))
-       ;; (pdb-frames-match-current-line
-       ;;  (0 pdb-frames-current-frame-face append))
-       ))
-
-(setf (gethash "pdb" realgud-pat-hash) realgud:pdb-pat-hash)
-
-
-(defvar realgud:pdb-command-hash (make-hash-table :test 'equal)
-  "Hash key is command name like 'finish' and the value is
-the pdb command to use, like 'return'")
-
-(setf (gethash "pdb" realgud-command-hash) realgud:pdb-command-hash)
-
-;; Mappings between PDB-specific names and GUD names
-(setf (gethash "finish" realgud:pdb-command-hash) "return")
-(setf (gethash "kill" realgud:pdb-command-hash) "quit")
-(setf (gethash "backtrace" realgud:pdb-command-hash) "where")
-;; Clear in Python does both the usual “delete” and “clear”
-(setf (gethash "delete" realgud:pdb-command-hash) "clear %p")
-(setf (gethash "clear" realgud:pdb-command-hash) "clear %X:%l")
-;; Use ‘!’ instead of ‘p’, since ‘p’ only works for expressions, not statements
-(setf (gethash "eval" realgud:pdb-command-hash) "!%s")
-
-;; Unsupported features:
-(setf (gethash "shell" realgud:pdb-command-hash) "*not-implemented*")
-(setf (gethash "frame" realgud:pdb-command-hash) "*not-implemented*")
-
-(provide-me "realgud:pdb-")
diff --git a/packages/realgud/realgud/debugger/pdb/pdb.el 
b/packages/realgud/realgud/debugger/pdb/pdb.el
deleted file mode 100644
index 8f1b74d..0000000
--- a/packages/realgud/realgud/debugger/pdb/pdb.el
+++ /dev/null
@@ -1,138 +0,0 @@
-;; Copyright (C) 2015-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;;  `pdb' Main interface to pdb via Emacs
-
-(require 'python) ; for python-shell-interpreter
-(require 'load-relative)
-(require-relative-list '("core" "track-mode") "realgud:pdb-")
-(require-relative-list '("../../common/run")  "realgud:")
-(require-relative-list '("core" "track-mode") "realgud:pdb-")
-
-;; This is needed, or at least the docstring part of it is needed to
-;; get the customization menu to work in Emacs 24.
-(defgroup realgud:pdb nil
-  "The realgud interface to the Python pdb debugger"
-  :group 'realgud
-  :version "24.3")
-
-;; -------------------------------------------------------------------
-;; User-definable variables
-;;
-
-(defcustom realgud:pdb-command-name
-  "pdb"
-  "File name for executing the stock Python debugger and command options.
-This should be an executable on your path, or an absolute file name."
-  :type 'string
-  :group 'realgud:pdb)
-;; -------------------------------------------------------------------
-;; The end.
-;;
-
-(declare-function pdb-track-mode       'realgud:pdb-track)
-(declare-function pdb-query-cmdline    'realgud:pdb-core)
-(declare-function pdb-parse-cmd-args   'realgud:pdb-core)
-(declare-function realgud:run-debugger 'realgud:run)
-(declare-function realgud:run-process  'realgud:core)
-(declare-function realgud:flatten      'realgud-utils)
-
-;;;###autoload
-(defun realgud:pdb (&optional opt-cmd-line no-reset)
-  "Invoke the pdb Python debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE specifies how to run pdb. You will be prompted
-for a command line is one isn't supplied.
-
-OPT-COMMAND-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `pdb-parse-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-"
-  (interactive)
-  (realgud:run-debugger "pdb" 'pdb-query-cmdline
-                       'pdb-parse-cmd-args
-                       'realgud:pdb-minibuffer-history
-                       opt-cmd-line no-reset)
-  )
-
-
-;;;###autoload
-(defun realgud:pdb-remote (&optional opt-cmd-line no-reset)
-  "Invoke the pdb Python debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE specifies how to run pdb. You will be prompted
-for a command line is one isn't supplied.
-
-OPT-COMMAND-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `pdb-parse-remote-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-"
-  (interactive)
-  (realgud:run-debugger "pdb" 'pdb-remote-query-cmdline
-                       'pdb-parse-remote-cmd-args
-                       'realgud:pdb-remote-minibuffer-history
-                       opt-cmd-line no-reset "remote-pdb")
-  )
-
-
-;;;###autoload
-(defalias 'pdb 'realgud:pdb)
-
-;;;###autoload
-(defun realgud:pdb-delayed ()
-  "This is like `pdb', but assumes inside the program to be debugged, you
-have a call to the debugger somewhere, e.g. 'from trepan.api import debug; 
debug()'.
-Therefore we invoke python rather than the debugger initially.
-
-"
-  (interactive)
-  (let* ((initial-debugger python-shell-interpreter)
-        (actual-debugger "pdb")
-        (cmd-str (pdb-query-cmdline initial-debugger))
-        (cmd-args (split-string-and-unquote cmd-str))
-        ;; XXX: python gets registered as the interpreter rather than
-        ;; a debugger, and the debugger position (nth 1) is missing:
-        ;; the script-args takes its place.
-        (parsed-args (pdb-parse-cmd-args cmd-args))
-        (script-args (nth 1 parsed-args))
-        (script-name (car script-args))
-        (parsed-cmd-args
-         (cl-remove-if 'nil (realgud:flatten parsed-args))))
-    (realgud:run-process actual-debugger script-name parsed-cmd-args
-                        'realgud:pdb-minibuffer-history)))
-
-(realgud-deferred-invoke-setup "pdb")
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/debugger/pdb/track-mode.el 
b/packages/realgud/realgud/debugger/pdb/track-mode.el
deleted file mode 100644
index b18172f..0000000
--- a/packages/realgud/realgud/debugger/pdb/track-mode.el
+++ /dev/null
@@ -1,73 +0,0 @@
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-;; Python "pdb" Debugger tracking a comint buffer.
-
-(require 'load-relative)
-(require-relative-list '(
-                         "../../common/cmds"
-                         "../../common/menu"
-                         "../../common/track"
-                         "../../common/track-mode"
-                         )
-                       "realgud-")
-(require-relative-list '("core" "init") "realgud:pdb-")
-
-(realgud-track-mode-vars "pdb")
-
-(declare-function realgud-track-mode 'realgud-track-mode)
-(declare-function realgud-track-mode-setup 'realgud-track-mode)
-(declare-function realgud:track-set-debugger 'realgud-track-mode)
-(declare-function realgud-python-populate-command-keys 'realgud-lang-python)
-
-(realgud-python-populate-command-keys pdb-track-mode-map)
-
-(defun pdb-track-mode-hook()
-  (if pdb-track-mode
-      (progn
-        (use-local-map pdb-track-mode-map)
-        (message "using pdb mode map")
-        )
-    (message "pdb track-mode-hook disable called")
-    )
-)
-
-(define-minor-mode pdb-track-mode
-  "Minor mode for tracking pdb source locations inside a process shell via 
realgud. pdb is the stock Python debugger.
-
-If called interactively with no prefix argument, the mode is toggled. A prefix 
argument, captured as ARG, enables the mode if the argument is positive, and 
disables it otherwise.
-
-a process shell.
-
-\\{pdb-track-mode-map}
-"
-  :init-value nil
-  ;; :lighter " pdb"   ;; mode-line indicator from realgud-track is sufficient.
-  ;; The minor mode bindings.
-  :global nil
-  :group 'realgud:pdb
-  :keymap pdb-track-mode-map
-  (realgud:track-set-debugger "pdb")
-  (if pdb-track-mode
-      (progn
-       (realgud-track-mode-setup 't)
-        (pdb-track-mode-hook))
-    (progn
-      (setq realgud-track-mode nil)
-      ))
-)
-
-(provide-me "realgud:pdb-")
diff --git a/packages/realgud/realgud/debugger/perldb/Makefile.am 
b/packages/realgud/realgud/debugger/perldb/Makefile.am
deleted file mode 100644
index e6c68b4..0000000
--- a/packages/realgud/realgud/debugger/perldb/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-include ../common.mk
-
-lisp_files = $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-EXTRA_DIST = $(lisp_files)
diff --git a/packages/realgud/realgud/debugger/perldb/core.el 
b/packages/realgud/realgud/debugger/perldb/core.el
deleted file mode 100644
index 04f6f0c..0000000
--- a/packages/realgud/realgud/debugger/perldb/core.el
+++ /dev/null
@@ -1,151 +0,0 @@
-;; Copyright (C) 2011, 2013-2014, 2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-(require 'load-relative)
-(require-relative-list '("../../common/track"
-                        "../../common/core"
-                        "../../common/lang")
-                      "realgud-")
-(require-relative-list '("init") "realgud:perldb-")
-
-(declare-function realgud-lang-mode?         'realgud-lang)
-(declare-function realgud:expand-file-name-if-exists 'realgud-core)
-(declare-function realgud-parse-command-arg  'realgud-core)
-(declare-function realgud-query-cmdline      'realgud-core)
-(declare-function realgud-suggest-invocation 'realgud-core)
-
-;; FIXME: I think the following could be generalized and moved to
-;; realgud-... probably via a macro.
-(defvar realgud:perldb-minibuffer-history nil
-  "minibuffer history list for the command `perldb'.")
-
-(easy-mmode-defmap realgud:perldb-minibuffer-local-map
-  '(("\C-i" . comint-dynamic-complete-filename))
-  "Keymap for minibuffer prompting of perldb startup command."
-  :inherit minibuffer-local-map)
-
-;; FIXME: I think this code and the keymaps and history
-;; variable chould be generalized, perhaps via a macro.
-(defun realgud:perldb-query-cmdline (&optional opt-debugger)
-  (realgud-query-cmdline
-   'realgud:perldb-suggest-invocation
-   realgud:perldb-minibuffer-local-map
-   'realgud:perldb-minibuffer-history
-   opt-debugger))
-
-;;; FIXME: DRY this with other *-parse-cmd-args routines
-(defun realgud:perldb-parse-cmd-args (orig-args)
-  "Parse command line ARGS for the annotate level and name of script to debug.
-
-ORIG-ARGS should contain a tokenized list of the command line to run.
-
-We return the a list containing
-
-* the command processor (e.g. perl) and it's arguments if any - a
-  list of strings
-
-* the script name and its arguments - list of strings
-
-For example for the following input:
-  (map 'list 'symbol-name
-   '(perl -W -C /tmp -d ./gcd.pl a b))
-
-we might return:
-   ((\"perl\" \"-W\" \"-C\" \"-d\") nil (\"/tmp/gcd.pl\" \"a\" \"b\"))
-
-Note that path elements have been expanded via 
`realgud:expand-file-name-if-exists'.
-"
-
-  ;; Parse the following kind of pattern:
-  ;;  [perl perl-options] perldb perldb-options script-name script-options
-  (let (
-       (args orig-args)
-       (pair)          ;; temp return from
-       (perl-opt-two-args '("0" "C" "D" "i" "l" "m" "-module" "x"))
-       ;; Perl doesn't have mandatory 2-arg options in our sense,
-       ;; since the two args can be run together, e.g. "-C/tmp" or "-C /tmp"
-       ;;
-       (perl-two-args '())
-       ;; One dash is added automatically to the below, so
-       ;; h is really -h and -host is really --host.
-       (perldb-two-args '("e" "E"))
-       (perldb-opt-two-args '())
-       (interp-regexp
-        (if (member system-type (list 'windows-nt 'cygwin 'msdos))
-            "^perl\\(?:5[0-9.]*\\)\\(.exe\\)?$"
-          "^perl\\(?:5[0-9.]*\\)?$"))
-
-       ;; Things returned
-       (script-name nil)
-       (debugger-name nil)
-       (interpreter-args '())
-       (script-args '())
-       )
-
-    (if (not (and args))
-       ;; Got nothing
-       (list interpreter-args nil script-args)
-      ;; else
-      ;; Remove "perl" or "perl5.10.1" etc.
-      (when (string-match interp-regexp
-                         (file-name-sans-extension
-                          (file-name-nondirectory (car args))))
-       (setq interpreter-args (list (pop args)))
-
-       ;; Skip to the first non-option argument
-       (while (and args (not script-name))
-         (let ((arg (car args)))
-           (cond
-            ;; Options with arguments.
-            ((string-match "^-" (car args))
-             (setq pair (realgud-parse-command-arg
-                         args perl-two-args perl-opt-two-args))
-             (nconc interpreter-args (car pair))
-             (setq args (cadr pair)))
-            ;; Anything else must be the script to debug.
-            (t (setq script-name (realgud:expand-file-name-if-exists arg))
-               (setq script-args (cons script-name (cdr args))))
-            )))
-       (list interpreter-args nil script-args)))
-    ))
-
-; # To silence Warning: reference to free variable
-(defvar realgud:perldb-command-name)
-
-(defun realgud:perldb-suggest-invocation (debugger-name)
-  "Suggest a perldb command invocation via `realgud-suggest-invocaton'"
-  (realgud-suggest-invocation realgud:perldb-command-name
-                             realgud:perldb-minibuffer-history
-                             "perl" "\\.pl$"))
-
-(defun realgud:perldb-reset ()
-  "Perldb cleanup - remove debugger's internal buffers (frame,
-breakpoints, etc.)."
-  (interactive)
-  ;; (perldb-breakpoint-remove-all-icons)
-  (dolist (buffer (buffer-list))
-    (when (string-match "\\*perldb-[a-z]+\\*" (buffer-name buffer))
-      (let ((w (get-buffer-window buffer)))
-        (when w
-          (delete-window w)))
-      (kill-buffer buffer))))
-
-;; (defun perldb-reset-keymaps()
-;;   "This unbinds the special debugger keys of the source buffers."
-;;   (interactive)
-;;   (setcdr (assq 'perldb-debugger-support-minor-mode minor-mode-map-alist)
-;;       perldb-debugger-support-minor-mode-map-when-deactive))
-
-
-(defun realgud:perldb-customize ()
-  "Use `customize' to edit the settings of the `perldb' debugger."
-  (interactive)
-  (customize-group 'realgud:perldb))
-
-(provide-me "realgud:perldb-")
diff --git a/packages/realgud/realgud/debugger/perldb/init.el 
b/packages/realgud/realgud/debugger/perldb/init.el
deleted file mode 100644
index 42dbedf..0000000
--- a/packages/realgud/realgud/debugger/perldb/init.el
+++ /dev/null
@@ -1,145 +0,0 @@
-;;; Copyright (C) 2011, 2014-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-;; 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/>.
-;;; Regular expressions for nodejs Javascript debugger.
-;;; Stock Perl debugger perldb
-
-(eval-when-compile (require 'cl-lib))   ;For setf.
-
-(require 'load-relative)
-(require-relative-list '("../../common/regexp" "../../common/loc") "realgud-")
-(require-relative-list '("../../lang/perl") "realgud-lang-")
-
-(defvar realgud-pat-hash)
-(declare-function make-realgud-loc-pat (realgud-loc))
-
-(defvar realgud:perldb-pat-hash (make-hash-table :test 'equal)
-  "Hash key is the what kind of pattern we want to match:
-lang-backtrace, prompt, etc.  The values of a hash entry is a
-realgud-loc-pat struct")
-
-(declare-function make-realgud-loc "realgud-loc" (a b c d e f))
-
-;; Program-location lines look like these:
-;;   File::Basename::dirname(/usr/share/perl/5.16.0/File/Basename.pm:284):
-;;   File::Basename::dirname(/usr/share/perl/5.16.0/File/Basename.pm:284):     
my $path;
-;;   main::(/usr/bin/latex2html:102):
-;;   main::(/usr/bin/latex2html:102):  @ARGV=2;
-;;   main::CODE(0x9407ac8)(l2hconf.pm:6):;;
-;;   main::((eval 8)[/tmp/eval.pl:2]:1):
-;;
-;;   And what are complications MS Windows adds?
-
-;; Hnadle eval form first, e.g.:
-;;    main::((eval 8)[/tmp/eval.pl:2]:1):
-
-(defconst realgud:perldb-loc-eval-regexp
-  (format "(eval [0-9]+)\\[\\(.+\\):%s\\]"
-         realgud:regexp-captured-num))
-
-;; Hnadle non eval form
-;;    main::CODE(0x9407ac8)(l2hconf.pm:6):;;
-
-(defconst realgud:perldb-loc-noeval-regexp
-  (format "\\(?:CODE(0x[0-9a-h]+)\\)?(\\(.+\\):%s):\\(?:\t\\(.*\\)\\)?\n"
-         realgud:regexp-captured-num))
-
-;; Note that eval form has to come before non-eval form as the non-eval
-;; form encompases the eval form. The two clauses makes it hard
-;; to match file and line positions, so we ned to result to the
-;; "alt" forms of file and lines as well as the non-alt formes
-(defconst realgud:perldb-loc-regexp
-  (format "\\(?:%s\\)\\|\\(?:%s\\)"
-         realgud:perldb-loc-eval-regexp realgud:perldb-loc-noeval-regexp))
-
-;; Regular expression that describes a perldb location generally shown
-;; before a command prompt. We include matching the source text so we
-;; can save that.
-(setf (gethash "loc" realgud:perldb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp realgud:perldb-loc-regexp
-       :alt-file-group 1
-       :alt-line-group 2
-       :file-group 3
-       :line-group 4
-       :text-group 5))
-
-;; perldb debugger prompt.
-;; Examples:
-;;   DB<4>
-;; [pid=6489->6502]  DB<1>
-;;
-(setf (gethash "prompt" realgud:perldb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp   "\\(?:\\[pid=[0-9]+->[0-9]+\\]\\)?  DB<\\([0-9]+\\)> "
-       :num 1
-       ))
-
-;;  Regular expression that describes a Perl debugger backtrace line.
-;; $ = main::top_navigation_panel called from file `./latex2html' line 7400
-;; $ = main::BEGIN() called from file `(eval 19)[/usr/bin/latex2html:126]' 
line 2
-(setf (gethash "debugger-backtrace" realgud:perldb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp   "\s+called from file `\\(.+\\)' line \\([0-9]+\\)"
-       :file-group 1
-       :line-group 2))
-
-;;  Regular expression that describes location in a Perl errmsg
-(setf (gethash "perl-errmsg" realgud:perldb-pat-hash)
-      realgud-perl-errmsg-loc-pat)
-
-;;  Regular expression that describes a Perl Carp backtrace line.
-;;  at /tmp/foo.pl line 7
-;;     main::__ANON__('Illegal division by zero at /tmp/foo.pl line 4.\x{a}') 
called at /tmp/foo.pl line 4
-;;     main::foo(3) called at /tmp/foo.pl line 8
-(setf (gethash "lang-backtrace" realgud:perldb-pat-hash)
-      realgud-perl-carp-loc-pat)
-
-(defvar realgud:perldb-command-hash (make-hash-table :test 'equal)
-  "Hash key is command name like 'quit' and the value is
-  the perldb command to use, like 'q'")
-
-(setf (gethash "font-lock-keywords" realgud:perldb-pat-hash)
-      '(
-       ("\s+called from file `\\(.+\\)' line \\([0-9]+\\)"
-        (1 realgud-file-name-face)
-        (2 realgud-line-number-face))
-       ))
-
-
-(setf (gethash "perldb"  realgud-pat-hash) realgud:perldb-pat-hash)
-
-(setf (gethash "backtrace" realgud:perldb-command-hash) "T")
-(setf (gethash "break"     realgud:perldb-command-hash) "b %l")
-(setf (gethash "clear"     realgud:perldb-command-hash) "B %l")
-(setf (gethash "continue"  realgud:perldb-command-hash) "c")
-(setf (gethash "eval"      realgud:perldb-command-hash) "x %s")
-(setf (gethash "quit"      realgud:perldb-command-hash) "q")
-(setf (gethash "restart"   realgud:perldb-command-hash) "R")
-(setf (gethash "run"       realgud:perldb-command-hash) "R")
-(setf (gethash "step"      realgud:perldb-command-hash) "s")
-(setf (gethash "next"      realgud:perldb-command-hash) "n")
-(setf (gethash "until"     realgud:perldb-command-hash) "c %l")
-(setf (gethash "perldb" realgud-command-hash) realgud:perldb-command-hash)
-
-;; Unsupported features:
-(setf (gethash "frame" realgud:perldb-command-hash) "*not-implemented*")
-(setf (gethash "shell" realgud:perldb-command-hash) "*not-implemented*")
-(setf (gethash "up"    realgud:perldb-command-hash) "*not-implemented*")
-(setf (gethash "down"  realgud:perldb-command-hash) "*not-implemented*")
-(setf (gethash "jump"  realgud:perldb-command-hash) "*not-implemented*")
-(setf (gethash "kill"  realgud:perldb-command-hash) "*not-implemented*")
-
-(provide-me "realgud:perldb-")
diff --git a/packages/realgud/realgud/debugger/perldb/perldb.el 
b/packages/realgud/realgud/debugger/perldb/perldb.el
deleted file mode 100644
index c74ad9f..0000000
--- a/packages/realgud/realgud/debugger/perldb/perldb.el
+++ /dev/null
@@ -1,70 +0,0 @@
-;; Copyright (C) 2011, 2014-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;;  `perldb' Main interface to perl debugger via Emacs
-(require 'load-relative)
-(require-relative-list '("../../common/helper") "realgud-")
-(require-relative-list '("../../common/run")    "realgud:")
-(require-relative-list '("core" "track-mode")   "realgud:perldb-")
-
-(declare-function realgud:run-debugger 'realgud:run)
-
-;; This is needed, or at least the docstring part of it is needed to
-;; get the customization menu to work in Emacs 24.
-(defgroup realgud:perldb nil
-  "The realgud interface to the Perl debugger, perldb"
-  :group 'realgud
-  :version "24.3")
-
-;; -------------------------------------------------------------------
-;; User-definable variables
-;;
-
-(defcustom realgud:perldb-command-name
-  "perl -d"
-  "Option to needed to run the Perl debugger"
-  :type 'string
-  :group 'realgud:perldb)
-
-;; -------------------------------------------------------------------
-;; The end.
-;;
-
-(declare-function realgud:perldb-query-cmdline  'realgud:perldb-core)
-(declare-function realgud:perldb-parse-cmd-args 'realgud:perldb-core)
-
-;;;###autoload
-(defun realgud:perldb (&optional opt-cmd-line no-reset)
-  "Invoke the Perl debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE specifies how to run nodejs.
-
-OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `perldb-parse-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-"
-  (interactive)
-  (realgud:run-debugger "perldb"
-                       'realgud:perldb-query-cmdline
-                       'realgud:perldb-parse-cmd-args
-                       'realgud:perldb-minibuffer-history
-                       opt-cmd-line no-reset))
-
-;; (defalias 'perldb 'realgud:perldb)
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/debugger/perldb/track-mode.el 
b/packages/realgud/realgud/debugger/perldb/track-mode.el
deleted file mode 100644
index ce80a23..0000000
--- a/packages/realgud/realgud/debugger/perldb/track-mode.el
+++ /dev/null
@@ -1,79 +0,0 @@
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-;; Stock Perl Debugger "perldb5" tracking a comint or eshell buffer.
-
-(require 'load-relative)
-(require-relative-list '(
-                        "../../common/cmds"
-                        "../../common/menu"
-                        "../../common/track"
-                        "../../common/track-mode"
-                        )
-                      "realgud-")
-(require-relative-list '("core" "init") "realgud:perldb-")
-(require-relative-list '("../../lang/perl") "realgud-lang-")
-
-(realgud-track-mode-vars "perldb")
-
-(declare-function realgud-perl-populate-command-keys
-                 'realgud:perldb)
-(declare-function realgud-track-mode 'realgud-track-mode)
-(declare-function realgud-track-mode-setup    realgud-track-mode)
-(declare-function realgud:track-set-debugger 'realgud-track-mode)
-
-(realgud-perl-populate-command-keys perldb-track-mode-map )
-
-(defun perldb-track-mode-hook()
-  (if perldb-track-mode
-      (progn
-       (use-local-map perldb-track-mode-map)
-       (message "using perldb mode map")
-       )
-    (message "perldb track-mode-hook disable called"))
-)
-
-(define-minor-mode perldb-track-mode
-  "Minor mode for tracking perl5db source locations inside a process shell via 
realgud. perl5db is the stock Perl debugger.
-
-If called interactively with no prefix argument, the mode is toggled. A prefix 
argument, captured as ARG, enables the mode if the argument is positive, and 
disables it otherwise.
-
-\\{perldb-track-mode-map}
-"
-  :init-value nil
-  ;; :lighter " perldb"   ;; mode-line indicator from realgud-track is 
sufficient.
-  ;; The minor mode bindings.
-  :global nil
-  :group 'realgud:perldb
-  :keymap perldb-track-mode-map
-
-  (realgud:track-set-debugger "perldb")
-  (if perldb-track-mode
-      (progn
-       (realgud-track-mode-setup 't)
-       (perldb-track-mode-hook))
-    (progn
-      (setq realgud-track-mode nil)
-      ))
-)
-
-;; Perldb doesn't have stack switching commands.
-(define-key perldb-short-key-mode-map
-  [remap realgud:cmd-newer-frame] 'undefined)
-(define-key perldb-short-key-mode-map
-  [remap realgud:cmd-older-frame] 'undefined)
-
-(provide-me "realgud:perldb-")
diff --git a/packages/realgud/realgud/debugger/rdebug/Makefile.am 
b/packages/realgud/realgud/debugger/rdebug/Makefile.am
deleted file mode 100644
index e6c68b4..0000000
--- a/packages/realgud/realgud/debugger/rdebug/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-include ../common.mk
-
-lisp_files = $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-EXTRA_DIST = $(lisp_files)
diff --git a/packages/realgud/realgud/debugger/rdebug/core.el 
b/packages/realgud/realgud/debugger/rdebug/core.el
deleted file mode 100644
index 18d13f3..0000000
--- a/packages/realgud/realgud/debugger/rdebug/core.el
+++ /dev/null
@@ -1,172 +0,0 @@
-;; Copyright (C) 2010, 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-(require 'load-relative)
-(require-relative-list '("../../common/track"
-                        "../../common/core"
-                        "../../common/lang")
-                      "realgud-")
-(require-relative-list '("init") "realgud-rdebug-")
-
-(declare-function realgud:expand-file-name-if-exists 'realgud-core)
-(declare-function realgud-lang-mode? 'realgud-lang)
-(declare-function realgud-parse-command-arg  'realgud-core)
-(declare-function realgud-query-cmdline      'realgud-core)
-(declare-function realgud-suggest-invocation 'realgud-core)
-
-;; FIXME: I think the following could be generalized and moved to
-;; realgud-... probably via a macro.
-(defvar realgud:rdebug-minibuffer-history nil
-  "minibuffer history list for the command `rdebug'.")
-
-(easy-mmode-defmap rdebug-minibuffer-local-map
-  '(("\C-i" . comint-dynamic-complete-filename))
-  "Keymap for minibuffer prompting of gud startup command."
-  :inherit minibuffer-local-map)
-
-;; FIXME: I think this code and the keymaps and history
-;; variable chould be generalized, perhaps via a macro.
-(defun rdebug-query-cmdline (&optional opt-debugger)
-  (realgud-query-cmdline
-   'rdebug-suggest-invocation
-   rdebug-minibuffer-local-map
-   'realgud:rdebug-minibuffer-history
-   opt-debugger))
-
-(defun rdebug-parse-cmd-args (orig-args)
-  "Parse command line ARGS for the annotate level and name of script to debug.
-
-ARGS should contain a tokenized list of the command line to run.
-
-We return the a list containing
-- the command processor (e.g. ruby) and it's arguments if any - a list of 
strings
-- the name of the debugger given (e.g. rdebug) and its arguments - a list of 
strings
-- the script name and its arguments - list of strings
-- whether the annotate or emacs option was given ('-A', '--annotate' or 
'--emacs) - a boolean
-
-For example for the following input
-  (map 'list 'symbol-name
-   '(ruby1.9 -W -C /tmp rdebug --emacs ./gcd.rb a b))
-
-we might return:
-   ((ruby1.9 -W -C) (rdebug --emacs) (./gcd.rb a b) 't)
-
-NOTE: the above should have each item listed in quotes.
-"
-
-  ;; Parse the following kind of pattern:
-  ;;  [ruby ruby-options] rdebug rdebug-options script-name script-options
-  (let (
-       (args orig-args)
-       (pair)          ;; temp return from
-       (ruby-opt-two-args '("0" "C" "e" "E" "F" "i"))
-       ;; Ruby doesn't have mandatory 2-arg options in our sense,
-       ;; since the two args can be run together, e.g. "-C/tmp" or "-C /tmp"
-       ;;
-       (ruby-two-args '())
-       ;; One dash is added automatically to the below, so
-       ;; h is really -h and -host is really --host.
-       (rdebug-two-args '("h" "-host" "p" "-port"
-                          "I" "-include" "-r" "-require"))
-       (rdebug-opt-two-args '())
-
-       ;; Things returned
-       (script-name nil)
-       (debugger-name nil)
-       (interpreter-args '())
-       (debugger-args '())
-       (script-args '())
-       (annotate-p nil))
-
-    (if (not (and args))
-       ;; Got nothing: return '(nil, nil)
-       (list interpreter-args debugger-args script-args annotate-p)
-      ;; else
-      ;; Strip off optional "ruby" or "ruby182" etc.
-      (when (string-match "^ruby[-0-9]*$"
-                         (file-name-sans-extension
-                          (file-name-nondirectory (car args))))
-       (setq interpreter-args (list (pop args)))
-
-       ;; Strip off Ruby-specific options
-       (while (and args
-                   (string-match "^-" (car args)))
-         (setq pair (realgud-parse-command-arg
-                     args ruby-two-args ruby-opt-two-args))
-         (nconc interpreter-args (car pair))
-         (setq args (cadr pair))))
-
-      ;; Remove "rdebug" from "rdebug --rdebug-options script
-      ;; --script-options"
-      (setq debugger-name (file-name-sans-extension
-                          (file-name-nondirectory (car args))))
-      (unless (string-match "^rdebug$" debugger-name)
-       (message
-        "Expecting debugger name `%s' to be `rdebug'"
-        debugger-name))
-      (setq debugger-args (list (pop args)))
-
-      ;; Skip to the first non-option argument.
-      (while (and args (not script-name))
-       (let ((arg (car args)))
-         (cond
-          ;; Annotation or emacs option with level number.
-          ((or (member arg '("--annotate" "-A"))
-               (equal arg "--emacs"))
-           (setq annotate-p t)
-           (nconc debugger-args (list (pop args))))
-          ;; Combined annotation and level option.
-          ((string-match "^--annotate=[0-9]" arg)
-           (nconc debugger-args (list (pop args)) )
-           (setq annotate-p t))
-          ;; Options with arguments.
-          ((string-match "^-" arg)
-           (setq pair (realgud-parse-command-arg
-                       args rdebug-two-args rdebug-opt-two-args))
-           (nconc debugger-args (car pair))
-           (setq args (cadr pair)))
-          ;; Anything else must be the script to debug.
-          (t (setq script-name (realgud:expand-file-name-if-exists arg))
-             (setq script-args (cons script-name (cdr args))))
-          )))
-      (list interpreter-args debugger-args script-args annotate-p))))
-
-(defvar realgud:rdebug-command-name)
-(defun rdebug-suggest-invocation (debugger-name)
-  "Suggest a rdebug command invocation via `realgud-suggest-invocaton'"
-  (realgud-suggest-invocation realgud:rdebug-command-name
-                             realgud:rdebug-minibuffer-history
-                             "ruby" "\\.rb$"
-                             realgud:rdebug-command-name))
-
-(defun rdebug-reset ()
-  "Rdebug cleanup - remove debugger's internal buffers (frame,
-breakpoints, etc.)."
-  (interactive)
-  ;; (rdebug-breakpoint-remove-all-icons)
-  (dolist (buffer (buffer-list))
-    (when (string-match "\\*rdebug-[a-z]+\\*" (buffer-name buffer))
-      (let ((w (get-buffer-window buffer)))
-        (when w
-          (delete-window w)))
-      (kill-buffer buffer))))
-
-;; (defun rdebug-reset-keymaps()
-;;   "This unbinds the special debugger keys of the source buffers."
-;;   (interactive)
-;;   (setcdr (assq 'rdebug-debugger-support-minor-mode minor-mode-map-alist)
-;;       rdebug-debugger-support-minor-mode-map-when-deactive))
-
-
-(defun realgud:rdebug-customize ()
-  "Use `customize' to edit the settings of the `rdebug' debugger."
-  (interactive)
-  (customize-group 'realgud:rdebug))
-
-(provide-me "realgud-rdebug-")
diff --git a/packages/realgud/realgud/debugger/rdebug/init.el 
b/packages/realgud/realgud/debugger/rdebug/init.el
deleted file mode 100644
index 4b4a024..0000000
--- a/packages/realgud/realgud/debugger/rdebug/init.el
+++ /dev/null
@@ -1,143 +0,0 @@
-;; Copyright (C) 2010, 2011, 2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;; Ruby 1.8 debugger: ruby-debug (rdebug)
-
-(eval-when-compile (require 'cl-lib))   ;For stef.
-
-(require 'load-relative)
-(require-relative-list '("../../common/regexp" "../../common/loc") "realgud-")
-(require-relative-list '("../../lang/ruby") "realgud-lang-")
-
-(defvar realgud-pat-hash)
-(declare-function make-realgud-loc-pat (realgud-loc))
-
-(defvar realgud-rdebug-pat-hash (make-hash-table :test 'equal)
-  "Hash key is the what kind of pattern we want to match:
-backtrace, prompt, etc.  The values of a hash entry is a
-realgud-loc-pat struct")
-
-;; Regular expression that describes a rdebug location generally shown
-;; before a command prompt.
-;; For example:
-;;  /usr/lib/ruby/1.8/rubygems/custom_require.rb:31  # in Emacs
-;; /usr/bin/irb:12
-(setf (gethash "loc" realgud-rdebug-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "\\(?:source 
\\)?\\(\\(?:[a-zA-Z]:\\)?\\(?:.+\\)\\):\\([0-9]+\\).*\\(?:\n\\|$\\)"
-       :file-group 1
-       :line-group 2
-       :ignore-file-re  "(eval)"
-      ))
-
-;; Regular expression that describes a rdebug command prompt
-;; For example:
-;;   (rdb:1)
-(setf (gethash "prompt" realgud-rdebug-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^(rdb:[0-9]+) "
-       ))
-
-;;  Regular expression that describes a Ruby backtrace line.
-(setf (gethash "lang-backtrace" realgud-rdebug-pat-hash)
-      realgud-ruby-backtrace-loc-pat)
-
-;;  Regular expression that describes a ruby $! backtrace
-(setf (gethash "dollar-bang-backtrace" realgud-rdebug-pat-hash)
-      realgud-ruby-dollar-bang-loc-pat)
-
-;; Regular expression that describes a rdebug "breakpoint set" line
-;; For example:
-;;   Breakpoint 1 file /test/gcd.rb, line 6
-;;   -----------^------^^^^^^^^^^^^-------^
-(setf (gethash "brkpt-set" realgud-rdebug-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^Breakpoint \\([0-9]+\\) file \\(.+\\), line \\([0-9]+\\)\n"
-       :num 1
-       :file-group 2
-       :line-group 3))
-
-(defconst realgud-rdebug-frame-file-line-regexp
-  "[ \t\n]+at line \\(.*\\):\\([0-9]+\\)$")
-
-(defconst realgud-rdebug-frame-start-regexp realgud:trepan-frame-start-regexp)
-(defconst realgud-rdebug-frame-num-regexp   realgud:trepan-frame-num-regexp)
-
-;;  Regular expression that describes a Ruby $! string
-(setf (gethash "dollar-bang" realgud-rdebug-pat-hash)
-      realgud-ruby-dollar-bang-loc-pat)
-
-;;  Regular expression that describes a Ruby $! string
-(setf (gethash "rails-backtrace" realgud-rdebug-pat-hash)
-      realgud-rails-backtrace-loc-pat)
-
-;;  Regular expression that describes a debugger "backtrace" command line.
-;;  e.g.
-;; --> #0 at line /usr/bin/irb:12
-;;     #1 main.__script__ at /tmp/fact.rb:1
-;;     #1 main.__script__ at /tmp/fact.rb:1
-;;     #0 IRB.start(ap_path#String) at line /usr/lib/ruby/1.8/irb.rb:52
-(setf (gethash "debugger-backtrace" realgud-rdebug-pat-hash)
-      (make-realgud-loc-pat
-       :regexp         (concat realgud-rdebug-frame-start-regexp " "
-                       realgud-rdebug-frame-num-regexp
-                       "\\(?: \\(?:\\(.+\\)(\\(.*\\))\\)\\)?"
-                       realgud-rdebug-frame-file-line-regexp
-                       )
-       :num 2
-       :file-group 5
-       :line-group 6)
-      )
-
-(setf (gethash "font-lock-keywords" realgud-rdebug-pat-hash)
-      '(
-       ;; Parameters and first type entry. E.g Object.gcd(a#Fixnum, b#Fixnum)
-       ;;                                                 ^-^^^^^^  ^-^^^^^^
-       ("\\<\\([a-zA-Z_][a-zA-Z0-9_]*\\)#\\([a-zA-Z_][a-zA-Z0-9_]*\\)\\>"
-        (1 font-lock-variable-name-face)
-        (2 font-lock-constant-face))
-
-       ;; "::Type", which occurs in class name of function and in
-       ;; parameter list.
-       ("::\\([a-zA-Z_][a-zA-Z0-9_]*\\)"
-        (1 font-lock-type-face))
-
-       ;; The frame number and first type name, if present.
-       ;; E.g. --> #0 Object.gcd(a#Fixnum, b#Fixnum)
-        ;;      -----^-^^^^^^.^^^
-       ("^\\(-->\\)? *#\\([0-9]+\\) *\\(\\([a-zA-Z_][a-zA-Z0-9_]*\\)[.:]\\)?"
-        (2 realgud-backtrace-number-face)
-        (4 font-lock-constant-face nil t))     ; t means optional.
-
-       ;; File name and line number. E.g. at line /test/gcd.rb:6
-        ;;                                 -------^^^^^^^^^^^^^-^
-       ("at line \\(.*\\):\\([0-9]+\\)$"
-        (1 realgud-file-name-face)
-        (2 realgud-line-number-face))
-
-       ;; Function name.
-       ("\\<\\([a-zA-Z_][a-zA-Z0-9_]*\\)\\.\\([a-zA-Z_][a-zA-Z0-9_]*\\)"
-        (1 font-lock-type-face)
-        (2 font-lock-function-name-face))
-       ;; (rdebug-frames-match-current-line
-       ;;  (0 rdebug-frames-current-frame-face append))
-       ))
-
-
-(setf (gethash "rdebug" realgud-pat-hash) realgud-rdebug-pat-hash)
-
-(defvar realgud-rdebug-command-hash (make-hash-table :test 'equal)
-  "Hash key is command name like 'quit' and the value is
-  the trepanx command to use, like 'quit!'")
-
-(setf (gethash "quit" realgud-rdebug-command-hash) "quit!")
-(setf (gethash "shell" realgud-rdebug-command-hash) "irb")
-(setf (gethash "rdebug" realgud-command-hash) realgud-rdebug-command-hash)
-
-(provide-me "realgud-rdebug-")
diff --git a/packages/realgud/realgud/debugger/rdebug/rdebug.el 
b/packages/realgud/realgud/debugger/rdebug/rdebug.el
deleted file mode 100644
index 3abd307..0000000
--- a/packages/realgud/realgud/debugger/rdebug/rdebug.el
+++ /dev/null
@@ -1,124 +0,0 @@
-;; Copyright (C) 2010-2011, 2014-2015 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;;  `rdebug' Main interface to rdebug via Emacs
-(require 'load-relative)
-(require-relative-list '("../../common/helper"
-                        "../../common/track") "realgud-")
-(require-relative-list '("core" "track-mode") "realgud-rdebug-")
-;; This is needed, or at least the docstring part of it is needed to
-;; get the customization menu to work in Emacs 24.
-(defgroup realgud:rdebug nil
-  "The realgud interface to the Ruby debugger, rdebug"
-  :group 'realgud
-  :version "24.3")
-
-(declare-function rdebug-query-cmdline   'realgud-rdebug-core)
-(declare-function rdebug-parse-cmd-args  'realgud-rdebug-core)
-(declare-function realgud:run-debugger   'realgud:run)
-
-;; -------------------------------------------------------------------
-;; User definable variables
-;;
-
-(defcustom realgud:rdebug-command-name
-  ;;"rdebug --emacs 3"
-  "rdebug"
-  "File name for executing the Ruby debugger and command options.
-This should be an executable on your path, or an absolute file name."
-  :type 'string
-  :group 'realgud:rdebug)
-
-(declare-function rdebug-track-mode (bool))
-
-;; -------------------------------------------------------------------
-;; The end.
-;;
-
-(defun rdebug-get-script-name (args)
-  "Parse command line ARGS.
-
-ARGS is a list of strings containing the rdebug command name. We
-return a list containing the script name, and whether the
-annotate option was set is returned.
-
-Initially annotate should be set to nil.  Argument ARGS contains
-a tokenized list of the command line."
-  ;; Parse the following:
-  ;;
-  ;;  [ruby ruby-options] rdebug rdebug-options script-name script-options
-  (and args
-       (let ((name nil)
-             (annotate-p nil))
-         ;; Strip of optional "ruby" or "ruby182" etc.
-         (when (string-match "^ruby[0-9]*$"
-                             (file-name-sans-extension
-                              (file-name-nondirectory (car args))))
-           (pop args)
-           (while (and args
-                       (string-match "^-" (car args)))
-             (if (member (car args) '("-e" "-r" "-I" "-C" "-F" "-K"))
-                 (pop args))
-             (pop args)))
-         ;; Remove "rdebug" from "rdebug --rdebug-options script
-         ;; --script-options"
-         (pop args)
-         ;; Skip to the first non-option argument.
-         (while (and args
-                     (not name))
-           (let ((arg (pop args)))
-             (cond
-              ;; Annotation or emacs option with level number.
-              ((or (member arg '("--annotate" "-A"))
-                  (equal arg "--emacs"))
-               (setq annotate-p t)
-               (pop args))
-              ;; Combined annotation and level option.
-              ((string-match "^--annotate=[0-9]" arg)
-               (setq annotate-p t))
-              ;; Options with arguments.
-              ((member arg '("-h" "--host" "-p" "--port"
-                             "-I" "--include" "-r" "--require"))
-               (pop args))
-              ((string-match "^-" arg)
-               nil)
-              (t
-               (setq name arg)))))
-         (and name
-              (list name annotate-p)))))
-
-
-;;;###autoload
-(defun realgud:rdebug (&optional opt-cmd-line no-reset)
-  "Invoke the rdebug Ruby debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `trepan8-parse-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-"
-  (interactive)
-  (realgud:run-debugger "rdebug" 'rdebug-query-cmdline
-                       'rdebug-parse-cmd-args
-                       'realgud:rdebug-minibuffer-history
-                       opt-cmd-line no-reset)
-  )
-
-
-;;;###autoload
-(defalias 'rdebug 'realgud:rdebug)
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/debugger/rdebug/track-mode.el 
b/packages/realgud/realgud/debugger/rdebug/track-mode.el
deleted file mode 100644
index 87d6986..0000000
--- a/packages/realgud/realgud/debugger/rdebug/track-mode.el
+++ /dev/null
@@ -1,70 +0,0 @@
-;; Copyright (C) 2010, 2012, 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;;; Ruby "rdebug" Debugger tracking a comint or eshell buffer.
-
-(require 'load-relative)
-(require-relative-list '(
-                        "../../common/cmds"
-                        "../../common/menu"
-                        "../../common/track"
-                        "../../common/track-mode"
-                        )
-                      "realgud-")
-(require-relative-list '("core" "init") "realgud-rdebug-")
-(require-relative-list '("../../lang/ruby") "realgud-lang-")
-
-(realgud-track-mode-vars "rdebug")
-
-(declare-function realgud:ruby-populate-command-keys 'realgud-track-lang-ruby)
-(declare-function realgud-track-mode                 'realgud-track-mode)
-(declare-function realgud-track-mode-hook            'realgud-track-mode)
-(declare-function realgud-track-mode-setup           'realgud-track-mode)
-(declare-function realgud:track-set-debugger         'realgud-track-mode)
-
-(realgud:ruby-populate-command-keys rdebug-track-mode-map)
-
-(defun rdebug-track-mode-hook()
-  (if rdebug-track-mode
-      (progn
-       (use-local-map rdebug-track-mode-map)
-       (message "using rdebug mode map")
-       )
-    (message "rdebug track-mode-hook disable called"))
-)
-
-(define-minor-mode rdebug-track-mode
-  "Minor mode for tracking rdebug source locations inside a process shell via 
realgud. rdebug is a Ruby debugger.
-
-If called interactively with no prefix argument, the mode is toggled. A prefix 
argument, captured as ARG, enables the mode if the argument is positive, and 
disables it otherwise.
-
-\\{rdebug-track-mode-map}
-"
-  :init-value nil
-  ;; :lighter " rdebug"   ;; mode-line indicator from realgud-track is 
sufficient.
-  ;; The minor mode bindings.
-  :global nil
-  :group 'realgud:rdebug
-  :keymap rdebug-track-mode-map
-  (rdebug-track-mode-internal rdebug-track-mode)
-)
-
-;; Broken out as a function for debugging
-(defun rdebug-track-mode-internal (&optional arg)
-  (realgud:track-set-debugger "rdebug")
-  (if rdebug-track-mode
-      (progn
-       (realgud-track-mode-setup 't)
-       (rdebug-track-mode-hook))
-    (progn
-      (setq realgud-track-mode nil)
-      ))
-)
-
-(provide-me "realgud-rdebug-")
diff --git a/packages/realgud/realgud/debugger/remake/Makefile.am 
b/packages/realgud/realgud/debugger/remake/Makefile.am
deleted file mode 100644
index e6c68b4..0000000
--- a/packages/realgud/realgud/debugger/remake/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-include ../common.mk
-
-lisp_files = $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-EXTRA_DIST = $(lisp_files)
diff --git a/packages/realgud/realgud/debugger/remake/core.el 
b/packages/realgud/realgud/debugger/remake/core.el
deleted file mode 100644
index 632363c..0000000
--- a/packages/realgud/realgud/debugger/remake/core.el
+++ /dev/null
@@ -1,249 +0,0 @@
-;; Copyright (C) 2011, 2014-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-(require 'load-relative)
-(require-relative-list '("../../common/track" "../../common/core" 
"../../common/lang")
-                      "realgud-")
-(require-relative-list '("../../common/buffer/command")
-                      "realgud-buffer-")
-(require-relative-list '("init") "realgud:remake-")
-
-(declare-function realgud:expand-file-name-if-exists 'realgud-core)
-(declare-function realgud-parse-command-arg  'realgud-core)
-(declare-function realgud-query-cmdline      'realgud-core)
-(declare-function realgud-suggest-invocation 'realgud-core)
-(declare-function realgud-lang-mode?         'realgud-lang)
-(declare-function realgud-cmdbuf-command-string
-                                            'realgud-buffer-command)
-(declare-function realgud-cmdbuf-debugger-name
-                                            'realgud-buffer-command)
-;; FIXME: I think the following could be generalized and moved to
-;; realgud-... probably via a macro.
-(defvar realgud:remake-minibuffer-history nil
-  "minibuffer history list for the command `remake'.")
-
-(easy-mmode-defmap remake-minibuffer-local-map
-  '(("\C-i" . comint-dynamic-complete-filename))
-  "Keymap for minibuffer prompting of gud startup command."
-  :inherit minibuffer-local-map)
-
-;; FIXME: I think this code and the keymaps and history
-;; variable chould be generalized, perhaps via a macro.
-(defun remake-query-cmdline (&optional opt-debugger)
-  (realgud-query-cmdline
-   'remake-suggest-invocation
-   remake-minibuffer-local-map
-   'realgud:remake-minibuffer-history
-   opt-debugger))
-
-(defun remake-parse-cmd-args (orig-args)
-  "Parse command line ARGS for the annotate level and name of script to debug.
-
-ARGS should contain a tokenized list of the command line to run.
-
-We return the a list containing
-
-- the command processor (e.g. make)
-- the Makefile name
-- command args (which includes the makefile name)
-
-For example for the following input
-  '(\"remake\" \"-x\" \"/tmp/Makefile\")
-
-we might return:
-   (\"remake\" \"/tmp/Makefile\" (\"-x\" \"/tmp/Makefile\"))
-
-"
-
-  (let (
-       (args orig-args)
-       (interp-regexp
-        (if (member system-type (list 'windows-nt 'cygwin 'msdos))
-            "^\\(re\\)?make*\\(.exe\\)?$"
-          "^\\(re\\)?make*$"))
-
-       ;; Things returned
-       (remake-name nil)
-       (makefile-name nil)
-       (remake-args '())
-       )
-
-    (if (not (and args))
-       ;; Got nothing
-       (list remake-name makefile-name remake-args)
-      ;; else
-      ;; Strip off "make" or "remake" etc.
-      (when (string-match interp-regexp
-                         (file-name-sans-extension
-                          (file-name-nondirectory (car args))))
-       (setq remake-name (pop args))
-       )
-
-      ;; parse options
-      (while args
-       (let ((arg (pop args)))
-         (cond
-          ((member arg '("--file" "--makefile" "-f"))
-           (setq remake-args (nconc remake-args (list arg)))
-           (setq makefile-name (realgud:expand-file-name-if-exists
-                                (pop args)))
-           (setq remake-args (nconc remake-args
-                                    (list (format "%s" makefile-name)))))
-
-          ;; Anything else add to remake-args
-          ('t (setq remake-args (nconc remake-args (list arg))))
-          )))
-      (list remake-name makefile-name remake-args))))
-
-(defconst realgud:remake-auto-suffix-regexp
-  "\\.\\(am\\|in\\)$"
-  "Common automake and autoconf Makefile suffixes"
-)
-
-(defconst realgud:remake-makefile-regexp
-  "\\(^[Mm]akefile$\\|\\.Makefile$\\|\\.mk\\)$"
-  "Regular expression matching common Makefile names"
-)
-
-(defun remake-suggest-file-priority(filename)
-  (let ((priority 2)
-       (is-not-directory)
-       )
-    (if (realgud-lang-mode? filename "makefile")
-       (progn
-         (if (string-match realgud:remake-makefile-regexp filename)
-             (setq priority 8)
-           (if (string-match realgud:remake-auto-suffix-regexp filename)
-               (setq priority 5)
-             (setq priority 7)))
-         ))
-    ;; The file isn't in a makefile-mode buffer,
-    ;; Check for an executable file with a .mk extension.
-    (if (setq is-not-directory (not (file-directory-p filename)))
-       (if (and (string-match realgud:remake-makefile-regexp filename))
-           (if (< priority 6)
-               (progn
-                 (setq priority 6)))))
-    priority
-    )
-)
-
-(defun remake-suggest-Makefile ()
- "Suggest a Makefile to debug.
-
-The first priority is given to the current buffer. If the major
-mode matches GNUMakefile and doesn't end in .am or .in, then we
-are done. If not, we'll set priority 2 (a low or easily
-overridden priority) and we keep going.  Then we will try files
-in the default-directory. Of those that we are visiting we check
-the major mode. There are demerits for a file ending in .in or
-.am which are used by 'configure' and 'automake' respectively.
-
-If the current buffer isn't a success, we see if the file matches
-REGEXP. These have priority 9, 8 or 7 depending on whether there
-is a .in or .am sufifx and there is a REGEXP match'.  Within a
-given priority, we use the first one we find."
-    (let* ((file)
-          (file-list (directory-files default-directory))
-          (priority 2)
-          (is-not-directory)
-          (result (buffer-file-name)))
-      (if (not (realgud-lang-mode? result "makefile"))
-         (progn
-           (while (and (setq file (car-safe file-list)) (< priority 8))
-             (setq file-list (cdr file-list))
-             (let ((try-priority (remake-suggest-file-priority file)))
-               (if (> try-priority priority)
-                   (progn
-                     (setq priority try-priority)
-                     (setq result file)))
-               ))
-           ))
-      result)
-    )
-
-;; To silence Warning: reference to free variable
-(defvar realgud:remake-command-name)
-
-;; Note opt-debugger is not used. It has to be there because
-;; realgud-suggest-invocation passes an argument.
-(defun remake-suggest-invocation (&optional opt-debugger)
-  "Suggest a remake command invocation via `realgud-suggest-invocaton'"
-
-  (let* ((buf (current-buffer))
-        (debugger-name realgud:remake-command-name)
-        (cmd-str-cmdbuf (realgud-cmdbuf-command-string buf))
-        )
-    (cond
-     ((and cmd-str-cmdbuf (equal debugger-name (realgud-cmdbuf-debugger-name 
buf)))
-      cmd-str-cmdbuf)
-     ((and minibuffer-history (listp minibuffer-history))
-      (car minibuffer-history))
-     (t (concat debugger-name " --debugger -f "
-               (remake-suggest-Makefile)))
-     )))
-
-;; Convert a command line as would be typed normally to run a script
-;; into one that invokes an Emacs-enabled debugging session.
-;; "--debugger" in inserted as the first switch.
-
-(defun realgud:remake-massage-args (command-line)
-  (let* ((new-args (list "--debugger"))
-        (args (split-string-and-unquote command-line))
-        (program (car args))
-        (seen-e nil)
-        (shift (lambda ()
-                 (setq new-args (cons (car args) new-args))
-                 (setq args (cdr args)))))
-
-    ;; Pass all switches and -e scripts through.
-    (while (and args
-               (string-match "^-" (car args))
-               (not (equal "-" (car args)))
-               (not (equal "--" (car args))))
-      (funcall shift))
-
-    (if (or (not args)
-           (string-match "^-" (car args)))
-       (error "Can't use stdin as the script to debug"))
-    ;; This is the program name.
-    (funcall shift)
-
-    (while args
-      (funcall shift))
-
-    (nreverse new-args)
-    )
-  )
-
-(defun remake-reset ()
-  "Remake cleanup - remove debugger's internal buffers (frame,
-breakpoints, etc.)."
-  (interactive)
-  ;; (remake-breakpoint-remove-all-icons)
-  (dolist (buffer (buffer-list))
-    (when (string-match "\\*remake-[a-z]+\\*" (buffer-name buffer))
-      (let ((w (get-buffer-window buffer)))
-        (when w
-          (delete-window w)))
-      (kill-buffer buffer))))
-
-;; (defun remake-reset-keymaps()
-;;   "This unbinds the special debugger keys of the source buffers."
-;;   (interactive)
-;;   (setcdr (assq 'remake-debugger-support-minor-mode minor-mode-map-alist)
-;;       remake-debugger-support-minor-mode-map-when-deactive))
-
-
-(defun realgud:remake-customize ()
-  "Use `customize' to edit the settings of the `remake' debugger."
-  (interactive)
-  (customize-group 'realgud:remake))
-
-(provide-me "realgud:remake-")
diff --git a/packages/realgud/realgud/debugger/remake/init.el 
b/packages/realgud/realgud/debugger/remake/init.el
deleted file mode 100644
index 0c650cf..0000000
--- a/packages/realgud/realgud/debugger/remake/init.el
+++ /dev/null
@@ -1,154 +0,0 @@
-;; Copyright (C) 2011, 2014, 2016 Free Software Foundation, Inc
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-;;; Regular expressions for GNU Make debugger: remake
-
-(eval-when-compile (require 'cl-lib))   ;For setf.
-
-(require 'load-relative)
-(require-relative-list '("../../common/regexp"
-                        "../../common/loc"
-                        "../../common/init")
-                      "realgud-")
-
-(defvar realgud-pat-hash)
-(declare-function make-realgud-loc-pat (realgud-loc))
-
-(defvar realgud:remake-pat-hash (make-hash-table :test 'equal)
-  "Hash key is the what kind of pattern we want to match:
-backtrace, prompt, etc.  The values of a hash entry is a
-realgud-loc-pat struct")
-
-;; Top frame number
-(setf (gethash "top-frame-num" realgud:remake-pat-hash) 0)
-
-;; realgud-loc-pat that describes a remake location generally shown
-;; before a command prompt.
-;; For example:
-;; -- (emacs-dbgr/realgud/debugger/Makefile:168)
-(setf (gethash "loc" realgud:remake-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "\\(?:^\\|\n\\)\\(?:.. 
\\)?(\\(\\(?:[a-zA-Z]:\\)?[-a-zA-Z0-9_/.\\\\ 
]+\\):\\([0-9]+\\))\\(?:\n\\(.*?\\)\n\\)?"
-       :file-group 1
-       :line-group 2
-       :text-group 3))
-
-;; For example:
-;;   remake<10>
-;;   remake<<1>>
-(setf (gethash "prompt" realgud:remake-pat-hash)
-      (make-realgud-loc-pat
-       :regexp   "^remake[<]+\\([0-9]+\\)[>]+ "
-       :num 1
-       ))
-
-;;  realgud-loc-pat that describes a "breakpoint set" line
-(setf (gethash "brkpt-set" realgud:remake-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^Breakpoint \\([0-9]+\\) on target \\([^:]*\\): file \\(.+\\), 
line \\([0-9]+\\).\n"
-       :num 1
-       :file-group 3
-       :line-group 4))
-
-;; realgud-loc-pat that describes a debugger "delete" (breakpoint) response.
-;; For example:
-;;   Removed 1 breakpoint(s).
-(setf (gethash "brkpt-del" realgud:remake-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^Breakpoint \\([0-9]+\\) on target .* cleared\n"
-       :num 1))
-
-(defconst realgud:remake-selected-frame-arrow "=>"
-"String that describes which frame is selected in a debugger
-backtrace listing.")
-(defconst realgud:remake-frame-arrow (format "\\(%s\\|  \\)"
-                                         realgud:remake-selected-frame-arrow))
-(defconst realgud:remake-frame-num-regexp
-  "#\\([0-9]+\\)  ")
-
-(defconst realgud:remake-frame-file-regexp " at \\(.*\\):\\([0-9]+\\)")
-
-;; realgud-loc-pat that describes a remake "backtrace" command line.
-;; For example:
-;; #0  Makefile.in at /tmp/Makefile:216
-;; #1  Makefile at /tmp/Makefile:230
-(setf (gethash "lang-backtrace" realgud:remake-pat-hash)
-      (make-realgud-loc-pat
-       :regexp         (concat "^"
-                       realgud:remake-frame-num-regexp
-                       "\\(.*\\)"
-                       realgud:remake-frame-file-regexp
-                       )
-       :num 1
-       :file-group 3
-       :line-group 4)
-      )
-
-;; realgud-loc-pat that describes a debugger "backtrace" command line.
-;; For example:
-;; =>#0  Makefile.in at /tmp/Makefile:216
-;;   #1  Makefile at /tmp/Makefile:230
-(setf (gethash "debugger-backtrace" realgud:remake-pat-hash)
-      (make-realgud-loc-pat
-       :regexp         (concat "^"
-                       realgud:remake-frame-arrow
-                       realgud:remake-frame-num-regexp
-                       "\\(.*\\)"
-                       realgud:remake-frame-file-regexp
-                       )
-       :num 2
-       :file-group 4
-       :line-group 5)
-      )
-
-;; realgud-loc-pat that describes which frame is selected in
-;; a debugger backtrace listing.
-(setf (gethash "selected-frame-indicator" realgud:remake-pat-hash)
-      realgud:remake-selected-frame-arrow)
-
-;; Regular expression for a termination message.
-(setf (gethash "termination" realgud:remake-pat-hash)
-       "^remake: That's all, folks...\n")
-
-(setf (gethash "font-lock-keywords" realgud:remake-pat-hash)
-      '(
-       ;; ;; File name and line number
-       ;; ;; E.g. =>#0  Makefile.in at /tmp/Makefile:216
-       ;; ;;                       ----^^^^^^^^^^^^^^^^^
-       (" at \\(.*\\):\\([0-9]+\\)"
-        (1 realgud-file-name-face)
-        (2 realgud-line-number-face))
-
-       ;; The frame number and first type name, if present.
-       ;; E.g. =>#0  Makefile.in at /tmp/Makefile:216
-       ;;      ---^
-       ("#\\([0-9]+\\)  "
-        (1 realgud-backtrace-number-face))
-       ))
-
-(setf (gethash "remake" realgud-pat-hash) realgud:remake-pat-hash)
-
-(defvar realgud:remake-command-hash (make-hash-table :test 'equal)
-  "Hash key is command name like 'quit' and the value is
-  the remake command to use, like 'q'")
-
-(setf (gethash "break"  realgud:remake-command-hash) "break %l")
-(setf (gethash "eval"   realgud:remake-command-hash) "expand %s")
-(setf (gethash "remake" realgud-command-hash) realgud:remake-command-hash)
-
-;; Unsupported features:
-(setf (gethash "jump"  realgud:remake-command-hash) "*not-implemented*")
-
-(provide-me "realgud:remake-")
diff --git a/packages/realgud/realgud/debugger/remake/remake.el 
b/packages/realgud/realgud/debugger/remake/remake.el
deleted file mode 100644
index e07cb1b..0000000
--- a/packages/realgud/realgud/debugger/remake/remake.el
+++ /dev/null
@@ -1,90 +0,0 @@
-;; Copyright (C) 2015-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;;  `remake' Main interface to remake via Emacs
-(require 'load-relative)
-(require-relative-list '("../../common/helper") "realgud-")
-(require-relative-list '("../../common/track")  "realgud-")
-(require-relative-list '("../../common/run")    "realgud:")
-(require-relative-list '("core" "track-mode") "realgud:remake-")
-;; This is needed, or at least the docstring part of it is needed to
-;; get the customization menu to work in Emacs 24.
-(defgroup realgud:remake nil
-  "The realgud interface to the GNU Make debugger"
-  :group 'realgud
-  :group 'make
-  :version "24.3")
-
-(eval-when-compile (require 'cl-lib))
-
-(declare-function remake-query-cmdline  'realgud:remake-core)
-(declare-function remake-parse-cmd-args 'realgud:remake-core)
-(declare-function realgud:run-debugger  'realgud:run)
-(declare-function realgud:run-process   'realgud:run)
-
-(defun realgud:remake-run-debugger (&optional opt-command-line
-                                   no-reset)
-  "Invoke the a debugger and start the Emacs user interface.
-
-String OPT-COMMAND-LINE specifies how to run DEBUGGER-NAME. You
-will be prompted for a command line using QUERY-CMDLINE-FN is one
-isn't supplied.
-
-OPT-COMMAND-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by PARSE-CMD-FN and path elements found by that
-are expanded using `expand-file-name'.
-
-If successful, The command buffer of the debugger process is returned.
-Otherwise nil is returned.
-"
-  (let* ((cmd-str (or opt-command-line (remake-query-cmdline "remake")))
-        (cmd-args (split-string-and-unquote cmd-str))
-        (parsed-args (remake-parse-cmd-args cmd-args))
-        (debugger (car parsed-args))
-        (script-args (cl-caddr parsed-args))
-        (script-name (cadr parsed-args))
-        )
-    (realgud:run-process debugger script-name cmd-args
-                        realgud:remake-minibuffer-history no-reset)
-    )
-  )
-
-;; -------------------------------------------------------------------
-;; User definable variables
-;;
-
-(defcustom realgud:remake-command-name
-  ;;"remake --emacs 3"
-  "remake"
-  "File name for executing the GNU make debugger, remake, and command options.
-This should be an executable on your path, or an absolute file name."
-  :type 'string
-  :group 'realgud:remake)
-
-;;;###autoload
-(defun realgud:remake (&optional opt-cmd-line no-reset)
-  "See `realgud:remake' for details"
-  (interactive)
-  (realgud:remake-run-debugger opt-cmd-line no-reset)
-  )
-
-;;;###autoload
-(defalias 'remake 'realgud:remake)
-
-(provide-me "realgud-")
-;;; remake.el ends here
diff --git a/packages/realgud/realgud/debugger/remake/track-mode.el 
b/packages/realgud/realgud/debugger/remake/track-mode.el
deleted file mode 100644
index 2bc649f..0000000
--- a/packages/realgud/realgud/debugger/remake/track-mode.el
+++ /dev/null
@@ -1,69 +0,0 @@
-;; Copyright (C) 2012, 2014-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;;; GNU Make Debugger tracking a comint buffer.
-
-(require 'load-relative)
-(require-relative-list '(
-                        "../../common/cmds"
-                        "../../common/menu"
-                        "../../common/track"
-                        "../../common/track-mode"
-                        )
-                      "realgud-")
-(require-relative-list '("core" "init") "realgud:remake-")
-
-(declare-function realgud:track-set-debugger 'realgud-track-mode)
-(declare-function realgud-track-mode-setup   'realgud-track-mode)
-(declare-function realgud:track-set-debugger 'realgud-track-mode)
-
-(realgud-track-mode-vars "remake")
-
-(define-key remake-track-mode-map
-  (kbd "C-c !!") 'realgud:goto-lang-backtrace-line)
-(define-key remake-track-mode-map
-  (kbd "C-c !b") 'realgud:goto-debugger-backtrace-line)
-
-(defun remake-track-mode-hook()
-  (if remake-track-mode
-      (progn
-       (use-local-map remake-track-mode-map)
-       (message "using remake mode map")
-       )
-    (message "remake track-mode-hook disable called"))
-)
-
-(define-minor-mode remake-track-mode
-  "Minor mode for tracking remake source locations inside a process shell via 
realgud. remake is a GNU Make debugger.
-
-If called interactively with no prefix argument, the mode is toggled. A prefix 
argument, captured as ARG, enables the mode if the argument is positive, and 
disables it otherwise.
-
-\\{remake-track-mode-map}
-"
-  "Minor mode for tracking ruby debugging inside a process shell."
-  :init-value nil
-  ;; :lighter " remake"   ;; mode-line indicator from realgud-track is 
sufficient.
-  ;; The minor mode bindings.
-  :global nil
-  :group 'realgud:remake
-  :keymap remake-track-mode-map
-
-  (realgud:track-set-debugger "remake")
-  (if remake-track-mode
-      (progn
-       (realgud-track-mode-setup 't)
-        (remake-track-mode-hook))
-    (progn
-      (setq realgud-track-mode nil)
-      ))
-)
-
-(define-key remake-short-key-mode-map "T" 'realgud:cmd-backtrace)
-
-(provide-me "realgud:remake-")
diff --git a/packages/realgud/realgud/debugger/trepan.pl/Makefile.am 
b/packages/realgud/realgud/debugger/trepan.pl/Makefile.am
deleted file mode 100644
index 2c88842..0000000
--- a/packages/realgud/realgud/debugger/trepan.pl/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-include $(srcdir)/../common.mk
-
-lisp_files = $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-EXTRA_DIST = $(lisp_files)
diff --git a/packages/realgud/realgud/debugger/trepan.pl/backtrack-mode.el 
b/packages/realgud/realgud/debugger/trepan.pl/backtrack-mode.el
deleted file mode 100644
index 7f7728b..0000000
--- a/packages/realgud/realgud/debugger/trepan.pl/backtrack-mode.el
+++ /dev/null
@@ -1,73 +0,0 @@
-;; Copyright (C) 2011, 2014, 2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;;; Mode for parsing various kinds of backtraces found in Perl
-
-(require 'load-relative)
-(require-relative-list '(
-                        "../../common/cmds"
-                        "../../common/menu"
-                         "../../common/track-mode"
-                        "../../common/backtrack-mode"
-                        )
-                      "realgud-")
-(require-relative-list '("core" "init") "realgud:trepanpl-")
-(require-relative-list '("../../lang/perl") "realgud-lang-")
-
-(declare-function realgud-goto-line-for-pt
-                 'realgud-track-mode)
-(declare-function realgud-backtrack-set-debugger
-                 'realgud-common-backtrack-mode)
-(declare-function realgud-perl-populate-command-keys
-                 'realgud-lang-perl)
-
-(realgud-backtrack-mode-vars "trepanpl")
-(set-keymap-parent trepanpl-backtrack-mode-map realgud-backtrack-mode-map)
-
-(declare-function realgud-backtrack-mode(bool))
-
-(defun realgud:trepanpl-goto-control-frame-line (pt)
-  "Display the location mentioned by a control-frame line
-described by PT."
-  (interactive "d")
-  (realgud-goto-line-for-pt pt "control-frame"))
-
-(realgud-perl-populate-command-keys trepanpl-backtrack-mode-map)
-(define-key trepanpl-backtrack-mode-map
-  (kbd "C-c !c") 'realgud:trepanpl-goto-control-frame-line)
-
-(define-minor-mode trepanpl-backtrack-mode
-  "Minor mode for tracking ruby debugging inside a file which may not have 
process shell."
-  :init-value nil
-  ;; :lighter " trepanpl"   ;; mode-line indicator from realgud-track is 
sufficient.
-  ;; The minor mode bindings.
-  :global nil
-  :group 'realgud:trepanpl
-  :keymap trepanpl-backtrack-mode-map
-
-  (realgud-backtrack-set-debugger "trepan.pl")
-  (if trepanpl-backtrack-mode
-      (progn
-       (realgud-backtrack-mode 't)
-       (run-mode-hooks (intern (trepanpl-backtrack-mode-hook))))
-    (progn
-      (realgud-backtrack-mode nil)
-      ))
-)
-
-(defun trepanpl-backtrack-mode-hook()
-  (if trepanpl-backtrack-mode
-      (progn
-       (use-local-map trepanpl-backtrack-mode-map)
-       (message "using trepanpl mode map")
-       )
-    (message "trepan.pl backtrack-mode-hook disable called"))
-)
-
-(provide-me "realgud:trepanpl-")
diff --git a/packages/realgud/realgud/debugger/trepan.pl/core.el 
b/packages/realgud/realgud/debugger/trepan.pl/core.el
deleted file mode 100644
index bcd979c..0000000
--- a/packages/realgud/realgud/debugger/trepan.pl/core.el
+++ /dev/null
@@ -1,182 +0,0 @@
-;; Copyright (C) 2011-2012, 2014, 2016-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-(require 'load-relative)
-(require-relative-list '("../../common/track"
-                         "../../common/core"
-                         "../../common/eval"
-                         "../../common/lang")
-                       "realgud-")
-(require-relative-list '("init") "realgud:trepanpl-")
-
-(declare-function realgud:eval-strip-default 'realgud-eval)
-(declare-function realgud:expand-file-name-if-exists 'realgud-core)
-(declare-function realgud-parse-command-arg  'realgud-core)
-(declare-function realgud-query-cmdline      'realgud-core)
-(declare-function realgud-suggest-invocation 'realgud-core)
-
-;; FIXME: I think the following could be generalized and moved to
-;; realgud-... probably via a macro.
-(defvar realgud:trepanpl-minibuffer-history nil
-  "minibuffer history list for the command `realgud:trepan.pl'.")
-
-(easy-mmode-defmap realgud:trepanpl-minibuffer-local-map
-  '(("\C-i" . comint-dynamic-complete-filename))
-  "Keymap for minibuffer prompting of trepanpl startup command."
-  :inherit minibuffer-local-map)
-
-(defun realgud:trepanpl-eval-filter-callback(output-str)
-  (realgud:eval-strip-default realgud:trepanpl-prompt-regexp
-   (if (string-match realgud:trepanpl-eval-result-prefix-regexp output-str)
-       (substring output-str (match-end 0))
-     output-str)))
-
-;; FIXME: I think this code and the keymaps and history
-;; variable chould be generalized, perhaps via a macro.
-(defun realgud:trepanpl-query-cmdline (&optional opt-debugger)
-  (realgud-query-cmdline
-   'realgud:trepanpl-suggest-invocation
-   realgud:trepanpl-minibuffer-local-map
-   'realgud:trepanpl-minibuffer-history
-   opt-debugger))
-
-;;; FIXME: DRY this with other *-parse-cmd-args routines
-(defun realgud:trepanpl-parse-cmd-args (orig-args)
-  "Parse command line ORIG-ARGS for the annotate level and name of script to 
debug.
-
-ORIG_ARGS should contain a tokenized list of the command line to run.
-
-We return the a list containing:
-* the command processor (e.g. perl) and it's arguments if any - a list of 
strings
-* the name of the debugger given (e.g. trepan.pl) and its arguments - a list 
of strings
-* the script name and its arguments - list of strings
-
-For example for the following input:
-  (map 'list 'symbol-name
-   '(perl5.10 -w -I . trepan.pl --cd . ./gcd.pl a b))
-
-we might return:
-   ((\"perl\" \"-w\" \"-I\" \"/tmp\") (\"trepan.pl\" \"cd\" \"/tmp\") 
(\"/tmp/gcd.pl\" \"a\" \"b\"))
-
-Note that the script name path has been expanded via `expand-file-name'.
-"
-
-  ;; Parse the following kind of pattern:
-  ;;  [perl perl-options] trepanpl trepanpl-options script-name script-options
-  (let (
-        (args orig-args)
-        (pair)          ;; temp return from
-        (perl-opt-two-args '("0" "C" "D" "i" "I" "l" "m" "-module" "x"))
-        ;; Perl doesn't have mandatory 2-arg options in our sense,
-        ;; since the two args can be run together, e.g. "-C/tmp" or "-C /tmp"
-        ;;
-        (perl-two-args '())
-        ;; One dash is added automatically to the below, so
-        ;; h is really -h and -host is really --host.
-        (trepanpl-two-args '("h" "-host" "p" "-port"
-                           "I" "-include"))
-        (trepanpl-opt-two-args '())
-        (interp-regexp
-         (if (member system-type (list 'windows-nt 'cygwin 'msdos))
-             "^perl\\(?:5[0-9.]*\\)\\(.exe\\)?$"
-           "^perl\\(?:5[0-9.]*\\)?$"))
-
-        ;; Things returned
-        (script-name nil)
-        (debugger-name nil)
-        (interpreter-args '())
-        (debugger-args '())
-        (script-args '())
-        (annotate-p nil))
-
-    (if (not (and args))
-        ;; Got nothing: return '(nil, nil)
-        (list interpreter-args debugger-args script-args annotate-p)
-      ;; else
-      ;; Strip off optional "perl" or "perl5.10.1" etc.
-      (when (string-match interp-regexp
-                          (file-name-sans-extension
-                           (file-name-nondirectory (car args))))
-        (setq interpreter-args (list (pop args)))
-
-        ;; Strip off optional "perl" or "perl5.10.1" etc.
-        (while (and args
-                    (string-match "^-" (car args)))
-          (setq pair (realgud-parse-command-arg
-                      args perl-two-args perl-opt-two-args))
-          (nconc interpreter-args (car pair))
-          (setq args (cadr pair))))
-
-      ;; Remove "trepan.pl" from "trepan.pl --trepan.pl-options script
-      ;; --script-options"
-      (setq debugger-name (file-name-nondirectory (car args)))
-      (unless (string-match "^trepan.pl$" debugger-name)
-       (message
-        "Expecting debugger name `%s' to be `trepan.pl'"
-        debugger-name))
-      (setq debugger-args (list (pop args)))
-
-      ;; Skip to the first non-option argument.
-      (while (and args (not script-name))
-       (let ((arg (car args)))
-         (cond
-          ((member arg
-                   '("--cmddir" "--batch" "--cd" "--include" "-I" "--module" 
"-M"
-                     "-c" "--command"))
-           (setq arg (pop args))
-           (nconc debugger-args
-                  (list arg (expand-file-name (pop args)))))
-          ;; Other options with arguments.
-          ((string-match "^-" arg)
-           (setq pair (realgud-parse-command-arg
-                       args trepanpl-two-args trepanpl-opt-two-args))
-           (nconc debugger-args (car pair))
-           (setq args (cadr pair)))
-          ;; Anything else must be the script to debug.
-          (t (setq script-name (realgud:expand-file-name-if-exists arg))
-             (setq script-args (cons script-name (cdr args))))
-          )))
-      (list interpreter-args debugger-args script-args))
-    ))
-
-; # To silence Warning: reference to free variable
-(defvar realgud:trepanpl-command-name)
-
-(defun realgud:trepanpl-suggest-invocation (debugger-name)
-  "Suggest a trepanpl command invocation via `realgud-suggest-invocaton'"
-  (realgud-suggest-invocation (or debugger-name realgud:trepanpl-command-name)
-                             realgud:trepanpl-minibuffer-history
-                             "perl" "\\.pl$" "trepan.pl"))
-
-(defun realgud:trepanpl-reset ()
-  "Trepanpl cleanup - remove debugger's internal buffers (frame,
-breakpoints, etc.)."
-  (interactive)
-  ;; (trepanpl-breakpoint-remove-all-icons)
-  (dolist (buffer (buffer-list))
-    (when (string-match "\\*trepanpl-[a-z]+\\*" (buffer-name buffer))
-      (let ((w (get-buffer-window buffer)))
-        (when w
-          (delete-window w)))
-      (kill-buffer buffer))))
-
-;; (defun trepanpl-reset-keymaps()
-;;   "This unbinds the special debugger keys of the source buffers."
-;;   (interactive)
-;;   (setcdr (assq 'trepanpl-debugger-support-minor-mode minor-mode-map-alist)
-;;        trepanpl-debugger-support-minor-mode-map-when-deactive))
-
-
-(defun realgud:trepanpl-customize ()
-  "Use `customize' to edit the settings of the
-`realgud:trepan.pl' debugger."
-  (interactive)
-  (customize-group 'realgud:trepanpl))
-
-(provide-me "realgud:trepanpl-")
diff --git a/packages/realgud/realgud/debugger/trepan.pl/init.el 
b/packages/realgud/realgud/debugger/trepan.pl/init.el
deleted file mode 100644
index f3bf383..0000000
--- a/packages/realgud/realgud/debugger/trepan.pl/init.el
+++ /dev/null
@@ -1,281 +0,0 @@
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;; Trepanning Perl debugger
-(eval-when-compile (require 'cl-lib))   ;For setf.
-
-(require 'load-relative)
-(require-relative-list '("../../common/regexp"
-                        "../../common/loc"
-                        "../../common/init")
-                      "realgud-")
-(require-relative-list '("../../lang/perl") "realgud-lang-")
-
-(defvar realgud-pat-hash)
-(declare-function make-realgud-loc-pat (realgud-loc))
-
-(defvar realgud:trepanpl-pat-hash (make-hash-table :test 'equal)
-  "Hash key is the what kind of pattern we want to match:
-backtrace, prompt, etc.  The values of a hash entry is a
-realgud-loc-pat struct")
-
-;; Regular expression that describes a trepan.pl location generally shown
-;; before a command prompt. We include matching the source text so we
-;; can save that.
-;;
-;; Program-location lines look like this:
-;; -- File::Basename::(/usr/share/perl/5.14/File/Basename.pm:284 @0x8918b70)
-;; my $dirname = dirname(__FILE__);
-;;
-;; or for an eval'd expression:
-;; -- main::((eval 1189)[/tmp/test.pl:2] remapped /tmp/JLlH.pl:1 @0xadcbda0)
-;; $x = 1 + 2;
-;;
-;; or at a function call without the Perl OpCode position or source text:
-;; -> main::(example/gcd.pl:8)
-
-(setf (gethash "loc" realgud:trepanpl-pat-hash)
-      (make-realgud-loc-pat
-       :regexp (format ".. \\(?:.+::\\)?(\\(?:.+ \\(?:via\\|remapped\\) 
\\)?\\(.+\\):%s\\(?: @0x[0-9a-f]+\\)?)\\(?:\n\\(.*?\\)\n\\)?"
-                      realgud:regexp-captured-num)
-       :file-group 1
-       :line-group 2
-       :text-group 3
-       :ignore-file-re  realgud-perl-ignore-file-re)
-      )
-
-(defconst realgud:trepanpl-frame-start-regexp
-  "\\(^\\|\n\\)\\(?:-->\\|   \\) #")
-
-;; Regular expression that describes a trepanpl command prompt
-;; For example:
-;;   (trepanpl):
-;;   ((trepanpl)):
-;;   (trepanpl@main):
-;;   (trepanpl@55):
-(defconst realgud:trepanpl-prompt-regexp
-  "^(+trepanpl\\(@[0-9]+\\|@main\\)?)+: ")
-
-(setf (gethash "prompt" realgud:trepanpl-pat-hash)
-      (make-realgud-loc-pat
-       :regexp realgud:trepanpl-prompt-regexp
-       ))
-
-(defconst realgud:trepanpl-eval-result-prefix-regexp
-  "^\\$DB::D\\[[0-9]+\\] = ")
-
-(setf (gethash "prompt" realgud:trepanpl-pat-hash)
-      (make-realgud-loc-pat
-       :regexp realgud:trepanpl-prompt-regexp
-       ))
-
-
-(defconst realgud:trepanpl-frame-num-regexp
-  realgud:regexp-captured-num)
-
-;; Regular expression that describes a Perl backtrace line.
-;; For example:
-;; --> #0 @ = File::Basename::fileparse('/usr/local/bin/trepan.pl') in
-;;     file `/usr/share/perl/5.18.2/File/Basename.pm' at line 107
-;;     #1 @ = File::Basename::dirname('/usr/local/bin/trepan.pl') in
-;;     file `/usr/share/perl/5.18.2/File/Basename.pm' at line 294
-;;     #2 file `/usr/local/bin/trepan.pl' at line 11
-(setf (gethash "debugger-backtrace" realgud:trepanpl-pat-hash)
-  (make-realgud-loc-pat
-   :regexp (concat
-           realgud:trepanpl-frame-start-regexp
-           realgud:trepanpl-frame-num-regexp
-           "\\(?: [$@] = .* in\\)?"
-           "[\n\t ]+?file `"
-           "\\(.*\\)' at line "
-           realgud:regexp-captured-num)
-   :num 2
-   :file-group 3
-   :line-group 4
-   :ignore-file-re  realgud-perl-ignore-file-re)
-  )
-
-;;  Regular expression that describes location in a Perl errmsg
-(setf (gethash "perl-errmsg" realgud:trepanpl-pat-hash)
-      realgud-perl-errmsg-loc-pat)
-
-;;  Regular expression that describes a Perl Carp backtrace line.
-;;  at /tmp/foo.pl line 7
-;;     main::__ANON__('Illegal division by zero at /tmp/foo.pl line 4.\x{a}') 
called at /tmp/foo.pl line 4
-;;     main::foo(3) called at /tmp/foo.pl line 8
-(setf (gethash "lang-backtrace" realgud:trepanpl-pat-hash)
-      realgud-perl-carp-loc-pat)
-
-;; Regular expression that describes a "breakpoint set" line.
-;; For example:
-;;   Breakpoint 1 set in (eval 1177)[/Eval.pm:94] at line 5"
-;;   Breakpoint 2 set in /tmp/File/Basename.pm at line 215
-(setf (gethash "brkpt-set" realgud:trepanpl-pat-hash)
-      (make-realgud-loc-pat
-       :regexp (format "^Breakpoint %s set in[\n\t ]+\\(.+\\)[ \t\n]+at line 
\\([0-9]+\\)"
-                      realgud:regexp-captured-num)
-       :num 1
-       :file-group 2
-       :line-group 3
-       :ignore-file-re  realgud-perl-ignore-file-re)
-      )
-
-;; Regular expression that describes a debugger "delete" (breakpoint) response.
-;; For example:
-;;   Deleted breakpoint 1.
-(setf (gethash "brkpt-del" realgud:trepanpl-pat-hash)
-      (make-realgud-loc-pat
-       :regexp (format "^Deleted breakpoint %s\n"
-                      realgud:regexp-captured-num)
-       :num 1))
-
-;; Regular expression that describes a debugger "disable" (breakpoint) 
response.
-;; For example:
-;;   Breakpoint entry 4 disabled.
-(setf (gethash "brkpt-disable" realgud:trepanpl-pat-hash)
-      (make-realgud-loc-pat
-       :regexp (format "^Breakpoint %s disabled"
-                      realgud:regexp-captured-num)
-       :num 1))
-
-;; Regular expression that describes a debugger "enable" (breakpoint) response.
-;; For example:
-;;   Breakpoint 4 enabled.
-(setf (gethash "brkpt-enable" realgud:trepanpl-pat-hash)
-      (make-realgud-loc-pat
-       :regexp (format "^Breakpoint %s enabled"
-                      realgud:regexp-captured-num)
-       :num 1))
-
-(defconst realgud:trepanpl-selected-frame-indicator "-->"
-"String that describes which frame is selected in a debugger
-backtrace listing.")
-
-(defconst realgud:trepanpl-frame-file-regexp
-  "[ \t\n]+in file \\([^ \n]+\\)")
-
-(defconst realgud:trepanpl-debugger-name "trepan.pl" "Name of debugger")
-
-;; Top frame number
-(setf (gethash "top-frame-num" realgud:trepanpl-pat-hash) 0)
-
-;; realgud-loc-pat that describes a debugger "selected" frame in in
-;; a frame-motion command.
-;; For example:
-;; --> #1 TOP Object#<top /usr/local/bin/irb> in file /usr/local/bin/ipl at 
line 9
-(setf (gethash "selected-frame" realgud:trepanpl-pat-hash)
-      (make-realgud-loc-pat
-       :regexp
-       (format "^%s #\\([0-9]+\\) .*%s"
-              realgud:trepanpl-selected-frame-indicator
-              realgud:trepanpl-frame-file-regexp)
-       :num 1))
-
-;; Regular expression that for a termination message.
-(setf (gethash "termination" realgud:trepanpl-pat-hash)
-       "^trepan.pl: That's all, folks...\n")
-
-(setf (gethash "font-lock-keywords" realgud:trepanpl-pat-hash)
-      '(
-       ;; The frame number and first type name, if present.
-       ("^\\(-->\\|   \\)? #\\([0-9]+\\) \\([A-Z]+\\) 
*\\([A-Z_][a-zA-Z0-9_]*\\)[#]\\([a-zA-Z_][a-zA-Z_[0-9]]*\\)?"
-        (2 realgud-backtrace-number-face)
-        (3 font-lock-keyword-face)         ; e.g. METHOD, TOP
-        (4 font-lock-constant-face)        ; e.g. Object
-        (5 font-lock-function-name-face nil t))   ; t means optional
-       ;; Instruction sequence
-       ("<\\(.+\\)>"
-        (1 font-lock-variable-name-face))
-       ;; "::Type", which occurs in class name of function and in parameter 
list.
-       ;; Parameter sequence
-       ("(\\(.+\\))"
-        (1 font-lock-variable-name-face))
-       ;; "::Type", which occurs in class name of function and in parameter 
list.
-       ("::\\([a-zA-Z_][a-zA-Z0-9_]*\\)"
-        (1 font-lock-type-face))
-       ;; File name.
-       ("[ \t]+in file \\([^ ]+*\\)"
-        (1 realgud-file-name-face))
-       ;; Line number.
-       ("[ \t]+at line \\([0-9]+\\)$"
-        (1 realgud-line-number-face))
-       ;; Function name.
-       ("\\<\\([a-zA-Z_][a-zA-Z0-9_]*\\)\\.\\([a-zA-Z_][a-zA-Z0-9_]*\\)"
-        (1 font-lock-type-face)
-        (2 font-lock-function-name-face))
-       ;; (trepanpl-frames-match-current-line
-       ;;  (0 trepanpl-frames-current-frame-face append))
-       ))
-
-;; (setf (gethash "font-lock-keywords" realgud:trepanpl-pat-hash)
-;;       '(
-;;     ;; The frame number and first type name, if present.
-;;     ((concat realgud:trepanpl-frame-start-regexp " "
-;;                     realgud:trepanpl-frame-num-regexp " "
-;;                     "\\([A-Z]+\\) 
*\\([A-Z_][a-zA-Z0-9_]*\\)[#]\\([a-zA-Z_][a-zA-Z_[0-9]]*\\)?")
-;;      (2 realgud-backtrace-number-face)
-;;      (3 font-lock-keyword-face)         ; e.g. METHOD, TOP
-;;      (4 font-lock-constant-face)        ; e.g. Object
-;;      (5 font-lock-function-name-face nil t))   ; t means optional
-;;     ;; Instruction sequence
-;;     ("<\\(.+\\)>"
-;;      (1 font-lock-variable-name-face))
-;;     ;; "::Type", which occurs in class name of function and in
-;;     ;; parameter list.  Parameter sequence
-;;     ("(\\(.+\\))"
-;;      (1 font-lock-variable-name-face))
-;;     ;; "::Type", which occurs in class name of function and in
-;;     ;; parameter list.
-;;     ("::\\([a-zA-Z_][a-zA-Z0-9_]*\\)"
-;;      (1 font-lock-type-face))
-;;     ;; File name.
-;;     (realgud:trepanpl-frame-file-regexp (1 realgud-file-name-face))
-;;     ;; Line number.
-;;     (realgud:trepanpl-frame-line-regexp (1 realgud-line-number-face))
-;;     ;; Function name.
-;;     ("\\<\\([a-zA-Z_][a-zA-Z0-9_]*\\)\\.\\([a-zA-Z_][a-zA-Z0-9_]*\\)"
-;;      (1 font-lock-type-face)
-;;      (2 font-lock-function-name-face))
-;;     ;; (trepanpl-frames-match-current-line
-;;     ;;  (0 trepanpl-frames-current-frame-face append))
-;;     ))
-
-(setf (gethash "callback-eval-filter" realgud:trepanpl-pat-hash)
-      'realgud:trepanpl-eval-filter-callback)
-
-(setf (gethash realgud:trepanpl-debugger-name realgud-pat-hash) 
realgud:trepanpl-pat-hash)
-
-;;  Prefix used in variable names (e.g. short-key-mode-map) for
-;; this debugger
-
-(setf (gethash "trepan.pl" realgud:variable-basename-hash) "realgud:trepanpl")
-
-(defvar realgud:trepanpl-command-hash (make-hash-table :test 'equal)
-  "Hash key is command name like 'quit' and the value is
-  the trepanpl command to use, like 'quit!'")
-
-(setf (gethash "break"  realgud:trepanpl-command-hash) "break %x %l")
-(setf (gethash "eval"   realgud:trepanpl-command-hash) "eval %s")
-(setf (gethash "quit"   realgud:trepanpl-command-hash) "quit!")
-(setf (gethash "until"   realgud:trepanpl-command-hash) "continue %l")
-(setf (gethash realgud:trepanpl-debugger-name
-              realgud-command-hash) realgud:trepanpl-command-hash)
-
-;; Unsupported features:
-(setf (gethash "jump"  realgud:trepanpl-command-hash) "*not-implemented*")
-
-(provide-me "realgud:trepanpl-")
diff --git a/packages/realgud/realgud/debugger/trepan.pl/track-mode.el 
b/packages/realgud/realgud/debugger/trepan.pl/track-mode.el
deleted file mode 100644
index d29add5..0000000
--- a/packages/realgud/realgud/debugger/trepan.pl/track-mode.el
+++ /dev/null
@@ -1,81 +0,0 @@
-;; Copyright (C) 2011-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;; Perl trepanning Debugger tracking a comint buffer.
-
-(require 'load-relative)
-(require-relative-list '(
-                         "../../common/cmds"
-                         "../../common/menu"
-                         "../../common/track"
-                         "../../common/track-mode"
-                         )
-                       "realgud-")
-(require-relative-list '("core" "init") "realgud:trepanpl-")
-(require-relative-list '("../../lang/perl") "realgud-lang-")
-
-(realgud-track-mode-vars "realgud:trepanpl")
-
-(declare-function realgud-goto-line-for-pt   'realgud-track-mode)
-(declare-function realgud-track-mode         'realgud-track-mode)
-(declare-function realgud-track-mode-setup   'realgud-track-mode)
-(declare-function realgud:track-mode-hook    'realgud-track-mode)
-(declare-function realgud:track-set-debugger 'realgud-track-mode)
-(declare-function realgud-perl-populate-command-keys 'realgud-lang-perl)
-
-
-(defun realgud:trepanpl-goto-syntax-error-line (pt)
-  "Display the location mentioned in a Syntax error line
-described by PT."
-  (interactive "d")
-  (realgud-goto-line-for-pt pt "syntax-error"))
-
-(define-key realgud:trepanpl-track-mode-map
-  (kbd "C-c !s") 'realgud:trepanpl-goto-syntax-error-line)
-
-(realgud-perl-populate-command-keys realgud:trepanpl-track-mode-map)
-
-(defun realgud:trepanpl-track-mode-hook()
-  (if realgud:trepanpl-track-mode
-      (progn
-        (use-local-map realgud:trepanpl-track-mode-map)
-        (message "using trepanpl mode map")
-        )
-    (message "trepan.pl track-mode-hook disable called"))
-)
-
-(define-minor-mode realgud:trepanpl-track-mode
-  "Minor mode for tracking trepan.pl source locations inside a
-process shell via realgud. trepan.pl is a Perl debugger see URL
-`https://metacpan.org/pod/Devel::Trepan'.
-
-If called interactively with no prefix argument, the mode is
-toggled. A prefix argument, captured as ARG, enables the mode if
-the argument is positive, and disables it otherwise.
-"
-  :init-value nil
-  ;; :lighter " trepanpl"   ;; mode-line indicator from realgud-track is 
sufficient.
-  ;; The minor mode bindings.
-  :global nil
-  :group 'realgud:trepanpl
-  :keymap realgud:trepanpl-track-mode-map
-
-  (realgud:track-set-debugger "trepan.pl")
-  (if realgud:trepanpl-track-mode
-      (progn
-        (realgud-track-mode-setup 't)
-        (realgud:trepanpl-track-mode-hook))
-    (progn
-      (setq realgud-track-mode nil)
-      ))
-)
-
-(define-key realgud:trepanpl-short-key-mode-map "T" 'realgud:cmd-backtrace)
-
-(provide-me "realgud:trepanpl-")
diff --git a/packages/realgud/realgud/debugger/trepan.pl/trepanpl.el 
b/packages/realgud/realgud/debugger/trepan.pl/trepanpl.el
deleted file mode 100644
index 689c03d..0000000
--- a/packages/realgud/realgud/debugger/trepan.pl/trepanpl.el
+++ /dev/null
@@ -1,74 +0,0 @@
-;; Copyright (C) 2011, 2014, 2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;;  `trepanpl' Main interface to trepanpl via Emacs
-(require 'load-relative)
-(require-relative-list '("../../common/helper") "realgud-")
-(require-relative-list '("../../common/track")  "realgud-")
-(require-relative-list '("../../common/run")    "realgud:")
-(require-relative-list '("core" "track-mode")   "realgud:trepanpl-")
-
-;; This is needed, or at least the docstring part of it is needed to
-;; get the customization menu to work in Emacs 24.
-(defgroup realgud:trepanpl nil
-  "The realgud interface to the Perl \"trepanning\" debugger"
-  :group 'perl
-  :group 'realgud
-  :version "24.3")
-
-;; -------------------------------------------------------------------
-;; User definable variables
-;;
-
-(defcustom realgud:trepanpl-command-name
-  "trepan.pl"
-  "File name for executing the Perl debugger and command options.
-This should be an executable on your path, or an absolute file name."
-  :type 'string
-  :group 'realgud:trepanpl)
-
-;; -------------------------------------------------------------------
-;; The end.
-;;
-
-(declare-function realgud:trepanpl-track-mode     'realgud-trepanpl-track)
-(declare-function realgud:trepanpl-query-cmdline  'realgud-trepanpl-core)
-(declare-function realgud:trepanpl-parse-cmd-args 'realgud-trepanpl-core)
-(declare-function realgud:run-debugger             'realgud:run)
-
-;;;###autoload
-(defun realgud:trepan.pl (&optional opt-cmd-line no-reset)
-  "Invoke the trepan.pl Perl debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE specifies how to run trepan.pl. You will be prompted
-for a command line is one isn't supplied.
-
-OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `realgud:trepanpl-parse-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-"
-  (interactive)
-  (realgud:run-debugger "trepan.pl" 'realgud:trepanpl-query-cmdline
-                       'realgud:trepanpl-parse-cmd-args
-                       'realgud:trepanpl-minibuffer-history
-                       opt-cmd-line no-reset))
-
-;;;###autoload
-(defalias 'trepan.pl 'realgud:trepan.pl)
-(provide-me "realgud-")
-;;; trepanpl.el ends here
diff --git a/packages/realgud/realgud/debugger/trepan/Makefile.am 
b/packages/realgud/realgud/debugger/trepan/Makefile.am
deleted file mode 100644
index 2c88842..0000000
--- a/packages/realgud/realgud/debugger/trepan/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-include $(srcdir)/../common.mk
-
-lisp_files = $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-EXTRA_DIST = $(lisp_files)
diff --git a/packages/realgud/realgud/debugger/trepan/backtrack-mode.el 
b/packages/realgud/realgud/debugger/trepan/backtrack-mode.el
deleted file mode 100644
index d92b6b7..0000000
--- a/packages/realgud/realgud/debugger/trepan/backtrack-mode.el
+++ /dev/null
@@ -1,80 +0,0 @@
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;;; Mode for parsing various kinds of backtraces found in Ruby
-
-(require 'load-relative)
-(require-relative-list '(
-                        "../../common/cmds"
-                        "../../common/menu"
-                        "../../common/track-mode"
-                        "../../common/backtrack-mode"
-                        )
-                      "realgud-")
-(require-relative-list '("core" "init") "realgud:trepan-")
-(require-relative-list '("../../lang/ruby") "realgud-lang-")
-
-(realgud-backtrack-mode-vars "trepan")
-(set-keymap-parent trepan-backtrack-mode-map realgud-backtrack-mode-map)
-
-(declare-function realgud-backtrack-mode         
'realgud-common-backtrack-mode)
-(declare-function realgud-backtrack-set-debugger 
'realgud-common-backtrack-mode)
-(declare-function realgud-goto-line-for-pt       
'realgud-common-backtrack-mode)
-(declare-function realgud:ruby-populate-command-keys 'realgud-lang-ruby)
-
-(defun realgud:trepan-goto-control-frame-line (pt)
-  "Display the location mentioned by a control-frame line
-described by PT."
-  (interactive "d")
-  (realgud-goto-line-for-pt pt "control-frame"))
-
-(realgud:ruby-populate-command-keys trepan-backtrack-mode-map)
-(define-key trepan-backtrack-mode-map
-  (kbd "C-c !c") 'realgud:trepan-goto-control-frame-line)
-
-(define-minor-mode trepan-backtrack-mode
-  "Minor mode for tracking ruby debugging inside a file which may not have 
process shell.
-
-\\{trepan-backtrack-mode-map}
-"
-  :init-value nil
-  ;; :lighter " trepan"   ;; mode-line indicator from realgud-track is 
sufficient.
-  ;; The minor mode bindings.
-  :global nil
-  :group 'realgud:trepan
-  :keymap trepan-backtrack-mode-map
-
-  (realgud-backtrack-set-debugger "trepan")
-  (if trepan-backtrack-mode
-      (progn
-       (realgud-backtrack-mode 't)
-       (run-mode-hooks (intern (trepan-backtrack-mode-hook))))
-    (progn
-      (realgud-backtrack-mode nil)
-      ))
-)
-
-(defun trepan-backtrack-mode-hook()
-  (if trepan-backtrack-mode
-      (progn
-       (use-local-map trepan-backtrack-mode-map)
-       (message "using trepan mode map")
-       )
-    (message "trepan backtrack-mode-hook disable called"))
-)
-
-(provide-me "realgud:trepan-")
diff --git a/packages/realgud/realgud/debugger/trepan/core.el 
b/packages/realgud/realgud/debugger/trepan/core.el
deleted file mode 100644
index a844208..0000000
--- a/packages/realgud/realgud/debugger/trepan/core.el
+++ /dev/null
@@ -1,242 +0,0 @@
-;; Copyright (C) 2010, 2012, 2014-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-(require 'compile) ;; for compilation-find-file
-(require 'load-relative)
-(require-relative-list '("../../common/track"
-                         "../../common/core"
-                         "../../common/lang")
-                       "realgud-")
-(require-relative-list '("init") "realgud:trepan-")
-
-(declare-function realgud:strip              'realgud)
-(declare-function realgud:expand-file-name-if-exists 'realgud-core)
-(declare-function realgud-parse-command-arg  'realgud-core)
-(declare-function realgud-query-cmdline      'realgud-core)
-(declare-function realgud-suggest-invocation 'realgud-core)
-(declare-function realgud:file-loc-from-line 'realgud-file)
-
-;; FIXME: I think the following could be generalized and moved to
-;; realgud-... probably via a macro.
-(defvar realgud:trepan-minibuffer-history nil
-  "minibuffer history list for the command `realgud:trepan'.")
-
-(easy-mmode-defmap trepan-minibuffer-local-map
-  '(("\C-i" . comint-dynamic-complete-filename))
-  "Keymap for minibuffer prompting of gud startup command."
-  :inherit minibuffer-local-map)
-
-(defvar realgud:trepan-file-remap (make-hash-table :test 'equal)
-  "How to remap Python files in trepan when we otherwise can't
-  find in the filesystem. The hash key is the file string we saw,
-  and the value is associated filesystem string presumably in the
-  filesystem")
-
-;; FIXME: this code could be generalized and put in a common place.
-(defun realgud:trepan-find-file(filename)
-  "A find-file specific for trepan. We strip off trailing
-blanks. Failing that we will prompt for a mapping and save that
-in variable `realgud:trepan-file-remap' when that works. In the
-future, we may also consult RUBYPATH."
-  (let* ((transformed-file)
-        (stripped-filename (realgud:strip filename))
-        ;; (ignore-file-re)
-       )
-    (cond
-     ((file-exists-p filename) filename)
-     ((file-exists-p stripped-filename) stripped-filename)
-     ;; ((string-match ((ignore-file-re filename)
-     ;;        (message "tracking ignored for psuedo-file: %s" filename) nil)
-     ('t
-      ;; FIXME search RUBYLIB if not absolute file?
-      (if (gethash filename realgud-file-remap)
-         (let ((remapped-filename))
-           (setq remapped-filename (gethash filename 
realgud:trepan-file-remap))
-           (if (file-exists-p remapped-filename)
-               remapped-filename
-             ;; else
-             (and (remhash filename realgud-file-remap)) nil)
-           ;; else
-           (let ((remapped-filename))
-             (setq remapped-filename
-                   (buffer-file-name
-                    (compilation-find-file (point-marker) stripped-filename
-                                           nil "%s.rb")))
-             (when (and remapped-filename (file-exists-p remapped-filename))
-               (puthash filename remapped-filename realgud-file-remap)
-               remapped-filename
-               ))
-           ))
-      ))
-    ))
-
-(defun realgud:trepan-loc-fn-callback(text filename lineno source-str
-                                          ignore-file-re cmd-mark)
-  (realgud:file-loc-from-line filename lineno
-                             cmd-mark source-str nil nil
-                             'realgud:trepan-find-file))
-
-;; FIXME: I think this code and the keymaps and history
-;; variable chould be generalized, perhaps via a macro.
-(defun realgud:trepan-query-cmdline (&optional opt-debugger)
-  (realgud-query-cmdline
-   'trepan-suggest-invocation
-   trepan-minibuffer-local-map
-   'realgud:trepan-minibuffer-history
-   opt-debugger))
-
-(defun realgud:trepan-parse-cmd-args (orig-args)
-  "Parse command line ARGS for the annotate level and name of script to debug.
-
-ORIG-ARGS should contain a tokenized list of the command line to run.
-
-We return the a list containing
-
-* the command processor (e.g. ruby) and it's arguments if any - a
-  list of strings
-
-* the name of the debugger given (e.g. trepan) and its arguments
-  - a list of strings
-
-* the script name and its arguments - list of strings
-
-* whether the annotate or emacs option was given ('-A',
-  '--annotate' or '--emacs) - a boolean
-
-For example for the following input
-  (map 'list 'symbol-name
-   '(ruby1.9 -W -C /tmp trepan --emacs ./gcd.rb a b))
-
-we might return:
-   ((ruby1.9 -W -C) (trepan --emacs) (./gcd.rb a b) 't)
-
-Note that the script name path has been expanded via `expand-file-name'.
-"
-
-  ;; Parse the following kind of pattern:
-  ;;  [ruby ruby-options] trepan trepan-options script-name script-options
-  (let (
-        (args orig-args)
-        (pair)          ;; temp return from
-        (ruby-opt-two-args '("0" "C" "e" "E" "F" "i"))
-        ;; Ruby doesn't have mandatory 2-arg options in our sense,
-        ;; since the two args can be run together, e.g. "-C/tmp" or "-C /tmp"
-        ;;
-        (ruby-two-args '())
-        ;; One dash is added automatically to the below, so
-        ;; h is really -h and -host is really --host.
-        (trepan-two-args '("h" "-host" "p" "-port"
-                           "I" "-include" "-r" "-require"))
-        (trepan-opt-two-args '())
-        (interp-regexp
-         (if (member system-type (list 'windows-nt 'cygwin 'msdos))
-             "^ruby[-0-9]*\\(.exe\\)?$"
-           "^ruby[-0-9]*$"))
-
-        ;; Things returned
-        (script-name nil)
-        (debugger-name nil)
-        (interpreter-args '())
-        (debugger-args '())
-        (script-args '())
-        (annotate-p nil))
-
-    (if (not (and args))
-        ;; Got nothing: return '(nil, nil)
-        (list interpreter-args debugger-args script-args annotate-p)
-      ;; else
-      ;; Strip off optional "ruby" or "ruby182" etc.
-      (when (string-match interp-regexp
-                          (file-name-sans-extension
-                           (file-name-nondirectory (car args))))
-        (setq interpreter-args (list (pop args)))
-
-        ;; Strip off Ruby-specific options
-        (while (and args
-                    (string-match "^-" (car args)))
-          (setq pair (realgud-parse-command-arg
-                      args ruby-two-args ruby-opt-two-args))
-          (nconc interpreter-args (car pair))
-          (setq args (cadr pair))))
-
-      ;; Remove "trepan" from "trepan --trepan-options script
-      ;; --script-options"
-      (setq debugger-name (file-name-sans-extension
-                           (file-name-nondirectory (car args))))
-      (unless (string-match "^trepan$" debugger-name)
-        (message
-         "Expecting debugger name `%s' to be `trepan'"
-         debugger-name))
-      (setq debugger-args (list (pop args)))
-
-      ;; Skip to the first non-option argument.
-      (while (and args (not script-name))
-        (let ((arg (car args)))
-          (cond
-           ;; Annotation or emacs option with level number.
-           ((or (member arg '("--annotate" "-A"))
-                (equal arg "--emacs"))
-            (setq annotate-p t)
-            (nconc debugger-args (list (pop args))))
-           ;; Combined annotation and level option.
-           ((string-match "^--annotate=[0-9]" arg)
-            (nconc debugger-args (list (pop args)) )
-            (setq annotate-p t))
-          ;; path-argument options
-          ((member arg '("--include" "-I" "--require" "-I"))
-           (setq arg (pop args))
-           (nconc debugger-args
-                  (list arg (realgud:expand-file-name-if-exists
-                             (pop args)))))
-           ;; Options with arguments.
-           ((string-match "^-" arg)
-            (setq pair (realgud-parse-command-arg
-                        args trepan-two-args trepan-opt-two-args))
-            (nconc debugger-args (car pair))
-            (setq args (cadr pair)))
-           ;; Anything else must be the script to debug.
-          (t (setq script-name (realgud:expand-file-name-if-exists arg))
-             (setq script-args (cons script-name (cdr args))))
-           )))
-      (list interpreter-args debugger-args script-args annotate-p))))
-
-;; To silence Warning: reference to free variable
-(defvar realgud:trepan-command-name)
-
-(defun trepan-suggest-invocation (debugger-name)
-  "Suggest a trepan command invocation via `realgud-suggest-invocaton'"
-  (realgud-suggest-invocation realgud:trepan-command-name
-                             realgud:trepan-minibuffer-history
-                             "ruby" "\\.rb$" "trepan"))
-
-(defun trepan-reset ()
-  "Trepan cleanup - remove debugger's internal buffers (frame,
-breakpoints, etc.)."
-  (interactive)
-  ;; (trepan-breakpoint-remove-all-icons)
-  (dolist (buffer (buffer-list))
-    (when (string-match "\\*trepan-[a-z]+\\*" (buffer-name buffer))
-      (let ((w (get-buffer-window buffer)))
-        (when w
-          (delete-window w)))
-      (kill-buffer buffer))))
-
-;; (defun trepan-reset-keymaps()
-;;   "This unbinds the special debugger keys of the source buffers."
-;;   (interactive)
-;;   (setcdr (assq 'trepan-debugger-support-minor-mode minor-mode-map-alist)
-;;        trepan-debugger-support-minor-mode-map-when-deactive))
-
-
-(defun realgud:trepan-customize ()
-  "Use `customize' to edit the settings of the `trepan' debugger."
-  (interactive)
-  (customize-group 'realgud:trepan))
-
-(provide-me "realgud:trepan-")
diff --git a/packages/realgud/realgud/debugger/trepan/init.el 
b/packages/realgud/realgud/debugger/trepan/init.el
deleted file mode 100644
index f66e3e8..0000000
--- a/packages/realgud/realgud/debugger/trepan/init.el
+++ /dev/null
@@ -1,230 +0,0 @@
-;; Copyright (C) 2010, 2014-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;; Ruby Trepanning debugger
-(eval-when-compile (require 'cl-lib))   ;For setf.
-
-(require 'load-relative)
-(require-relative-list '("../../common/regexp"
-                        "../../common/loc"
-                        "../../common/init")
-                      "realgud-")
-(require-relative-list '("../../lang/ruby") "realgud-lang-")
-
-(defvar realgud-pat-hash)
-(declare-function make-realgud-loc-pat (realgud-loc))
-
-(defvar realgud:trepan-pat-hash (make-hash-table :test 'equal)
-  "Hash key is the what kind of pattern we want to match:
-backtrace, prompt, etc.  The values of a hash entry is a
-realgud-loc-pat struct")
-
-(setf (gethash "loc-callback-fn" realgud:trepan-pat-hash) 
'realgud:trepan-loc-fn-callback)
-
-;; Regular expression that describes a trepan location generally shown
-;; before a command prompt.
-;; For example:
-;; -- (/tmp/linecache.rb:64)
-;; C> (/tmp/eval.rb:2)
-(setf (gethash "loc" realgud:trepan-pat-hash)
-      (make-realgud-loc-pat
-       :regexp ".. (\\(?:.+ \\(?:via\\|remapped\\) 
\\)?\\(.+\\):\\([0-9]+\\)\\(?: @[0-9]+\\)?)\\(?:\n\\(.*?\\)\n\\)?"
-       :file-group 1
-       :line-group 2
-       :text-group 3
-       :ignore-file-re  "(eval: .*)"
-       ))
-
-;; Regular expression that describes a trepan command prompt
-;; For example:
-;;   (trepan):
-;;   ((trepan)):
-;;   (trepan@main):
-;;   (trepan@55):
-(setf (gethash "prompt" realgud:trepan-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^(+trepan\\(@[0-9]+\\|@main\\)?)+: "
-       ))
-
-;; Regular expression that describes a Ruby YARV 1.9 syntax error line.
-(setf (gethash "syntax-error" realgud:trepan-pat-hash)
-      realgud-ruby-YARV-syntax-error-pat)
-
-;; Regular expression that describes a Ruby YARV backtrace line.
-;; For example:
-;;     from /ruby/gems/2.2.0/gems/fog-1.32.0/lib/fog/digitalocean.rb:1:in 
`<top (required)>'
-;;     from /Users/fog-1.32.0/lib/fog.rb:28:in `require'
-(setf (gethash "lang-backtrace" realgud:trepan-pat-hash)
-      realgud-ruby-backtrace-loc-pat)
-
-;;  realgud-loc-pat that describes a ruby $! backtrace
-(setf (gethash "dollar-bang-backtrace" realgud:trepan-pat-hash)
-      realgud-ruby-dollar-bang-loc-pat)
-
-;; realgud-loc-pat that describes a "breakpoint set" line.
-;; For example:
-;;   Breakpoint 1 set at VM offset 2 of instruction sequence "require",
-;;     line 29 in file <internal:lib/rubygems/custom_require>.
-;;   Breakpoint 2 set at VM offset 29 of instruction sequence "<top /xx.rb>",
-;;     line 64 in file /src/external-vcs/linecache/trunk/lib/linecache.rb.
-(setf (gethash "brkpt-set" realgud:trepan-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^Breakpoint \\([0-9]+\\) set at .*[\n\t ]+line \\([0-9]+\\)[ 
\t\n]+in file \\(.+\\)."
-       :num 1
-       :file-group 3
-       :line-group 2))
-
-;; realgud-loc-pat that describes a debugger "delete" (breakpoint) response.
-;; For example:
-;;   Deleted breakpoint 1.
-(setf (gethash "brkpt-del" realgud:trepan-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^Deleted breakpoint \\([0-9]+\\).\n"
-       :num 1))
-
-(defconst realgud:trepan-selected-frame-indicator "-->"
-"String that describes which frame is selected in a debugger
-backtrace listing.")
-
-(defconst realgud:trepan-frame-file-regexp
-  "[ \t\n]+in file \\([^ \n]+\\)")
-
-(defconst realgud:trepan-debugger-name "trepan" "Name of debugger")
-
-;; Top frame number
-(setf (gethash "top-frame-num" realgud:trepan-pat-hash) 0)
-
-;; realgud-loc-pat that describes a debugger "selected" frame in in
-;; a frame-motion command.
-;; For example:
-;; --> #1 TOP Object#<top /usr/local/bin/irb> in file /usr/local/bin/irb at 
line 9
-(setf (gethash "selected-frame" realgud:trepan-pat-hash)
-      (make-realgud-loc-pat
-       :regexp
-       (format "^%s #\\([0-9]+\\) .*%s"
-              realgud:trepan-selected-frame-indicator
-              realgud:trepan-frame-file-regexp)
-       :num 1))
-
-(setf (gethash "control-frame" realgud:trepan-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^c:\\([0-9]+\\) p:\\([0-9]+\\) s:\\([0-9]+\\) b:\\([0-9]+\\) 
l:\\([0-9a-f]+\\) d:\\([0-9a-f]+\\) \\([A-Z]+\\) \\(.+\\):\\([0-9]+\\)"
-       :file-group 8
-       :line-group 9))
-
-;;  realgud-loc-pat that describes a Ruby $! string
-(setf (gethash "dollar-bang" realgud:trepan-pat-hash)
-      realgud-ruby-dollar-bang-loc-pat)
-
-;;  realgud-loc-pat that describes debugger "backtrace" command line.
-;;  e.g.
-;; --> #0 METHOD Object#require(path) in file <internal:lib/require> at line 28
-;;     #1 TOP Object#<top /tmp/linecache.rb> in file /tmp/linecache.rb
-(setf (gethash "debugger-backtrace" realgud:trepan-pat-hash)
-      (make-realgud-loc-pat
-       :regexp         (concat realgud:trepan-frame-start-regexp " "
-                       realgud:trepan-frame-num-regexp " "
-                       "\\([A-Z]+\\) *\\([A-Z_][a-zA-Z0-9_]*\\)[#]\\(.*\\)"
-                       realgud:trepan-frame-file-regexp
-                       "\\(?:" realgud:trepan-frame-line-regexp "\\)?"
-                       )
-       :num 2
-       :file-group 6
-       :line-group 7)
-      )
-
-;; realgud-loc-pat that for a termination message.
-(setf (gethash "termination" realgud:trepan-pat-hash)
-       "^trepan: That's all, folks...\n")
-
-(setf (gethash "font-lock-keywords" realgud:trepan-pat-hash)
-      '(
-       ;; The frame number and first type name, if present.
-       ("^\\(-->\\|   \\)? #\\([0-9]+\\) \\([A-Z]+\\) 
*\\([A-Z_][a-zA-Z0-9_]*\\)[#]\\([a-zA-Z_][a-zA-Z_[0-9]]*\\)?"
-        (2 realgud-backtrace-number-face)
-        (3 font-lock-keyword-face)         ; e.g. METHOD, TOP
-        (4 font-lock-constant-face)        ; e.g. Object
-        (5 font-lock-function-name-face nil t))   ; t means optional
-       ;; Instruction sequence
-       ("<\\(.+\\)>"
-        (1 font-lock-variable-name-face))
-       ;; "::Type", which occurs in class name of function and in parameter 
list.
-       ;; Parameter sequence
-       ("(\\(.+\\))"
-        (1 font-lock-variable-name-face))
-       ;; "::Type", which occurs in class name of function and in parameter 
list.
-       ("::\\([a-zA-Z_][a-zA-Z0-9_]*\\)"
-        (1 font-lock-type-face))
-       ;; File name.
-       ("[ \t]+in file \\([^ ]+*\\)"
-        (1 realgud-file-name-face))
-       ;; Line number.
-       ("[ \t]+at line \\([0-9]+\\)$"
-        (1 realgud-line-number-face))
-       ;; Function name.
-       ("\\<\\([a-zA-Z_][a-zA-Z0-9_]*\\)\\.\\([a-zA-Z_][a-zA-Z0-9_]*\\)"
-        (1 font-lock-type-face)
-        (2 font-lock-function-name-face))
-       ;; (trepan-frames-match-current-line
-       ;;  (0 trepan-frames-current-frame-face append))
-       ))
-
-;; (setf (gethash "font-lock-keywords" realgud:trepan-pat-hash)
-;;       '(
-;;     ;; The frame number and first type name, if present.
-;;     ((concat realgud:trepan-frame-start-regexp " "
-;;                     realgud:trepan-frame-num-regexp " "
-;;                     "\\([A-Z]+\\) 
*\\([A-Z_][a-zA-Z0-9_]*\\)[#]\\([a-zA-Z_][a-zA-Z_[0-9]]*\\)?")
-;;      (2 realgud-backtrace-number-face)
-;;      (3 font-lock-keyword-face)         ; e.g. METHOD, TOP
-;;      (4 font-lock-constant-face)        ; e.g. Object
-;;      (5 font-lock-function-name-face nil t))   ; t means optional
-;;     ;; Instruction sequence
-;;     ("<\\(.+\\)>"
-;;      (1 font-lock-variable-name-face))
-;;     ;; "::Type", which occurs in class name of function and in
-;;     ;; parameter list.  Parameter sequence
-;;     ("(\\(.+\\))"
-;;      (1 font-lock-variable-name-face))
-;;     ;; "::Type", which occurs in class name of function and in
-;;     ;; parameter list.
-;;     ("::\\([a-zA-Z_][a-zA-Z0-9_]*\\)"
-;;      (1 font-lock-type-face))
-;;     ;; File name.
-;;     (realgud:trepan-frame-file-regexp (1 realgud-file-name-face))
-;;     ;; Line number.
-;;     (realgud:trepan-frame-line-regexp (1 realgud-line-number-face))
-;;     ;; Function name.
-;;     ("\\<\\([a-zA-Z_][a-zA-Z0-9_]*\\)\\.\\([a-zA-Z_][a-zA-Z0-9_]*\\)"
-;;      (1 font-lock-type-face)
-;;      (2 font-lock-function-name-face))
-;;     ;; (trepan-frames-match-current-line
-;;     ;;  (0 trepan-frames-current-frame-face append))
-;;     ))
-
-(setf (gethash realgud:trepan-debugger-name realgud-pat-hash) 
realgud:trepan-pat-hash)
-
-(defvar realgud:trepan-command-hash (make-hash-table :test 'equal)
-  "Hash key is command name like 'quit' and the value is
-  the trepan command to use, like 'quit!'")
-
-(setf (gethash "quit" realgud:trepan-command-hash) "quit!")
-(setf (gethash "shell" realgud:trepan-command-hash) "irb")
-(setf (gethash realgud:trepan-debugger-name
-              realgud-command-hash) realgud:trepan-command-hash)
-
-(provide-me "realgud:trepan-")
diff --git a/packages/realgud/realgud/debugger/trepan/track-mode.el 
b/packages/realgud/realgud/debugger/trepan/track-mode.el
deleted file mode 100644
index f5fafb2..0000000
--- a/packages/realgud/realgud/debugger/trepan/track-mode.el
+++ /dev/null
@@ -1,94 +0,0 @@
-;; Copyright (C) 2010, 2012-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;;; Ruby "trepan" Debugger tracking a comint or eshell buffer.
-
-(require 'load-relative)
-(require-relative-list '(
-                        "../../common/cmds"
-                        "../../common/menu"
-                        "../../common/track"
-                        "../../common/track-mode"
-                        )
-                      "realgud-")
-(require-relative-list '("core" "init") "realgud:trepan-")
-(require-relative-list '("../../lang/ruby") "realgud-lang-")
-
-(declare-function realgud-track-mode 'realgud-track-mode)
-(declare-function realgud-track-mode-hook 'realgud-track-mode)
-(declare-function realgud-track-mode-setup 'realgud-track-mode)
-(declare-function realgud:track-set-debugger 'realgud-track-mode)
-(declare-function realgud-goto-line-for-pt 'realgud-track-mode)
-
-(realgud-track-mode-vars "trepan")
-
-(define-key realgud-track-mode-map
-  (kbd "C-c !!") 'realgud:goto-lang-backtrace-line)
-(define-key realgud-track-mode-map
-  (kbd "C-c !b") 'realgud:goto-debugger-backtrace-line)
-
-(declare-function realgud:ruby-populate-command-keys 'realgud-lang-ruby)
-
-(defun realgud:trepan-goto-control-frame-line (pt)
-  "Display the location mentioned by a control-frame line
-described by PT."
-  (interactive "d")
-  (realgud-goto-line-for-pt pt "control-frame"))
-
-(defun realgud:trepan-goto-syntax-error-line (pt)
-  "Display the location mentioned in a Syntax error line
-described by PT."
-  (interactive "d")
-  (realgud-goto-line-for-pt pt "syntax-error"))
-
-(realgud:ruby-populate-command-keys trepan-track-mode-map)
-
-(define-key trepan-track-mode-map
-  (kbd "C-c !c") 'realgud:trepan-goto-control-frame-line)
-(define-key trepan-track-mode-map
-  (kbd "C-c !s") 'realgud:trepan-goto-syntax-error-line)
-
-(defun trepan-track-mode-hook()
-  (if trepan-track-mode
-      (progn
-       (use-local-map trepan-track-mode-map)
-       (message "using trepan mode map")
-       )
-    (message "trepan track-mode-hook disable called"))
-)
-
-(define-minor-mode trepan-track-mode
-  "Minor mode for tracking trepan source locations inside a process shell via 
realgud. trepan is a Ruby debugger.
-
-If called interactively with no prefix argument, the mode is toggled. A prefix 
argument, captured as ARG, enables the mode if the argument is positive, and 
disables it otherwise.
-
-\\{trepan-track-mode-map}
-"
-  :init-value nil
-  ;; :lighter " trepan"   ;; mode-line indicator from realgud-track is 
sufficient.
-  ;; The minor mode bindings.
-  :global nil
-  :group 'realgud:trepan
-  :keymap trepan-track-mode-map
-  (realgud:track-set-debugger "trepan")
-  (if trepan-track-mode
-      (progn
-       (realgud-track-mode-setup 't)
-        (trepan-track-mode-hook))
-    (progn
-      (setq realgud-track-mode nil)
-      ))
-)
-
-(provide-me "realgud:trepan-")
diff --git a/packages/realgud/realgud/debugger/trepan/trepan.el 
b/packages/realgud/realgud/debugger/trepan/trepan.el
deleted file mode 100644
index d98c129..0000000
--- a/packages/realgud/realgud/debugger/trepan/trepan.el
+++ /dev/null
@@ -1,72 +0,0 @@
-;; Copyright (C) 2010-2011, 2013-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;;  `trepan' Main interface to trepan via Emacs
-(require 'load-relative)
-(require-relative-list '("../../common/helper") "realgud-")
-(require-relative-list '("../../common/run")    "realgud:")
-(require-relative-list '("core" "track-mode") "realgud:trepan-")
-
-(declare-function realgud:trepan-query-cmdline  'realgud:trepan-core)
-(declare-function realgud:trepan-parse-cmd-args 'realgud:trepan-core)
-(declare-function realgud:run-debugger 'realgud:run)
-
-;; This is needed, or at least the docstring part of it is needed to
-;; get the customization menu to work in Emacs 24.
-(defgroup realgud:trepan nil
-  "The realgud interface to the Ruby 1.9.2 1.9.3 \"trepanning\" debugger"
-  :group 'ruby
-  :group 'realgud
-  :version "24.3")
-
-;; -------------------------------------------------------------------
-;; User-definable variables
-;;
-
-(defcustom realgud:trepan-command-name
-  ;;"trepan --emacs 3"
-  "trepan"
-  "File name for executing the Ruby debugger and command options.
-This should be an executable on your path, or an absolute file name."
-  :type 'string
-  :group 'realgud:trepan)
-
-;;;###autoload
-(defun realgud:trepan (&optional opt-cmd-line no-reset)
-  "Invoke the trepan Ruby debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `trepan-parse-cmd-args' and path elements found by that
-are expanded using `expand-file-name'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-"
-  (interactive)
-  (realgud:run-debugger "trepan" 'realgud:trepan-query-cmdline
-                       'realgud:trepan-parse-cmd-args
-                       'realgud:trepan-minibuffer-history
-                       opt-cmd-line no-reset)
-  )
-
-;;;###autoload
-(defalias 'trepan 'realgud:trepan)
-(provide-me "realgud-")
-;;; trepan.el ends here
diff --git a/packages/realgud/realgud/debugger/trepan2/Makefile.am 
b/packages/realgud/realgud/debugger/trepan2/Makefile.am
deleted file mode 100644
index e6c68b4..0000000
--- a/packages/realgud/realgud/debugger/trepan2/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-include ../common.mk
-
-lisp_files = $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-EXTRA_DIST = $(lisp_files)
diff --git a/packages/realgud/realgud/debugger/trepan2/core.el 
b/packages/realgud/realgud/debugger/trepan2/core.el
deleted file mode 100644
index 00651d7..0000000
--- a/packages/realgud/realgud/debugger/trepan2/core.el
+++ /dev/null
@@ -1,241 +0,0 @@
-;; Copyright (C) 2010-2012, 2014-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-(require 'compile) ;; for compilation-find-file
-(require 'load-relative)
-(require-relative-list '("../../common/track"
-                        "../../common/core"
-                         "../../common/file"
-                        "../../common/lang")
-                      "realgud-")
-(require-relative-list '("init") "realgud:trepan2-")
-
-(declare-function realgud:strip              'realgud)
-(declare-function realgud:expand-file-name-if-exists 'realgud-core)
-(declare-function realgud-parse-command-arg  'realgud-core)
-(declare-function realgud-query-cmdline      'realgud-core)
-(declare-function realgud-suggest-invocation 'realgud-core)
-(declare-function realgud:file-loc-from-line 'realgud-file)
-
-;; FIXME: I think the following could be generalized and moved to
-;; realgud-... probably via a macro.
-(defvar realgud:trepan2-minibuffer-history nil
-  "minibuffer history list for the command `realgud:trepan2'.")
-
-(easy-mmode-defmap trepan2-minibuffer-local-map
-  '(("\C-i" . comint-dynamic-complete-filename))
-  "Keymap for minibuffer prompting of gud startup command."
-  :inherit minibuffer-local-map)
-
-(defvar realgud:trepan2-file-remap (make-hash-table :test 'equal)
-  "How to remap Python files in trepan2 when we otherwise can't
-  find in the filesystem. The hash key is the file string we saw,
-  and the value is associated filesystem string presumably in the
-  filesystem")
-
-;; FIXME: this code could be generalized and put in a common place.
-(defun realgud:trepan2-find-file(filename)
-  "A find-file specific for python/trepan. We strip off trailing
-blanks. Failing that we will prompt for a mapping and save that
-in variable `realgud:trepan2-file-remap' when that works. In the future,
-we may also consult PYTHONPATH."
-  (let* ((transformed-file)
-        (stripped-filename (realgud:strip filename))
-        (ignore-file-re realgud-python-ignore-file-re)
-       )
-    (cond
-     ((file-exists-p filename) filename)
-     ((file-exists-p stripped-filename) stripped-filename)
-     ((string-match ignore-file-re filename)
-       (message "tracking ignored for psuedo-file: %s" filename) nil)
-     ('t
-      ;; FIXME search PYTHONPATH if not absolute file
-      (if (gethash filename realgud-file-remap)
-         (let ((remapped-filename))
-           (setq remapped-filename (gethash filename 
realgud:trepan2-file-remap))
-           (if (file-exists-p remapped-filename)
-               remapped-filename
-             ;; else
-             (and (remhash filename realgud-file-remap)) nil)
-           ;; else
-           (let ((remapped-filename))
-             (setq remapped-filename
-                   (buffer-file-name
-                    (compilation-find-file (point-marker) stripped-filename
-                                           nil "%s.py")))
-             (when (and remapped-filename (file-exists-p remapped-filename))
-               (puthash filename remapped-filename realgud-file-remap)
-               remapped-filename
-               ))
-           ))
-      ))
-    ))
-
-(defun realgud:trepan2-loc-fn-callback(text filename lineno source-str
-                                           ignore-file-re cmd-mark)
-  (realgud:file-loc-from-line filename lineno
-                             cmd-mark source-str nil nil
-                             'realgud:trepan2-find-file))
-
-;; FIXME: I think this code and the keymaps and history
-;; variable chould be generalized, perhaps via a macro.
-(defun trepan2-query-cmdline (&optional opt-debugger)
-  (realgud-query-cmdline
-   'trepan2-suggest-invocation
-   trepan2-minibuffer-local-map
-   'realgud:trepan2-minibuffer-history
-   opt-debugger))
-
-(defun trepan2-parse-cmd-args (orig-args)
-  "Parse command line ARGS for the annotate level and name of script to debug.
-
-ORIG-ARGS should contain a tokenized list of the command line to run.
-
-We return the a list containing
-- the command processor (e.g. python) and it's arguments if any - a list of 
strings
-- the name of the debugger given (e.g. trepan2) and its arguments - a list of 
strings
-- the script name and its arguments - list of strings
-- whether the annotate or emacs option was given ('-A', '--annotate' or 
'--emacs) - a boolean
-
-For example for the following input
-  (map 'list 'symbol-name
-   '(python2.6 -O -Qold --emacs ./gcd.py a b))
-
-we might return:
-   ((python2.6 -O -Qold) (trepan2 --emacs) (./gcd.py a b) 't)
-
-NOTE: the above should have each item listed in quotes.
-"
-
-  ;; Parse the following kind of pattern:
-  ;;  [python python-options] trepan2 trepan2-options script-name 
script-options
-  (let (
-       (args orig-args)
-       (pair)          ;; temp return from
-       (python-opt-two-args '("c" "m" "Q" "W"))
-       ;; Python doesn't have mandatory 2-arg options in our sense,
-       ;; since the two args can be run together, e.g. "-C/tmp" or "-C /tmp"
-       ;;
-       (python-two-args '())
-       ;; One dash is added automatically to the below, so
-       ;; h is really -h and -host is really --host.
-       (trepan2-two-args '("x" "-command" "e" "-execute"
-                          "o" "-output"  "t" "-target"
-                          "a" "-annotate"))
-       (trepan2-opt-two-args '())
-       (interp-regexp
-        (if (member system-type (list 'windows-nt 'cygwin 'msdos))
-            "^python[-0-9.]*\\(.exe\\)?$"
-          "^python[-0-9.]*$"))
-
-       ;; Things returned
-       (annotate-p nil)
-       (debugger-args '())
-       (debugger-name nil)
-       (interpreter-args '())
-       (script-args '())
-       (script-name nil)
-       )
-
-    (if (not (and args))
-       ;; Got nothing: return '(nil, nil)
-       (list interpreter-args debugger-args script-args annotate-p)
-      ;; else
-      ;; Strip off optional "python" or "python182" etc.
-      (when (string-match interp-regexp
-                         (file-name-sans-extension
-                          (file-name-nondirectory (car args))))
-       (setq interpreter-args (list (pop args)))
-
-       ;; Strip off Python-specific options
-       (while (and args
-                   (string-match "^-" (car args)))
-         (setq pair (realgud-parse-command-arg
-                     args python-two-args python-opt-two-args))
-         (nconc interpreter-args (car pair))
-         (setq args (cadr pair))))
-
-      ;; Remove "trepan2" from "trepan2 --trepan2-options script
-      ;; --script-options"
-      (setq debugger-name (file-name-sans-extension
-                          (file-name-nondirectory (car args))))
-      (unless (string-match "^\\(trepan2\\|cli.py\\)$" debugger-name)
-       (message
-        "Expecting debugger name `%s' to be `trepan2' or `cli.py'"
-        debugger-name))
-      (setq debugger-args (list (pop args)))
-
-      ;; Skip to the first non-option argument.
-      (while (and args (not script-name))
-       (let ((arg (car args)))
-         (cond
-          ;; Annotation or emacs option with level number.
-          ((or (member arg '("--annotate" "-A"))
-               (equal arg "--emacs"))
-           (setq annotate-p t)
-           (nconc debugger-args (list (pop args))))
-          ;; Combined annotation and level option.
-          ((string-match "^--annotate=[0-9]" arg)
-           (nconc debugger-args (list (pop args)) )
-           (setq annotate-p t))
-          ;; Options with arguments.
-          ((string-match "^-" arg)
-           (setq pair (realgud-parse-command-arg
-                       args trepan2-two-args trepan2-opt-two-args))
-           (nconc debugger-args (car pair))
-           (setq args (cadr pair)))
-          ;; Anything else must be the script to debug.
-          (t (setq script-name (realgud:expand-file-name-if-exists arg))
-             (setq script-args (cons script-name (cdr args))))
-          )))
-      (list interpreter-args debugger-args script-args annotate-p))))
-
-;; To silence Warning: reference to free variable
-(defvar realgud:trepan2-command-name)
-
-(defun trepan2-suggest-invocation (debugger-name)
-  "Suggest a trepan2 command invocation via `realgud-suggest-invocaton'"
-  (realgud-suggest-invocation (or debugger-name realgud:trepan2-command-name)
-                             realgud:trepan2-minibuffer-history
-                             "python" "\\.py"
-                             realgud:trepan2-command-name))
-
-(defun trepan2-reset ()
-  "Trepan2 cleanup - remove debugger's internal buffers (frame,
-breakpoints, etc.)."
-  (interactive)
-  ;; (trepan2-breakpoint-remove-all-icons)
-  (dolist (buffer (buffer-list))
-    (when (string-match "\\*trepan2-[a-z]+\\*" (buffer-name buffer))
-      (let ((w (get-buffer-window buffer)))
-        (when w
-          (delete-window w)))
-      (kill-buffer buffer))))
-
-;; (defun trepan2-reset-keymaps()
-;;   "This unbinds the special debugger keys of the source buffers."
-;;   (interactive)
-;;   (setcdr (assq 'trepan2-debugger-support-minor-mode minor-mode-map-alist)
-;;       trepan2-debugger-support-minor-mode-map-when-deactive))
-
-
-(defun realgud:trepan2-customize ()
-  "Use `customize' to edit the settings of the `trepan2' debugger."
-  (interactive)
-  (customize-group 'realgud:trepan2))
-
-(provide-me "realgud:trepan2-")
diff --git a/packages/realgud/realgud/debugger/trepan2/init.el 
b/packages/realgud/realgud/debugger/trepan2/init.el
deleted file mode 100644
index 62221e1..0000000
--- a/packages/realgud/realgud/debugger/trepan2/init.el
+++ /dev/null
@@ -1,120 +0,0 @@
-;; Copyright (C) 2010-2012, 2014-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;; trepan2: Python 2.5 - 2.7; for 3.0+ see trepan3k
-
-(eval-when-compile (require 'cl-lib))   ;For setf.
-
-(require 'load-relative)
-(require-relative-list '("../../common/regexp"
-                        "../../common/loc"
-                        "../../common/init")
-                      "realgud-")
-(require-relative-list '("../../lang/python") "realgud-lang-")
-
-(defvar realgud-pat-hash)
-(declare-function make-realgud-loc-pat (realgud-loc))
-
-(defvar realgud:trepan2-pat-hash (make-hash-table :test 'equal)
-  "Hash key is the what kind of pattern we want to match:
-backtrace, prompt, etc.  The values of a hash entry is a
-realgud-loc-pat struct")
-
-(declare-function make-realgud-loc 'realgud-loc)
-
-(setf (gethash "loc-callback-fn" realgud:trepan2-pat-hash) 
'realgud:trepan2-loc-fn-callback)
-
-;; Regular expression that describes a trepan2 location generally shown
-;; before a command prompt.
-;;
-;; For example:
-;;   (/usr/bin/zonetab2pot.py:15 @3): <module>
-;;   (/usr/bin/zonetab2pot.py:15 remapped <string>): <module>
-;; or MS Windows:
-;;   (c:\\mydirectory\\gcd.py:10): <module>
-(setf (gethash "loc" realgud:trepan2-pat-hash)
-      realgud:python-trepan-loc-pat)
-
-;; Regular expression that describes a trepan2 prompt.
-;; Note: the prompt in nested debugging
-;; For example:
-;; (trepan2)
-;; ((trepan2))
-(setf (gethash "prompt" realgud:trepan2-pat-hash)
-      (make-realgud-loc-pat
-       :regexp   "^(+trepan2)+ "
-       ))
-
-;; Regular expression that describes a trepan2 backtrace line.
-;; For example:
-;; ->0 get_distribution(dist='trepan==0.3.9')
-;;     called from file '/python2.7/dist-packages/pkg_res.py' at line 341
-;; ##1 load_entry_point(dist='tr=0.3.9', group='console_scripts', name='tr')
-;;     called from file '/python2.7/dist-packages/pkg_res.py' at line 351
-;; ##2 <module> exec()
-
-(setf (gethash "debugger-backtrace" realgud:trepan2-pat-hash)
-      realgud:python-trepan-backtrace-pat)
-
-;;  Regular expression that describes a Python backtrace line.
-(setf (gethash "lang-backtrace" realgud:trepan2-pat-hash)
-      realgud-python-backtrace-loc-pat)
-
-;;  Regular expression that describes location in a pytest error
-(setf (gethash "pytest-error" realgud:trepan2-pat-hash)
-      realgud-pytest-error-loc-pat)
-
-;;  Regular expression that describes location in a flake8 message
-(setf (gethash "flake8-msg" realgud:trepan2-pat-hash)
-      realgud-flake8-msg-loc-pat)
-
-;;  Regular expression that describes a "breakpoint set" line
-(setf (gethash "brkpt-set" realgud:trepan2-pat-hash)
-      realgud:python-trepan-brkpt-set-pat)
-
-;;  Regular expression that describes a "delete breakpoint" line
-(setf (gethash "brkpt-del" realgud:trepan2-pat-hash)
-      realgud:python-trepan-brkpt-del-pat)
-
-;; Regular expression that describes a debugger "disable" (breakpoint) 
response.
-;; For example:
-;;   Breakpoint 4 disabled.
-(setf (gethash "brkpt-disable" realgud:trepan2-pat-hash)
-      realgud:python-trepan-brkpt-disable-pat)
-
-;; Regular expression that describes a debugger "enable" (breakpoint) response.
-;; For example:
-;;   Breakpoint 4 enabled.
-(setf (gethash "brkpt-enable" realgud:trepan2-pat-hash)
-      realgud:python-trepan-brkpt-disable-pat)
-
-;; Regular expression for a termination message.
-(setf (gethash "termination" realgud:trepan2-pat-hash)
-      "^trepan2: That's all, folks...\n")
-
-(setf (gethash "font-lock-keywords" realgud:trepan2-pat-hash)
-      realgud:python-debugger-font-lock-keywords)
-
-(setf (gethash "trepan2" realgud-pat-hash) realgud:trepan2-pat-hash)
-
-(defvar realgud:trepan2-command-hash (make-hash-table :test 'equal)
-  "Hash key is command name like 'shell' and the value is
-  the trepan2 command to use, like 'python'")
-
-(setf (gethash "eval"  realgud:trepan2-command-hash) "eval %s")
-(setf (gethash "shell" realgud:trepan2-command-hash) "python")
-(setf (gethash "until" realgud:trepan2-command-hash) "continue %l")
-
-;; If your version of trepan2 doesn't support "quit!",
-;; get a more recent version of trepan2
-(setf (gethash "quit" realgud:trepan2-command-hash) "quit!")
-
-(setf (gethash "trepan2" realgud-command-hash) realgud:trepan2-command-hash)
-
-(provide-me "realgud:trepan2-")
diff --git a/packages/realgud/realgud/debugger/trepan2/track-mode.el 
b/packages/realgud/realgud/debugger/trepan2/track-mode.el
deleted file mode 100644
index d10bde5..0000000
--- a/packages/realgud/realgud/debugger/trepan2/track-mode.el
+++ /dev/null
@@ -1,77 +0,0 @@
-;; Copyright (C) 2010-2012, 2014-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-;;
-;; Python "trepan2" Debugger tracking in a comint or eshell buffer.
-
-(require 'load-relative)
-(require-relative-list '(
-                        "../../common/cmds"
-                        "../../common/menu"
-                        "../../common/track"
-                        "../../common/track-mode"
-                        )
-                      "realgud-")
-(require-relative-list '("core" "init") "realgud:trepan2-")
-(require-relative-list '("../../lang/python") "realgud-lang-")
-
-(declare-function realgud-track-mode 'realgud-track-mode)
-(declare-function realgud-track-mode-hook 'realgud-track-mode)
-(declare-function realgud-track-mode-setup   'realgud-track-mode)
-(declare-function realgud:track-set-debugger 'realgud-track-mode)
-(declare-function realgud-python-populate-command-keys 'realgud-lang-python)
-
-(realgud-track-mode-vars "trepan2")
-
-(realgud-python-populate-command-keys trepan2-track-mode-map)
-
-(defun trepan2-track-mode-hook()
-  (if trepan2-track-mode
-      (progn
-       (use-local-map trepan2-track-mode-map)
-       (message "using trepan2 mode map")
-       )
-    (message "trepan2 track-mode-hook disable called")
-    )
-)
-
-(define-minor-mode trepan2-track-mode
-  "Minor mode for tracking trepan2 source locations inside a process shell via 
realgud. trepan2 is a Python debugger. See URL 
`https://github.com/rocky/emacs-dbgr/rocky/python2-trepan/'.
-
-If called interactively with no prefix argument, the mode is toggled. A prefix 
argument, captured as ARG, enables the mode if the argument is positive, and 
disables it otherwise.
-
-\\{trepan2-track-mode-map}
-"
-  :init-value nil
-  ;; :lighter " trepan2"   ;; mode-line indicator from realgud-track is 
sufficient.
-  ;; The minor mode bindings.
-  :global nil
-  :group 'realgud:trepan2
-  :keymap trepan2-track-mode-map
-
-  (realgud:track-set-debugger "trepan2")
-  (if trepan2-track-mode
-      (progn
-       (realgud-track-mode-setup 't)
-        (trepan2-track-mode-hook))
-    (progn
-      (setq realgud-track-mode nil)
-      ))
-)
-
-(define-key trepan2-short-key-mode-map "T" 'realgud:cmd-backtrace)
-
-(provide-me "realgud:trepan2-")
diff --git a/packages/realgud/realgud/debugger/trepan2/trepan2.el 
b/packages/realgud/realgud/debugger/trepan2/trepan2.el
deleted file mode 100644
index 3b12bb3..0000000
--- a/packages/realgud/realgud/debugger/trepan2/trepan2.el
+++ /dev/null
@@ -1,103 +0,0 @@
-;; Copyright (C) 2010-2012, 2014-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;; Main interface to trepan2 via Emacs
-
-(require 'python) ; for python-shell-interpreter
-(require 'load-relative)
-(require-relative-list '("../../common/helper") "realgud-")
-(require-relative-list '("../../common/run")    "realgud:")
-(require-relative-list '("core" "track-mode")   "realgud:trepan2-")
-
-;; This is needed, or at least the docstring part of it is needed to
-;; get the customization menu to work in Emacs 24.
-(defgroup realgud:trepan2 nil
-  "The realgud interface to the Python trepan2 debugger"
-  :group 'realgud
-  :group 'python
-  :version "24.2")
-
-(declare-function trepan2-query-cmdline  'realgud:trepan2-core)
-(declare-function trepan2-parse-cmd-args 'realgud:trepan2-core)
-(declare-function trepan2-track-mode     'realgud:pydbgr-track-mode)
-(declare-function realgud:run-debugger   'realgud:run)
-(declare-function realgud:run-process  'realgud:core)
-(declare-function realgud:flatten      'realgud-utils)
-
-;; -------------------------------------------------------------------
-;; User-definable variables
-;;
-
-(defcustom realgud:trepan2-command-name
-  ;;"trepan2 --emacs 3"
-  "trepan2"
-  "File name for executing the Python debugger and command options.
-This should be an executable on your path, or an absolute file name."
-  :type 'string
-  :group 'realgud:trepan2)
-
-
-;; -------------------------------------------------------------------
-;; The end.
-;;
-
-;;;###autoload
-(defalias 'trepan2 'realgud:trepan2)
-
-;;;###autoload
-(defun realgud:trepan2 (&optional opt-cmd-line no-reset)
-  "Invoke the trepan2 Python debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `trepan2-parse-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-"
-  (interactive)
-  (realgud:run-debugger "trepan2"
-                       'trepan2-query-cmdline
-                       'trepan2-parse-cmd-args
-                       'realgud:trepan2-minibuffer-history
-                       opt-cmd-line no-reset)
-  )
-
-;;;###autoload
-(defun realgud:trepan2-delayed ()
-  "This is like `trepan2', but assumes inside the program to be debugged, you
-have a call to the debugger somewhere, e.g. 'from trepan.api import debug; 
debug()'.
-Therefore we invoke python rather than the debugger initially.
-
-"
-  (interactive)
-  (let* ((initial-debugger python-shell-interpreter)
-        (actual-debugger "trepan2")
-        (cmd-str (trepan2-query-cmdline initial-debugger))
-        (cmd-args (split-string-and-unquote cmd-str))
-        ;; XXX: python gets registered as the interpreter rather than
-        ;; a debugger, and the debugger position (nth 1) is missing:
-        ;; the script-args takes its place.
-        (parsed-args (trepan2-parse-cmd-args cmd-args))
-        (script-args (nth 1 parsed-args))
-        (script-name (car script-args))
-        (parsed-cmd-args
-         (cl-remove-if 'nil (realgud:flatten parsed-args))))
-    (realgud:run-process actual-debugger script-name parsed-cmd-args
-                        'realgud:trepan2-minibuffer-history)))
-
-(realgud-deferred-invoke-setup "trepan2")
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/debugger/trepan3k/Makefile.am 
b/packages/realgud/realgud/debugger/trepan3k/Makefile.am
deleted file mode 100644
index e6c68b4..0000000
--- a/packages/realgud/realgud/debugger/trepan3k/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-include ../common.mk
-
-lisp_files = $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-EXTRA_DIST = $(lisp_files)
diff --git a/packages/realgud/realgud/debugger/trepan3k/core.el 
b/packages/realgud/realgud/debugger/trepan3k/core.el
deleted file mode 100644
index d7f14f8..0000000
--- a/packages/realgud/realgud/debugger/trepan3k/core.el
+++ /dev/null
@@ -1,187 +0,0 @@
-;; Copyright (C) 2010, 2012-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-;;
-(require 'load-relative)
-(require-relative-list '("../../common/track"
-                        "../../common/core"
-                        "../../common/lang")
-                      "realgud-")
-(require-relative-list '("init") "realgud:trepan3k-")
-
-(declare-function realgud:expand-file-name-if-exists 'realgud-core)
-(declare-function realgud-parse-command-arg  'realgud-core)
-(declare-function realgud-query-cmdline      'realgud-core)
-(declare-function realgud-suggest-invocation 'realgud-core)
-
-;; FIXME: I think the following could be generalized and moved to
-;; realgud-... probably via a macro.
-(defvar realgud:trepan3k-minibuffer-history nil
-  "minibuffer history list for the command `realgud:trepan3k'.")
-
-(easy-mmode-defmap trepan3k-minibuffer-local-map
-  '(("\C-i" . comint-dynamic-complete-filename))
-  "Keymap for minibuffer prompting of gud startup command."
-  :inherit minibuffer-local-map)
-
-;; FIXME: I think this code and the keymaps and history
-;; variable chould be generalized, perhaps via a macro.
-(defun trepan3k-query-cmdline (&optional opt-debugger)
-  (realgud-query-cmdline
-   'trepan3k-suggest-invocation
-   trepan3k-minibuffer-local-map
-   'realgud-trepan3k-minibuffer-history
-   opt-debugger))
-
-(defun trepan3k-parse-cmd-args (orig-args)
-  "Parse command line ARGS for the annotate level and name of script to debug.
-
-ARGS should contain a tokenized list of the command line to run.
-
-We return the a list containing
-- the command processor (e.g. python) and it's arguments if any - a list of 
strings
-- the name of the debugger given (e.g. trepan3k) and its arguments - a list of 
strings
-- the script name and its arguments - list of strings
-- whether the annotate or emacs option was given ('-A', '--annotate' or 
'--emacs) - a boolean
-
-For example for the following input
-  (map 'list 'symbol-name
-   '(python2.6 -O -Qold --emacs ./gcd.py a b))
-
-we might return:
-   ((python2.6 -O -Qold) (trepan3k --emacs) (./gcd.py a b) 't)
-
-NOTE: the above should have each item listed in quotes.
-"
-
-  ;; Parse the following kind of pattern:
-  ;;  [python python-options] trepan3k trepan3k-options script-name 
script-options
-  (let (
-       (args orig-args)
-       (pair)          ;; temp return from
-       (python-opt-two-args '("c" "m" "Q" "W"))
-       ;; Python doesn't have mandatory 2-arg options in our sense,
-       ;; since the two args can be run together, e.g. "-C/tmp" or "-C /tmp"
-       ;;
-       (python-two-args '())
-       ;; One dash is added automatically to the below, so
-       ;; h is really -h and -host is really --host.
-       (trepan3k-two-args '("x" "-command" "e" "-execute"
-                          "o" "-output"  "t" "-target"
-                          "a" "-annotate"))
-       (trepan3k-opt-two-args '())
-       (interp-regexp
-        (if (member system-type (list 'windows-nt 'cygwin 'msdos))
-            "^python[-0-9.]*\\(.exe\\)?$"
-          "^python[-0-9.]*$"))
-
-       ;; Things returned
-       (annotate-p nil)
-       (debugger-args '())
-       (debugger-name nil)
-       (interpreter-args '())
-       (script-args '())
-       (script-name nil)
-       )
-
-    (if (not (and args))
-       ;; Got nothing: return '(nil, nil)
-       (list interpreter-args debugger-args script-args annotate-p)
-      ;; else
-      ;; Strip off optional "python" or "python182" etc.
-      (when (string-match interp-regexp
-                         (file-name-sans-extension
-                          (file-name-nondirectory (car args))))
-       (setq interpreter-args (list (pop args)))
-
-       ;; Strip off Python-specific options
-       (while (and args
-                   (string-match "^-" (car args)))
-         (setq pair (realgud-parse-command-arg
-                     args python-two-args python-opt-two-args))
-         (nconc interpreter-args (car pair))
-         (setq args (cadr pair))))
-
-      ;; Remove "trepan3k" from "trepan3k --trepan3k-options script
-      ;; --script-options"
-      (setq debugger-name (file-name-sans-extension
-                          (file-name-nondirectory (car args))))
-      (unless (string-match "^\\(trepan3k\\|cli.py\\)$" debugger-name)
-       (message
-        "Expecting debugger name `%s' to be `trepan3k' or `cli.py'"
-        debugger-name))
-      (setq debugger-args (list (pop args)))
-
-      ;; Skip to the first non-option argument.
-      (while (and args (not script-name))
-       (let ((arg (car args)))
-         (cond
-          ;; Annotation or emacs option with level number.
-          ((or (member arg '("--annotate" "-A"))
-               (equal arg "--emacs"))
-           (setq annotate-p t)
-           (nconc debugger-args (list (pop args))))
-          ;; Combined annotation and level option.
-          ((string-match "^--annotate=[0-9]" arg)
-           (nconc debugger-args (list (pop args)) )
-           (setq annotate-p t))
-          ;; Options with arguments.
-          ((string-match "^-" arg)
-           (setq pair (realgud-parse-command-arg
-                       args trepan3k-two-args trepan3k-opt-two-args))
-           (nconc debugger-args (car pair))
-           (setq args (cadr pair)))
-          ;; Anything else must be the script to debug.
-          (t (setq script-name (realgud:expand-file-name-if-exists arg))
-             (setq script-args (cons script-name (cdr args))))
-          )))
-      (list interpreter-args debugger-args script-args annotate-p))))
-
-;; To silence Warning: reference to free variable
-(defvar realgud:trepan3k-command-name)
-
-(defun trepan3k-suggest-invocation (debugger-name)
-  "Suggest a trepan3k command invocation via `realgud-suggest-invocaton'"
-  (realgud-suggest-invocation (or debugger-name realgud:trepan3k-command-name)
-                             realgud:trepan3k-minibuffer-history
-                             "python" "\\.py"
-                             realgud:trepan3k-command-name))
-
-(defun trepan3k-reset ()
-  "Trepan3k cleanup - remove debugger's internal buffers (frame,
-breakpoints, etc.)."
-  (interactive)
-  ;; (trepan3k-breakpoint-remove-all-icons)
-  (dolist (buffer (buffer-list))
-    (when (string-match "\\*trepan3k-[a-z]+\\*" (buffer-name buffer))
-      (let ((w (get-buffer-window buffer)))
-        (when w
-          (delete-window w)))
-      (kill-buffer buffer))))
-
-;; (defun trepan3k-reset-keymaps()
-;;   "This unbinds the special debugger keys of the source buffers."
-;;   (interactive)
-;;   (setcdr (assq 'trepan3k-debugger-support-minor-mode minor-mode-map-alist)
-;;       trepan3k-debugger-support-minor-mode-map-when-deactive))
-
-
-(defun realgud:trepan3k-customize ()
-  "Use `customize' to edit the settings of the `trepan3k' debugger."
-  (interactive)
-  (customize-group 'realgud:trepan3k))
-
-(provide-me "realgud:trepan3k-")
diff --git a/packages/realgud/realgud/debugger/trepan3k/init.el 
b/packages/realgud/realgud/debugger/trepan3k/init.el
deleted file mode 100644
index a13da4d..0000000
--- a/packages/realgud/realgud/debugger/trepan3k/init.el
+++ /dev/null
@@ -1,127 +0,0 @@
-;; Copyright (C) 2010-2018 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;; trepan3k: Python 3.2 and beyond
-
-(eval-when-compile (require 'cl-lib))   ;For setf.
-
-(require 'load-relative)
-(require-relative-list '("../../common/regexp"
-                        "../../common/loc"
-                        "../../common/init")
-                      "realgud-")
-(require-relative-list '("../../lang/python") "realgud-lang-")
-
-(defvar realgud-pat-hash)
-(declare-function make-realgud-loc-pat (realgud-loc))
-
-(defvar realgud:trepan3k-pat-hash (make-hash-table :test 'equal)
-  "Hash key is the what kind of pattern we want to match:
-backtrace, prompt, etc.  The values of a hash entry is a
-realgud-loc-pat struct")
-
-(declare-function make-realgud-loc 'realgud-loc)
-
-;; realgud-loc-pat that describes a trepan3k location generally shown
-;; before a command prompt.
-;;
-;; For example:
-;;   (/usr/bin/zonetab2pot.py:15): <module>
-;;   (/usr/bin/zonetab2pot.py:15 remapped <string>): <module>
-;; or MS Windows:
-;;   (c:\\mydirectory\\gcd.py:10): <module>
-(setf (gethash "loc" realgud:trepan3k-pat-hash)
-      realgud:python-trepan-loc-pat)
-
-;; Regular expression that describes a trepan3k prompt.
-;; Note: the prompt in nested debugging
-;; For example:
-;; (trepan3)
-;; ((trepan3k))
-(setf (gethash "prompt" realgud:trepan3k-pat-hash)
-      (make-realgud-loc-pat
-       :regexp   "^(+trepan3k+) "
-       ))
-
-;; realgud-loc-pat that describes a trepan3k backtrace line.
-;; For example:
-;; ->0 get_distribution(dist='trepan==0.3.9')
-;;     called from file '/python2.7/dist-packages/pkg_res.py' at line 341
-;; ##1 load_entry_point(dist='tr=0.3.9', group='console_scripts', name='tr')
-;;     called from file '/python2.7/dist-packages/pkg_res.py' at line 351
-;; ##2 <module> exec()
-
-(setf (gethash "debugger-backtrace" realgud:trepan3k-pat-hash)
-      realgud:python-trepan-backtrace-pat)
-
-;;  realgud-loc-pat that describes a Python backtrace line.
-(setf (gethash "lang-backtrace" realgud:trepan3k-pat-hash)
-      realgud-python-backtrace-loc-pat)
-
-;;  realgud-loc-pat that describes location in a pytest error
-(setf (gethash "pytest-error" realgud:trepan3k-pat-hash)
-      realgud-pytest-error-loc-pat)
-
-;;  Regular expression that describes location in a flake8 message
-(setf (gethash "flake8-msg" realgud:trepan3k-pat-hash)
-      realgud-flake8-msg-loc-pat)
-
-;;  realgud-loc-pat that describes a "breakpoint set" line
-(setf (gethash "brkpt-set" realgud:trepan3k-pat-hash)
-      realgud:python-trepan-brkpt-set-pat)
-
-;;  realgud-loc-pat that describes a "delete breakpoint" line
-(setf (gethash "brkpt-del" realgud:trepan3k-pat-hash)
-      realgud:python-trepan-brkpt-del-pat)
-
-;; realgud-loc-pat that describes a debugger "disable" (breakpoint) response.
-;; For example:
-;;   Breakpoint 4 disabled.
-(setf (gethash "brkpt-disable" realgud:trepan3k-pat-hash)
-      realgud:python-trepan-brkpt-disable-pat)
-
-;; realgud-loc-pat that describes a debugger "enable" (breakpoint) response.
-;; For example:
-;;   Breakpoint 4 enabled.
-(setf (gethash "brkpt-enable" realgud:trepan3k-pat-hash)
-      realgud:python-trepan-brkpt-enable-pat)
-
-;; realgud-loc-pat for a termination message.
-(setf (gethash "termination" realgud:trepan3k-pat-hash)
-       "^trepan3k: That's all, folks...\n")
-
-(setf (gethash "font-lock-keywords" realgud:trepan3k-pat-hash)
-      realgud:python-debugger-font-lock-keywords)
-
-(setf (gethash "trepan3k" realgud-pat-hash) realgud:trepan3k-pat-hash)
-
-(defvar realgud:trepan3k-command-hash (make-hash-table :test 'equal)
-  "Hash key is command name like 'shell' and the value is
-  the trepan3k command to use, like 'python'")
-
-(setf (gethash "eval"   realgud:trepan3k-command-hash) "eval %s")
-(setf (gethash "pprint" realgud:trepan3k-command-hash) "pp %s")
-(setf (gethash "shell"  realgud:trepan3k-command-hash) "python")
-(setf (gethash "until"  realgud:trepan3k-command-hash) "continue %l")
-
-;; If your version of trepan3k doesn't support "quit!",
-;; get a more recent version of trepan3k
-(setf (gethash "quit" realgud:trepan3k-command-hash) "quit!")
-
-(setf (gethash "trepan3k" realgud-command-hash) realgud:trepan3k-command-hash)
-
-(provide-me "realgud:trepan3k-")
diff --git a/packages/realgud/realgud/debugger/trepan3k/track-mode.el 
b/packages/realgud/realgud/debugger/trepan3k/track-mode.el
deleted file mode 100644
index d7473cd..0000000
--- a/packages/realgud/realgud/debugger/trepan3k/track-mode.el
+++ /dev/null
@@ -1,77 +0,0 @@
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-;; Python "trepan3k" Debugger tracking a comint buffer.
-
-(require 'load-relative)
-(require-relative-list '(
-                        "../../common/cmds"
-                        "../../common/menu"
-                        "../../common/track"
-                        "../../common/track-mode"
-                        )
-                      "realgud-")
-(require-relative-list '("core" "init") "realgud:trepan3k-")
-(require-relative-list '("../../lang/python") "realgud-lang-")
-
-(declare-function realgud-track-mode 'realgud-track-mode)
-(declare-function realgud-track-mode-hook 'realgud-track-mode)
-(declare-function realgud-track-mode-setup 'realgud-track-mode)
-(declare-function realgud:track-set-debugger 'realgud-track-mode)
-(declare-function realgud-python-populate-command-keys 'realgud-lang-python)
-
-(realgud-track-mode-vars "trepan3k")
-
-(declare-function realgud-track-mode(bool))
-
-(realgud-python-populate-command-keys trepan3k-track-mode-map)
-
-(defun trepan3k-track-mode-hook()
-  (if trepan3k-track-mode
-      (progn
-       (use-local-map trepan3k-track-mode-map)
-       (message "using trepan3k mode map")
-       )
-    (message "trepan3k track-mode-hook disable called")
-    )
-)
-
-(define-minor-mode trepan3k-track-mode
-  "Minor mode for tracking trepan3k source locations inside a process shell 
via realgud. trepan3k is a Python debugger. See URL 
`http://code.google.com/p/python3-trepan/'.
-
-If called interactively with no prefix argument, the mode is toggled. A prefix 
argument, captured as ARG, enables the mode if the argument is positive, and 
disables it otherwise.
-
-\\{trepan3k-track-mode-map}
-"
-  :init-value nil
-  ;; :lighter " trepan3k"   ;; mode-line indicator from realgud-track is 
sufficient.
-  ;; The minor mode bindings.
-  :global nil
-  :group 'realgud:trepan3k
-  :keymap trepan3k-track-mode-map
-  (realgud:track-set-debugger "trepan3k")
-  (if trepan3k-track-mode
-      (progn
-       (realgud-track-mode-setup 't)
-       (trepan3k-track-mode-hook))
-    (progn
-      (setq realgud-track-mode nil)
-      ))
-)
-
-(define-key trepan3k-short-key-mode-map "T" 'realgud:cmd-backtrace)
-
-(provide-me "realgud:trepan3k-")
diff --git a/packages/realgud/realgud/debugger/trepan3k/trepan3k.el 
b/packages/realgud/realgud/debugger/trepan3k/trepan3k.el
deleted file mode 100644
index 2b473e4..0000000
--- a/packages/realgud/realgud/debugger/trepan3k/trepan3k.el
+++ /dev/null
@@ -1,100 +0,0 @@
-;; Copyright (C) 2010-2014, 2016-2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-(require 'python) ; for python-shell-interpreter
-(require 'load-relative)
-(require-relative-list '("../../common/helper") "realgud-")
-(require-relative-list '("../../common/run")    "realgud:")
-(require-relative-list '("core" "track-mode") "realgud:trepan3k-")
-
-;; This is needed, or at least the docstring part of it is needed to
-;; get the customization menu to work in Emacs 24.
-(defgroup realgud:trepan3k nil
-  "The realgud interface to the Python debugger, trepan3k"
-  :group 'realgud
-  :group 'python
-  :version "24.3")
-
-(declare-function trepan3k-query-cmdline  'realgud:trepan3k-core)
-(declare-function trepan3k-parse-cmd-args 'realgud:trepan3k-core)
-(declare-function realgud:run-debugger    'realgud:run)
-(declare-function realgud:run-process     'realgud:core)
-(declare-function realgud:flatten         'realgud-utils)
-
-;; -------------------------------------------------------------------
-;; User-definable variables
-;;
-
-(defcustom realgud:trepan3k-command-name
-  ;;"trepan3k --emacs 3"
-  "trepan3k"
-  "File name for executing the Python debugger and command options.
-This should be an executable on your path, or an absolute file name."
-  :type 'string
-  :group 'realgud:trepan3k)
-
-(declare-function trepan3k-track-mode (bool))
-
-;; -------------------------------------------------------------------
-;; The end.
-;;
-
-;;;###autoload
-(defun realgud:trepan3k (&optional opt-cmd-line no-reset)
-  "Invoke the trepan3k Python debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `trepan3k-parse-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-"
-  (interactive)
-  (realgud:run-debugger "trepan3k"
-                       'trepan3k-query-cmdline
-                       'trepan3k-parse-cmd-args
-                       'realgud:trepan3k-minibuffer-history
-                       opt-cmd-line no-reset)
-  )
-
-;;;###autoload
-(defalias 'trepan3k 'realgud:trepan3k)
-
-;;;###autoload
-(defun realgud:trepan3k-delayed ()
-  "This is like `trepan3k', but assumes inside the program to be debugged, you
-have a call to the debugger somewhere, e.g. 'from trepan.api import debug; 
debug()'.
-Therefore we invoke python rather than the debugger initially.
-"
-  (interactive)
-  (let* ((initial-debugger python-shell-interpreter)
-        (actual-debugger "trepan3k")
-        (cmd-str (trepan3k-query-cmdline initial-debugger))
-        (cmd-args (split-string-and-unquote cmd-str))
-        ;; XXX: python gets registered as the interpreter rather than
-        ;; a debugger, and the debugger position (nth 1) is missing:
-        ;; the script-args takes its place.
-        (parsed-args (trepan3k-parse-cmd-args cmd-args))
-        (script-args (nth 1 parsed-args))
-        (script-name (car script-args))
-        (parsed-cmd-args
-         (cl-remove-if 'nil (realgud:flatten parsed-args))))
-    (realgud:run-process actual-debugger script-name parsed-cmd-args
-                        'realgud:trepan3k-deferred-minibuffer-history)))
-
-(realgud-deferred-invoke-setup "trepan3k")
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/debugger/trepanjs/Makefile.am 
b/packages/realgud/realgud/debugger/trepanjs/Makefile.am
deleted file mode 100644
index 2c88842..0000000
--- a/packages/realgud/realgud/debugger/trepanjs/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-include $(srcdir)/../common.mk
-
-lisp_files = $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-EXTRA_DIST = $(lisp_files)
diff --git a/packages/realgud/realgud/debugger/trepanjs/backtrack-mode.el 
b/packages/realgud/realgud/debugger/trepanjs/backtrack-mode.el
deleted file mode 100644
index 0732dc5..0000000
--- a/packages/realgud/realgud/debugger/trepanjs/backtrack-mode.el
+++ /dev/null
@@ -1,80 +0,0 @@
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;;; Mode for parsing various kinds of backtraces found in JavaScript
-
-(require 'load-relative)
-(require-relative-list '(
-                        "../../common/cmds"
-                        "../../common/menu"
-                        "../../common/track-mode"
-                        "../../common/backtrack-mode"
-                        )
-                      "realgud-")
-(require-relative-list '("core" "init") "realgud:trepanjs-")
-(require-relative-list '("../../lang/ruby") "realgud-lang-")
-
-(realgud-backtrack-mode-vars "trepanjs")
-(set-keymap-parent trepanjs-backtrack-mode-map realgud-backtrack-mode-map)
-
-(declare-function realgud-backtrack-mode         
'realgud-common-backtrack-mode)
-(declare-function realgud-backtrack-set-debugger 
'realgud-common-backtrack-mode)
-(declare-function realgud-goto-line-for-pt       
'realgud-common-backtrack-mode)
-(declare-function realgud:ruby-populate-command-keys 'realgud-lang-ruby)
-
-(defun realgud:trepanjs-goto-control-frame-line (pt)
-  "Display the location mentioned by a control-frame line
-described by PT."
-  (interactive "d")
-  (realgud-goto-line-for-pt pt "control-frame"))
-
-(realgud:ruby-populate-command-keys trepanjs-backtrack-mode-map)
-(define-key trepanjs-backtrack-mode-map
-  (kbd "C-c !c") 'realgud:trepanjs-goto-control-frame-line)
-
-(define-minor-mode trepanjs-backtrack-mode
-  "Minor mode for tracking ruby debugging inside a file which may not have 
process shell.
-
-\\{trepanjs-backtrack-mode-map}
-"
-  :init-value nil
-  ;; :lighter " trepanjs"   ;; mode-line indicator from realgud-track is 
sufficient.
-  ;; The minor mode bindings.
-  :global nil
-  :group 'realgud:trepanjs
-  :keymap trepanjs-backtrack-mode-map
-
-  (realgud-backtrack-set-debugger "trepanjs")
-  (if trepanjs-backtrack-mode
-      (progn
-       (realgud-backtrack-mode 't)
-       (run-mode-hooks (intern (trepanjs-backtrack-mode-hook))))
-    (progn
-      (realgud-backtrack-mode nil)
-      ))
-)
-
-(defun trepanjs-backtrack-mode-hook()
-  (if trepanjs-backtrack-mode
-      (progn
-       (use-local-map trepanjs-backtrack-mode-map)
-       (message "using trepanjs mode map")
-       )
-    (message "trepanjs backtrack-mode-hook disable called"))
-)
-
-(provide-me "realgud:trepanjs-")
diff --git a/packages/realgud/realgud/debugger/trepanjs/core.el 
b/packages/realgud/realgud/debugger/trepanjs/core.el
deleted file mode 100644
index 122cb44..0000000
--- a/packages/realgud/realgud/debugger/trepanjs/core.el
+++ /dev/null
@@ -1,158 +0,0 @@
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-(require 'load-relative)
-(require-relative-list '("../../common/track"
-                         "../../common/core"
-                         "../../common/lang")
-                       "realgud-")
-(require-relative-list '("init") "realgud:trepanjs-")
-
-(declare-function realgud:expand-file-name-if-exists 'realgud-core)
-(declare-function realgud-parse-command-arg  'realgud-core)
-(declare-function realgud-query-cmdline      'realgud-core)
-(declare-function realgud-suggest-invocation 'realgud-core)
-
-;; FIXME: I think the following could be generalized and moved to
-;; realgud-... probably via a macro.
-(defvar realgud:trepanjs-minibuffer-history nil
-  "minibuffer history list for the command `realgud:trepanjs'.")
-
-(easy-mmode-defmap realgud:trepanjs-minibuffer-local-map
-  '(("\C-i" . comint-dynamic-complete-filename))
-  "Keymap for minibuffer prompting of trepanjs startup command."
-  :inherit minibuffer-local-map)
-
-;; FIXME: I think this code and the keymaps and history
-;; variable chould be generalized, perhaps via a macro.
-(defun realgud:trepanjs-query-cmdline (&optional opt-debugger)
-  (realgud-query-cmdline
-   'realgud:trepanjs-suggest-invocation
-   realgud:trepanjs-minibuffer-local-map
-   'realgud:trepanjs-minibuffer-history
-   opt-debugger))
-
-(defun realgud:trepanjs-parse-cmd-args (orig-args)
-  "Parse command line ARGS for the name of script to debug.
-
-ORIG-ARGS should contain a tokenized list of the command line to run.
-
-We return the a list containing
-* the name of the debugger given (e.g. trepanjs) and its arguments - a list of 
strings
-* the script name and its arguments - list of strings
-
-For example for the following input:
-  (map 'list 'symbol-name
-   '(trepanjs  --no-highlight --port 5858 /tmp trepanjs ./gcd.js a b))
-
-we might return:
-   ((\"trepanjs\" \"--no-highlight\" \"--port\" \"5858\") nil (\"/tmp/gcd.js\" 
\"a\" \"b\"))
-
-Note that path elements have been expanded via `expand-file-name'.
-"
-
-  ;; Parse the following kind of pattern:
-  ;;  node trepanjs-options script-name script-options
-  (let (
-       (args orig-args)
-       (pair)          ;; temp return from
-       (node-two-args '("-max-stack-size"))
-       ;; node doesn't have any optional two-arg options
-       (node-opt-two-args '())
-
-       ;; One dash is added automatically to the below, so
-       ;; p is really -p and -port is really --port.
-       (trepanjs-two-args '("-port" "-host" "-pid" "p"))
-       (trepanjs-opt-two-args '())
-
-       ;; Things returned
-       (script-name nil)
-       (debugger-name nil)
-       (interpreter-args '())
-       (script-args '())
-       )
-    (if (not (and args))
-       ;; Got nothing: return '(nil, nil, nil)
-       (list interpreter-args nil script-args)
-      ;; else
-      (progn
-       ;; Remove "trepanjs" (or "nodemon" or "node") from invocation like:
-       ;; trepanjs --trepanjs-options script --script-options
-       (setq debugger-name (file-name-sans-extension
-                            (file-name-nondirectory (car args))))
-       (unless (string-match "^node\\(?:js\\|mon\\)?$" debugger-name)
-         (message
-          "Expecting debugger name `%s' to be `node', `nodemon', or `trepanjs'"
-          debugger-name))
-       (setq interpreter-args (list (pop args)))
-
-       ;; Skip to the first non-option argument.
-       (while (and args (not script-name))
-         (let ((arg (car args)))
-           (cond
-            ((equal "debug" arg)
-             (nconc interpreter-args (list arg))
-             (setq args (cdr args))
-             )
-
-            ;; Options with arguments.
-            ((string-match "^-" arg)
-             (setq pair (realgud-parse-command-arg
-                         args trepanjs-two-args trepanjs-opt-two-args))
-             (nconc interpreter-args (car pair))
-             (setq args (cadr pair)))
-            ;; Anything else must be the script to debug.
-            (t (setq script-name (realgud:expand-file-name-if-exists arg))
-              (setq script-args (cons script-name (cdr args))))
-            )))
-       (list interpreter-args nil script-args)))
-    ))
-
-;; To silence Warning: reference to free variable
-(defvar realgud:trepanjs-command-name)
-
-(defun realgud:trepanjs-suggest-invocation (debugger-name)
-  "Suggest a trepanjs command invocation via `realgud-suggest-invocaton'"
-  (realgud-suggest-invocation realgud:trepanjs-command-name
-                             realgud:trepanjs-minibuffer-history
-                             "js" "\\.js$"))
-
-(defun realgud:trepanjs-reset ()
-  "Trepanjs cleanup - remove debugger's internal buffers (frame,
-breakpoints, etc.)."
-  (interactive)
-  ;; (trepanjs-breakpoint-remove-all-icons)
-  (dolist (buffer (buffer-list))
-    (when (string-match "\\*trepanjs-[a-z]+\\*" (buffer-name buffer))
-      (let ((w (get-buffer-window buffer)))
-        (when w
-          (delete-window w)))
-      (kill-buffer buffer))))
-
-;; (defun trepanjs-reset-keymaps()
-;;   "This unbinds the special debugger keys of the source buffers."
-;;   (interactive)
-;;   (setcdr (assq 'trepanjs-debugger-support-minor-mode minor-mode-map-alist)
-;;       trepanjs-debugger-support-minor-mode-map-when-deactive))
-
-
-(defun realgud:trepanjs-customize ()
-  "Use `customize' to edit the settings of the `trepanjs' debugger."
-  (interactive)
-  (customize-group 'realgud:trepanjs))
-
-(provide-me "realgud:trepanjs-")
diff --git a/packages/realgud/realgud/debugger/trepanjs/init.el 
b/packages/realgud/realgud/debugger/trepanjs/init.el
deleted file mode 100644
index 881fcff..0000000
--- a/packages/realgud/realgud/debugger/trepanjs/init.el
+++ /dev/null
@@ -1,162 +0,0 @@
-;; Copyright (C) 2015-2016, 2018 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-;;; Regular expressions for nodejs Javascript debugger.
-
-(eval-when-compile (require 'cl-lib))   ;For setf.
-
-(require 'load-relative)
-(require-relative-list '("../../common/regexp"
-                        "../../common/loc"
-                        "../../common/init")
-                      "realgud-")
-(require-relative-list '("../../lang/js") "realgud-lang-")
-
-(defvar realgud:trepanjs-pat-hash (make-hash-table :test 'equal)
-  "Hash key is the what kind of pattern we want to match:
-backtrace, prompt, etc.  The values of a hash entry is a
-realgud-loc-pat struct")
-
-(declare-function make-realgud-loc-pat (realgud-loc))
-
-(defconst realgud:trepanjs-file-regexp   "\\([^ \t\n]+\\)\\(?: \\[.*\\]\\)?")
-
-;; realgud-loc-pat that describes a trepanjs location generally shown
-;; before a command prompt.
-;; For example:
-;;   break in /home/indutny/Code/git/indutny/myscript.js:1
-;;   exception in /usr/lib/nodejs/module.js [module.js]:362
-(setf (gethash "loc" realgud:trepanjs-pat-hash)
-      (make-realgud-loc-pat
-       :regexp (format
-               "\\(?:%s\\)*\\(?:break\\|exception\\|call\\) in %s at line 
%s:%s"
-               realgud:js-term-escape realgud:trepanjs-file-regexp
-               realgud:regexp-captured-num
-               realgud:regexp-captured-num)
-       :file-group 1
-       :line-group 2
-       :char-offset-group 3
-       ))
-
-;; realgud-loc-pat that describes a trepanjs command prompt
-;; For example:
-;;   (trepanjs):
-(setf (gethash "prompt" realgud:trepanjs-pat-hash)
-      (make-realgud-loc-pat
-       :regexp (format "^\\(?:%s\\)*(+trepanjs)+ " realgud:js-term-escape)
-       ))
-
-;;  realgud-loc-pat that describes a "breakpoint set" line
-;; For example:
-;;  Breakpoint 2 set in file /tmp/gcd.js, line 2.
-;;  Breakpoint 3 set in file /usr/lib/nodejs/module.js [module.js], line 380.
-(setf (gethash "brkpt-set" realgud:trepanjs-pat-hash)
-      (make-realgud-loc-pat
-       :regexp (format "^Breakpoint %s set in file %s, line %s.\n"
-                      realgud:regexp-captured-num
-                      realgud:trepanjs-file-regexp
-                      realgud:regexp-captured-num)
-       :num 1
-       :file-group 2
-       :line-group 3))
-
-;; realgud-loc-pat that describes a debugger "delete" (breakpoint) response.
-;; For example:
-;;   Deleted breakpoint 1
-(setf (gethash "brkpt-del" realgud:trepanjs-pat-hash)
-      (make-realgud-loc-pat
-       :regexp "^Deleted breakpoint \\(\\([0-9]+ *\\)+\\)\n"
-       :num 1))
-
-;; realgud-loc-pat that describes a V8 backtrace line.
-;; For example:
-;;    at repl:1:7
-;;    at Interface.controlEval 
(/src/external-vcs/github/trepanjs/lib/interface.js:352:18)
-;;    at REPLServer.b [as eval] (domain.js:183:18)
-(setf (gethash "lang-backtrace" realgud:trepanjs-pat-hash)
-  realgud:js-backtrace-loc-pat)
-
-;; realgud-loc-pat that describes a debugger "delete" (breakpoint)
-;; response.
-;; For example:
-;;   Deleted breakpoint 1.
-(setf (gethash "brkpt-del" realgud:trepanjs-pat-hash)
-      (make-realgud-loc-pat
-       :regexp (format "^Deleted breakpoint %s.\n"
-                      realgud:regexp-captured-num)
-       :num 1))
-
-
-(defconst realgud:trepanjs-frame-start-regexp  "\\(?:^\\|\n\\)\\(?: #\\)")
-(defconst realgud:trepanjs-frame-num-regexp    realgud:regexp-captured-num)
-(defconst realgud:trepanjs-frame-module-regexp "[^ \t\n]+")
-
-;;  realgud-loc-pat that describes debugger "backtrace" command line.
-;;  e.g.
-;; ## require called from file /usr/lib/nodejs/module.js [module.js] at line 
380:17
-;; ## in file /src/external-vcs/github/trepanjs/example/gcd.js 
[/src/external-vcs/github/trepanjs/example/gcd.js] at line 2:12
-(setf (gethash "debugger-backtrace" realgud:trepanjs-pat-hash)
-      (make-realgud-loc-pat
-       :regexp         (concat realgud:trepanjs-frame-start-regexp " "
-                       realgud:regexp-captured-num " "
-                       "\\(?:" realgud:trepanjs-frame-module-regexp "[ 
\t\n]+called from file "
-                       realgud:trepanjs-file-regexp
-                       "\\)\\| in file "
-                       realgud:regexp-captured-num
-                       "\\)"
-                       "at line \\(" realgud:regexp-captured-num "\\):"
-                       realgud:regexp-captured-num
-                       )
-       :num 1
-       :file-group 2
-       :line-group 3
-       :char-offset-group 4
-       ))
-
-(defconst realgud:trepanjs-debugger-name "trepanjs" "Name of debugger")
-
-;; Top frame number
-(setf (gethash "top-frame-num" realgud:trepanjs-pat-hash) 0)
-
-;; realgud-loc-pat that for a termination message.
-(setf (gethash "termination" realgud:trepanjs-pat-hash)
-       "^trepanjs: That's all, folks...\n")
-
-(setf (gethash realgud:trepanjs-debugger-name realgud-pat-hash) 
realgud:trepanjs-pat-hash)
-
-(defvar realgud:trepanjs-command-hash (make-hash-table :test 'equal)
-  "Hash key is command name like 'quit' and the value is
-  the trepanjs command to use, like 'quit!'")
-
-(setf (gethash realgud:trepanjs-debugger-name
-              realgud-command-hash) realgud:trepanjs-command-hash)
-
-(setf (gethash "break"      realgud:trepanjs-command-hash)
-      "setBreakpoint(%l)")
-(setf (gethash "clear"      realgud:trepanjs-command-hash)
-      "clearBreakpoint('%X', %l)")
-(setf (gethash "delete"      realgud:trepanjs-command-hash)
-      "clearBreakpoint('%X', %l)")
-;; We need aliases for step and next because the default would
-;; do step 1 and trepanjs doesn't handle this. Or when it does,
-;; it will probably look like step(1)
-(setf (gethash "eval"       realgud:trepanjs-command-hash) "eval(%q)")
-(setf (gethash "quit"       realgud:trepanjs-command-hash) "quit()")
-
-;; Unsupported features:
-(setf (gethash "kill"  realgud:trepanjs-command-hash) "*not-implemented*")
-
-(provide-me "realgud:trepanjs-")
diff --git a/packages/realgud/realgud/debugger/trepanjs/track-mode.el 
b/packages/realgud/realgud/debugger/trepanjs/track-mode.el
deleted file mode 100644
index 7a4d847..0000000
--- a/packages/realgud/realgud/debugger/trepanjs/track-mode.el
+++ /dev/null
@@ -1,90 +0,0 @@
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;;; "trepanjs" Debugger tracking a comint or eshell buffer.
-
-(require 'load-relative)
-(require-relative-list '(
-                        "../../common/cmds"
-                        "../../common/menu"
-                        "../../common/track"
-                        "../../common/track-mode"
-                        "../../common/utils"
-                        )
-                      "realgud-")
-(require-relative-list '("core" "init") "realgud:trepanjs-")
-;; (require-relative-list '("../../lang/js") "realgud-lang-")
-
-(declare-function realgud-track-mode 'realgud-track-mode)
-(declare-function realgud-track-mode-hook 'realgud-track-mode)
-(declare-function realgud-track-mode-setup 'realgud-track-mode)
-(declare-function realgud:track-set-debugger 'realgud-track-mode)
-(declare-function realgud-goto-line-for-pt 'realgud-track-mode)
-(declare-function realgud:remove-ansi-schmutz 'realgud:utils)
-
-(realgud-track-mode-vars "trepanjs")
-
-(define-key realgud-track-mode-map
-  (kbd "C-c !!") 'realgud:goto-lang-backtrace-line)
-(define-key realgud-track-mode-map
-  (kbd "C-c !b") 'realgud:goto-debugger-backtrace-line)
-
-(declare-function realgud:ruby-populate-command-keys 'realgud-lang-ruby)
-
-(defun realgud:trepanjs-goto-syntax-error-line (pt)
-  "Display the location mentioned in a Syntax error line
-described by PT."
-  (interactive "d")
-  (realgud-goto-line-for-pt pt "syntax-error"))
-
-(define-key trepanjs-track-mode-map
-  (kbd "C-c !s") 'realgud:trepanjs-goto-syntax-error-line)
-
-(defun trepanjs-track-mode-hook()
-  (if trepanjs-track-mode
-      (progn
-       (use-local-map trepanjs-track-mode-map)
-       (realgud:remove-ansi-schmutz)
-       (message "using trepanjs mode map")
-       )
-    (message "trepanjs track-mode-hook disable called"))
-)
-
-(define-minor-mode trepanjs-track-mode
-  "Minor mode for tracking trepanjs source locations inside a process shell 
via realgud. trepanjs is a Ruby debugger.
-
-If called interactively with no prefix argument, the mode is toggled. A prefix 
argument, captured as ARG, enables the mode if the argument is positive, and 
disables it otherwise.
-
-\\{trepanjs-track-mode-map}
-"
-  :init-value nil
-  ;; :lighter " trepanjs"   ;; mode-line indicator from realgud-track is 
sufficient.
-  ;; The minor mode bindings.
-  :global nil
-  :group 'realgud:trepanjs
-  :keymap trepanjs-track-mode-map
-  (realgud:track-set-debugger "trepanjs")
-  (if trepanjs-track-mode
-      (progn
-       (realgud-track-mode-setup 't)
-        (trepanjs-track-mode-hook))
-    (progn
-      (setq realgud-track-mode nil)
-      ))
-)
-
-(provide-me "realgud:trepanjs-")
diff --git a/packages/realgud/realgud/debugger/trepanjs/trepanjs.el 
b/packages/realgud/realgud/debugger/trepanjs/trepanjs.el
deleted file mode 100644
index 1093fc7..0000000
--- a/packages/realgud/realgud/debugger/trepanjs/trepanjs.el
+++ /dev/null
@@ -1,85 +0,0 @@
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-;;; Regular expressions for nodejs Javascript debugger.
-
-;;  `trepanjs' Main interface to trepanjs via Emacs
-(require 'load-relative)
-(require-relative-list '("../../common/helper") "realgud-")
-(require-relative-list '("../../common/run")    "realgud:")
-(require-relative-list '("../../common/utils")    "realgud-")
-(require-relative-list '("core" "track-mode") "realgud:trepanjs-")
-(require-relative-list '("../../lang/js") "realgud-lang-")
-
-(declare-function realgud:trepanjs-query-cmdline  'realgud:trepanjs-core)
-(declare-function realgud:trepanjs-parse-cmd-args 'realgud:trepanjs-core)
-(declare-function realgud:run-debugger 'realgud:run)
-
-;; This is needed, or at least the docstring part of it is needed to
-;; get the customization menu to work in Emacs 24.
-(defgroup realgud:trepanjs nil
-  "The realgud interface to the Ruby 1.9.2 1.9.3 \"trepanjsning\" debugger"
-  :group 'ruby
-  :group 'realgud
-  :version "24.3")
-
-;; -------------------------------------------------------------------
-;; User-definable variables
-;;
-
-(defcustom realgud:trepanjs-command-name
-  ;;"trepanjs --emacs 3"
-  "trepanjs"
-  "File name for executing the Ruby debugger and command options.
-This should be an executable on your path, or an absolute file name."
-  :type 'string
-  :group 'realgud:trepanjs)
-
-;;;###autoload
-(defun realgud:trepanjs (&optional opt-cmd-line no-reset)
-  "Invoke the trepanjs Ruby debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `trepanjs-parse-cmd-args' and path elements found by that
-are expanded using `expand-file-name'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-"
-  (interactive)
-  (let ((cmd-buf
-        (realgud:run-debugger "trepanjs" 'realgud:trepanjs-query-cmdline
-                              'realgud:trepanjs-parse-cmd-args
-                              'realgud:trepanjs-minibuffer-history
-                              opt-cmd-line no-reset)))
-    ;; (if cmd-buf
-    ;;         (with-current-buffer cmd-buf
-    ;;           ;; FIXME should allow customization whether to do or not
-    ;;           ;; and also only do if hook is not already there.
-    ;;           (realgud:remove-ansi-schmutz)
-    ;;           )
-    ;;   )
-    ))
-
-(defalias 'trepanjs 'realgud:trepanjs)
-(provide-me "realgud-")
-;;; trepanjs.el ends here
diff --git a/packages/realgud/realgud/debugger/zshdb/Makefile.am 
b/packages/realgud/realgud/debugger/zshdb/Makefile.am
deleted file mode 100644
index e6c68b4..0000000
--- a/packages/realgud/realgud/debugger/zshdb/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-include ../common.mk
-
-lisp_files = $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-EXTRA_DIST = $(lisp_files)
diff --git a/packages/realgud/realgud/debugger/zshdb/core.el 
b/packages/realgud/realgud/debugger/zshdb/core.el
deleted file mode 100644
index 912c0ed..0000000
--- a/packages/realgud/realgud/debugger/zshdb/core.el
+++ /dev/null
@@ -1,191 +0,0 @@
-;; Copyright (C) 2010-2011, 2014-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-(require 'load-relative)
-(require-relative-list '("../../common/track" "../../common/core")
-                      "realgud-")
-(require-relative-list '("init") "realgud:zshdb-")
-
-(declare-function realgud:expand-file-name-if-exists 'realgud-core)
-(declare-function realgud-parse-command-arg  'realgud-core)
-(declare-function realgud-query-cmdline      'realgud-core)
-(declare-function realgud-suggest-invocation 'realgud-core)
-(declare-function realgud-lang-mode?         'realgud-lang)
-
-;; FIXME: I think the following could be generalized and moved to
-;; realgud-... probably via a macro.
-(defvar realgud:zshdb-minibuffer-history nil
-  "minibuffer history list for the command `realgud:zshdb'.")
-
-(easy-mmode-defmap zshdb-minibuffer-local-map
-  '(("\C-i" . comint-dynamic-complete-filename))
-  "Keymap for minibuffer prompting of zshdb startup command."
-  :inherit minibuffer-local-map)
-
-;; FIXME: I think this code and the keymaps and history
-;; variable chould be generalized, perhaps via a macro.
-(defun zshdb-query-cmdline (&optional opt-debugger)
-  (realgud-query-cmdline
-   'zshdb-suggest-invocation
-   zshdb-minibuffer-local-map
-   'realgud:zshdb-minibuffer-history
-   opt-debugger))
-
-;;; FIXME: DRY this with other *-parse-cmd-args routines
-(defun zshdb-parse-cmd-args (orig-args)
-  "Parse command line ORIG-ARGS for the annotate level and name of script to 
debug.
-
-ORIG-ARGS should contain a tokenized list of the command line to run.
-
-We return the a list containing
-* the command processor (e.g. zshdb) and it's arguments if any - a list of 
strings
-* the name of the debugger given (e.g. zshdb) and its arguments - a list of 
strings
-* the script name and its arguments - list of strings
-* whether the annotate or emacs option was given ('-A', '--annotate' or 
'--emacs) - a boolean
-
-For example for the following input
-  (map 'list 'symbol-name
-   '(zsh -b /usr/local/bin/zshdb -A -L . ./gcd.sh a b))
-
-we might return:
-   ((\"zsh\" \"-b\") (\"/usr/local/bin/zshdb\" \"-A\") (\"-L\" \"/tmp\" 
\"/tmp/gcd.sh\" \"a\" \"b\") 't)
-
-Note that path elements have been expanded via 
`realgud:expand-file-name-if-exists'.
-"
-
-  ;; Parse the following kind of pattern:
-  ;;  [zsh zsh-options] zshdb zshdb-options script-name script-options
-  (let (
-       (args orig-args)
-       (pair)          ;; temp return from
-       ;; zsh doesn't have any optional two-arg options
-       (zsh-opt-two-args '())
-       (zsh-two-args '("o" "c"))
-
-       ;; One dash is added automatically to the below, so
-       ;; h is really -h and -host is really --host.
-       (zshdb-two-args '("A" "-annotate" "l" "-library"
-                          "c" "-command" "-t" "-tty"
-                          "x" "-eval-command"))
-       (zshdb-opt-two-args '())
-       (interp-regexp
-        (if (member system-type (list 'windows-nt 'cygwin 'msdos))
-            "^zsh*\\(.exe\\)?$"
-          "^zsh*$"))
-
-       ;; Things returned
-       (script-name nil)
-       (debugger-name nil)
-       (interpreter-args '())
-       (debugger-args '())
-       (script-args '())
-       (annotate-p nil))
-
-    (if (not (and args))
-       ;; Got nothing: return '(nil, nil)
-       (list interpreter-args debugger-args script-args annotate-p)
-      ;; else
-      ;; Strip off optional "zsh" or "zsh.exe" etc.
-      (when (string-match interp-regexp
-                         (file-name-sans-extension
-                          (file-name-nondirectory (car args))))
-       (setq interpreter-args (list (pop args)))
-
-       ;; Strip off zsh-specific options
-       (while (and args
-                   (string-match "^-" (car args)))
-         (setq pair (realgud-parse-command-arg
-                     args zsh-two-args zsh-opt-two-args))
-         (nconc interpreter-args (car pair))
-         (setq args (cadr pair))))
-
-      ;; Remove "zshdb" from "zshdb --zshdb-options script
-      ;; --script-options"
-      (setq debugger-name (file-name-sans-extension
-                          (file-name-nondirectory (car args))))
-      (unless (string-match "^zshdb$" debugger-name)
-       (message
-        "Expecting debugger name `%s' to be `zshdb'"
-        debugger-name))
-      (setq debugger-args (list (pop args)))
-
-      ;; Skip to the first non-option argument.
-      (while (and args (not script-name))
-       (let ((arg (car args)))
-         (cond
-          ;; Annotation or emacs option with level number.
-          ((or (member arg '("--annotate" "-A"))
-               (equal arg "--emacs"))
-           (setq annotate-p t)
-           (nconc debugger-args (list (pop args))))
-          ;; Combined annotation and level option.
-          ((string-match "^--annotate=[0-9]" arg)
-           (nconc debugger-args (list (pop args)) )
-           (setq annotate-p t))
-          ;; Library option
-          ((member arg '("--library" "-l"))
-           (setq arg (pop args))
-           (nconc debugger-args
-                  (list arg (realgud:expand-file-name-if-exists
-                             (pop args)))))
-          ;; Other options with arguments.
-          ((string-match "^-" arg)
-           (setq pair (realgud-parse-command-arg
-                       args zshdb-two-args zshdb-opt-two-args))
-           (nconc debugger-args (car pair))
-           (setq args (cadr pair)))
-          ;; Anything else must be the script to debug.
-          (t (setq script-name (realgud:expand-file-name-if-exists arg))
-             (setq script-args (cons script-name (cdr args))))
-          )))
-      (list interpreter-args debugger-args script-args annotate-p))))
-
-;; To silence Warning: reference to free variable
-(defvar realgud:zshdb-command-name)
-
-(defun zshdb-suggest-invocation (debugger-name)
-  "Suggest a zshdb command invocation via `realgud-suggest-invocaton'"
-  (realgud-suggest-invocation (or debugger-name realgud:zshdb-command-name)
-                             realgud:zshdb-minibuffer-history
-                             "sh" "\\.\\(?:z\\)?sh$"))
-
-(defun realgud:zshdb-remove-ansi-schmutz()
-  "Remove ASCII escape sequences that node.js 'decorates' in
-prompts and interactive output with"
-  (add-to-list
-   'comint-preoutput-filter-functions
-   (lambda (output)
-     (replace-regexp-in-string "\033\\[\\?[0-9]+[GKJhl]" "" output)))
-  )
-
-(defun zshdb-reset ()
-  "Zshdb cleanup - remove debugger's internal buffers (frame,
-breakpoints, etc.)."
-  (interactive)
-  ;; (zshdb-breakpoint-remove-all-icons)
-  (dolist (buffer (buffer-list))
-    (when (string-match "\\*zshdb-[a-z]+\\*" (buffer-name buffer))
-      (let ((w (get-buffer-window buffer)))
-        (when w
-          (delete-window w)))
-      (kill-buffer buffer))))
-
-;; (defun zshdb-reset-keymaps()
-;;   "This unbinds the special debugger keys of the source buffers."
-;;   (interactive)
-;;   (setcdr (assq 'zshdb-debugger-support-minor-mode minor-mode-map-alist)
-;;       zshdb-debugger-support-minor-mode-map-when-deactive))
-
-
-(defun realgud:zshdb-customize ()
-  "Use `customize' to edit the settings of the `zshdb' debugger."
-  (interactive)
-  (customize-group 'realgud:zshdb))
-
-(provide-me "realgud:zshdb-")
diff --git a/packages/realgud/realgud/debugger/zshdb/init.el 
b/packages/realgud/realgud/debugger/zshdb/init.el
deleted file mode 100644
index 3fac621..0000000
--- a/packages/realgud/realgud/debugger/zshdb/init.el
+++ /dev/null
@@ -1,106 +0,0 @@
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-(eval-when-compile (require 'cl-lib))   ;For setf.
-
-(require 'load-relative)
-(require-relative-list '("../../common/regexp"
-                        "../../common/loc"
-                        "../../common/init")
-                      "realgud-")
-(require-relative-list '("../../lang/posix-shell") "realgud-lang-")
-
-(defvar realgud:zshdb-pat-hash)
-(declare-function make-realgud-loc-pat (realgud-loc))
-
-(defvar realgud:zshdb-pat-hash (make-hash-table :test 'equal)
-  "Hash key is the what kind of pattern we want to match:
-backtrace, prompt, etc.  The values of a hash entry is a
-realgud-loc-pat struct")
-
-;; realgud-loc-pat that describes a zshdb location generally shown
-;; before a command prompt.
-;; For example:
-;;   (/etc/init.d/apparmor:35):
-(setf (gethash "loc" realgud:zshdb-pat-hash) realgud:POSIX-debugger-loc-pat)
-
-;; realgud-loc-pat that describes a zshdb command prompt
-;; For example:
-;;   zshdb<10>
-;;   zshdb<(5)>
-;;   zshdb<<1>>
-(setf (gethash "prompt" realgud:zshdb-pat-hash)
-      (make-realgud-loc-pat
-       :regexp   (format "^zshdb[<]+[(]*%s[)]*[>]+ "
-                        realgud:regexp-captured-num)
-       :num 1
-       ))
-
-;;  realgud-loc-pat that describes a "breakpoint set" line.
-(setf (gethash "brkpt-set" realgud:zshdb-pat-hash)
-      realgud:POSIX-debugger-brkpt-set-pat)
-
-;; realgud-loc-pat that describes a debugger "delete" (breakpoint) response.
-;; For example:
-;;   Deleted breakpoint 1.
-(setf (gethash "brkpt-del" realgud:zshdb-pat-hash)
-      realgud:POSIX-debugger-brkpt-del-pat)
-
-;; realgud-loc-pat that describes a debugger "disable" (breakpoint) response.
-;; For example:
-;;   Breakpoint entry 4 disabled.
-(setf (gethash "brkpt-disable" realgud:zshdb-pat-hash)
-      realgud:POSIX-debugger-brkpt-disable-pat)
-
-;; realgud-loc-pat that describes a debugger "enable" (breakpoint) response.
-;; For example:
-;;   Breakpoint entry 4 enabled.
-(setf (gethash "brkpt-enable" realgud:zshdb-pat-hash)
-      realgud:POSIX-debugger-brkpt-enable-pat)
-
-;; realgud-loc-pat that describes a debugger "backtrace" command line.
-;; For example:
-;;   ->0 in file `/etc/apparmor/fns' at line 24
-;;   ##1 /etc/apparmor/fns called from file `/etc/init.d/apparmor' at line 35
-;;   ##2 /etc/init.d/apparmor called from file `/usr/bin/zshdb' at line 129
-(setf (gethash "debugger-backtrace" realgud:zshdb-pat-hash)
-      realgud:POSIX-debugger-backtrace-pat)
-
-;; realgud-loc-pat that for a termination message.
-(setf (gethash "termination" realgud:zshdb-pat-hash)
-       "^zshdb: That's all, folks...\n")
-
-(setf (gethash "font-lock-keywords" realgud:zshdb-pat-hash)
-      realgud:POSIX-debugger-font-lock-keywords)
-
-(setf (gethash "zshdb" realgud-pat-hash) realgud:zshdb-pat-hash)
-
-(defvar realgud:zshdb-command-hash (make-hash-table :test 'equal)
-  "Hash key is command name like 'quit' and the value is
-  the zshdb command to use, like 'quit!'")
-
-(setf (gethash "zshdb"  realgud-command-hash) realgud:zshdb-command-hash)
-
-(setf (gethash "clear"  realgud:zshdb-command-hash) "clear %l")
-(setf (gethash "eval"   realgud:zshdb-command-hash) "eval %s")
-(setf (gethash "quit"   realgud:zshdb-command-hash) "quit")
-(setf (gethash "until"  realgud:zshdb-command-hash) "continue %l")
-
-;; Unsupported features:
-(setf (gethash "jump"  realgud:zshdb-command-hash) "*not-implemented*")
-
-(provide-me "realgud:zshdb-")
diff --git a/packages/realgud/realgud/debugger/zshdb/track-mode.el 
b/packages/realgud/realgud/debugger/zshdb/track-mode.el
deleted file mode 100644
index 9025a06..0000000
--- a/packages/realgud/realgud/debugger/zshdb/track-mode.el
+++ /dev/null
@@ -1,71 +0,0 @@
-;; Copyright (C) 2012, 2014-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;;; "zshdb" Debugger tracking a comint buffer.
-
-(require 'load-relative)
-(require-relative-list '(
-                        "../../common/cmds"
-                        "../../common/menu"
-                        "../../common/track"
-                        "../../common/track-mode"
-                        )
-                      "realgud-")
-(require-relative-list '("core" "init") "realgud:zshdb-")
-(require-relative "../../lang/posix-shell" nil "realgud-lang-")
-
-(declare-function realgud:track-set-debugger 'realgud-track-mode)
-(declare-function realgud-track-mode-setup   'realgud-track-mode)
-(declare-function realgud-posix-shell-populate-command-keys
-                 'realgud-lang-posix-shell)
-(declare-function realgud:zshdb-remove-ansi-schmutz 'realgud:zshdb-core)
-
-(realgud-track-mode-vars "zshdb")
-(realgud-posix-shell-populate-command-keys zshdb-track-mode-map)
-
-(declare-function realgud-track-mode(bool))
-
-
-(defun zshdb-track-mode-hook()
-  (if zshdb-track-mode
-      (progn
-       (use-local-map zshdb-track-mode-map)
-       (realgud:zshdb-remove-ansi-schmutz)
-       (message "using zshdb mode map")
-       )
-    (message "zshdb track-mode-hook disable called"))
-)
-
-(define-minor-mode zshdb-track-mode
-  "Minor mode for tracking zshdb source locations inside a process shell via 
realgud. zshdb is a zsh debugger.
-
-If called interactively with no prefix argument, the mode is toggled. A prefix 
argument, captured as ARG, enables the mode if the argument is positive, and 
disables it otherwise.
-
-\\{zshdb-track-mode-map}
-"
-  :init-value nil
-  ;; :lighter " zshdb"   ;; mode-line indicator from realgud-track is 
sufficient.
-  ;; The minor mode bindings.
-  :global nil
-  :group 'realgud:zshdb
-  :keymap zshdb-track-mode-map
-
-  (realgud:track-set-debugger "zshdb")
-  (if zshdb-track-mode
-      (progn
-       (realgud-track-mode-setup 't)
-        (zshdb-track-mode-hook))
-    (progn
-      (setq realgud-track-mode nil)
-      ))
-)
-
-(define-key zshdb-short-key-mode-map "T" 'realgud:cmd-backtrace)
-
-(provide-me "realgud:zshdb-")
diff --git a/packages/realgud/realgud/debugger/zshdb/zshdb.el 
b/packages/realgud/realgud/debugger/zshdb/zshdb.el
deleted file mode 100644
index 362ed39..0000000
--- a/packages/realgud/realgud/debugger/zshdb/zshdb.el
+++ /dev/null
@@ -1,89 +0,0 @@
-;; Copyright (C) 2011, 2014-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;;  `zshdb' Main interface to zshdb via Emacs
-(require 'load-relative)
-(require-relative-list '("../../common/helper") "realgud-")
-(require-relative-list '("../../common/track")  "realgud-")
-(require-relative-list '("../../common/run")    "realgud:")
-(require-relative-list '("core" "track-mode")   "realgud:zshdb-")
-
-(declare-function zshdb-track-mode (bool))
-(declare-function zshdb-query-cmdline  'realgud:zshdb-core)
-(declare-function zshdb-parse-cmd-args 'realgud:zshdb-core)
-
-;; This is needed, or at least the docstring part of it is needed to
-;; get the customization menu to work in Emacs 24.
-(defgroup realgud:zshdb nil
-  "The realgud interface to the Zsh debugger, zshdb"
-  :group 'realgud
-  :version "24.3")
-
-;; -------------------------------------------------------------------
-;; User definable variables
-;;
-
-(defcustom realgud:zshdb-command-name
-  ;;"zshdb --emacs 3"
-  "zshdb"
-  "File name for executing the zshdb and its command options.
-This should be an executable on your path, or an absolute file name."
-  :type 'string
-  :group 'realgud:zshdb)
-
-(declare-function zshdb-track-mode (bool))
-
-;; -------------------------------------------------------------------
-;; The end.
-;;
-
-(declare-function zshdb-track-mode     'realgud-zshdb-track-mode)
-(declare-function zshdb-query-cmdline  'realgud:zshdb-core)
-(declare-function zshdb-parse-cmd-args 'realgud:zshdb-core)
-(declare-function realgud:run-debugger 'realgud:run)
-
-; ### FIXME: DRY with other top-level routines
-;;;###autoload
-(defun realgud:zshdb (&optional opt-cmd-line no-reset)
-  "Invoke the zshdb Z-shell debugger and start the Emacs user interface.
-
-String OPT-CMD-LINE specifies how to run zshdb.
-
-OPT-CMD-LINE is treated like a shell string; arguments are
-tokenized by `split-string-and-unquote'. The tokenized string is
-parsed by `zshdb-parse-cmd-args' and path elements found by that
-are expanded using `realgud:expand-file-name-if-exists'.
-
-Normally, command buffers are reused when the same debugger is
-reinvoked inside a command buffer with a similar command. If we
-discover that the buffer has prior command-buffer information and
-NO-RESET is nil, then that information which may point into other
-buffers and source buffers which may contain marks and fringe or
-marginal icons is reset. See `loc-changes-clear-buffer' to clear
-fringe and marginal icons.
-"
-  (interactive)
-  (let ((cmd-buf
-        (realgud:run-debugger realgud:zshdb-command-name 'zshdb-query-cmdline
-                              'zshdb-parse-cmd-args
-                              'realgud:zshdb-minibuffer-history
-                              opt-cmd-line no-reset)))
-    ;; (if cmd-buf
-    ;;         (with-current-buffer cmd-buf
-    ;;           ;; FIXME should allow customization whether to do or not
-    ;;           ;; and also only do if hook is not already there.
-    ;;           (realgud:zshdb-remove-ansi-schmutz)
-    ;;           )
-    ;;   )
-    ))
-
-;;;###autoload
-(defalias 'zshdb 'realgud:zshdb)
-
-(provide-me "realgud-")
diff --git a/packages/realgud/realgud/lang/Makefile.am 
b/packages/realgud/realgud/lang/Makefile.am
deleted file mode 100644
index a6f5e4c..0000000
--- a/packages/realgud/realgud/lang/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-lispdir = @lispdir_realgud@/$(notdir $(subdir))
-lisp_files := $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-EXTRA_DIST = $(lisp_files)
-MOSTLYCLEANFILES = *.elc
diff --git a/packages/realgud/realgud/lang/java.el 
b/packages/realgud/realgud/lang/java.el
deleted file mode 100644
index da0e54a..0000000
--- a/packages/realgud/realgud/lang/java.el
+++ /dev/null
@@ -1,47 +0,0 @@
-;; Copyright (C) 2017 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;;; Common Java constants and regular expressions.
-(require 'load-relative)
-(require-relative-list '("../common/regexp" "../common/loc" "../common/track")
-                      "realgud-")
-
-(declare-function realgud-goto-line-for-pt 'realgud-track)
-
-(defun realgud-java-populate-command-keys (&optional map)
-  "Bind the debugger function key layout used by many debuggers.
-
-\\{realgud-example-map-standard}"
-  (define-key map (kbd "C-c !m") 'realgud:goto-maven-errmsg-line)
-  )
-
-
-(defconst realgud-maven-error-loc-pat
-  (make-realgud-loc-pat
-   :regexp "^\\[\\(?:ERROR\\|WARNING\\)\\] 
\\(.*\\):\\[\\([0-9][0-9]*\\),\\([0-9][0-9]*\\)\\]"
-   :file-group 1
-   :line-group 2
-   :char-offset-group 3)
-  "A realgud-loc-pat struct that describes a maven error or warning line"
-  )
-
-(defun realgud:goto-maven-errmsg-line (pt)
-  "Display the location mentioned by the maven error at PT."
-  (interactive "d")
-  (realgud-goto-line-for-pt pt "maven-error"))
-
-(provide-me "realgud-lang-")
diff --git a/packages/realgud/realgud/lang/js.el 
b/packages/realgud/realgud/lang/js.el
deleted file mode 100644
index 8d19847..0000000
--- a/packages/realgud/realgud/lang/js.el
+++ /dev/null
@@ -1,41 +0,0 @@
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-(require 'load-relative)
-(require-relative-list '("../common/regexp" "../common/loc" "../common/track")
-                      "realgud-")
-
-(defconst realgud:js-term-escape "[[0-9]+[GKJ]"
-  "Escape sequence regular expression pattern trepanjs often puts
-  in around prompts")
-
-(declare-function realgud-goto-line-for-pt 'realgud-track)
-
-;;  Regular expression that describes a Perl Carp backtrace line.
-;;  at /tmp/foo.pl line 7
-;;     main::__ANON__('Illegal division by zero at /tmp/foo.pl line 4.\x{a}') 
called at /tmp/foo.pl line 4
-;;     main::foo(3) called at /tmp/foo.pl line 8
-(defconst realgud:js-backtrace-loc-pat
-  (make-realgud-loc-pat
-   :regexp (format "^\\(?:[\t ]+at \\)?\\([^:]+\\) (\\(.*\\):%s:%s)"
-                  realgud:regexp-captured-num realgud:regexp-captured-num)
-   :file-group 2
-   :line-group 3
-   :char-offset-group 4)
-  "A realgud-loc-pat struct that describes a V8 backtrace location")
-
-(provide-me "realgud-lang-")
diff --git a/packages/realgud/realgud/lang/perl.el 
b/packages/realgud/realgud/lang/perl.el
deleted file mode 100644
index cad3374..0000000
--- a/packages/realgud/realgud/lang/perl.el
+++ /dev/null
@@ -1,60 +0,0 @@
-;; Copyright (C) 2011, 2014, 2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;;; Common Perl constants and regular expressions.
-(require 'load-relative)
-(require-relative-list '("../common/regexp" "../common/loc" "../common/track")
-                      "realgud-")
-
-(declare-function realgud-goto-line-for-pt 'realgud-track)
-
-;;  Regular expression that describes a Perl Carp backtrace line.
-;;  at /tmp/foo.pl line 7
-;;     main::__ANON__('Illegal division by zero at /tmp/foo.pl line 4.\x{a}') 
called at /tmp/foo.pl line 4
-;;     main::foo(3) called at /tmp/foo.pl line 8
-(defconst realgud-perl-carp-loc-pat
-      (make-realgud-loc-pat
-       :regexp   (concat
-                 "\\(?:^\\|
-\\)"
-                 "\\(?:[ \t]+\\(?:\\|.* called \\)at \\(.*\\) line 
\\([0-9]+\\)\\)")
-       :file-group 1
-       :line-group 2)
-  "A realgud-loc-pat struct that describes a line used in a Carp message"  )
-
-(defconst realgud-perl-errmsg-loc-pat
-      (make-realgud-loc-pat
-       :regexp   (concat
-                 " at \\(.+\\) line \\([0-9]+\\).$")
-       :file-group 1
-       :line-group 2)
-  "A realgud-loc-pat struct that describes a line used in an error message"  )
-
-;;  Regular expression that pseudo-files in caller. For example:
-;;    (eval 1006)[../example/eval.pl:5]
-(defconst realgud-perl-ignore-file-re "(eval [0-9]+)\\(\\[.+\\]\\)?"
-  "Regular expression that pseudo-files of caller()")
-
-;; FIXME: there is probably a less redundant way to do the following
-;; FNS.
-(defun realgud:perl-goto-errmsg-line (pt)
-  "Display the location mentioned by the Perl error message described by PT."
-  (interactive "d")
-  (realgud-goto-line-for-pt pt "perl-errmsg"))
-
-(defun realgud-perl-populate-command-keys (&optional map)
-  "Bind the debugger function key layout used by many debuggers.
-
-\\{realgud-example-map-standard}"
-  (define-key map (kbd "C-c !b") 'realgud:goto-debugger-backtrace-line)
-  (define-key map (kbd "C-c !!") 'realgud:goto-lang-backtrace-line)
-  (define-key map (kbd "C-c !e") 'realgud:perl-goto-errmsg-line)
-  )
-
-(provide-me "realgud-lang-")
diff --git a/packages/realgud/realgud/lang/posix-shell.el 
b/packages/realgud/realgud/lang/posix-shell.el
deleted file mode 100644
index 1ef2313..0000000
--- a/packages/realgud/realgud/lang/posix-shell.el
+++ /dev/null
@@ -1,150 +0,0 @@
-;; Copyright (C) 2015-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;;
-;; Common POSIX-Shell like constants and regular expressions.
-;; Actually a lot of this is not about POSIX shell as it is about the
-;; common-ness of bashdb, zshdb, and kshdb. But since those are the
-;; *only* debuggers I know of for POSIX shells, it's not too much of
-;; a stretch to think of this as for all "shell".
-
-(require 'load-relative)
-(require-relative-list '("../common/regexp" "../common/loc"
-                        "../common/track" "../common/send")
-                      "realgud-")
-
-(defconst realgud-shell-backtrace-loc-pat
-  (make-realgud-loc-pat
-   :regexp "^[ \t]+from \\([^:]+\\):\\([0-9]+\\)\\(?: in `.*'\\)?"
-   :file-group 1
-   :line-group 2)
-  "A realgud-loc-pat struct that describes a Shell backtrace (or
-traceback) line."  )
-
-(defconst realgud-shell-frame-start-regexp
-  "\\(?:^\\|\n\\)\\(->\\|##\\)")
-
-(defconst realgud-shell-frame-num-regexp
-  realgud:regexp-captured-num)
-
-(defconst realgud-shell-frame-file-regexp
-  "[ \t\n]+\\(?:in\\|from\\) file `\\(.+\\)'")
-
-(defconst realgud-shell-frame-line-regexp
-  (format "[ \t\n]+at line %s\\(?:\n\\|$\\)" realgud:regexp-captured-num))
-
-(defun realgud-posix-shell-populate-command-keys (&optional map)
-  "Bind the debugger function key layout used by many debuggers.
-
-\\{realgud-example-map-standard}"
-  (define-key map (kbd "C-c !b") 'realgud:goto-debugger-backtrace-line)
-  (define-key map (kbd "C-c !!") 'realgud:goto-lang-backtrace-line)
-  )
-
-;; Regular expression that describes a bashdb/zshdb location generally shown
-;; before a command prompt.
-;; For example:
-;;   (/etc/init.d/apparmor:35):
-(defconst realgud:POSIX-debugger-loc-pat
-      (make-realgud-loc-pat
-       :regexp "\\(?:^\\|\n\\)(\\([^:]+\\):\\([0-9]*\\)):\\(?:\n\\(.+\\)\\)?"
-       :file-group 1
-       :line-group 2
-       :text-group 3)
-      "A realgud-loc-pat struct that describes a POSIX shell debugger
-      location line.")
-
-;; Regular expression that describes a debugger "backtrace" command line.
-;; For example:
-;;   ->0 in file `/etc/apparmor/fns' at line 24
-;;   ##1 /etc/apparmor/fns called from file `/etc/init.d/apparmor' at line 35
-;;   ##2 /etc/init.d/apparmor called from file `/usr/bin/zshdb' at line 129
-(defconst realgud:POSIX-debugger-backtrace-pat
-  (make-realgud-loc-pat
-   :regexp     (concat realgud-shell-frame-start-regexp
-                       realgud-shell-frame-num-regexp "[ ]?"
-                       "\\(.*\\)"
-                       realgud-shell-frame-file-regexp
-                       "\\(?:" realgud-shell-frame-line-regexp "\\)?"
-                       )
-   :num 2
-   :file-group 4
-   :line-group 5)
-  "A realgud-loc-pat struct that describes a Python trepan
-      backtrace location line." )
-
-;;  Regular expression that describes a "breakpoint set" line
-(defconst realgud:POSIX-debugger-brkpt-set-pat
-  (make-realgud-loc-pat
-   :regexp (format "^Breakpoint \\([0-9]+\\) set in file \\(.+\\), line %s.\n"
-                  realgud:regexp-captured-num)
-   :num 1
-   :file-group 2
-   :line-group 3))
-
-;; Regular expression that describes a debugger "delete" (breakpoint) response.
-;; For example:
-;;   Removed 1 breakpoint(s).
-(defconst realgud:POSIX-debugger-brkpt-del-pat
-  (make-realgud-loc-pat
-   :regexp (format "^Deleted breakpoint %s\n"
-                  realgud:regexp-captured-num)
-   :num 1))
-
-;; Regular expression that describes a debugger "disable" (breakpoint) 
response.
-;; For example:
-;;   Breakpoint entry 4 disabled.
-(defconst realgud:POSIX-debugger-brkpt-disable-pat
-  (make-realgud-loc-pat
-   :regexp (format "^Breakpoint entry %s disabled."
-                  realgud:regexp-captured-num)
-   :num 1))
-
-;; Regular expression that describes a debugger "enable" (breakpoint) response.
-;; For example:
-;;   Breakpoint entry 4 enabled.
-(defconst realgud:POSIX-debugger-brkpt-enable-pat
-  (make-realgud-loc-pat
-   :regexp (format "^Breakpoint entry %s enabled."
-                  realgud:regexp-captured-num)
-   :num 1))
-
-(defconst realgud:POSIX-debugger-font-lock-keywords
-  '(
-    ;; The frame number and first type name, if present.
-    ;; E.g. ->0 in file `/etc/init.d/apparmor' at line 35
-    ;;      --^-
-    ("^\\(->\\|##\\)\\([0-9]+\\) "
-     (2 realgud-backtrace-number-face))
-
-    ;; File name.
-    ;; E.g. ->0 in file `/etc/init.d/apparmor' at line 35
-    ;;          ---------^^^^^^^^^^^^^^^^^^^^-
-    ("[ \t]+\\(in\\|from\\) file `\\(.+\\)'"
-     (2 realgud-file-name-face))
-
-    ;; File name.
-    ;; E.g. ->0 in file `/etc/init.d/apparmor' at line 35
-    ;;                                         --------^^
-    ;; Line number.
-    ("[ \t]+at line \\([0-9]+\\)$"
-     (1 realgud-line-number-face))
-    ;; (trepan-frames-match-current-line
-    ;;  (0 trepan-frames-current-frame-face append))
-    ))
-
-(provide-me "realgud-lang-")
diff --git a/packages/realgud/realgud/lang/python.el 
b/packages/realgud/realgud/lang/python.el
deleted file mode 100644
index d575d36..0000000
--- a/packages/realgud/realgud/lang/python.el
+++ /dev/null
@@ -1,196 +0,0 @@
-;; Copyright (C) 2011, 2014-2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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/>.
-
-;;; Common Python constants and regular expressions.
-(require 'load-relative)
-(require-relative-list '("../common/regexp" "../common/loc" "../common/track")
-                      "realgud-")
-
-(declare-function realgud-goto-line-for-pt 'realgud-track)
-
-(defconst realgud-python-backtrace-loc-pat
-  (make-realgud-loc-pat
-   :regexp "^[ \t]+File \"\\(.+\\)\", line \\([0-9]+\\)"
-   :file-group 1
-   :line-group 2)
-  "A realgud-loc-pat struct that describes a Python backtrace (or
-traceback) line."  )
-
-;;  Regular expression that pseudo-files in caller. For example:
-;;    <string>
-(defconst realgud-python-ignore-file-re "<string>"
-  "Regular expression that pseudo-files of caller()")
-
-(defun realgud-python-populate-command-keys (&optional map)
-  "Bind the debugger function key layout used by many debuggers.
-
-\\{realgud-example-map-standard}"
-  (define-key map (kbd "C-c !b") 'realgud:goto-debugger-backtrace-line)
-  (define-key map (kbd "C-c !!") 'realgud:goto-lang-backtrace-line)
-  (define-key map (kbd "C-c !e") 'realgud:pytest-goto-errmsg-line)
-  (define-key map (kbd "C-c !8") 'realgud:flake8-goto-msg-line)
-  )
-
-
-;; Things common to the trepan Python debuggers
-
-(defconst realgud:python-trepan-frame-start-regexp
-  "\\(?:^\\|\n\\)\\(->\\|##\\)")
-
-(defconst realgud:python-trepan-frame-num-regexp
-  "\\([0-9]+\\)")
-
-;; Regular expression that describes a trepan2/3k location generally shown
-;; before a command prompt.
-;;
-;; For example:
-;;   (/usr/bin/zonetab2pot.py:15 @10): <module>
-;;   (/usr/bin/zonetab2pot.py:15 remapped <string>): <module>
-;; or MS Windows:
-;;   (c:\\mydirectory\\gcd.py:10): <module>
-
-(defconst realgud:python-trepan-loc-pat
-      (make-realgud-loc-pat
-       :regexp "^(\\(\\(?:[a-zA-Z]:\\)?[-a-zA-Z0-9_/.\\\\ 
]+\\):\\([0-9]+\\)\\(?: @[0-9]+\\)?\\(?: remapped .*?\\)?): 
\\(?:<module>\\)?\\(?:\n.. [0-9]+ \\(.*?\\)\n\\)?"
-       :file-group 1
-       :line-group 2
-       :text-group 3
-       :ignore-file-re  realgud-python-ignore-file-re)
-      "A realgud-loc-pat struct that describes a Python trepan
-      location line."  )
-
-;; Regular expression that describes a trepan2/3k backtrace line.
-;; For example:
-;; ->0 get_distribution(dist='trepan==0.3.9')
-;;     called from file '/python2.7/dist-packages/pkg_res.py' at line 341
-;; ##1 load_entry_point(dist='tr=0.3.9', group='console_scripts', name='tr')
-;;     called from file '/python2.7/dist-packages/pkg_res.py' at line 351
-;; ##2 <module> exec()
-
-(defconst realgud:python-trepan-backtrace-pat
-  (make-realgud-loc-pat
-   :regexp (concat
-           realgud:python-trepan-frame-start-regexp
-           realgud:python-trepan-frame-num-regexp "[ ]"
-           "\\(?:.*?)\\)\\(?:[\n\t ]+?\\)"
-           "\\(?:called from file \\)?'\\([^:]+?\\)' at line \\([0-9]+\\)")
-   :num 2
-   :file-group 3
-   :line-group 4
-   :ignore-file-re  realgud-python-ignore-file-re)
-      "A realgud-loc-pat struct that describes a Python trepan
-      backtrace location line." )
-
-;;  Regular expression that describes a "breakpoint set" line
-(defconst realgud:python-trepan-brkpt-set-pat
-  (make-realgud-loc-pat
-   :regexp "^Breakpoint \\([0-9]+\\) set at line \\([0-9]+\\)[ \t\n]+of file[ 
\t\n]+\\(.+\\)\\(\n\\|$\\)"
-   :num 1
-   :file-group 3
-   :line-group 2))
-
-;; Regular expression that describes a debugger "delete" (breakpoint) response.
-(defconst realgud:python-trepan-brkpt-del-pat
-      (make-realgud-loc-pat
-       :regexp "^Deleted breakpoint \\([0-9]+\\)\n"
-       :num 1))
-
-;; Regular expression that describes a debugger "disable" (breakpoint) 
response.
-;; For example:
-;;   Breakpoint entry 4 disabled.
-(defconst realgud:python-trepan-brkpt-disable-pat
-  (make-realgud-loc-pat
-   :regexp (format "^Breakpoint %s disabled"
-                  realgud:regexp-captured-num)
-   :num 1))
-
-;; Regular expression that describes a debugger "enable" (breakpoint) response.
-;; For example:
-;;   Breakpoint entry 4 enabled.
-(defconst realgud:python-trepan-brkpt-enable-pat
-  (make-realgud-loc-pat
-   :regexp (format "^Breakpoint %s enabled"
-                  realgud:regexp-captured-num)
-   :num 1))
-
-(defconst realgud:python-debugger-font-lock-keywords
-  '(
-    ;; The frame number and first type name, if present.
-    ("^\\(->\\|##\\)\\([0-9]+\\) \\(<module>\\)? 
*\\([a-zA-Z_][a-zA-Z0-9_]*\\)(\\(.+\\))?"
-     (2 realgud-backtrace-number-face)
-     (4 font-lock-function-name-face nil t))     ; t means optional.
-
-    ;; Parameter sequence, E.g. gcd(a=3, b=5)
-    ;;                             ^^^^^^^^^
-    ("(\\(.+\\))"
-     (1 font-lock-variable-name-face))
-
-    ;; File name. E.g  file '/test/gcd.py'
-    ;;                 ------^^^^^^^^^^^^-
-    ("[ \t]+file '\\([^ ]+*\\)'"
-     (1 realgud-file-name-face))
-
-    ;; Line number. E.g. at line 28
-    ;;                  ---------^^
-    ("[ \t]+at line \\([0-9]+\\)$"
-     (1 realgud-line-number-face))
-
-    ;; Function name.
-    ("\\<\\([a-zA-Z_][a-zA-Z0-9_]*\\)\\.\\([a-zA-Z_][a-zA-Z0-9_]*\\)"
-     (1 font-lock-type-face)
-     (2 font-lock-function-name-face))
-    ;; (trepan2-frames-match-current-line
-    ;;  (0 trepan2-frames-current-frame-face append))
-    ))
-
-(defconst realgud-pytest-error-loc-pat
-  (make-realgud-loc-pat
-   :regexp "^\\(.*\\):\\([0-9]+\\): in "
-   :file-group 1
-   :line-group 2)
-  "A realgud-loc-pat struct that describes a Pytest error line"
-  )
-
-
-;; FIXME: there is probably a less redundant way to do the following
-;; FNS.
-(defun realgud:pytest-goto-errmsg-line (pt)
-  "Display the location mentioned by the pytest error at PT."
-  (interactive "d")
-  (realgud-goto-line-for-pt pt "pytest-error"))
-
-
-(defconst realgud-flake8-msg-loc-pat
-  (make-realgud-loc-pat
-   :regexp "^\\(.*\\):\\([0-9]+\\):\\([0-9]+\\): [EFWCN]\\([0-9]+\\) "
-   :file-group 1
-   :line-group 2
-   :char-offset-group 3
-   )
-  "A realgud-loc-pat struct that describes a flake8 warning or error line"
-  )
-
-
-;; FIXME: there is probably a less redundant way to do the following
-;; FNS.
-(defun realgud:flake8-goto-msg-line (pt)
-  "Display the location mentioned by the flake8 warning or error."
-  (interactive "d")
-  (realgud-goto-line-for-pt pt "flake8-msg"))
-
-
-(provide-me "realgud-lang-")
diff --git a/packages/realgud/realgud/lang/ruby.el 
b/packages/realgud/realgud/lang/ruby.el
deleted file mode 100644
index 9e4699e..0000000
--- a/packages/realgud/realgud/lang/ruby.el
+++ /dev/null
@@ -1,131 +0,0 @@
-;; Copyright (C) 2010, 2014, 2016 Free Software Foundation, Inc
-
-;; Author: Rocky Bernstein <address@hidden>
-
-;; 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.
-
-;; Common Ruby constants and regular expressions.
-(require 'load-relative)
-(require-relative-list '("../common/regexp" "../common/loc" "../common/track")
-                      "realgud-")
-
-(declare-function realgud-goto-line-for-pt 'realgud-track)
-
-(defconst realgud-rails-backtrace-loc-pat
-  (make-realgud-loc-pat
-   :regexp "^\\([^:]+\\):\\([0-9]+\\)\\(?:[:]in `.*'\\)?"
-   :file-group 1
-   :line-group 2)
-  "A realgud-loc-pat struct that describes a Rails backtrace (or
-traceback) line."  )
-
-(defconst realgud-rspec-backtrace-loc-pat
-  (make-realgud-loc-pat
-   :regexp "^[ ]*# \\([^:]+\\):\\([0-9]+\\)\\(?:[:]in `.*'\\)?"
-   :file-group 1
-   :line-group 2)
-  "A realgud-loc-pat struct that describes an rspec backtrace (or
-traceback) line."  )
-
-;; Regular expression that describes a Ruby YARV 1.9 syntax error line.
-;; SyntaxError: /tmp/columnize.rb:270: syntax error, unexpected $end, ...
-(defconst realgud-ruby-YARV-syntax-error-pat
-  (make-realgud-loc-pat
-   :regexp "^SyntaxError: \\([^:]+\\):\\([0-9]+\\): syntax error"
-   :file-group 1
-   :line-group 2)
-  "A realgud-loc-pat struct that describes a Ruby YARV syntax error message")
-
-(defconst realgud-ruby-backtrace-loc-pat
-  (make-realgud-loc-pat
-   :regexp "^[ \t]+from \\([^:]+\\):\\([0-9]+\\)\\(?: in `.*'\\)?"
-   :file-group 1
-   :line-group 2)
-  "A realgud-loc-pat struct that describes a Ruby backtrace (or
-traceback) line."  )
-
-(defconst realgud-rubinius-backtrace-loc-pat
-  (make-realgud-loc-pat
-   :regexp "^\\(?:\\[0;3[1-4]m\\)?[ \t]+.* at \\([^:]+\\):\\([0-9]+\\)"
-   :file-group 1
-   :line-group 2)
-  "A realgud-loc-pat struct that describes a Rubinius backtrace (or
-traceback) line."  )
-
-(defconst realgud-rubinius-Xagent-backtrace-loc-pat
-  (make-realgud-loc-pat
-   :regexp "^\\(?:\\[0;3[1-4]m\\)?0x[a-f0-9]\\{8\\}: .* in 
\\([^:]+\\):\\([0-9]+\\) ([+][0-9]+)"
-   :file-group 1
-   :line-group 2)
-  "A realgud-loc-pat struct that describes a Rubinius Xagent backtrace (or
-traceback) line."  )
-
-(defconst realgud-ruby-dollar-bang-loc-pat
-      (make-realgud-loc-pat
-       :regexp "^[ \t]*[[]?\\(.+\\):\\([0-9]+\\):in `.*'"
-       :file-group 1
-       :line-group 2)
-  "A realgud-loc-pat that struct that describes a Ruby $! string."
-)
-
-;; FIXME: there is probably a less redundant way to do the following
-;; FNS.
-(defun realgud:rails-goto-backtrace-line (pt)
-  "Display the location mentioned by the Rails backtrace line
-described by PT."
-  (interactive "d")
-  (realgud-goto-line-for-pt pt "rails-backtrace"))
-
-;; FIXME: there is probably a less redundant way to do the following
-;; FNS.
-(defun realgud:rspec-goto-backtrace-line (pt)
-  "Display the location mentioned by the Rails backtrace line
-described by PT."
-  (interactive "d")
-  (realgud-goto-line-for-pt pt "rspec-backtrace"))
-
-(defun realgud:rubinius-goto-Xagent-backtrace-line (pt)
-  "Display the location mentioned by the Rubinius Xagent- backtrace line
-described by PT."
-  (interactive "d")
-  (realgud-goto-line-for-pt pt "rubinius-backtrace-Xagent"))
-
-(defun realgud:ruby-goto-backtrace-line (pt)
-  "Display the location mentioned by the Ruby backtrace line
-described by PT."
-  (interactive "d")
-  (realgud-goto-line-for-pt pt "lang-backtrace"))
-
-(defun realgud:ruby-goto-dollar-bang-line (pt)
-  "Display the location mentioned by the Ruby backtrace line
-described by PT."
-  (interactive "d")
-  (realgud-goto-line-for-pt pt "dollar-bang-backtrace"))
-
-(defun realgud:ruby-populate-command-keys (&optional map)
-  "Bind the debugger function key layout used by many debuggers.
-
-\\{realgud-example-map-standard}"
-  (define-key map (kbd "C-c !l") 'realgud:goto-lang-backtrace-line)
-  (define-key map (kbd "C-c !!") 'realgud:ruby-goto-dollar-bang-line)
-  (define-key map (kbd "C-c !b") 'realgud:goto-debugger-backtrace-line)
-  (define-key map (kbd "C-c !r") 'realgud:rails-goto-backtrace-line)
-  (define-key map (kbd "C-c !s") 'realgud:rspec-goto-backtrace-line)
-  )
-
-
-;; Some things common to all trepan debuggers (Rubinius and Ruby 1.9.2)
-(defconst realgud:trepan-frame-start-regexp
-  "\\(?:^\\|\n\\)\\(-->\\|   \\)")
-
-(defconst realgud:trepan-frame-num-regexp
-  "#\\([0-9]+\\)")
-
-(defconst realgud:trepan-frame-line-regexp
-  "[ \t\n]+at line \\([0-9]+\\)\\(?:\n\\|$\\)")
-
-
-(provide-me "realgud-lang-")
diff --git a/packages/realgud/test/.gitignore b/packages/realgud/test/.gitignore
deleted file mode 100644
index 8903d9c..0000000
--- a/packages/realgud/test/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-/*.elc
-/*~
-/.python-version
-/HelloWorld.class
-/Makefile
-/Makefile.in
diff --git a/packages/realgud/test/.nosearch b/packages/realgud/test/.nosearch
deleted file mode 100644
index e69de29..0000000
diff --git a/packages/realgud/test/HelloWorld.java 
b/packages/realgud/test/HelloWorld.java
deleted file mode 100644
index 27a5485..0000000
--- a/packages/realgud/test/HelloWorld.java
+++ /dev/null
@@ -1,6 +0,0 @@
-public class HelloWorld {
-    public static void main(String[] args) {
-       String msg = "Hello, World!";
-        System.out.println(msg); // Display the string.
-    }
-}
diff --git a/packages/realgud/test/Makefile.am 
b/packages/realgud/test/Makefile.am
deleted file mode 100644
index f53fd0d..0000000
--- a/packages/realgud/test/Makefile.am
+++ /dev/null
@@ -1,74 +0,0 @@
-include $(top_srcdir)/common.mk
-
-lisp_files = $(wildcard *.el)
-lisp_LISP = $(lisp_files)
-EXTRA_DIST = $(lisp_files)
-
-PHONY=check test all check-elget test-elget help
-
-#: overall help on running the make targets
-help:
-       @echo "The main function of this Makefile is to facilitate running 
tests."
-       @echo
-       @echo "To run all of the tests, use targets \"test\", \"check\" or 
\"check-short\"."
-       @echo "For example:"
-       @echo
-       @echo "    make check"
-       @echo "or:"
-       @echo "    make check-short"
-       @echo
-       @echo "The -short target uses a filter written in Ruby to remove 
extreanous output."
-       @echo
-       @echo "To run a specific test like test-srcbuf.el, change \".el\" to"
-       @echo "\".run\". For example:"
-       @echo
-       @echo "    make test-srcbuf.run"
-       @echo
-       @echo "Tests can also be run via the Emacs el-get package and this 
loads dependent emacs "
-       @echo "package, like load-relative. To do this, use targets, 
\"check-elget\","
-       @echo "\"test-elget\", or \"check-short-elget\"."
-       @echo
-       @echo  "To run a specific test like test-srcbuf.el via el-get change 
\".el\""
-       @echo "to \".elrun\" For example:"
-       @echo
-       @echo "    make test-srcbuf.elrun"
-
-
-#: same thing as "check"
-test: check
-
-#: same thing as "check-elget"
-test-elget: check-elget
-
-test_files := $(wildcard test-*.el)
-
-CHECK_FILES = $(notdir $(test_files:.el=.run))
-EL_GET_CHECK_FILES = $(notdir $(test_files:.el=.elrun))
-
-#: Run all tests
-check: $(CHECK_FILES)
-
-#: Run all tests via el-get
-check-elget: $(EL_GET_CHECK_FILES)
-
-#: Run all tests with minimum verbosity
-check-short:
-       $(MAKE) check 2>&1  | ruby make-check-filter.rb
-
-#: Run all tests with minimum verbosity via el-get
-check-short-elget:
-       $(MAKE) check-elget 2>&1  | ruby make-check-filter.rb
-
-test-%.run:
-       (cd $(top_srcdir)/test && EMACSLOADPATH=$(EMACSLOADPATH) $(EMACS) 
--batch --no-site-file --no-splash --load $(@:.run=.el))
-
-#: Run tests using el-get to specify external Lisp dependencies
-test-%.elrun:
-       (cd $(top_srcdir)/test && $(EMACS) --batch --no-site-file --no-splash 
--load ../el-get-install.el --load $(@:.elrun=.el))
-
-install-lispLISP: $(lisp_LISP) $(ELCFILES)
-
-# Whatever it is you want to do, it should be forwarded to the
-# to top-level directories
-# %:
-#      $(MAKE) -C .. $@
diff --git a/packages/realgud/test/bt-helper.el 
b/packages/realgud/test/bt-helper.el
deleted file mode 100644
index a9f63d8..0000000
--- a/packages/realgud/test/bt-helper.el
+++ /dev/null
@@ -1,47 +0,0 @@
-(require 'test-simple)
-(require 'font-lock)
-
-(load-file "../realgud/common/buffer/command.el")
-(load-file "../realgud/common/buffer/backtrace.el")
-(load-file "../realgud/common/backtrace-mode.el")
-
-(declare-function realgud-backtrace-mode 'realgud-backtrace-mode)
-(declare-function realgud-cmdbuf-init 'realgud-buffer-command)
-
-(eval-when-compile
-  (defvar temp-cmdbuf)
-  (defvar temp-bt)
-  (defvar realgud-pat-hash)
-)
-
-(defun setup-bt-vars(debugger-name)
-  "Sets up globals temp-cmdbuf and temp-bt with command buffer
-for DEBUGGER-NAME"
-  (setq temp-cmdbuf (generate-new-buffer "*cmdbuf-test*"))
-  (setq temp-bt (generate-new-buffer "*bt-test*"))
-  (with-current-buffer temp-cmdbuf
-    (switch-to-buffer temp-cmdbuf)
-    (realgud-cmdbuf-init temp-cmdbuf debugger-name
-                     (gethash debugger-name realgud-pat-hash))
-
-    (switch-to-buffer nil)
-  ))
-
-
-(defun setup-bt(debugger-name string)
-  "Sets up globals temp-cmdbuf and temp-bt with command buffer
-for DEBUGGER-NAME and initializes it to STRING"
-  (setup-bt-vars debugger-name)
-  (with-current-buffer temp-bt
-    (realgud-backtrace-mode temp-cmdbuf)
-    (goto-char (point-min))
-    (setq buffer-read-only nil)
-    (insert string)
-    (font-lock-fontify-buffer)
-    ;; Newer emacs's use:
-    (goto-char (point-min))
-    )
-  temp-bt
-)
-
-(provide 'realgud-bt-helper)
diff --git a/packages/realgud/test/gcd.js b/packages/realgud/test/gcd.js
deleted file mode 100644
index 901bb96..0000000
--- a/packages/realgud/test/gcd.js
+++ /dev/null
@@ -1,44 +0,0 @@
-//!/usr/bin/env node
-var util = require("util");
-require("console");
-
-function ask(question, format, callback) {
- var stdin = process.stdin, stdout = process.stdout;
-
- stdin.resume();
- stdout.write(question + ": ");
-
- stdin.once('data', function(data) {
-   data = data.toString().trim();
-
-   if (format.test(data)) {
-     callback(data);
-   } else {
-     stdout.write("It should match: "+ format +"\n");
-     ask(question, format, callback);
-   }
- });
-}
-
-// GCD. We assume positive numbers
-function gcd(a, b) {
-    // Make: a <= b
-    if (a > b) {
-       var temp = a;
-       a = b;
-       b = temp;
-    }
-
-    if (a <= 0) { return null };
-
-    if (a == 1 || b-a == 0) {
-       return a;
-    }
-    return gcd(b-a, a);
-}
-
-var a = parseInt(process.argv[0]) || 24,
-    b = parseInt(process.argv[0]) || 5;
-
-console.log(util.format("The GCD of %d and %d is %d", a, b, gcd(a, b)));
-process.exit();
diff --git a/packages/realgud/test/gcd.pl b/packages/realgud/test/gcd.pl
deleted file mode 100644
index df476a8..0000000
--- a/packages/realgud/test/gcd.pl
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env perl
-use strict;
-use warnings;
-
-# GCD. We assume positive numbers
-sub gcd($$);
-sub gcd($$) 
-{ 
-    my ($a, $b) = @_;
-    # Make: a <= b
-    ($a, $b) = ($b, $a) if ($a > $b);
-
-    return undef if $a <= 0;
-    return $a if ($a == 1) or ($b-$a == 0);
-    return gcd($b-$a, $a);
-}
-
-die sprintf "Need two integer arguments, got %d", scalar(@ARGV) unless 
-    @ARGV == 2;
-my ($a, $b) = @ARGV[0,1];
-printf "The GCD of %d and %d is %d\n", $a, $b, gcd($a, $b);
diff --git a/packages/realgud/test/gcd.py b/packages/realgud/test/gcd.py
deleted file mode 100755
index e64f284..0000000
--- a/packages/realgud/test/gcd.py
+++ /dev/null
@@ -1,41 +0,0 @@
-#!/usr/bin/python
-"""Greatest Common Divisor
-
-Some characterstics of this program used for testing check_args() does
-not have a 'return' statement.
-
-check_args() raises an uncaught exception when given the wrong number
-of parameters.
-
-"""
-import sys
-
-def check_args():
-    if len(sys.argv) != 3:
-        # Rather than use sys.exit let's just raise an error
-        raise Exception("Need to give two numbers")
-    for i in range(2):
-        try:
-            sys.argv[i+1] = int(sys.argv[i+1])
-        except ValueError:
-            print("** Expecting an integer, got: %s" % repr(sys.argv[i]))
-            sys.exit(2)
-
-def gcd(a,b):
-    """ GCD. We assume positive numbers"""
-
-    # Make: a <= b
-    if a > b:
-       (a, b) = (b, a)
-
-    if a <= 0:
-        return None
-    if a == 1 or b-a == 0:
-        return a
-    return gcd(b-a, a)
-
-if __name__=='__main__':
-    check_args()
-
-    (a, b) = sys.argv[1:3]
-    print("The GCD of %d and %d is %d" % (a, b, gcd(a, b)))
diff --git a/packages/realgud/test/gcd.rb b/packages/realgud/test/gcd.rb
deleted file mode 100755
index c780a31..0000000
--- a/packages/realgud/test/gcd.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/usr/bin/env ruby
-
-# GCD. We assume positive numbers
-def gcd(a, b)
-  # Make: a <= b
-  if a > b
-    a, b = [b, a]
-  end
-
-  return nil if a <= 0
-
-  if a == 1 or b-a == 0
-    return a
-  end
-  return gcd(b-a, a)
-end
-
-a, b = ARGV[0..1].map {|arg| arg.to_i}
-puts "The GCD of %d and %d is %d" % [a, b, gcd(a, b)]
diff --git a/packages/realgud/test/gcd.sh b/packages/realgud/test/gcd.sh
deleted file mode 100755
index 497f33b..0000000
--- a/packages/realgud/test/gcd.sh
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env bash
-# Greatest Common Divisor in POSIX shell using Euclid's algorithm.  On
-# return, variable gcd_value is set and is the gcd of parameters $1
-# and $2. The GCD of a negative number is the same as the GCD of its
-# absolute value, since a negative number is -1 times its positive
-# value.  Negative numbers are set when there is an error; -1 is set
-# when the wrong number of parameters are given.
-gcd() {
-    typeset -i a=$1
-    typeset -i b=$2
-    if (( a > b )) ; then
-       a=$b
-       b=$1
-    fi
-   if (( a == 1 || (b-a) == 0)) ; then
-       gcd_value=$a
-       return 0
-   fi
-   typeset -i c
-   ((c=b-a))
-   gcd $c $a
-}
-
-gcd $1 $2
-echo $gcd_value
diff --git a/packages/realgud/test/gdb/bar.sh b/packages/realgud/test/gdb/bar.sh
deleted file mode 100755
index 6c961d1..0000000
--- a/packages/realgud/test/gdb/bar.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-echo This Should get selected 3rd
diff --git a/packages/realgud/test/gdb/baz b/packages/realgud/test/gdb/baz
deleted file mode 100755
index e69de29..0000000
diff --git a/packages/realgud/test/gdb/baz.c b/packages/realgud/test/gdb/baz.c
deleted file mode 100644
index e69de29..0000000
diff --git a/packages/realgud/test/gdb/foo b/packages/realgud/test/gdb/foo
deleted file mode 100755
index e69de29..0000000
diff --git a/packages/realgud/test/gdb/foo.c b/packages/realgud/test/gdb/foo.c
deleted file mode 100644
index e69de29..0000000
diff --git a/packages/realgud/test/gdb/test2/bar.sh 
b/packages/realgud/test/gdb/test2/bar.sh
deleted file mode 100755
index 6c961d1..0000000
--- a/packages/realgud/test/gdb/test2/bar.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-echo This Should get selected 3rd
diff --git a/packages/realgud/test/gdb/test2/baz.c 
b/packages/realgud/test/gdb/test2/baz.c
deleted file mode 100644
index e69de29..0000000
diff --git a/packages/realgud/test/make-check-filter.rb 
b/packages/realgud/test/make-check-filter.rb
deleted file mode 100644
index 508c8f6..0000000
--- a/packages/realgud/test/make-check-filter.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env ruby
-# Use this to cut out the crud from make check.
-# Use like this:
-#   make check 2>&1  | ruby ../make-check-filter.rb
-# See Makefile.am
-pats = ["^(?:Loading",
-        '(re)?make\[',
-        "Making check in",
-        '\(cd \.\.',
-        "make -C",
-        "Test-Unit",
-        "Fontifying",
-        "`flet'",
-        '\s*$',
-        '##[<>]+$'
-       ].join('|') + ')'
-# puts pats
-skip_re = /#{pats}/
-
-while gets()
-  next if $_.encode!('UTF-8', 'binary',
-                     invalid: :replace, undef: :replace, replace: '') =~ 
skip_re
-  puts $_
-end
diff --git a/packages/realgud/test/node_modules/gcd.js/gcd.js 
b/packages/realgud/test/node_modules/gcd.js/gcd.js
deleted file mode 100644
index 6d7ce32..0000000
--- a/packages/realgud/test/node_modules/gcd.js/gcd.js
+++ /dev/null
@@ -1,47 +0,0 @@
-//!/usr/bin/env node
-var util = require("util");
-require("console");
-
-function ask(question, format, callback) {
- var stdin = process.stdin, stdout = process.stdout;
-
- stdin.resume();
- stdout.write(question + ": ");
-
- stdin.once('data', function(data) {
-   data = data.toString().trim();
-
-   if (format.test(data)) {
-     callback(data);
-   } else {
-     stdout.write("It should match: "+ format +"\n");
-     ask(question, format, callback);
-   }
- });
-}
-
-// GCD. We assume positive numbers
-function gcd(a, b) {
-    // Make: a <= b
-    if (a > b) {
-       var temp = a;
-       a = b;
-       b = temp;
-    }
-
-    if (a <= 0) { return null };
-
-    if (a == 1 || b-a == 0) {
-       return a;
-    }
-    return gcd(b-a, a);
-}
-
-var a=24;
-
-ask("GCD of 24 and", /^\d+$/, function(b_str) {
-    var b = parseInt(b_str, 10);
-    console.log(util.format("The GCD of %d and %d is %d", a, b,
-                           gcd(a, b)));
-    process.exit();
-});
diff --git a/packages/realgud/test/node_modules/gcd.js/package.json 
b/packages/realgud/test/node_modules/gcd.js/package.json
deleted file mode 100644
index 06a4cee..0000000
--- a/packages/realgud/test/node_modules/gcd.js/package.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-    "name": "emacs-dbgr",
-    "private": false,
-    "version": "1.0.0",
-    "description": "Debugging is going to be realgud.",
-    "repository": "https://github.com/rocky/emacs-dbgr";,
-    "dependencies": {},
-    "devDependencies": {},
-    "scripts": {
-       "start": "node --debug gcd.js"
-    }
-}
diff --git a/packages/realgud/test/regexp-helper.el 
b/packages/realgud/test/regexp-helper.el
deleted file mode 100644
index 01dc7d2..0000000
--- a/packages/realgud/test/regexp-helper.el
+++ /dev/null
@@ -1,50 +0,0 @@
-(require 'test-simple)
-(load-file "../realgud/common/buffer/command.el")
-
-(eval-when-compile
-  (defvar helper-bps)
-  (defvar helper-loc)
-  (defvar helper-tb)
-  (defvar prompt-pat)
-)
-
-(declare-function realgud-loc-pat-regexp 'realgud-backtrace-mode)
-(declare-function realgud-cmdbuf-info-loc-regexp 'realgud-buffer-command)
-(declare-function test-simple-start 'test-simple)
-
-
-(defun setup-regexp-vars(pat-hash)
-  (setq helper-bps    (gethash "brkpt-set" pat-hash))
-  (setq helper-loc    (gethash "loc"       pat-hash))
-  (setq helper-tb     (gethash "lang-backtrace" pat-hash))
-)
-
-(defun loc-match(text var)
-  "Match TEXT against regexp field VAR"
-  (string-match (realgud-loc-pat-regexp var) text)
-)
-
-(defun bp-loc-match(text)
-  (string-match (realgud-loc-pat-regexp helper-bps) text)
-)
-
-(defun tb-loc-match(text)
-  (string-match (realgud-loc-pat-regexp helper-tb) text)
-)
-
-(defun cmdbuf-loc-match(text dbgr)
-  "Match TEXT against cmdbuf-info-loc field VAR"
-  (string-match (realgud-cmdbuf-info-loc-regexp dbgr) text)
-  )
-
-(defun prompt-match(prompt-str &optional num-str fmt-str)
-  (unless fmt-str (setq fmt-str "debugger prompt %s"))
-  (assert-equal 0 (string-match (realgud-loc-pat-regexp prompt-pat)
-                               prompt-str)
-               (format fmt-str prompt-str))
-  (cond (num-str
-        (assert-equal num-str (substring prompt-str
-                                      (match-beginning 1) (match-end 1))))
-       ('t 't))
-  )
-(provide 'realgud-regexp-helper)
diff --git a/packages/realgud/test/test-bashdb.el 
b/packages/realgud/test/test-bashdb.el
deleted file mode 100644
index 6dac5ad..0000000
--- a/packages/realgud/test/test-bashdb.el
+++ /dev/null
@@ -1,60 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-(load-file "../realgud/debugger/bashdb/bashdb.el")
-(load-file "../realgud/debugger/bashdb/core.el")
-(load-file "../realgud/common/core.el")
-(load-file "../realgud/common/lang.el")
-
-(declare-function realgud:expand-file-name-if-exists 'realgud-core)
-
-(eval-when-compile
-  (defvar test:run-process-save)
-  (defvar realgud:bashdb-minibuffer-history)
-  )
-
-(declare-function bashdb-parse-cmd-args 'realgud:bashdb)
-(declare-function bashdb-suggest-invocation 'realgud:bzshdb)
-(declare-function realgud:bashdb        'realgud:bashdb)
-(declare-function __FILE__              'load-relative)
-
-(test-simple-start)
-(make-local-variable 'realgud:bashdb-minibuffer-history)
-(setq realgud:bashdb-minibuffer-history nil)
-
-;; Save value realgud:run-process and change it to something we want
-(setq test:run-process-save (symbol-function 'realgud:run-process))
-(defun realgud:run-process(debugger-name script-filename cmd-args
-                                        minibuf-history
-                                        &optional no-reset)
-  "Fake realgud:run-process used in testing"
-  (note
-   (format "%s %s %s" debugger-name script-filename cmd-args))
-  (assert-equal "bashdb" debugger-name "debugger name gets passed")
-  (let ((expanded-name
-        (realgud:expand-file-name-if-exists "./gcd.sh")))
-    (assert-equal  expanded-name script-filename "file name check")
-    (assert-equal (list "-l" (expand-file-name ".") expanded-name "3" "5")
-                 (cdr cmd-args) "command args listified")
-    ))
-
-(note "bashdb-parse-cmd-args")
-(assert-equal (list nil '("bashdb")
-                   (list (realgud:expand-file-name-if-exists "foo")) nil)
-             (bashdb-parse-cmd-args '("bashdb" "foo")))
-(assert-equal (list nil '("bashdb")
-                   (list (realgud:expand-file-name-if-exists "program.sh")
-                         "foo") nil)
-             (bashdb-parse-cmd-args
-              '("bashdb" "program.sh" "foo")))
-(with-current-buffer (find-file "gcd.sh")
-  (shell-script-mode)
-  (assert-matches "bashdb .*gcd.sh$" (bashdb-suggest-invocation "bashdb")))
-
-(realgud:bashdb "bashdb -l . ./gcd.sh 3 5")
-;; Restore the old value of realgud:run-process
-(fset 'realgud:run-process test:run-process-save)
-
-(end-tests)
diff --git a/packages/realgud/test/test-bp.el b/packages/realgud/test/test-bp.el
deleted file mode 100644
index ae6047e..0000000
--- a/packages/realgud/test/test-bp.el
+++ /dev/null
@@ -1,59 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-(load-file "../realgud/common/bp.el")
-(declare-function realgud-bp-remove-icons 'realgud-bp)
-
-(eval-when-compile
-  (defvar temp-srcbuf)
-)
-
-
-(test-simple-start)
-
-(note "breakpoints")
-
-(set (make-local-variable 'temp-srcbuf)
-     (generate-new-buffer "*srcbuf-test*"))
-(with-current-buffer temp-srcbuf
-  (insert "abc\ndef\n")
-  (note "breakpoint reset")
-  (realgud-bp-remove-icons (point-min) (point-max))
-  (assert-equal 0 (length (overlays-in (point-min) (point-max)))
-               "Should not have any breakpoints in buffer")
-  )
-  ;; (note "breakpoint set")
-  ;; (realgud-bp-put-icon (point-min) 't 1 temp-srcbuf)
-  ;; (realgud-bp-put-icon (point-max) nil 2 temp-srcbuf)
-  ;; (assert-equal 2 (length (overlays-in (point-min) (point-max)))
-  ;;     (format
-  ;;      "Should find breakpoints in buffer %s"
-  ;;      temp-srcbuf))
-  ;; (let* ((ov-list (overlays-in (point-min) (point-min)))
-  ;;    (ov (car-safe ov-list))
-  ;;    (before-string)
-  ;;    )
-  ;; (assert-equal 1 (length ov-list)
-  ;;       "Should find 1 breakpoint at (point-min)")
-  ;; (setq before-string (overlay-get ov 'before-string))
-  ;;   (assert-equal 1 (get-text-property 0 'realgud-bptno before-string)
-  ;;       "Should find breakpoint number 1 in overlay's before-string")
-  ;;  (assert-equal t (get-text-property 0 'enabled before-string)
-  ;;     "Breakpoint 1 should be enabled")
-  ;;   )
-  ;;   (let* ((ov-list (overlays-in (point-max) (point-max)))
-  ;;   (ov (car-safe ov-list))
-  ;;   (before-string)
-  ;;    )
-  ;;   (assert-equal 1 (length ov-list)
-  ;;     "Should find 1 breakpoint at (point-max)")
-  ;;   (setq before-string (overlay-get ov 'before-string))
-  ;;     (assert-equal 2 (get-text-property 0 'realgud-bptno before-string)
-  ;;    "Should find breakpoint number 1 in overlay's before-string")
-  ;;     (assert-equal nil (get-text-property 0 'enabled before-string)
-  ;;     "Breakpoint 1 should be disabled")
-  ;;    )
-
-(end-tests)
diff --git a/packages/realgud/test/test-bt-pdb.el 
b/packages/realgud/test/test-bt-pdb.el
deleted file mode 100644
index e5ee8a8..0000000
--- a/packages/realgud/test/test-bt-pdb.el
+++ /dev/null
@@ -1,45 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-(load-file "./bt-helper.el")
-(load-file "../realgud/debugger/pdb/init.el")
-
-(declare-function setup-bt 'realgud-bt-helper)
-(declare-function __FILE__ 'load-relative)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar temp-bt)
-)
-
-
-(setq temp-bt
-      (setup-bt "pdb"
-               "->0 gcd(a=3, b=5) called from file '/test/gcd.py' at line 28
-##1 <module> execfile() file '/test/gcd.py' at line 41
-"))
-
-(with-current-buffer temp-bt
-  (switch-to-buffer temp-bt)
-  (goto-char (point-min))
-  (dolist (pair
-          '(
-            ("->" .    realgud-backtrace-number )
-            ("gc"    . font-lock-function-name-face )
-            ("("     . font-lock-variable-name-face )
-            ("/test" . realgud-file-name)
-            ("2"     . realgud-line-number)
-            ("##"    . realgud-backtrace-number)
-            ("/test" . realgud-file-name)
-            ("4"     . realgud-line-number)
-            ))
-    (search-forward (car pair))
-    (assert-eql (cdr pair)
-                 (get-text-property (point) 'face))
-    )
-  )
-
-(end-tests)
diff --git a/packages/realgud/test/test-bt-rdebug.el 
b/packages/realgud/test/test-bt-rdebug.el
deleted file mode 100644
index f3c4d25..0000000
--- a/packages/realgud/test/test-bt-rdebug.el
+++ /dev/null
@@ -1,47 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-(load-file "./bt-helper.el")
-(load-file "../realgud/debugger/rdebug/init.el")
-
-(declare-function setup-bt 'realgud-bt-helper)
-(declare-function __FILE__ 'load-relative)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar temp-bt)
-)
-
-(setq temp-bt
-      (setup-bt "rdebug"
-               "--> #0 Object.gcd(a#Fixnum, b#Fixnum)
-       at line /test/gcd.rb:6
-    #1 at line /test/gcd.rb:19
-"))
-
-(with-current-buffer temp-bt
-  (switch-to-buffer temp-bt)
-  (goto-char (point-min))
-  (dolist (pair
-          '(
-            ("#" .     realgud-backtrace-number )
-            ("Objec" . font-lock-constant-face )
-            ("gc"    . font-lock-function-name-face )
-            ("("     . font-lock-variable-name-face )
-            ("Fixnu" . font-lock-constant-face )
-            ("/test" . realgud-file-name)
-            (":"     . realgud-line-number)
-            ("#"     . realgud-backtrace-number)
-            ("/test" . realgud-file-name)
-            (":"     . realgud-line-number)
-            ))
-    (search-forward (car pair))
-    (assert-equal (cdr pair)
-                 (get-text-property (point) 'face))
-    )
-  )
-
-(end-tests)
diff --git a/packages/realgud/test/test-bt-trepan.el 
b/packages/realgud/test/test-bt-trepan.el
deleted file mode 100644
index 0bc5e6e..0000000
--- a/packages/realgud/test/test-bt-trepan.el
+++ /dev/null
@@ -1,49 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-(load-file "./bt-helper.el")
-(load-file "../realgud/debugger/trepan/init.el")
-
-(declare-function setup-bt 'realgud-bt-helper)
-(declare-function __FILE__ 'load-relative)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar temp-bt)
-)
-
-(setq temp-bt
-      (setup-bt "trepan"
-               "--> #0 METHOD Object#gcd(a, b) in file /test/gcd.rb at line 4
-    #1 TOP Object#<top /gcd.rb> in file /test/gcd.rb
-       at line 19
-"))
-
-(with-current-buffer temp-bt
-  (switch-to-buffer temp-bt)
-  (goto-char (point-min))
-  (dolist (pair
-          '(
-            ("#" .     realgud-backtrace-number )
-            ("METHO" . font-lock-keyword-face )
-            ("Objec" . font-lock-constant-face )
-            ("#"     . font-lock-function-name-face )
-            ("("     . font-lock-variable-name-face )
-            ("/test" . realgud-file-name)
-            ("line " . realgud-line-number)
-            ("#"     . realgud-backtrace-number)
-            ("Objec" . font-lock-constant-face )
-            ("<top"  . font-lock-variable-name-face)
-            ("/test" . realgud-file-name)
-            ("line " . realgud-line-number)
-            ))
-    (search-forward (car pair))
-    (assert-equal (cdr pair)
-                 (get-text-property (point) 'face))
-    )
-  )
-
-(end-tests)
diff --git a/packages/realgud/test/test-bt-trepan2.el 
b/packages/realgud/test/test-bt-trepan2.el
deleted file mode 100644
index e1be16e..0000000
--- a/packages/realgud/test/test-bt-trepan2.el
+++ /dev/null
@@ -1,77 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-(load-file "./bt-helper.el")
-(load-file "./regexp-helper.el")
-(load-file "../realgud/debugger/trepan2/init.el")
-
-(declare-function setup-bt 'realgud-bt-helper)
-(declare-function setup-regexp-vars 'regexp-helper)
-(declare-function __FILE__ 'load-relative)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar temp-bt)
-  (defvar realgud-pat-bt)
-  (defvar realgud:trepan2-pat-hash)
-)
-
-(setq temp-bt
-      (setup-bt "trepan2"
-               "->0 gcd(a=3, b=5) called from file '/test/gcd.py' at line 28
-##1 <module> execfile() file '/test/gcd.py' at line 41
-"))
-
-(with-current-buffer temp-bt
-  (switch-to-buffer temp-bt)
-  (goto-char (point-min))
-  (dolist (pair
-          '(
-            ("->" .    realgud-backtrace-number )
-            ("gc"    . font-lock-function-name-face )
-            ("("     . font-lock-variable-name-face )
-            ("/test" . realgud-file-name)
-            ("2"     . realgud-line-number)
-            ("##"    . realgud-backtrace-number)
-            ("/test" . realgud-file-name)
-            ("4"     . realgud-line-number)
-            ))
-    (search-forward (car pair))
-    (assert-equal (cdr pair)
-                 (get-text-property (point) 'face))
-    )
-  )
-
-
-(setup-regexp-vars realgud:trepan2-pat-hash)
-(setq realgud-pat-bt  (gethash "debugger-backtrace"
-                               realgud:trepan2-pat-hash))
-
-
-(let* ((triple
-        (realgud:backtrace-add-text-properties
-         realgud-pat-bt ""
-         "->0 gcd(a=3, b=5) called from file '/test/gcd.py' at line 28
-##1 <module> exec() '/test/gcd.py' at line 41"
-         "->"))
-       (string-with-props (car triple)))
-  (dolist (pair
-           '(
-             ("->0" . (0 . 28) )
-             ("##1" . (1 . 41) )
-             ))
-    (string-match (car pair) string-with-props)
-    (assert-equal (cddr pair)
-                  (realgud-loc-line-number (get-text-property
-                                            (match-beginning 0) 'loc
-                                            string-with-props)))
-
-    (assert-equal (cadr pair)
-                  (get-text-property
-                   (match-beginning 0) 'frame-num
-                   string-with-props))))
-
-(end-tests)
diff --git a/packages/realgud/test/test-bt-trepan3k.el 
b/packages/realgud/test/test-bt-trepan3k.el
deleted file mode 100644
index d3d3d0f..0000000
--- a/packages/realgud/test/test-bt-trepan3k.el
+++ /dev/null
@@ -1,43 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-(load-file "./bt-helper.el")
-(load-file "../realgud/debugger/trepan2/init.el")
-
-(declare-function setup-bt 'realgud-bt-helper)
-(declare-function __FILE__ 'load-relative)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar temp-bt)
-)
-
-(setq temp-bt
-      (setup-bt "trepan2"
-               "->0 gcd(a=3, b=5) called from file '/test/gcd.py' at line 28
-##1 <module> execfile() file '/test/gcd.py' at line 41
-"))
-
-(with-current-buffer temp-bt
-  (switch-to-buffer temp-bt)
-  (goto-char (point-min))
-  (dolist (pair
-          '(
-            ("->" .    realgud-backtrace-number )
-            ("gc"    . font-lock-function-name-face )
-            ("("     . font-lock-variable-name-face )
-            ("/test" . realgud-file-name)
-            ("2"     . realgud-line-number)
-            ("##"    . realgud-backtrace-number)
-            ("/test" . realgud-file-name)
-            ("4"     . realgud-line-number)
-            ))
-    (search-forward (car pair))
-    (assert-equal (cdr pair)
-                 (get-text-property (point) 'face))
-    )
-  )
-(end-tests)
diff --git a/packages/realgud/test/test-bt-zshdb.el 
b/packages/realgud/test/test-bt-zshdb.el
deleted file mode 100644
index fdbc2e7..0000000
--- a/packages/realgud/test/test-bt-zshdb.el
+++ /dev/null
@@ -1,38 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-(load-file "./bt-helper.el")
-(load-file "../realgud/debugger/zshdb/init.el")
-
-(declare-function setup-bt 'realgud-bt-helper)
-(declare-function __FILE__ 'load-relative)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar temp-bt)
-)
-
-(setq temp-bt
-      (setup-bt "zshdb"
-               "->0 in file `/test/autogen.sh' at line 2
-##1 /test/autogen.sh called from file `/usr/local/bin/zshdb' at line 121
-"))
-(with-current-buffer temp-bt
-  (switch-to-buffer temp-bt)
-  (goto-char (point-min))
-  (dolist (pair
-          '(
-            ("->" .    realgud-backtrace-number )
-            ("/test" . realgud-file-name)
-            ("line " . realgud-line-number)
-            ))
-    (search-forward (car pair))
-    (assert-equal (cdr pair)
-                 (get-text-property (point) 'face))
-    )
-  )
-
-(end-tests)
diff --git a/packages/realgud/test/test-buf-bt.el 
b/packages/realgud/test/test-buf-bt.el
deleted file mode 100644
index 2ef06db..0000000
--- a/packages/realgud/test/test-buf-bt.el
+++ /dev/null
@@ -1,27 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'load-relative)
-(require 'test-simple)
-(require 'font-lock)
-
-
-(load-file "../realgud/common/buffer/command.el")
-(load-file "../realgud/common/buffer/backtrace.el")
-
-(declare-function realgud-get-buffer-base-name 'realgud-command)
-
-(test-simple-start)
-
-(note "realgud-buffer-backtrace")
-
-(assert-equal "abc" (realgud-get-buffer-base-name "*abc*")
-             "remove buffer stars")
-
-(assert-equal "abc" (realgud-get-buffer-base-name "abc")
-             "no buffer stars")
-
-(assert-equal "abc" (realgud-get-buffer-base-name "*abc shell*")
-             "remove buffer stars and shell")
-
-(end-tests)
diff --git a/packages/realgud/test/test-buf-cmd.el 
b/packages/realgud/test/test-buf-cmd.el
deleted file mode 100644
index 48aa2ee..0000000
--- a/packages/realgud/test/test-buf-cmd.el
+++ /dev/null
@@ -1,57 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/common/buffer/command.el")
-(load-file "../realgud/debugger/trepan/init.el")
-(declare-function realgud-cmdbuf-init 'realgud-buffer-command)
-(declare-function realgud-cmdbuf-command-string 'realgud-buffer-command)
-(declare-function realgud-cmdbuf-info-cmd-args= 'realgud-buffer-command)
-(declare-function realgud-cmdbuf-debugger-name  'realgud-buffer-command)
-(declare-function realgud-cmdbuf-info-srcbuf-list 'realgud-buffer-command)
-(declare-function realgud-cmdbuf-add-srcbuf 'realgud-buffer-command)
-(declare-function realgud-cmdbuf? 'realgud-buffer-command)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar temp-cmdbuf)
-  (defvar realgud-pat-hash)
-  (defvar realgud-cmdbuf-info)
-)
-
-(assert-nil (realgud-cmdbuf? (current-buffer))
-           "realgud-cmdbuf? before init")
-
-(assert-equal nil (realgud-cmdbuf-command-string (current-buffer))
-             "realgud-cmdbuf-command-string - uninit")
-(setq temp-cmdbuf (generate-new-buffer "*cmdbuf-test*"))
-(assert-t (realgud-cmdbuf-init temp-cmdbuf "trepan"
-                           (gethash "trepan" realgud-pat-hash))
-         "realgud-cmdbuf-init")
-
-(with-current-buffer temp-cmdbuf
-  (switch-to-buffer temp-cmdbuf)
-  (realgud-cmdbuf-info-cmd-args= '("command" "args"))
-  (assert-equal "command args"
-               (realgud-cmdbuf-command-string temp-cmdbuf))
-  (assert-equal "trepan"
-               (realgud-cmdbuf-debugger-name))
-  (assert-equal nil
-               (realgud-cmdbuf-info-srcbuf-list
-                realgud-cmdbuf-info)
-               "srcbuf-list should start out nil")
-  (realgud-cmdbuf-add-srcbuf (current-buffer) temp-cmdbuf)
-  (assert-equal (list (current-buffer))
-               (realgud-cmdbuf-info-srcbuf-list
-                realgud-cmdbuf-info)
-               "should have added one item to srcbuf-list")
-  (realgud-cmdbuf-add-srcbuf (current-buffer) temp-cmdbuf)
-  (assert-equal (list (current-buffer))
-               (realgud-cmdbuf-info-srcbuf-list
-                realgud-cmdbuf-info)
-               "Second source buffer same as first; should have added still 
only one item.")
-  (switch-to-buffer nil)
-  )
-
-(end-tests)
diff --git a/packages/realgud/test/test-common-helper.el 
b/packages/realgud/test/test-common-helper.el
deleted file mode 100644
index 396edc6..0000000
--- a/packages/realgud/test/test-common-helper.el
+++ /dev/null
@@ -1,30 +0,0 @@
-(eval-when-compile (require 'cl-lib))
-(require 'test-simple)
-(load-file "../realgud/common/helper.el")
-
-(declare-function realgud-struct-field-setter 'realgud-helper)
-(declare-function realgud:debugger-name-transform 'realgud-helper)
-(declare-function __FILE__                    'load-relative)
-
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar realgud-test-info)
-)
-
-(cl-defstruct realgud-test-info name)
-(realgud-struct-field-setter "realgud-test-info" "name")
-
-(set (make-local-variable 'realgud-test-info)
-     (make-realgud-test-info :name "foo"))
-
-(note "setter macro works")
-(assert-t (functionp 'realgud-test-info-name=))
-(assert-equal "foo" (realgud-test-info-name= "foo"))
-
-(note "realgud:debugger-name-transform")
-(assert-equal "trepan" (realgud:debugger-name-transform "trepan"))
-;; (assert-equal "realgud:gdb" (realgud:debugger-name-transform "gdb"))
-
-(end-tests)
diff --git a/packages/realgud/test/test-core.el 
b/packages/realgud/test/test-core.el
deleted file mode 100644
index d3e6ca2..0000000
--- a/packages/realgud/test/test-core.el
+++ /dev/null
@@ -1,98 +0,0 @@
-;; -*- lexical-binding:t -*-
-
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(eval-when-compile (defvar trepan-core))
-
-(declare-function __FILE__ 'load-relative)
-(setq trepan-core "../realgud/debugger/trepan/core.el")
-(load-file "../realgud/common/core.el")
-
-(declare-function realgud:expand-file-name-if-exists 'realgud-core)
-(declare-function realgud-parse-command-arg,     'realgud-core)
-(declare-function realgud:trepan-parse-cmd-args  'realgud:trepan)
-
-;; We use a specific language to test core. Here we use trepan.
-(load-file "../realgud/debugger/trepan/core.el")
-
-(test-simple-start)
-
-;; FIXME: Add a test of relgud-exec-shell where
-;; we have two invocation of different files that canonicalize
-;; to the same buffer. Make sure the buffers are distinct.
-;; For example: bashdb /etc/profile should not match
-;; bashdb /tmp/profile
-
-(note "realgud:expand-file-name-if-exists")
-
-(assert-equal (realgud:expand-file-name-if-exists "file-not-here")
-             "file-not-here" "no expansion when expanded file doesn't exist")
-
-(assert-equal (realgud:expand-file-name-if-exists ".")
-             (expand-file-name "."))
-
-(note "realgud-parse-...")
-
-(let ((opt-two-args '("0" "C" "e" "E" "F" "i")))
-  (assert-equal '(("-0" "a") nil)
-               (realgud-parse-command-arg '("-0" "a") '() opt-two-args)
-                 "Two args found, none remain afterwards though.")
-
-  (assert-equal
-   '(("-5") ("a" "-0"))
-   (realgud-parse-command-arg '("-5" "a" "-0") '()
-                                   opt-two-args)
-   "One arg not found.")
-
-  (assert-equal
-   '((nil) nil)
-   (realgud-parse-command-arg '() '() opt-two-args)
-   "Degenerate case - no args"
-   )
-
-  (assert-equal
-   '(("--port" "123") ("bar"))
-   (realgud-parse-command-arg
-    '("--port" "123" "bar") '("-port") '())
-   "two mandatory args"
-   )
-
-  (assert-equal
-   '(("/usr/bin/ruby1.9" "-W") ("trepan") ("foo") nil)
-   (realgud:trepan-parse-cmd-args
-    '("/usr/bin/ruby1.9" "-W" "trepan" "foo"))
-     "Separate Ruby with its arg from debugger and its arg.")
-
-  (assert-equal
-   '(("ruby1.9" "-T3") ("trepan" "--port" "123") ("bar") nil)
-   (realgud:trepan-parse-cmd-args
-    '("ruby1.9" "-T3" "trepan" "--port" "123" "bar"))
-   "Ruby with two args and trepan with two args")
-
-  (assert-equal
-   '(nil ("trepan" "--port" "1" "--annotate=3")
-        ("foo" "a") t)
-   (realgud:trepan-parse-cmd-args
-    '("trepan" "--port" "1" "--annotate=3" "foo" "a"))
-  "trepan with annotate args")
-
-  (assert-equal
-   '(nil ("trepan" "--port" "123")
-        ("foo" "--emacs" "a") nil)
-   (realgud:trepan-parse-cmd-args
-    '("trepan" "--port" "123" "foo" "--emacs" "a"))
-   "trepan with --emacs in the wrong place")
-
-  (assert-equal
-   '(("ruby" "-I/usr/lib/ruby")
-     ("trepan" "-h" "foo" "--emacs")
-     ("baz") t)
-   (realgud:trepan-parse-cmd-args
-    '("ruby" "-I/usr/lib/ruby" "trepan" "-h" "foo"
-      "--emacs" "baz"))
-     "trepan with emacs")
-  )
-
-(end-tests)
diff --git a/packages/realgud/test/test-file.el 
b/packages/realgud/test/test-file.el
deleted file mode 100644
index e9129d4..0000000
--- a/packages/realgud/test/test-file.el
+++ /dev/null
@@ -1,128 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/common/loc.el")
-(load-file "../realgud/common/file.el")
-
-;; Note the below line number is tested so it must match what's listed
-;; below.
-(declare-function __FILE__                     'load-relative)
-
-(declare-function realgud:file-loc-from-line   'realgud-file)
-(declare-function realgud:file-line-count      'realgud-file)
-(declare-function realgud:file-column-from-string 'realgud-file)
-(declare-function realgud-loc?                 'realgud-loc)
-
-(declare-function realgud-loc-line-number      'realgud-loc)
-(declare-function realgud-loc-column-number    'realgud-loc)
-(declare-function realgud-loc-filename         'realgud-loc)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar realgud-file-remap)
-  (defvar test-filename)
-  (defvar test-file-loc)
-  (defvar remap-filename)
-  (defvar old-compilation-find-file)
-)
-
-(clrhash realgud-file-remap)
-
-(setq old-compilation-find-file (symbol-function 'compilation-find-file))
-
-(setq test-filename (symbol-file 'test-simple))
-
-(note "realgud:file-line-count")
-
-(assert-nil
- (realgud:file-line-count "not-found-file")
- "File not found")
-
-(assert-t (integerp (realgud:file-line-count test-filename))
-         "File found")
-
-
-(note "realgud:file-loc-from-line")
-
-(fset 'compilation-find-file (lambda(mark test-filename opt)
-                              (get-buffer "*scratch*")))
-
-(save-excursion
-  ;; NOTE: this calls compilation-find-file which prompts for a file
-  ;; (assert-equal
-  ;;  "File named `not-found-file' not readable"
-  ;;  (realgud:file-loc-from-line
-  ;;   "not-found-file" 5 (make-marker))
-  ;;  )
-
-  (assert-t (stringp (realgud:file-loc-from-line test-filename 5.5))
-           "invalid real line number")
-
-  (assert-t (stringp (realgud:file-loc-from-line test-filename -1))
-           "negative number")
-
-  (note "realgud:file-loc-from-line information")
-
-  (assert-t (stringp (realgud:file-loc-from-line test-filename 10001))
-           "Line number too large for file")
-
-  (setq test-file-loc (realgud:file-loc-from-line (__FILE__) 5 nil ";; Note"))
-  (assert-t (realgud-loc? test-file-loc)
-           "Ok loc creation - no cmd marker")
-
-  (assert-t (realgud-loc?
-            (realgud:file-loc-from-line test-filename 30 (make-marker)))
-           "Ok loc creation - cmd marker")
-
-  (assert-equal 5 (realgud-loc-line-number test-file-loc))
-
-  ;; FIXME: don't know why this fails in batch
-  ;; (assert-equal 0 (realgud-loc-column-number test-file-loc))
-
-  (assert-equal (__FILE__) (realgud-loc-filename test-file-loc))
-
-  (note "realgud:file-loc-from-line remapping")
-
-  (setq remap-filename " bogus remap-filename.el")
-
-  ;; (assert-equal
-  ;;  (format "File named `%s' not readable" remap-filename)
-  ;;  (realgud:file-loc-from-line
-  ;;   remap-filename 5 (make-marker))
-  ;;  )
-  )
-
-
-(puthash remap-filename test-filename realgud-file-remap)
-
-(assert-t (realgud-loc?
-          (realgud:file-loc-from-line remap-filename 30))
-         "Ok loc creation with remap - no cmd marker")
-
-;; FIXME: don't know why this fails in batch
-;; (assert-equal
-;;  18
-;;  (realgud:file-column-from-string (__FILE__) 7 "__FILE__")
-;;  "Should find string in file/line and get column"
-;;  )
-
-(assert-nil
- (realgud:file-column-from-string (__FILE__) 5 "__FILE__")
- "Should not find string at this line in located file"
- )
-
-(assert-nil
- (realgud:file-column-from-string (concat (__FILE__) "FOO") 7 "__FILE__")
- "Should not find file"
- )
-
-(assert-nil
- (realgud:file-column-from-string (__FILE__) 10000 "__FILE__")
- "Should not find line in file at all"
- )
-
-(fset 'compilation-find-file old-compilation-find-file)
-
-(end-tests)
diff --git a/packages/realgud/test/test-gdb-core.el 
b/packages/realgud/test/test-gdb-core.el
deleted file mode 100644
index 8aabe69..0000000
--- a/packages/realgud/test/test-gdb-core.el
+++ /dev/null
@@ -1,66 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/debugger/gdb/core.el")
-
-(declare-function realgud:gdb-parse-cmd-args 'realgud-gdb-core)
-
-(test-simple-start)
-
-(note "invoke gdb without command line arguments")
-(assert-equal '(("gdb") nil nil nil)
-             (realgud:gdb-parse-cmd-args
-              '("gdb")))
-
-(note "invoke gdb with annotate command line parameter")
-(assert-equal '(("gdb" "--annotate" "1") nil nil t)
-             (realgud:gdb-parse-cmd-args
-              '("gdb" "--annotate" "1")))
-
-(note "invoke gdb with annotate command line parameter and file")
-(assert-equal '(("gdb" "--annotate" "1") nil ("file.c") t)
-             (realgud:gdb-parse-cmd-args
-              '("gdb" "--annotate" "1" "file.c")))
-
-(note "invoke gdb with annotate command line parameter and pid")
-(assert-equal '(("gdb" "--annotate" "1" "-p") nil ("4812") t)
-             (realgud:gdb-parse-cmd-args
-              '("gdb" "--annotate" "1" "-p" "4812")))
-
-(note "invoke gdb with pid")
-(assert-equal '(("gdb" "-p") nil ("4511") nil)
-             (realgud:gdb-parse-cmd-args
-              '("gdb" "-p" "4511")))
-
-(eval-when-compile
-  (defvar test:warn-save)
-  (defvar last-mess)
-)
-
-(setq test:warn-save (symbol-function 'warn))
-
-(note "Stripping --interpreter=mi option")
-(defun warn (mess &optional args)
-  "Fake realgud:run-process used in testing"
-  (setq last-mess mess)
-  )
-
-(setq last-mess nil)
-(assert-equal '(("gdb" "-p") nil ("1955") nil)
-             (realgud:gdb-parse-cmd-args
-              '("gdb" "--interpreter=mi" "-p" "1955")))
-
-(assert-nil (null last-mess))
-(setq last-mess nil)
-
-(assert-equal '(("gdb" "-p") nil ("1954") nil)
-             (realgud:gdb-parse-cmd-args
-              '("gdb" "-i" "mi" "-p" "1954")))
-
-;; Restore the old value of realgud:run-process
-(assert-nil (null last-mess))
-(fset 'warn test:warn-save)
-
-
-(end-tests)
diff --git a/packages/realgud/test/test-gdb.el 
b/packages/realgud/test/test-gdb.el
deleted file mode 100644
index cf07cec..0000000
--- a/packages/realgud/test/test-gdb.el
+++ /dev/null
@@ -1,68 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-(load-file "../realgud/common/buffer/command.el")
-(load-file "../realgud/debugger/gdb/core.el")
-(load-file "./regexp-helper.el")
-
-(eval-when-compile
-  (defvar realgud:gdb-minibuffer-history)
-  (defvar test:realgud-gdb-executable-save)
-  (defvar test:realgud-minibuffer-history-save)
-)
-
-(declare-function realgud:gdb-suggest-invocation 'realgud:bashdb)
-(declare-function __FILE__              'require-relative)
-
-(test-simple-start)
-
-;; Save value realgud:run-process and change it to something we want
-(setq test:realgud-gdb-executable-save (symbol-function 
'realgud:gdb-executable))
-(setq test:realgud-minibuffer-history-save realgud:gdb-minibuffer-history)
-
-(defun realgud:gdb-executable (filename)
-  "Mock function for testing"
-  (cond ((equal filename "bar.sh") 7)
-       ((equal filename "foo") 8)
-       ((equal filename "baz") 8)
-       (t 3)))
-
-(defun gdb-test()
-  (note "realgud:gdb-suggest-invocation")
-  (setq realgud:gdb-minibuffer-history nil)
-  (let ((my-directory (file-name-directory (__FILE__))))
-    (save-excursion
-      (note "Test preference to buffer editing")
-      (setq default-directory
-           (concat my-directory "gdb"))
-      (find-file-literally "foo.c")
-      (assert-equal "gdb foo" (realgud:gdb-suggest-invocation)
-                   "Should find file sans extension - foo")
-      (find-file-literally "baz.c")
-      (assert-equal "gdb baz" (realgud:gdb-suggest-invocation)
-                   "Should find file sans extension - baz")
-      )
-    (save-excursion
-      (note "Pick up non-sans executable")
-      (setq default-directory
-           (concat my-directory  "gdb/test2"))
-      ;; (assert-equal "gdb bar.sh" (realgud:gdb-suggest-invocation))
-      (setq realgud:gdb-minibuffer-history '("gdb testing"))
-      (setq default-directory
-           (concat my-directory  "gdb/test2"))
-      (assert-equal "gdb testing" (realgud:gdb-suggest-invocation)
-                   "After setting minibuffer history - takes precidence")
-      )
-    (setq default-directory my-directory)
-    )
-  )
-(gdb-test)
-(end-tests)
-
-;; Restore the old values.
-;; You might have to run the below if you run this interactively.
-(fset 'realgud:gdb-executable test:realgud-gdb-executable-save)
-(setq realgud:gdb-minibuffer-history test:realgud-minibuffer-history-save)
-(setq default-directory (file-name-directory (__FILE__)))
diff --git a/packages/realgud/test/test-gub-core.el 
b/packages/realgud/test/test-gub-core.el
deleted file mode 100644
index cab0b0b..0000000
--- a/packages/realgud/test/test-gub-core.el
+++ /dev/null
@@ -1,22 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/debugger/gub/core.el")
-
-(declare-function __FILE__ 'load-relative)
-(declare-function gub-parse-cmd-args 'realgud-gub-core)
-
-(test-simple-start)
-
-(note "form(s) involving gub.sh shell script")
-(assert-equal '("gub.sh" ("--gub=\"-I\"") ("./gcd.go" "3" "5"))
-             (gub-parse-cmd-args
-              '("gub.sh" "--gub=\"-I\"" "--" "./gcd.go" "3" "5")))
-
-(note "form(s) involving underlying tortoise interpreter")
-(assert-equal '("tortoise" ("-run" "-gub=" "-interp=SS") ("./gcd.go" "3" "5"))
-             (gub-parse-cmd-args
-              '("tortoise" "-run" "-gub=" "-interp=SS" "--" "./gcd.go" "3" 
"5")))
-
-(end-tests)
diff --git a/packages/realgud/test/test-ipdb.el 
b/packages/realgud/test/test-ipdb.el
deleted file mode 100644
index 77b32aa..0000000
--- a/packages/realgud/test/test-ipdb.el
+++ /dev/null
@@ -1,40 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-(load-file "../realgud/debugger/ipdb/ipdb.el")
-
-(eval-when-compile (defvar test:run-process-save))
-
-(declare-function ipdb-parse-cmd-args 'realgud:ipdb-core)
-(declare-function realgud:ipdb        'realgud:ipdb)
-(declare-function __FILE__            'load-relative)
-
-(test-simple-start)
-
-;; Save value realgud:run-process and change it to something we want
-(setq test:run-process-save (symbol-function 'realgud:run-process))
-(defun realgud:run-process(debugger-name script-filename cmd-args
-                                     minibuffer-histroy &optional no-reset)
-  "Fake realgud:run-process used in testing"
-  (note
-   (format "%s %s %s" debugger-name script-filename cmd-args))
-  (assert-equal "ipdb" debugger-name "debugger name gets passed")
-  (assert-equal (expand-file-name "./gcd.py") script-filename "file name 
check")
-  (assert-equal '("3" "5") (cddr cmd-args) "command args listified")
-  (generate-new-buffer "*cmdbuf-test*")
-  )
-
-(note "ipdb-parse-cmd-args")
-(assert-equal (list nil '("ipdb") (list (expand-file-name "foo")) nil)
-             (ipdb-parse-cmd-args '("ipdb" "foo")))
-(assert-equal (list nil '("ipdb") (list (expand-file-name "program.py") "foo") 
nil)
-             (ipdb-parse-cmd-args
-              '("ipdb" "program.py" "foo")))
-
-(realgud:ipdb "ipdb ./gcd.py 3 5")
-;; Restore the old value of realgud:run-process
-(fset 'realgud:run-process test:run-process-save)
-
-(end-tests)
diff --git a/packages/realgud/test/test-jdb.el 
b/packages/realgud/test/test-jdb.el
deleted file mode 100644
index 881b60d..0000000
--- a/packages/realgud/test/test-jdb.el
+++ /dev/null
@@ -1,18 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-(load-file "../realgud/debugger/jdb/core.el")
-(test-simple-start)
-
-(declare-function __FILE__  'load-relative)
-(declare-function realgud:jdb-parse-cmd-args 'realgud:jdb-core)
-(declare-function realgud:jdb-dot-to-slash   'realgud:jdb-core)
-
-(assert-equal '("jdb" nil ("./TestMe.java"))
-             (realgud:jdb-parse-cmd-args '("jdb" "./TestMe.java")))
-(assert-equal "mcb/pcingola/SnpEff/main"
-             (realgud:jdb-dot-to-slash "mcb.pcingola.SnpEff.main"))
-
-(end-tests)
diff --git a/packages/realgud/test/test-lang.el 
b/packages/realgud/test/test-lang.el
deleted file mode 100644
index 72f775c..0000000
--- a/packages/realgud/test/test-lang.el
+++ /dev/null
@@ -1,65 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-
-(eval-when-compile
-  (defvar elisp-file)
-  (defvar elisp-buffer)
-)
-
-(set (make-local-variable 'elisp-file)
-     "../realgud/common/core.el")
-
-(load-file "../realgud/common/lang.el")
-(test-simple-start)
-
-(declare-function realgud-suggest-lang-file 'realgud-lang)
-(declare-function realgud:suggest-file-from-buffer 'realgud-lang)
-(declare-function realgud-lang-mode? 'realgud-lang)
-(declare-function __FILE__           'load-relative)
-
-(note "realgud-lang-mode?")
-
-(assert-nil
- (realgud-lang-mode? elisp-file "ruby")
- "realgud-lang-mode? with Lisp file")
-
-
-(save-excursion
-  (find-file "./gcd.rb")
-  (assert-t
-   (realgud-lang-mode? "./gcd.rb" "ruby")
-   "realgud-lang-mode? with Ruby file")
-  )
-
-
-(assert-equal "gcd.rb"
-              (realgud-suggest-lang-file "ruby" "\\.rb$")
-              "realgud-suggest-lang-file"
-              )
-
-(assert-equal "default.bogus"
-              (realgud-suggest-lang-file "bogus" "\\.bogus$" "default.bogus")
-              "realgud-suggest-lang-file"
-              )
-
-(assert-t (file-exists-p (realgud-suggest-lang-file "bogus" "\\.bogus$")))
-
-(note "realgud:suggest-file-from-buffer")
-
-
-(with-current-buffer
-    (setq elisp-buffer (find-file "./test-dbgr.el"))
-  (set (make-local-variable 'major-mode)
-       'emacs-lisp-mode)
-  (message "set major mode to %s" major-mode)
-  )
-(assert-equal (buffer-file-name elisp-buffer)
-                                (realgud:suggest-file-from-buffer
-                                 "emacs-lisp"
-                                 (list elisp-buffer))
-                                "realgud-lang-mode? with Lisp file")
-
-(end-tests)
diff --git a/packages/realgud/test/test-loc-regexp-gub.el 
b/packages/realgud/test/test-loc-regexp-gub.el
deleted file mode 100644
index e6c4746..0000000
--- a/packages/realgud/test/test-loc-regexp-gub.el
+++ /dev/null
@@ -1,63 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-(load-file "./regexp-helper.el")
-(load-file "../realgud/common/regexp.el")
-(load-file "../realgud/debugger/gub/init.el")
-
-(declare-function realgud-cmdbuf-info-loc-regexp 'realgud-buffer-command)
-(declare-function cmdbuf-loc-match               'realgud-regexp)
-(declare-function realgud-loc-pat-regexp         'realgud-regexp)
-(declare-function realgud-loc-pat-file-group     'realgud-regexp)
-(declare-function realgud-loc-pat-line-group     'realgud-regexp)
-(declare-function realgud-cmdbuf-info-file-group 'realgud-regexp)
-(declare-function realgud-cmdbuf-info-line-group 'realgud-regexp)
-(declare-function realgud-cmdbuf-info            'realgud-regexp)
-(declare-function make-realgud-cmdbuf-info       'realgud-regexp)
-(declare-function __FILE__                       'load-relative)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar dbg-name)
-  (defvar realgud-pat-hash)
-  (defvar loc-pat)
-  (defvar test-dbgr)
-  (defvar test-text)
-)
-
-;; Some setup usually done in setting up the buffer.
-;; We customize this for the debugger trepan. Others may follow.
-;; FIXME: encapsulate this.
-(setq dbg-name "gub")
-(setq loc-pat (gethash "loc" (gethash dbg-name realgud-pat-hash)))
-
-(setq test-dbgr (make-realgud-cmdbuf-info
-                :debugger-name dbg-name
-                :loc-regexp (realgud-loc-pat-regexp loc-pat)
-                :file-group (realgud-loc-pat-file-group loc-pat)
-                :line-group (realgud-loc-pat-line-group loc-pat)))
-
-
-(setq test-text "interp/testdata/square.go:15:6")
-(assert-t (numberp (cmdbuf-loc-match test-text test-dbgr)) "basic location")
-
-(note "extract file name")
-(assert-equal 0 (cmdbuf-loc-match test-text test-dbgr))
-(assert-equal "interp/testdata/square.go"
-             (match-string (realgud-cmdbuf-info-file-group test-dbgr)
-                           test-text))
-
-(assert-equal "15"
-             (match-string
-              (realgud-cmdbuf-info-line-group test-dbgr)
-              test-text) "extract line number")
-
-(setq test-text " interp/testdata/square.go:15:6")
-(assert-nil (numberp (cmdbuf-loc-match test-text test-dbgr))
-           "location starts with blank")
-
-
-(end-tests)
diff --git a/packages/realgud/test/test-loc-regexp-nodejs.el 
b/packages/realgud/test/test-loc-regexp-nodejs.el
deleted file mode 100644
index f9b647d..0000000
--- a/packages/realgud/test/test-loc-regexp-nodejs.el
+++ /dev/null
@@ -1,115 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(load-file "./regexp-helper.el")
-(load-file "../realgud/common/regexp.el")
-(load-file "../realgud/debugger/nodejs/init.el")
-
-(declare-function realgud-cmdbuf-info-loc-regexp 'realgud-buffer-command)
-(declare-function cmdbuf-loc-match               'realgud-regexp-helper)
-(declare-function realgud-loc-pat-regexp         'realgud-regexp)
-(declare-function realgud-loc-pat-file-group     'realgud-regexp)
-(declare-function realgud-loc-pat-line-group     'realgud-regexp)
-(declare-function realgud-cmdbuf-info-file-group 'realgud-regexp)
-(declare-function realgud-cmdbuf-info-line-group 'realgud-regexp)
-(declare-function realgud-cmdbuf-info            'realgud-regexp)
-(declare-function make-realgud-cmdbuf-info       'realgud-regexp)
-(declare-function realgud-loc-pat-num            'realgud-regexp)
-(declare-function test-simple-start 'test-simple)
-(declare-function assert-t 'test-simple)
-(declare-function assert-equal 'test-simple)
-(declare-function note 'test-simple)
-(declare-function end-tests 'test-simple)
-(declare-function realgud-loc-pat-char-offset-group  'realgud:nodejs-init)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar file-group)
-  (defvar frame-re)
-  (defvar line-group)
-  (defvar num-group)
-  (defvar col-group)
-  (defvar test-pos)
-  (defvar bt-re)
-  (defvar dbg-name)
-  (defvar realgud-pat-hash)
-  (defvar loc-pat)
-  (defvar test-dbgr)
-  (defvar test-s1)
-  (defvar realgud-pat-bt)
-  (defvar realgud:nodejs-pat-hash)
-)
-
-; Some setup usually done in setting up the buffer.
-; We customize this for the debugger trepan. Others may follow.
-; FIXME: encapsulate this.
-(setq dbg-name "nodejs")
-(setq loc-pat (gethash "loc" (gethash dbg-name realgud-pat-hash)))
-
-(setq test-dbgr (make-realgud-cmdbuf-info
-                :debugger-name dbg-name
-                :loc-regexp (realgud-loc-pat-regexp loc-pat)
-                :file-group (realgud-loc-pat-file-group loc-pat)
-                :line-group (realgud-loc-pat-line-group loc-pat)))
-
-
-(note "debugger-backtrace")
-(setq realgud-pat-bt  (gethash "debugger-backtrace"
-                            realgud:nodejs-pat-hash))
-(setq test-s1
-      "#0 module.js:380:17
-#1 Module._compile module2.js:456:26
-#2 Module._extensions..js module.js:474:10
-#3 Module.load module.js:356:32
-")
-
-(setq bt-re (realgud-loc-pat-regexp realgud-pat-bt))
-(setq num-group (realgud-loc-pat-num realgud-pat-bt))
-(setq file-group (realgud-loc-pat-file-group realgud-pat-bt))
-(setq line-group (realgud-loc-pat-line-group realgud-pat-bt))
-(setq col-group (realgud-loc-pat-char-offset-group realgud-pat-bt))
-(assert-equal 0 (string-match bt-re test-s1))
-(assert-equal "0" (substring test-s1
-                            (match-beginning num-group)
-                            (match-end num-group)))
-(assert-equal "module.js"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "380"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-(assert-equal "17" (substring test-s1
-                            (match-beginning col-group)
-                            (match-end col-group)))
-
-(setq test-pos (match-end 0))
-(assert-equal 19 (string-match bt-re test-s1 test-pos))
-
-(setq test-s1
-      "#1 Module._compile module2.js:456:26
-#2 Module._extensions..js module.js:474:10
-#3 Module.load module.js:356:32
-")
-(assert-equal 0 (string-match bt-re test-s1))
-
-(assert-equal "1" (substring test-s1
-                            (match-beginning num-group)
-                            (match-end num-group)))
-(assert-equal "module2.js"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "456"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-(assert-equal "26" (substring test-s1
-                             (match-beginning col-group)
-                             (match-end col-group)))
-(setq test-pos (match-end 0))
-(assert-equal 36 test-pos)
-
-(end-tests)
diff --git a/packages/realgud/test/test-loc-regexp-trepan.el 
b/packages/realgud/test/test-loc-regexp-trepan.el
deleted file mode 100644
index d8fd898..0000000
--- a/packages/realgud/test/test-loc-regexp-trepan.el
+++ /dev/null
@@ -1,83 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-(load-file "./regexp-helper.el")
-(load-file "../realgud/common/regexp.el")
-(load-file "../realgud/debugger/trepan/init.el")
-
-(declare-function realgud-cmdbuf-info-loc-regexp 'realgud-buffer-command)
-(declare-function cmdbuf-loc-match               'realgud-regexp)
-(declare-function realgud-loc-pat-regexp         'realgud-regexp)
-(declare-function realgud-loc-pat-file-group     'realgud-regexp)
-(declare-function realgud-loc-pat-line-group     'realgud-regexp)
-(declare-function realgud-cmdbuf-info-file-group 'realgud-regexp)
-(declare-function realgud-cmdbuf-info-line-group 'realgud-regexp)
-(declare-function realgud-cmdbuf-info            'realgud-regexp)
-(declare-function make-realgud-cmdbuf-info       'realgud-regexp)
-(declare-function __FILE__                       'load-relative)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar dbg-name)
-  (defvar realgud-pat-hash)
-  (defvar loc-pat)
-  (defvar test-dbgr)
-  (defvar test-text)
-)
-
-;; Some setup usually done in setting up the buffer.
-;; We customize this for the debugger trepan. Others may follow.
-;; FIXME: encapsulate this.
-(setq dbg-name "trepan")
-(setq loc-pat (gethash "loc" (gethash dbg-name realgud-pat-hash)))
-
-(setq test-dbgr (make-realgud-cmdbuf-info
-                :debugger-name dbg-name
-                :loc-regexp (realgud-loc-pat-regexp loc-pat)
-                :file-group (realgud-loc-pat-file-group loc-pat)
-                :line-group (realgud-loc-pat-line-group loc-pat)))
-
-(setq test-text "-- (/usr/local/bin/irb:9 @2)")
-(assert-t (numberp (cmdbuf-loc-match test-text test-dbgr)) "basic location")
-
-(note "extract file name")
-(assert-equal 0 (cmdbuf-loc-match test-text test-dbgr))
-(assert-equal "/usr/local/bin/irb"
-             (match-string (realgud-cmdbuf-info-file-group test-dbgr)
-                           test-text))
-
-(assert-equal "9"
-             (match-string
-              (realgud-cmdbuf-info-line-group test-dbgr)
-              test-text) "extract line number")
-
-(setq test-text "-> (<internal:lib/rubygems/custom_require>:28 remapped 
/usr/lib/ruby/gems/1.9.1/gems/data/custom_require.rb:28 @2)")
-(assert-t (numberp (cmdbuf-loc-match test-text test-dbgr)) "remapped location")
-
-(assert-equal 0 (cmdbuf-loc-match test-text test-dbgr))
-(assert-equal "/usr/lib/ruby/gems/1.9.1/gems/data/custom_require.rb"
-             (match-string (realgud-cmdbuf-info-file-group test-dbgr)
-                           test-text) "extract remapped file name")
-
-(assert-equal "28"
-             (match-string
-              (realgud-cmdbuf-info-line-group test-dbgr)
-              test-text) "extract remapped line number")
-
-(setq test-text "C> (/tmp/c-func.rb:2)")
-(assert-t (numberp (cmdbuf-loc-match test-text test-dbgr)) "basic location for 
C fn")
-
-(assert-equal 0 (cmdbuf-loc-match test-text test-dbgr))
-(assert-equal "/tmp/c-func.rb"
-             (match-string (realgud-cmdbuf-info-file-group test-dbgr)
-                           test-text) "extract file name for C fn")
-
-(assert-equal "2"
-             (match-string
-              (realgud-cmdbuf-info-line-group test-dbgr)
-              test-text) "extract line number for C fn")
-
-(end-tests)
diff --git a/packages/realgud/test/test-loc-regexp-trepanpl.el 
b/packages/realgud/test/test-loc-regexp-trepanpl.el
deleted file mode 100644
index e56325d..0000000
--- a/packages/realgud/test/test-loc-regexp-trepanpl.el
+++ /dev/null
@@ -1,128 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(load-file "./regexp-helper.el")
-(load-file "../realgud/common/regexp.el")
-(load-file "../realgud/debugger/trepan.pl/init.el")
-
-(declare-function realgud-cmdbuf-info-loc-regexp 'realgud-buffer-command)
-(declare-function cmdbuf-loc-match               'realgud-regexp-helper)
-(declare-function realgud-loc-pat-regexp         'realgud-regexp)
-(declare-function realgud-loc-pat-file-group     'realgud-regexp)
-(declare-function realgud-loc-pat-line-group     'realgud-regexp)
-(declare-function realgud-cmdbuf-info-file-group 'realgud-regexp)
-(declare-function realgud-cmdbuf-info-line-group 'realgud-regexp)
-(declare-function realgud-cmdbuf-info            'realgud-regexp)
-(declare-function make-realgud-cmdbuf-info       'realgud-regexp)
-(declare-function realgud-loc-pat-num            'realgud-regexp)
-(declare-function test-simple-start 'test-simple)
-(declare-function assert-t 'test-simple)
-(declare-function assert-equal 'test-simple)
-(declare-function note 'test-simple)
-(declare-function end-tests 'test-simple)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar file-group)
-  (defvar frame-re)
-  (defvar line-group)
-  (defvar num-group)
-  (defvar test-pos)
-  (defvar dbg-name)
-  (defvar realgud-pat-hash)
-  (defvar loc-pat)
-  (defvar test-dbgr)
-  (defvar test-s1)
-  (defvar realgud-pat-bt)
-  (defvar realgud:trepanpl-pat-hash)
-)
-
-; Some setup usually done in setting up the buffer.
-; We customize this for the debugger trepan. Others may follow.
-; FIXME: encapsulate this.
-(setq dbg-name "trepan.pl")
-(setq loc-pat (gethash "loc" (gethash dbg-name realgud-pat-hash)))
-
-(setq test-dbgr (make-realgud-cmdbuf-info
-                :debugger-name dbg-name
-                :loc-regexp (realgud-loc-pat-regexp loc-pat)
-                :file-group (realgud-loc-pat-file-group loc-pat)
-                :line-group (realgud-loc-pat-line-group loc-pat)))
-
-
-(setq test-s1 "-- main::(../example/gcd.pl:18)")
-(assert-t (numberp (cmdbuf-loc-match test-s1 test-dbgr)) "basic location")
-
-(assert-equal 0 (cmdbuf-loc-match test-s1 test-dbgr))
-
-(note "extract location fields")
-(assert-equal "../example/gcd.pl"
-             (match-string (realgud-cmdbuf-info-file-group test-dbgr)
-                           test-s1))
-
-(assert-equal "18"
-             (match-string
-              (realgud-cmdbuf-info-line-group test-dbgr)
-              test-s1) "extract line number")
-
-
-(note "Test with hex location")
-(setq test-s1 "-- File::Basename::(/usr/share/perl/5.14/File/Basename.pm:284 
@0x8918b70)")
-(assert-t (numberp (cmdbuf-loc-match test-s1 test-dbgr)) "basic location")
-(assert-equal 0 (cmdbuf-loc-match test-s1 test-dbgr))
-
-(assert-equal "/usr/share/perl/5.14/File/Basename.pm"
-             (match-string (realgud-cmdbuf-info-file-group test-dbgr)
-                           test-s1))
-
-(assert-equal "284"
-             (match-string
-              (realgud-cmdbuf-info-line-group test-dbgr)
-              test-s1) "extract line number")
-
-
-(note "debugger-backtrace")
-(setq realgud-pat-bt  (gethash "debugger-backtrace"
-                            realgud:trepanpl-pat-hash))
-(setq test-s1
-      "--> #0 @ = File::Basename::fileparse('/usr/local/bin/trepan.pl') in
-       file `/usr/share/perl/5.18.2/File/Basename.pm' at line 107
-    #1 @ = File::Basename::dirname('/usr/local/bin/trepan.pl') in
-       file `/usr/share/perl/5.18.2/File/Basename1.pm' at line 294
-    #2 file `/usr/local/bin/trepan.pl' at line 11
-")
-(setq frame-re (realgud-loc-pat-regexp realgud-pat-bt))
-(setq num-group (realgud-loc-pat-num realgud-pat-bt))
-(setq file-group (realgud-loc-pat-file-group realgud-pat-bt))
-(setq line-group (realgud-loc-pat-line-group realgud-pat-bt))
-(assert-equal 0 (string-match frame-re test-s1))
-(assert-equal "0" (substring test-s1
-                            (match-beginning num-group)
-                            (match-end num-group)))
-(assert-equal "/usr/share/perl/5.18.2/File/Basename.pm"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "107"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-(setq test-pos (match-end 0))
-
-(assert-equal 127 (string-match frame-re test-s1 test-pos))
-(assert-equal "1" (substring test-s1
-                            (match-beginning num-group)
-                            (match-end num-group)))
-(assert-equal "/usr/share/perl/5.18.2/File/Basename1.pm"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "294"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-(setq test-pos (match-end 0))
-(assert-equal 254 test-pos)
-
-(end-tests)
diff --git a/packages/realgud/test/test-loc.el 
b/packages/realgud/test/test-loc.el
deleted file mode 100644
index 3a9510a..0000000
--- a/packages/realgud/test/test-loc.el
+++ /dev/null
@@ -1,63 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/common/buffer/source.el")
-(load-file "../realgud/common/loc.el")
-
-(declare-function __FILE__                    'load-relative)
-(declare-function make-realgud-loc            'realgud-loc)
-(declare-function realgud-loc-cmd-marker      'realgud-loc)
-(declare-function realgud-loc-line-number     'realgud-loc)
-(declare-function realgud-loc-marker          'realgud-loc)
-(declare-function realgud-loc-marker=         'realgud-loc)
-
-(test-simple-start)
-
-(save-current-buffer
-
-  ;; Below, we need to make sure current-buffer has an associated
-  ;; file with it.
-  (find-file (symbol-file 'test-simple))
-
-  (note "location field extraction")
-  (let* ((buff (current-buffer))
-        (filename (buffer-file-name buff))
-        (source-marker (point-marker))
-        (cmd-marker (point-marker))
-        (good-loc (make-realgud-loc
-                   :filename filename
-                   :line-number 5
-                   :marker source-marker
-                   :cmd-marker cmd-marker
-                   ))
-        (good-loc2 (make-realgud-loc
-                    :filename filename
-                    :line-number 6
-                    :marker source-marker
-                    :cmd-marker cmd-marker
-                    ))
-        ;; (good-loc3 (realgud-loc-current buff cmd-marker))
-        )
-
-    (assert-equal 5 (realgud-loc-line-number good-loc) "line-number 
extraction")
-
-    (assert-equal source-marker (realgud-loc-marker good-loc)
-                 "source code marker extraction")
-
-
-    (assert-equal cmd-marker (realgud-loc-cmd-marker good-loc)
-                 "command process marker extraction")
-
-
-    (realgud-loc-marker= good-loc2 source-marker)
-    (assert-equal source-marker (realgud-loc-marker good-loc2)
-                 "marker set")
-
-    ))
-
-(end-tests)
-
-; TODO: add test for debug-loc-goto, e.g.
-;(realgud-loc-goto (realgud-loc-new "/tmp/bashdb.diff" 8))
-;(realgud-loc-goto (realgud-loc-new "/tmp/bashdb.diff" 8) 'other-window 1)
diff --git a/packages/realgud/test/test-lochist.el 
b/packages/realgud/test/test-lochist.el
deleted file mode 100644
index b684339..0000000
--- a/packages/realgud/test/test-lochist.el
+++ /dev/null
@@ -1,114 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/common/loc.el")
-(load-file "../realgud/common/lochist.el")
-(load-file "../realgud/common/buffer/helper.el")
-
-(declare-function __FILE__                    'load-relative)
-(declare-function make-realgud-loc            'realgud-loc)
-(declare-function make-realgud-loc-his        'realgud-loc)
-(declare-function realgud-loc-hist-add        'realgud-lochist)
-(declare-function realgud-loc-hist-ring       'realgud-lochist)
-(declare-function realgud-loc-hist-item       'realgud-lochist)
-(declare-function realgud-loc-hist-position   'realgud-lochist)
-(declare-function realgud-loc-hist-index      'realgud-lochist)
-(declare-function realgud-loc-hist-newest     'realgud-lochist)
-(declare-function realgud:buffer-line-no-props 'realgud-buffer-helper)
-(declare-function make-realgud-loc-hist      'realgud-lochist)
-(declare-function ring-length 'ring)
-
-(declare-function realgud-get-cmdbuf-from-srcbuf 'realgud-buffer-helper)
-
-(test-simple-start)
-
-;;; (defun setup()
-;;;      (lexical-let ((loc-hist (make-realgud-loc-hist))
-;;;               (filename (buffer-file-name (current-buffer)))
-;;;               (loc (realgud-loc-current)))
-;;;        (realgud-loc-hist-add loc-hist loc)))
-;;;        ;; (message "aa ring-index %s"
-;;;        ;;          (realgud-loc-hist-index loc-hist))))
-
-;;; (setup)
-
-
-;; FIXME: redo tests, so we don't have to almost duplicate and
-;; dummy realgud-loc-current.
-(defun realgud-loc-current(&optional source-buffer cmd-marker)
-  "Create a location object for the point in the current buffer.
-   If SOURCE-BUFFER is not given, take the current buffer as the
-   source buffer."
-  (interactive "")
-  (unless source-buffer
-    (setq source-buffer (current-buffer)))
-  ;;(unless (realgud-srcbuf? source-buffer)
-  ;;  (error "%s is not a realgud source buffer" source-buffer))
-  (unless cmd-marker
-    (setq cmd-marker
-         (realgud-get-cmdbuf-from-srcbuf source-buffer))
-    )
-  (with-current-buffer source-buffer
-    (let ((mark (point-marker))
-         (text (realgud:buffer-line-no-props)))
-      (make-realgud-loc
-       :filename (buffer-file-name source-buffer)
-       :column-number (current-column)
-       :line-number (line-number-at-pos)
-       :source-text text
-       :marker      mark
-       :cmd-marker cmd-marker
-       )
-      )))
-
-
-(let ((saved-buffer (current-buffer)))
-  ; Below, we need to make sure current-buffer has an associated
-  ; file with it.
-  (find-file (symbol-file 'test-simple))
-
-  (note "location ring initialization and fields access")
-  (let* ((loc-hist (make-realgud-loc-hist))
-        (source-buffer (current-buffer))
-        (cmd-marker (point-marker))
-        (filename (buffer-file-name (current-buffer)))
-        (loc (realgud-loc-current source-buffer cmd-marker)))
-
-    (assert-t (ring-p (realgud-loc-hist-ring loc-hist))
-             "get ring component for a new history ring")
-
-
-    (assert-equal -1 (realgud-loc-hist-position loc-hist)
-                 "ring position for an empty history ring is -1")
-
-
-    (assert-nil (realgud-loc-hist-item loc-hist)
-               "get item for an empty history ring")
-
-    (realgud-loc-hist-add loc-hist loc)
-    (assert-equal loc (realgud-loc-hist-item loc-hist)
-                 "add an item to an empty history ring")
-
-
-    (assert-equal 1 (ring-length
-                    (realgud-loc-hist-ring loc-hist))
-                 "One item in history ring")
-
-    (assert-equal 1 (realgud-loc-hist-index loc-hist)
-                 "ring index in history ring is 1")
-
-    ;; (realgud-loc-hist-add loc-hist loc)
-    ;; (assert-equal 1 (ring-length
-    ;;                      (realgud-loc-hist-ring loc-hist) )
-    ;;                   "duplicate item added is ignored")
-
-
-    (assert-equal 1 (realgud-loc-hist-index loc-hist)
-                 "ring index in history ring after dup ignore is still 1")
-
-    (assert-equal -1 (realgud-loc-hist-newest loc-hist) "Set to newest 
position")
-
-            ))
-
-(end-tests)
diff --git a/packages/realgud/test/test-nodejs.el 
b/packages/realgud/test/test-nodejs.el
deleted file mode 100644
index e6ab3bb..0000000
--- a/packages/realgud/test/test-nodejs.el
+++ /dev/null
@@ -1,37 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/debugger/nodejs/nodejs.el")
-
-(eval-when-compile (defvar test:run-process-save))
-
-(declare-function nodejs-parse-cmd-args 'realgud:nodejs)
-(declare-function nodejs                'realgud:nodejs)
-(declare-function __FILE__              'load-relative)
-
-(test-simple-start)
-
-;; Save value realgud:run-process and change it to something we want
-(setq test:run-process-save (symbol-function 'realgud:run-process))
-(defun realgud:run-process(debugger-name script-filename cmd-args
-                                        minibuf-history &optional no-reset)
-  "Fake realgud:run-process used in testing"
-  (note
-   (format "%s %s %s" debugger-name script-filename cmd-args))
-  (assert-equal "node" debugger-name "debugger name gets passed")
-  (let ((expanded-name (expand-file-name "./gcd.js")))
-    (assert-equal  expanded-name script-filename "file name check")
-    ))
-
-(note "nodejs-parse-cmd-args")
-(assert-equal (list '("node" "debug") nil '("foo"))
-             (nodejs-parse-cmd-args '("node" "debug" "foo")))
-
-;; FIXME: need to mock remove-ansi-schmutz in realgud:nodejs
-;; (realgud:nodejs "node debug ./gcd.js 3 5")
-
-;; Restore the old value of realgud:run-process
-(fset 'realgud:run-process test:run-process-save)
-
-(end-tests)
diff --git a/packages/realgud/test/test-pdb.el 
b/packages/realgud/test/test-pdb.el
deleted file mode 100644
index b6694e2..0000000
--- a/packages/realgud/test/test-pdb.el
+++ /dev/null
@@ -1,39 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-(load-file "../realgud/debugger/pdb/pdb.el")
-
-(eval-when-compile (defvar test:run-process-save))
-
-(declare-function pdb-parse-cmd-args 'realgud:pdb-core)
-(declare-function realgud:pdb        'realgud:pdb)
-(declare-function __FILE__           'load-relative)
-
-(test-simple-start)
-
-;; Save value realgud:run-process and change it to something we want
-(setq test:run-process-save (symbol-function 'realgud:run-process))
-(defun realgud:run-process(debugger-name script-filename cmd-args
-                                     minibuffer-histroy &optional no-reset)
-  "Fake realgud:run-process used in testing"
-  (note
-   (format "%s %s %s" debugger-name script-filename cmd-args))
-  (assert-equal "pdb" debugger-name "debugger name gets passed")
-  (assert-equal (expand-file-name "./gcd.py") script-filename "file name 
check")
-  (assert-equal '("3" "5") (cddr cmd-args) "command args listified")
-  )
-
-;; (note "pdb-parse-cmd-args")
-;; (assert-equal (list nil '("pdb") (list (expand-file-name "foo")) nil)
-;;           (pdb-parse-cmd-args '("pdb" "foo")))
-;; (assert-equal (list nil '("pdb") (list (expand-file-name "program.py") 
"foo") nil)
-;;           (pdb-parse-cmd-args
-;;            '("pdb" "program.py" "foo")))
-
-(realgud:pdb "pdb ./gcd.py 3 5")
-;; Restore the old value of realgud:run-process
-(fset 'realgud:run-process test:run-process-save)
-
-(end-tests)
diff --git a/packages/realgud/test/test-perldb.el 
b/packages/realgud/test/test-perldb.el
deleted file mode 100644
index 90b4fef..0000000
--- a/packages/realgud/test/test-perldb.el
+++ /dev/null
@@ -1,26 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/debugger/perldb/perldb.el")
-
-(declare-function realgud:perldb-parse-cmd-args 'realgud:perldb)
-(declare-function realgud:perldb        'realgud:perldb)
-(declare-function __FILE__              'load-relative)
-
-(declare-function realgud-perldb-parse-cmd-args 'realgud-perldb)
-(test-simple-start)
-
-(note "realgud:perldb-parse-cmd-args")
-(assert-equal (list
-              '("perl" "-W" "-d") nil
-              (list (expand-file-name"gcd.rb") "a" "b"))
-             (realgud:perldb-parse-cmd-args
-              '("perl" "-W" "-d" "gcd.rb" "a" "b")))
-(assert-equal (list
-              '("perl5.10.1" "-C" "/tmp" "-d") nil
-               (list (expand-file-name "gcd.rb")))
-             (realgud:perldb-parse-cmd-args
-              '("perl5.10.1" "-C" "/tmp" "-d" "gcd.rb")))
-
-(end-tests)
diff --git a/packages/realgud/test/test-rdebug.el 
b/packages/realgud/test/test-rdebug.el
deleted file mode 100644
index 20a7d22..0000000
--- a/packages/realgud/test/test-rdebug.el
+++ /dev/null
@@ -1,45 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-(load-file "../realgud/debugger/rdebug/rdebug.el")
-(declare-function rdebug-get-script-name 'realgud-rdebug)
-(declare-function __FILE__               'load-relative)
-(test-simple-start)
-
-(note "rdebug-get-script-name")
-(assert-equal '("foo" nil)
-             (rdebug-get-script-name '("rdebug" "foo")))
-(assert-equal '("foo" nil)
-             (rdebug-get-script-name '("rdebug" "-m" "foo")))
-(assert-equal '("foo" t)
-             (rdebug-get-script-name
-              '("rdebug" "--emacs" "3" "foo")))
-(assert-equal '("foo" t)
-             (rdebug-get-script-name
-              '("myrdebug" "--annotate=1" "foo")))
-(assert-equal '("foo" t)
-             (rdebug-get-script-name
-              '("ruby" "rdebug" "--annotate" "1" "foo")))
-(assert-equal '("foo" nil)
-             (rdebug-get-script-name
-              '("/usr/bin/ruby19" "rdebug"
-                "--emacs-basic" "foo")))
-(assert-equal '("foo" nil)
-             (rdebug-get-script-name '("rdbg.rb" "foo")))
-(assert-equal '("rdbg.rb" nil)
-             (rdebug-get-script-name
-              '("rdebug" "rdbg.rb" "foo")))
-(assert-equal '("foo" t)
-             (rdebug-get-script-name
-              '("rdebug" "-A" "1" "foo")))
-(assert-equal '("foo" nil)
-             (rdebug-get-script-name
-              '("rdebug" "--include" "me" "-n" "foo")))
-(assert-equal '("foo" nil)
-             (rdebug-get-script-name
-              '("rdebug" "--server" "-d" "--host"
-                "localhost" "foo" "-1")))
-
-(end-tests)
diff --git a/packages/realgud/test/test-realgud.el 
b/packages/realgud/test/test-realgud.el
deleted file mode 100644
index a86c354..0000000
--- a/packages/realgud/test/test-realgud.el
+++ /dev/null
@@ -1,40 +0,0 @@
-;; Manually run these tests as follows:
-;;
-;; emacs --batch --no-site-file --no-splash \
-;;   --script setup.el --chdir PACAKGESDIR/realgud \
-;;   -l test/test-realgud.el -f ert-run-tests-batch-and-exit
-;;
-;; where setup.el looks something like:
-;; (let ((elpa-dir (expand-file-name "~/.emacs.d/elpa")))
-;;   (add-to-list 'load-path (concat elpa-dir "/test-simple-20170117.411"))
-;;   (add-to-list 'load-path (concat elpa-dir "/load-relative-20160716.438"))
-;;   (add-to-list 'load-path (concat elpa-dir "/loc-changes-20160801.1008")))
-
-(defun realgud-test-helper()
-  (delq nil
-               (mapcar (lambda (x) (and (string-match-p 
"^\\(realgud:\\|realgud-\\)" (symbol-name x)) x))
-                               features)))
-
-(ert-deftest test-feature-unload()
-
-  ;; no realgud features exist by default
-  (should (= 0 (length (realgud-test-helper))))
-  (should-not (member 'realgud-pdb features))
-
-  (load-file "realgud.el") ; manually load the first time
-
-  ;; we should now have realgud features;
-  (should-not (= 0 (length (realgud-test-helper))))
-  (should (member 'realgud-pdb features))
-  ;; test at least 1 by name
-  (should (member 'realgud-pdb features))
-
-  ;; unload all and test
-  (let ((removed (realgud:unload-features)))
-       (should-not (= 0 (length removed)))) ; check that we return removed 
values
-  (let ((removed (realgud:unload-features))) ; should not err out if called on 
empty.
-       (should (= 0 (length removed))))
-
-  (realgud:load-features) ; load and test
-  (should-not (= 0 (length (realgud-test-helper))))
-  (should (member 'realgud-pdb features)))
diff --git a/packages/realgud/test/test-regexp-bashdb.el 
b/packages/realgud/test/test-regexp-bashdb.el
deleted file mode 100644
index 5e34b0f..0000000
--- a/packages/realgud/test/test-regexp-bashdb.el
+++ /dev/null
@@ -1,126 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-(load-file "../realgud/debugger/bashdb/init.el")
-(load-file "./regexp-helper.el")
-
-(declare-function loc-match                     'realgud-helper)
-(declare-function prompt-match                   'regexp-helper)
-(declare-function realgud-loc-pat-num            'realgud-regexp)
-(declare-function realgud-loc-pat-regexp         'realgud-regexp)
-(declare-function realgud-loc-pat-file-group     'realgud-regexp)
-(declare-function realgud-loc-pat-line-group     'realgud-regexp)
-(declare-function __FILE__                       'load-relative)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar file-group)
-  (defvar frame-re)
-  (defvar line-group)
-  (defvar num-group)
-  (defvar test-pos)
-  (defvar prompt-pat)
-  (defvar realgud:bashdb-pat-hash)
-  (defvar realgud-pat-bt)
-  (defvar test-s1)
-  (defvar test-text)
-  (defvar brkpt-del)
-  (defvar bp-del-pat)
-  (defvar bp-enable-pat)
-  (defvar bp-disable-pat)
-)
-
-(set (make-local-variable 'bp-del-pat)
-      (gethash "brkpt-del" realgud:bashdb-pat-hash))
-
-(set (make-local-variable 'bp-enable-pat)
-      (gethash "brkpt-enable" realgud:bashdb-pat-hash))
-
-(set (make-local-variable 'bp-disable-pat)
-      (gethash "brkpt-disable" realgud:bashdb-pat-hash))
-
-(note "bashdb prompt matching")
-(set (make-local-variable 'prompt-pat)
-     (gethash "prompt" realgud:bashdb-pat-hash))
-(prompt-match "bashdb<10> "  "10")
-(prompt-match  "bashdb<(5)> " "5" "subshell prompt %s")
-(prompt-match  "bashdb<<1>> " "1" "nested debug prompt %s")
-
-(note "debugger-backtrace")
-(setq realgud-pat-bt  (gethash "debugger-backtrace"
-                            realgud:bashdb-pat-hash))
-(setq test-s1
-      "->0 in file `/etc/apparmor/functions' at line 24
-##1 source(\"/etc/apparmor/functions\") called from file 
`/etc/init.d/apparmor' at line 35
-##2 source(\"/etc/init.d/apparmor\") called from file `/usr/local/bin/bashdb' 
at line 140
-##3 main() called from file `/bin/bashdb' at line 0
-")
-(setq frame-re (realgud-loc-pat-regexp realgud-pat-bt))
-(setq num-group (realgud-loc-pat-num realgud-pat-bt))
-(setq file-group (realgud-loc-pat-file-group realgud-pat-bt))
-(setq line-group (realgud-loc-pat-line-group realgud-pat-bt))
-(assert-equal 0 (string-match frame-re test-s1))
-(assert-equal "0" (substring test-s1
-                            (match-beginning num-group)
-                            (match-end num-group)))
-(assert-equal "/etc/apparmor/functions"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "24"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-(setq test-pos (match-end 0))
-
-(assert-equal 49 (string-match frame-re test-s1 test-pos))
-(assert-equal "1" (substring test-s1
-                            (match-beginning num-group)
-                            (match-end num-group)))
-(assert-equal "/etc/init.d/apparmor"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "35"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-(setq test-pos (match-end 0))
-(assert-equal 138 (string-match frame-re test-s1 test-pos))
-(assert-equal "2" (substring test-s1
-                            (match-beginning num-group)
-                            (match-end num-group)))
-(assert-equal "/usr/local/bin/bashdb"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "140"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-(setq test-pos (match-end 0))
-(assert-equal 226 (string-match frame-re test-s1 test-pos))
-(assert-equal "3" (substring test-s1
-                            (match-beginning num-group)
-                            (match-end num-group)))
-(assert-equal "/bin/bashdb"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-
-(note "breakpoint delete matching")
-(setq test-text "Deleted breakpoint 1\n")
-(assert-t (numberp (loc-match test-text bp-del-pat)) "breakpoint delete 
matching")
-
-(note "breakpoint enable matching")
-(setq test-text "Breakpoint entry 4 enabled.\n")
-(assert-t (numberp (loc-match test-text bp-enable-pat)) "breakpoint enable 
matching")
-
-(note "breakpoint disable matching")
-(setq test-text "Breakpoint entry 2 disabled.\n")
-(assert-t (numberp (loc-match test-text bp-disable-pat)) "breakpoint disable 
matching")
-
-(end-tests)
diff --git a/packages/realgud/test/test-regexp-gdb.el 
b/packages/realgud/test/test-regexp-gdb.el
deleted file mode 100644
index b649e78..0000000
--- a/packages/realgud/test/test-regexp-gdb.el
+++ /dev/null
@@ -1,112 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-(load-file "../realgud/common/buffer/command.el")
-(load-file "../realgud/debugger/gdb/init.el")
-(load-file "./regexp-helper.el")
-
-(declare-function __FILE__              'load-relative)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar dbg-name)   (defvar realgud-pat-hash)   (defvar realgud-bt-pat)
-  (defvar loc-pat)    (defvar prompt-pat)         (defvar test-s1)
-  (defvar file-group) (defvar line-group)         (defvar test-pos)
-  (defvar test-dbgr)  (defvar test-text)          (defvar realgud-bt-re)
-  (defvar realgud:gdb-pat-hash)
-)
-
-; Some setup usually done in setting up the buffer.
-; We customize this for this debugger.
-; FIXME: encapsulate this.
-(setq dbg-name "gdb")
-
-(setq loc-pat (gethash "loc" (gethash dbg-name realgud-pat-hash)))
-(setq test-dbgr (make-realgud-cmdbuf-info
-                 :debugger-name dbg-name
-                 :loc-regexp (realgud-loc-pat-regexp loc-pat)
-                 :file-group (realgud-loc-pat-file-group loc-pat)
-                 :line-group (realgud-loc-pat-line-group loc-pat)))
-
-;; FIXME: we get a void variable somewhere in here when running
-;;        even though we define it in lexical-let. Dunno why.
-;;        setq however will workaround this.
-(setq test-text "/home/rocky/c/ctest.c:80:2000:beg:0x8048748>")
-(note "traceback location matching")
-
-(assert-t (numberp (cmdbuf-loc-match test-text test-dbgr)) "basic location")
-(assert-equal "/home/rocky/c/ctest.c"
-             (match-string (realgud-cmdbuf-info-file-group test-dbgr)
-                           test-text) "extract file name")
-(assert-equal "80"
-             (match-string (realgud-cmdbuf-info-line-group test-dbgr)
-                           test-text) "extract line number")
-(note "debugger-backtrace")
-(setq realgud-bt-pat  (gethash "debugger-backtrace"
-                           realgud:gdb-pat-hash))
-(setq test-s1
-      "#0  main (argc=2, argv=0xbffff564, envp=0xbffff570) at main.c:935
-#1  0xb7e9f4a5 in *__GI___strdup (s=0xbffff760 \"/tmp/remake/remake\") at 
strdup.c:42
-#2  0x080593ac in main (argc=2, argv=0xbffff5a4, envp=0xbffff5b0)
-    at main.c:952
-#46 0xb7f51b87 in vm_call_cfunc (th=0x804d188, reg_cfp=0xb7ba9e88, num=0,
-    recv=157798080, blockptr=0x0, me=0x80d12a0) at vm_insnhelper.c:410
-")
-(setq realgud-bt-re (realgud-loc-pat-regexp realgud-bt-pat))
-(setq file-group (realgud-loc-pat-file-group realgud-bt-pat))
-(setq line-group (realgud-loc-pat-line-group realgud-bt-pat))
-(assert-equal 0 (string-match realgud-bt-re test-s1))
-(assert-equal "main.c"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "935"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-
-(setq test-pos (match-end 0))
-(assert-equal 65 test-pos)
-(assert-equal 65 (string-match realgud-bt-re test-s1 test-pos))
-(assert-equal "strdup.c"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "42"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-
-(setq test-pos (match-end 0))
-(assert-equal 149 test-pos)
-(assert-equal 149 (string-match realgud-bt-re test-s1 test-pos))
-(assert-equal "main.c"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "952"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-
-(setq test-pos (match-end 0))
-(assert-equal 233 test-pos)
-(assert-equal 233 (string-match realgud-bt-re test-s1 test-pos))
-(assert-equal "vm_insnhelper.c"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "410"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-
-(note "prompt")
-(set (make-local-variable 'prompt-pat)
-     (gethash "prompt" realgud:gdb-pat-hash))
-(prompt-match "(gdb) ")
-
-(end-tests)
diff --git a/packages/realgud/test/test-regexp-gub.el 
b/packages/realgud/test/test-regexp-gub.el
deleted file mode 100644
index 0240a05..0000000
--- a/packages/realgud/test/test-regexp-gub.el
+++ /dev/null
@@ -1,65 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/common/buffer/command.el")
-(load-file "../realgud/debugger/gub/init.el")
-(load-file "./regexp-helper.el")
-
-(test-simple-start)
-
-(declare-function __FILE__                       'load-relative)
-
-(eval-when-compile
-  (defvar dbg-name)
-  (defvar realgud:gub-pat-hash)
-  (defvar panic-tb)
-  (defvar test-tb)
-  (defvar prompt-pat)
-  (defvar test-dbgr)
-  (defvar test-text)
-)
-
-; Some setup usually done in setting up the buffer.
-; We customize this for this debugger.
-; FIXME: encapsulate this.
-(setq dbg-name "gub")
-
-(note "gub prompt")
-(set (make-local-variable 'prompt-pat)
-     (gethash "prompt" realgud:gub-pat-hash))
-(prompt-match "gub[0]: ")
-(prompt-match "gub[20]: ")
-(prompt-match "gub[32@5]: ")
-
-(setup-regexp-vars realgud:gub-pat-hash)
-(set (make-local-variable 'test-tb)
-     (gethash "lang-backtrace"  realgud:gub-pat-hash))
-
-(note "go lang traceback")
-(setq test-text "/usr/local/go/src/pkg/runtime/panic.c:482 (0x805c956)")
-
-(assert-t (numberp (tb-loc-match test-text)) "go traceback location")
-(assert-equal "/usr/local/go/src/pkg/runtime/panic.c"
-             (match-string (realgud-loc-pat-file-group test-tb)
-                           test-text) "extract traceback file name")
-(assert-equal "482"
-             (match-string (realgud-loc-pat-line-group test-tb)
-                           test-text)   "extract traceback line number")
-
-(note "panic traceback")
-(setq test-text "      
/tmp/github.com/rocky/ssa-interp/eval/selectorexpr.go:18 +0x9f")
-
-(set (make-local-variable 'panic-tb)
-     (gethash "panic-backtrace"  realgud:gub-pat-hash))
-
-(assert-t (numberp (string-match (realgud-loc-pat-regexp panic-tb) test-text))
-         "go panic location")
-(assert-equal "/tmp/github.com/rocky/ssa-interp/eval/selectorexpr.go"
-             (match-string (realgud-loc-pat-file-group test-tb)
-                           test-text) "extract panic traceback file name")
-(assert-equal "18"
-             (match-string (realgud-loc-pat-line-group test-tb)
-                           test-text)   "extract panic traceback line number")
-
-(end-tests)
diff --git a/packages/realgud/test/test-regexp-ipdb.el 
b/packages/realgud/test/test-regexp-ipdb.el
deleted file mode 100644
index a9a74cc..0000000
--- a/packages/realgud/test/test-regexp-ipdb.el
+++ /dev/null
@@ -1,108 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/debugger/ipdb/init.el")
-(load-file "./regexp-helper.el")
-
-(declare-function __FILE__                       'load-relative)
-(declare-function loc-match                     'realgud-helper)
-(declare-function prompt-match                   'regexp-helper)
-(declare-function realgud-loc-pat-file-group     'realgud-regexp)
-(declare-function realgud-loc-pat-line-group     'realgud-regexp)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar loc-pat)   (defvar prompt-pat) (defvar realgud:ipdb-pat-hash)
-  (defvar tb-pat)    (defvar test-text)  (defvar prompt-str)
-  (defvar bps-pat)
-)
-
-(set (make-local-variable 'bps-pat)
-      (gethash "brkpt-set" realgud:ipdb-pat-hash))
-
-(set (make-local-variable 'loc-pat)
-     (gethash "loc"       realgud:ipdb-pat-hash))
-
-(set (make-local-variable 'prompt-pat)
-      (gethash "prompt"    realgud:ipdb-pat-hash))
-
-(set (make-local-variable 'tb-pat)
-      (gethash "lang-backtrace" realgud:ipdb-pat-hash))
-
-;; FIXME: we get a void variable somewhere in here when running
-;;        even though we define it in lexical-let. Dunno why.
-;;        setq however will workaround this.
-(setq test-text
-      "  File \"/usr/lib/python2.6/code.py\", line 281, in raw_input")
-(note "traceback location matching")
-
-(assert-t (numberp (loc-match test-text tb-pat)) "basic traceback location")
-
-(assert-equal "/usr/lib/python2.6/code.py"
-             (match-string (realgud-loc-pat-file-group tb-pat)
-                           test-text))
-
-(setq test-text
-      "  File \"/usr/lib/python2.6/code.py\", line 281, in raw_input")
-(loc-match test-text tb-pat)
-(assert-equal "281"
-             (match-string (realgud-loc-pat-line-group tb-pat)
-                           test-text) "extract line number")
-
-(note "breakpoint location matching")
-
-(setq test-text "Breakpoint 1 at /src/git/code/gcd.py:13")
-(assert-t (numberp (loc-match test-text bps-pat))
-         "basic breakpoint location")
-
-(assert-equal "/src/git/code/gcd.py"
-             (match-string (realgud-loc-pat-file-group
-                            bps-pat)
-                           test-text)
-             "extract breakpoint file name")
-
-
-(assert-equal "13"
-             (match-string (realgud-loc-pat-line-group
-                            bps-pat)
-                           test-text)   "extract breakpoint line number")
-
-;; (set test-text "(c:\\working\\python\\helloworld.py:30): <module>")
-;;
-;; (assert-t (numberp (loc-match test-text loc-pat)) "MS DOS position 
location")
-;; ;;
-;; (assert-equal "c:\\working\\python\\helloworld.py"
-;;     (match-string (realgud-loc-pat-file-group loc-pat)
-;;                   test-text)
-;;     (format "Failing file group is %s"
-;;                             (realgud-loc-pat-file-group tb-pat))
-;;     "extract file name")
-;; (assert-equal "30"
-;;           (match-string (realgud-loc-pat-line-group loc-pat)
-;;                         test-text) "extract line number")
-
-(setq test-text "> /usr/bin/ipython(24)<module>")
-(assert-t (numberp (loc-match test-text loc-pat)) "position location")
-(assert-equal "/usr/bin/ipython"
-             (match-string (realgud-loc-pat-file-group loc-pat)
-                           test-text)
-             (format "Failing file group is %s"
-                     (realgud-loc-pat-file-group tb-pat)))
-(assert-equal "24"
-             (match-string (realgud-loc-pat-line-group
-                            loc-pat)
-                           test-text)
-             "extract line number")
-
-
-(note "prompt matching")
-(set (make-local-variable 'prompt-str) "ipdb> ")
-(prompt-match prompt-str nil "debugger prompt: %s")
-(setq prompt-str "ipdb")
-(assert-nil (numberp (loc-match prompt-str prompt-pat))
-           (format "%s %s" "invalid debugger prompt"
-                   prompt-str))
-
-(end-tests)
diff --git a/packages/realgud/test/test-regexp-java.el 
b/packages/realgud/test/test-regexp-java.el
deleted file mode 100644
index ae77ba3..0000000
--- a/packages/realgud/test/test-regexp-java.el
+++ /dev/null
@@ -1,41 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/lang/java.el")
-(load-file "./regexp-helper.el")
-
-(declare-function __FILE__              'load-relative)
-(declare-function prompt-match          'regexp-helper)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar loc-pat)   (defvar realgud:flake8-msg-loc-pat)
-  (defvar test-text)
-  )
-
-;; FIXME: we get a void variable somewhere in here when running
-;;        even though we define it in lexical-let. Dunno why.
-;;        setq however will workaround this.
-(note "maven testing")
-
-(setq test-text
-      "[ERROR] /Users/rocky/pymaven/LexumoIndexer.java:[203,26] error: ';' 
expected")
-
-(assert-t (numberp (loc-match test-text realgud-maven-error-loc-pat))
-         "maven error")
-
-(assert-equal "/Users/rocky/pymaven/LexumoIndexer.java"
-             (match-string (realgud-loc-pat-file-group 
realgud-maven-error-loc-pat)
-                           test-text))
-
-(assert-equal "203"
-             (match-string (realgud-loc-pat-line-group 
realgud-maven-error-loc-pat)
-                           test-text))
-
-(assert-equal "26"
-             (match-string (realgud-loc-pat-char-offset-group 
realgud-maven-error-loc-pat)
-                           test-text))
-
-(end-tests)
diff --git a/packages/realgud/test/test-regexp-jdb.el 
b/packages/realgud/test/test-regexp-jdb.el
deleted file mode 100644
index efac100..0000000
--- a/packages/realgud/test/test-regexp-jdb.el
+++ /dev/null
@@ -1,78 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/common/buffer/command.el")
-(load-file "../realgud/debugger/jdb/init.el")
-(load-file "./regexp-helper.el")
-
-(declare-function __FILE__              'load-relative)
-(declare-function prompt-match          'regexp-helper)
-
-(eval-when-compile
-  (defvar dbg-name)   (defvar realgud-pat-hash)   (defvar loc-pat)
-  (defvar test-dbgr)  (defvar test-text)         (defvar prompt-pat)
-  (defvar realgud:jdb-pat-hash)
-)
-
-(test-simple-start)
-
-(note "jdb prompt matching")
-(set (make-local-variable 'prompt-pat)
-     (gethash "prompt" realgud:jdb-pat-hash))
-(prompt-match "main[1] "  "1" "most common main prompt")
-(prompt-match "main[2] "  "2" "main prompt up a level")
-(prompt-match "> " nil "no loc prompt")
-
-
-; Some setup usually done in setting up the buffer.
-; We customize this for this debugger.
-; FIXME: encapsulate this.
-(setq dbg-name "jdb")
-
-(setq loc-pat (gethash "loc" (gethash dbg-name realgud-pat-hash)))
-(setq test-dbgr (make-realgud-cmdbuf-info
-                :debugger-name dbg-name
-                :loc-regexp (realgud-loc-pat-regexp loc-pat)
-                :file-group (realgud-loc-pat-file-group loc-pat)
-                :line-group (realgud-loc-pat-line-group loc-pat)))
-
-;; FIXME: we get a void variable somewhere in here when running
-;;        even though we define it in lexical-let. Dunno why.
-;;        setq however will workaround this.
-(let ((text "Breakpoint hit: \"thread=main\", TestMe.main(), line=7 bci=0"))
-
-  (note "traceback location matching")
-
-  (assert-t (numberp (cmdbuf-loc-match text test-dbgr)) "breakpoint location")
-  (assert-equal "7"
-             (match-string (realgud-cmdbuf-info-line-group test-dbgr)
-                           text) "extract line number from breakpoint"))
-
-(let ((text "Step completed: \"thread=main\", TestMe.main(), line=71 bci=0"))
-  (assert-t (numberp (cmdbuf-loc-match text test-dbgr)) "breakpoint location")
-  (assert-equal "71"
-               (match-string (realgud-cmdbuf-info-line-group test-dbgr)
-                             text) "extract line number from step"))
-
-;; (note "debugger-backtrace")
-;; (setq realgud-bt-pat  (gethash "debugger-backtrace"
-;;                         realgud:jdb-pat-hash))
-;; (setq s1
-;;       "  [1] java.lang.Class.getDeclaredMethods0 (native method)
-;;   [2] java.lang.Class.privateGetDeclaredMethods (Class.java:2,570)
-;;   [3] java.lang.Class.getMethod0 (Class.java:2,813)
-;;   [4] java.lang.Class.getMethod (Class.java:1,663)
-;;   [5] sun.launcher.LauncherHelper.getMainMethod (LauncherHelper.java:494)
-;;   [6] sun.launcher.LauncherHelper.checkAndLoadMain (LauncherHelper.java:486)
-;; ")
-;; (setq realgud-bt-re (realgud-loc-pat-regexp realgud-bt-pat))
-;; (setq file-group (realgud-loc-pat-file-group realgud-bt-pat))
-;; (setq line-group (realgud-loc-pat-line-group realgud-bt-pat))
-;; (assert-equal 0 (string-match realgud-bt-re s1))
-;; (assert-equal "570"
-;;           (substring s1
-;;                      (match-beginning line-group)
-;;                      (match-end line-group)))
-
-(end-tests)
diff --git a/packages/realgud/test/test-regexp-nodejs.el 
b/packages/realgud/test/test-regexp-nodejs.el
deleted file mode 100644
index c4ea10d..0000000
--- a/packages/realgud/test/test-regexp-nodejs.el
+++ /dev/null
@@ -1,74 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/debugger/nodejs/init.el")
-(load-file "./regexp-helper.el")
-
-(declare-function realgud-cmdbuf-info-loc-regexp 'realgud-buffer-command)
-(declare-function cmdbuf-loc-match               'realgud-regexp)
-(declare-function loc-match                     'realgud-helper)
-(declare-function prompt-match                   'regexp-helper)
-(declare-function realgud-loc-pat-num            'realgud-regexp)
-(declare-function realgud-loc-pat-regexp         'realgud-regexp)
-(declare-function realgud-loc-pat-file-group     'realgud-regexp)
-(declare-function realgud-loc-pat-line-group     'realgud-regexp)
-(declare-function  make-realgud-cmdbuf-info      'realgud-regexp)
-(declare-function realgud-cmdbuf-info-file-group 'realgud-regexp)
-(declare-function realgud-cmdbuf-info-line-group 'realgud-regexp)
-(declare-function __FILE__                       'load-relative)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar dbg-name)
-  (defvar loc-pat)
-  (defvar bt-pat)
-  (defvar prompt-pat)
-  (defvar realgud:nodejs-pat-hash)
-  (defvar realgud-pat-hash)
-  (defvar test-dbgr)
-  (defvar test-text)
-  (defvar test-s1)
-)
-
-(note "nodejs prompt matching")
-(set (make-local-variable 'prompt-pat)
-     (gethash "prompt" realgud:nodejs-pat-hash))
-(prompt-match "debug> ")
-(prompt-match "debug> connecting... ok")
-
-(note "nodejs location matching")
-(setq dbg-name "nodejs")
-(setq loc-pat (gethash "loc" (gethash dbg-name realgud-pat-hash)))
-
-(setq test-dbgr (make-realgud-cmdbuf-info
-                :debugger-name dbg-name
-                :loc-regexp (realgud-loc-pat-regexp loc-pat)
-                :file-group (realgud-loc-pat-file-group loc-pat)
-                :line-group (realgud-loc-pat-line-group loc-pat)))
-
-(setq test-text "break in test/fixtures/break-in-module/main.js:1\n")
-(assert-t (numberp (cmdbuf-loc-match test-text test-dbgr)) "basic location")
-
-(string-match (realgud-cmdbuf-info-loc-regexp test-dbgr) test-text)
-(assert-equal "test/fixtures/break-in-module/main.js"
-             (match-string (realgud-cmdbuf-info-file-group test-dbgr)
-                           test-text) "extract file name")
-
-(string-match (realgud-cmdbuf-info-loc-regexp test-dbgr) test-text)
-(assert-equal "1"
-             (match-string
-              (realgud-cmdbuf-info-line-group test-dbgr)
-              test-text) "extract line number")
-
-(note "debugger-backtrace")
-(setq test-text
-    "#0 module.js:380:17
-")
-
-(set (make-local-variable
-      'bt-pat)
-      (gethash "debugger-backtrace" realgud:nodejs-pat-hash))
-
-(end-tests)
diff --git a/packages/realgud/test/test-regexp-pdb.el 
b/packages/realgud/test/test-regexp-pdb.el
deleted file mode 100644
index dfb72af..0000000
--- a/packages/realgud/test/test-regexp-pdb.el
+++ /dev/null
@@ -1,107 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/debugger/pdb/init.el")
-(load-file "./regexp-helper.el")
-
-(declare-function __FILE__              'load-relative)
-(declare-function prompt-match          'regexp-helper)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar loc-pat)   (defvar prompt-pat) (defvar realgud:pdb-pat-hash)
-  (defvar tb-pat)    (defvar test-text)  (defvar prompt-str)
-  (defvar bps-pat)
-)
-
-(set (make-local-variable 'bps-pat)
-      (gethash "brkpt-set" realgud:pdb-pat-hash))
-
-(set (make-local-variable 'loc-pat)
-     (gethash "loc"       realgud:pdb-pat-hash))
-
-(set (make-local-variable 'prompt-pat)
-      (gethash "prompt"    realgud:pdb-pat-hash))
-
-(set (make-local-variable 'tb-pat)
-      (gethash "lang-backtrace" realgud:pdb-pat-hash))
-
-;; FIXME: we get a void variable somewhere in here when running
-;;        even though we define it in lexical-let. Dunno why.
-;;        setq however will workaround this.
-(setq test-text
-      "  File \"/usr/lib/python2.6/code.py\", line 281, in raw_input")
-(note "traceback location matching")
-
-(assert-t (numberp (loc-match test-text tb-pat)) "basic traceback location")
-
-(assert-equal "/usr/lib/python2.6/code.py"
-             (match-string (realgud-loc-pat-file-group tb-pat)
-                           test-text))
-
-(setq test-text
-      "  File \"/usr/lib/python2.6/code.py\", line 281, in raw_input")
-(loc-match test-text tb-pat)
-(assert-equal "281"
-             (match-string (realgud-loc-pat-line-group tb-pat)
-                           test-text) "extract line number")
-
-(note "breakpoint location matching")
-
-(setq test-text "Breakpoint 1 at /src/git/code/gcd.py:13")
-(assert-t (numberp (loc-match test-text bps-pat))
-         "basic breakpoint location")
-
-(assert-equal "/src/git/code/gcd.py"
-             (match-string (realgud-loc-pat-file-group
-                            bps-pat)
-                           test-text)
-             "extract breakpoint file name")
-
-
-(assert-equal "13"
-             (match-string (realgud-loc-pat-line-group
-                            bps-pat)
-                           test-text)   "extract breakpoint line number")
-
-;; (set test-text "(c:\\working\\python\\helloworld.py:30): <module>")
-;;
-;; (assert-t (numberp (loc-match test-text loc-pat)) "MS DOS position 
location")
-;; ;;
-;; (assert-equal "c:\\working\\python\\helloworld.py"
-;;     (match-string (realgud-loc-pat-file-group loc-pat)
-;;                   test-text)
-;;     (format "Failing file group is %s"
-;;                             (realgud-loc-pat-file-group tb-pat))
-;;     "extract file name")
-;; (assert-equal "30"
-;;           (match-string (realgud-loc-pat-line-group loc-pat)
-;;                         test-text) "extract line number")
-
-(setq test-text "> /usr/bin/ipython(24)<module>")
-(assert-t (numberp (loc-match test-text loc-pat)) "position location")
-(assert-equal "/usr/bin/ipython"
-             (match-string (realgud-loc-pat-file-group loc-pat)
-                           test-text)
-             (format "Failing file group is %s"
-                     (realgud-loc-pat-file-group tb-pat)))
-(assert-equal "24"
-             (match-string (realgud-loc-pat-line-group
-                            loc-pat)
-                           test-text)
-             "extract line number")
-
-
-(note "prompt matching")
-(set (make-local-variable 'prompt-str) "(Pdb) ")
-(prompt-match prompt-str nil "debugger prompt: %s")
-(setq prompt-str "((Pdb)) ")
-(prompt-match prompt-str nil "nested debugger prompt: %s")
-(setq prompt-str "Pdb) ")
-(assert-nil (numberp (loc-match prompt-str prompt-pat))
-           (format "%s %s" "invalid debugger prompt"
-                   prompt-str))
-
-(end-tests)
diff --git a/packages/realgud/test/test-regexp-perldb.el 
b/packages/realgud/test/test-regexp-perldb.el
deleted file mode 100644
index 71ac0b6..0000000
--- a/packages/realgud/test/test-regexp-perldb.el
+++ /dev/null
@@ -1,207 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/common/buffer/command.el")
-(load-file "../realgud/lang/perl.el")
-(load-file "../realgud/debugger/perldb/init.el")
-(load-file "./regexp-helper.el")
-
-(declare-function __FILE__              'load-relative)
-(declare-function prompt-match          'regexp-helper)
-(declare-function cmdbuf-loc-match      'realgud-regexp)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar dbg-name)
-  (defvar realgud:perldb-pat-hash)
-  (defvar realgud-pat-hash)
-  (defvar panic-tb)
-  (defvar loc-pat)
-  (defvar test-pos)
-  (defvar prompt-pat)
-  (defvar test-dbgr)
-  (defvar carp-bt-re)
-  (defvar file-group)
-  (defvar line-group)
-  (defvar test-text)
-  (defvar lang-bt-pat)
-  (defvar lang-bt-re)
-  (defvar realgud-bt-pat)
-  (defvar realgud-bt-re)
-  (defvar test-s1)
-  (defvar realgud-perl-ignore-file-re)
-)
-
-; Some setup usually done in setting up the buffer.
-; We customize this for this debugger.
-; FIXME: encapsulate this.
-(setq dbg-name "perldb")
-(set (make-local-variable 'loc-pat)
-     (gethash "loc"    (gethash dbg-name realgud-pat-hash)))
-(set (make-local-variable 'prompt-pat)
-     (gethash "prompt" realgud:perldb-pat-hash))
-
-(setq test-dbgr (make-realgud-cmdbuf-info
-                :debugger-name dbg-name
-                :loc-regexp (realgud-loc-pat-regexp loc-pat)
-                :file-group (realgud-loc-pat-file-group loc-pat)
-                :alt-line-group (realgud-loc-pat-alt-line-group loc-pat)
-                :alt-file-group (realgud-loc-pat-alt-file-group loc-pat)
-                :line-group (realgud-loc-pat-line-group loc-pat)
-                :text-group (realgud-loc-pat-text-group loc-pat)
-                ))
-
-(note "prompt")
-(prompt-match "  DB<2> "  "2")
-(prompt-match "[pid=6489->6502]  DB<1> " "1")
-
-(setq test-text "((eval 1006)[../example/eval.pl:5])")
-(assert-equal 1 (string-match realgud:perldb-loc-eval-regexp
-                             test-text)
-             "perldb eval loc matching")
-
-(assert-equal "../example/eval.pl"
-             (match-string (realgud-cmdbuf-info-alt-file-group test-dbgr)
-                           test-text)
-             "extract file name when we have source text")
-
-(assert-equal "5"
-             (match-string (realgud-cmdbuf-info-alt-line-group test-dbgr)
-                           test-text))
-
-(assert-equal 0 (string-match realgud-perl-ignore-file-re
-                             "(eval 1006)[../example/eval.pl:5]")
-             "perldb file ignore matching")
-
-(setq test-text "main::(/usr/bin/latex2html:102):\n")
-
-(assert-t (numberp (cmdbuf-loc-match test-text test-dbgr)) "basic location")
-(assert-equal "/usr/bin/latex2html"
-             (match-string (realgud-cmdbuf-info-file-group test-dbgr)
-                           test-text)
-             "extract file name")
-
-(setq test-text 
"File::Basename::dirname(/usr/share/perl/5.16.0/File/Basename.pm:284): my $path 
= shift;
-")
-
-(assert-t (numberp (cmdbuf-loc-match test-text test-dbgr))
-         "location with source")
-(assert-equal "/usr/share/perl/5.16.0/File/Basename.pm"
-             (match-string (realgud-cmdbuf-info-file-group test-dbgr)
-                           test-text)
-             "extract file name when we have source text")
-(assert-equal "284"
-             (match-string (realgud-cmdbuf-info-line-group test-dbgr)
-                           test-text)
-             "extract line number when we have source text")
-(assert-equal "my $path = shift;"
-             (match-string (realgud-cmdbuf-info-text-group test-dbgr)
-                           test-text)
-             "extract source text")
-
-(setq test-text "main::((eval 6)[eval.pl:5]:2):        $x = 2;")
-
-(assert-t (numberp (cmdbuf-loc-match test-text test-dbgr)) "eval location")
-
-(assert-equal "eval.pl"
-             (match-string (realgud-cmdbuf-info-alt-file-group test-dbgr)
-                           test-text)
-             "extract eval file name")
-
-(assert-equal "5"
-             (match-string (realgud-cmdbuf-info-alt-line-group test-dbgr)
-                           test-text) "extract line number")
-
-(note "location for with CODE in it")
-(setq test-text "main::CODE(0x9407ac8)(l2hconf.pm:6):\n")
-(assert-t (numberp (cmdbuf-loc-match test-text test-dbgr)))
-(assert-equal "l2hconf.pm"
-             (match-string (realgud-cmdbuf-info-file-group test-dbgr)
-                           test-text))
-(assert-equal "6"
-             (match-string (realgud-cmdbuf-info-line-group test-dbgr)
-                           test-text))
-
-(note "debugger-backtrace")
-(setq realgud-bt-pat  (gethash "debugger-backtrace"
-                           realgud:perldb-pat-hash))
-(setq test-s1
-      "$ = main::top_navigation_panel called from file `./latex2html' line 7400
-p")
-(setq realgud-bt-re (realgud-loc-pat-regexp realgud-bt-pat))
-(setq file-group (realgud-loc-pat-file-group realgud-bt-pat))
-(setq line-group (realgud-loc-pat-line-group realgud-bt-pat))
-(assert-equal 30 (string-match realgud-bt-re test-s1))
-(assert-equal "./latex2html"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "7400"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-
-(note "debugger-errmsg")
-(setq realgud-bt-pat  (gethash "perl-errmsg"
-                           realgud:perldb-pat-hash))
-(setq test-s1
-      "Use of uninitialized value $lines[0] in join or string at 
bin/../lib/LineCache.pm line 548.")
-(setq realgud-bt-re (realgud-loc-pat-regexp realgud-bt-pat))
-(setq file-group (realgud-loc-pat-file-group realgud-bt-pat))
-(setq line-group (realgud-loc-pat-line-group realgud-bt-pat))
-(assert-equal 54 (string-match realgud-bt-re test-s1))
-(assert-equal "bin/../lib/LineCache.pm"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "548"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-
-(note "carp-backtrace")
-(setq test-s1
-      " at /tmp/foo.pl line 7
-       main::__ANON__('Illegal division by zero at /tmp/foo.pl line 4.\x{a}') 
called at foo2.pl line 5
-       main::foo(3) called at foo3.pl line 8
-")
-(setq lang-bt-pat (gethash "lang-backtrace"
-                          realgud:perldb-pat-hash))
-(setq carp-bt-re (realgud-loc-pat-regexp lang-bt-pat))
-(setq file-group (realgud-loc-pat-file-group lang-bt-pat))
-(setq line-group (realgud-loc-pat-line-group lang-bt-pat))
-(assert-equal 0 (string-match carp-bt-re test-s1))
-(assert-equal "/tmp/foo.pl"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "7"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-(setq test-pos (match-end 0))
-
-(assert-equal 22 (string-match carp-bt-re test-s1 test-pos))
-(assert-equal "foo2.pl"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "5"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-
-(setq test-pos (match-end 0))
-(assert-equal 119 (string-match carp-bt-re test-s1 test-pos))
-(assert-equal "foo3.pl"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "8"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-
-(end-tests)
diff --git a/packages/realgud/test/test-regexp-python.el 
b/packages/realgud/test/test-regexp-python.el
deleted file mode 100644
index 35301c2..0000000
--- a/packages/realgud/test/test-regexp-python.el
+++ /dev/null
@@ -1,64 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/lang/python.el")
-(load-file "./regexp-helper.el")
-
-(declare-function __FILE__              'load-relative)
-(declare-function prompt-match          'regexp-helper)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar loc-pat)   (defvar realgud:flake8-msg-loc-pat)
-  (defvar test-text)
-  )
-
-;; FIXME: we get a void variable somewhere in here when running
-;;        even though we define it in lexical-let. Dunno why.
-;;        setq however will workaround this.
-(note "flake8 testing")
-
-(setq test-text
-      "uncompyle6/parsers/parse3.py:441:17: W503 line break before binary 
operator")
-
-(assert-t (numberp (loc-match test-text realgud-flake8-msg-loc-pat))
-         "flake8 warning")
-
-(assert-equal "uncompyle6/parsers/parse3.py"
-             (match-string (realgud-loc-pat-file-group 
realgud-flake8-msg-loc-pat)
-                           test-text))
-
-(assert-equal "441"
-             (match-string (realgud-loc-pat-line-group 
realgud-flake8-msg-loc-pat)
-                           test-text))
-
-(assert-equal "17"
-             (match-string (realgud-loc-pat-char-offset-group 
realgud-flake8-msg-loc-pat)
-                           test-text))
-
-(setq test-text
-      "/uncompyle6/main.py:53:1: E303 too many blank lines (3)")
-
-
-(assert-t (numberp (loc-match test-text realgud-flake8-msg-loc-pat))
-         "flake8 error")
-
-(assert-equal "/uncompyle6/main.py"
-             (match-string (realgud-loc-pat-file-group 
realgud-flake8-msg-loc-pat)
-                           test-text))
-
-(assert-equal "53"
-             (match-string (realgud-loc-pat-line-group 
realgud-flake8-msg-loc-pat)
-                           test-text))
-
-(assert-equal "1"
-             (match-string (realgud-loc-pat-char-offset-group 
realgud-flake8-msg-loc-pat)
-                           test-text))
-
-;; FIXME add pytest testing
-;; (note "pytest testing")
-
-
-(end-tests)
diff --git a/packages/realgud/test/test-regexp-rdebug.el 
b/packages/realgud/test/test-regexp-rdebug.el
deleted file mode 100644
index 16fc074..0000000
--- a/packages/realgud/test/test-regexp-rdebug.el
+++ /dev/null
@@ -1,55 +0,0 @@
-;; -*- lexical-binding:t -*-
-
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/debugger/rdebug/init.el")
-(load-file "./regexp-helper.el")
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar helper-bps)
-  (defvar helper-tb)
-  (defvar prompt-pat)
-  (defvar rails-bt)
-  (defvar realgud-rdebug-pat-hash)
-  (defvar test-text)
-)
-
-(setup-regexp-vars realgud-rdebug-pat-hash)
-(setq rails-bt (gethash "rails-backtrace" realgud-rdebug-pat-hash))
-
-;; FIXME: we get a void variable somewhere in here when running
-;;        even though we define it in lexical-let. Dunno why.
-;;        setq however will workaround this.
-(setq test-text "      from /usr/local/bin/irb:12:in `<main>'")
-(note "traceback location matching")
-(let ((text "  from /usr/local/bin/irb:12:in `<main>'"))
-  (assert-t (numberp (loc-match text helper-tb)) "basic traceback location")
-  (assert-equal "/usr/local/bin/irb"
-               (match-string (realgud-loc-pat-file-group helper-tb)
-                             text)
-               "extract traceback file name")
-  (assert-equal "12"
-               (match-string (realgud-loc-pat-line-group helper-tb)
-                             text) "extract traceback line number")
-  )
-
-(let ((text "Breakpoint 1 file /usr/bin/irb, line 10\n"))
-  (assert-t (numberp (loc-match text helper-bps)) "basic breakpoint location")
-  (assert-equal "/usr/bin/irb"
-               (match-string (realgud-loc-pat-file-group helper-bps)
-                             text) "extract breakpoint file name")
-  (assert-equal "10"
-               (match-string (realgud-loc-pat-line-group helper-bps)
-                             text)   "extract breakpoint line number")
-  )
-
-(note "prompt")
-(set (make-local-variable 'prompt-pat)
-     (gethash "prompt" realgud-rdebug-pat-hash))
-(prompt-match "(rdb:1) ")
-
-(end-tests)
diff --git a/packages/realgud/test/test-regexp-remake.el 
b/packages/realgud/test/test-regexp-remake.el
deleted file mode 100644
index e6e69b0..0000000
--- a/packages/realgud/test/test-regexp-remake.el
+++ /dev/null
@@ -1,75 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/debugger/remake/init.el")
-(load-file "./regexp-helper.el")
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar prompt-pat) (defvar frame-pat)   (defvar frame-re)
-  (defvar loc-pat)    (defvar prompt-pat)  (defvar test-text)
-  (defvar file-group) (defvar line-group)  (defvar test-pos)
-  (defvar num-pat)    (defvar num-group)   (defvar realgud:remake-pat-hash)
-)
-
-(declare-function prompt-match                   'regexp-helper)
-(declare-function realgud-loc-pat-num            'realgud-regexp)
-(declare-function realgud-loc-pat-regexp         'realgud-regexp)
-(declare-function realgud-loc-pat-file-group     'realgud-regexp)
-(declare-function realgud-loc-pat-line-group     'realgud-regexp)
-
-(set (make-local-variable 'prompt-pat)
-     (gethash "prompt"             realgud:remake-pat-hash))
-(set (make-local-variable 'frame-pat)
-     (gethash "debugger-backtrace" realgud:remake-pat-hash))
-
-(note "remake prompt")
-(prompt-match "remake<10> "  "10")
-(prompt-match  "remake<<1>> " "1" "recursive remake %s")
-
-(note "remake debugger-backtrace")
-(setq test-text
-      "=>#0  Makefile.in at /tmp/Makefile:216
-  #1  Makefile at /tmp/Makefile:230
-")
-
-(set (make-local-variable 'frame-re)
-     (realgud-loc-pat-regexp frame-pat))
-(set (make-local-variable 'num-group)
-     (realgud-loc-pat-num frame-pat))
-(set (make-local-variable 'file-group)
-     (realgud-loc-pat-file-group frame-pat))
-(set (make-local-variable 'line-group)
-     (realgud-loc-pat-line-group frame-pat))
-
-(assert-equal 0 (string-match frame-re test-text))
-(assert-equal "0" (substring test-text
-                            (match-beginning num-group)
-                            (match-end num-group)))
-(assert-equal "/tmp/Makefile"
-             (substring test-text
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "216"
-             (substring test-text
-                        (match-beginning line-group)
-                        (match-end line-group)))
-(set (make-local-variable 'test-pos)
-     (match-end 0))
-
-(assert-equal 39 (string-match frame-re test-text test-pos))
-(assert-equal "1" (substring test-text
-                            (match-beginning num-group)
-                            (match-end num-group)))
-(assert-equal "/tmp/Makefile"
-             (substring test-text
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "230"
-             (substring test-text
-                        (match-beginning line-group)
-                        (match-end line-group)))
-
-(end-tests)
diff --git a/packages/realgud/test/test-regexp-ruby.el 
b/packages/realgud/test/test-regexp-ruby.el
deleted file mode 100644
index a2392b1..0000000
--- a/packages/realgud/test/test-regexp-ruby.el
+++ /dev/null
@@ -1,43 +0,0 @@
-;; -*- lexical-binding:t -*-
-
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-;; Don't have a pat-hash for ruby, so we need something that pulls in
-;; Ruby.
-(load-file "./regexp-helper.el")
-(load-file "../realgud/debugger/rdebug/init.el")
-
-(test-simple-start)
-
-(setq bt  (gethash "rails-backtrace" realgud-rdebug-pat-hash))
-
-;; FIXME: we get a void variable somewhere in here when running
-;;        even though we define it in lexical-let. Dunno why.
-;;        setq however will workaround this.
-(setq text "/tmp/rails-2.3.5/lib/tasks/databases.rake:360")
-
-(let ((text "/tmp/rails-2.3.5/lib/tasks/databases.rake:360"))
-
-  (assert-t (numberp (loc-match text bt)) "basic traceback location")
-  (assert-equal "/tmp/rails-2.3.5/lib/tasks/databases.rake"
-               (match-string (realgud-loc-pat-file-group bt)
-                             text) "extract traceback file name")
-  (assert-equal "360"
-               (match-string (realgud-loc-pat-line-group bt)
-                             text)   "extract traceback line number")
-  )
-
-(let ((text
-       "/tmp/gems/rake-0.8.7/lib/rake.rb:597:in `invoke_with_call_chain'"))
-
-  (assert-t (numberp (loc-match text bt)) "traceback location with in")
-  (assert-equal "/tmp/gems/rake-0.8.7/lib/rake.rb"
-               (match-string (realgud-loc-pat-file-group bt)
-                             text)   "extract traceback file name 2")
-  (assert-equal "597"
-               (match-string (realgud-loc-pat-line-group bt)
-                             text)   "extract breakpoint line number 2")
-  )
-
-(end-tests)
diff --git a/packages/realgud/test/test-regexp-trepan.el 
b/packages/realgud/test/test-regexp-trepan.el
deleted file mode 100644
index 5712c61..0000000
--- a/packages/realgud/test/test-regexp-trepan.el
+++ /dev/null
@@ -1,150 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/debugger/trepan/init.el")
-(load-file "./regexp-helper.el")
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar bps-pat)
-  (defvar ctrl-pat)
-  (defvar dbg-bt-pat)
-  (defvar file-group)
-  (defvar frame-re)
-  (defvar lang-bt-pat)
-  (defvar line-group)
-  (defvar num-group)
-  (defvar test-pos)
-  (defvar prompt-pat)
-  (defvar prompt-str)
-  (defvar tb-loc-match)
-  (defvar test-dbgr)
-  (defvar test-s1)
-  (defvar test-text)
-  (defvar realgud:trepan-pat-hash)
-)
-
-(declare-function loc-match                     'realgud-helper)
-(declare-function prompt-match                   'regexp-helper)
-(declare-function realgud-loc-pat-file-group     'realgud-regexp)
-(declare-function realgud-loc-pat-line-group     'realgud-regexp)
-(declare-function realgud-loc-pat-num            'realgud-regexp)
-(declare-function realgud-loc-pat-regexp         'realgud-regexp)
-
-(set (make-local-variable 'bps-pat)
-     (gethash "brkpt-set"          realgud:trepan-pat-hash))
-(set (make-local-variable 'dbg-bt-pat)
-     (gethash "debugger-backtrace" realgud:trepan-pat-hash))
-(set (make-local-variable 'prompt-pat)
-     (gethash "prompt"             realgud:trepan-pat-hash))
-(set (make-local-variable 'lang-bt-pat)
-     (gethash "lang-backtrace"     realgud:trepan-pat-hash))
-(set (make-local-variable 'ctrl-pat)
-     (gethash "control-frame"      realgud:trepan-pat-hash))
-
-;; FIXME: we get a void variable somewhere in here when running
-;;        even though we define it in lexical-let. Dunno why.
-;;        setq however will workaround this.
-(set (make-local-variable 'test-text)
- "     from /usr/local/bin/irb:12:in `<main>'")
-
-(note "traceback location matching")
-
-(setq test-text "      from /usr/local/bin/irb:12:in `<main>'")
-
-(assert-t (numberp (loc-match test-text lang-bt-pat))
-         "basic traceback location")
-(assert-equal "/usr/local/bin/irb"
-             (match-string (realgud-loc-pat-file-group lang-bt-pat) test-text)
-             "extract traceback file name")
-
-(assert-equal "12"
-             (match-string (realgud-loc-pat-line-group
-                            lang-bt-pat) test-text)
-             "extract traceback line number")
-
-(note "debugger-backtrace")
-(set (make-local-variable 'test-s1)
-     "--> #0 METHOD Object#require(path) in file <internal:lib/require> at 
line 28
-    #1 TOP Object#<top /tmp/linecache.rb> in file /tmp/linecache.rb
-")
-
-(set (make-local-variable 'frame-re)
-     (realgud-loc-pat-regexp dbg-bt-pat))
-(set (make-local-variable 'num-group)
-     (realgud-loc-pat-num dbg-bt-pat))
-(set (make-local-variable 'file-group)
-     (realgud-loc-pat-file-group dbg-bt-pat))
-(set (make-local-variable 'line-group)
-     (realgud-loc-pat-line-group dbg-bt-pat))
-
-(assert-equal 0 (string-match frame-re test-s1))
-(assert-equal "0" (substring test-s1
-                            (match-beginning num-group)
-                            (match-end num-group)))
-(assert-equal "<internal:lib/require>"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "28"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-(setq test-pos (match-end 0))
-
-(assert-equal 77 (string-match frame-re test-s1 test-pos))
-(assert-equal "1" (substring test-s1
-                            (match-beginning num-group)
-                            (match-end num-group)))
-(assert-equal "/tmp/linecache.rb"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-
-(note "prompt")
-(prompt-match "(trepan): ")
-(prompt-match "((trepan)): " nil "nested debugger prompt: %s")
-(prompt-match "((trepan@55)): " "@55" "nested debugger prompt with addr: %s")
-(prompt-match "((trepan@main)): " "@main"
-             "nested debugger prompt with method: %s")
-(setq prompt-str "trepan:")
-(assert-nil (loc-match prompt-str prompt-pat)
-           (format "invalid prompt %s" prompt-str))
-
-
-(note "control-frame")
-(assert-equal 0 (loc-match
-                "c:0026 p:0181 s:0136 b:0136 l:000135 d:000135 METHOD 
/trepan-0.0.1/app/frame.rb:132 "
-                ctrl-pat)
-             )
-(assert-equal 0 (loc-match
-                "c:0030 p:0041 s:0144 b:0144 l:00226c d:00226c METHOD 
/gems/trepan-0.0.1/processor/eval.rb:15 "
-                ctrl-pat)
-             )
-(assert-equal 0 (loc-match
-                "c:0015 p:0139 s:0070 b:0070 l:000063 d:000069 BLOCK  
/gems/app/core.rb:121"
-                ctrl-pat)
-             )
-
-(setq test-text "Breakpoint 1 set at VM offset 2 of instruction sequence 
\"<top /usr/local/bin/irb>\",
-       line 9 in file /usr/local/bin/irb.
-")
-
-
-(assert-t (numberp (loc-match test-text bps-pat))
-         "basic breakpoint location")
-
-
-(assert-equal "/usr/local/bin/irb"
-             (match-string (realgud-loc-pat-file-group
-                            bps-pat) test-text)
-             "extract breakpoint file name")
-
-(assert-equal "9"
-             (match-string (realgud-loc-pat-line-group
-                            bps-pat) test-text)
-             "extract breakpoint line number")
-
-(end-tests)
diff --git a/packages/realgud/test/test-regexp-trepan2.el 
b/packages/realgud/test/test-regexp-trepan2.el
deleted file mode 100644
index 15ed531..0000000
--- a/packages/realgud/test/test-regexp-trepan2.el
+++ /dev/null
@@ -1,167 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-(load-file "./regexp-helper.el")
-(load-file "../realgud/debugger/trepan2/init.el")
-
-(declare-function loc-match                     'realgud-helper)
-(declare-function prompt-match                   'regexp-helper)
-(declare-function realgud-loc-pat-num            'realgud-regexp)
-(declare-function realgud-loc-pat-regexp         'realgud-regexp)
-(declare-function realgud-loc-pat-file-group     'realgud-regexp)
-(declare-function realgud-loc-pat-line-group     'realgud-regexp)
-(declare-function __FILE__                       'load-relative)
-(declare-function setup-regexp-vars              'regexp-helper)
-(declare-function realgud-loc-pat-text-group     'realgud-trepan2-init)
-
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar file-group)
-  (defvar frame-re)
-  (defvar line-group)
-  (defvar num-group)
-  (defvar test-pos)
-  (defvar test-s1)
-  (defvar helper-tb)
-  (defvar helper-bps)
-  (defvar prompt-pat)
-  (defvar realgud-pat-bt)
-  (defvar helper-loc)
-  (defvar realgud:trepan2-pat-hash)
-  (defvar trepan2-text)
-)
-
-(note "prompt matching")
-
-(set (make-local-variable 'prompt-pat)
-     (gethash "prompt" realgud:trepan2-pat-hash))
-
-(prompt-match "(trepan2) ")
-
-(setup-regexp-vars realgud:trepan2-pat-hash)
-
-(note "debugger-backtrace")
-(setq realgud-pat-bt  (gethash "debugger-backtrace"
-                            realgud:trepan2-pat-hash))
-(setq test-s1
-      "##0 gcd(a=3, b=5) called from file '/tmp/test/gcd.py' at line 31
-->1 <module> exec()
-     '/tmp/test/gcd2.py' at line 41
-")
-(setq frame-re (realgud-loc-pat-regexp realgud-pat-bt))
-(setq num-group (realgud-loc-pat-num realgud-pat-bt))
-(setq file-group (realgud-loc-pat-file-group realgud-pat-bt))
-(setq line-group (realgud-loc-pat-line-group realgud-pat-bt))
-(assert-equal 0 (string-match frame-re test-s1))
-(assert-equal "0" (substring test-s1
-                            (match-beginning num-group)
-                            (match-end num-group)))
-(assert-equal "/tmp/test/gcd.py"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "31"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-(setq test-pos (match-end 0))
-
-(assert-equal 64 (string-match frame-re test-s1 test-pos))
-(assert-equal "1" (substring test-s1
-                            (match-beginning num-group)
-                            (match-end num-group)))
-(assert-equal "/tmp/test/gcd2.py"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "41"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-(setq test-pos (match-end 0))
-(assert-equal 120 test-pos)
-
-(setq helper-tb  (gethash "lang-backtrace" realgud:trepan2-pat-hash))
-
-(note "traceback location matching")
-(setq test-s1
-      "  File \"/usr/lib/python2.6/code.py\", line 281, in raw_input")
-
-(assert-t (numberp (loc-match test-s1 helper-tb))
-         "basic traceback location")
-
-(assert-equal "/usr/lib/python2.6/code.py"
-             (match-string (realgud-loc-pat-file-group helper-tb)
-                           test-s1)
-             (format "extract file - failing file group is %s"
-                     (realgud-loc-pat-file-group helper-tb)))
-(assert-equal "281"
-             (match-string (realgud-loc-pat-line-group helper-tb)
-                           test-s1) "extract line number")
-
-(note "breakpoint location matching")
-
-(setq test-s1
-      "Breakpoint 1 set at line 13 of file /src/git/code/gcd.py")
-
-(assert-t (numberp (loc-match test-s1 helper-bps))
-         "basic breakpoint location")
-(assert-equal "/src/git/code/gcd.py"
-             (match-string (realgud-loc-pat-file-group helper-bps)
-                           test-s1)   "extract breakpoint file name")
-(assert-equal "13"
-             (match-string (realgud-loc-pat-line-group helper-bps)
-                           test-s1)
-             "extract breakpoint line number")
-(setq test-s1 "(c:\\working\\python\\helloworld.py:30): <module>")
-(assert-t (numberp (loc-match test-s1 helper-loc))
-         "MS DOS position location")
-(assert-equal "c:\\working\\python\\helloworld.py"
-             (match-string (realgud-loc-pat-file-group helper-loc)
-                           test-s1)
-             (format "extract file - Failing file group is %s"
-                     (realgud-loc-pat-file-group helper-tb)))
-(assert-equal "30"
-             (match-string (realgud-loc-pat-line-group helper-loc)
-                           test-s1)   "extract line number")
-
-(setq test-s1 "(/usr/bin/ipython:24 @31): <module>")
-(assert-t (numberp (loc-match test-s1 helper-loc))
-         "position location")
-(assert-equal "/usr/bin/ipython"
-             (match-string (realgud-loc-pat-file-group helper-loc)
-                           test-s1)
-             (format "extract-file - failing file group is %s"
-                     (realgud-loc-pat-file-group helper-tb)))
-(assert-equal "24"
-             (match-string (realgud-loc-pat-line-group helper-loc)
-                           test-s1)
-             "extract line number")
-
-(setq test-s1
-      "(/tmp/eval_stringzDKTfr.py:1 remapped <string>): <module>")
-(assert-t (numberp (loc-match test-s1 helper-loc))   "position location")
-(assert-equal "/tmp/eval_stringzDKTfr.py"
-             (match-string (realgud-loc-pat-file-group helper-loc)
-                           test-s1)
-             (format "extract-file name - failing file group is %s"
-                     (realgud-loc-pat-file-group helper-tb)))
-(assert-equal "1"
-             (match-string (realgud-loc-pat-line-group helper-loc)
-                           test-s1)   "extract line number")
-
-(note "source text")
-
-(setq test-s1
-      "(/usr/local/bin/trepan2:4): <module>\n-- 4 import 
sys\n(trepan2) ")
-(assert-t (numberp (loc-match test-s1 helper-loc)) "source location")
-(assert-equal
- "import sys"
- (match-string (realgud-loc-pat-text-group helper-loc)
-              test-s1)   "extract source text")
-
-(end-tests)
diff --git a/packages/realgud/test/test-regexp-trepan3k.el 
b/packages/realgud/test/test-regexp-trepan3k.el
deleted file mode 100644
index 1c60d52..0000000
--- a/packages/realgud/test/test-regexp-trepan3k.el
+++ /dev/null
@@ -1,167 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-(load-file "./regexp-helper.el")
-(load-file "../realgud/debugger/trepan3k/init.el")
-
-(declare-function loc-match                     'realgud-helper)
-(declare-function prompt-match                   'regexp-helper)
-(declare-function realgud-loc-pat-num            'realgud-regexp)
-(declare-function realgud-loc-pat-regexp         'realgud-regexp)
-(declare-function realgud-loc-pat-file-group     'realgud-regexp)
-(declare-function realgud-loc-pat-line-group     'realgud-regexp)
-(declare-function __FILE__                       'load-relative)
-(declare-function setup-regexp-vars              'regexp-helper)
-(declare-function realgud-loc-pat-text-group     'realgud-trepan3k-init)
-
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar file-group)
-  (defvar frame-re)
-  (defvar line-group)
-  (defvar num-group)
-  (defvar test-pos)
-  (defvar test-s1)
-  (defvar helper-tb)
-  (defvar helper-bps)
-  (defvar prompt-pat)
-  (defvar realgud-pat-bt)
-  (defvar helper-loc)
-  (defvar realgud:trepan3k-pat-hash)
-  (defvar trepan3k-text)
-)
-
-(note "prompt matching")
-
-(set (make-local-variable 'prompt-pat)
-     (gethash "prompt" realgud:trepan3k-pat-hash))
-
-(prompt-match "(trepan3k) ")
-
-(setup-regexp-vars realgud:trepan3k-pat-hash)
-
-(note "debugger-backtrace")
-(setq realgud-pat-bt  (gethash "debugger-backtrace"
-                            realgud:trepan3k-pat-hash))
-(setq test-s1
-      "##0 gcd(a=3, b=5) called from file '/tmp/test/gcd.py' at line 31
-->1 <module> exec()
-     '/tmp/test/gcd2.py' at line 41
-")
-(setq frame-re (realgud-loc-pat-regexp realgud-pat-bt))
-(setq num-group (realgud-loc-pat-num realgud-pat-bt))
-(setq file-group (realgud-loc-pat-file-group realgud-pat-bt))
-(setq line-group (realgud-loc-pat-line-group realgud-pat-bt))
-(assert-equal 0 (string-match frame-re test-s1))
-(assert-equal "0" (substring test-s1
-                            (match-beginning num-group)
-                            (match-end num-group)))
-(assert-equal "/tmp/test/gcd.py"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "31"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-(setq test-pos (match-end 0))
-
-(assert-equal 64 (string-match frame-re test-s1 test-pos))
-(assert-equal "1" (substring test-s1
-                            (match-beginning num-group)
-                            (match-end num-group)))
-(assert-equal "/tmp/test/gcd2.py"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "41"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-(setq test-pos (match-end 0))
-(assert-equal 120 test-pos)
-
-(setq helper-tb  (gethash "lang-backtrace" realgud:trepan3k-pat-hash))
-
-(note "traceback location matching")
-(setq test-s1
-      "  File \"/usr/lib/python2.6/code.py\", line 281, in raw_input")
-
-(assert-t (numberp (loc-match test-s1 helper-tb))
-         "basic traceback location")
-
-(assert-equal "/usr/lib/python2.6/code.py"
-             (match-string (realgud-loc-pat-file-group helper-tb)
-                           test-s1)
-             (format "extract file - failing file group is %s"
-                     (realgud-loc-pat-file-group helper-tb)))
-(assert-equal "281"
-             (match-string (realgud-loc-pat-line-group helper-tb)
-                           test-s1) "extract line number")
-
-(note "breakpoint location matching")
-
-(setq test-s1
-      "Breakpoint 1 set at line 13 of file /src/git/code/gcd.py")
-
-(assert-t (numberp (loc-match test-s1 helper-bps))
-         "basic breakpoint location")
-(assert-equal "/src/git/code/gcd.py"
-             (match-string (realgud-loc-pat-file-group helper-bps)
-                           test-s1)   "extract breakpoint file name")
-(assert-equal "13"
-             (match-string (realgud-loc-pat-line-group helper-bps)
-                           test-s1)
-             "extract breakpoint line number")
-(setq test-s1 "(c:\\working\\python\\helloworld.py:30): <module>")
-(assert-t (numberp (loc-match test-s1 helper-loc))
-         "MS DOS position location")
-(assert-equal "c:\\working\\python\\helloworld.py"
-             (match-string (realgud-loc-pat-file-group helper-loc)
-                           test-s1)
-             (format "extract file - Failing file group is %s"
-                     (realgud-loc-pat-file-group helper-tb)))
-(assert-equal "30"
-             (match-string (realgud-loc-pat-line-group helper-loc)
-                           test-s1)   "extract line number")
-
-(setq test-s1 "(/usr/bin/ipython:24): <module>")
-(assert-t (numberp (loc-match test-s1 helper-loc))
-         "position location")
-(assert-equal "/usr/bin/ipython"
-             (match-string (realgud-loc-pat-file-group helper-loc)
-                           test-s1)
-             (format "extract-file - failing file group is %s"
-                     (realgud-loc-pat-file-group helper-tb)))
-(assert-equal "24"
-             (match-string (realgud-loc-pat-line-group helper-loc)
-                           test-s1)
-             "extract line number")
-
-(setq test-s1
-      "(/tmp/eval_stringzDKTfr.py:1 remapped <string>): <module>")
-(assert-t (numberp (loc-match test-s1 helper-loc))   "position location")
-(assert-equal "/tmp/eval_stringzDKTfr.py"
-             (match-string (realgud-loc-pat-file-group helper-loc)
-                           test-s1)
-             (format "extract-file name - failing file group is %s"
-                     (realgud-loc-pat-file-group helper-tb)))
-(assert-equal "1"
-             (match-string (realgud-loc-pat-line-group helper-loc)
-                           test-s1)   "extract line number")
-
-(note "source text")
-
-(setq test-s1
-      "(/usr/local/bin/trepan3k:4): <module>\n-- 4 import 
sys\n(trepan3k) ")
-(assert-t (numberp (loc-match test-s1 helper-loc)) "source location")
-(assert-equal
- "import sys"
- (match-string (realgud-loc-pat-text-group helper-loc)
-              test-s1)   "extract source text")
-
-(end-tests)
diff --git a/packages/realgud/test/test-regexp-trepanjs.el 
b/packages/realgud/test/test-regexp-trepanjs.el
deleted file mode 100644
index d26102d..0000000
--- a/packages/realgud/test/test-regexp-trepanjs.el
+++ /dev/null
@@ -1,94 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/debugger/trepanjs/init.el")
-(load-file "./regexp-helper.el")
-
-(declare-function realgud-cmdbuf-info-loc-regexp 'realgud-buffer-command)
-(declare-function cmdbuf-loc-match               'realgud-regexp)
-(declare-function loc-match                     'realgud-helper)
-(declare-function prompt-match                   'regexp-helper)
-(declare-function realgud-loc-pat-num            'realgud-regexp)
-(declare-function realgud-loc-pat-regexp         'realgud-regexp)
-(declare-function realgud-loc-pat-file-group     'realgud-regexp)
-(declare-function realgud-loc-pat-line-group     'realgud-regexp)
-(declare-function  make-realgud-cmdbuf-info      'realgud-regexp)
-(declare-function realgud-cmdbuf-info-file-group 'realgud-regexp)
-(declare-function realgud-cmdbuf-info-line-group 'realgud-regexp)
-(declare-function __FILE__                       'load-relative)
-(declare-function setup-regexp-vars              'regexp-helper)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar dbg-name)
-  (defvar loc-pat)
-  (defvar bt-pat)
-  (defvar prompt-pat)
-  (defvar realgud:trepanjs-pat-hash)
-  (defvar realgud-pat-hash)
-  (defvar helper-bps)
-  (defvar test-dbgr)
-  (defvar test-text)
-  (defvar test-s1)
-)
-
-(setup-regexp-vars realgud:trepanjs-pat-hash)
-
-(note "trepanjs prompt matching")
-(set (make-local-variable 'prompt-pat)
-     (gethash "prompt" realgud:trepanjs-pat-hash))
-(prompt-match "(trepanjs) ")
-(prompt-match "(trepanjs) connecting... ok")
-
-(note "trepanjs location matching")
-(setq dbg-name "trepanjs")
-(setq loc-pat (gethash "loc" (gethash dbg-name realgud-pat-hash)))
-
-(setq test-dbgr (make-realgud-cmdbuf-info
-                :debugger-name dbg-name
-                :loc-regexp (realgud-loc-pat-regexp loc-pat)
-                :file-group (realgud-loc-pat-file-group loc-pat)
-                :line-group (realgud-loc-pat-line-group loc-pat)))
-
-(setq test-text "break in test/fixtures/break-in-module/main.js at line 
1:23\n")
-(assert-t (numberp (cmdbuf-loc-match test-text test-dbgr)) "basic location")
-
-(string-match (realgud-cmdbuf-info-loc-regexp test-dbgr) test-text)
-(assert-equal "test/fixtures/break-in-module/main.js"
-             (match-string (realgud-cmdbuf-info-file-group test-dbgr)
-                           test-text) "extract file name")
-
-(string-match (realgud-cmdbuf-info-loc-regexp test-dbgr) test-text)
-(assert-equal "1"
-             (match-string
-              (realgud-cmdbuf-info-line-group test-dbgr)
-              test-text) "extract line number")
-
-(note "breakpoint location matching")
-
-(setq test-text
-      "Breakpoint 2 set in file /tmp/gcd.js, line 2.
-")
-
-(assert-t (numberp (loc-match test-text helper-bps))
-         "basic breakpoint location")
-(assert-equal "/tmp/gcd.js"
-             (match-string (realgud-loc-pat-file-group helper-bps)
-                           test-text)   "extract breakpoint file name")
-(assert-equal "2"
-             (match-string (realgud-loc-pat-line-group helper-bps)
-                           test-text)
-             "extract breakpoint line number")
-
-(note "debugger-backtrace")
-(setq test-text
-    "##1 in file /tmp/test/gcd.js at line 2:12"
-)
-
-(set (make-local-variable
-      'bt-pat)
-      (gethash "debugger-backtrace" realgud:trepanjs-pat-hash))
-
-(end-tests)
diff --git a/packages/realgud/test/test-regexp-trepanpl.el 
b/packages/realgud/test/test-regexp-trepanpl.el
deleted file mode 100644
index 00e0242..0000000
--- a/packages/realgud/test/test-regexp-trepanpl.el
+++ /dev/null
@@ -1,115 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-(load-file "../realgud/debugger/trepan.pl/init.el")
-(load-file "./regexp-helper.el")
-
-(eval-when-compile
-  (defvar realgud:trepanpl-pat-hash)
-  (defvar prompt-str)
-  (defvar test-dbgr)
-  (defvar carp-bt-re)
-  (defvar file-group)
-  (defvar line-group)
-  (defvar test-text)
-  (defvar dbg-bt-pat)
-  (defvar bps-pat)
-  (defvar realgud-bt-pat)
-  (defvar brkpt-del)
-  (defvar bp-del-pat)
-  (defvar bp-enable-pat)
-  (defvar bp-disable-pat)
-  (defvar realgud-perl-ignnore-file-re)
-)
-(declare-function __FILE__   'load-relative)
-
-(test-simple-start)
-
-(set (make-local-variable 'helper-bps)
-     (gethash "brkpt-set"       realgud:trepanpl-pat-hash))
-(set (make-local-variable 'prompt)
-     (gethash "prompt"          realgud:trepanpl-pat-hash))
-(set (make-local-variable 'helper-tb)
-     (gethash "lang-backtrace"  realgud:trepanpl-pat-hash))
-
-
-(set (make-local-variable 'bp-del-pat)
-      (gethash "brkpt-del" realgud:trepanpl-pat-hash))
-
-(set (make-local-variable 'bp-enable-pat)
-      (gethash "brkpt-enable" realgud:trepanpl-pat-hash))
-
-(set (make-local-variable 'bp-disable-pat)
-      (gethash "brkpt-disable" realgud:trepanpl-pat-hash))
-
-(note "prompt matching")
-(set (make-local-variable 'prompt-pat)
-     (gethash "prompt" realgud:trepanpl-pat-hash))
-(prompt-match "(trepanpl): ")
-(prompt-match "((trepanpl)): " nil "nested debugger prompt: %s")
-(setq prompt-str "trepanpl:")
-(assert-nil (loc-match prompt-str prompt-pat)
-           (format "invalid prompt %s" prompt-str))
-
-(setq test-text "Breakpoint 2 set in /tmp/File/Basename.pm at line 215")
-
-(assert-t (numberp (bp-loc-match test-text))
-         "basic breakpoint location")
-(assert-equal "/tmp/File/Basename.pm"
-             (match-string (realgud-loc-pat-file-group helper-bps)
-                           test-text)
-             "extract breakpoint file name"
-             )
-(assert-equal "215"
-             (match-string (realgud-loc-pat-line-group helper-bps)
-                           test-text)
-             "extract breakpoint line number"
-             )
-
-(setq test-text "Breakpoint 1 set in (eval 1177)[/Eval.pm:94] at line 5")
-(assert-t (numberp (bp-loc-match test-text)) "eval breakpoint location")
-(setq bps-pat
-     (gethash "brkpt-set"          realgud:trepanpl-pat-hash))
-(setq dbg-bt-pat
-     (gethash "debugger-backtrace" realgud:trepanpl-pat-hash))
-(setq prompt-pat
-     (gethash "prompt"             realgud:trepanpl-pat-hash))
-(setq lang-bt-pat
-     (gethash "lang-backtrace"     realgud:trepanpl-pat-hash))
-
-(note "prompt")
-(prompt-match "(trepanpl): ")
-(prompt-match "((trepanpl)): " nil "nested debugger prompt: %s")
-
-(setq test-text "Breakpoint 1 set in /tmp/gcd.pl at line 9")
-
-(assert-t (numberp (loc-match test-text bps-pat))
-         "basic breakpoint location")
-
-
-(assert-equal "/tmp/gcd.pl"
-             (match-string (realgud-loc-pat-file-group
-                            bps-pat) test-text)
-             "extract breakpoint file name")
-
-(assert-equal "9"
-             (match-string (realgud-loc-pat-line-group
-                            bps-pat) test-text)
-             "extract breakpoint line number")
-
-;; (note "breakpoint delete matching")
-;; (setq test-text "Deleted breakpoint 1.\n")
-;; (assert-t (numberp (loc-match test-text bp-del-pat)) "breakpoint delete 
matching")
-
-(note "breakpoint enable matching")
-(setq test-text "Breakpoint 4 enabled.\n")
-(assert-t (numberp (loc-match test-text bp-enable-pat)) "breakpoint enable 
matching")
-
-
-(note "breakpoint disable matching")
-(setq test-text "Breakpoint 2 disabled.\n")
-(assert-t (numberp (loc-match test-text bp-disable-pat)) "breakpoint disable 
matching")
-
-(end-tests)
diff --git a/packages/realgud/test/test-regexp-zshdb.el 
b/packages/realgud/test/test-regexp-zshdb.el
deleted file mode 100644
index 1ffecad..0000000
--- a/packages/realgud/test/test-regexp-zshdb.el
+++ /dev/null
@@ -1,118 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/debugger/zshdb/init.el")
-(load-file "./regexp-helper.el")
-
-(declare-function loc-match                     'realgud-helper)
-(declare-function prompt-match                   'regexp-helper)
-(declare-function realgud-loc-pat-num            'realgud-regexp)
-(declare-function realgud-loc-pat-regexp         'realgud-regexp)
-(declare-function realgud-loc-pat-file-group     'realgud-regexp)
-(declare-function realgud-loc-pat-line-group     'realgud-regexp)
-(declare-function __FILE__                       'load-relative)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar file-group)
-  (defvar frame-re)
-  (defvar line-group)
-  (defvar num-group)
-  (defvar test-pos)
-  (defvar prompt-pat)
-  (defvar realgud:zshdb-pat-hash)
-  (defvar realgud-pat-bt)
-  (defvar test-s1)
-  (defvar test-text)
-  (defvar brkpt-del)
-  (defvar bp-del-pat)
-)
-
-(set (make-local-variable 'bp-del-pat)
-      (gethash "brkpt-del" realgud:zshdb-pat-hash))
-
-(setq prompt-pat (gethash "prompt"             realgud:zshdb-pat-hash))
-(setq frame-pat  (gethash "debugger-backtrace" realgud:zshdb-pat-hash))
-
-(set (make-local-variable 'bp-del-pat)
-      (gethash "brkpt-del" realgud:zshdb-pat-hash))
-
-(set (make-local-variable 'bp-enable-pat)
-      (gethash "brkpt-enable" realgud:zshdb-pat-hash))
-
-(set (make-local-variable 'bp-disable-pat)
-      (gethash "brkpt-disable" realgud:zshdb-pat-hash))
-
-(note "zshdb prompt matching")
-(prompt-match "zshdb<10> "  "10")
-(prompt-match  "zshdb<(5)> " "5" "subshell prompt %s")
-(prompt-match  "zshdb<<1>> " "1" "nested debug prompt %s")
-
-(note "zshdb frame matching")
-
-(note "debugger-backtrace")
-(setq test-s1
-      "->0 in file `/etc/apparmor/functions' at line 24
-##1 /etc/apparmor/functions called from file `/etc/init.d/apparmor' at line 35
-##2 /etc/init.d/apparmor called from file `/usr/local/bin/zshdb' at line 129
-")
-(setq frame-re (realgud-loc-pat-regexp frame-pat))
-(setq num-group (realgud-loc-pat-num frame-pat))
-(setq file-group (realgud-loc-pat-file-group frame-pat))
-(setq line-group (realgud-loc-pat-line-group frame-pat))
-(assert-equal 0 (string-match frame-re test-s1))
-(assert-equal "0" (substring test-s1
-                            (match-beginning num-group)
-                            (match-end num-group)))
-(assert-equal "/etc/apparmor/functions"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "24"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-(setq test-pos (match-end 0))
-
-(assert-equal 49 (string-match frame-re test-s1 test-pos))
-(assert-equal "1" (substring test-s1
-                            (match-beginning num-group)
-                            (match-end num-group)))
-(assert-equal "/etc/init.d/apparmor"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "35"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-(setq test-pos (match-end 0))
-(assert-equal 128 (string-match frame-re test-s1 test-pos))
-(assert-equal "2" (substring test-s1
-                            (match-beginning num-group)
-                            (match-end num-group)))
-(assert-equal "/usr/local/bin/zshdb"
-             (substring test-s1
-                        (match-beginning file-group)
-                        (match-end file-group)))
-(assert-equal "129"
-             (substring test-s1
-                        (match-beginning line-group)
-                        (match-end line-group)))
-
-(note "breakpoint delete matching")
-(setq test-text "Deleted breakpoint 1\n")
-(assert-t (numberp (loc-match test-text bp-del-pat)) "breakpoint delete 
matching")
-
-(note "breakpoint enable matching")
-(setq test-text "Breakpoint entry 4 enabled.\n")
-(assert-t (numberp (loc-match test-text bp-enable-pat)) "breakpoint enable 
matching")
-
-
-(note "breakpoint disable matching")
-(setq test-text "Breakpoint entry 2 disabled.\n")
-(assert-t (numberp (loc-match test-text bp-disable-pat)) "breakpoint disable 
matching")
-
-(end-tests)
diff --git a/packages/realgud/test/test-regexp.el 
b/packages/realgud/test/test-regexp.el
deleted file mode 100644
index 0cdde95..0000000
--- a/packages/realgud/test/test-regexp.el
+++ /dev/null
@@ -1,79 +0,0 @@
-;; -*- lexical-binding:t -*-
-
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'load-relative)
-(require 'test-simple)
-(load-file "../realgud/common/buffer/command.el")
-(load-file "../realgud/debugger/trepan/init.el")
-(load-file "./regexp-helper.el")
-
-(declare-function cmdbuf-loc-match               'realgud-regexp)
-(declare-function make-realgud-cmdbuf-info       'realgud-regexp)
-(declare-function realgud-cmdbuf-info            'realgud-regexp)
-(declare-function realgud-cmdbuf-info-file-group 'realgud-regexp)
-(declare-function realgud-cmdbuf-info-line-group 'realgud-regexp)
-(declare-function realgud-loc-pat-file-group     'realgud-regexp)
-(declare-function realgud-loc-pat-line-group     'realgud-regexp)
-(declare-function realgud-loc-pat-regexp         'realgud-regexp)
-(declare-function __FILE__                       'load-relative)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar dbg-name)
-  (defvar realgud-pat-hash)
-  (defvar loc-pat)
-  (defvar test-dbgr)
-)
-
-; Some setup usually done in setting up the buffer.
-; We customize this for the debugger trepan. Others may follow.
-; FIXME: encapsulate this.
-(setq dbg-name "trepan")
-(setq loc-pat (gethash "loc" (gethash dbg-name realgud-pat-hash)))
-
-(setq test-dbgr (make-realgud-cmdbuf-info
-                 :debugger-name dbg-name
-                 :loc-regexp (realgud-loc-pat-regexp loc-pat)
-                 :file-group (realgud-loc-pat-file-group  loc-pat)
-                 :line-group (realgud-loc-pat-line-group  loc-pat)))
-
-
-(let ((text ".. (./dbgr.rb:73)")
-             (text2 "C> ((eval):1 via /tmp/eval2.rb:2)")
-             (text3 "-- (<internal:prelude>:28 remapped prelude.rb:28)")
-             (text4 "-- 
(/src/external-vcs/dbgrr/processor/command/info_subcmd/registers_subcmd/dfp.rb:2)\nrequire_relative
 %w(.. .. base subsubcmd)\n")
-             )
-
-  (assert-t (numberp (cmdbuf-loc-match text test-dbgr)) "basic location")
-  (assert-equal "./dbgr.rb"
-               (match-string (realgud-cmdbuf-info-file-group test-dbgr)
-                             text)   "extract file name")
-  (assert-equal "73"
-               (match-string (realgud-cmdbuf-info-line-group test-dbgr)
-                             text)   "extract line number")
-  (assert-t (numberp (cmdbuf-loc-match text4 test-dbgr)) "more complex 
location")
-
-
-  ;; Now try 'via'
-  (assert-t (numberp (cmdbuf-loc-match text2 test-dbgr)) "basic 'via' 
location")
-  (assert-equal "/tmp/eval2.rb"
-               (match-string (realgud-cmdbuf-info-file-group test-dbgr)
-                             text2)
-                 "extract via file name")
-  (assert-equal "2" (match-string (realgud-cmdbuf-info-line-group test-dbgr)
-                                 text2)
-               "extract via line number")
-
-  ;; Now try remap
-  (assert-t (numberp (cmdbuf-loc-match text3 test-dbgr)) "basic 'via' 
location")
-
-  ;;
-  (setq text "--> #0 METHOD Object#square(x) in file ./trepan.rb at line 73")
-  (assert-nil (numberp (cmdbuf-loc-match text test-dbgr)) "unmatched location")
-
-  )
-
-(end-tests)
diff --git a/packages/realgud/test/test-remake-core.el 
b/packages/realgud/test/test-remake-core.el
deleted file mode 100644
index 1f76d22..0000000
--- a/packages/realgud/test/test-remake-core.el
+++ /dev/null
@@ -1,38 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/debugger/remake/core.el")
-
-(declare-function __FILE__ 'load-relative)
-(declare-function remake-parse-cmd-args        'realgud-remake-core)
-(declare-function remake-suggest-Makefile      'realgud-remake-core)
-(declare-function remake-suggest-file-priority 'realgud-remake-core)
-
-(test-simple-start)
-
-(assert-equal (list "remake" (expand-file-name "Makefile")
-                   (list "-X" "-f" (expand-file-name "Makefile")))
-             (remake-parse-cmd-args
-              '("remake" "-X" "-f" "Makefile"))
-             "remake-parse-cmd-args")
-
-(assert-equal "Makefile" (remake-suggest-Makefile) "remake-suggest-Makefile")
-
-(assert-equal 2 (remake-suggest-file-priority "foo")
-             "remake-file-suggest-priority")
-(let ((buffer (get-file-buffer "Makefile.am")))
-  (if buffer (kill-buffer buffer))
-  (assert-equal 2 (remake-suggest-file-priority "Makefile.am"))
-  (setq buffer (find-file-noselect "Makefile.am"))
-  (assert-equal 5 (remake-suggest-file-priority "Makefile.am"))
-  (kill-buffer buffer)
-  (setq buffer (get-file-buffer "Makefile"))
-  (if buffer (kill-buffer buffer))
-  (assert-equal 6 (remake-suggest-file-priority "Makefile"))
-  (setq buffer (find-file-noselect "Makefile"))
-  (assert-equal 8 (remake-suggest-file-priority "Makefile"))
-  (kill-buffer buffer)
-  )
-
-(end-tests)
diff --git a/packages/realgud/test/test-remake.el 
b/packages/realgud/test/test-remake.el
deleted file mode 100644
index f441932..0000000
--- a/packages/realgud/test/test-remake.el
+++ /dev/null
@@ -1,37 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/common/core.el") ;; for realgud-exec-shell
-(load-file "../realgud/debugger/remake/remake.el")
-
-(eval-when-compile (defvar my-buf))
-
-(declare-function realgud:remake        'realgud:remake)
-(declare-function __FILE__              'load-relative)
-
-(test-simple-start)
-
-(defun realgud-exec-shell (debugger-name script-filename program
-                                     &optional no-reset &rest args)
-  "Mock for realgud-exec-shell. We copy the part of the real realgud-exec-shell
-file-name-directory that was failing"
-  (let ((cmdproc-buffer (get-buffer-create "foo"))
-       (starting-directory
-               (or (file-name-directory script-filename)
-                   default-directory "./")))
-    (start-process "my-process" cmdproc-buffer "sleep" "10000")
-    cmdproc-buffer
-    )
-  )
-
-(note "can deal with no Makefile name")
-;; If realgud:remake is successful we switch buffers
-(setq my-buf (current-buffer))
-;; FIXME:
-;; (realgud:remake "remake --debugger")
-;; (assert-t (not (eq (current-buffer) my-buf)))
-;; (delete-process "foo")
-;; (switch-to-buffer my-buf)
-
-(end-tests)
diff --git a/packages/realgud/test/test-send.el 
b/packages/realgud/test/test-send.el
deleted file mode 100644
index 5337a41..0000000
--- a/packages/realgud/test/test-send.el
+++ /dev/null
@@ -1,69 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-
-(load-file "../realgud/common/send.el")
-(load-file "../realgud/common/regexp.el")
-(load-file "../realgud/debugger/trepan/init.el")
-
-(declare-function realgud-get-srcbuf    'realgud-buffer-source)
-(declare-function realgud-srcbuf-init   'realgud-buffer-source)
-(declare-function realgud-cmdbuf-init   'realgud-buffer-command)
-(declare-function realgud-command       'realgud-buffer-cmds)
-(declare-function realgud-expand-format 'realgud-send)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar temp-cmdbuf nil)
-  (defvar realgud-pat-hash)
-  (defvar file-name)
-)
-
-(defun setup ()
-  (setq temp-cmdbuf (generate-new-buffer "*cmdbuf-test*"))
-  (realgud-cmdbuf-init temp-cmdbuf "trepan" (gethash "trepan" 
realgud-pat-hash))
-  (realgud-srcbuf-init (current-buffer) temp-cmdbuf)
-)
-
-(defun tear-down()
-  (kill-buffer temp-cmdbuf)
-)
-
-(dolist (str '("abc" "100%" "I feel %% today"))
-  (assert-equal str (realgud-expand-format str "format no expand characters")))
-
-
-(assert-equal "line 5" (realgud-expand-format "line %p" 5)
-             "format %l - with arg")
-(assert-equal "line " (realgud-expand-format "line %p")
-             "format %l - without arg")
-
-(assert-equal "hi, rocky!"
-             (realgud-expand-format "h%s!" "i, rocky")
-             "format %s")
-
-(assert-equal "\"\\\"fake\\\" news\"!"
-             (realgud-expand-format "%q!" "\"fake\" news"))
-
-(setup)
-;; Current buffer is now set up as a source buffer
-(setq file-name (buffer-file-name))
-(note "File formatting")
-(if (and file-name (realgud-get-srcbuf (current-buffer)))
-    (dolist
-       (pair
-        (list
-         (cons "%d" (file-name-directory file-name))
-         (cons "%x" file-name)
-         (cons "%X" (expand-file-name file-name))
-         (cons "%f" "test-send.el")
-         (cons "%F" "test-send")))
-      (assert-equal (cdr pair) (realgud-expand-format (car pair)))))
-(tear-down)
-
-
-(assert-raises error (realgud-command "testing"))
-
-(end-tests)
diff --git a/packages/realgud/test/test-shortkey.el 
b/packages/realgud/test/test-shortkey.el
deleted file mode 100644
index 5f599d9..0000000
--- a/packages/realgud/test/test-shortkey.el
+++ /dev/null
@@ -1,40 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'load-relative)
-(load-file "../realgud/common/shortkey.el")
-(load-file "../realgud/common/buffer/command.el")
-(declare-function realgud-cmdbuf-init            'realgud-buffer-command)
-(declare-function realgud-shortkey-mode-setup    'realgud-shortkey)
-(declare-function realgud-get-short-key-mode-map 'realgud-shortkey)
-
-(eval-when-compile
-  (defvar temp-cmdbuf)
-  (defvar debugger-name)
-  (defvar realgud-pat-hash)
-  (defvar test-keymap)
-  (defvar nodejs-short-key-mode-map)
-)
-
-(declare-function __FILE__           'load-relative)
-
-(test-simple-start)
-
-(note "realgud-shortkey")
-(assert-raises error (realgud-shortkey-mode-setup))
-(assert-nil (realgud-get-short-key-mode-map (current-buffer)))
-
-(note "realgud-get-short-key-mode-map")
-
-(setq temp-cmdbuf (generate-new-buffer "*cmdbuf-test*"))
-(setq debugger-name "nodejs")
-(load-file "../realgud/debugger/nodejs/nodejs.el")
-(realgud-cmdbuf-init temp-cmdbuf debugger-name
-                    (gethash debugger-name realgud-pat-hash))
-(setq test-keymap (realgud-get-short-key-mode-map temp-cmdbuf))
-(assert-t (keymapp test-keymap)
-         "realgud-get-short-key-mode-map returns keymap")
-(assert-equal test-keymap nodejs-short-key-mode-map
-         "realgud-get-short-key-mode-map returns nodejs-short-key-mode-map")
-(end-tests)
diff --git a/packages/realgud/test/test-srcbuf.el 
b/packages/realgud/test/test-srcbuf.el
deleted file mode 100644
index a910c42..0000000
--- a/packages/realgud/test/test-srcbuf.el
+++ /dev/null
@@ -1,72 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/common/buffer/source.el")
-(load-file "../realgud/common/buffer/command.el")
-(load-file "../realgud/debugger/trepan/init.el")
-(load-file "../realgud/debugger/trepan/track-mode.el")
-
-(declare-function realgud-cmdbuf-init 'realgud-buffer-command)
-(declare-function realgud-srcbuf-init 'realgud-buffer-source)
-(declare-function __FILE__            'load-relative)
-
-(declare-function realgud-srcbuf?                   'realgud-buffer-source)
-(declare-function realgud-srcbuf-loc-p              'realgud-loc)
-(declare-function realgud-srcbuf-info-debugger-name 'realgud-loc)
-(declare-function realgud-srcbuf-info-cmdproc       'realgud-track)
-(declare-function realgud-srcbuf-init-or-update     'realgud-track)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar realgud-pat-hash)
-  (defvar realgud-srcbuf-info)
-  (defvar temp-srcbuf)
-  (defvar test-filename)
-)
-
-(defvar temp-cmdbuf nil)
-(defun tear-down()
-  (kill-buffer temp-cmdbuf)
-  (kill-buffer temp-srcbuf)
-)
-
-(defun setup ()
-  (setq temp-cmdbuf (generate-new-buffer "*cmdbuf-test*"))
-  (realgud-cmdbuf-init temp-cmdbuf "trepan" (gethash "trepan" 
realgud-pat-hash))
-  (setq temp-srcbuf (find-file-noselect "./gcd.rb"))
-)
-
-(assert-nil (realgud-srcbuf? (current-buffer)) "realgud-srcbuf? before init")
-(setq realgud-srcbuf-info nil)
-(assert-nil (realgud-srcbuf? (current-buffer))
-           "realgud-srcbuf? before init - but nil")
-
-(note "realgud-srcbuf-init")
-(setup)
-(realgud-srcbuf-init temp-srcbuf temp-cmdbuf)
-
-(assert-t (realgud-srcbuf? temp-srcbuf)
-         "realgud-srcbuf? after init")
-
-(assert-equal temp-cmdbuf
-             (with-current-buffer temp-srcbuf
-               (realgud-srcbuf-info-cmdproc realgud-srcbuf-info)))
-
-(realgud-srcbuf-init-or-update temp-srcbuf temp-cmdbuf)
-(assert-equal temp-cmdbuf
-             (with-current-buffer temp-srcbuf
-               (realgud-srcbuf-info-cmdproc realgud-srcbuf-info))
-             "realgud-srcbuf-init-or-update - update")
-
-(kill-buffer temp-srcbuf)
-(setq temp-srcbuf (find-file-noselect "./gcd.rb"))
-(realgud-srcbuf-init-or-update temp-srcbuf temp-cmdbuf)
-(assert-equal temp-cmdbuf
-             (with-current-buffer temp-srcbuf
-                        (realgud-srcbuf-info-cmdproc realgud-srcbuf-info))
-             "realgud-srcbuf-init-or-update - init")
-(tear-down)
-
-(end-tests)
diff --git a/packages/realgud/test/test-track-mode.el 
b/packages/realgud/test/test-track-mode.el
deleted file mode 100644
index 7128e6d..0000000
--- a/packages/realgud/test/test-track-mode.el
+++ /dev/null
@@ -1,66 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'comint)
-(load-file "../realgud/debugger/trepan/trepan.el")
-(load-file "../realgud/common/buffer/command.el")
-(load-file "../realgud/common/track-mode.el")
-(load-file "../realgud/common/backtrace-mode.el")
-
-(declare-function realgud-cmdbuf-init 'realgud-buffer-command)
-(declare-function realgud-srcbuf-init 'realgud-buffer-source)
-(declare-function __FILE__            'load-relative)
-
-(test-simple-start)
-
-(defvar realgud-pat-hash)
-(defvar temp-cmdbuf nil)
-
-(declare-function trepan-track-mode 'realgud:trepan)
-(declare-function realgud-track-mode-vars 'realgud-track-mode)
-(declare-function realgud-backtrace-mode 'realgud-backtrace-mode)
-
-(defun setup ()
-  (setq temp-cmdbuf (generate-new-buffer "*cmdbuf-test*"))
-  ;; (start-process "test-track-mode" temp-cmdbuf nil)
-  (start-process "test-track-mode" temp-cmdbuf "/bin/sh")
-
-  (realgud-cmdbuf-init temp-cmdbuf "trepan" (gethash "trepan" 
realgud-pat-hash))
-  (with-current-buffer temp-cmdbuf
-    (comint-mode)
-    (trepan-track-mode 't))
-  (realgud-srcbuf-init (current-buffer) temp-cmdbuf)
-)
-
-(defun tear-down()
-  (kill-buffer temp-cmdbuf)
-)
-
-(setup)
-
-;; Current buffer is now set up as a source buffer
-
-(with-current-buffer temp-cmdbuf
-  (switch-to-buffer temp-cmdbuf)
-  (dolist (fn '(realgud-track-hist-newest
-               realgud-track-hist-newer
-               realgud-track-hist-older
-               realgud-track-hist-oldest))
-    (assert-nil (null (where-is-internal fn))
-               (format "track-functions-mapped-to-keys %s" fn))
-    )
-  (switch-to-buffer nil)
-  )
-
-(note "track-mode-vars")
-(makunbound 'foo-track-mode)
-(makunbound 'foo-track-mode-map)
-(realgud-track-mode-vars "foo")
-(dolist (var '("foo-track-mode-map" "foo-track-mode"))
-  (let ((var-sym (intern var)))
-    (assert-t (boundp var-sym))
-    (assert-t (stringp (get var-sym 'variable-documentation)))
-    ))
-
-(end-tests)
diff --git a/packages/realgud/test/test-track.el 
b/packages/realgud/test/test-track.el
deleted file mode 100644
index b8882ca..0000000
--- a/packages/realgud/test/test-track.el
+++ /dev/null
@@ -1,196 +0,0 @@
-;; -*- lexical-binding:t -*-
-
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/common/track.el")
-(load-file "../realgud/common/core.el")
-(load-file "../realgud/common/loc.el")
-(load-file "../realgud/common/utils.el")
-(load-file "../realgud/debugger/trepan/core.el")
-(load-file "../realgud/debugger/trepan/init.el")
-(load-file "../realgud/debugger/pdb/core.el")
-(load-file "../realgud/debugger/pdb/init.el")
-(load-file "../realgud/debugger/pdb/track-mode.el")
-
-(declare-function __FILE__                                      'load-relative)
-(declare-function realgud-cmdbuf-init                           
'realgud-buffer-command)
-(declare-function realgud-loc-filename                          'realgud-loc)
-(declare-function realgud-loc-p                                 'realgud-loc)
-(declare-function realgud-loc-line-number                       'realgud-loc)
-(declare-function realgud:track-from-region                     'realgud-track)
-(declare-function realgud-track-loc                             'realgud-track)
-(declare-function realgud-track-loc-remaining                   'realgud-track)
-(declare-function realgud-track-selected-frame                  'realgud-track)
-(declare-function realgud-track-termination?                    'realgud-track)
-(declare-function realgud:get-eval-output                       'realgud-track)
-(declare-function realgud:get-output-command                    'realgud-track)
-(declare-function realgud:eval-command-p                        'realgud-track)
-(declare-function realgud-set-command-name-hash-to-buffer-local 'realgud-track)
-(declare-function realgud:truncate-eval-message                 'realgud-track)
-(declare-function realgud:track-add-breakpoint                  'realgud-track)
-(declare-function realgud-track-bp-loc                          'realgud-track)
-(declare-function realgud:track-remove-breakpoints              'realgud-track)
-
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar bp-loc)
-  (defvar bp-num)
-  (defvar debugger-bp-output)
-  (defvar debugger-output)
-  (defvar line-number)
-  (defvar realgud-command-name-hash)
-  (defvar realgud-pat-hash)
-  (defvar test-buffer)
-  (defvar test-command-hash)
-  (defvar test-command-name-hash)
-  (defvar test-filename)
-)
-
-;; Some setup usually done in setting up the buffer.
-;; We customize this for the debugger trepan. Others may follow.
-;; FIXME: encapsulate this.
-(makunbound 'realgud-cmdbuf-info)
-
-;; FIXME/WARNING the below is customized for trepan
-(realgud-cmdbuf-init (current-buffer) "trepan"
-                 (gethash "trepan" realgud-pat-hash))
-
-(setq test-filename (symbol-file 'test-simple))
-(setq line-number 7)
-(setq debugger-output (format "-> (%s:%d)\nrequire 'foo'\n(trepan):\n"
-                             test-filename line-number))
-(let ((loc (realgud-track-loc debugger-output nil)))
-  (assert-t (realgud-loc-p loc)   "loc extracted")
-  (assert-equal "(trepan):\n"
-               (realgud-track-loc-remaining debugger-output)
-               "loc-remaining")
-  (assert-equal test-filename (realgud-loc-filename loc)
-               "loc filename extracted")
-  (assert-equal line-number (realgud-loc-line-number loc)
-               "loc line-number extracted")
-  )
-
-(note "realgud-track-selected-frame")
-(setq debugger-output "up
---> #1 TOP Object#<top /usr/local/bin/irb> in file /usr/local/bin/irb at line 9
-   (/usr/local/bin/irb:9 @11)
-require irb'
-")
-(assert-equal 1 (realgud-track-selected-frame debugger-output))
-
-(setq debugger-output "
---> #0 TOP Object#<top /usr/local/bin/irb> in file /usr/local/bin/irb at line 9
-   (/usr/local/bin/irb:9 @11)
-require irb'
-")
-(assert-equal 0 (realgud-track-selected-frame debugger-output))
-
-(setq debugger-output "
-<- (<internal:lib/rubygems/custom_require>:38 remapped 
/usr/local/lib/ruby/gems/1.9.1/gems/trepanning-0.1.3.dev/data/custom_require.rb:38
 @16)
-R=> false
-end
-")
-(assert-nil (realgud-track-selected-frame debugger-output))
-
-
-(note "realgud-track-termination?")
-(setq debugger-output "-- (/usr/local/bin/irb:9 @2)
-require 'irb'
-")
-(assert-nil (realgud-track-termination? debugger-output))
-(setq debugger-output "Really quit? (N/y) y
-trepan: That's all, folks...
-")
-(assert-t (realgud-track-termination? debugger-output))
-
-
-(note "realgud:get-eval-output")
-(assert-equal "'cow'" (realgud:get-eval-output "eval 'cow'\n'cow'\n(pdb)"))
-(assert-equal "" (realgud:get-eval-output "weird output"))
-
-(note "realgud:get-output-command")
-(assert-equal "eval bang" (realgud:get-output-command "eval bang\noutput"))
-(assert-equal "" (realgud:get-output-command ""))
-
-(note "realgud:eval-command-p")
-(setq test-command-name-hash (make-hash-table :test 'equal))
-(set (make-local-variable 'realgud-command-name-hash) test-command-name-hash)
-
-;; We haven't set "eval" in command-name-hash so this should fail
-(assert-nil (realgud:eval-command-p "eval 'cow'\n'cow'\n(pdb)"))
-
-(puthash "eval" "eval" test-command-name-hash)
-(assert-t (realgud:eval-command-p "eval 'cow'\n'cow'\n(pdb)"))
-(assert-nil (realgud:eval-command-p "next 1"))
-
-(note "realgud-set-command-name-hash-to-buffer-local")
-(setq test-command-hash (make-hash-table :test 'equal))
-(puthash "eval" "!%s" test-command-hash)
-(realgud-set-command-name-hash-to-buffer-local test-command-hash)
-(assert-equal "!" (gethash "eval" (buffer-local-value 
'realgud-command-name-hash (current-buffer))))
-
-(note "realgud:truncate-eval-message")
-(let ((realgud-eval-message-print-length 500))
-  (assert-equal (realgud:truncate-eval-message (make-string 501 ?x)) 
(make-string 500 ?x)))
-(let ((realgud-eval-message-print-length 500))
-  (assert-equal (realgud:truncate-eval-message "cat") "cat"))
-
-
-(note "realgud:track-remove-breakpoints")
-(with-temp-file "test_file.py"
-  (insert "if 1:\n    x = x + 1\n"))
-
-(setq test-buffer (find-file "test_file.py"))
-(realgud-cmdbuf-init test-buffer "pdb"
-                 (gethash "pdb" realgud-pat-hash))
-
-(setq bp-num 1)
-(setq debugger-bp-output (format "Breakpoint %d at %s:%d\n"
-                                 bp-num buffer-file-name 1))
-
-(setq debugger-bp-delete-output (format "Deleted breakpoint %d at %s:%d\n"
-                                        bp-num buffer-file-name 1))
-(save-excursion
-  (let ((num-overlays (length (overlays-in 0 (point-max)))))
-    (realgud:track-add-breakpoint debugger-bp-output nil test-buffer)
-    (assert-equal (+ 1 num-overlays) (length (overlays-in 0 (point-max))))
-    (realgud:track-remove-breakpoints debugger-bp-delete-output nil 
test-buffer)
-    (assert-equal num-overlays (length (overlays-in 0 (point-max))))))
-(kill-buffer "test_file.py")
-(delete-file "test_file.py")
-
-;; (setq debugger-bp-output (format "Breakpoint %d set at line %d\n\tin file 
%s.\n"
-;;                               bp-num line-number test-filename))
-;; (setq bp-loc (realgud-track-bp-loc debugger-bp-output nil))
-;; (setq bp-num 2)
-
-;; (specify "bp-loc extracted"
-;;       (message "output: %s" debugger-bp-output)
-;;       (message "bp-loc: %s" bp-loc)
-;;       (message "bp-num: %d" bp-num)
-;;       (assert-t (realgud-loc-p bp-loc))
-;;       (assert-equal bp-num (realgud-loc-num bp-loc)))
-
-;; (specify "realgud-track-divert-prompt"
-;;       (realgud-cmdbuf-info-divert-output?= 't)
-;;       (setq realgud-track-divert-string "")
-;;       (setq text
-;;             "--> #0 TOP Object#<top /usr/local/bin/irb> in file 
/usr/local/bin/irb at line 9\n(trepan): ")
-;;       (setq realgud-last-output-start (point-max))
-;;       (realgud-track-divert-prompt text (current-buffer) (point-max))
-;;       (assert-equal "--> #0 TOP Object#<top /usr/local/bin/irb> in file 
/usr/local/bin/irb at line 9\n"
-;;                     realgud-track-divert-string)
-;;       (assert-equal nil (realgud-sget 'cmdbuf-info 'divert-output?))
-;;       )
-
-(makunbound 'realgud-cmdbuf-info)
-(assert-raises error
-              (realgud:track-from-region (point-min)
-                                      (point-max))
-              "invalid cmdbuf")
-
-(end-tests)
diff --git a/packages/realgud/test/test-trepan2.el 
b/packages/realgud/test/test-trepan2.el
deleted file mode 100644
index 6197357..0000000
--- a/packages/realgud/test/test-trepan2.el
+++ /dev/null
@@ -1,45 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/debugger/trepan2/trepan2.el")
-(load-file "../realgud/debugger/trepan2/core.el")
-(load-file "../realgud.el")
-
-(declare-function trepan2-parse-cmd-args    'realgud:trepan2)
-(declare-function realgud:trepan2-find-file 'realgud:trepan2-core)
-(declare-function __FILE__                  'load-relative)
-
-
-(test-simple-start)
-
-(note "trepan2-parse-cmd-args")
-
-(assert-equal '(nil ("trepan2") ("foo") nil)
-             (trepan2-parse-cmd-args '("trepan2" "foo")))
-(assert-equal '(nil ("trepan2" "-n") ("foo") nil)
-             (trepan2-parse-cmd-args '("trepan2" "-n" "foo")))
-(assert-equal '(("/usr/bin/python") ("trepan2" "--different")
-               ("foo") nil)
-             (trepan2-parse-cmd-args
-              '("/usr/bin/python" "trepan2"
-                "--different" "foo")))
-(assert-equal '(nil ("program.py") ("foo") nil)
-             (trepan2-parse-cmd-args '("program.py" "foo")))
-(assert-equal '(nil ("trepan2") ("program.py" "foo") nil)
-             (trepan2-parse-cmd-args
-              '("trepan2" "program.py" "foo")))
-
-(note "realgud:trepan2-find-file")
-(assert-nil (realgud:trepan2-find-file "<string>")
-           "Should ignore psuedo file")
-
-(eval-when-compile
-  (defvar test-python-file))
-
-(set (make-local-variable 'test-python-file)
-     (concat (file-name-directory (__FILE__)) "gcd.py"))
-(assert-equal test-python-file (realgud:trepan2-find-file test-python-file)
-           "Should ignore psuedo file")
-
-(end-tests)
diff --git a/packages/realgud/test/test-trepan3k.el 
b/packages/realgud/test/test-trepan3k.el
deleted file mode 100644
index 758ad86..0000000
--- a/packages/realgud/test/test-trepan3k.el
+++ /dev/null
@@ -1,37 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/debugger/trepan3k/trepan3k.el")
-(declare-function trepan3k-parse-cmd-args 'realgud:trepan3k)
-(declare-function __FILE__                'require-relative)
-
-(test-simple-start)
-
-(note "trepan3k-parse-cmd-args")
-
-(assert-equal '(nil ("trepan3k") ("foo") nil)
-             (trepan3k-parse-cmd-args '("trepan3k" "foo")))
-(assert-equal '(nil ("trepan3k" "-n") ("foo") nil)
-             (trepan3k-parse-cmd-args '("trepan3k" "-n" "foo")))
-(assert-equal '(nil ("trepan3k" "--annotate=1") ("foo") t)
-             (trepan3k-parse-cmd-args
-              '("trepan3k" "--annotate=1" "foo")))
-(assert-equal '(nil ("mytrepan3k" "--annotate=1") ("foo") t)
-             (trepan3k-parse-cmd-args
-              '("mytrepan3k" "--annotate=1" "foo")))
-(assert-equal '(("python") ("trepan3k" "--annotate") ("1" "foo") t)
-             (trepan3k-parse-cmd-args
-              '("python" "trepan3k" "--annotate" "1" "foo")))
-(assert-equal '(("/usr/bin/python") ("trepan3k" "--different")
-               ("foo") nil)
-             (trepan3k-parse-cmd-args
-              '("/usr/bin/python" "trepan3k"
-                "--different" "foo")))
-(assert-equal '(nil ("program.py") ("foo") nil)
-             (trepan3k-parse-cmd-args '("program.py" "foo")))
-(assert-equal '(nil ("trepan3k") ("program.py" "foo") nil)
-             (trepan3k-parse-cmd-args
-              '("trepan3k" "program.py" "foo")))
-
-(end-tests)
diff --git a/packages/realgud/test/test-trepanpl.el 
b/packages/realgud/test/test-trepanpl.el
deleted file mode 100644
index 6b5c807..0000000
--- a/packages/realgud/test/test-trepanpl.el
+++ /dev/null
@@ -1,50 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/common/buffer/command.el")
-(load-file "../realgud/debugger/trepan.pl/trepanpl.el")
-
-(eval-when-compile (defvar test:run-process-save))
-
-(declare-function realgud:trepanpl-parse-cmd-args 'realgud:trepanpl)
-(declare-function realgud:trepan.pl               'realgud:trepanpl)
-(declare-function __FILE__                        'require-relative)
-
-(test-simple-start)
-
-;; Save value realgud:run-process and change it to something we want
-(setq test:run-process-save (symbol-function 'realgud:run-process))
-(defun realgud:run-process(debugger-name script-filename cmd-args
-                                     minibuf-history
-                                     &optional no-reset)
-  "Fake realgud:run-process used in testing"
-  (note
-   (format "%s %s %s" debugger-name script-filename cmd-args))
-  (assert-equal "trepan.pl" debugger-name "debugger name gets passed")
-  (let ((expanded-name (expand-file-name "./gcd.pl")))
-    (assert-equal  expanded-name script-filename "file name check")
-    (assert-equal (list "-I" (expand-file-name ".") expanded-name "3" "5")
-                 (cdr cmd-args) "command args listified")
-    )
-  nil ;; Make sure trepanpl doesn't try to do anything with cmdbuf
-  )
-
-(note "realgud:trepanpl-parse-cmd-args")
-(assert-equal (list nil '("trepan.pl") '("foo"))
-             (realgud:trepanpl-parse-cmd-args '("trepan.pl" "foo")))
-(assert-equal (list '("perl5.8") '("trepan.pl") '("foo"))
-             (realgud:trepanpl-parse-cmd-args '("perl5.8" "trepan.pl" "foo")))
-(assert-equal (list nil '("trepan.pl") '("program.pl" "foo"))
-             (realgud:trepanpl-parse-cmd-args
-              '("trepan.pl" "program.pl" "foo")))
-(assert-equal (list nil '("trepan.pl") (list (expand-file-name "gcd.pl") 
"foo"))
-             (realgud:trepanpl-parse-cmd-args
-              '("trepan.pl" "gcd.pl" "foo")))
-
-(realgud:trepan.pl "trepanpl -I . ./gcd.pl 3 5")
-
-;; Restore the old value of realgud:run-process
-(fset 'realgud:run-process test:run-process-save)
-
-(end-tests)
diff --git a/packages/realgud/test/test-utils.el 
b/packages/realgud/test/test-utils.el
deleted file mode 100644
index 3fc0f42..0000000
--- a/packages/realgud/test/test-utils.el
+++ /dev/null
@@ -1,53 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(require 'comint)
-(require 'eshell)
-(require 'shell)
-
-(load-file "../realgud/common/utils.el")
-
-(declare-function realgud:flatten            'realgud-utils)
-(declare-function realgud:strip              'realgud-regexp)
-(declare-function __FILE__                   'load-relative)
-(declare-function realgud:canonic-major-mode 'realgud-utils)
-(declare-function realgud:join-string        'realgud-utils)
-
-(test-simple-start)
-
-(eval-when-compile
-  (defvar test-realgud:features)
-)
-
-(note "realgud:strip")
-(assert-equal "abc" (realgud:strip "abc"))
-(assert-equal "def" (realgud:strip "\n  def\t  "))
-
-(note "realgud:join-string")
-(assert-equal "a b c" (realgud:join-string '("a" "b" "c") " "))
-
-(note "realgud:flatten")
-(assert-equal '(abc) (realgud:flatten '(abc)))
-(assert-equal '(abc def h i j) (realgud:flatten '(abc (def (h) i) j)))
-
-(note "realgud:canonic-major-mode")
-
-(assert-raises error (realgud:canonic-major-mode)
-              "Not in eshell, comint or shell-mode")
-
-(with-temp-buffer
-  (comint-mode)
-  (assert-equal 'comint (realgud:canonic-major-mode)))
-
-(with-temp-buffer
-  (eshell-mode)
-  (assert-equal 'eshell (realgud:canonic-major-mode)))
-
-;; (with-temp-buffer
-;;   (start-process "bogus" (current-buffer) "sleep" "1")
-;;   (shell-mode)
-;;   (assert-equal 'comint (realgud:canonic-major-mode))
-;;   )
-
-(end-tests)
diff --git a/packages/realgud/test/test-zshdb.el 
b/packages/realgud/test/test-zshdb.el
deleted file mode 100644
index a908777..0000000
--- a/packages/realgud/test/test-zshdb.el
+++ /dev/null
@@ -1,60 +0,0 @@
-;; Press C-x C-e at the end of the next line to run this file test 
non-interactively
-;; (test-simple-run "emacs -batch -L %s -l %s" (file-name-directory 
(locate-library "test-simple.elc")) buffer-file-name)
-
-(require 'test-simple)
-(load-file "../realgud/debugger/zshdb/zshdb.el")
-(load-file "../realgud/common/core.el")
-
-(declare-function realgud:expand-file-name-if-exists 'realgud-core)
-
-(eval-when-compile
-  (defvar test:run-process-save)
-  (defvar realgud:zshdb-minibuffer-history)
-  )
-
-(declare-function zshdb-parse-cmd-args 'realgud:zshdb)
-(declare-function zshdb-suggest-invocation 'realgud:zshdb)
-(declare-function realgud:zshdb        'realgud:zshdb)
-(declare-function __FILE__             'require-relative)
-
-(test-simple-start)
-(make-local-variable 'realgud:zshdb-minibuffer-history)
-(setq realgud:zshdb-minibuffer-history nil)
-
-;; Save value realgud:run-process and change it to something we want
-(setq test:run-process-save (symbol-function 'realgud:run-process))
-(defun realgud:run-process(debugger-name script-filename cmd-args
-                                     minibuf-history
-                                     &optional no-reset)
-  "Fake realgud:run-process used in testing"
-  (note
-   (format "%s %s %s" debugger-name script-filename cmd-args))
-  (assert-equal "zshdb" debugger-name "debugger name gets passed")
-  (let ((expanded-name
-        (realgud:expand-file-name-if-exists "./gcd.sh")))
-    (assert-equal  expanded-name script-filename "file name check")
-    (assert-equal (list expanded-name "3" "5")
-                 (cdr cmd-args) "command args listified")
-    )
-  (current-buffer)
-  )
-
-(note "zshdb-parse-cmd-args")
-(assert-equal (list nil '("zshdb")
-                   (list (realgud:expand-file-name-if-exists "foo")) nil)
-             (zshdb-parse-cmd-args '("zshdb" "foo")))
-(assert-equal (list nil '("zshdb")
-                   (list (realgud:expand-file-name-if-exists "program.sh")
-                         "foo") nil)
-             (zshdb-parse-cmd-args
-              '("zshdb" "program.sh" "foo")))
-
-(with-current-buffer (find-file "gcd.sh")
-  (shell-script-mode)
-  (assert-matches "zshdb .*gcd.sh$" (zshdb-suggest-invocation "zshdb")))
-
-(realgud:zshdb "zshdb ./gcd.sh 3 5")
-;; Restore the old value of realgud:run-process
-(fset 'realgud:run-process test:run-process-save)
-
-(end-tests)
diff --git a/packages/shelisp/shelisp.el b/packages/shelisp/shelisp.el
new file mode 100644
index 0000000..d470e5c
--- /dev/null
+++ b/packages/shelisp/shelisp.el
@@ -0,0 +1,218 @@
+;;; shelisp.el --- execute elisp in shell          -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2018-2019  Free Software Foundation, Inc.
+
+;; Author: Michael R. Mauger <address@hidden>
+;; Version: 0.9.1
+;; Package-Type: simple
+;; Keywords: terminals, lisp, processes
+
+;; 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:
+
+;; Comint process (likely shell-mode) can write out Emacs Lisp
+;; expressions and have them executed.
+
+;; When the shell process writes out a string of the form:
+;;   \e_#EMACS# elisp-expr \a
+;;
+;; Where, "elisp-expr" is a valid elisp expression.  The elisp
+;; expression is executed as if you had invoked the function
+;; within Emacs itself.  The elisp expression may include a call to
+;; the function `f' which will expand the filename parameter into an
+;; appropriate filename for Emacs using the appropriate Tramp prefix
+;; if necessary.
+
+;; This script also defines an Alist variable that creates shell
+;; commands and the `printf'-style format to generate the full elisp
+;; expression with command parameters substituted into the command.  A
+;; function is placed in the `shell-mode-hook' to actually create the
+;; shell functions and aliases to format the elisp expressions and
+;; embed them in an escape sequence so that they are detected and
+;; executed.
+
+;; In most usage this mode merely allows you to type "e filename"
+;; rather than "C-x C-f filename" which isn't much of a savings.
+;; However, with this mode enabled, you can write shell scripts to
+;; invoke Emacs Lisp functions.  But beware, the shell script will not
+;; wait for completion of the elisp expression, nor return anything
+;; back (see ToDo's below).
+
+;; INSTALLATION
+
+;; After installing this package from ELPA, you must add the following
+;; to your Emacs initialization script:
+
+;;   (add-hook 'shell-mode-hook #'shelisp-mode)
+
+;; TO DOs:
+
+;; * Provide a security feature that prompts the Emacs user to approve
+;; * the execution of any elisp expressions submitted thru the shelisp
+;; * escape sequence.
+
+;; * Support `term-mode' like `shell-mode'
+
+;; * Provide support for creation of shell commands for command shells
+;;   other than bash -- csh, tcsh, zsh, ksh, ash, dash, fish, mosh, sh.
+;;
+;;   Support for non-Linux shells is left as an exercise for a
+;;   masochistic hacker.
+
+;; * Implement a wait for completion facility similar to `emacsclient'
+;;   or the work done in `with-editor' with the "sleeping editor."
+;;   That is, pause the shell activity with a long sleep, until C-c
+;;   C-c or C-c C-k is typed in Emacs and the caller is awoken with a
+;;   signal.
+
+;; KNOWN BUGS
+
+;; The simplistic implementation of the shell functions will not
+;; properly handle filenames containing double quote characters (\")
+;; nor backslashes (\\).  While this is an error, it does not
+;; represent a significant limitation in the implementation.  The
+;; caller can properly add backslashes to the filename string before
+;; passing it to printf to generate the elisp expression.  In the end,
+;; the purpose is to create a valid elisp expression string.
+
+;;; Code:
+(require 'cl-lib)
+(require 'pp)
+
+;;;###autoload
+(define-minor-mode shelisp-mode
+  "Enable elisp expressions embedded in ANSI APC (Application
+Program Control) escape sequences to be located and executed
+while in a shell mode buffer."
+  nil " ShElisp" nil
+
+  (if (not shelisp-mode)
+      (remove-hook 'comint-preoutput-filter-functions
+                  #'shelisp-exec-lisp)
+    ;; Parse elisp escape sequences
+    (add-hook 'comint-preoutput-filter-functions
+             #'shelisp-exec-lisp 'append)
+    (shelisp-add-commands)))
+
+;;;###autoload
+(defvar shelisp-debug nil
+  "When non-nil, display messages showing the elisp expression.")
+
+(defun shelisp--file-name (file)
+  "Apply remote host in `default-directory' to FILE."
+  (if (and (file-name-absolute-p file)
+          (not (file-remote-p file)))
+      (concat (file-remote-p default-directory) file)
+    file))
+
+(defun shelisp--result-as-string (result)
+  "Return RESULT as a string.
+If it already is a string, then just return it.  Otherwise,
+convert it to a string."
+  (cond ((null result)    "")
+        ((stringp result) result)
+        (:else            (pp-to-string result))))
+
+(defun shelisp-exec-lisp (&optional str)
+  "Detect escape sequence in STR to execute Emacs Lisp."
+  (interactive)
+
+  (when (and shelisp-mode str)
+    (let* ((APC "\\(?:\e_\\|\x9f\\)")
+          (tag "#EMACS#")
+          (ST  "\\(?:[\a\x9c]\\|[\e][\\\\]\\)")
+          (cmd-re "\\(?:[^\a\x9c\e]\\|\e[^\\\\]\\)")
+          (apc-re (concat APC tag "\\(" cmd-re "*\\)" ST))
+          (case-fold-search nil)
+          cmd rep)
+
+      ;; Look for APC escape sequences
+      (while (string-match apc-re str)
+        (setq cmd (match-string 1 str)
+              rep "")
+        ;; Trace, if requested
+        (when shelisp-debug
+          (message "shelisp> `%s'" cmd))
+
+        ;; Replace the elisp expresssion with it's value
+        ;;   if the value is nil, treat it as an empty string
+        (setq rep (save-match-data
+                    (save-excursion
+                      (condition-case err
+                          (shelisp--result-as-string
+                           (eval `(cl-flet ((f (file) (shelisp--file-name 
file)))
+                                   ,(read cmd))
+                                 t))
+                        ;; When an error occurs, replace with the error message
+                       (error
+                        (format "shelisp: `%s': %S" cmd err)))))
+              str (replace-match
+                   (concat rep (unless (string-equal "" rep) "\n"))
+                   t t str)))))
+  str)
+
+
+;;;###autoload
+(defvar shelisp-commands (let ((cmds '(("e" .     "(find-file-other-window (f 
\"%s\"))")
+                                       ("v" .     "(view-file-other-window (f 
\"%s\"))")
+                                       ("dired" . "(dired \"%s\")")
+                                       ("ediff" . "(ediff (f \"%s\") (f 
\"%s\"))"))))
+                           (when (locate-library "magit")
+                             (push '("magit" . "(magit-status)") cmds))
+                           (when (or (bound-and-true-p viper-mode)
+                                     (bound-and-true-p evil-mode))
+                             (push '("vim" . "(find-file-other-window (f 
\"%s\"))") cmds)
+                             (push '("vi" . "(find-file-other-window (f 
\"%s\"))") cmds))
+                           cmds)
+
+  "Alist of shell commands and corresponding Lisp expressions.
+Each entry in the alist consists of the shell alias to be set as the
+command, and the `printf' style string to generate the elisp
+expression to be executed.
+
+If a parameter to the elisp expression is a filename, then we
+need to be sure that proper filename parsing in context occurs.
+We do this by passing filename parameters through the elisp
+function `f'[1].  This function makes sure that filename has
+proper Tramp prefixes if the shell session is remote.  So, rather
+than just embedding the filename in the elisp expression, using
+printf, with \"\\\"%s\\\"\", you use \\=`(f \\\"%s\\\")\\='.
+
+[1] The `f' function is `cl-flet' bound for the shelisp
+expression and cannot be used elsewhere.")
+
+(defun shelisp-add-commands ()
+  "Add Emacs Lisp to shell aliases (assumes GNU bash syntax)."
+
+  (when (and shelisp-mode shelisp-commands)
+    (let ((proc (get-buffer-process (current-buffer))))
+      (dolist (c shelisp-commands)
+        (let ((cmd (car c))
+              (expr (cdr c)))
+          (process-send-string
+           proc
+           (apply #'format
+                  (mapconcat #'identity
+                             '("unset -f shelisp_%s"
+                               "function shelisp_%s { printf '\\e_#EMACS# %s 
\\a' \"$@\"; }"
+                               "alias %s=shelisp_%s" "")
+                             " ; ")
+                (list cmd cmd
+                     (replace-regexp-in-string "\"" "\\\\\"" expr)
+                     cmd cmd)))))
+      (process-send-string proc "\n"))))
+
+(provide 'shelisp)
+;;; shelisp.el ends here
diff --git a/packages/stream/stream.el b/packages/stream/stream.el
index 3f6bc4b..9f73e8b 100644
--- a/packages/stream/stream.el
+++ b/packages/stream/stream.el
@@ -1,6 +1,6 @@
 ;;; stream.el --- Implementation of streams  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2016 Free Software Foundation, Inc.
+;; Copyright (C) 2016-2019 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Petton <address@hidden>
 ;; Keywords: stream, laziness, sequences
@@ -41,7 +41,7 @@
 ;; - ...
 ;;
 ;; All functions are prefixed with "stream-".
-;; All functions are tested in test/automated/stream-tests.el
+;; All functions are tested in tests/stream-tests.el
 ;;
 ;; Here is an example implementation of the Fibonacci numbers
 ;; implemented as in infinite stream:
@@ -65,18 +65,30 @@
 
 (eval-when-compile (require 'cl-lib))
 (require 'seq)
-(require 'thunk)
 
 (eval-and-compile
-  (defconst stream--identifier '--stream--
-    "Symbol internally used to identify streams."))
+  (defconst stream--fresh-identifier '--stream-fresh--
+    "Symbol internally used to streams whose head was not evaluated.")
+  (defconst stream--evald-identifier '--stream-evald--
+    "Symbol internally used to streams whose head was evaluated."))
 
 (defmacro stream-make (&rest body)
   "Return a stream built from BODY.
 BODY must return nil or a cons cell whose cdr is itself a
 stream."
   (declare (debug t))
-  `(list ',stream--identifier (thunk-delay ,@body)))
+  `(cons ',stream--fresh-identifier (lambda () ,@body)))
+
+(defun stream--force (stream)
+  "Evaluate and return the first cons cell of STREAM.
+That value is the one passed to `stream-make'."
+  (cond
+   ((eq (car-safe stream) stream--evald-identifier)
+    (cdr stream))
+   ((eq (car-safe stream) stream--fresh-identifier)
+    (setf (car stream) stream--evald-identifier)
+    (setf (cdr stream) (funcall (cdr stream))))
+   (t (signal 'wrong-type-argument (list 'streamp stream)))))
 
 (defmacro stream-cons (first rest)
   "Return a stream built from the cons of FIRST and REST.
@@ -159,24 +171,29 @@ range is infinite."
 
 (defun streamp (stream)
   "Return non-nil if STREAM is a stream, nil otherwise."
-  (eq (car-safe stream) stream--identifier))
+  (let ((car (car-safe stream)))
+    (or (eq car stream--fresh-identifier)
+        (eq car stream--evald-identifier))))
+
+(defconst stream-empty (cons stream--evald-identifier nil)
+  "The empty stream.")
 
 (defun stream-empty ()
-  "Return a new empty stream."
-  (list stream--identifier (thunk-delay nil)))
+  "Return the empty stream."
+  stream-empty)
 
 (defun stream-empty-p (stream)
   "Return non-nil if STREAM is empty, nil otherwise."
-  (null (thunk-force (cadr stream))))
+  (null (cdr (stream--force stream))))
 
 (defun stream-first (stream)
   "Return the first element of STREAM.
 Return nil if STREAM is empty."
-  (car (thunk-force (cadr stream))))
+  (car (stream--force stream)))
 
 (defun stream-rest (stream)
   "Return a stream of all but the first element of STREAM."
-  (or (cdr (thunk-force (cadr stream)))
+  (or (cdr (stream--force stream))
       (stream-empty)))
 
 (defun stream-append (&rest streams)
diff --git a/packages/stream/tests/stream-tests.el 
b/packages/stream/tests/stream-tests.el
index 021ed65..7487ef6 100644
--- a/packages/stream/tests/stream-tests.el
+++ b/packages/stream/tests/stream-tests.el
@@ -1,6 +1,6 @@
 ;;; stream-tests.el --- Unit tests for stream.el  -*- lexical-binding: t -*-
 
-;; Copyright (C) 2015, 2017 Free Software Foundation, Inc.
+;; Copyright (C) 2015, 2017-2019 Free Software Foundation, Inc.
 
 ;; Author: Nicolas Petton <address@hidden>
 
@@ -29,14 +29,6 @@
 (require 'generator)
 (require 'cl-lib)
 
-(defun stream-to-list (stream)
-  "Eagerly traverse STREAM and return a list of its elements."
-  (let (result)
-    (seq-do (lambda (elt)
-                 (push elt result))
-               stream)
-    (reverse result)))
-
 (ert-deftest stream-empty-test ()
   (should (streamp (stream-empty)))
   (should (stream-empty-p (stream-empty))))
@@ -240,7 +232,7 @@
 
 (ert-deftest stream-list-test ()
   (dolist (list '(nil '(1 2 3) '(a . b)))
-    (should (equal list (stream-to-list (stream list))))))
+    (should (equal list (seq-into (stream list) 'list)))))
 
 (ert-deftest stream-seq-subseq-test ()
   (should (stream-empty-p (seq-subseq (stream-range 2 10) 0 0)))
diff --git a/packages/svg/svg.el b/packages/svg/svg.el
deleted file mode 100644
index 0d6a5c0..0000000
--- a/packages/svg/svg.el
+++ /dev/null
@@ -1,248 +0,0 @@
-;;; svg.el --- svg image creation functions
-
-;; Copyright (C) 2014 Free Software Foundation, Inc.
-
-;; Maintainer: Lars Magne Ingebrigtsen <address@hidden>
-;; Keywords: image
-;; Version: 0.2
-;; Package-Requires: ((emacs "25"))
-
-;; This program is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
-
-;;; Commentary:
-
-;; This pacakge allows creating SVG images in Emacs.  SVG images are
-;; vector-based XML files, really, so you could create them directly
-;; as XML.  However, that's really tedious, as there are some fiddly
-;; bits.
-
-;; In addition, the `svg-insert-image' function allows inserting an
-;; SVG image into a buffer that's updated "on the fly" as you
-;; add/alter elements to the image, which is useful when composing the
-;; images.
-
-;; Here are some usage examples:
-
-;; Create the base image structure, add a gradient spec, and insert it
-;; into the buffer:
-;; (setq svg (svg-create 800 800 :stroke "orange" :stroke-width 5))
-;; (svg-gradient svg "gradient" 'linear '(0 . "red") '(100 . "blue"))
-;; (save-excursion (goto-char (point-max)) (svg-insert-image svg))
-
-;; Then add various elements to the structure:
-;; (svg-rectangle svg 100 100 500 500 :gradient "gradient" :id "rec1")
-;; (svg-circle svg 500 500 100 :id "circle1")
-;; (svg-ellipse svg 100 100 50 90 :stroke "red" :id "ellipse1")
-;; (svg-line svg 100 190 50 100 :id "line1" :stroke "yellow")
-;; (svg-polyline svg '((200 . 100) (500 . 450) (80 . 100))
-;;           :stroke "green" :id "poly1")
-;; (svg-polygon svg '((100 . 100) (200 . 150) (150 . 90))
-;;          :stroke "blue" :fill "red" :id "gon1")
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'xml)
-(require 'dom)
-
-(defun svg-create (width height &rest args)
-  "Create a new, empty SVG image with dimentions WIDTHxHEIGHT.
-ARGS can be used to provide `stroke' and `stroke-width' parameters to
-any further elements added."
-  (dom-node 'svg
-           `((width . ,width)
-             (height . ,height)
-             (version . "1.1")
-             (xmlns . "http://www.w3.org/2000/svg";)
-             ,@(svg-arguments nil args))))
-
-(defun svg-gradient (svg id type &rest stops)
-  "Add a gradient with ID to SVG.
-TYPE is `linear' or `gradient'.  STOPS is a list of percentage/color
-pairs."
-  (svg-def
-   svg
-   (apply
-    'dom-node
-    (if (eq type 'linear)
-       'linearGradient
-      'radialGradient)
-    `((id . ,id)
-      (x1 . 0)
-      (x2 . 0)
-      (y1 . 0)
-      (y2 . 1))
-    (mapcar
-     (lambda (stop)
-       (dom-node 'stop `((offset . ,(format "%s%%" (car stop)))
-                        (stop-color . ,(cdr stop)))))
-     stops))))
-
-(defun svg-rectangle (svg x y width height &rest args)
-  "Create a rectangle on SVG."
-  (svg-append
-   svg
-   (dom-node 'rect
-            `((width . ,width)
-              (height . ,height)
-              (x . ,x)
-              (y . ,y)
-              ,@(svg-arguments svg args)))))
-
-(defun svg-circle (svg x y radius &rest args)
-  "Create a circle of RADIUS on SVG.
-X/Y denote the center of the circle."
-  (svg-append
-   svg
-   (dom-node 'circle
-            `((cx . ,x)
-              (cy . ,y)
-              (r . ,radius)
-              ,@(svg-arguments svg args)))))
-
-(defun svg-ellipse (svg x y x-radius y-radius &rest args)
-  "Create an ellipse of X-RADIUS/Y-RADIUS on SVG.
-X/Y denote the center of the ellipse."
-  (svg-append
-   svg
-   (dom-node 'ellipse
-            `((cx . ,x)
-              (cy . ,y)
-              (rx . ,x-radius)
-              (ry . ,y-radius)
-              ,@(svg-arguments svg args)))))
-
-(defun svg-line (svg x1 y1 x2 y2 &rest args)
-  "Create a line of starting in X1/Y1, ending at X2/Y2 on SVG."
-  (svg-append
-   svg
-   (dom-node 'line
-            `((x1 . ,x1)
-              (y1 . ,y1)
-              (x2 . ,x2)
-              (y2 . ,y2)
-              ,@(svg-arguments svg args)))))
-
-(defun svg-polyline (svg points &rest args)
-  "Create a polyline going through POINTS on SVG.
-POINTS is a list of x/y pairs."
-  (svg-append
-   svg
-   (dom-node
-    'polyline
-    `((points . ,(mapconcat (lambda (pair)
-                             (format "%s %s" (car pair) (cdr pair)))
-                           points
-                           ", "))
-      ,@(svg-arguments svg args)))))
-
-(defun svg-polygon (svg points &rest args)
-  "Create a polygon going through POINTS on SVG.
-POINTS is a list of x/y pairs."
-  (svg-append
-   svg
-   (dom-node
-    'polygon
-    `((points . ,(mapconcat (lambda (pair)
-                             (format "%s %s" (car pair) (cdr pair)))
-                           points
-                           ", "))
-      ,@(svg-arguments svg args)))))
-
-(defun svg-append (svg node)
-  (let ((old (and (dom-attr node 'id)
-                 (dom-by-id svg (concat "\\`" (regexp-quote (dom-attr node 
'id))
-                                        "\\'")))))
-    (if old
-       (dom-set-attributes old (dom-attributes node))
-      (dom-append-child svg node)))
-  (svg-possibly-update-image svg))
-
-(defun svg-arguments (svg args)
-  (let ((stroke-width (or (plist-get args :stroke-width)
-                         (dom-attr svg 'stroke-width)))
-       (stroke (or (plist-get args :stroke)
-                   (dom-attr svg 'stroke)))
-       attr)
-    (when stroke-width
-      (push (cons 'stroke-width stroke-width) attr))
-    (when stroke
-      (push (cons 'stroke stroke) attr))
-    (when (plist-get args :gradient)
-      (setq attr
-           (append
-            ;; We need a way to specify the gradient direction here...
-            `((x1 . 0)
-              (x2 . 0)
-              (y1 . 0)
-              (y2 . 1)
-              (fill . ,(format "url(#%s)"
-                               (plist-get args :gradient))))
-            attr)))
-    (cl-loop for (key value) on args by #'cddr
-            unless (memq key '(:stroke :stroke-width :gradient))
-            ;; Drop the leading colon.
-            do (push (cons (intern (substring (symbol-name key) 1) obarray)
-                           value)
-                     attr))
-    attr))
-
-(defun svg-def (svg def)
-  (dom-append-child
-   (or (dom-by-tag svg 'defs)
-       (let ((node (dom-node 'defs)))
-        (dom-add-child-before svg node)
-        node))
-   def)
-  svg)
-
-(defun svg-image (svg)
-  "Return an image object from SVG."
-  (create-image
-   (with-temp-buffer
-     (svg-print svg)
-     (buffer-string))
-   'svg t))
-
-(defun svg-insert-image (svg)
-  "Insert SVG as an image at point.
-If the SVG is later changed, the image will also be updated."
-  (let ((image (svg-image svg))
-       (marker (point-marker)))
-    (insert-image image)
-    (dom-set-attribute svg :image marker)))
-
-(defun svg-possibly-update-image (svg)
-  (let ((marker (dom-attr svg :image)))
-    (when (and marker
-              (buffer-live-p (marker-buffer marker)))
-      (with-current-buffer (marker-buffer marker)
-       (put-text-property marker (1+ marker) 'display (svg-image svg))))))
-
-(defun svg-print (dom)
-  "Convert DOM into a string containing the xml representation."
-  (insert (format "<%s" (car dom)))
-  (dolist (attr (nth 1 dom))
-    ;; Ignore attributes that start with a colon.
-    (unless (= (aref (format "%s" (car attr)) 0) ?:)
-      (insert (format " %s=\"%s\"" (car attr) (cdr attr)))))
-  (insert ">")
-  (dolist (elem (nthcdr 2 dom))
-    (insert " ")
-    (svg-print elem))
-  (insert (format "</%s>" (car dom))))
-
-(provide 'svg)
-
-;;; svg.el ends here
diff --git a/packages/wcheck-mode/Makefile b/packages/wcheck-mode/Makefile
deleted file mode 100644
index 225b5e3..0000000
--- a/packages/wcheck-mode/Makefile
+++ /dev/null
@@ -1,39 +0,0 @@
-# Makefile for wcheck-mode
-
-BASE := wcheck-mode
-DESC := General interface for text checkers
-VERSION := $(shell date +%Y.%-m.%-d)
-MAIN := $(BASE).el
-PKG := $(BASE)-pkg.el
-FILES := $(MAIN) $(PKG) COPYING README
-NAME := $(BASE)-$(VERSION)
-
-elpa: $(PKG)
-tar: $(NAME).tar
-sign: $(NAME).tar.sig
-elc: $(BASE).elc
-
-$(NAME).tar: $(FILES)
-       tar --create --file $@ --transform 's,^,$(NAME)/,' $(FILES)
-
-$(NAME).tar.sig: $(NAME).tar
-       gpg --yes --detach-sign $<
-
-$(PKG):
-       @printf "(define-package \"%s\" \"%s\"\n  \"%s\")\n" \
-               "$(BASE)" "$(VERSION)" "$(DESC)" >$@
-       @cat $@
-
-README: README.md
-       cp -f -- $< $@
-
-$(BASE).elc: %.elc: %.el
-       emacs -Q --batch -f batch-byte-compile $<
-
-tag:
-       git tag -s $(VERSION) -m 'Version $(VERSION)' HEAD
-
-clean:
-       rm -f -- $(BASE)*.tar* README $(BASE).elc
-
-.PHONY: elpa tar sign tag clean elc $(PKG)
diff --git a/packages/wcheck-mode/README.md b/packages/wcheck-mode/README.md
index c7b11d8..6fc47f4 100644
--- a/packages/wcheck-mode/README.md
+++ b/packages/wcheck-mode/README.md
@@ -91,10 +91,10 @@ checker.
 Install
 -------
 
-You can install Wcheck mode through [Melpa][] package archive.
-Alternatively you can put `wcheck-mode.el` file to some directory in
-your Emacs's `load-path` and add the following lines to Emacs's
-initialization file (`~/.emacs` or `~/.emacs.d/init.el`):
+You can install Wcheck mode through [GNU Elpa][Elpa] or [Melpa][]
+package archives. Alternatively you can put `wcheck-mode.el` file to
+some directory in your Emacs's `load-path` and add the following lines
+to Emacs's initialization file (`~/.emacs` or `~/.emacs.d/init.el`):
 
     (autoload 'wcheck-mode "wcheck-mode"
       "Toggle wcheck-mode." t)
@@ -107,6 +107,7 @@ initialization file (`~/.emacs` or `~/.emacs.d/init.el`):
     (autoload 'wcheck-jump-backward "wcheck-mode"
       "Move point backward to previous marked text area." t)
 
+[Elpa]:  https://elpa.gnu.org/
 [Melpa]: https://melpa.org/
 
 
@@ -144,6 +145,9 @@ querying effective configuration data for any language.
 Examples
 --------
 
+
+### Basic spell-checking
+
 Here are some examples on how you can fill the `wcheck-language-data`
 variable. The value is a list of language configurations:
 
@@ -195,6 +199,52 @@ and sets the syntactic meaning of the ASCII hyphen 
character (-) to a
 word character ("w"). Wcheck mode and its regular expression search will
 use that syntax table when scanning buffers' content in that language.
 
+
+### Choose what to check
+
+On some Emacs major modes there is no need to spell-check everything in
+the buffer. For example, in programming languages modes it is probably
+useful to spell-check only programmer's comments and functions'
+documentation strings. This can be configured with language option
+`read-or-skip-faces`. The following incomplete language configuration
+makes special treatment for emacs-lisp-mode: it checks only text areas
+which have been marked with faces `font-lock-comment-face` and
+`font-lock-doc-face`.
+
+    ("Some language"
+     ;; (program ...)
+     ;; (args ...)
+     (read-or-skip-faces
+      (emacs-lisp-mode read font-lock-comment-face font-lock-string-face)))
+
+Because `read-or-skip-faces` settings is often not a language specific
+option but a general major mode specific setting it can be more useful
+to put `read-or-skip-faces` settings in variable
+`wcheck-language-data-defaults` like this:
+
+    (setq wcheck-language-data-defaults
+          '((read-or-skip-faces
+             ((emacs-lisp-mode lisp-mode)
+              read font-lock-comment-face font-lock-doc-face)
+             (sh-mode
+              read font-lock-comment-face)
+             (message-mode
+              read nil message-header-subject message-cited-text)
+             (latex-mode
+              read nil font-latex-sectioning-1-face
+              font-latex-sectioning-2-face
+              font-latex-sectioning-3-face
+              font-latex-sectioning-4-face font-latex-bold-face
+              font-latex-italic-face font-lock-constant-face)
+             (org-mode
+              read nil org-level-1 org-level-2 org-level-3 org-level-4
+              org-level-5 org-level-6 org-level-7 org-level-8)
+             (git-commit-mode
+              read nil git-commit-summary-face))))
+
+
+### Add words to dictionary
+
 Below is an example on how to add an "Add to dictionary" feature to the
 actions menu, among spelling suggestions. First, there's the language
 configuration. The example below is similar to the "British English"
@@ -248,6 +298,9 @@ Enchant program must be restarted.
             (message "Added word \"%s\" to the %s dictionary"
                      word language)))))
 
+
+### Other than human languages
+
 Spell-checking human languages is not the only application for Wcheck
 mode. The following configuration adds language called "Trailing
 whitespace" which finds and marks all trailing whitespace characters
@@ -336,7 +389,7 @@ branches and possibly merged to _master_ when they are 
ready.
 Copyright and license
 ---------------------
 
-Copyright (C) 2009-2016 Free Software Foundation, Inc.
+Copyright (C) 2009-2019 Free Software Foundation, Inc.
 
 This program is free software: you can redistribute it and/or modify it
 under the terms of the GNU General Public License as published by the
diff --git a/packages/wcheck-mode/wcheck-mode.el 
b/packages/wcheck-mode/wcheck-mode.el
index c97f09b..74f8dce 100644
--- a/packages/wcheck-mode/wcheck-mode.el
+++ b/packages/wcheck-mode/wcheck-mode.el
@@ -1,13 +1,13 @@
-;;; wcheck-mode.el --- General interface for text checkers
+;;; wcheck-mode.el --- General interface for text checkers  -*- 
lexical-binding: t -*-
 
-;; Copyright (C) 2009-2016  Free Software Foundation, Inc.
+;; Copyright (C) 2009-2019  Free Software Foundation, Inc.
 
 ;; Author: Teemu Likonen <address@hidden>
 ;; Maintainer: Teemu Likonen <address@hidden>
 ;; Created: 2009-07-04
 ;; URL: https://github.com/tlikonen/wcheck-mode
 ;; Keywords: text spell check languages ispell
-;; Version: 2016.1.30
+;; Version: 2019.6.17
 
 ;; 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
@@ -66,7 +66,7 @@
 
 (eval-when-compile
   ;; Silence compiler
-  (declare-function show-entry "outline"))
+  (declare-function outline-show-entry "outline"))
 
 
 ;;; Settings
@@ -1141,6 +1141,7 @@ requested it."
 
 
 (defun wcheck--timer-jump-event ()
+  (require 'outline)
   (wcheck--loop-over-jump-reqs buffer
     (let* ((jump-req (wcheck--buffer-data-get :buffer buffer :jump-req))
            (start (wcheck--jump-req-start jump-req))
@@ -1158,7 +1159,7 @@ requested it."
                               (set-window-point window (overlay-end ol))
                             (goto-char (overlay-end ol)))
                           (when (invisible-p (point))
-                            (show-entry))
+                            (outline-show-entry))
                           (message "Found from line %s"
                                    (line-number-at-pos (point)))
                           (wcheck--force-read buffer))
@@ -1175,7 +1176,7 @@ requested it."
                               (set-window-point window (overlay-start ol))
                             (goto-char (overlay-start ol)))
                           (when (invisible-p (point))
-                            (show-entry))
+                            (outline-show-entry))
                           (message "Found from line %s"
                                    (line-number-at-pos (point)))
                           (wcheck--force-read buffer))
@@ -1926,11 +1927,11 @@ Both arguments are lists."
 
 
 (defun wcheck--generate-face-predicate (language mode)
-  "Generate a face predicate expression for scanning buffer.
-Return a predicate expression that is used to decide whether
+  "Generate a face predicate function for scanning buffer.
+Return a predicate function that is used to decide whether
 `wcheck-mode' should read or paint text at the current point
-position with LANGUAGE and MODE. Evaluating the predicate
-expression will return a boolean."
+position with LANGUAGE and MODE. The called predicate function
+will return a boolean."
   (let* ((face-settings (wcheck--major-mode-face-settings
                          language mode))
          (mode (nth 1 face-settings))
@@ -1938,15 +1939,15 @@ expression will return a boolean."
     (cond ((not font-lock-mode)
            (lambda () t))
           ((eq mode 'read)
-           `(lambda ()
-              (wcheck--face-found-p
-               ',faces (wcheck--collect-faces
-                        (match-beginning 1) (match-end 1)))))
+           (lambda ()
+             (wcheck--face-found-p
+              faces (wcheck--collect-faces
+                     (match-beginning 1) (match-end 1)))))
           ((eq mode 'skip)
-           `(lambda ()
-              (not (wcheck--face-found-p
-                    ',faces (wcheck--collect-faces
-                             (match-beginning 1) (match-end 1))))))
+           (lambda ()
+             (not (wcheck--face-found-p
+                   faces (wcheck--collect-faces
+                          (match-beginning 1) (match-end 1))))))
           (t (lambda () t)))))
 
 
@@ -2024,7 +2025,8 @@ a (valid) value for the KEY then query the value from
   "Return non-nil if PROGRAM is executable regular file."
   (when (stringp program)
     (let ((f (executable-find program)))
-      (and (file-regular-p f)
+      (and f
+           (file-regular-p f)
            (file-executable-p f)))))
 
 
diff --git a/packages/websocket/websocket-functional-test.el 
b/packages/websocket/websocket-functional-test.el
index 80eb004..cc9ac70 100644
--- a/packages/websocket/websocket-functional-test.el
+++ b/packages/websocket/websocket-functional-test.el
@@ -116,6 +116,7 @@
         wstest-msgs nil)
   (sleep-for 0.3)
   (assert (websocket-openp wstest-ws))
+  (sleep-for 0.6)
   (assert (eq 'open (websocket-ready-state wstest-ws)))
   (assert (null wstest-msgs))
   (websocket-send-text wstest-ws "Hi!")
diff --git a/packages/websocket/websocket.el b/packages/websocket/websocket.el
index 0533fb3..4c8b040 100644
--- a/packages/websocket/websocket.el
+++ b/packages/websocket/websocket.el
@@ -4,7 +4,7 @@
 
 ;; Author: Andrew Hyatt <address@hidden>
 ;; Keywords: Communication, Websocket, Server
-;; Version: 1.8
+;; Version: 1.9
 ;; Package-Requires: ((cl-lib "0.5"))
 ;;
 ;; This program is free software; you can redistribute it and/or
@@ -99,7 +99,7 @@ same for the protocols."
   accept-string
   (inflight-input nil))
 
-(defvar websocket-version "1.5"
+(defvar websocket-version "1.9"
   "Version numbers of this version of websocket.el.")
 
 (defvar websocket-debug nil
@@ -567,9 +567,7 @@ the `websocket-error' condition."
                        (websocket-encode-frame frame (not (websocket-server-p 
websocket)))))
 
 (defun websocket-openp (websocket)
-  ;; FIXME: "open and either connecting or open"?  I don't understand.  --Stef
-  "Check WEBSOCKET and return non-nil if it is open, and either
-connecting or open."
+  "Check WEBSOCKET and return non-nil if the connection is open."
   (and websocket
        (not (eq 'close (websocket-ready-state websocket)))
        (member (process-status (websocket-conn websocket)) '(open run))))
@@ -606,7 +604,8 @@ connecting or open."
 
 (cl-defun websocket-open (url &key protocols extensions (on-open 'identity)
                             (on-message (lambda (_w _f))) (on-close 'identity)
-                            (on-error 'websocket-default-error-handler))
+                            (on-error 'websocket-default-error-handler)
+                            (nowait nil) (custom-header-alist nil))
   "Open a websocket connection to URL, returning the `websocket' struct.
 The PROTOCOL argument is optional, and setting it will declare to
 the server that this client supports the protocols in the list
@@ -676,6 +675,14 @@ describing the invalid header received from the server.
 
 `websocket-unparseable-frame': Data in the error is a string
 describing the problem with the frame.
+
+`nowait': If NOWAIT is true, return without waiting for the
+connection to complete.
+
+`custom-headers-alist': An alist of custom headers to pass to the
+server. The car is the header name, the cdr is the header value.
+These are different from the extensions because it is not related
+to the websocket protocol.
 "
   (let* ((name (format "websocket to %s" url))
          (url-struct (url-generic-parse-url url))
@@ -691,9 +698,9 @@ describing the problem with the frame.
                           (host (url-host url-struct)))
                        (if (eq type 'plain)
                            (make-network-process :name name :buffer nil :host 
host
-                                                 :service port :nowait nil)
+                                                 :service port :nowait nowait)
                          (condition-case-unless-debug nil
-                             (open-network-stream name nil host port :type 
type :nowait nil)
+                             (open-network-stream name nil host port :type 
type :nowait nowait)
                            (wrong-number-of-arguments
                             (signal 'websocket-wss-needs-emacs-24 "wss")))))
                  (signal 'websocket-unsupported-protocol (url-type 
url-struct))))
@@ -731,7 +738,8 @@ describing the problem with the frame.
     (websocket-debug websocket "Sending handshake, key: %s, acceptance: %s"
                      key (websocket-accept-string websocket))
     (process-send-string conn
-                         (websocket-create-headers url key protocols 
extensions))
+                         (websocket-create-headers
+                          url key protocols extensions custom-header-alist))
     (websocket-debug websocket "Websocket opened")
     websocket))
 
@@ -899,9 +907,10 @@ connection, which should be kept in order to pass to
                 (not (eq 'closed (websocket-ready-state websocket))))
            (websocket-try-callback 'websocket-on-close 'on-close 
websocket)))))))
 
-(defun websocket-create-headers (url key protocol extensions)
-  "Create connections headers for the given URL, KEY, PROTOCOL and EXTENSIONS.
-These are defined as in `websocket-open'."
+(defun websocket-create-headers (url key protocol extensions 
custom-headers-alist)
+  "Create connections headers for the given URL, KEY, PROTOCOL, and EXTENSIONS.
+Additionally, the CUSTOM-HEADERS-ALIST is passed from the client.
+All these parameters are defined as in `websocket-open'."
   (let* ((parsed-url (url-generic-parse-url url))
          (host-port (if (url-port-if-non-default parsed-url)
                         (format "%s:%s" (url-host parsed-url) (url-port 
parsed-url))
@@ -932,6 +941,9 @@ These are defined as in `websocket-open'."
                                     (mapconcat 'identity (cdr ext) "; "))))
                                extensions ", ")))
                     (when cookie-header cookie-header)
+                    (concat (mapconcat (lambda (cons) (format "%s: %s" (car 
cons) (cdr cons)))
+                                       custom-headers-alist "\r\n")
+                            (when custom-headers-alist "\r\n"))
                     "\r\n")
             host-port
             key
diff --git a/packages/xclip/xclip.el b/packages/xclip/xclip.el
index 2c7be8c..1713bf7 100644
--- a/packages/xclip/xclip.el
+++ b/packages/xclip/xclip.el
@@ -5,7 +5,7 @@
 ;; Author: Leo Liu <address@hidden>
 ;; Keywords: convenience, tools
 ;; Created: 2007-12-30
-;; Version: 1.8
+;; Version: 1.9
 
 ;; 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
@@ -32,6 +32,8 @@
 ;;   http://www.vergenet.net/~conrad/software/xsel/ respectively).
 ;; - MacOS: `pbpaste/pbcopy'
 ;; - Cygwin: `getclip/putclip'
+;; - Under Wayland: `wl-clipboard' (https://github.com/bugaevc/wl-clipboard)
+;; - Termux: `termux-clipboard-get/set'
 ;; - Emacs: It can also use Emacs's built-in GUI support to talk to the GUI.
 ;;   This requires an Emacs built with GUI support.
 ;;   It uses `make-frame-on-display' which has been tested to work under X11,
@@ -75,6 +77,7 @@ If non-nil `xclip-program' is ignored.")
    (and (executable-find "xclip") 'xclip)
    (and (executable-find "xsel") 'xsel)
    (and (executable-find "wl-copy") 'wl-copy) ;github.com/bugaevc/wl-clipboard
+   (and (executable-find "termux-clipboard-get") 'termux-clipboard-get)
    (and (fboundp 'x-create-frame) (getenv "DISPLAY") 'emacs)
    'xclip)
   "Method to use to access the GUI's clipboard.
@@ -86,6 +89,7 @@ and `getclip' under Cygwin, or `emacs' to use Emacs's GUI 
code for that."
           (const :tag "X11: xclip" xclip)
           (const :tag "X11: xsel" xsel)
           (const :tag "Wayland: wl-copy" wl-copy)
+          (const :tag "Termux: termux-clipboard-get/set" termux-clipboard-get)
           (const :tag "X11: Emacs" emacs)))
 
 (defcustom xclip-program (symbol-name xclip-method)
@@ -136,6 +140,12 @@ See also `x-set-selection'."
                  (apply #'start-process
                         "wl-copy" nil xclip-program
                         (if (memq type '(primary PRIMARY)) '("-p")))))
+              (`termux-clipboard-get
+               (when (memq type '(clipboard CLIPBOARD))
+                 (start-process "termux-clipboard-set" nil
+                                (replace-regexp-in-string
+                                 "\\(.*\\)get" "\\1set"
+                                 xclip-program 'fixedcase))))
               (method (error "Unknown `xclip-method': %S" method)))))
       (when proc
         (process-send-string proc data)
@@ -176,6 +186,9 @@ See also `x-set-selection'."
                                             xclip-program 'fixedcase)
                   nil standard-output nil
                   (if (memq type '(primary PRIMARY)) '("-p")))))
+        (`termux-clipboard-get
+         (when (memq type '(clipboard CLIPBOARD))
+           (call-process xclip-program nil standard-output nil)))
         (method (error "Unknown `xclip-method': %S" method))))))
 
 ;;;###autoload
diff --git a/packages/yasnippet/yasnippet.el b/packages/yasnippet/yasnippet.el
index d478073..c3020bf 100644
--- a/packages/yasnippet/yasnippet.el
+++ b/packages/yasnippet/yasnippet.el
@@ -1,6 +1,6 @@
-;;; yasnippet.el --- Yet another snippet extension for Emacs.
+;;; yasnippet.el --- Yet another snippet extension for Emacs
 
-;; Copyright (C) 2008-2018 Free Software Foundation, Inc.
+;; Copyright (C) 2008-2019 Free Software Foundation, Inc.
 ;; Authors: pluskid <address@hidden>,
 ;;          João Távora <address@hidden>,
 ;;          Noam Postavsky <address@hidden>
@@ -380,8 +380,7 @@ the trigger key itself."
 (defcustom yas-alias-to-yas/prefix-p t
   "If non-nil make aliases for the old style yas/ prefixed symbols.
 It must be set to nil before loading yasnippet to take effect."
-  :type 'boolean
-  :group 'yasnippet)
+  :type 'boolean)
 
 ;; Only two faces, and one of them shouldn't even be used...
 ;;
@@ -753,12 +752,12 @@ expanded.")
     ["About"            yas-about
      :help "Display some information about YASnippet"]))
 
+(define-obsolete-variable-alias 'yas-extra-modes 'yas--extra-modes "0.9.1")
 (defvar yas--extra-modes nil
   "An internal list of modes for which to also lookup snippets.
 
 This variable probably makes more sense as buffer-local, so
 ensure your use `make-local-variable' when you set it.")
-(define-obsolete-variable-alias 'yas-extra-modes 'yas--extra-modes "0.9.1")
 
 (defvar yas--tables (make-hash-table)
   "A hash table of mode symbols to `yas--table' objects.")
@@ -4513,7 +4512,10 @@ SAVED-QUOTES is the in format returned by 
`yas--save-backquotes'."
 (defun yas--scan-sexps (from count)
   (ignore-errors
     (save-match-data ; `scan-sexps' may modify match data.
+      ;; Parse using the syntax table corresponding to the yasnippet syntax.
       (with-syntax-table (standard-syntax-table)
+        ;; And ignore syntax-table properties that may have been placed by the
+        ;; major mode since these aren't related to the yasnippet syntax.
         (let ((parse-sexp-lookup-properties nil))
           (scan-sexps from count))))))
 



reply via email to

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