[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 %s" bytes (car units)))
+ ((>= bytes 10) (format "%4.1f %s" bytes (car units)))
+ (t (format "%4.2f %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>></kbd> | Up stack (move to older stack
frame) |
-| <kbd>d</kbd>, <kbd><</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 ? T R /tmp/en.tiff H H �F @ V @���( @`� @@33 @�ff&