From 182f153c2c0401f1a5bb9f917183372e4859bba4 Mon Sep 17 00:00:00 2001 From: Marcus Kammer <2262664-marcuskammer@users.noreply.gitlab.com> Date: Sat, 23 Nov 2019 09:10:03 +0100 Subject: [PATCH] Install new packages --- elpa/archives/gnu/archive-contents | 2332 +++ elpa/archives/gnu/archive-contents.signed | 1 + elpa/archives/melpa/archive-contents | 4390 +++++ elpa/async-20191030.2138/async-autoloads.el | 174 + elpa/async-20191030.2138/async-bytecomp.el | 210 + elpa/async-20191030.2138/async-bytecomp.elc | Bin 0 -> 7419 bytes elpa/async-20191030.2138/async-pkg.el | 6 + elpa/async-20191030.2138/async.el | 408 + elpa/async-20191030.2138/async.elc | Bin 0 -> 11481 bytes elpa/async-20191030.2138/dired-async.el | 408 + elpa/async-20191030.2138/dired-async.elc | Bin 0 -> 13978 bytes elpa/async-20191030.2138/smtpmail-async.el | 73 + elpa/async-20191030.2138/smtpmail-async.elc | Bin 0 -> 1587 bytes .../berrys-theme-autoloads.el | 24 + .../berrys-theme-pkg.el | 2 + .../berrys-theme.el | 399 + elpa/company-20191114.1356/company-abbrev.el | 50 + elpa/company-20191114.1356/company-abbrev.elc | Bin 0 -> 1170 bytes .../company-autoloads.el | 383 + elpa/company-20191114.1356/company-bbdb.el | 61 + elpa/company-20191114.1356/company-bbdb.elc | Bin 0 -> 1719 bytes elpa/company-20191114.1356/company-capf.el | 206 + elpa/company-20191114.1356/company-capf.elc | Bin 0 -> 4954 bytes elpa/company-20191114.1356/company-clang.el | 351 + elpa/company-20191114.1356/company-clang.elc | Bin 0 -> 13790 bytes elpa/company-20191114.1356/company-cmake.el | 206 + elpa/company-20191114.1356/company-cmake.elc | Bin 0 -> 6062 bytes elpa/company-20191114.1356/company-css.el | 446 + elpa/company-20191114.1356/company-css.elc | Bin 0 -> 16945 bytes .../company-dabbrev-code.el | 104 + .../company-dabbrev-code.elc | Bin 0 -> 3595 bytes elpa/company-20191114.1356/company-dabbrev.el | 206 + .../company-20191114.1356/company-dabbrev.elc | Bin 0 -> 6950 bytes elpa/company-20191114.1356/company-eclim.el | 186 + elpa/company-20191114.1356/company-eclim.elc | Bin 0 -> 5476 bytes elpa/company-20191114.1356/company-elisp.el | 226 + elpa/company-20191114.1356/company-elisp.elc | Bin 0 -> 6686 bytes elpa/company-20191114.1356/company-etags.el | 108 + elpa/company-20191114.1356/company-etags.elc | Bin 0 -> 3108 bytes elpa/company-20191114.1356/company-files.el | 148 + elpa/company-20191114.1356/company-files.elc | Bin 0 -> 4375 bytes elpa/company-20191114.1356/company-gtags.el | 117 + elpa/company-20191114.1356/company-gtags.elc | Bin 0 -> 3666 bytes elpa/company-20191114.1356/company-ispell.el | 82 + elpa/company-20191114.1356/company-ispell.elc | Bin 0 -> 1972 bytes .../company-20191114.1356/company-keywords.el | 306 + .../company-keywords.elc | Bin 0 -> 18127 bytes elpa/company-20191114.1356/company-nxml.el | 143 + elpa/company-20191114.1356/company-nxml.elc | Bin 0 -> 4220 bytes elpa/company-20191114.1356/company-oddmuse.el | 57 + .../company-20191114.1356/company-oddmuse.elc | Bin 0 -> 1423 bytes elpa/company-20191114.1356/company-pkg.el | 12 + .../company-20191114.1356/company-semantic.el | 168 + .../company-semantic.elc | Bin 0 -> 5237 bytes .../company-20191114.1356/company-template.el | 272 + .../company-template.elc | Bin 0 -> 8438 bytes elpa/company-20191114.1356/company-tempo.el | 71 + elpa/company-20191114.1356/company-tempo.elc | Bin 0 -> 2233 bytes elpa/company-20191114.1356/company-tng.el | 194 + elpa/company-20191114.1356/company-tng.elc | Bin 0 -> 4259 bytes elpa/company-20191114.1356/company-xcode.el | 123 + elpa/company-20191114.1356/company-xcode.elc | Bin 0 -> 3741 bytes .../company-yasnippet.el | 147 + .../company-yasnippet.elc | Bin 0 -> 3506 bytes elpa/company-20191114.1356/company.el | 3219 ++++ elpa/company-20191114.1356/company.elc | Bin 0 -> 106651 bytes elpa/dash-20191109.1327/dash-autoloads.el | 22 + elpa/dash-20191109.1327/dash-pkg.el | 2 + elpa/dash-20191109.1327/dash.el | 3050 ++++ elpa/dash-20191109.1327/dash.elc | Bin 0 -> 101554 bytes .../dash-functional-autoloads.el | 23 + .../dash-functional-pkg.el | 2 + .../dash-functional.el | 219 + .../dash-functional.elc | Bin 0 -> 9070 bytes elpa/elpy-20191120.1927/elpy-autoloads.el | 91 + elpa/elpy-20191120.1927/elpy-django.el | 335 + elpa/elpy-20191120.1927/elpy-django.elc | Bin 0 -> 10850 bytes elpa/elpy-20191120.1927/elpy-pkg.el | 10 + elpa/elpy-20191120.1927/elpy-profile.el | 114 + elpa/elpy-20191120.1927/elpy-profile.elc | Bin 0 -> 3530 bytes elpa/elpy-20191120.1927/elpy-refactor.el | 297 + elpa/elpy-20191120.1927/elpy-refactor.elc | Bin 0 -> 10366 bytes elpa/elpy-20191120.1927/elpy-rpc.el | 1154 ++ elpa/elpy-20191120.1927/elpy-rpc.elc | Bin 0 -> 38242 bytes elpa/elpy-20191120.1927/elpy-shell.el | 1338 ++ elpa/elpy-20191120.1927/elpy-shell.elc | Bin 0 -> 53310 bytes elpa/elpy-20191120.1927/elpy.el | 3984 +++++ elpa/elpy-20191120.1927/elpy.elc | Bin 0 -> 117176 bytes elpa/elpy-20191120.1927/elpy/__init__.py | 41 + elpa/elpy-20191120.1927/elpy/__main__.py | 25 + elpa/elpy-20191120.1927/elpy/auto_pep8.py | 27 + elpa/elpy-20191120.1927/elpy/blackutil.py | 69 + elpa/elpy-20191120.1927/elpy/compat.py | 33 + elpa/elpy-20191120.1927/elpy/jedibackend.py | 382 + elpa/elpy-20191120.1927/elpy/pydocutils.py | 91 + elpa/elpy-20191120.1927/elpy/refactor.py | 381 + elpa/elpy-20191120.1927/elpy/rpc.py | 151 + elpa/elpy-20191120.1927/elpy/server.py | 271 + .../elpy-20191120.1927/elpy/tests/__init__.py | 8 + elpa/elpy-20191120.1927/elpy/tests/compat.py | 18 + elpa/elpy-20191120.1927/elpy/tests/support.py | 986 ++ .../elpy/tests/test_auto_pep8.py | 21 + .../elpy/tests/test_black.py | 55 + .../elpy/tests/test_jedibackend.py | 395 + .../elpy/tests/test_pydocutils.py | 88 + .../elpy/tests/test_refactor.py | 545 + .../elpy-20191120.1927/elpy/tests/test_rpc.py | 209 + .../elpy/tests/test_server.py | 389 + .../elpy/tests/test_support.py | 19 + .../elpy/tests/test_yapf.py | 33 + elpa/elpy-20191120.1927/elpy/yapfutil.py | 38 + .../snippets/python-mode/.yas-setup.el | 68 + .../snippets/python-mode/.yas-setup.elc | Bin 0 -> 2503 bytes .../snippets/python-mode/__abs__ | 7 + .../snippets/python-mode/__add__ | 7 + .../snippets/python-mode/__and__ | 7 + .../snippets/python-mode/__bool__ | 7 + .../snippets/python-mode/__call__ | 7 + .../snippets/python-mode/__cmp__ | 7 + .../snippets/python-mode/__coerce__ | 7 + .../snippets/python-mode/__complex__ | 7 + .../snippets/python-mode/__contains__ | 7 + .../snippets/python-mode/__del__ | 7 + .../snippets/python-mode/__delattr__ | 7 + .../snippets/python-mode/__delete__ | 7 + .../snippets/python-mode/__delitem__ | 7 + .../snippets/python-mode/__div__ | 7 + .../snippets/python-mode/__divmod__ | 7 + .../snippets/python-mode/__enter__ | 9 + .../snippets/python-mode/__eq__ | 7 + .../snippets/python-mode/__exit__ | 7 + .../snippets/python-mode/__float__ | 7 + .../snippets/python-mode/__floordiv__ | 7 + .../snippets/python-mode/__ge__ | 7 + .../snippets/python-mode/__get__ | 7 + .../snippets/python-mode/__getattr__ | 7 + .../snippets/python-mode/__getattribute__ | 7 + .../snippets/python-mode/__getitem__ | 7 + .../snippets/python-mode/__gt__ | 7 + .../snippets/python-mode/__hash__ | 7 + .../snippets/python-mode/__hex__ | 7 + .../snippets/python-mode/__iadd__ | 7 + .../snippets/python-mode/__iand__ | 7 + .../snippets/python-mode/__idiv__ | 7 + .../snippets/python-mode/__ifloordiv__ | 7 + .../snippets/python-mode/__ilshift__ | 7 + .../snippets/python-mode/__imod__ | 7 + .../snippets/python-mode/__imul__ | 7 + .../snippets/python-mode/__index__ | 7 + .../snippets/python-mode/__init__ | 10 + .../snippets/python-mode/__instancecheck__ | 7 + .../snippets/python-mode/__int__ | 7 + .../snippets/python-mode/__invert__ | 7 + .../snippets/python-mode/__ior__ | 7 + .../snippets/python-mode/__ipow__ | 7 + .../snippets/python-mode/__irshift__ | 7 + .../snippets/python-mode/__isub__ | 7 + .../snippets/python-mode/__iter__ | 7 + .../snippets/python-mode/__itruediv__ | 7 + .../snippets/python-mode/__ixor__ | 7 + .../snippets/python-mode/__le__ | 7 + .../snippets/python-mode/__len__ | 7 + .../snippets/python-mode/__long__ | 7 + .../snippets/python-mode/__lshift__ | 7 + .../snippets/python-mode/__lt__ | 7 + .../snippets/python-mode/__mod__ | 7 + .../snippets/python-mode/__mul__ | 7 + .../snippets/python-mode/__ne__ | 7 + .../snippets/python-mode/__neg__ | 7 + .../snippets/python-mode/__new__ | 10 + .../snippets/python-mode/__nonzero__ | 7 + .../snippets/python-mode/__oct__ | 7 + .../snippets/python-mode/__or__ | 7 + .../snippets/python-mode/__pos__ | 7 + .../snippets/python-mode/__pow__ | 7 + .../snippets/python-mode/__radd__ | 7 + .../snippets/python-mode/__rand__ | 7 + .../snippets/python-mode/__rdivmod__ | 7 + .../snippets/python-mode/__repr__ | 7 + .../snippets/python-mode/__reversed__ | 7 + .../snippets/python-mode/__rfloordiv__ | 7 + .../snippets/python-mode/__rlshift__ | 7 + .../snippets/python-mode/__rmod__ | 7 + .../snippets/python-mode/__rmul__ | 7 + .../snippets/python-mode/__ror__ | 7 + .../snippets/python-mode/__rpow__ | 7 + .../snippets/python-mode/__rrshift__ | 7 + .../snippets/python-mode/__rshift__ | 7 + .../snippets/python-mode/__rsub__ | 7 + .../snippets/python-mode/__rtruediv__ | 7 + .../snippets/python-mode/__rxor__ | 7 + .../snippets/python-mode/__set__ | 7 + .../snippets/python-mode/__setattr__ | 7 + .../snippets/python-mode/__setitem__ | 7 + .../snippets/python-mode/__slots__ | 7 + .../snippets/python-mode/__str__ | 7 + .../snippets/python-mode/__sub__ | 7 + .../snippets/python-mode/__subclasscheck__ | 7 + .../snippets/python-mode/__truediv__ | 7 + .../snippets/python-mode/__unicode__ | 7 + .../snippets/python-mode/__xor__ | 7 + .../snippets/python-mode/_abs | 7 + .../snippets/python-mode/_add | 7 + .../snippets/python-mode/_and | 7 + .../snippets/python-mode/_bool | 7 + .../snippets/python-mode/_call | 7 + .../snippets/python-mode/_cmp | 7 + .../snippets/python-mode/_coerce | 7 + .../snippets/python-mode/_complex | 7 + .../snippets/python-mode/_contains | 7 + .../snippets/python-mode/_del | 7 + .../snippets/python-mode/_delattr | 7 + .../snippets/python-mode/_delete | 7 + .../snippets/python-mode/_delitem | 7 + .../snippets/python-mode/_div | 7 + .../snippets/python-mode/_divmod | 7 + .../snippets/python-mode/_enter | 9 + .../snippets/python-mode/_eq | 7 + .../snippets/python-mode/_exit | 7 + .../snippets/python-mode/_float | 7 + .../snippets/python-mode/_floordiv | 7 + .../snippets/python-mode/_ge | 7 + .../snippets/python-mode/_get | 7 + .../snippets/python-mode/_getattr | 7 + .../snippets/python-mode/_getattribute | 7 + .../snippets/python-mode/_getitem | 7 + .../snippets/python-mode/_gt | 7 + .../snippets/python-mode/_hash | 7 + .../snippets/python-mode/_hex | 7 + .../snippets/python-mode/_iadd | 7 + .../snippets/python-mode/_iand | 7 + .../snippets/python-mode/_idiv | 7 + .../snippets/python-mode/_ifloordiv | 7 + .../snippets/python-mode/_ilshift | 7 + .../snippets/python-mode/_imod | 7 + .../snippets/python-mode/_imul | 7 + .../snippets/python-mode/_index | 7 + .../snippets/python-mode/_init | 10 + .../snippets/python-mode/_instancecheck | 7 + .../snippets/python-mode/_int | 7 + .../snippets/python-mode/_invert | 7 + .../snippets/python-mode/_ior | 7 + .../snippets/python-mode/_ipow | 7 + .../snippets/python-mode/_irshift | 7 + .../snippets/python-mode/_isub | 7 + .../snippets/python-mode/_iter | 7 + .../snippets/python-mode/_itruediv | 7 + .../snippets/python-mode/_ixor | 7 + .../snippets/python-mode/_le | 7 + .../snippets/python-mode/_len | 7 + .../snippets/python-mode/_long | 7 + .../snippets/python-mode/_lshift | 7 + .../snippets/python-mode/_lt | 7 + .../snippets/python-mode/_mod | 7 + .../snippets/python-mode/_mul | 7 + .../snippets/python-mode/_ne | 7 + .../snippets/python-mode/_neg | 7 + .../snippets/python-mode/_new | 10 + .../snippets/python-mode/_nonzero | 7 + .../snippets/python-mode/_oct | 7 + .../snippets/python-mode/_or | 7 + .../snippets/python-mode/_pos | 7 + .../snippets/python-mode/_pow | 7 + .../snippets/python-mode/_radd | 7 + .../snippets/python-mode/_rand | 7 + .../snippets/python-mode/_rdivmod | 7 + .../snippets/python-mode/_repr | 7 + .../snippets/python-mode/_reversed | 7 + .../snippets/python-mode/_rfloordiv | 7 + .../snippets/python-mode/_rlshift | 7 + .../snippets/python-mode/_rmod | 7 + .../snippets/python-mode/_rmul | 7 + .../snippets/python-mode/_ror | 7 + .../snippets/python-mode/_rpow | 7 + .../snippets/python-mode/_rrshift | 7 + .../snippets/python-mode/_rshift | 7 + .../snippets/python-mode/_rsub | 7 + .../snippets/python-mode/_rtruediv | 7 + .../snippets/python-mode/_rxor | 7 + .../snippets/python-mode/_set | 7 + .../snippets/python-mode/_setattr | 7 + .../snippets/python-mode/_setitem | 7 + .../snippets/python-mode/_slots | 7 + .../snippets/python-mode/_str | 7 + .../snippets/python-mode/_sub | 7 + .../snippets/python-mode/_subclasscheck | 7 + .../snippets/python-mode/_truediv | 7 + .../snippets/python-mode/_unicode | 7 + .../snippets/python-mode/_xor | 7 + .../snippets/python-mode/ase | 6 + .../snippets/python-mode/asne | 6 + .../snippets/python-mode/asr | 7 + .../snippets/python-mode/class | 13 + .../snippets/python-mode/def | 7 + .../snippets/python-mode/defs | 7 + .../snippets/python-mode/enc | 6 + .../snippets/python-mode/env | 6 + .../snippets/python-mode/from | 7 + .../snippets/python-mode/pdb | 6 + .../snippets/python-mode/py3 | 7 + .../snippets/python-mode/super | 7 + elpa/f-20191110.1357/f-autoloads.el | 22 + elpa/f-20191110.1357/f-pkg.el | 2 + elpa/f-20191110.1357/f.el | 624 + elpa/f-20191110.1357/f.elc | Bin 0 -> 20520 bytes elpa/faceup-20170925.1946/faceup-autoloads.el | 57 + elpa/faceup-20170925.1946/faceup-pkg.el | 2 + elpa/faceup-20170925.1946/faceup.el | 1182 ++ elpa/faceup-20170925.1946/faceup.elc | Bin 0 -> 17366 bytes .../gherkin-mode-autoloads.el | 22 + .../gherkin-mode-pkg.el | 2 + .../gherkin-mode.el | 64 + .../gherkin-mode.elc | Bin 0 -> 3545 bytes .../git-commit-autoloads.el | 53 + .../git-commit-pkg.el | 2 + elpa/git-commit-20191116.2035/git-commit.el | 993 ++ elpa/git-commit-20191116.2035/git-commit.elc | Bin 0 -> 33210 bytes elpa/gnupg/pubring.kbx | Bin 0 -> 2413 bytes elpa/gnupg/trustdb.gpg | Bin 0 -> 1200 bytes .../highlight-indentation-autoloads.el | 41 + .../highlight-indentation-pkg.el | 2 + .../highlight-indentation.el | 313 + .../highlight-indentation.elc | Bin 0 -> 12256 bytes .../macrostep-autoloads.el | 67 + elpa/macrostep-20161120.2106/macrostep-c.el | 187 + elpa/macrostep-20161120.2106/macrostep-c.elc | Bin 0 -> 4658 bytes elpa/macrostep-20161120.2106/macrostep-pkg.el | 12 + elpa/macrostep-20161120.2106/macrostep.el | 1129 ++ elpa/macrostep-20161120.2106/macrostep.elc | Bin 0 -> 28992 bytes elpa/magit-20191122.2040/AUTHORS.md | 341 + elpa/magit-20191122.2040/LICENSE | 676 + elpa/magit-20191122.2040/dir | 18 + elpa/magit-20191122.2040/git-rebase.el | 818 + elpa/magit-20191122.2040/git-rebase.elc | Bin 0 -> 27987 bytes elpa/magit-20191122.2040/magit-apply.el | 739 + elpa/magit-20191122.2040/magit-apply.elc | Bin 0 -> 31993 bytes elpa/magit-20191122.2040/magit-autoloads.el | 2510 +++ elpa/magit-20191122.2040/magit-autorevert.el | 258 + elpa/magit-20191122.2040/magit-autorevert.elc | Bin 0 -> 12107 bytes elpa/magit-20191122.2040/magit-bisect.el | 239 + elpa/magit-20191122.2040/magit-bisect.elc | Bin 0 -> 15636 bytes elpa/magit-20191122.2040/magit-blame.el | 954 ++ elpa/magit-20191122.2040/magit-blame.elc | Bin 0 -> 37852 bytes elpa/magit-20191122.2040/magit-bookmark.el | 203 + elpa/magit-20191122.2040/magit-bookmark.elc | Bin 0 -> 5676 bytes elpa/magit-20191122.2040/magit-branch.el | 887 + elpa/magit-20191122.2040/magit-branch.elc | Bin 0 -> 37160 bytes elpa/magit-20191122.2040/magit-clone.el | 267 + elpa/magit-20191122.2040/magit-clone.elc | Bin 0 -> 11156 bytes elpa/magit-20191122.2040/magit-commit.el | 570 + elpa/magit-20191122.2040/magit-commit.elc | Bin 0 -> 22559 bytes elpa/magit-20191122.2040/magit-core.el | 126 + elpa/magit-20191122.2040/magit-core.elc | Bin 0 -> 2968 bytes elpa/magit-20191122.2040/magit-diff.el | 3162 ++++ elpa/magit-20191122.2040/magit-diff.elc | Bin 0 -> 156338 bytes elpa/magit-20191122.2040/magit-ediff.el | 509 + elpa/magit-20191122.2040/magit-ediff.elc | Bin 0 -> 18902 bytes elpa/magit-20191122.2040/magit-extras.el | 649 + elpa/magit-20191122.2040/magit-extras.elc | Bin 0 -> 22004 bytes elpa/magit-20191122.2040/magit-fetch.el | 186 + elpa/magit-20191122.2040/magit-fetch.elc | Bin 0 -> 7101 bytes elpa/magit-20191122.2040/magit-files.el | 558 + elpa/magit-20191122.2040/magit-files.elc | Bin 0 -> 26952 bytes elpa/magit-20191122.2040/magit-git.el | 2302 +++ elpa/magit-20191122.2040/magit-git.elc | Bin 0 -> 91005 bytes elpa/magit-20191122.2040/magit-gitignore.el | 197 + elpa/magit-20191122.2040/magit-gitignore.elc | Bin 0 -> 7378 bytes elpa/magit-20191122.2040/magit-imenu.el | 245 + elpa/magit-20191122.2040/magit-imenu.elc | Bin 0 -> 6830 bytes elpa/magit-20191122.2040/magit-log.el | 1774 ++ elpa/magit-20191122.2040/magit-log.elc | Bin 0 -> 98207 bytes elpa/magit-20191122.2040/magit-margin.el | 241 + elpa/magit-20191122.2040/magit-margin.elc | Bin 0 -> 8237 bytes elpa/magit-20191122.2040/magit-merge.el | 302 + elpa/magit-20191122.2040/magit-merge.elc | Bin 0 -> 13563 bytes elpa/magit-20191122.2040/magit-mode.el | 1549 ++ elpa/magit-20191122.2040/magit-mode.elc | Bin 0 -> 59591 bytes elpa/magit-20191122.2040/magit-notes.el | 200 + elpa/magit-20191122.2040/magit-notes.elc | Bin 0 -> 9045 bytes elpa/magit-20191122.2040/magit-obsolete.el | 106 + elpa/magit-20191122.2040/magit-obsolete.elc | Bin 0 -> 3795 bytes elpa/magit-20191122.2040/magit-patch.el | 267 + elpa/magit-20191122.2040/magit-patch.elc | Bin 0 -> 13403 bytes elpa/magit-20191122.2040/magit-pkg.el | 12 + elpa/magit-20191122.2040/magit-process.el | 1154 ++ elpa/magit-20191122.2040/magit-process.elc | Bin 0 -> 45899 bytes elpa/magit-20191122.2040/magit-pull.el | 163 + elpa/magit-20191122.2040/magit-pull.elc | Bin 0 -> 6144 bytes elpa/magit-20191122.2040/magit-push.el | 319 + elpa/magit-20191122.2040/magit-push.elc | Bin 0 -> 12261 bytes elpa/magit-20191122.2040/magit-reflog.el | 213 + elpa/magit-20191122.2040/magit-reflog.elc | Bin 0 -> 9998 bytes elpa/magit-20191122.2040/magit-refs.el | 757 + elpa/magit-20191122.2040/magit-refs.elc | Bin 0 -> 40256 bytes elpa/magit-20191122.2040/magit-remote.el | 341 + elpa/magit-20191122.2040/magit-remote.elc | Bin 0 -> 14859 bytes elpa/magit-20191122.2040/magit-repos.el | 339 + elpa/magit-20191122.2040/magit-repos.elc | Bin 0 -> 14542 bytes elpa/magit-20191122.2040/magit-reset.el | 127 + elpa/magit-20191122.2040/magit-reset.elc | Bin 0 -> 5544 bytes elpa/magit-20191122.2040/magit-section.el | 1666 ++ elpa/magit-20191122.2040/magit-section.elc | Bin 0 -> 62655 bytes elpa/magit-20191122.2040/magit-sequence.el | 1029 ++ elpa/magit-20191122.2040/magit-sequence.elc | Bin 0 -> 52139 bytes elpa/magit-20191122.2040/magit-stash.el | 546 + elpa/magit-20191122.2040/magit-stash.elc | Bin 0 -> 35517 bytes elpa/magit-20191122.2040/magit-status.el | 793 + elpa/magit-20191122.2040/magit-status.elc | Bin 0 -> 57132 bytes elpa/magit-20191122.2040/magit-submodule.el | 665 + elpa/magit-20191122.2040/magit-submodule.elc | Bin 0 -> 38467 bytes elpa/magit-20191122.2040/magit-subtree.el | 182 + elpa/magit-20191122.2040/magit-subtree.elc | Bin 0 -> 9095 bytes elpa/magit-20191122.2040/magit-tag.el | 193 + elpa/magit-20191122.2040/magit-tag.elc | Bin 0 -> 7151 bytes elpa/magit-20191122.2040/magit-transient.el | 202 + elpa/magit-20191122.2040/magit-transient.elc | Bin 0 -> 8360 bytes elpa/magit-20191122.2040/magit-utils.el | 1205 ++ elpa/magit-20191122.2040/magit-utils.elc | Bin 0 -> 40322 bytes elpa/magit-20191122.2040/magit-wip.el | 432 + elpa/magit-20191122.2040/magit-wip.elc | Bin 0 -> 26804 bytes elpa/magit-20191122.2040/magit-worktree.el | 184 + elpa/magit-20191122.2040/magit-worktree.elc | Bin 0 -> 8598 bytes elpa/magit-20191122.2040/magit.el | 596 + elpa/magit-20191122.2040/magit.elc | Bin 0 -> 20434 bytes elpa/magit-20191122.2040/magit.info | 189 + elpa/magit-20191122.2040/magit.info-1 | 7784 +++++++++ elpa/magit-20191122.2040/magit.info-2 | 3497 ++++ .../nord-theme-autoloads.el | 24 + .../nord-theme-pkg.el | 2 + elpa/nord-theme-20190616.1757/nord-theme.el | 699 + .../ob-http-autoloads.el | 33 + elpa/ob-http-20180707.1448/ob-http-mode.el | 66 + elpa/ob-http-20180707.1448/ob-http-mode.elc | Bin 0 -> 3613 bytes elpa/ob-http-20180707.1448/ob-http-pkg.el | 11 + elpa/ob-http-20180707.1448/ob-http.el | 287 + elpa/ob-http-20180707.1448/ob-http.elc | Bin 0 -> 21676 bytes elpa/ob-ipython-20180224.953/client.py | 87 + .../ob-ipython-autoloads.el | 26 + .../ob-ipython-20180224.953/ob-ipython-pkg.el | 16 + elpa/ob-ipython-20180224.953/ob-ipython.el | 734 + elpa/ob-ipython-20180224.953/ob-ipython.elc | Bin 0 -> 24001 bytes .../ob-restclient-autoloads.el | 28 + .../ob-restclient-pkg.el | 2 + .../ob-restclient.el | 113 + .../ob-restclient.elc | Bin 0 -> 2854 bytes .../ox-nikola-autoloads.el | 43 + elpa/ox-nikola-20151114.1116/ox-nikola-pkg.el | 2 + elpa/ox-nikola-20151114.1116/ox-nikola.el | 282 + elpa/ox-nikola-20151114.1116/ox-nikola.elc | Bin 0 -> 6984 bytes elpa/ox-rst-20191013.551/ox-rst-autoloads.el | 90 + elpa/ox-rst-20191013.551/ox-rst-pkg.el | 2 + elpa/ox-rst-20191013.551/ox-rst.el | 1743 ++ elpa/ox-rst-20191013.551/ox-rst.elc | Bin 0 -> 55169 bytes .../powershell-autoloads.el | 53 + .../powershell-pkg.el | 2 + elpa/powershell-20190421.2038/powershell.el | 1386 ++ elpa/powershell-20190421.2038/powershell.elc | Bin 0 -> 33635 bytes .../docstring_wrap.py | 664 + .../python-docstring-autoloads.el | 45 + .../python-docstring-pkg.el | 4 + .../python-docstring.el | 182 + .../python-docstring.elc | Bin 0 -> 6203 bytes elpa/pyvenv-20191006.1304/pyvenv-autoloads.el | 82 + elpa/pyvenv-20191006.1304/pyvenv-pkg.el | 2 + elpa/pyvenv-20191006.1304/pyvenv.el | 556 + elpa/pyvenv-20191006.1304/pyvenv.elc | Bin 0 -> 18765 bytes elpa/racket-mode-20191112.1417/dir | 18 + .../racket-bug-report.el | 86 + .../racket-bug-report.elc | Bin 0 -> 2645 bytes .../racket-collection.el | 335 + .../racket-collection.elc | Bin 0 -> 8625 bytes .../racket-common.el | 405 + .../racket-common.elc | Bin 0 -> 10324 bytes .../racket-complete.el | 305 + .../racket-complete.elc | Bin 0 -> 12075 bytes .../racket-custom.el | 431 + .../racket-custom.elc | Bin 0 -> 14607 bytes .../racket-mode-20191112.1417/racket-debug.el | 317 + .../racket-debug.elc | Bin 0 -> 12517 bytes elpa/racket-mode-20191112.1417/racket-edit.el | 896 + .../racket-mode-20191112.1417/racket-edit.elc | Bin 0 -> 29896 bytes .../racket-font-lock.el | 352 + .../racket-font-lock.elc | Bin 0 -> 47126 bytes .../racket-mode-20191112.1417/racket-imenu.el | 89 + .../racket-imenu.elc | Bin 0 -> 2304 bytes .../racket-indent.el | 506 + .../racket-indent.elc | Bin 0 -> 12407 bytes .../racket-keywords-and-builtins.el | 2819 ++++ .../racket-keywords-and-builtins.elc | Bin 0 -> 50837 bytes .../racket-logger.el | 262 + .../racket-logger.elc | Bin 0 -> 10943 bytes .../racket-mode-autoloads.el | 349 + .../racket-mode-pkg.el | 11 + elpa/racket-mode-20191112.1417/racket-mode.el | 187 + .../racket-mode-20191112.1417/racket-mode.elc | Bin 0 -> 7406 bytes .../racket-mode.info | 2304 +++ .../racket-parens.el | 166 + .../racket-parens.elc | Bin 0 -> 4585 bytes elpa/racket-mode-20191112.1417/racket-ppss.el | 79 + .../racket-mode-20191112.1417/racket-ppss.elc | Bin 0 -> 2705 bytes .../racket-profile.el | 173 + .../racket-profile.elc | Bin 0 -> 7327 bytes elpa/racket-mode-20191112.1417/racket-repl.el | 810 + .../racket-mode-20191112.1417/racket-repl.elc | Bin 0 -> 31043 bytes .../racket-smart-open.el | 253 + .../racket-smart-open.elc | Bin 0 -> 7025 bytes .../racket-stepper.el | 199 + .../racket-stepper.elc | Bin 0 -> 8164 bytes .../racket-unicode-input-method.el | 256 + .../racket-unicode-input-method.elc | Bin 0 -> 11664 bytes elpa/racket-mode-20191112.1417/racket-util.el | 160 + .../racket-mode-20191112.1417/racket-util.elc | Bin 0 -> 5044 bytes elpa/racket-mode-20191112.1417/racket-wsl.el | 53 + elpa/racket-mode-20191112.1417/racket-wsl.elc | Bin 0 -> 1581 bytes .../racket/channel.rkt | 70 + .../racket/command-server.rkt | 235 + .../racket/commands/check-syntax.rkt | 61 + .../racket/commands/coverage.rkt | 50 + .../racket/commands/describe.rkt | 73 + .../racket/commands/find-module.rkt | 46 + .../racket/commands/help.rkt | 120 + .../racket/commands/macro.rkt | 125 + .../racket/commands/profile.rkt | 19 + .../racket/commands/requires.rkt | 459 + .../racket/debug-annotator.rkt | 381 + .../racket/debug.rkt | 339 + .../racket/elisp.rkt | 58 + .../racket/error.rkt | 210 + .../racket/example/example.rkt | 320 + .../racket/example/example.rkt.faceup | 320 + .../racket/example/indent.rkt | 325 + .../racket/example/indent.rkt.faceup | 325 + .../racket/find-module-path-completions.rkt | 45 + .../racket-mode-20191112.1417/racket/find.rkt | 235 + .../racket/fresh-line.rkt | 37 + elpa/racket-mode-20191112.1417/racket/gui.rkt | 42 + .../racket/image.rkt | 26 + .../racket/instrument.rkt | 225 + .../racket/interactions.rkt | 84 + .../racket/keywords.rkt | 98 + .../racket/logger.rkt | 93 + elpa/racket-mode-20191112.1417/racket/md5.rkt | 8 + elpa/racket-mode-20191112.1417/racket/mod.rkt | 151 + .../racket/namespace.rkt | 270 + .../racket/print.rkt | 41 + elpa/racket-mode-20191112.1417/racket/run.rkt | 257 + .../racket/scribble.rkt | 176 + .../racket/syntax.rkt | 100 + .../racket/test/find-examples.rkt | 55 + .../racket/test/find.rkt | 121 + .../racket-mode-20191112.1417/racket/util.rkt | 39 + .../racket/welcome.rkt | 19 + .../request-autoloads.el | 22 + elpa/request-20191122.1416/request-pkg.el | 2 + elpa/request-20191122.1416/request.el | 1267 ++ elpa/request-20191122.1416/request.elc | Bin 0 -> 67100 bytes .../restclient-autoloads.el | 44 + .../restclient-pkg.el | 2 + elpa/restclient-20191009.1208/restclient.el | 631 + elpa/restclient-20191009.1208/restclient.elc | Bin 0 -> 23829 bytes .../restclient-test-autoloads.el | 43 + .../restclient-test-pkg.el | 2 + .../restclient-test.el | 146 + .../restclient-test.elc | Bin 0 -> 5617 bytes elpa/s-20180406.808/s-autoloads.el | 22 + elpa/s-20180406.808/s-pkg.el | 2 + elpa/s-20180406.808/s.el | 747 + elpa/s-20180406.808/s.elc | Bin 0 -> 28329 bytes elpa/slime-20191114.1625/contrib/README.md | 14 + elpa/slime-20191114.1625/contrib/bridge.el | 472 + elpa/slime-20191114.1625/contrib/bridge.elc | Bin 0 -> 9009 bytes .../contrib/inferior-slime.el | 133 + .../contrib/inferior-slime.elc | Bin 0 -> 6114 bytes .../slime-20191114.1625/contrib/slime-asdf.el | 313 + .../contrib/slime-asdf.elc | Bin 0 -> 15831 bytes .../contrib/slime-autodoc.el | 216 + .../contrib/slime-autodoc.elc | Bin 0 -> 9085 bytes .../contrib/slime-banner.el | 35 + .../contrib/slime-banner.elc | Bin 0 -> 1825 bytes .../contrib/slime-buffer-streams.el | 36 + .../contrib/slime-buffer-streams.elc | Bin 0 -> 2004 bytes .../contrib/slime-c-p-c.el | 305 + .../contrib/slime-c-p-c.elc | Bin 0 -> 10903 bytes .../contrib/slime-cl-indent.el | 1821 ++ .../contrib/slime-cl-indent.elc | Bin 0 -> 40324 bytes .../contrib/slime-clipboard.el | 172 + .../contrib/slime-clipboard.elc | Bin 0 -> 8345 bytes .../contrib/slime-compiler-notes-tree.el | 184 + .../contrib/slime-compiler-notes-tree.elc | Bin 0 -> 19100 bytes .../contrib/slime-editing-commands.el | 183 + .../contrib/slime-editing-commands.elc | Bin 0 -> 5665 bytes .../contrib/slime-enclosing-context.el | 226 + .../contrib/slime-enclosing-context.elc | Bin 0 -> 7340 bytes .../contrib/slime-fancy-inspector.el | 42 + .../contrib/slime-fancy-inspector.elc | Bin 0 -> 2120 bytes .../contrib/slime-fancy-trace.el | 68 + .../contrib/slime-fancy-trace.elc | Bin 0 -> 2835 bytes .../contrib/slime-fancy.el | 38 + .../contrib/slime-fancy.elc | Bin 0 -> 2707 bytes .../contrib/slime-fontifying-fu.el | 231 + .../contrib/slime-fontifying-fu.elc | Bin 0 -> 6876 bytes .../contrib/slime-fuzzy.el | 604 + .../contrib/slime-fuzzy.elc | Bin 0 -> 24742 bytes .../contrib/slime-highlight-edits.el | 81 + .../contrib/slime-highlight-edits.elc | Bin 0 -> 4654 bytes .../contrib/slime-hyperdoc.el | 48 + .../contrib/slime-hyperdoc.elc | Bin 0 -> 2185 bytes .../contrib/slime-indentation.el | 31 + .../contrib/slime-indentation.elc | Bin 0 -> 1513 bytes .../contrib/slime-listener-hooks.el | 11 + .../contrib/slime-listener-hooks.elc | Bin 0 -> 1082 bytes .../contrib/slime-macrostep.el | 129 + .../contrib/slime-macrostep.elc | Bin 0 -> 4416 bytes .../contrib/slime-mdot-fu.el | 31 + .../contrib/slime-mdot-fu.elc | Bin 0 -> 1773 bytes .../contrib/slime-media.el | 46 + .../contrib/slime-media.elc | Bin 0 -> 2634 bytes .../contrib/slime-mrepl.el | 150 + .../contrib/slime-mrepl.elc | Bin 0 -> 8543 bytes .../contrib/slime-package-fu.el | 320 + .../contrib/slime-package-fu.elc | Bin 0 -> 11011 bytes .../contrib/slime-parse.el | 358 + .../contrib/slime-parse.elc | Bin 0 -> 10811 bytes .../contrib/slime-presentation-streams.el | 18 + .../contrib/slime-presentation-streams.elc | Bin 0 -> 1307 bytes .../contrib/slime-presentations.el | 872 + .../contrib/slime-presentations.elc | Bin 0 -> 37143 bytes .../contrib/slime-quicklisp.el | 51 + .../contrib/slime-quicklisp.elc | Bin 0 -> 2714 bytes .../contrib/slime-references.el | 156 + .../contrib/slime-references.elc | Bin 0 -> 6423 bytes .../slime-20191114.1625/contrib/slime-repl.el | 1805 ++ .../contrib/slime-repl.elc | Bin 0 -> 78118 bytes .../contrib/slime-sbcl-exts.el | 34 + .../contrib/slime-sbcl-exts.elc | Bin 0 -> 2085 bytes .../contrib/slime-scheme.el | 40 + .../contrib/slime-scheme.elc | Bin 0 -> 1215 bytes .../contrib/slime-scratch.el | 48 + .../contrib/slime-scratch.elc | Bin 0 -> 2255 bytes .../contrib/slime-snapshot.el | 34 + .../contrib/slime-snapshot.elc | Bin 0 -> 1707 bytes .../contrib/slime-sprof.el | 224 + .../contrib/slime-sprof.elc | Bin 0 -> 9956 bytes .../contrib/slime-trace-dialog.el | 837 + .../contrib/slime-trace-dialog.elc | Bin 0 -> 52508 bytes .../contrib/slime-tramp.el | 121 + .../contrib/slime-tramp.elc | Bin 0 -> 5201 bytes .../contrib/slime-typeout-frame.el | 92 + .../contrib/slime-typeout-frame.elc | Bin 0 -> 4028 bytes .../contrib/slime-xref-browser.el | 99 + .../contrib/slime-xref-browser.elc | Bin 0 -> 3989 bytes .../contrib/swank-arglists.lisp | 1620 ++ .../contrib/swank-asdf.lisp | 541 + .../contrib/swank-buffer-streams.lisp | 39 + .../contrib/swank-c-p-c.lisp | 298 + .../contrib/swank-clipboard.lisp | 71 + .../contrib/swank-fancy-inspector.lisp | 1006 ++ .../contrib/swank-fuzzy.lisp | 706 + .../slime-20191114.1625/contrib/swank-goo.goo | 995 ++ .../contrib/swank-hyperdoc.lisp | 18 + .../contrib/swank-ikarus.ss | 86 + .../contrib/swank-indentation.lisp | 140 + elpa/slime-20191114.1625/contrib/swank-jolt.k | 998 ++ .../contrib/swank-kawa.scm | 2504 +++ .../contrib/swank-larceny.scm | 176 + .../contrib/swank-listener-hooks.lisp | 91 + .../contrib/swank-macrostep.lisp | 227 + .../contrib/swank-media.lisp | 25 + .../contrib/swank-mit-scheme.scm | 870 + .../contrib/swank-mlworks.sml | 348 + .../contrib/swank-mrepl.lisp | 162 + .../contrib/swank-package-fu.lisp | 65 + .../contrib/swank-presentation-streams.lisp | 334 + .../contrib/swank-presentations.lisp | 246 + .../contrib/swank-quicklisp.lisp | 17 + .../contrib/swank-r6rs.scm | 416 + .../contrib/swank-repl.lisp | 441 + .../contrib/swank-sbcl-exts.lisp | 67 + .../contrib/swank-snapshot.lisp | 67 + .../contrib/swank-sprof.lisp | 154 + .../contrib/swank-trace-dialog.lisp | 264 + .../contrib/swank-util.lisp | 63 + elpa/slime-20191114.1625/contrib/swank.rb | 385 + elpa/slime-20191114.1625/dir | 18 + elpa/slime-20191114.1625/lib/hyperspec.el | 2511 +++ elpa/slime-20191114.1625/lib/hyperspec.elc | Bin 0 -> 84726 bytes elpa/slime-20191114.1625/metering.lisp | 1213 ++ elpa/slime-20191114.1625/nregex.lisp | 523 + elpa/slime-20191114.1625/packages.lisp | 202 + .../sbcl-pprint-patch.lisp | 332 + elpa/slime-20191114.1625/slime-autoloads.el | 69 + elpa/slime-20191114.1625/slime-pkg.el | 9 + elpa/slime-20191114.1625/slime-tests.el | 1459 ++ elpa/slime-20191114.1625/slime-tests.elc | Bin 0 -> 97170 bytes elpa/slime-20191114.1625/slime.el | 7659 +++++++++ elpa/slime-20191114.1625/slime.elc | Bin 0 -> 322979 bytes elpa/slime-20191114.1625/slime.info | 3740 +++++ elpa/slime-20191114.1625/start-swank.lisp | 20 + elpa/slime-20191114.1625/swank-loader.lisp | 376 + elpa/slime-20191114.1625/swank.asd | 36 + elpa/slime-20191114.1625/swank.lisp | 3800 +++++ elpa/slime-20191114.1625/swank/abcl.lisp | 1533 ++ elpa/slime-20191114.1625/swank/allegro.lisp | 1070 ++ elpa/slime-20191114.1625/swank/backend.lisp | 1583 ++ elpa/slime-20191114.1625/swank/ccl.lisp | 868 + elpa/slime-20191114.1625/swank/clasp.lisp | 804 + elpa/slime-20191114.1625/swank/clisp.lisp | 930 ++ elpa/slime-20191114.1625/swank/cmucl.lisp | 2470 +++ elpa/slime-20191114.1625/swank/corman.lisp | 583 + elpa/slime-20191114.1625/swank/ecl.lisp | 1098 ++ elpa/slime-20191114.1625/swank/gray.lisp | 207 + elpa/slime-20191114.1625/swank/lispworks.lisp | 1020 ++ elpa/slime-20191114.1625/swank/match.lisp | 242 + elpa/slime-20191114.1625/swank/mezzano.lisp | 700 + elpa/slime-20191114.1625/swank/mkcl.lisp | 933 ++ elpa/slime-20191114.1625/swank/rpc.lisp | 162 + elpa/slime-20191114.1625/swank/sbcl.lisp | 2031 +++ elpa/slime-20191114.1625/swank/scl.lisp | 1726 ++ .../swank/source-file-cache.lisp | 136 + .../swank/source-path-parser.lisp | 239 + elpa/slime-20191114.1625/xref.lisp | 2906 ++++ .../sphinx-doc-autoloads.el | 27 + .../sphinx-doc-pkg.el | 2 + elpa/sphinx-doc-20160116.1117/sphinx-doc.el | 455 + elpa/sphinx-doc-20160116.1117/sphinx-doc.elc | Bin 0 -> 32908 bytes .../sphinx-frontend-autoloads.el | 50 + .../sphinx-frontend-pkg.el | 2 + .../sphinx-frontend.el | 123 + .../sphinx-frontend.elc | Bin 0 -> 3916 bytes .../sphinx-mode-autoloads.el | 38 + .../sphinx-mode-pkg.el | 6 + elpa/sphinx-mode-20180620.915/sphinx-mode.el | 166 + elpa/sphinx-mode-20180620.915/sphinx-mode.elc | Bin 0 -> 6046 bytes elpa/sphinx-mode-20180620.915/sphinx-src.el | 90 + elpa/sphinx-mode-20180620.915/sphinx-src.elc | Bin 0 -> 2386 bytes elpa/transient-20191122.1957/dir | 18 + .../transient-autoloads.el | 26 + elpa/transient-20191122.1957/transient-pkg.el | 12 + elpa/transient-20191122.1957/transient.el | 3158 ++++ elpa/transient-20191122.1957/transient.elc | Bin 0 -> 125525 bytes elpa/transient-20191122.1957/transient.info | 2431 +++ .../typescript-mode-autoloads.el | 49 + .../typescript-mode-pkg.el | 8 + .../typescript-mode-test-utilities.el | 63 + .../typescript-mode-test-utilities.elc | Bin 0 -> 3515 bytes .../typescript-mode.el | 2878 ++++ .../typescript-mode.elc | Bin 0 -> 79994 bytes .../web-mode-autoloads.el | 27 + elpa/web-mode-20191104.1859/web-mode-pkg.el | 2 + elpa/web-mode-20191104.1859/web-mode.el | 13950 ++++++++++++++++ elpa/web-mode-20191104.1859/web-mode.elc | Bin 0 -> 322428 bytes elpa/with-editor-20191105.2250/dir | 18 + .../with-editor-autoloads.el | 99 + .../with-editor-pkg.el | 13 + elpa/with-editor-20191105.2250/with-editor.el | 873 + .../with-editor-20191105.2250/with-editor.elc | Bin 0 -> 31934 bytes .../with-editor.info | 343 + .../yaml-mode-autoloads.el | 33 + elpa/yaml-mode-20190625.1740/yaml-mode-pkg.el | 2 + elpa/yaml-mode-20190625.1740/yaml-mode.el | 472 + elpa/yaml-mode-20190625.1740/yaml-mode.elc | Bin 0 -> 14097 bytes .../yasnippet-autoloads.el | 61 + elpa/yasnippet-20191030.1331/yasnippet-pkg.el | 2 + elpa/yasnippet-20191030.1331/yasnippet.el | 5290 ++++++ elpa/yasnippet-20191030.1331/yasnippet.elc | Bin 0 -> 234010 bytes 765 files changed, 206392 insertions(+) create mode 100644 elpa/archives/gnu/archive-contents create mode 100644 elpa/archives/gnu/archive-contents.signed create mode 100644 elpa/archives/melpa/archive-contents create mode 100644 elpa/async-20191030.2138/async-autoloads.el create mode 100644 elpa/async-20191030.2138/async-bytecomp.el create mode 100644 elpa/async-20191030.2138/async-bytecomp.elc create mode 100644 elpa/async-20191030.2138/async-pkg.el create mode 100644 elpa/async-20191030.2138/async.el create mode 100644 elpa/async-20191030.2138/async.elc create mode 100644 elpa/async-20191030.2138/dired-async.el create mode 100644 elpa/async-20191030.2138/dired-async.elc create mode 100644 elpa/async-20191030.2138/smtpmail-async.el create mode 100644 elpa/async-20191030.2138/smtpmail-async.elc create mode 100644 elpa/berrys-theme-20191106.1423/berrys-theme-autoloads.el create mode 100644 elpa/berrys-theme-20191106.1423/berrys-theme-pkg.el create mode 100644 elpa/berrys-theme-20191106.1423/berrys-theme.el create mode 100644 elpa/company-20191114.1356/company-abbrev.el create mode 100644 elpa/company-20191114.1356/company-abbrev.elc create mode 100644 elpa/company-20191114.1356/company-autoloads.el create mode 100644 elpa/company-20191114.1356/company-bbdb.el create mode 100644 elpa/company-20191114.1356/company-bbdb.elc create mode 100644 elpa/company-20191114.1356/company-capf.el create mode 100644 elpa/company-20191114.1356/company-capf.elc create mode 100644 elpa/company-20191114.1356/company-clang.el create mode 100644 elpa/company-20191114.1356/company-clang.elc create mode 100644 elpa/company-20191114.1356/company-cmake.el create mode 100644 elpa/company-20191114.1356/company-cmake.elc create mode 100644 elpa/company-20191114.1356/company-css.el create mode 100644 elpa/company-20191114.1356/company-css.elc create mode 100644 elpa/company-20191114.1356/company-dabbrev-code.el create mode 100644 elpa/company-20191114.1356/company-dabbrev-code.elc create mode 100644 elpa/company-20191114.1356/company-dabbrev.el create mode 100644 elpa/company-20191114.1356/company-dabbrev.elc create mode 100644 elpa/company-20191114.1356/company-eclim.el create mode 100644 elpa/company-20191114.1356/company-eclim.elc create mode 100644 elpa/company-20191114.1356/company-elisp.el create mode 100644 elpa/company-20191114.1356/company-elisp.elc create mode 100644 elpa/company-20191114.1356/company-etags.el create mode 100644 elpa/company-20191114.1356/company-etags.elc create mode 100644 elpa/company-20191114.1356/company-files.el create mode 100644 elpa/company-20191114.1356/company-files.elc create mode 100644 elpa/company-20191114.1356/company-gtags.el create mode 100644 elpa/company-20191114.1356/company-gtags.elc create mode 100644 elpa/company-20191114.1356/company-ispell.el create mode 100644 elpa/company-20191114.1356/company-ispell.elc create mode 100644 elpa/company-20191114.1356/company-keywords.el create mode 100644 elpa/company-20191114.1356/company-keywords.elc create mode 100644 elpa/company-20191114.1356/company-nxml.el create mode 100644 elpa/company-20191114.1356/company-nxml.elc create mode 100644 elpa/company-20191114.1356/company-oddmuse.el create mode 100644 elpa/company-20191114.1356/company-oddmuse.elc create mode 100644 elpa/company-20191114.1356/company-pkg.el create mode 100644 elpa/company-20191114.1356/company-semantic.el create mode 100644 elpa/company-20191114.1356/company-semantic.elc create mode 100644 elpa/company-20191114.1356/company-template.el create mode 100644 elpa/company-20191114.1356/company-template.elc create mode 100644 elpa/company-20191114.1356/company-tempo.el create mode 100644 elpa/company-20191114.1356/company-tempo.elc create mode 100644 elpa/company-20191114.1356/company-tng.el create mode 100644 elpa/company-20191114.1356/company-tng.elc create mode 100644 elpa/company-20191114.1356/company-xcode.el create mode 100644 elpa/company-20191114.1356/company-xcode.elc create mode 100644 elpa/company-20191114.1356/company-yasnippet.el create mode 100644 elpa/company-20191114.1356/company-yasnippet.elc create mode 100644 elpa/company-20191114.1356/company.el create mode 100644 elpa/company-20191114.1356/company.elc create mode 100644 elpa/dash-20191109.1327/dash-autoloads.el create mode 100644 elpa/dash-20191109.1327/dash-pkg.el create mode 100644 elpa/dash-20191109.1327/dash.el create mode 100644 elpa/dash-20191109.1327/dash.elc create mode 100644 elpa/dash-functional-20191109.1327/dash-functional-autoloads.el create mode 100644 elpa/dash-functional-20191109.1327/dash-functional-pkg.el create mode 100644 elpa/dash-functional-20191109.1327/dash-functional.el create mode 100644 elpa/dash-functional-20191109.1327/dash-functional.elc create mode 100644 elpa/elpy-20191120.1927/elpy-autoloads.el create mode 100644 elpa/elpy-20191120.1927/elpy-django.el create mode 100644 elpa/elpy-20191120.1927/elpy-django.elc create mode 100644 elpa/elpy-20191120.1927/elpy-pkg.el create mode 100644 elpa/elpy-20191120.1927/elpy-profile.el create mode 100644 elpa/elpy-20191120.1927/elpy-profile.elc create mode 100644 elpa/elpy-20191120.1927/elpy-refactor.el create mode 100644 elpa/elpy-20191120.1927/elpy-refactor.elc create mode 100644 elpa/elpy-20191120.1927/elpy-rpc.el create mode 100644 elpa/elpy-20191120.1927/elpy-rpc.elc create mode 100644 elpa/elpy-20191120.1927/elpy-shell.el create mode 100644 elpa/elpy-20191120.1927/elpy-shell.elc create mode 100644 elpa/elpy-20191120.1927/elpy.el create mode 100644 elpa/elpy-20191120.1927/elpy.elc create mode 100644 elpa/elpy-20191120.1927/elpy/__init__.py create mode 100644 elpa/elpy-20191120.1927/elpy/__main__.py create mode 100644 elpa/elpy-20191120.1927/elpy/auto_pep8.py create mode 100644 elpa/elpy-20191120.1927/elpy/blackutil.py create mode 100644 elpa/elpy-20191120.1927/elpy/compat.py create mode 100644 elpa/elpy-20191120.1927/elpy/jedibackend.py create mode 100644 elpa/elpy-20191120.1927/elpy/pydocutils.py create mode 100644 elpa/elpy-20191120.1927/elpy/refactor.py create mode 100644 elpa/elpy-20191120.1927/elpy/rpc.py create mode 100644 elpa/elpy-20191120.1927/elpy/server.py create mode 100644 elpa/elpy-20191120.1927/elpy/tests/__init__.py create mode 100644 elpa/elpy-20191120.1927/elpy/tests/compat.py create mode 100644 elpa/elpy-20191120.1927/elpy/tests/support.py create mode 100644 elpa/elpy-20191120.1927/elpy/tests/test_auto_pep8.py create mode 100644 elpa/elpy-20191120.1927/elpy/tests/test_black.py create mode 100644 elpa/elpy-20191120.1927/elpy/tests/test_jedibackend.py create mode 100644 elpa/elpy-20191120.1927/elpy/tests/test_pydocutils.py create mode 100644 elpa/elpy-20191120.1927/elpy/tests/test_refactor.py create mode 100644 elpa/elpy-20191120.1927/elpy/tests/test_rpc.py create mode 100644 elpa/elpy-20191120.1927/elpy/tests/test_server.py create mode 100644 elpa/elpy-20191120.1927/elpy/tests/test_support.py create mode 100644 elpa/elpy-20191120.1927/elpy/tests/test_yapf.py create mode 100644 elpa/elpy-20191120.1927/elpy/yapfutil.py create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/.yas-setup.el create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/.yas-setup.elc create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__abs__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__add__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__and__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__bool__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__call__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__cmp__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__coerce__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__complex__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__contains__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__del__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__delattr__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__delete__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__delitem__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__div__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__divmod__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__enter__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__eq__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__exit__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__float__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__floordiv__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__ge__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__get__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__getattr__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__getattribute__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__getitem__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__gt__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__hash__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__hex__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__iadd__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__iand__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__idiv__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__ifloordiv__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__ilshift__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__imod__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__imul__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__index__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__init__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__instancecheck__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__int__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__invert__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__ior__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__ipow__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__irshift__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__isub__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__iter__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__itruediv__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__ixor__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__le__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__len__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__long__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__lshift__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__lt__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__mod__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__mul__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__ne__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__neg__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__new__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__nonzero__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__oct__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__or__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__pos__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__pow__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__radd__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__rand__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__rdivmod__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__repr__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__reversed__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__rfloordiv__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__rlshift__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__rmod__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__rmul__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__ror__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__rpow__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__rrshift__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__rshift__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__rsub__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__rtruediv__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__rxor__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__set__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__setattr__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__setitem__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__slots__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__str__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__sub__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__subclasscheck__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__truediv__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__unicode__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/__xor__ create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_abs create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_add create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_and create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_bool create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_call create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_cmp create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_coerce create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_complex create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_contains create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_del create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_delattr create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_delete create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_delitem create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_div create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_divmod create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_enter create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_eq create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_exit create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_float create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_floordiv create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_ge create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_get create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_getattr create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_getattribute create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_getitem create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_gt create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_hash create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_hex create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_iadd create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_iand create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_idiv create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_ifloordiv create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_ilshift create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_imod create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_imul create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_index create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_init create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_instancecheck create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_int create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_invert create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_ior create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_ipow create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_irshift create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_isub create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_iter create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_itruediv create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_ixor create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_le create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_len create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_long create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_lshift create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_lt create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_mod create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_mul create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_ne create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_neg create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_new create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_nonzero create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_oct create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_or create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_pos create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_pow create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_radd create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_rand create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_rdivmod create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_repr create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_reversed create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_rfloordiv create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_rlshift create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_rmod create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_rmul create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_ror create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_rpow create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_rrshift create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_rshift create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_rsub create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_rtruediv create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_rxor create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_set create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_setattr create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_setitem create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_slots create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_str create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_sub create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_subclasscheck create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_truediv create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_unicode create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/_xor create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/ase create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/asne create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/asr create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/class create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/def create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/defs create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/enc create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/env create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/from create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/pdb create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/py3 create mode 100644 elpa/elpy-20191120.1927/snippets/python-mode/super create mode 100644 elpa/f-20191110.1357/f-autoloads.el create mode 100644 elpa/f-20191110.1357/f-pkg.el create mode 100644 elpa/f-20191110.1357/f.el create mode 100644 elpa/f-20191110.1357/f.elc create mode 100644 elpa/faceup-20170925.1946/faceup-autoloads.el create mode 100644 elpa/faceup-20170925.1946/faceup-pkg.el create mode 100644 elpa/faceup-20170925.1946/faceup.el create mode 100644 elpa/faceup-20170925.1946/faceup.elc create mode 100644 elpa/gherkin-mode-20171224.1353/gherkin-mode-autoloads.el create mode 100644 elpa/gherkin-mode-20171224.1353/gherkin-mode-pkg.el create mode 100644 elpa/gherkin-mode-20171224.1353/gherkin-mode.el create mode 100644 elpa/gherkin-mode-20171224.1353/gherkin-mode.elc create mode 100644 elpa/git-commit-20191116.2035/git-commit-autoloads.el create mode 100644 elpa/git-commit-20191116.2035/git-commit-pkg.el create mode 100644 elpa/git-commit-20191116.2035/git-commit.el create mode 100644 elpa/git-commit-20191116.2035/git-commit.elc create mode 100644 elpa/gnupg/pubring.kbx create mode 100644 elpa/gnupg/trustdb.gpg create mode 100644 elpa/highlight-indentation-20181204.839/highlight-indentation-autoloads.el create mode 100644 elpa/highlight-indentation-20181204.839/highlight-indentation-pkg.el create mode 100644 elpa/highlight-indentation-20181204.839/highlight-indentation.el create mode 100644 elpa/highlight-indentation-20181204.839/highlight-indentation.elc create mode 100644 elpa/macrostep-20161120.2106/macrostep-autoloads.el create mode 100644 elpa/macrostep-20161120.2106/macrostep-c.el create mode 100644 elpa/macrostep-20161120.2106/macrostep-c.elc create mode 100644 elpa/macrostep-20161120.2106/macrostep-pkg.el create mode 100644 elpa/macrostep-20161120.2106/macrostep.el create mode 100644 elpa/macrostep-20161120.2106/macrostep.elc create mode 100644 elpa/magit-20191122.2040/AUTHORS.md create mode 100644 elpa/magit-20191122.2040/LICENSE create mode 100644 elpa/magit-20191122.2040/dir create mode 100644 elpa/magit-20191122.2040/git-rebase.el create mode 100644 elpa/magit-20191122.2040/git-rebase.elc create mode 100644 elpa/magit-20191122.2040/magit-apply.el create mode 100644 elpa/magit-20191122.2040/magit-apply.elc create mode 100644 elpa/magit-20191122.2040/magit-autoloads.el create mode 100644 elpa/magit-20191122.2040/magit-autorevert.el create mode 100644 elpa/magit-20191122.2040/magit-autorevert.elc create mode 100644 elpa/magit-20191122.2040/magit-bisect.el create mode 100644 elpa/magit-20191122.2040/magit-bisect.elc create mode 100644 elpa/magit-20191122.2040/magit-blame.el create mode 100644 elpa/magit-20191122.2040/magit-blame.elc create mode 100644 elpa/magit-20191122.2040/magit-bookmark.el create mode 100644 elpa/magit-20191122.2040/magit-bookmark.elc create mode 100644 elpa/magit-20191122.2040/magit-branch.el create mode 100644 elpa/magit-20191122.2040/magit-branch.elc create mode 100644 elpa/magit-20191122.2040/magit-clone.el create mode 100644 elpa/magit-20191122.2040/magit-clone.elc create mode 100644 elpa/magit-20191122.2040/magit-commit.el create mode 100644 elpa/magit-20191122.2040/magit-commit.elc create mode 100644 elpa/magit-20191122.2040/magit-core.el create mode 100644 elpa/magit-20191122.2040/magit-core.elc create mode 100644 elpa/magit-20191122.2040/magit-diff.el create mode 100644 elpa/magit-20191122.2040/magit-diff.elc create mode 100644 elpa/magit-20191122.2040/magit-ediff.el create mode 100644 elpa/magit-20191122.2040/magit-ediff.elc create mode 100644 elpa/magit-20191122.2040/magit-extras.el create mode 100644 elpa/magit-20191122.2040/magit-extras.elc create mode 100644 elpa/magit-20191122.2040/magit-fetch.el create mode 100644 elpa/magit-20191122.2040/magit-fetch.elc create mode 100644 elpa/magit-20191122.2040/magit-files.el create mode 100644 elpa/magit-20191122.2040/magit-files.elc create mode 100644 elpa/magit-20191122.2040/magit-git.el create mode 100644 elpa/magit-20191122.2040/magit-git.elc create mode 100644 elpa/magit-20191122.2040/magit-gitignore.el create mode 100644 elpa/magit-20191122.2040/magit-gitignore.elc create mode 100644 elpa/magit-20191122.2040/magit-imenu.el create mode 100644 elpa/magit-20191122.2040/magit-imenu.elc create mode 100644 elpa/magit-20191122.2040/magit-log.el create mode 100644 elpa/magit-20191122.2040/magit-log.elc create mode 100644 elpa/magit-20191122.2040/magit-margin.el create mode 100644 elpa/magit-20191122.2040/magit-margin.elc create mode 100644 elpa/magit-20191122.2040/magit-merge.el create mode 100644 elpa/magit-20191122.2040/magit-merge.elc create mode 100644 elpa/magit-20191122.2040/magit-mode.el create mode 100644 elpa/magit-20191122.2040/magit-mode.elc create mode 100644 elpa/magit-20191122.2040/magit-notes.el create mode 100644 elpa/magit-20191122.2040/magit-notes.elc create mode 100644 elpa/magit-20191122.2040/magit-obsolete.el create mode 100644 elpa/magit-20191122.2040/magit-obsolete.elc create mode 100644 elpa/magit-20191122.2040/magit-patch.el create mode 100644 elpa/magit-20191122.2040/magit-patch.elc create mode 100644 elpa/magit-20191122.2040/magit-pkg.el create mode 100644 elpa/magit-20191122.2040/magit-process.el create mode 100644 elpa/magit-20191122.2040/magit-process.elc create mode 100644 elpa/magit-20191122.2040/magit-pull.el create mode 100644 elpa/magit-20191122.2040/magit-pull.elc create mode 100644 elpa/magit-20191122.2040/magit-push.el create mode 100644 elpa/magit-20191122.2040/magit-push.elc create mode 100644 elpa/magit-20191122.2040/magit-reflog.el create mode 100644 elpa/magit-20191122.2040/magit-reflog.elc create mode 100644 elpa/magit-20191122.2040/magit-refs.el create mode 100644 elpa/magit-20191122.2040/magit-refs.elc create mode 100644 elpa/magit-20191122.2040/magit-remote.el create mode 100644 elpa/magit-20191122.2040/magit-remote.elc create mode 100644 elpa/magit-20191122.2040/magit-repos.el create mode 100644 elpa/magit-20191122.2040/magit-repos.elc create mode 100644 elpa/magit-20191122.2040/magit-reset.el create mode 100644 elpa/magit-20191122.2040/magit-reset.elc create mode 100644 elpa/magit-20191122.2040/magit-section.el create mode 100644 elpa/magit-20191122.2040/magit-section.elc create mode 100644 elpa/magit-20191122.2040/magit-sequence.el create mode 100644 elpa/magit-20191122.2040/magit-sequence.elc create mode 100644 elpa/magit-20191122.2040/magit-stash.el create mode 100644 elpa/magit-20191122.2040/magit-stash.elc create mode 100644 elpa/magit-20191122.2040/magit-status.el create mode 100644 elpa/magit-20191122.2040/magit-status.elc create mode 100644 elpa/magit-20191122.2040/magit-submodule.el create mode 100644 elpa/magit-20191122.2040/magit-submodule.elc create mode 100644 elpa/magit-20191122.2040/magit-subtree.el create mode 100644 elpa/magit-20191122.2040/magit-subtree.elc create mode 100644 elpa/magit-20191122.2040/magit-tag.el create mode 100644 elpa/magit-20191122.2040/magit-tag.elc create mode 100644 elpa/magit-20191122.2040/magit-transient.el create mode 100644 elpa/magit-20191122.2040/magit-transient.elc create mode 100644 elpa/magit-20191122.2040/magit-utils.el create mode 100644 elpa/magit-20191122.2040/magit-utils.elc create mode 100644 elpa/magit-20191122.2040/magit-wip.el create mode 100644 elpa/magit-20191122.2040/magit-wip.elc create mode 100644 elpa/magit-20191122.2040/magit-worktree.el create mode 100644 elpa/magit-20191122.2040/magit-worktree.elc create mode 100644 elpa/magit-20191122.2040/magit.el create mode 100644 elpa/magit-20191122.2040/magit.elc create mode 100644 elpa/magit-20191122.2040/magit.info create mode 100644 elpa/magit-20191122.2040/magit.info-1 create mode 100644 elpa/magit-20191122.2040/magit.info-2 create mode 100644 elpa/nord-theme-20190616.1757/nord-theme-autoloads.el create mode 100644 elpa/nord-theme-20190616.1757/nord-theme-pkg.el create mode 100644 elpa/nord-theme-20190616.1757/nord-theme.el create mode 100644 elpa/ob-http-20180707.1448/ob-http-autoloads.el create mode 100644 elpa/ob-http-20180707.1448/ob-http-mode.el create mode 100644 elpa/ob-http-20180707.1448/ob-http-mode.elc create mode 100644 elpa/ob-http-20180707.1448/ob-http-pkg.el create mode 100644 elpa/ob-http-20180707.1448/ob-http.el create mode 100644 elpa/ob-http-20180707.1448/ob-http.elc create mode 100644 elpa/ob-ipython-20180224.953/client.py create mode 100644 elpa/ob-ipython-20180224.953/ob-ipython-autoloads.el create mode 100644 elpa/ob-ipython-20180224.953/ob-ipython-pkg.el create mode 100644 elpa/ob-ipython-20180224.953/ob-ipython.el create mode 100644 elpa/ob-ipython-20180224.953/ob-ipython.elc create mode 100644 elpa/ob-restclient-20191119.924/ob-restclient-autoloads.el create mode 100644 elpa/ob-restclient-20191119.924/ob-restclient-pkg.el create mode 100644 elpa/ob-restclient-20191119.924/ob-restclient.el create mode 100644 elpa/ob-restclient-20191119.924/ob-restclient.elc create mode 100644 elpa/ox-nikola-20151114.1116/ox-nikola-autoloads.el create mode 100644 elpa/ox-nikola-20151114.1116/ox-nikola-pkg.el create mode 100644 elpa/ox-nikola-20151114.1116/ox-nikola.el create mode 100644 elpa/ox-nikola-20151114.1116/ox-nikola.elc create mode 100644 elpa/ox-rst-20191013.551/ox-rst-autoloads.el create mode 100644 elpa/ox-rst-20191013.551/ox-rst-pkg.el create mode 100644 elpa/ox-rst-20191013.551/ox-rst.el create mode 100644 elpa/ox-rst-20191013.551/ox-rst.elc create mode 100644 elpa/powershell-20190421.2038/powershell-autoloads.el create mode 100644 elpa/powershell-20190421.2038/powershell-pkg.el create mode 100644 elpa/powershell-20190421.2038/powershell.el create mode 100644 elpa/powershell-20190421.2038/powershell.elc create mode 100644 elpa/python-docstring-20190716.921/docstring_wrap.py create mode 100644 elpa/python-docstring-20190716.921/python-docstring-autoloads.el create mode 100644 elpa/python-docstring-20190716.921/python-docstring-pkg.el create mode 100644 elpa/python-docstring-20190716.921/python-docstring.el create mode 100644 elpa/python-docstring-20190716.921/python-docstring.elc create mode 100644 elpa/pyvenv-20191006.1304/pyvenv-autoloads.el create mode 100644 elpa/pyvenv-20191006.1304/pyvenv-pkg.el create mode 100644 elpa/pyvenv-20191006.1304/pyvenv.el create mode 100644 elpa/pyvenv-20191006.1304/pyvenv.elc create mode 100644 elpa/racket-mode-20191112.1417/dir create mode 100644 elpa/racket-mode-20191112.1417/racket-bug-report.el create mode 100644 elpa/racket-mode-20191112.1417/racket-bug-report.elc create mode 100644 elpa/racket-mode-20191112.1417/racket-collection.el create mode 100644 elpa/racket-mode-20191112.1417/racket-collection.elc create mode 100644 elpa/racket-mode-20191112.1417/racket-common.el create mode 100644 elpa/racket-mode-20191112.1417/racket-common.elc create mode 100644 elpa/racket-mode-20191112.1417/racket-complete.el create mode 100644 elpa/racket-mode-20191112.1417/racket-complete.elc create mode 100644 elpa/racket-mode-20191112.1417/racket-custom.el create mode 100644 elpa/racket-mode-20191112.1417/racket-custom.elc create mode 100644 elpa/racket-mode-20191112.1417/racket-debug.el create mode 100644 elpa/racket-mode-20191112.1417/racket-debug.elc create mode 100644 elpa/racket-mode-20191112.1417/racket-edit.el create mode 100644 elpa/racket-mode-20191112.1417/racket-edit.elc create mode 100644 elpa/racket-mode-20191112.1417/racket-font-lock.el create mode 100644 elpa/racket-mode-20191112.1417/racket-font-lock.elc create mode 100644 elpa/racket-mode-20191112.1417/racket-imenu.el create mode 100644 elpa/racket-mode-20191112.1417/racket-imenu.elc create mode 100644 elpa/racket-mode-20191112.1417/racket-indent.el create mode 100644 elpa/racket-mode-20191112.1417/racket-indent.elc create mode 100644 elpa/racket-mode-20191112.1417/racket-keywords-and-builtins.el create mode 100644 elpa/racket-mode-20191112.1417/racket-keywords-and-builtins.elc create mode 100644 elpa/racket-mode-20191112.1417/racket-logger.el create mode 100644 elpa/racket-mode-20191112.1417/racket-logger.elc create mode 100644 elpa/racket-mode-20191112.1417/racket-mode-autoloads.el create mode 100644 elpa/racket-mode-20191112.1417/racket-mode-pkg.el create mode 100644 elpa/racket-mode-20191112.1417/racket-mode.el create mode 100644 elpa/racket-mode-20191112.1417/racket-mode.elc create mode 100644 elpa/racket-mode-20191112.1417/racket-mode.info create mode 100644 elpa/racket-mode-20191112.1417/racket-parens.el create mode 100644 elpa/racket-mode-20191112.1417/racket-parens.elc create mode 100644 elpa/racket-mode-20191112.1417/racket-ppss.el create mode 100644 elpa/racket-mode-20191112.1417/racket-ppss.elc create mode 100644 elpa/racket-mode-20191112.1417/racket-profile.el create mode 100644 elpa/racket-mode-20191112.1417/racket-profile.elc create mode 100644 elpa/racket-mode-20191112.1417/racket-repl.el create mode 100644 elpa/racket-mode-20191112.1417/racket-repl.elc create mode 100644 elpa/racket-mode-20191112.1417/racket-smart-open.el create mode 100644 elpa/racket-mode-20191112.1417/racket-smart-open.elc create mode 100644 elpa/racket-mode-20191112.1417/racket-stepper.el create mode 100644 elpa/racket-mode-20191112.1417/racket-stepper.elc create mode 100644 elpa/racket-mode-20191112.1417/racket-unicode-input-method.el create mode 100644 elpa/racket-mode-20191112.1417/racket-unicode-input-method.elc create mode 100644 elpa/racket-mode-20191112.1417/racket-util.el create mode 100644 elpa/racket-mode-20191112.1417/racket-util.elc create mode 100644 elpa/racket-mode-20191112.1417/racket-wsl.el create mode 100644 elpa/racket-mode-20191112.1417/racket-wsl.elc create mode 100644 elpa/racket-mode-20191112.1417/racket/channel.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/command-server.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/commands/check-syntax.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/commands/coverage.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/commands/describe.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/commands/find-module.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/commands/help.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/commands/macro.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/commands/profile.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/commands/requires.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/debug-annotator.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/debug.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/elisp.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/error.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/example/example.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/example/example.rkt.faceup create mode 100644 elpa/racket-mode-20191112.1417/racket/example/indent.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/example/indent.rkt.faceup create mode 100644 elpa/racket-mode-20191112.1417/racket/find-module-path-completions.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/find.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/fresh-line.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/gui.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/image.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/instrument.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/interactions.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/keywords.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/logger.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/md5.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/mod.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/namespace.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/print.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/run.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/scribble.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/syntax.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/test/find-examples.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/test/find.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/util.rkt create mode 100644 elpa/racket-mode-20191112.1417/racket/welcome.rkt create mode 100644 elpa/request-20191122.1416/request-autoloads.el create mode 100644 elpa/request-20191122.1416/request-pkg.el create mode 100644 elpa/request-20191122.1416/request.el create mode 100644 elpa/request-20191122.1416/request.elc create mode 100644 elpa/restclient-20191009.1208/restclient-autoloads.el create mode 100644 elpa/restclient-20191009.1208/restclient-pkg.el create mode 100644 elpa/restclient-20191009.1208/restclient.el create mode 100644 elpa/restclient-20191009.1208/restclient.elc create mode 100644 elpa/restclient-test-20180106.2046/restclient-test-autoloads.el create mode 100644 elpa/restclient-test-20180106.2046/restclient-test-pkg.el create mode 100644 elpa/restclient-test-20180106.2046/restclient-test.el create mode 100644 elpa/restclient-test-20180106.2046/restclient-test.elc create mode 100644 elpa/s-20180406.808/s-autoloads.el create mode 100644 elpa/s-20180406.808/s-pkg.el create mode 100644 elpa/s-20180406.808/s.el create mode 100644 elpa/s-20180406.808/s.elc create mode 100644 elpa/slime-20191114.1625/contrib/README.md create mode 100644 elpa/slime-20191114.1625/contrib/bridge.el create mode 100644 elpa/slime-20191114.1625/contrib/bridge.elc create mode 100644 elpa/slime-20191114.1625/contrib/inferior-slime.el create mode 100644 elpa/slime-20191114.1625/contrib/inferior-slime.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-asdf.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-asdf.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-autodoc.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-autodoc.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-banner.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-banner.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-buffer-streams.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-buffer-streams.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-c-p-c.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-c-p-c.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-cl-indent.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-cl-indent.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-clipboard.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-clipboard.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-compiler-notes-tree.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-compiler-notes-tree.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-editing-commands.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-editing-commands.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-enclosing-context.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-enclosing-context.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-fancy-inspector.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-fancy-inspector.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-fancy-trace.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-fancy-trace.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-fancy.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-fancy.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-fontifying-fu.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-fontifying-fu.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-fuzzy.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-fuzzy.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-highlight-edits.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-highlight-edits.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-hyperdoc.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-hyperdoc.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-indentation.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-indentation.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-listener-hooks.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-listener-hooks.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-macrostep.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-macrostep.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-mdot-fu.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-mdot-fu.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-media.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-media.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-mrepl.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-mrepl.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-package-fu.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-package-fu.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-parse.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-parse.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-presentation-streams.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-presentation-streams.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-presentations.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-presentations.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-quicklisp.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-quicklisp.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-references.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-references.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-repl.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-repl.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-sbcl-exts.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-sbcl-exts.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-scheme.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-scheme.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-scratch.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-scratch.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-snapshot.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-snapshot.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-sprof.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-sprof.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-trace-dialog.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-trace-dialog.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-tramp.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-tramp.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-typeout-frame.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-typeout-frame.elc create mode 100644 elpa/slime-20191114.1625/contrib/slime-xref-browser.el create mode 100644 elpa/slime-20191114.1625/contrib/slime-xref-browser.elc create mode 100644 elpa/slime-20191114.1625/contrib/swank-arglists.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-asdf.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-buffer-streams.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-c-p-c.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-clipboard.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-fancy-inspector.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-fuzzy.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-goo.goo create mode 100644 elpa/slime-20191114.1625/contrib/swank-hyperdoc.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-ikarus.ss create mode 100644 elpa/slime-20191114.1625/contrib/swank-indentation.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-jolt.k create mode 100644 elpa/slime-20191114.1625/contrib/swank-kawa.scm create mode 100644 elpa/slime-20191114.1625/contrib/swank-larceny.scm create mode 100644 elpa/slime-20191114.1625/contrib/swank-listener-hooks.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-macrostep.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-media.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-mit-scheme.scm create mode 100644 elpa/slime-20191114.1625/contrib/swank-mlworks.sml create mode 100644 elpa/slime-20191114.1625/contrib/swank-mrepl.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-package-fu.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-presentation-streams.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-presentations.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-quicklisp.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-r6rs.scm create mode 100644 elpa/slime-20191114.1625/contrib/swank-repl.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-sbcl-exts.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-snapshot.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-sprof.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-trace-dialog.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank-util.lisp create mode 100644 elpa/slime-20191114.1625/contrib/swank.rb create mode 100644 elpa/slime-20191114.1625/dir create mode 100644 elpa/slime-20191114.1625/lib/hyperspec.el create mode 100644 elpa/slime-20191114.1625/lib/hyperspec.elc create mode 100644 elpa/slime-20191114.1625/metering.lisp create mode 100644 elpa/slime-20191114.1625/nregex.lisp create mode 100644 elpa/slime-20191114.1625/packages.lisp create mode 100644 elpa/slime-20191114.1625/sbcl-pprint-patch.lisp create mode 100644 elpa/slime-20191114.1625/slime-autoloads.el create mode 100644 elpa/slime-20191114.1625/slime-pkg.el create mode 100644 elpa/slime-20191114.1625/slime-tests.el create mode 100644 elpa/slime-20191114.1625/slime-tests.elc create mode 100644 elpa/slime-20191114.1625/slime.el create mode 100644 elpa/slime-20191114.1625/slime.elc create mode 100644 elpa/slime-20191114.1625/slime.info create mode 100644 elpa/slime-20191114.1625/start-swank.lisp create mode 100644 elpa/slime-20191114.1625/swank-loader.lisp create mode 100644 elpa/slime-20191114.1625/swank.asd create mode 100644 elpa/slime-20191114.1625/swank.lisp create mode 100644 elpa/slime-20191114.1625/swank/abcl.lisp create mode 100644 elpa/slime-20191114.1625/swank/allegro.lisp create mode 100644 elpa/slime-20191114.1625/swank/backend.lisp create mode 100644 elpa/slime-20191114.1625/swank/ccl.lisp create mode 100644 elpa/slime-20191114.1625/swank/clasp.lisp create mode 100644 elpa/slime-20191114.1625/swank/clisp.lisp create mode 100644 elpa/slime-20191114.1625/swank/cmucl.lisp create mode 100644 elpa/slime-20191114.1625/swank/corman.lisp create mode 100644 elpa/slime-20191114.1625/swank/ecl.lisp create mode 100644 elpa/slime-20191114.1625/swank/gray.lisp create mode 100644 elpa/slime-20191114.1625/swank/lispworks.lisp create mode 100644 elpa/slime-20191114.1625/swank/match.lisp create mode 100644 elpa/slime-20191114.1625/swank/mezzano.lisp create mode 100644 elpa/slime-20191114.1625/swank/mkcl.lisp create mode 100644 elpa/slime-20191114.1625/swank/rpc.lisp create mode 100644 elpa/slime-20191114.1625/swank/sbcl.lisp create mode 100644 elpa/slime-20191114.1625/swank/scl.lisp create mode 100644 elpa/slime-20191114.1625/swank/source-file-cache.lisp create mode 100644 elpa/slime-20191114.1625/swank/source-path-parser.lisp create mode 100644 elpa/slime-20191114.1625/xref.lisp create mode 100644 elpa/sphinx-doc-20160116.1117/sphinx-doc-autoloads.el create mode 100644 elpa/sphinx-doc-20160116.1117/sphinx-doc-pkg.el create mode 100644 elpa/sphinx-doc-20160116.1117/sphinx-doc.el create mode 100644 elpa/sphinx-doc-20160116.1117/sphinx-doc.elc create mode 100644 elpa/sphinx-frontend-20161025.758/sphinx-frontend-autoloads.el create mode 100644 elpa/sphinx-frontend-20161025.758/sphinx-frontend-pkg.el create mode 100644 elpa/sphinx-frontend-20161025.758/sphinx-frontend.el create mode 100644 elpa/sphinx-frontend-20161025.758/sphinx-frontend.elc create mode 100644 elpa/sphinx-mode-20180620.915/sphinx-mode-autoloads.el create mode 100644 elpa/sphinx-mode-20180620.915/sphinx-mode-pkg.el create mode 100644 elpa/sphinx-mode-20180620.915/sphinx-mode.el create mode 100644 elpa/sphinx-mode-20180620.915/sphinx-mode.elc create mode 100644 elpa/sphinx-mode-20180620.915/sphinx-src.el create mode 100644 elpa/sphinx-mode-20180620.915/sphinx-src.elc create mode 100644 elpa/transient-20191122.1957/dir create mode 100644 elpa/transient-20191122.1957/transient-autoloads.el create mode 100644 elpa/transient-20191122.1957/transient-pkg.el create mode 100644 elpa/transient-20191122.1957/transient.el create mode 100644 elpa/transient-20191122.1957/transient.elc create mode 100644 elpa/transient-20191122.1957/transient.info create mode 100644 elpa/typescript-mode-20191120.346/typescript-mode-autoloads.el create mode 100644 elpa/typescript-mode-20191120.346/typescript-mode-pkg.el create mode 100644 elpa/typescript-mode-20191120.346/typescript-mode-test-utilities.el create mode 100644 elpa/typescript-mode-20191120.346/typescript-mode-test-utilities.elc create mode 100644 elpa/typescript-mode-20191120.346/typescript-mode.el create mode 100644 elpa/typescript-mode-20191120.346/typescript-mode.elc create mode 100644 elpa/web-mode-20191104.1859/web-mode-autoloads.el create mode 100644 elpa/web-mode-20191104.1859/web-mode-pkg.el create mode 100644 elpa/web-mode-20191104.1859/web-mode.el create mode 100644 elpa/web-mode-20191104.1859/web-mode.elc create mode 100644 elpa/with-editor-20191105.2250/dir create mode 100644 elpa/with-editor-20191105.2250/with-editor-autoloads.el create mode 100644 elpa/with-editor-20191105.2250/with-editor-pkg.el create mode 100644 elpa/with-editor-20191105.2250/with-editor.el create mode 100644 elpa/with-editor-20191105.2250/with-editor.elc create mode 100644 elpa/with-editor-20191105.2250/with-editor.info create mode 100644 elpa/yaml-mode-20190625.1740/yaml-mode-autoloads.el create mode 100644 elpa/yaml-mode-20190625.1740/yaml-mode-pkg.el create mode 100644 elpa/yaml-mode-20190625.1740/yaml-mode.el create mode 100644 elpa/yaml-mode-20190625.1740/yaml-mode.elc create mode 100644 elpa/yasnippet-20191030.1331/yasnippet-autoloads.el create mode 100644 elpa/yasnippet-20191030.1331/yasnippet-pkg.el create mode 100644 elpa/yasnippet-20191030.1331/yasnippet.el create mode 100644 elpa/yasnippet-20191030.1331/yasnippet.elc diff --git a/elpa/archives/gnu/archive-contents b/elpa/archives/gnu/archive-contents new file mode 100644 index 00000000..c0685346 --- /dev/null +++ b/elpa/archives/gnu/archive-contents @@ -0,0 +1,2332 @@ +(1 + (ace-window . + [(0 9 0) + ((avy + (0 2 0))) + "Quickly switch windows." single + ((:keywords "window" "location") + (:authors + ("Oleh Krehel" . "ohwoeowho@gmail.com")) + (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") + (:url . "https://github.com/abo-abo/ace-window"))]) + (ack . + [(1 8) + nil "interface to ack-like tools" tar + ((:url . "https://github.com/leoliu/ack-el") + (:maintainer "João Távora" . "joaotavora@gmail.com") + (:authors + ("Leo Liu" . "sdl.web@gmail.com")) + (:keywords "tools" "processes" "convenience"))]) + (ada-mode . + [(6 2 1) + ((uniquify-files + (1 0 1)) + (wisi + (2 2 1)) + (emacs + (25 0))) + "major-mode for editing Ada sources" tar + ((:url . "http://www.nongnu.org/ada-mode/") + (:maintainer "Stephen Leake" . "stephen_leake@stephe-leake.org") + (:authors + ("Stephen Leake" . "stephen_leake@stephe-leake.org")) + (:keywords "languages" "ada"))]) + (ada-ref-man . + [(2012 5) + nil "Ada Reference Manual 2012" tar + ((:url . "http://stephe-leake.org/ada/arm.html") + (:maintainer "Stephen Leake" . "stephen_leake@member.fsf.org") + (:authors + ("Stephen Leake" . "stephen_leake@member.fsf.org")) + (:keywords "languages" "ada"))]) + (adaptive-wrap . + [(0 7) + nil "Smart line-wrapping with wrap-prefix" single + ((:url . "http://elpa.gnu.org/packages/adaptive-wrap.html") + (:authors + ("Stephen Berman" . "stephen.berman@gmx.net") + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:maintainer "Stephen Berman" . "stephen.berman@gmx.net"))]) + (adjust-parens . + [(3 1) + nil "Indent and dedent Lisp code, automatically adjust close parens" tar + ((:maintainer "Barry O'Reilly" . "gundaetiapo@gmail.com") + (:authors + ("Barry O'Reilly" . "gundaetiapo@gmail.com")) + (:url . "http://elpa.gnu.org/packages/adjust-parens.html"))]) + (advice-patch . + [(0 1) + ((emacs + (24 4))) + "Use patches to advise the inside of functions" single + ((:url . "http://elpa.gnu.org/packages/advice-patch.html") + (:authors + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))]) + (aggressive-indent . + [(1 8 3) + ((emacs + (24 1)) + (cl-lib + (0 5))) + "Minor mode to aggressively keep your code always indented" single + ((:keywords "indent" "lisp" "maint" "tools") + (:authors + ("Artur Malabarba" . "emacs@endlessparentheses.com")) + (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") + (:url . "https://github.com/Malabarba/aggressive-indent-mode"))]) + (ahungry-theme . + [(1 10 0) + ((emacs + (24))) + "Ahungry color theme for Emacs. Make sure to (load-theme 'ahungry)." tar + ((:url . "https://github.com/ahungry/color-theme-ahungry") + (:maintainer "Matthew Carter" . "m@ahungry.com") + (:authors + ("Matthew Carter" . "m@ahungry.com")) + (:keywords "ahungry" "palette" "color" "theme" "emacs" "color-theme" "deftheme"))]) + (all . + [(1 0) + nil "Edit all lines matching a given regexp" single + ((:url . "http://elpa.gnu.org/packages/all.html") + (:keywords "matching") + (:authors + ("Per Abrahamsen" . "abraham@dina.kvl.dk")) + (:maintainer "Per Abrahamsen" . "abraham@dina.kvl.dk"))]) + (ampc . + [(0 2) + nil "Asynchronous Music Player Controller" single + ((:url . "http://elpa.gnu.org/packages/ampc.html") + (:keywords "ampc" "mpc" "mpd") + (:authors + ("Christopher Schmidt" . "christopher@ch.ristopher.com")) + (:maintainer nil . "emacs-devel@gnu.org"))]) + (arbitools . + [(0 977) + ((cl-lib + (0 5))) + "Package for chess tournaments administration" single + ((:url . "http://elpa.gnu.org/packages/arbitools.html") + (:authors + ("David Gonzalez Gandara" . "dggandara@member.fsf.org")) + (:maintainer "David Gonzalez Gandara" . "dggandara@member.fsf.org"))]) + (ascii-art-to-unicode . + [(1 12) + nil "a small artist adjunct" single + ((:keywords "ascii" "unicode" "box-drawing") + (:authors + ("Thien-Thi Nguyen" . "ttn@gnu.org")) + (:maintainer "Thien-Thi Nguyen" . "ttn@gnu.org") + (:url . "http://www.gnuvola.org/software/aa2u/"))]) + (async . + [(1 9 3) + ((cl-lib + (0 5)) + (nadvice + (0 3))) + "Asynchronous processing in Emacs" tar + ((:url . "https://github.com/jwiegley/emacs-async") + (:maintainer "John Wiegley" . "jwiegley@gmail.com") + (:authors + ("John Wiegley" . "jwiegley@gmail.com")) + (:keywords "async"))]) + (auctex . + [(12 2 0) + ((emacs + (24 1)) + (cl-lib + (0 5))) + "Integrated environment for *TeX*" tar + ((:url . "http://www.gnu.org/software/auctex/") + (:maintainer nil . "auctex-devel@gnu.org") + (:keywords "tex" "latex" "texinfo" "context" "doctex" "preview-latex"))]) + (aumix-mode . + [(7) + nil "run the aumix program in a buffer" single + ((:keywords "multimedia" "mixer" "aumix") + (:authors + ("Kevin Ryde" . "user42_kevin@yahoo.com.au")) + (:maintainer "Kevin Ryde" . "user42_kevin@yahoo.com.au") + (:url . "http://user42.tuxfamily.org/aumix-mode/index.html"))]) + (auto-correct . + [(1 1 4) + nil "Remembers and automatically fixes past corrections" single + ((:url . "http://elpa.gnu.org/packages/auto-correct.html") + (:keywords "editing") + (:authors + ("Ian Dunn" . "dunni@gnu.org")) + (:maintainer "Ian Dunn" . "dunni@gnu.org"))]) + (auto-overlays . + [(0 10 9) + nil "Automatic regexp-delimited overlays" tar + ((:url . "http://www.dr-qubit.org/emacs.php") + (:maintainer "Toby Cubitt" . "toby-predictive@dr-qubit.org") + (:authors + ("Toby Cubitt" . "toby-predictive@dr-qubit.org")) + (:keywords "extensions"))]) + (avy . + [(0 5 0) + ((emacs + (24 1)) + (cl-lib + (0 5))) + "Jump to arbitrary positions in visible text and select text quickly." tar + ((:url . "https://github.com/abo-abo/avy") + (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") + (:authors + ("Oleh Krehel" . "ohwoeowho@gmail.com")) + (:keywords "point" "location"))]) + (bbdb . + [(3 2) + ((emacs + (24))) + "core of BBDB" tar + ((:maintainer "Roland Winkler" . "winkler@gnu.org") + (:url . "http://elpa.gnu.org/packages/bbdb.html"))]) + (beacon . + [(1 3 3) + ((seq + (2 14))) + "Highlight the cursor whenever the window scrolls" single + ((:keywords "convenience") + (:authors + ("Artur Malabarba" . "emacs@endlessparentheses.com")) + (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") + (:url . "https://github.com/Malabarba/beacon"))]) + (bluetooth . + [(0 1 2) + ((emacs + (25 1)) + (dash + (2 12 0))) + "A Major mode for Bluetooth devices" single + ((:keywords "hardware") + (:authors + ("Raffael Stocker" . "r.stocker@mnet-mail.de")) + (:maintainer "Raffael Stocker" . "r.stocker@mnet-mail.de") + (:url . "https://gitlab.com/rstocker/emacs-bluetooth"))]) + (bnf-mode . + [(0 4 2) + ((cl-lib + (0 5)) + (emacs + (24 3))) + "Major mode for editing BNF grammars." tar + ((:url . "https://github.com/sergeyklay/bnf-mode") + (:maintainer "Serghei Iakovlev" . "sadhooklay@gmail.com") + (:authors + ("Serghei Iakovlev" . "sadhooklay@gmail.com")) + (:keywords "languages"))]) + (brief . + [(5 87) + nil "Brief Editor Emulator (Brief Mode)" tar + ((:maintainer "Luke Lee" . "luke.yx.lee@gmail.com") + (:authors + ("Luke Lee" . "luke.yx.lee@gmail.com")) + (:keywords "brief" "emulations" "crisp") + (:url . "http://elpa.gnu.org/packages/brief.html"))]) + (buffer-expose . + [(0 4 3) + ((emacs + (25)) + (cl-lib + (0 5))) + "Visual buffer switching using a window grid" single + ((:keywords "convenience") + (:authors + ("Clemens Radermacher" . "clemera@posteo.net")) + (:maintainer "Clemens Radermacher" . "clemera@posteo.net") + (:url . "https://github.com/clemera/buffer-expose"))]) + (bug-hunter . + [(1 3 1) + ((seq + (1 3)) + (cl-lib + (0 5))) + "Hunt down errors by bisecting elisp files" single + ((:keywords "lisp") + (:authors + ("Artur Malabarba" . "emacs@endlessparentheses.com")) + (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") + (:url . "https://github.com/Malabarba/elisp-bug-hunter"))]) + (caps-lock . + [(1 0) + nil "Caps-lock as a minor mode" single + ((:url . "http://elpa.gnu.org/packages/caps-lock.html") + (:authors + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))]) + (captain . + [(1 0 3) + nil "CAPiTalization is Automatic IN emacs" single + ((:url . "http://elpa.gnu.org/packages/captain.html") + (:keywords "editing") + (:authors + ("Ian Dunn" . "dunni@gnu.org")) + (:maintainer "Ian Dunn" . "dunni@gnu.org"))]) + (chess . + [(2 0 4) + ((cl-lib + (0 5))) + "Play chess in GNU Emacs" tar + ((:maintainer "Mario Lang" . "mlang@delysid.org") + (:authors + ("John Wiegley" . "johnw@gnu.org")) + (:keywords "games") + (:url . "http://elpa.gnu.org/packages/chess.html"))]) + (cl-generic . + [(0 3) + nil "Forward cl-generic compatibility for Emacs<25" single + ((:url . "http://elpa.gnu.org/packages/cl-generic.html") + (:authors + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))]) + (cl-lib . + [(0 6 1) + nil "Forward cl-lib compatibility library for Emacs<24.3" single + ((:url . "http://elpa.gnu.org/packages/cl-lib.html") + (:authors + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))]) + (cl-print . + [(1 0) + ((emacs + (25))) + "CL-style generic printing" single + ((:url . "http://elpa.gnu.org/packages/cl-print.html") + (:authors + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))]) + (clipboard-collector . + [(0 2) + ((emacs + (25))) + "Collect clipboard entries according to regex rules" single + ((:keywords "convenience") + (:authors + ("Clemens Radermacher" . "clemera@posteo.net")) + (:maintainer "Clemens Radermacher" . "clemera@posteo.net") + (:url . "https://github.com/clemera/clipboard-collector"))]) + (cobol-mode . + [(1 0 0) + ((cl-lib + (0 5))) + "Mode for editing COBOL code" single + ((:url . "http://elpa.gnu.org/packages/cobol-mode.html") + (:keywords "languages") + (:authors + ("Edward Hart" . "edward.dan.hart@gmail.com")) + (:maintainer "Edward Hart" . "edward.dan.hart@gmail.com"))]) + (coffee-mode . + [(0 4 1 1) + nil "Major mode for CoffeeScript files" single + ((:keywords "coffeescript" "major" "mode") + (:authors + ("Chris Wanstrath" . "chris@ozmm.org")) + (:maintainer "Chris Wanstrath" . "chris@ozmm.org") + (:url . "http://github.com/defunkt/coffee-mode"))]) + (compact-docstrings . + [(0 1) + nil "Shrink blank lines in docstrings and doc comments" single + ((:keywords "convenience" "faces" "lisp" "maint" "c") + (:authors + ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) + (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com") + (:url . "https://github.com/cpitclaudel/compact-docstrings"))]) + (company . + [(0 9 10) + ((emacs + (24 3))) + "Modular text completion framework" tar + ((:url . "http://company-mode.github.io/") + (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru") + (:authors + ("Nikolaj Schumacher")) + (:keywords "abbrev" "convenience" "matching"))]) + (company-ebdb . + [(1 1) + ((company + (0 9 4)) + (ebdb + (0 2))) + "company-mode completion backend for EBDB in message-mode" single + ((:url . "http://elpa.gnu.org/packages/company-ebdb.html") + (:authors + ("Jan Tatarik" . "jan.tatarik@gmail.com")) + (:maintainer "Eric Abrahamsen" . "eric@ericabrahamsen.net"))]) + (company-math . + [(1 3) + ((company + (0 8 0)) + (math-symbol-lists + (1 2))) + "Completion backends for unicode math symbols and latex tags" tar + ((:url . "https://github.com/vspinu/company-math") + (:maintainer "Vitalie Spinu" . "spinuvit@gmail.com") + (:authors + ("Vitalie Spinu" . "spinuvit@gmail.com")) + (:keywords "unicode" "symbols" "completion"))]) + (company-statistics . + [(0 2 3) + ((emacs + (24 3)) + (company + (0 8 5))) + "Sort candidates using completion history" tar + ((:url . "https://github.com/company-mode/company-statistics") + (:maintainer "Ingo Lohmar" . "i.lohmar@gmail.com") + (:authors + ("Ingo Lohmar" . "i.lohmar@gmail.com")) + (:keywords "abbrev" "convenience" "matching"))]) + (context-coloring . + [(8 1 0) + ((emacs + (24 3))) + "Highlight by scope" tar + ((:url . "https://github.com/jacksonrayhamilton/context-coloring") + (:maintainer "Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com") + (:authors + ("Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com")) + (:keywords "convenience" "faces" "tools"))]) + (crisp . + [(1 3 6) + nil "CRiSP/Brief Emacs emulator" single + ((:url . "http://elpa.gnu.org/packages/crisp.html") + (:keywords "emulations" "brief" "crisp") + (:authors + ("Gary D. Foster" . "Gary.Foster@Corp.Sun.COM")) + (:maintainer "Luke Lee" . "luke.yx.lee@gmail.com"))]) + (csv-mode . + [(1 10) + ((emacs + (24 1)) + (cl-lib + (0 5))) + "Major mode for editing comma/char separated values" single + ((:url . "http://elpa.gnu.org/packages/csv-mode.html") + (:keywords "convenience") + (:authors + ("\"Francis J. Wright\"" . "F.J.Wright@qmul.ac.uk")) + (:maintainer nil . "emacs-devel@gnu.org"))]) + (cycle-quotes . + [(0 1) + nil "Cycle between quote styles" tar + ((:maintainer "Simen Heggestøyl" . "simenheg@gmail.com") + (:authors + ("Simen Heggestøyl" . "simenheg@gmail.com")) + (:keywords "convenience") + (:url . "http://elpa.gnu.org/packages/cycle-quotes.html"))]) + (darkroom . + [(0 2) + ((cl-lib + (0 5))) + "Remove visual distractions and focus on writing" single + ((:url . "http://elpa.gnu.org/packages/darkroom.html") + (:keywords "convenience" "emulations") + (:authors + ("João Távora" . "joaotavora@gmail.com")) + (:maintainer "João Távora" . "joaotavora@gmail.com"))]) + (dash . + [(2 12 0) + nil "A modern list library for Emacs" tar + ((:maintainer "Magnar Sveen" . "magnars@gmail.com") + (:authors + ("Magnar Sveen" . "magnars@gmail.com")) + (:keywords "lists") + (:url . "http://elpa.gnu.org/packages/dash.html"))]) + (dbus-codegen . + [(0 1) + ((cl-lib + (0 5))) + "Lisp code generation for D-Bus." single + ((:url . "http://elpa.gnu.org/packages/dbus-codegen.html") + (:keywords "comm" "dbus" "convenience") + (:authors + ("Daiki Ueno" . "ueno@gnu.org")) + (:maintainer nil . "emacs-devel@gnu.org"))]) + (debbugs . + [(0 20) + ((emacs + (25 1)) + (soap-client + (3 1 5)) + (cl-lib + (0 5))) + "SOAP library to access debbugs servers" tar + ((:maintainer "Michael Albinus" . "michael.albinus@gmx.de") + (:authors + ("Michael Albinus" . "michael.albinus@gmx.de")) + (:keywords "comm" "hypermedia") + (:url . "http://elpa.gnu.org/packages/debbugs.html"))]) + (delight . + [(1 5) + ((cl-lib + (0 5)) + (nadvice + (0 3))) + "A dimmer switch for your lighter text" single + ((:keywords "convenience") + (:authors + ("Phil Sainty" . "psainty@orcon.net.nz")) + (:maintainer "Phil Sainty" . "psainty@orcon.net.nz") + (:url . "https://savannah.nongnu.org/projects/delight"))]) + (dict-tree . + [(0 14) + ((trie + (0 3)) + (tNFA + (0 1 1)) + (heap + (0 3))) + "Dictionary data structure" single + ((:keywords "extensions" "matching" "data structures trie" "tree" "dictionary" "completion" "regexp") + (:authors + ("Toby Cubitt" . "toby-predictive@dr-qubit.org")) + (:maintainer "Toby Cubitt" . "toby-predictive@dr-qubit.org") + (:url . "http://www.dr-qubit.org/emacs.php"))]) + (diff-hl . + [(1 8 7) + ((cl-lib + (0 2)) + (emacs + (24 3))) + "Highlight uncommitted changes using VC" tar + ((:url . "https://github.com/dgutov/diff-hl") + (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru") + (:authors + ("Dmitry Gutov" . "dgutov@yandex.ru")) + (:keywords "vc" "diff"))]) + (diffview . + [(1 0) + nil "View diffs in side-by-side format" single + ((:keywords "convenience" "diff") + (:authors + ("Mitchel Humpherys" . "mitch.special@gmail.com")) + (:maintainer "Mitchel Humpherys" . "mitch.special@gmail.com") + (:url . "https://github.com/mgalgs/diffview-mode"))]) + (dired-du . + [(0 5 2) + ((emacs + (24 4)) + (cl-lib + (0 5))) + "Dired with recursive directory sizes" tar + ((:maintainer "Tino Calancha" . "tino.calancha@gmail.com") + (:authors + ("Tino Calancha" . "tino.calancha@gmail.com")) + (:keywords "files" "unix" "convenience") + (:url . "http://elpa.gnu.org/packages/dired-du.html"))]) + (dired-git-info . + [(0 2) + ((emacs + (25))) + "Show git info in dired" single + ((:keywords "dired" "files") + (:authors + ("Clemens Radermacher" . "clemera@posteo.net")) + (:maintainer "Clemens Radermacher" . "clemera@posteo.net") + (:url . "https://github.com/clemera/dired-git-info"))]) + (disk-usage . + [(1 3 3) + ((emacs + (26 1))) + "Sort and browse disk usage listings" single + ((:keywords "files" "convenience" "tools") + (:authors + ("Pierre Neidhardt" . "mail@ambrevar.xyz")) + (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz") + (:url . "https://gitlab.com/Ambrevar/emacs-disk-usage"))]) + (dismal . + [(1 5) + ((cl-lib + (0))) + "Dis Mode Ain't Lotus: Spreadsheet program Emacs" tar + ((:maintainer "UnMaintainer" . "emacs-devel@gnu.org") + (:authors + (nil . "David Fox, fox@cs.nyu.edu") + (nil . "Frank E. Ritter, ritter@cs.cmu.edu")) + (:url . "http://elpa.gnu.org/packages/dismal.html"))]) + (djvu . + [(1 1) + nil "Edit and view Djvu files via djvused" single + ((:url . "http://elpa.gnu.org/packages/djvu.html") + (:keywords "files" "wp") + (:authors + ("Roland Winkler" . "winkler@gnu.org")) + (:maintainer "Roland Winkler" . "winkler@gnu.org"))]) + (docbook . + [(0 1) + nil "Info-like viewer for DocBook" single + ((:url . "http://elpa.gnu.org/packages/docbook.html") + (:keywords "docs" "help") + (:authors + ("Chong Yidong" . "cyd@gnu.org")) + (:maintainer "Chong Yidong" . "cyd@gnu.org"))]) + (dts-mode . + [(0 1 0) + nil "Major mode for Device Tree source files" single + ((:url . "http://elpa.gnu.org/packages/dts-mode.html") + (:keywords "languages") + (:authors + ("Ben Gamari" . "ben@smart-cactus.org")) + (:maintainer "Ben Gamari" . "ben@smart-cactus.org"))]) + (easy-kill . + [(0 9 3) + ((emacs + (24)) + (cl-lib + (0 5))) + "kill & mark things easily" tar + ((:url . "https://github.com/leoliu/easy-kill") + (:maintainer "Leo Liu" . "sdl.web@gmail.com") + (:authors + ("Leo Liu" . "sdl.web@gmail.com")) + (:keywords "killing" "convenience"))]) + (ebdb . + [(0 6 11) + ((emacs + (25 1)) + (cl-lib + (0 5)) + (seq + (2 15))) + "Contact management package" tar + ((:url . "https://github.com/girzel/ebdb") + (:maintainer "Eric Abrahamsen" . "eric@ericabrahamsen.net") + (:authors + ("Eric Abrahamsen" . "eric@ericabrahamsen.net")) + (:keywords "convenience" "mail"))]) + (ebdb-gnorb . + [(1 0 2) + ((gnorb + (1 1 0)) + (ebdb + (0 2))) + "Utilities for connecting EBDB to Gnorb" single + ((:url . "http://elpa.gnu.org/packages/ebdb-gnorb.html") + (:authors + ("Eric Abrahamsen" . "eric@ericabrahamsen.net")) + (:maintainer "Eric Abrahamsen" . "eric@ericabrahamsen.net"))]) + (ebdb-i18n-chn . + [(1 3) + ((pyim + (1 6 0)) + (ebdb + (0 2))) + "China-specific internationalization support for EBDB" single + ((:url . "http://elpa.gnu.org/packages/ebdb-i18n-chn.html") + (:authors + ("Eric Abrahamsen" . "eric@ericabrahamsen.net")) + (:maintainer "Eric Abrahamsen" . "eric@ericabrahamsen.net"))]) + (ediprolog . + [(1 2) + nil "Emacs Does Interactive Prolog" single + ((:keywords "languages" "processes") + (:authors + ("Markus Triska" . "triska@metalevel.at")) + (:maintainer "Markus Triska" . "triska@metalevel.at") + (:url . "https://www.metalevel.at/ediprolog/"))]) + (eev . + [(20191105) + ((emacs + (24 1))) + "Support for e-scripts (eepitch blocks, elisp hyperlinks, etc)" tar + ((:url . "http://angg.twu.net/#eev") + (:maintainer "Eduardo Ochs" . "eduardoochs@gmail.com") + (:authors + ("Eduardo Ochs" . "eduardoochs@gmail.com")) + (:keywords "lisp" "e-scripts"))]) + (eglot . + [(1 5) + ((emacs + (26 1)) + (jsonrpc + (1 0 7)) + (flymake + (1 0 5))) + "Client for Language Server Protocol (LSP) servers" tar + ((:url . "https://github.com/joaotavora/eglot") + (:maintainer "João Távora" . "joaotavora@gmail.com") + (:authors + ("João Távora" . "joaotavora@gmail.com")) + (:keywords "convenience" "languages"))]) + (el-search . + [(1 12 6 1) + ((emacs + (25)) + (stream + (2 2 4)) + (cl-print + (1 0))) + "Expression based interactive search for Emacs Lisp" tar + ((:maintainer "Michael Heerdegen" . "michael_heerdegen@web.de") + (:authors + ("Michael Heerdegen" . "michael_heerdegen@web.de")) + (:keywords "lisp") + (:url . "http://elpa.gnu.org/packages/el-search.html"))]) + (eldoc-eval . + [(0 1) + nil "Enable eldoc support when minibuffer is in use." single + ((:url . "http://elpa.gnu.org/packages/eldoc-eval.html") + (:authors + ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) + (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com"))]) + (electric-spacing . + [(5 0) + nil "Insert operators with surrounding spaces smartly" single + ((:url . "http://elpa.gnu.org/packages/electric-spacing.html") + (:authors + ("William Xu" . "william.xwl@gmail.com")) + (:maintainer "William Xu" . "william.xwl@gmail.com"))]) + (enwc . + [(2 0) + ((emacs + (25 1))) + "The Emacs Network Client" tar + ((:url . "https://savannah.nongnu.org/p/enwc") + (:maintainer "Ian Dunn" . "dunni@gnu.org") + (:authors + ("Ian Dunn" . "dunni@gnu.org")) + (:keywords "external" "network" "wicd" "manager" "nm"))]) + (epoch-view . + [(0 0 1) + nil "Minor mode to visualize epoch timestamps" single + ((:url . "http://elpa.gnu.org/packages/epoch-view.html") + (:keywords "data" "timestamp" "epoch" "unix") + (:authors + ("Ted Zlatanov" . "tzz@lifelogs.com")) + (:maintainer "Ted Zlatanov" . "tzz@lifelogs.com"))]) + (ergoemacs-mode . + [(5 16 10 12) + ((emacs + (24 1)) + (undo-tree + (0 6 5)) + (cl-lib + (0 5))) + "Emacs mode based on common modern interface and ergonomics." tar + ((:url . "https://github.com/ergoemacs/ergoemacs-mode") + (:maintainer "Matthew L. Fidler" . "matthew.fidler@gmail.com") + (:authors + ("Xah Lee" . "xah@xahlee.org") + ("David Capello" . "davidcapello@gmail.com") + ("Matthew L. Fidler" . "matthew.fidler@gmail.com")) + (:keywords "convenience"))]) + (excorporate . + [(0 8 3) + ((emacs + (24 1)) + (fsm + (0 2 1)) + (soap-client + (3 1 5)) + (url-http-ntlm + (2 0 4)) + (nadvice + (0 3))) + "Exchange Web Services (EWS) integration" tar + ((:url . "https://www.fitzsim.org/blog/") + (:maintainer "Thomas Fitzsimmons" . "fitzsim@fitzsim.org") + (:authors + ("Thomas Fitzsimmons" . "fitzsim@fitzsim.org")) + (:keywords "calendar"))]) + (exwm . + [(0 23) + ((xelb + (0 18))) + "Emacs X Window Manager" tar + ((:url . "https://github.com/ch11ng/exwm") + (:maintainer "Chris Feng" . "chris.w.feng@gmail.com") + (:authors + ("Chris Feng" . "chris.w.feng@gmail.com")) + (:keywords "unix"))]) + (f90-interface-browser . + [(1 1) + nil "Parse and browse f90 interfaces" single + ((:authors + ("Lawrence Mitchell" . "wence@gmx.li")) + (:maintainer "Lawrence Mitchell" . "wence@gmx.li") + (:url . "http://github.com/wence-/f90-iface/"))]) + (filladapt . + [(2 12 2) + ((emacs + (24 4))) + "Adaptive fill" single + ((:url . "http://elpa.gnu.org/packages/filladapt.html") + (:authors + ("Kyle E. Jones" . "kyle_jones@wonderworks.com")) + (:maintainer nil . "emacs-devel@gnu.org"))]) + (flylisp . + [(0 2) + ((emacs + (24 1)) + (cl-lib + (0 4))) + "Color unbalanced parentheses and parentheses inconsistent with indentation" single + ((:url . "http://elpa.gnu.org/packages/flylisp.html") + (:authors + ("Barry O'Reilly" . "gundaetiapo@gmail.com")) + (:maintainer "Barry O'Reilly" . "gundaetiapo@gmail.com"))]) + (flymake . + [(1 0 8) + ((emacs + (26 1))) + "A universal on-the-fly syntax checker" single + ((:url . "http://elpa.gnu.org/packages/flymake.html") + (:keywords "c" "languages" "tools") + (:authors + ("Pavel Kobyakov" . "pk_at_work@yahoo.com")) + (:maintainer "João Távora" . "joaotavora@gmail.com"))]) + (fountain-mode . + [(2 7 3) + ((emacs + (24 5))) + "Major mode for screenwriting in Fountain markup" single + ((:keywords "wp" "text") + (:authors + ("Paul W. Rankin" . "pwr@sdf.org")) + (:maintainer "Paul W. Rankin" . "pwr@sdf.org") + (:url . "https://fountain-mode.org"))]) + (frame-tabs . + [(1 1) + nil "show buffer tabs in side window" single + ((:url . "http://elpa.gnu.org/packages/frame-tabs.html") + (:keywords "frames" "tabs") + (:authors + ("Martin Rudalics" . "rudalics@gmx.at")) + (:maintainer "Martin Rudalics" . "rudalics@gmx.at"))]) + (frog-menu . + [(0 2 10) + ((emacs + (26)) + (avy + (0 4)) + (posframe + (0 4))) + "Quickly pick items from ad hoc menus" single + ((:keywords "convenience") + (:authors + ("Clemens Radermacher" . "clemera@posteo.net")) + (:maintainer "Clemens Radermacher" . "clemera@posteo.net") + (:url . "https://github.com/clemera/frog-menu"))]) + (fsm . + [(0 2 1) + ((emacs + (24 1)) + (cl-lib + (0 5))) + "state machine library" single + ((:url . "http://elpa.gnu.org/packages/fsm.html") + (:keywords "extensions") + (:authors + ("Magnus Henoch" . "magnus.henoch@gmail.com")) + (:maintainer "Thomas Fitzsimmons" . "fitzsim@fitzsim.org"))]) + (ggtags . + [(0 8 13) + ((emacs + (24)) + (cl-lib + (0 5))) + "emacs frontend to GNU Global source code tagging system" single + ((:keywords "tools" "convenience") + (:authors + ("Leo Liu" . "sdl.web@gmail.com")) + (:maintainer "Leo Liu" . "sdl.web@gmail.com") + (:url . "https://github.com/leoliu/ggtags"))]) + (gited . + [(0 6 0) + ((emacs + (24 4)) + (cl-lib + (0 5))) + "Operate on Git branches like dired" tar + ((:maintainer "Tino Calancha" . "tino.calancha@gmail.com") + (:authors + ("Tino Calancha" . "tino.calancha@gmail.com")) + (:keywords "git" "vc" "convenience") + (:url . "http://elpa.gnu.org/packages/gited.html"))]) + (gle-mode . + [(1 1) + ((cl-lib + (0 5))) + "Major mode to edit Graphics Layout Engine files" single + ((:url . "http://elpa.gnu.org/packages/gle-mode.html") + (:authors + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))]) + (gnome-c-style . + [(0 1) + nil "minor mode for editing GNOME-style C source code" tar + ((:maintainer "Daiki Ueno" . "ueno@gnu.org") + (:authors + ("Daiki Ueno" . "ueno@gnu.org")) + (:keywords "gnome" "c" "coding style") + (:url . "http://elpa.gnu.org/packages/gnome-c-style.html"))]) + (gnorb . + [(1 6 4) + ((cl-lib + (0 5))) + "Glue code between Gnus, Org, and BBDB" tar + ((:maintainer "Eric Abrahamsen" . "eric@ericabrahamsen.net") + (:authors + ("Eric Abrahamsen" . "eric@ericabrahamsen.net")) + (:keywords "mail" "org" "gnus" "bbdb" "todo" "task") + (:url . "http://elpa.gnu.org/packages/gnorb.html"))]) + (gnu-elpa-keyring-update . + [(2019 3) + nil "Update Emacs's GPG keyring for GNU ELPA" tar + ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:keywords "maint" "tools") + (:url . "http://elpa.gnu.org/packages/gnu-elpa-keyring-update.html"))]) + (gnugo . + [(3 1 0) + ((ascii-art-to-unicode + (1 5)) + (xpm + (1 0 1)) + (cl-lib + (0 5))) + "play GNU Go in a buffer" tar + ((:url . "http://www.gnuvola.org/software/gnugo/") + (:maintainer "Thien-Thi Nguyen" . "ttn@gnu.org") + (:authors + ("Thien-Thi Nguyen" . "ttn@gnu.org")) + (:keywords "games" "processes"))]) + (gnus-mock . + [(0 4 4) + nil "Mock Gnus installation for testing" tar + ((:maintainer "Eric Abrahamsen" . "eric@ericabrahamsen.net") + (:authors + ("Eric Abrahamsen" . "eric@ericabrahamsen.net")) + (:url . "http://elpa.gnu.org/packages/gnus-mock.html"))]) + (gpastel . + [(0 5 0) + ((emacs + (25 1))) + "Integrates GPaste with the kill-ring" single + ((:keywords "tools") + (:authors + ("Damien Cassou" . "damien@cassou.me")) + (:maintainer "Damien Cassou" . "damien@cassou.me") + (:url . "https://gitlab.petton.fr/DamienCassou/desktop-environment"))]) + (greader . + [(0 1) + ((emacs + (25))) + "gnamù reader, a reader with espeak tts" tar + ((:maintainer "Michelangelo Rodriguez" . "michelangelo.rodriguez@gmail.com") + (:authors + ("Michelangelo Rodriguez" . "michelangelo.rodriguez@gmail.com")) + (:keywords "tools" "accessibility") + (:url . "http://elpa.gnu.org/packages/greader.html"))]) + (guess-language . + [(0 0 1) + ((cl-lib + (0 5)) + (emacs + (24)) + (nadvice + (0 1))) + "Robust automatic language detection" single + ((:authors + ("Titus von der Malsburg" . "malsburg@posteo.de")) + (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de") + (:url . "https://github.com/tmalsburg/guess-language.el"))]) + (heap . + [(0 5) + nil "Heap (a.k.a. priority queue) data structure" single + ((:keywords "extensions" "data structures" "heap" "priority queue") + (:authors + ("Toby Cubitt" . "toby-predictive@dr-qubit.org")) + (:maintainer "Toby Cubitt" . "toby-predictive@dr-qubit.org") + (:url . "http://www.dr-qubit.org/emacs.php"))]) + (highlight-escape-sequences . + [(0 4) + nil "Highlight escape sequences" single + ((:keywords "convenience") + (:authors + ("Dmitry Gutov" . "dgutov@yandex.ru") + ("Pavel Matcula" . "dev.plvlml@gmail.com")) + (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru") + (:url . "https://github.com/dgutov/highlight-escape-sequences"))]) + (hook-helpers . + [(1 1 1) + ((emacs + (25 1))) + "Anonymous, modifiable hook functions" tar + ((:url . "https://savannah.nongnu.org/projects/hook-helpers-el/") + (:maintainer "Ian Dunn" . "dunni@gnu.org") + (:authors + ("Ian Dunn" . "dunni@gnu.org")) + (:keywords "development" "hooks"))]) + (html5-schema . + [(0 1) + nil "Add HTML5 schemas for use by nXML" tar + ((:url . "https://github.com/validator/validator") + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:keywords "html" "xml"))]) + (hydra . + [(0 14 0) + ((cl-lib + (0 5))) + "Make bindings that stick around." tar + ((:url . "https://github.com/abo-abo/hydra") + (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") + (:authors + ("Oleh Krehel" . "ohwoeowho@gmail.com")) + (:keywords "bindings"))]) + (hyperbole . + [(7 0 6) + ((emacs + (24 4))) + "GNU Hyperbole: The Everyday Hypertextual Information Manager" tar + ((:url . "http://www.gnu.org/software/hyperbole") + (:maintainer "Bob Weiner , Mats Lidell" . "matsl@gnu.org") + (:authors + ("Bob Weiner")) + (:keywords "comm" "convenience" "files" "frames" "hypermedia" "languages" "mail" "matching" "mouse" "multimedia" "outlines" "tools" "wp"))]) + (ioccur . + [(2 4) + nil "Incremental occur" single + ((:authors + ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) + (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com") + (:url . "https://github.com/thierryvolpiatto/ioccur"))]) + (iterators . + [(0 1 1) + ((emacs + (25))) + "Functions for working with iterators" single + ((:url . "http://elpa.gnu.org/packages/iterators.html") + (:keywords "extensions" "elisp") + (:authors + ("Michael Heerdegen" . "michael_heerdegen@web.de")) + (:maintainer "Michael Heerdegen" . "michael_heerdegen@web.de"))]) + (ivy . + [(0 13 0) + ((emacs + (24 5))) + "Incremental Vertical completYon" tar + ((:url . "https://github.com/abo-abo/swiper") + (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") + (:authors + ("Oleh Krehel" . "ohwoeowho@gmail.com")) + (:keywords "matching"))]) + (ivy-explorer . + [(0 3 2) + ((emacs + (25)) + (ivy + (0 10 0))) + "Dynamic file browsing grid using ivy" single + ((:keywords "convenience" "files" "matching") + (:authors + ("Clemens Radermacher" . "clemera@posteo.net")) + (:maintainer "Clemens Radermacher" . "clemera@posteo.net") + (:url . "https://github.com/clemera/ivy-explorer"))]) + (javaimp . + [(0 7 1) + nil "Add and reorder Java import statements in Maven/Gradle projects" tar + ((:maintainer "Filipp Gunbin" . "fgunbin@fastmail.fm") + (:authors + ("Filipp Gunbin" . "fgunbin@fastmail.fm")) + (:keywords "java" "maven" "gradle" "programming") + (:url . "http://elpa.gnu.org/packages/javaimp.html"))]) + (jgraph-mode . + [(1 1) + ((cl-lib + (0 5))) + "Major mode for Jgraph files" single + ((:url . "http://elpa.gnu.org/packages/jgraph-mode.html") + (:keywords "tex" "wp") + (:authors + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))]) + (js2-mode . + [(20190219) + ((emacs + (24 1)) + (cl-lib + (0 5))) + "Improved JavaScript editing mode" tar + ((:url . "https://github.com/mooz/js2-mode/") + (:maintainer "Steve Yegge" . "steve.yegge@gmail.com") + (:authors + ("Steve Yegge" . "steve.yegge@gmail.com") + ("mooz" . "stillpedant@gmail.com") + ("Dmitry Gutov" . "dgutov@yandex.ru")) + (:keywords "languages" "javascript"))]) + (json-mode . + [(0 1) + ((emacs + (25 1))) + "Major mode for editing JSON files" single + ((:url . "http://elpa.gnu.org/packages/json-mode.html") + (:keywords "data") + (:authors + ("Simen Heggestøyl" . "simenheg@gmail.com")) + (:maintainer "Simen Heggestøyl" . "simenheg@gmail.com"))]) + (jsonrpc . + [(1 0 8) + ((emacs + (25 2))) + "JSON-RPC library" single + ((:url . "http://elpa.gnu.org/packages/jsonrpc.html") + (:keywords "processes" "languages" "extensions") + (:authors + ("João Távora" . "joaotavora@gmail.com")) + (:maintainer "João Távora" . "joaotavora@gmail.com"))]) + (jumpc . + [(3 0) + nil "jump to previous insertion points" single + ((:url . "http://elpa.gnu.org/packages/jumpc.html") + (:authors + ("Ivan Kanis" . "ivan@kanis.fr")) + (:maintainer "Ivan Kanis" . "ivan@kanis.fr"))]) + (kmb . + [(0 1) + ((emacs + (24 1))) + "Kill buffers matching a regexp w/o confirmation" single + ((:url . "http://elpa.gnu.org/packages/kmb.html") + (:keywords "lisp" "convenience") + (:authors + ("Tino Calancha" . "tino.calancha@gmail.com")) + (:maintainer "Tino Calancha"))]) + (landmark . + [(1 0) + nil "Neural-network robot that learns landmarks" single + ((:url . "http://elpa.gnu.org/packages/landmark.html") + (:keywords "games" "neural network" "adaptive search" "chemotaxis") + (:authors + ("Terrence Brannon" . "metaperl@gmail.com")) + (:maintainer nil . "emacs-devel@gnu.org"))]) + (let-alist . + [(1 0 6) + ((emacs + (24 1))) + "Easily let-bind values of an assoc-list by their names" single + ((:url . "http://elpa.gnu.org/packages/let-alist.html") + (:keywords "extensions" "lisp") + (:authors + ("Artur Malabarba" . "emacs@endlessparentheses.com")) + (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com"))]) + (lex . + [(1 1) + nil "Lexical analyser construction" tar + ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:url . "http://elpa.gnu.org/packages/lex.html"))]) + (lmc . + [(1 4) + ((emacs + (24)) + (cl-lib + (0 5))) + "Little Man Computer in Elisp" single + ((:url . "http://elpa.gnu.org/packages/lmc.html") + (:authors + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))]) + (load-dir . + [(0 0 5) + ((cl-lib + (0 5))) + "Load all Emacs Lisp files in a given directory" single + ((:url . "http://elpa.gnu.org/packages/load-dir.html") + (:keywords "lisp" "files" "convenience") + (:maintainer "Teodor Zlatanov" . "tzz@lifelogs.com"))]) + (load-relative . + [(1 3 1) + nil "Relative file load (within a multi-file Emacs package)" single + ((:keywords "internal") + (:authors + ("Rocky Bernstein" . "rocky@gnu.org")) + (:maintainer "Rocky Bernstein" . "rocky@gnu.org") + (:url . "http://github.com/rocky/emacs-load-relative"))]) + (loc-changes . + [(1 2) + nil "keep track of positions even after buffer changes" single + ((:authors + ("Rocky Bernstein" . "rocky@gnu.org")) + (:maintainer "Rocky Bernstein" . "rocky@gnu.org") + (:url . "http://github.com/rocky/emacs-loc-changes"))]) + (loccur . + [(1 2 4) + ((emacs + (24 3))) + "Perform an occur-like folding in current buffer" single + ((:keywords "matching") + (:authors + ("Alexey Veretennikov" . "alexey.veretennikov@gmail.com")) + (:maintainer "Alexey Veretennikov" . "alexey.veretennikov@gmail.com") + (:url . "https://github.com/fourier/loccur"))]) + (map . + [(2 0) + ((emacs + (25))) + "Map manipulation functions" single + ((:url . "http://elpa.gnu.org/packages/map.html") + (:keywords "convenience" "map" "hash-table" "alist" "array") + (:authors + ("Nicolas Petton" . "nicolas@petton.fr")) + (:maintainer nil . "emacs-devel@gnu.org"))]) + (markchars . + [(0 2 1) + nil "Mark chars fitting certain characteristics" single + ((:url . "http://elpa.gnu.org/packages/markchars.html") + (:authors + ("Lennart Borgman" . "lennart.borgman@gmail.com")) + (:maintainer "Lennart Borgman" . "lennart.borgman@gmail.com"))]) + (math-symbol-lists . + [(1 2 1) + nil "Lists of Unicode math symbols and latex commands" single + ((:keywords "unicode" "symbols" "mathematics") + (:authors + ("Vitalie Spinu" . "spinuvit@gmail.com")) + (:maintainer "Vitalie Spinu" . "spinuvit@gmail.com") + (:url . "https://github.com/vspinu/math-symbol-lists"))]) + (memory-usage . + [(0 2) + nil "Analyze the memory usage of Emacs in various ways" single + ((:url . "http://elpa.gnu.org/packages/memory-usage.html") + (:keywords "maint") + (:authors + ("Stefan Monnier" . "monnier@cs.yale.edu")) + (:maintainer "Stefan Monnier" . "monnier@cs.yale.edu"))]) + (metar . + [(0 3) + ((cl-lib + (0 5))) + "Retrieve and decode METAR weather information" single + ((:url . "http://elpa.gnu.org/packages/metar.html") + (:keywords "comm") + (:authors + ("Mario Lang" . "mlang@delysid.org")) + (:maintainer "Mario Lang" . "mlang@delysid.org"))]) + (midi-kbd . + [(0 2) + ((emacs + (25))) + "Create keyboard events from Midi input" single + ((:url . "http://elpa.gnu.org/packages/midi-kbd.html") + (:keywords "convenience" "hardware" "multimedia") + (:authors + ("David Kastrup" . "dak@gnu.org")) + (:maintainer "David Kastrup" . "dak@gnu.org"))]) + (mines . + [(1 6) + ((emacs + (24 4)) + (cl-lib + (0 5))) + "Minesweeper game" tar + ((:url . "https://github.com/calancha/Minesweeper") + (:maintainer "Tino Calancha" . "tino.calancha@gmail.com") + (:authors + ("Tino Calancha" . "tino.calancha@gmail.com")) + (:keywords "games"))]) + (minibuffer-line . + [(0 1) + nil "Display status info in the minibuffer window" single + ((:url . "http://elpa.gnu.org/packages/minibuffer-line.html") + (:authors + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))]) + (minimap . + [(1 2) + nil "Sidebar showing a \"mini-map\" of a buffer" single + ((:url . "http://elpa.gnu.org/packages/minimap.html") + (:authors + ("David Engster" . "deng@randomsample.de")) + (:maintainer "David Engster" . "deng@randomsample.de"))]) + (mmm-mode . + [(0 5 7) + ((cl-lib + (0 2))) + "Allow Multiple Major Modes in a buffer" tar + ((:url . "https://github.com/purcell/mmm-mode") + (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru") + (:authors + ("Michael Abraham Shulman" . "viritrilbia@gmail.com")) + (:keywords "convenience" "faces" "languages" "tools"))]) + (multishell . + [(1 1 5) + ((cl-lib + (0 5))) + "Easily use multiple shell buffers, local and remote" tar + ((:url . "https://github.com/kenmanheimer/EmacsMultishell") + (:maintainer "Ken Manheimer" . "ken.manheimer@gmail.com") + (:authors + ("Ken Manheimer" . "ken.manheimer@gmail.com")) + (:keywords "processes"))]) + (muse . + [(3 20 2) + nil "Authoring and publishing tool for Emacs" tar + ((:url . "http://mwolson.org/projects/EmacsMuse.html") + (:maintainer "Michael Olson" . "mwolson@gnu.org") + (:authors + ("John Wiegley" . "johnw@gnu.org")) + (:keywords "hypermedia"))]) + (myers . + [(0 1) + ((emacs + (25))) + "Random-access singly-linked lists" single + ((:url . "http://elpa.gnu.org/packages/myers.html") + (:keywords "list" "containers") + (:authors + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))]) + (nadvice . + [(0 3) + nil "Forward compatibility for Emacs-24.4's nadvice" single + ((:url . "http://elpa.gnu.org/packages/nadvice.html") + (:authors + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))]) + (nameless . + [(1 0 2) + ((emacs + (24 4))) + "Hide package namespace in your emacs-lisp code" single + ((:keywords "convenience" "lisp") + (:authors + ("Artur Malabarba" . "emacs@endlessparentheses.com")) + (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") + (:url . "https://github.com/Malabarba/nameless"))]) + (names . + [(20151201 0) + ((emacs + (24 1)) + (cl-lib + (0 5)) + (nadvice + (0 3))) + "Namespaces for emacs-lisp. Avoid name clobbering without hiding symbols." tar + ((:url . "https://github.com/Malabarba/names") + (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") + (:authors + ("Artur Malabarba" . "emacs@endlessparentheses.com")) + (:keywords "extensions" "lisp"))]) + (nhexl-mode . + [(1 4) + ((emacs + (24 4)) + (cl-lib + (0 5))) + "Minor mode to edit files via hex-dump format" single + ((:url . "http://elpa.gnu.org/packages/nhexl-mode.html") + (:keywords "data") + (:authors + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))]) + (nlinum . + [(1 9) + nil "Show line numbers in the margin" single + ((:url . "http://elpa.gnu.org/packages/nlinum.html") + (:keywords "convenience") + (:authors + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))]) + (notes-mode . + [(1 30) + nil "Indexing system for on-line note-taking" tar + ((:maintainer nil . ".") + (:authors + (nil . ".")) + (:url . "http://elpa.gnu.org/packages/notes-mode.html"))]) + (ntlm . + [(2 1 0) + nil "NTLM (NT LanManager) authentication support" single + ((:url . "http://elpa.gnu.org/packages/ntlm.html") + (:keywords "ntlm" "sasl" "comm") + (:authors + ("Taro Kawagishi" . "tarok@transpulse.org")) + (:maintainer "Thomas Fitzsimmons" . "fitzsim@fitzsim.org"))]) + (num3-mode . + [(1 3) + nil "highlight groups of digits in long numbers" single + ((:url . "http://elpa.gnu.org/packages/num3-mode.html") + (:keywords "faces" "minor-mode") + (:authors + ("Felix Lee , Michal Nazarewicz" . "mina86@mina86.com")) + (:maintainer "Michal Nazarewicz" . "mina86@mina86.com"))]) + (oauth2 . + [(0 11) + nil "OAuth 2.0 Authorization Protocol" single + ((:url . "http://elpa.gnu.org/packages/oauth2.html") + (:keywords "comm") + (:authors + ("Julien Danjou" . "julien@danjou.info")) + (:maintainer "Julien Danjou" . "julien@danjou.info"))]) + (objed . + [(0 8 1) + ((emacs + (25)) + (cl-lib + (0 5))) + "Navigate and edit text objects." tar + ((:url . "https://github.com/clemera/objed") + (:maintainer "Clemens Radermacher" . "clemera@posteo.net") + (:authors + ("Clemens Radermacher" . "clemera@posteo.net")) + (:keywords "convenience"))]) + (olivetti . + [(1 7 1) + ((emacs + (24 5))) + "Minor mode for a nice writing environment" single + ((:url . "http://elpa.gnu.org/packages/olivetti.html") + (:keywords "wp" "text") + (:authors + ("Paul W. Rankin" . "pwr@sdf.org")) + (:maintainer "Paul W. Rankin" . "pwr@sdf.org"))]) + (omn-mode . + [(1 2) + nil "Support for OWL Manchester Notation" single + ((:url . "http://elpa.gnu.org/packages/omn-mode.html") + (:authors + ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) + (:maintainer "Phillip Lord" . "phillip.lord@newcastle.ac.uk"))]) + (on-screen . + [(1 3 3) + ((cl-lib + (0))) + "guide your eyes while scrolling" single + ((:keywords "convenience") + (:authors + ("Michael Heerdegen" . "michael_heerdegen@web.de")) + (:maintainer "Michael Heerdegen" . "michael_heerdegen@web.de") + (:url . "https://github.com/michael-heerdegen/on-screen.el"))]) + (org . + [(9 2 6) + nil "Outline-based notes management and organizer" tar + ((:url . "https://orgmode.org") + (:maintainer "Carsten Dominik ") + (:authors + ("Carsten Dominik ")) + (:keywords "outlines" "hypermedia" "calendar" "wp"))]) + (org-edna . + [(1 0 2) + ((emacs + (25 1)) + (seq + (2 19)) + (org + (9 0 5))) + "Extensible Dependencies 'N' Actions" tar + ((:url . "https://savannah.nongnu.org/projects/org-edna-el/") + (:maintainer "Ian Dunn" . "dunni@gnu.org") + (:authors + ("Ian Dunn" . "dunni@gnu.org")) + (:keywords "convenience" "text" "org"))]) + (orgalist . + [(1 9) + ((emacs + (24 4))) + "Manage Org-like lists in non-Org buffers" single + ((:url . "http://elpa.gnu.org/packages/orgalist.html") + (:keywords "convenience") + (:authors + ("Nicolas Goaziou" . "mail@nicolasgoaziou.fr")) + (:maintainer "Nicolas Goaziou" . "mail@nicolasgoaziou.fr"))]) + (osc . + [(0 1) + nil "Open Sound Control protocol library" single + ((:url . "http://elpa.gnu.org/packages/osc.html") + (:keywords "comm" "processes" "multimedia") + (:authors + ("Mario Lang" . "mlang@delysid.org")) + (:maintainer "Mario Lang" . "mlang@delysid.org"))]) + (other-frame-window . + [(1 0 6) + ((emacs + (24 4))) + "Minor mode to enable global prefix keys for other frame/window buffer placement" single + ((:url . "http://elpa.gnu.org/packages/other-frame-window.html") + (:keywords "frame" "window") + (:authors + ("Stephen Leake" . "stephen_leake@member.fsf.org")) + (:maintainer "Stephen Leake" . "stephen_leake@member.fsf.org"))]) + (pabbrev . + [(4 2 1) + nil "Predictive abbreviation expansion" single + ((:url . "http://elpa.gnu.org/packages/pabbrev.html") + (:authors + ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) + (:maintainer "Phillip Lord" . "phillip.lord@newcastle.ac.uk"))]) + (paced . + [(1 1 3) + ((emacs + (25 1)) + (async + (1 9 1))) + "Predictive Abbreviation Completion and Expansion using Dictionaries" tar + ((:url . "https://savannah.nongnu.org/projects/paced-el/") + (:maintainer "Ian Dunn" . "dunni@gnu.org") + (:authors + ("Ian Dunn" . "dunni@gnu.org")) + (:keywords "convenience" "completion"))]) + (parsec . + [(0 1 3) + ((emacs + (24)) + (cl-lib + (0 5))) + "Parser combinator library" tar + ((:url . "https://github.com/cute-jumper/parsec.el") + (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") + (:authors + ("Junpeng Qiu" . "qjpchmail@gmail.com")) + (:keywords "extensions"))]) + (path-iterator . + [(1 0) + ((emacs + (25 0))) + "An iterator for traversing a directory path." tar + ((:maintainer "Stephen Leake" . "stephen_leake@stephe-leake.org") + (:authors + ("Stephen Leake" . "stephen_leake@stephe-leake.org")) + (:url . "http://elpa.gnu.org/packages/path-iterator.html"))]) + (peg . + [(1 0) + ((emacs + (25))) + "Parsing Expression Grammars in Emacs Lisp" tar + ((:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca") + (:authors + ("Helmut Eller" . "eller.helmut@gmail.com")) + (:url . "http://elpa.gnu.org/packages/peg.html"))]) + (persist . + [(0 4) + nil "Persist Variables between Emacs Sessions" tar + ((:maintainer "Phillip Lord" . "phillip.lord@russet.org.uk") + (:authors + ("Phillip Lord" . "phillip.lord@russet.org.uk")) + (:url . "http://elpa.gnu.org/packages/persist.html"))]) + (phps-mode . + [(0 3 17) + ((emacs + (26))) + "Major mode for PHP with Semantic integration" tar + ((:url . "https://github.com/cjohansson/emacs-phps-mode") + (:maintainer "Christian Johansson" . "christian@cvj.se") + (:authors + ("Christian Johansson" . "christian@cvj.se")) + (:keywords "tools" "convenience"))]) + (pinentry . + [(0 1) + nil "GnuPG Pinentry server implementation" single + ((:url . "http://elpa.gnu.org/packages/pinentry.html") + (:keywords "gnupg") + (:authors + ("Daiki Ueno" . "ueno@gnu.org")) + (:maintainer "Daiki Ueno" . "ueno@gnu.org"))]) + (poker . + [(0 2) + nil "Texas hold 'em poker" single + ((:url . "http://elpa.gnu.org/packages/poker.html") + (:keywords "games") + (:authors + ("Mario Lang" . "mlang@delysid.org")) + (:maintainer "Mario Lang" . "mlang@delysid.org"))]) + (posframe . + [(0 5 0) + ((emacs + (26))) + "Pop a posframe (just a frame) at point" single + ((:keywords "tooltip") + (:authors + ("Feng Shu" . "tumashu@163.com")) + (:maintainer "Feng Shu" . "tumashu@163.com") + (:url . "https://github.com/tumashu/posframe"))]) + (psgml . + [(1 3 4) + nil "SGML-editing mode with parsing support" tar + ((:maintainer "Lennart Staflin" . "lstaflin@gmail.com") + (:authors + ("Lennart Staflin" . "lenst@lysator.liu.se") + ("James Clark" . "jjc@clark.com")) + (:keywords "languages") + (:url . "http://elpa.gnu.org/packages/psgml.html"))]) + (python . + [(0 26 1) + ((emacs + (24 1)) + (cl-lib + (1 0))) + "Python's flying circus support for Emacs" single + ((:keywords "languages") + (:authors + ("Fabián E. Gallina" . "fgallina@gnu.org")) + (:maintainer nil . "emacs-devel@gnu.org") + (:url . "https://github.com/fgallina/python.el"))]) + (quarter-plane . + [(0 1) + nil "Minor mode for quarter-plane style editing" single + ((:url . "http://elpa.gnu.org/packages/quarter-plane.html") + (:keywords "convenience" "wp") + (:authors + ("Peter J. Weisberg")) + (:maintainer "Peter J. Weisberg"))]) + (queue . + [(0 2) + nil "Queue data structure" single + ((:keywords "extensions" "data structures" "queue") + (:authors + ("Inge Wallin" . "inge@lysator.liu.se") + ("Toby Cubitt" . "toby-predictive@dr-qubit.org")) + (:maintainer "Toby Cubitt" . "toby-predictive@dr-qubit.org") + (:url . "http://www.dr-qubit.org/emacs.php"))]) + (rainbow-mode . + [(1 0 1) + nil "Colorize color names in buffers" single + ((:url . "http://elpa.gnu.org/packages/rainbow-mode.html") + (:keywords "faces") + (:authors + ("Julien Danjou" . "julien@danjou.info")) + (:maintainer "Julien Danjou" . "julien@danjou.info"))]) + (rbit . + [(0 1) + nil "Red-black persistent interval trees" single + ((:url . "http://elpa.gnu.org/packages/rbit.html") + (:keywords "data structures" "binary tree" "intervals") + (:authors + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))]) + (rcirc-color . + [(0 4 1) + ((emacs + (24 4))) + "color nicks" single + ((:url . "http://elpa.gnu.org/packages/rcirc-color.html") + (:keywords "comm") + (:authors + ("Alex Schroeder" . "alex@gnu.org")) + (:maintainer "Alex Schroeder" . "alex@gnu.org"))]) + (rcirc-menu . + [(1 1) + nil "A menu of all your rcirc connections" single + ((:url . "http://elpa.gnu.org/packages/rcirc-menu.html") + (:keywords "comm") + (:authors + ("Alex Schroeder" . "alex@gnu.org")) + (:maintainer "Alex Schroeder" . "alex@gnu.org"))]) + (realgud . + [(1 5 1) + ((load-relative + (1 3 1)) + (loc-changes + (1 2)) + (test-simple + (1 3 0)) + (emacs + (25))) + "A modular front-end for interacting with external debuggers" tar + ((:url . "http://github.com/realgud/realgud/") + (:maintainer "Rocky Bernstein" . "rocky@gnu.org") + (:authors + ("Rocky Bernstein" . "rocky@gnu.org")) + (:keywords "debugger" "gdb" "python" "perl" "go" "bash" "zsh" "bashdb" "zshdb" "remake" "trepan" "perldb" "pdb"))]) + (realgud-ipdb . + [(1 0 0) + ((realgud + (1 5 0)) + (load-relative + (1 3 1)) + (emacs + (25))) + "Realgud front-end to ipdb" tar + ((:url . "http://github.com/rocky/realgud-ipdb") + (:maintainer "Rocky Bernstein" . "rocky@gnu.org") + (:authors + ("Rocky Bernstein" . "rocky@gnu.org")))]) + (realgud-jdb . + [(1 0 0) + ((realgud + (1 4 5)) + (load-relative + (1 2)) + (cl-lib + (0 5)) + (emacs + (25))) + "Realgud front-end to Java's jdb debugger\"" tar + ((:url . "http://github.com/realgud/realgud-jdb") + (:maintainer "Rocky Bernstein" . "rocky@gnu.org") + (:authors + ("Rocky Bernstein" . "rocky@gnu.org")))]) + (realgud-lldb . + [(1 0 2) + ((load-relative + (1 3 1)) + (realgud + (1 5 0)) + (emacs + (25))) + "Realgud front-end to lldb" tar + ((:url . "http://github.com/realgud/realgud-lldb") + (:maintainer "Rocky Bernstein" . "rocky@gnu.org") + (:authors + ("Rocky Bernstein" . "rocky@gnu.org")))]) + (realgud-node-debug . + [(1 0 0) + ((realgud + (1 4 5)) + (load-relative + (1 2)) + (cl-lib + (0 5)) + (emacs + (25))) + "Realgud front-end to older \"node debug\"" tar + ((:url . "http://github.com/realgud/realgud-node-debug") + (:maintainer "Rocky Bernstein" . "rocky@gnu.org") + (:authors + ("Rocky Bernstein" . "rocky@gnu.org")))]) + (realgud-node-inspect . + [(1 0 0) + ((realgud + (1 4 5)) + (load-relative + (1 2)) + (cl-lib + (0 5)) + (emacs + (24))) + "Realgud front-end to newer \"node inspect\"" tar + ((:url . "http://github.com/realgud/realgud-node-inspect") + (:maintainer "Rocky Bernstein" . "rocky@gnu.org") + (:authors + ("Rocky Bernstein" . "rocky@gnu.org")))]) + (realgud-trepan-ni . + [(1 0 1) + ((load-relative + (1 2)) + (realgud + (1 5 0)) + (cl-lib + (0 5)) + (emacs + (25))) + "Realgud front-end to trepan-ni" tar + ((:url . "http://github.com/realgud/realgud-trepan-ni") + (:maintainer "Rocky Bernstein" . "rocky@gnu.org") + (:authors + ("Rocky Bernstein" . "rocky@gnu.org")))]) + (register-list . + [(0 1) + nil "Interactively list/edit registers" single + ((:url . "http://elpa.gnu.org/packages/register-list.html") + (:keywords "register") + (:authors + ("Bastien Guerry" . "bzg@gnu.org")) + (:maintainer "Bastien Guerry" . "bzg@gnu.org"))]) + (relint . + [(1 11) + ((xr + (1 13))) + "Elisp regexp mistake finder" tar + ((:url . "https://github.com/mattiase/relint") + (:maintainer "Mattias EngdegÃ¥rd" . "mattiase@acm.org") + (:authors + ("Mattias EngdegÃ¥rd" . "mattiase@acm.org")) + (:keywords "lisp" "maint" "regexps"))]) + (rich-minority . + [(1 0 1) + ((cl-lib + (0 5))) + "Clean-up and Beautify the list of minor-modes." single + ((:keywords "mode-line" "faces") + (:authors + ("Artur Malabarba" . "emacs@endlessparentheses.com")) + (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") + (:url . "https://github.com/Malabarba/rich-minority"))]) + (rnc-mode . + [(0 2) + nil "Emacs mode to edit Relax-NG Compact files" single + ((:url . "http://elpa.gnu.org/packages/rnc-mode.html") + (:keywords "xml" "relaxng") + (:authors + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))]) + (rudel . + [(0 3 1) + ((emacs + (24)) + (cl-lib + (0 5)) + (cl-generic + (0 3)) + (cl-print + (1 0))) + "A collaborative editing framework for Emacs" tar + ((:url . "http://rudel.sourceforge.net/") + (:maintainer "Jan Moringen" . "scymtym@users.sourceforge.net") + (:authors + ("Jan Moringen" . "scymtym@users.sourceforge.net")) + (:keywords "rudel" "collaboration"))]) + (scroll-restore . + [(1 0) + nil "restore original position after scrolling" single + ((:url . "http://elpa.gnu.org/packages/scroll-restore.html") + (:keywords "scrolling") + (:authors + ("Martin Rudalics" . "rudalics@gmx.at")) + (:maintainer "Martin Rudalics" . "rudalics@gmx.at"))]) + (sed-mode . + [(1 0) + nil "Major mode to edit sed scripts" single + ((:url . "http://elpa.gnu.org/packages/sed-mode.html") + (:authors + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))]) + (seq . + [(2 20) + nil "Sequence manipulation functions" tar + ((:maintainer nil . "emacs-devel@gnu.org") + (:authors + ("Nicolas Petton" . "nicolas@petton.fr")) + (:keywords "sequences") + (:url . "http://elpa.gnu.org/packages/seq.html"))]) + (shelisp . + [(0 9 1) + nil "execute elisp in shell" single + ((:url . "http://elpa.gnu.org/packages/shelisp.html") + (:keywords "terminals" "lisp" "processes") + (:authors + ("Michael R. Mauger" . "michael@mauger.com")) + (:maintainer "Michael R. Mauger" . "michael@mauger.com"))]) + (shen-mode . + [(0 1) + nil "A major mode for editing shen source code" tar + ((:maintainer "Eric Schulte" . "schulte.eric@gmail.com") + (:authors + ("Eric Schulte" . "schulte.eric@gmail.com")) + (:keywords "languages" "shen") + (:url . "http://elpa.gnu.org/packages/shen-mode.html"))]) + (sisu-mode . + [(7 1 8) + nil "Major mode for SiSU markup text" single + ((:keywords "text" "syntax" "processes" "tools") + (:authors + ("Ralph Amissah & Ambrose Kofi Laing")) + (:maintainer "Ralph Amissah" . "ralph.amissah@gmail.com") + (:url . "http://www.sisudoc.org/"))]) + (smalltalk-mode . + [(3 2 92) + nil "Major mode for the GNU Smalltalk programming language" tar + ((:maintainer "Derek Zhou" . "derek@shannon-data.com") + (:authors + ("Steve Byrne")) + (:url . "http://elpa.gnu.org/packages/smalltalk-mode.html"))]) + (smart-yank . + [(0 1 1) + ((emacs + (24))) + "A different approach of yank pointer handling" single + ((:url . "http://elpa.gnu.org/packages/smart-yank.html") + (:keywords "convenience") + (:authors + ("Michael Heerdegen" . "michael_heerdegen@web.de")) + (:maintainer "Michael Heerdegen" . "michael_heerdegen@web.de"))]) + (sml-mode . + [(6 9) + ((emacs + (24)) + (cl-lib + (0 5))) + "Major mode for editing (Standard) ML" single + ((:url . "http://elpa.gnu.org/packages/sml-mode.html") + (:keywords "sml") + (:authors + ("Lars Bo Nielsen") + (" Olin Shivers") + (" Fritz Knabe (?)") + (" Steven Gilmore (?)") + (" Matthew Morley" . "mjm@scs.leeds.ac.uk") + (" Matthias Blume" . "blume@cs.princeton.edu") + (" (Stefan Monnier)" . "monnier@iro.umontreal.ca")) + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))]) + (soap-client . + [(3 1 5) + ((cl-lib + (0 6 1))) + "Access SOAP web services" tar + ((:url . "https://github.com/alex-hhh/emacs-soap-client") + (:maintainer "Alexandru Harsanyi" . "AlexHarsanyi@gmail.com") + (:authors + ("Alexandru Harsanyi" . "AlexHarsanyi@gmail.com")) + (:keywords "soap" "web-services" "comm" "hypermedia"))]) + (sokoban . + [(1 4 8) + ((emacs + (23 1)) + (cl-lib + (0 5))) + "Implementation of Sokoban for Emacs." tar + ((:maintainer "Dieter Deyke" . "dieter.deyke@gmail.com") + (:authors + ("Glynn Clements" . "glynn.clements@xemacs.org")) + (:keywords "games") + (:url . "http://elpa.gnu.org/packages/sokoban.html"))]) + (sotlisp . + [(1 6 2) + ((emacs + (24 1))) + "Write lisp at the speed of thought." single + ((:keywords "convenience" "lisp") + (:authors + ("Artur Malabarba" . "emacs@endlessparentheses.com")) + (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") + (:url . "https://github.com/Malabarba/speed-of-thought-lisp"))]) + (spinner . + [(1 7 3) + nil "Add spinners and progress-bars to the mode-line for ongoing operations" single + ((:keywords "processes" "mode-line") + (:authors + ("Artur Malabarba" . "emacs@endlessparentheses.com")) + (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") + (:url . "https://github.com/Malabarba/spinner.el"))]) + (sql-indent . + [(1 4) + ((cl-lib + (0 5))) + "Support for indenting code in SQL files." tar + ((:url . "https://github.com/alex-hhh/emacs-sql-indent") + (:maintainer "Alex Harsanyi" . "AlexHarsanyi@gmail.com") + (:authors + ("Alex Harsanyi" . "AlexHarsanyi@gmail.com")) + (:keywords "languages" "sql"))]) + (ssh-deploy . + [(3 1 10) + ((emacs + (25))) + "Deployment via Tramp, global or per directory." tar + ((:url . "https://github.com/cjohansson/emacs-ssh-deploy") + (:maintainer "Christian Johansson" . "christian@cvj.se") + (:authors + ("Christian Johansson" . "christian@cvj.se")) + (:keywords "tools" "convenience"))]) + (stream . + [(2 2 4) + ((emacs + (25))) + "Implementation of streams" tar + ((:maintainer nil . "nicolas@petton.fr") + (:authors + ("Nicolas Petton" . "nicolas@petton.fr")) + (:keywords "stream" "laziness" "sequences") + (:url . "http://elpa.gnu.org/packages/stream.html"))]) + (svg . + [(1 0) + ((emacs + (25))) + "SVG image creation functions" single + ((:url . "http://elpa.gnu.org/packages/svg.html") + (:keywords "image") + (:authors + ("Lars Magne Ingebrigtsen" . "larsi@gnus.org") + ("Felix E. Klee" . "felix.klee@inka.de")) + (:maintainer "Lars Magne Ingebrigtsen" . "larsi@gnus.org"))]) + (svg-clock . + [(1 1) + ((svg + (0 1)) + (emacs + (25 0))) + "Analog clock using Scalable Vector Graphics" single + ((:url . "http://elpa.gnu.org/packages/svg-clock.html") + (:keywords "demo" "svg" "clock") + (:authors + ("Ulf Jasper" . "ulf.jasper@web.de")) + (:maintainer "Ulf Jasper" . "ulf.jasper@web.de"))]) + (system-packages . + [(1 0 11) + ((emacs + (24 3))) + "functions to manage system packages" tar + ((:url . "https://gitlab.com/jabranham/system-packages") + (:maintainer "J. Alexander Branham" . "alex.branham@gmail.com") + (:authors + ("J. Alexander Branham" . "alex.branham@gmail.com")))]) + (tNFA . + [(0 1 1) + ((queue + (0 1))) + "Tagged non-deterministic finite-state automata" single + ((:keywords "extensions" "matching" "data structures tnfa" "nfa" "dfa" "finite state automata" "automata" "regexp") + (:authors + ("Toby Cubitt" . "toby-predictive@dr-qubit.org")) + (:maintainer "Toby Cubitt" . "toby-predictive@dr-qubit.org") + (:url . "http://www.dr-qubit.org/emacs.php"))]) + (temp-buffer-browse . + [(1 5) + ((emacs + (24))) + "temp buffer browse mode" single + ((:url . "http://elpa.gnu.org/packages/temp-buffer-browse.html") + (:keywords "convenience") + (:authors + ("Leo Liu" . "sdl.web@gmail.com")) + (:maintainer "Leo Liu" . "sdl.web@gmail.com"))]) + (test-simple . + [(1 3 0) + ((cl-lib + (0))) + "Simple Unit Test Framework for Emacs Lisp" single + ((:keywords "unit-test") + (:authors + ("Rocky Bernstein" . "rocky@gnu.org")) + (:maintainer "Rocky Bernstein" . "rocky@gnu.org") + (:url . "http://github.com/rocky/emacs-test-simple"))]) + (timerfunctions . + [(1 4 2) + ((cl-lib + (0 5))) + "Enhanced versions of some timer.el functions" single + ((:url . "http://elpa.gnu.org/packages/timerfunctions.html") + (:authors + ("Dave Goel" . "deego3@gmail.com")) + (:maintainer "Dave Goel" . "deego3@gmail.com"))]) + (tiny . + [(0 2 1) + nil "Quickly generate linear ranges in Emacs" tar + ((:url . "https://github.com/abo-abo/tiny") + (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") + (:authors + ("Oleh Krehel" . "ohwoeowho@gmail.com")) + (:keywords "convenience"))]) + (tramp . + [(2 4 2 4) + ((emacs + (24 4))) + "Transparent Remote Access, Multiple Protocol" tar + ((:url . "https://savannah.gnu.org/projects/tramp") + (:maintainer "Michael Albinus" . "michael.albinus@gmx.de") + (:authors + ("Kai Großjohann" . "kai.grossjohann@gmx.net") + ("Michael Albinus" . "michael.albinus@gmx.de")) + (:keywords "comm" "processes"))]) + (tramp-theme . + [(0 2) + ((emacs + (24 1))) + "Custom theme for remote buffers" single + ((:url . "http://elpa.gnu.org/packages/tramp-theme.html") + (:keywords "convenience" "faces") + (:authors + ("Michael Albinus" . "michael.albinus@gmx.de")) + (:maintainer "Michael Albinus" . "michael.albinus@gmx.de"))]) + (transcribe . + [(1 5 2) + nil "Package for audio transcriptions" single + ((:url . "http://elpa.gnu.org/packages/transcribe.html") + (:authors + ("David Gonzalez Gandara" . "dggandara@member.fsf.org")) + (:maintainer "David Gonzalez Gandara" . "dggandara@member.fsf.org"))]) + (trie . + [(0 4) + ((tNFA + (0 1 1)) + (heap + (0 3))) + "Trie data structure" single + ((:keywords "extensions" "matching" "data structures trie" "ternary search tree" "tree" "completion" "regexp") + (:authors + ("Toby Cubitt" . "toby-predictive@dr-qubit.org")) + (:maintainer "Toby Cubitt" . "toby-predictive@dr-qubit.org") + (:url . "http://www.dr-qubit.org/emacs.php"))]) + (undo-tree . + [(0 6 5) + nil "Treat undo history as a tree" single + ((:keywords "convenience" "files" "undo" "redo" "history" "tree") + (:authors + ("Toby Cubitt" . "toby-undo-tree@dr-qubit.org")) + (:maintainer "Toby Cubitt" . "toby-undo-tree@dr-qubit.org") + (:url . "http://www.dr-qubit.org/emacs.php"))]) + (uni-confusables . + [(0 1) + nil "Unicode confusables table" tar + ((:maintainer "Teodor Zlatanov" . "tzz@lifelogs.com") + (:url . "http://elpa.gnu.org/packages/uni-confusables.html"))]) + (uniquify-files . + [(1 0 1) + ((emacs + (25 0))) + "Completion style for files, minimizing directories" tar + ((:maintainer "Stephen Leake" . "stephen_leake@stephe-leake.org") + (:authors + ("Stephen Leake" . "stephen_leake@stephe-leake.org")) + (:keywords "completion" "table" "uniquify") + (:url . "http://elpa.gnu.org/packages/uniquify-files.html"))]) + (url-http-ntlm . + [(2 0 4) + ((cl-lib + (0 5)) + (ntlm + (2 1 0))) + "NTLM authentication for the url library" single + ((:keywords "comm" "data" "processes" "hypermedia") + (:authors + ("Tom Schutzer-Weissmann" . "tom.weissmann@gmail.com")) + (:maintainer "Thomas Fitzsimmons" . "fitzsim@fitzsim.org") + (:url . "https://code.google.com/p/url-http-ntlm/"))]) + (validate . + [(1 0 4) + ((emacs + (24 1)) + (cl-lib + (0 5)) + (seq + (2 16))) + "Schema validation for Emacs-lisp" single + ((:url . "http://elpa.gnu.org/packages/validate.html") + (:keywords "lisp") + (:authors + ("Artur Malabarba" . "emacs@endlessparentheses.com")) + (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com"))]) + (vcl-mode . + [(1 1) + nil "Major mode for Varnish Configuration Language" single + ((:url . "http://elpa.gnu.org/packages/vcl-mode.html") + (:keywords "varnish" "vcl") + (:authors + ("Sergey Poznyakoff" . "gray@gnu.org.ua")) + (:maintainer "Sergey Poznyakoff" . "gray@gnu.org.ua"))]) + (vdiff . + [(0 2 3) + ((emacs + (24 4)) + (hydra + (0 13 0))) + "A diff tool similar to vimdiff" single + ((:keywords "diff") + (:authors + ("Justin Burkett" . "justin@burkett.cc")) + (:maintainer "Justin Burkett" . "justin@burkett.cc") + (:url . "https://github.com/justbur/emacs-vdiff"))]) + (verilog-mode . + [(2019 11 21 248091482) + nil "major mode for editing verilog source in Emacs" single + ((:keywords "languages") + (:authors + ("Michael McNamara" . "mac@verilog.com") + ("Wilson Snyder" . "wsnyder@wsnyder.org")) + (:maintainer "Michael McNamara" . "mac@verilog.com") + (:url . "https://www.veripool.org"))]) + (vigenere . + [(1 0) + ((emacs + (25 1))) + "Run a vigenere cipher on a block of text ;" single + ((:keywords "data" "vigenere" "cipher") + (:authors + ("Ian Dunn" . "dunni@gnu.org")) + (:maintainer "Ian Dunn" . "dunni@gnu.org") + (:url . "https://elpa.gnu.org/packages/vigenere.html"))]) + (visual-filename-abbrev . + [(1 0) + ((emacs + (26 1))) + "Visually abbreviate filenames" single + ((:url . "http://elpa.gnu.org/packages/visual-filename-abbrev.html") + (:keywords "tools") + (:authors + ("Tassilo Horn" . "tsdh@gnu.org")) + (:maintainer "Tassilo Horn" . "tsdh@gnu.org"))]) + (visual-fill . + [(0 1) + nil "Auto-refill paragraphs without modifying the buffer" single + ((:url . "http://elpa.gnu.org/packages/visual-fill.html") + (:authors + ("Stefan Monnier" . "monnier@iro.umontreal.ca")) + (:maintainer "Stefan Monnier" . "monnier@iro.umontreal.ca"))]) + (vlf . + [(1 7 1) + nil "View Large Files" tar + ((:url . "https://github.com/m00natic/vlfi") + (:maintainer "Andrey Kotlarski" . "m00naticus@gmail.com") + (:keywords "large files" "utilities"))]) + (w3 . + [(4 0 49) + nil "Fully customizable, largely undocumented web browser for Emacs" tar + ((:maintainer "William Perry and many more") + (:authors + ("William Perry and many more")) + (:keywords "faces" "help" "comm" "news" "mail" "processes" "mouse" "hypermedia") + (:url . "http://elpa.gnu.org/packages/w3.html"))]) + (wcheck-mode . + [(2019 6 17) + nil "General interface for text checkers" single + ((:keywords "text" "spell" "check" "languages" "ispell") + (:authors + ("Teemu Likonen" . "tlikonen@iki.fi")) + (:maintainer "Teemu Likonen" . "tlikonen@iki.fi") + (:url . "https://github.com/tlikonen/wcheck-mode"))]) + (wconf . + [(0 2 1) + ((emacs + (24 4))) + "Minimal window layout manager" single + ((:keywords "windows" "frames" "layout") + (:authors + ("Ingo Lohmar" . "i.lohmar@gmail.com")) + (:maintainer "Ingo Lohmar" . "i.lohmar@gmail.com") + (:url . "https://github.com/ilohmar/wconf"))]) + (web-server . + [(0 1 1) + ((emacs + (24 3))) + "Emacs Web Server" tar + ((:url . "https://github.com/eschulte/emacs-web-server") + (:maintainer "Eric Schulte" . "schulte.eric@gmail.com") + (:authors + ("Eric Schulte" . "schulte.eric@gmail.com")) + (:keywords "http" "server" "network"))]) + (webfeeder . + [(1 0 0) + ((emacs + (25 1))) + "Build RSS and Atom webfeeds from HTML files" tar + ((:url . "https://gitlab.com/Ambrevar/emacs-webfeeder") + (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz") + (:authors + ("Pierre Neidhardt" . "mail@ambrevar.xyz")) + (:keywords "news" "hypermedia" "blog" "feed" "rss" "atom"))]) + (websocket . + [(1 12) + ((cl-lib + (0 5))) + "Emacs WebSocket client and server" tar + ((:maintainer "Andrew Hyatt" . "ahyatt@gmail.com") + (:authors + ("Andrew Hyatt" . "ahyatt@gmail.com")) + (:keywords "communication" "websocket" "server") + (:url . "http://elpa.gnu.org/packages/websocket.html"))]) + (which-key . + [(3 3 0) + ((emacs + (24 4))) + "Display available keybindings in popup" tar + ((:url . "https://github.com/justbur/emacs-which-key") + (:maintainer "Justin Burkett" . "justin@burkett.cc") + (:authors + ("Justin Burkett" . "justin@burkett.cc")))]) + (windresize . + [(0 1) + nil "Resize windows interactively" single + ((:url . "http://elpa.gnu.org/packages/windresize.html") + (:keywords "window") + (:authors + ("Bastien" . "bzg@gnu.org")) + (:maintainer "Bastien" . "bzg@gnu.org"))]) + (wisi . + [(2 2 1) + ((emacs + (25 0)) + (seq + (2 20))) + "Utilities for implementing an indentation/navigation engine using a generalized LALR parser" tar + ((:url . "http://stephe-leake.org/ada/wisitoken.html") + (:maintainer "Stephen Leake" . "stephen_leake@stephe-leake.org") + (:authors + ("Stephen Leake" . "stephen_leake@stephe-leake.org")) + (:keywords "parser" "indentation" "navigation"))]) + (wisitoken-grammar-mode . + [(1 0 3) + ((wisi + (2 2 1)) + (emacs + (25 0)) + (mmm-mode + (0 5 7))) + "Major mode for editing WisiToken grammar files" tar + ((:maintainer "Stephen Leake" . "stephen_leake@stephe-leake.org") + (:authors + ("Stephen Leake" . "stephen_leake@stephe-leake.org")) + (:keywords "languages") + (:url . "http://elpa.gnu.org/packages/wisitoken-grammar-mode.html"))]) + (wpuzzle . + [(1 1) + nil "find as many word in a given time" single + ((:url . "http://elpa.gnu.org/packages/wpuzzle.html") + (:authors + ("Ivan Kanis" . "ivan@kanis.fr")) + (:maintainer "Ivan Kanis" . "ivan@kanis.fr"))]) + (xclip . + [(1 9) + nil "Copy&paste GUI clipboard from text terminal" single + ((:url . "http://elpa.gnu.org/packages/xclip.html") + (:keywords "convenience" "tools") + (:authors + ("Leo Liu" . "sdl.web@gmail.com")) + (:maintainer "Leo Liu" . "sdl.web@gmail.com"))]) + (xelb . + [(0 18) + ((emacs + (24 4)) + (cl-generic + (0 2))) + "X protocol Emacs Lisp Binding" tar + ((:url . "https://github.com/ch11ng/xelb") + (:maintainer "Chris Feng" . "chris.w.feng@gmail.com") + (:authors + ("Chris Feng" . "chris.w.feng@gmail.com")) + (:keywords "unix"))]) + (xpm . + [(1 0 4) + nil "edit XPM images" tar + ((:url . "http://www.gnuvola.org/software/xpm/") + (:maintainer "Thien-Thi Nguyen" . "ttn@gnu.org") + (:authors + ("Thien-Thi Nguyen" . "ttn@gnu.org")) + (:keywords "multimedia" "xpm"))]) + (xr . + [(1 13) + nil "Convert string regexp to rx notation" tar + ((:url . "https://github.com/mattiase/xr") + (:maintainer "Mattias EngdegÃ¥rd" . "mattiase@acm.org") + (:authors + ("Mattias EngdegÃ¥rd" . "mattiase@acm.org")) + (:keywords "lisp" "maint" "regexps"))]) + (yasnippet . + [(0 13 0) + ((cl-lib + (0 5))) + "Yet another snippet extension for Emacs" tar + ((:url . "http://github.com/joaotavora/yasnippet") + (:maintainer "Noam Postavsky" . "npostavs@gmail.com") + (:keywords "convenience" "emulation"))]) + (yasnippet-classic-snippets . + [(1 0 2) + ((yasnippet + (0 9 1))) + "\"Classic\" yasnippet snippets" tar + ((:maintainer "Noam Postavsky" . "npostavs@gmail.com") + (:keywords "snippets") + (:url . "http://elpa.gnu.org/packages/yasnippet-classic-snippets.html"))]) + (zones . + [(2019 7 13) + nil "Zones of text - like multiple regions" single + ((:keywords "narrow" "restriction" "widen" "region" "zone") + (:authors + ("Drew Adams")) + (:maintainer "Drew Adams" . "drew.adams@oracle.com") + (:url . "https://elpa.gnu.org/packages/zones.html"))]) + (ztree . + [(1 0 5) + ((cl-lib + (0))) + "Text mode directory tree" tar + ((:url . "https://github.com/fourier/ztree") + (:maintainer "Alexey Veretennikov" . "alexey.veretennikov@gmail.com") + (:authors + ("Alexey Veretennikov" . "alexey.veretennikov@gmail.com")) + (:keywords "files" "tools"))])) diff --git a/elpa/archives/gnu/archive-contents.signed b/elpa/archives/gnu/archive-contents.signed new file mode 100644 index 00000000..dd5800f1 --- /dev/null +++ b/elpa/archives/gnu/archive-contents.signed @@ -0,0 +1 @@ +Good signature from 066DAFCB81E42C40 GNU ELPA Signing Agent (2019) (trust undefined) created at 2019-11-22T11:10:03+0100 using RSA \ No newline at end of file diff --git a/elpa/archives/melpa/archive-contents b/elpa/archives/melpa/archive-contents new file mode 100644 index 00000000..ad667015 --- /dev/null +++ b/elpa/archives/melpa/archive-contents @@ -0,0 +1,4390 @@ +(1 +(zzz-to-char . [(20190713 1344) ((emacs (24 4)) (cl-lib (0 5)) (avy (0 3 0))) "Fancy version of `zap-to-char' command" single ((:commit . "3499777d74add95625b4592b5d675a82abc8f888") (:keywords "convenience") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:url . "https://github.com/mrkkrp/zzz-to-char"))]) +(zygospore . [(20140703 852) nil "reversible C-x 1 (delete-other-windows)" single ((:commit . "1af5ee663f5a7aa08d96a77cacff834dcdf55ea8") (:authors ("Louis Kottmann" . "louis.kottmann@gmail.com")) (:maintainer "Louis Kottmann" . "louis.kottmann@gmail.com") (:url . "https://github.com/louiskottmann/zygospore.el"))]) +(zweilight-theme . [(20170113 605) nil "A dark color theme for Emacs." single ((:commit . "7f45ab9e23164d65538edb2beb9692ecdc24c31e") (:authors ("Philip Arvidsson" . "contact@philiparvidsson.com")) (:maintainer "Philip Arvidsson" . "contact@philiparvidsson.com") (:url . "http://github.com/philiparvidsson/zweilight-emacs"))]) +(ztree . [(20191108 2234) ((cl-lib (0))) "Text mode directory tree" tar ((:commit . "0a5b25f364490a58ef7371534a39c75d11f54132") (:keywords "files" "tools") (:authors ("Alexey Veretennikov" . "alexey.veretennikov@gmail.com")) (:maintainer "Alexey Veretennikov" . "alexey.veretennikov@gmail.com") (:url . "https://github.com/fourier/ztree"))]) +(zprint-mode . [(20181111 1945) ((emacs (24 3))) "reformat Clojure(Script) code using zprint" single ((:commit . "e1a7b7fe48e36e5cdf1269ab394d3cf779fdab58") (:keywords "tools") (:authors ("Paulus Esterhazy" . "pesterhazy@gmail.com")) (:maintainer "Paulus Esterhazy" . "pesterhazy@gmail.com") (:url . "https://github.com/pesterhazy/zprint-mode.el"))]) +(zpresent . [(20180605 438) ((emacs (25 1)) (org-parser (0 4)) (dash (2 12 0)) (request (0 3 0))) "Simple presentation mode based on org files." single ((:commit . "55fc14b66e2ea506247a4e7dd622a9dfe5545c4b") (:keywords "comm") (:url . "https://bitbucket.org/zck/zpresent.el"))]) +(zpl-mode . [(20180906 1059) ((emacs (24 3))) "ZIMPL major mode" single ((:commit . "35e7e23c6baf31b5e65dd7405c8ab9b13c70637e") (:url . "https://github.com/ax487/zpl-mode.git"))]) +(zoutline . [(20190520 1819) nil "Simple outline library." single ((:commit . "63756846f8540b6faf89d885438186e4fe1c7d8a") (:keywords "outline") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/zoutline"))]) +(zotxt . [(20180518 147) ((request-deferred (0 2 0))) "Tools to integrate emacs with Zotero via the zotxt plugin." tar ((:commit . "1578e7fd82cb09a7a4349fd8e4d59f16d0ed7074"))]) +(zotelo . [(20160602 949) ((cl-lib (0 5))) "Manage Zotero collections from emacs" single ((:commit . "d9dc089b9adfcc70a63f2a84269a12eb7cb4c748") (:keywords "zotero" "emacs" "reftex" "bibtex" "mozrepl" "bibliography manager") (:authors ("Spinu Vitalie")) (:maintainer "Spinu Vitalie") (:url . "https://github.com/vitoshka/zotelo"))]) +(zossima . [(20121124 35) ((inf-ruby (2 2 3))) "Ruby from Emacs" tar ((:commit . "991676635c374d2a12714dcf48c1ce2d6f97a375") (:keywords "ruby" "convenience") (:authors ("Phil Hagelberg")) (:maintainer "Phil Hagelberg") (:url . "https://github.com/technomancy/zossima"))]) +(zop-to-char . [(20160212 1554) ((cl-lib (0 5))) "A replacement of zap-to-char." single ((:commit . "00152aa666354b27e56e20565f186b363afa0dce") (:authors ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com") (:url . "https://github.com/thierryvolpiatto/zop-to-char"))]) +(zoom-window . [(20170302 827) ((emacs (24 3))) "Zoom window like tmux" single ((:commit . "cd6ecc103fc30b171bda7daf1f44a550854d0dbf") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-zoom-window"))]) +(zoom . [(20190523 1300) ((emacs (24 4))) "Fixed and automatic balanced window layout" single ((:commit . "e2aad25dfd334299a7e53df21796b8652142c5b5") (:keywords "frames") (:authors ("Andrea Cardaci" . "cyrus.and@gmail.com")) (:maintainer "Andrea Cardaci" . "cyrus.and@gmail.com") (:url . "https://github.com/cyrus-and/zoom"))]) +(zone-sl . [(20160201 1210) ((emacs (24 3))) "Zone out with steam locomotives." single ((:commit . "7ec22e3661c6348382f9fc39a9d0063dbd2352ff") (:keywords "games") (:authors ("KAWABATA, Taichi ")) (:maintainer "KAWABATA, Taichi ") (:url . "https://github.com/kawabata/zone-sl"))]) +(zone-select . [(20160118 1419) ((emacs (24 3)) (dash (2 8))) "Select zone programs." single ((:commit . "bf30da12f1625fe6563448fccf3c506acad10af7") (:keywords "games") (:authors ("KAWABATA, Taichi ")) (:maintainer "KAWABATA, Taichi ") (:url . "https://github.com/kawabata/zone-select"))]) +(zone-rainbow . [(20160120 1334) ((emacs (24 3))) "Zone out with rainbow." single ((:commit . "2ba4f1a87c69c4712124ebf12c1f3ea171e1af36") (:keywords "games") (:authors ("KAWABATA, Taichi ")) (:maintainer "KAWABATA, Taichi ") (:url . "https://github.com/kawabata/zone-rainbow"))]) +(zone-nyan . [(20170818 1644) ((esxml (0 3 1))) "Zone out with nyan cat" single ((:commit . "4b1f8d95f130946718d52806489ffe2762aebfdc") (:keywords "zone") (:authors ("Vasilij Schneidermann" . "v.schneidermann@gmail.com")) (:maintainer "Vasilij Schneidermann" . "v.schneidermann@gmail.com") (:url . "https://github.com/wasamasa/zone-nyan"))]) +(zombie-trellys-mode . [(20150304 1448) ((emacs (24)) (cl-lib (0 5)) (haskell-mode (1 5))) "A minor mode for interaction with Zombie Trellys" single ((:commit . "7f0c45fdda3a44c3b6d1762d116abb1421b8fba2") (:keywords "languages") (:authors ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Raymond Christiansen" . "david@davidchristiansen.dk"))]) +(zombie . [(20141222 1616) nil "major mode for editing ZOMBIE programs" single ((:commit . "ff8cd1b4cdbb4b0b9b8fd1ec8f6fb93eba249345") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) +(znc . [(20160627 2032) ((cl-lib (0 2))) "ZNC + ERC" single ((:commit . "ce468d185e4a949c45fdd7586313144bc69d4fe5") (:authors ("Yaroslav Shirokov")) (:maintainer "Yaroslav Shirokov") (:url . "https://github.com/sshirokov/ZNC.el"))]) +(zmq . [(20190812 1910) ((cl-lib (0 5)) (emacs (26))) "ZMQ bindings in elisp" tar ((:commit . "0544b70bf99b6eb95f46e0fcd788d98da50cb892") (:keywords "comm") (:authors ("Nathaniel Nicandro" . "nathanielnicandro@gmail.com")) (:maintainer "Nathaniel Nicandro" . "nathanielnicandro@gmail.com") (:url . "https://github.com/dzop/emacs-zmq"))]) +(zlc . [(20151011 157) nil "Provides zsh like completion system to Emacs" single ((:commit . "4dd2ba267ecdeac845a7cbb3147294ee7daa25f4") (:keywords "matching" "convenience") (:authors ("mooz" . "stillpedant@gmail.com")) (:maintainer "mooz" . "stillpedant@gmail.com"))]) +(zig-mode . [(20191023 1551) ((emacs (24))) "A major mode for the Zig programming language" single ((:commit . "77202ac26ee6091d69d40990fddb1ce6cfcc6dc8") (:keywords "zig" "languages") (:authors ("Andrea Orru , Andrew Kelley" . "superjoe30@gmail.com")) (:maintainer "Andrea Orru , Andrew Kelley" . "superjoe30@gmail.com") (:url . "https://github.com/zig-lang/zig-mode"))]) +(zerodark-theme . [(20190528 923) ((all-the-icons (2 0 0))) "A dark, medium contrast theme for Emacs" single ((:commit . "df22536a244293591575e56970bf83814faa7c14") (:keywords "themes") (:authors ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr") (:url . "https://github.com/NicolasPetton/zerodark-theme"))]) +(zero-input . [(20191110 910) ((emacs (24 3)) (s (1 2 0))) "Zero Chinese input method framework" single ((:commit . "cd075a5ff4a979f0ab850d0fc747b4db429298e4") (:url . "https://gitlab.emacsos.com/sylecn/zero-el"))]) +(zephir-mode . [(20170918 425) ((cl-lib (0 5)) (pkg-info (0 4)) (emacs (24 3))) "Major mode for editing Zephir code" single ((:commit . "1db4071a014a796120b5c3d0a7f91eb77359eb10") (:keywords "languages") (:authors ("Serghei Iakovlev" . "serghei@phalconphp.com")) (:maintainer "Serghei Iakovlev") (:url . "https://github.com/sergeyklay/zephir-mode"))]) +(zeno-theme . [(20181027 118) ((emacs (24))) "A dark theme using different shades of blue" single ((:commit . "0914c4a5b1b9499e7f1ca5699b1c3ea2f4be3f1a") (:keywords "faces" "theme" "dark" "blue") (:authors ("Bharat Joshi" . "jbharat@outlook.com")) (:maintainer "Bharat Joshi" . "jbharat@outlook.com") (:url . "https://github.com/jbharat/zeno-theme"))]) +(zenity-color-picker . [(20160302 1154) ((emacs (24 4))) "Insert and adjust colors using Zenity" single ((:commit . "4f4f46676a461ebc881487fb70c8c181e323db5e") (:keywords "colors") (:authors ("Samuel Laurén" . "samuel.lauren@iki.fi")) (:maintainer "Samuel Laurén" . "samuel.lauren@iki.fi") (:url . "https://bitbucket.org/Soft/zenity-color-picker.el"))]) +(zencoding-mode . [(20140213 822) nil "Unfold CSS-selector-like expressions to markup" single ((:commit . "58e42af182c98cb9941d27cd042d227fbf4e146c") (:keywords "convenience") (:authors ("Chris Done" . "chrisdone@gmail.com")) (:maintainer "Chris Done" . "chrisdone@gmail.com") (:url . "https://github.com/rooney/zencoding"))]) +(zenburn-theme . [(20191016 655) nil "A low contrast color theme for Emacs." single ((:commit . "2f4f6e7d0bc37f1a99ab14bb4506a0e53d359da5") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.com")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.com") (:url . "http://github.com/bbatsov/zenburn-emacs"))]) +(zen-and-art-theme . [(20120622 1437) nil "zen and art color theme for GNU Emacs 24" single ((:commit . "a7226cbce0bca2501d69a620cb2aeabfc396c232") (:authors ("Nick Parker")) (:maintainer "Nick Parker"))]) +(zel . [(20171014 832) ((emacs (25)) (frecency (0 1))) "Access frecent files easily" single ((:commit . "9dae2d212224d1deae1f62561fa8e4d689fd09f2") (:keywords "convenience" "files" "matching") (:authors ("Sebastian Christ" . "rudolfo.christ@gmail.com")) (:maintainer "Sebastian Christ" . "rudolfo.christ@gmail.com") (:url . "https://github.com/rudolfochrist/zel"))]) +(zeal-at-point . [(20180131 2354) nil "Search the word at point with Zeal" single ((:commit . "0fc3263f44e95acd3e9d91057677621ce4d297ee") (:authors ("Jinzhu" . "wosmvp@gmail.com")) (:maintainer "Jinzhu" . "wosmvp@gmail.com") (:url . "https://github.com/jinzhu/zeal-at-point"))]) +(z3-mode . [(20151120 2255) ((flycheck (0 23)) (emacs (24))) "A z3/SMTLIBv2 interactive development environment" single ((:commit . "163dc01d59e9880b4dc188d4e1ad84d6c0c852e1") (:keywords "z3" "yices" "mathsat" "smt" "beaver") (:authors ("Zephyr Pellerin" . "zephyr.pellerin@gmail.com")) (:maintainer "Zephyr Pellerin" . "zephyr.pellerin@gmail.com") (:url . "https://github.com/zv/z3-mode"))]) +(youdao-dictionary . [(20191031 1404) ((popup (0 5 0)) (pos-tip (0 4 6)) (chinese-word-at-point (0 2)) (names (0 5)) (emacs (24))) "Youdao Dictionary interface for Emacs" single ((:commit . "5b08d23dd74fa3c4291409f2afa369595979ea79") (:keywords "convenience" "chinese" "dictionary") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com") (:url . "https://github.com/xuchunyang/youdao-dictionary.el"))]) +(yoshi-theme . [(20190505 728) nil "Theme named after my cat" single ((:commit . "70365870ff823b954aa85972217d8f116c45d939") (:keywords "faces") (:authors ("Tom Willemse" . "tom@ryuslash.org")) (:maintainer "Tom Willemse" . "tom@ryuslash.org") (:url . "http://projects.ryuslash.org/yoshi-theme/"))]) +(yoficator . [(20190509 1620) nil "Interactively yoficate Russian texts" tar ((:commit . "fa914f9648515bca54b5e558ca57d2b65fa57491") (:authors ("Eugene Minkovskii" . "emin@mccme.ru") ("Alexander Krotov" . "ilabdsf@gmail.com")) (:maintainer "Eugene Minkovskii" . "emin@mccme.ru") (:url . "https://gitlab.com/link2xt/yoficator"))]) +(yesql-ghosts . [(20150220 1237) ((s (1 9 0)) (dash (2 10 0)) (cider (0 8 0))) "Display ghostly yesql defqueries inline" single ((:commit . "8f1faf0137b85a5072d13e1240a463d9a35ce2bb") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) +(yequake . [(20191121 1726) ((emacs (25 2)) (dash (2 14 1))) "Drop-down frames, like Yakuake" single ((:commit . "16dd29c68f4b59ee2da7b7c13d17a687c9c79e16") (:keywords "convenience" "window-system" "frames") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "http://github.com/alphapapa/yequake"))]) +(ydk-mode . [(20170113 921) nil "Language support for Yu-Gi-Oh! deck files" single ((:commit . "f3f125b29408e0b0a34fec27dcb7c02c5dbfd04e") (:keywords "faces" "games" "languages" "ydk" "yugioh" "yu-gi-oh") (:authors ("Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com")) (:maintainer "Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com") (:url . "https://github.com/jacksonrayhamilton/ydk-mode"))]) +(ycmd . [(20190416 807) ((emacs (24 4)) (dash (2 13 0)) (s (1 11 0)) (deferred (0 5 1)) (cl-lib (0 6 1)) (let-alist (1 0 5)) (request (0 3 0)) (request-deferred (0 3 0)) (pkg-info (0 6))) "emacs bindings to the ycmd completion server" tar ((:commit . "6f4f7384b82203cccf208e3ec09252eb079439f9") (:url . "https://github.com/abingham/emacs-ycmd"))]) +(ycm . [(20150822 1836) nil "Emacs client for the YouCompleteMe auto-completion server." single ((:commit . "4da8a14abcd0f4fa3235042ade2e12b5068c0601") (:keywords "c" "abbrev") (:authors ("Ajay Gopinathan" . "ajay@gopinathan.net")) (:maintainer "Ajay Gopinathan" . "ajay@gopinathan.net"))]) +(yaxception . [(20150105 1452) nil "Provide framework about exception like Java for Elisp" single ((:commit . "4e94cf3e0b9b5631b0e90eb4b7de597ee7185875") (:keywords "exception" "error" "signal") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:url . "https://github.com/aki2o/yaxception"))]) +(yatex . [(20191005 346) nil "Yet Another tex-mode for emacs //野鳥//" tar ((:commit . "80692d8b8828a36ad44e8fe6b8d2c1d423898e05"))]) +(yatemplate . [(20180617 952) ((yasnippet (0 8 1)) (emacs (24 3))) "File templates with yasnippet" tar ((:commit . "4f4fca9f04f7088c98aa195cf33635a35a6055cb") (:keywords "files" "convenience") (:authors ("Wieland Hoffmann" . "themineo+yatemplate@gmail.com")) (:maintainer "Wieland Hoffmann" . "themineo+yatemplate@gmail.com") (:url . "https://github.com/mineo/yatemplate"))]) +(yasnippet-snippets . [(20191117 1730) ((yasnippet (0 8 0))) "Collection of yasnippet snippets" tar ((:commit . "2cc5f35cd43941175981c8774debc8303d90c101") (:keywords "snippets") (:authors ("Andrea Crotti" . "andrea.crotti.0@gmail.com")) (:maintainer "Andrea Crotti" . "andrea.crotti.0@gmail.com"))]) +(yasnippet-lean . [(20190922 2037) ((yasnippet (0 8 0))) "Collection of snippets for the Lean prover" tar ((:commit . "9119be08a32286d3e8559138e8ae003856ae1c0a") (:keywords "convenience" "snippets" "leanprover") (:maintainer "Simon Hudon" . "simon.hudon@gmail.com") (:url . "https://github.com/leanprover-community/yasnippet-lean"))]) +(yasnippet . [(20191030 1331) ((cl-lib (0 5))) "Yet another snippet extension for Emacs" single ((:commit . "1bee3a33c77d1a61c331461750e01c4f6fa85417") (:keywords "convenience" "emulation") (:maintainer "Noam Postavsky" . "npostavs@gmail.com") (:url . "http://github.com/joaotavora/yasnippet"))]) +(yascroll . [(20170315 1906) ((cl-lib (0 3))) "Yet Another Scroll Bar Mode" single ((:commit . "fe4494e5f4faf2832e665c7de0fed99cdbb39478") (:keywords "convenience") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainer "Tomohiro Matsuyama" . "m2ym.pub@gmail.com"))]) +(yarn-mode . [(20170709 1937) ((emacs (24 3))) "Major mode for yarn.lock files." single ((:commit . "998b408d6be05fd1c3a9fd8db6ffaab3bf86d06b") (:keywords "convenience") (:authors ("Nicolás Salas V." . "nikosalas@gmail.com")) (:maintainer "Nicolás Salas V." . "nikosalas@gmail.com") (:url . "https://github.com/anachronic/yarn-mode"))]) +(yari . [(20151128 739) nil "Yet Another RI interface for Emacs" single ((:commit . "a2cb9656ee5dfe1fc2ee3854f3079a1c8e85dbe9") (:keywords "tools") (:authors ("Aleksei Gusev" . "aleksei.gusev@gmail.com")) (:maintainer "Aleksei Gusev" . "aleksei.gusev@gmail.com"))]) +(yard-mode . [(20170817 1237) nil "Minor mode for Ruby YARD comments" single ((:commit . "ba74a47463b0320ae152bd42a7dd7aeecd7b5748") (:authors ("Kyle Hargraves")) (:maintainer "Kyle Hargraves") (:url . "https://github.com/pd/yard-mode.el"))]) +(yara-mode . [(20190423 710) ((emacs (24))) "Major mode for editing yara rule file" single ((:commit . "cd8093b1bc4fc260462f5284b157008fefa84880") (:keywords "yara") (:authors (nil . "binjo.cn@gmail.com")) (:maintainer nil . "binjo.cn@gmail.com") (:url . "not distributed yet"))]) +(yapfify . [(20191103 2100) nil "(automatically) format python buffers using YAPF." single ((:commit . "530ca2b589070edfe9bd59034af55c924d03b83a") (:authors ("Joris Engbers" . "info@jorisengbers.nl")) (:maintainer "Joris Engbers" . "info@jorisengbers.nl") (:url . "https://github.com/JorisE/yapfify"))]) +(yankpad . [(20190904 1507) ((emacs (25))) "Paste snippets from an org-mode file" single ((:commit . "2f110f4aacb00c58439385cabb18cfaa8d759e64") (:keywords "abbrev" "convenience") (:authors ("Erik Sjöstrand")) (:maintainer "Erik Sjöstrand") (:url . "http://github.com/Kungsgeten/yankpad"))]) +(yang-mode . [(20190507 724) nil "major mode for editing YANG files" single ((:commit . "4b4ab4d4a79d37d6c31c6ea7cccbc425e0b1eded") (:authors ("Martin Bjorklund" . "mbj4668@gmail.com")) (:maintainer "Martin Bjorklund" . "mbj4668@gmail.com"))]) +(yandex-weather . [(20160311 2037) nil "Fetch Yandex Weather forecasts." tar ((:commit . "6f823fd9e04ff9efb2aa65f333079e9f7e6e5b28"))]) +(yaml-tomato . [(20151123 753) ((s (1 9))) "copy or show the yaml path currently under cursor." single ((:commit . "f9df1c9bdfcec629b03031b2d2032f9dc533cb14") (:keywords "yaml") (:authors ("qrczeno")) (:maintainer "qrczeno"))]) +(yaml-mode . [(20190625 1740) ((emacs (24 1))) "Major mode for editing YAML files" single ((:commit . "0aceaf3888dc484d1f5246d5a9462a4780844081") (:keywords "data" "yaml") (:authors ("Yoshiki Kurihara" . "clouder@gmail.com") ("Marshall T. Vandegrift" . "llasram@gmail.com")) (:maintainer "Vasilij Schneidermann" . "v.schneidermann@gmail.com"))]) +(yaml-imenu . [(20181001 627) ((emacs (24 4)) (yaml-mode (0))) "Enhancement of the imenu support in yaml-mode." tar ((:commit . "78a383098807014d9e7f2941196d8271677158cd") (:keywords "outlining" "convenience" "imenu") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:url . "https://github.com/knu/yaml-imenu.el"))]) +(yalinum . [(20130217 1043) nil "yet another display line numbers." single ((:commit . "d3e0cbe3f4f5ca311e3298e684901d6fea3ad973") (:keywords "convenience" "tools") (:authors ("tm8st" . "tm8st@hotmail.co.jp")) (:maintainer "tm8st" . "tm8st@hotmail.co.jp"))]) +(yahtzee . [(20171022 1412) ((emacs (24 3))) "The yahtzee game" single ((:commit . "7cea3314ad9f1f00543afb578c97e45acbfc3fa7") (:keywords "games") (:authors ("Dimitar Dimitrov" . "mail.mitko@gmail.com")) (:maintainer "Dimitar Dimitrov" . "mail.mitko@gmail.com") (:url . "https://github.com/drdv/yahtzee"))]) +(yahoo-weather . [(20181026 320) ((emacs (24))) "Displays weather information in mode-line" single ((:commit . "1d2db14daa1706e03dfe4379397eb89234a56400") (:keywords "weather" "mode-line") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:url . "https://github.com/lujun9972/yahoo-weather-mode"))]) +(yagist . [(20160418 508) ((cl-lib (0 3))) "Yet Another Emacs integration for gist.github.com" single ((:commit . "dcdbd84f348414815d02f3da8a6ee0ac271632d4") (:keywords "tools") (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:url . "https://github.com/mhayashi1120/yagist.el"))]) +(yafolding . [(20170305 317) nil "Yet another folding extension for Emacs" single ((:commit . "57c015ddd7c3454571c80825bc5391d7a10fa1d7") (:keywords "folding") (:authors ("Zeno Zeng" . "zenoofzeng@gmail.com")) (:maintainer "Zeno Zeng" . "zenoofzeng@gmail.com"))]) +(yabin . [(20140206 351) nil "Yet Another Bignum package (A thin wrapper of calc.el)." single ((:commit . "db8c404507560ef9147fcce2b94cd706fbfa03b5") (:keywords "data") (:authors ("Daisuke Kobayashi" . "d5884jp@gmail.com")) (:maintainer "Daisuke Kobayashi" . "d5884jp@gmail.com"))]) +(xwidgete . [(20171118 2116) ((emacs (25))) "enhances usability of current xwidget browser" single ((:commit . "e4e8410fe32176df85b46234717824519443fb04") (:keywords "xwidgete" "tools") (:authors ("Tu, Do Hoang" . "tuhdo1710@gmail.com")) (:maintainer "Tu, Do Hoang") (:url . "https://github.com/tuhdo/xwidgete"))]) +(xtest . [(20141214 1706) ((cl-lib (0 5))) "Simple Testing with Emacs & ERT" single ((:commit . "2c2bdf32667506dd9ddf6eb311832add616bdf1c") (:keywords "testing" "ert") (:authors ("Mustafa Shameem")) (:maintainer "Mustafa Shameem") (:url . "https://github.com/promethial/xtest"))]) +(xterm-keybinder . [(20160523 56) ((emacs (24 3)) (cl-lib (0 5)) (let-alist (1 0 1))) "Let you extra keybinds in xterm/urxvt" tar ((:commit . "b29c4f700b0fa0c9f627f6725b36462b8fab06d6") (:keywords "convenient") (:authors ("Yuta Yamada ")) (:maintainer "Yuta Yamada "))]) +(xterm-color . [(20191002 2158) ((cl-lib (0 5))) "ANSI & XTERM 256 color support" single ((:commit . "12296bb1f0166a81b7e602493ed81e04d3381989") (:keywords "faces") (:authors ("xristos" . "xristos@sdf.lonestar.org")) (:maintainer "xristos" . "xristos@sdf.lonestar.org") (:url . "https://github.com/atomontage/xterm-color"))]) +(xresources-theme . [(20190108 1851) nil "Use your .Xresources as your emacs theme" single ((:commit . "5239acb51aa2dfa89a207e57012108d8fcf60562") (:keywords "xresources" "theme") (:authors ("Marten Lienen" . "marten.lienen@gmail.com")) (:maintainer "Marten Lienen" . "marten.lienen@gmail.com"))]) +(xref-js2 . [(20190915 2032) ((emacs (25)) (js2-mode (20150909))) "Jump to references/definitions using ag & js2-mode's AST" single ((:commit . "6f1ed5dae0c2485416196a51f2fa92f32e4b8262") (:keywords "javascript" "convenience" "tools") (:authors ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr") (:url . "https://github.com/NicolasPetton/xref-js2"))]) +(xquery-tool . [(20190523 1119) nil "A simple interface to saxonb's xquery." single ((:commit . "7f0859cc722607240689e57e14de8e0719052016") (:keywords "xml" "xquery" "emacs") (:authors ("Patrick McAllister" . "pma@rdorte.org")) (:maintainer "Patrick McAllister" . "pma@rdorte.org") (:url . "https://github.com/paddymcall/xquery-tool.el"))]) +(xquery-mode . [(20170214 1119) ((cl-lib (0 5))) "A simple mode for editing xquery programs" single ((:commit . "1b655ccf83d02a7bd473d2cf02359ed60bdf7369") (:url . "https://github.com/xquery-mode/xquery-mode"))]) +(xo . [(20160403 646) nil "XO linter integration with compilation mode" single ((:commit . "72fcd867cfa332fdb82f732925cf8977e690af78") (:keywords "processes") (:authors ("J.A" . "jer.github@gmail.com")) (:maintainer "J.A" . "jer.github@gmail.com"))]) +(xmlunicode . [(20191122 1758) nil "Unicode support for XML" tar ((:commit . "b61acdd111f9a8c0430aa7f711901819f1577f68") (:keywords "utf-8" "unicode" "xml" "characters") (:authors ("Norman Walsh" . "ndw@nwalsh.com")) (:maintainer "Norman Walsh" . "ndw@nwalsh.com"))]) +(xmlgen . [(20170411 1317) nil "A DSL for generating XML." single ((:commit . "dba66681f0c5e621a9e70e8afb34903c9ffe93c4") (:authors ("Philip Jackson" . "phil@shellarchive.co.uk")) (:maintainer "Philip Jackson" . "phil@shellarchive.co.uk"))]) +(xml-rpc . [(20181002 1353) nil "An elisp implementation of clientside XML-RPC" single ((:commit . "8f624f8b964e9145acb504e4457c9510e87dd93c") (:keywords "xml" "rpc" "network") (:authors ("Mark A. Hershberger" . "mah@everybody.org")) (:maintainer "Mark A. Hershberger" . "mah@everybody.org") (:url . "http://github.com/hexmode/xml-rpc-el"))]) +(xml-quotes . [(20151230 2249) nil "read quotations from an XML document" tar ((:commit . "26db170e80b9295861227cdf970721b12539ed44") (:keywords "xml" "quotations") (:authors ("Norman Walsh" . "ndw@nwalsh.com")) (:maintainer "Norman Walsh" . "ndw@nwalsh.com") (:url . "https://github.com/ndw/xml-quotes"))]) +(xml-format . [(20191011 1148) ((emacs (25)) (reformatter (0 4))) "XML reformatter using xmllint" single ((:commit . "2861c4e33e18b077112efa072316b031bca4236c") (:keywords "languages") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee") (:url . "https://github.com/wbolster/emacs-xml-format"))]) +(xml+ . [(20170727 2351) ((emacs (24 4)) (dash (2 12 0))) "Utilities for xml and html trees" single ((:commit . "232fa863c08fc159b21dd58c39ea45dce3334895") (:keywords "xml" "html") (:authors ("Ben Dean" . "bendean837@gmail.com")) (:maintainer "Ben Dean" . "bendean837@gmail.com") (:url . "https://github.com/bddean/xml-plus"))]) +(xkcd . [(20160419 1130) ((json (1 3))) "View xkcd from Emacs" single ((:commit . "66e928706fd660cfdab204c98a347b49c4267bdf") (:keywords "xkcd" "webcomic") (:authors ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainer "Vibhav Pant" . "vibhavp@gmail.com") (:url . "https://github.com/vibhavp/emacs-xkcd"))]) +(xcscope . [(20190723 629) nil "cscope interface for (X)Emacs" single ((:commit . "f3e2c84bd92f5a78182cc8d81f5358979a6c241c") (:keywords "languages" "c") (:authors ("Darryl Okahata" . "darrylo@sonic.net") ("Dima Kogan" . "dima@secretsauce.net")) (:maintainer "Dima Kogan" . "dima@secretsauce.net") (:url . "https://github.com/dkogan/xcscope.el"))]) +(xcode-project . [(20181025 1244) ((emacs (25))) "A package for reading Xcode project files." tar ((:commit . "0bf9a4230fab7830350c750c39beda99ef74d72f") (:keywords "languages" "tools") (:authors ("John Buckley" . "john@olivetoast.com")) (:maintainer "John Buckley" . "john@olivetoast.com") (:url . "https://github.com/nhojb/xcode-project.git"))]) +(xcode-mode . [(20160907 1208) ((emacs (24 4)) (s (1 10 0)) (dash (2 11 0)) (multiple-cursors (1 0 0))) "A minor mode for emacs to perform Xcode like actions." single ((:commit . "2ae4f512d6c601ea39d5ab785c2b5288eac24b59") (:keywords "conveniences") (:authors ("Nickolas Lanasa" . "nick@nytekproductions.com")) (:maintainer "Nickolas Lanasa" . "nick@nytekproductions.com"))]) +(xbm-life . [(20160103 1017) nil "A XBM version of Conway's Game of Life" single ((:commit . "dd6a98ac9ea81b681e68f6318fed47158e5d469e") (:keywords "games") (:authors ("Vasilij Schneidermann" . "v.schneidermann@gmail.com")) (:maintainer "Vasilij Schneidermann" . "v.schneidermann@gmail.com") (:url . "https://github.com/wasamasa/xbm-life"))]) +(xahk-mode . [(20170821 1107) ((emacs (24 1))) "Major mode for editing AutoHotkey scripts." single ((:commit . "02012b20603c00e3b2ef32159a690ed1e05d12c3") (:keywords "languages") (:authors ("Xah Lee ( http://xahlee.info/ )")) (:maintainer "Xah Lee ( http://xahlee.info/ )") (:url . "http://xahlee.info/mswin/emacs_autohotkey_mode.html"))]) +(xah-replace-pairs . [(20180508 249) ((emacs (24 1))) "emacs lisp functions for multi-pair find/replace." single ((:commit . "4d845cfbce32d45befd7c454e3476c3ce40d2b43") (:keywords "lisp" "tools" "find replace") (:authors ("Xah Lee ( http://xahlee.info/ )")) (:maintainer "Xah Lee ( http://xahlee.info/ )") (:url . "http://ergoemacs.org/emacs/elisp_replace_string_region.html"))]) +(xah-reformat-code . [(20170821 1111) nil "commands to reformat source code." single ((:commit . "7fec8b28e46b8cc2813fac5149e3bbb56c0aa6b1") (:keywords "convenience") (:authors ("Xah Lee ( http://xahlee.info/ )")) (:maintainer "Xah Lee ( http://xahlee.info/ )") (:url . "http://ergoemacs.org/emacs/emacs_reformat_lines.html"))]) +(xah-math-input . [(20190206 1658) ((emacs (24 1))) "a minor mode for inputting math and Unicode symbols." single ((:commit . "af787f87815b85d56c35bbe0f22e03a31c8e670d") (:keywords "abbrev" "convenience" "unicode" "math" "latex") (:authors ("Xah Lee ( http://xahlee.info/ )")) (:maintainer "Xah Lee ( http://xahlee.info/ )") (:url . "http://ergoemacs.org/emacs/xmsi-math-symbols-input.html"))]) +(xah-lookup . [(20181225 1942) ((emacs (24 1))) "look up word on internet." single ((:commit . "2cafbf3605a8f2ac4c56392c5b1f75adc3b11f24") (:keywords "help" "docs" "convenience") (:authors ("Xah Lee ( http://xahlee.info/ )")) (:maintainer "Xah Lee ( http://xahlee.info/ )") (:url . "http://ergoemacs.org/emacs/xah-lookup.html"))]) +(xah-get-thing . [(20170821 1053) ((emacs (24 1))) "get thing or selection at point." single ((:commit . "e3ef069ea9fea3a092689d45c94c6211b51d0ea4") (:keywords "extensions" "lisp" "tools") (:authors ("Xah Lee ( http://xahlee.info/ )")) (:maintainer "Xah Lee ( http://xahlee.info/ )") (:url . "http://ergoemacs.org/emacs/elisp_get-selection-or-unit.html"))]) +(xah-fly-keys . [(20191122 1427) ((emacs (24 1))) "ergonomic modal keybinding minor mode." single ((:commit . "f0f73bc70d23d0578d0b61e60f9982a1ea8b3bf2") (:keywords "convenience" "emulations" "vim" "ergoemacs") (:authors ("Xah Lee ( http://xahlee.info/ )")) (:maintainer "Xah Lee ( http://xahlee.info/ )") (:url . "http://ergoemacs.org/misc/ergoemacs_vi_mode.html"))]) +(xah-find . [(20190314 2039) ((emacs (24 1))) "find replace in pure emacs lisp. Purpose similar to grep/sed." single ((:commit . "a39f1ff9a7cf56e92b56c6f179741569b9172a48") (:keywords "convenience" "extensions" "files" "tools" "unix") (:authors ("Xah Lee ( http://xahlee.info/ )")) (:maintainer "Xah Lee ( http://xahlee.info/ )") (:url . "http://ergoemacs.org/emacs/elisp-xah-find-text.html"))]) +(xah-elisp-mode . [(20190125 646) ((emacs (24 3))) "Major mode for editing emacs lisp." single ((:commit . "a09c51e450bf4b39bdc3f4063c2946baec7ae3b1") (:keywords "lisp" "languages") (:authors ("Xah Lee ( http://xahlee.info/ )")) (:maintainer "Xah Lee ( http://xahlee.info/ )") (:url . "http://ergoemacs.org/emacs/xah-elisp-mode.html"))]) +(xah-css-mode . [(20190705 750) ((emacs (24 3))) "Major mode for editing CSS code." single ((:commit . "ada8513eadca5c5797a384040acca2fceced3e26") (:keywords "languages" "convenience" "css" "color") (:authors ("Xah Lee ( http://xahlee.info/ )")) (:maintainer "Xah Lee ( http://xahlee.info/ )") (:url . "http://ergoemacs.org/emacs/xah-css-mode.html"))]) +(x86-lookup . [(20180528 1635) ((emacs (24 3)) (cl-lib (0 3))) "jump to x86 instruction documentation" single ((:commit . "609b2ba70dc5a246ac9b4b5f89eb5ef4331519bf") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/x86-lookup"))]) +(x509-mode . [(20180921 803) ((emacs (24 1)) (cl-lib (0 5))) "View certificates, CRLs and keys using OpenSSL." tar ((:commit . "9eb24c8721dcad9888b70213d06d770bc2386db7") (:authors ("Fredrik Axelsson" . "f.axelsson@gmai.com") ("Package-Requires: ((emacs \"24.1\") (cl-lib \"0.5\"))")) (:maintainer "Fredrik Axelsson" . "f.axelsson@gmai.com"))]) +(x-path-walker . [(20160922 1835) ((helm-core (1 9 2))) "Navigation feature for JSON/XML/HTML based on path (imenu like)" tar ((:commit . "3b01dbd7a039c6c84fdf8c8ee53ba72090ee950a") (:keywords "convenience") (:authors (nil . "")) (:maintainer nil . ""))]) +(www-synonyms . [(20170128 2251) ((request (0 2 0)) (cl-lib (0 5))) "insert synonym for a word" single ((:commit . "7e37ea35064ff31c9945f0198a653647d408c936") (:keywords "lisp") (:authors ("Bernhard Specht" . "bernhard@specht.net")) (:maintainer "Bernhard Specht" . "bernhard@specht.net"))]) +(wwtime . [(20151122 1610) nil "Insert a time of day with appropriate world-wide localization" single ((:commit . "d04d8fa814b5d3644efaeb28f25520ada69acbbd") (:keywords "time") (:authors ("Norman Walsh" . "ndw@nwalsh.com")) (:maintainer "Norman Walsh" . "ndw@nwalsh.com"))]) +(wucuo . [(20191106 2344) ((emacs (24 4))) "Spell check code containing camel case words" single ((:commit . "dc56b11e0f5c4e4a121e6ac72523fa0e6cae4c02") (:keywords "convenience") (:authors ("Chen Bin ")) (:maintainer "Chen Bin ") (:url . "http://github.com/redguardtoo/wucuo"))]) +(wttrin . [(20170614 1206) ((emacs (24 4)) (xterm-color (1 0))) "Emacs frontend for weather web service wttr.in" single ((:commit . "df5427ce2a5ad4dab652dbb1c4a1834d7ddc2abc") (:keywords "comm" "weather" "wttrin") (:authors ("Carl X. Su" . "bcbcarl@gmail.com") ("ono hiroko (kuanyui)" . "azazabc123@gmail.com")) (:maintainer "Carl X. Su" . "bcbcarl@gmail.com") (:url . "https://github.com/bcbcarl/emacs-wttrin"))]) +(wsd-mode . [(20191031 1211) nil "Emacs major-mode for www.websequencediagrams.com" tar ((:commit . "44aac55afb57cb540559aa1015f9ad2d770dd5c8") (:keywords "wsd" "diagrams" "design" "process" "modelling" "uml") (:authors ("Jostein Kjønigsen" . "jostein@gmail.com")) (:maintainer "Jostein Kjønigsen" . "jostein@gmail.com") (:url . "https://github.com/josteink/wsd-mode"))]) +(ws-butler . [(20170111 2334) nil "Unobtrusively remove trailing whitespace." single ((:commit . "52321b99be69aa1b661da7743c4421a30d8b6bcb") (:authors ("Le Wang")) (:maintainer "Le Wang") (:url . "https://github.com/lewang/ws-butler"))]) +(writeroom-mode . [(20190406 2135) ((emacs (24 1)) (visual-fill-column (1 9))) "Minor mode for distraction-free writing" tar ((:commit . "ebe522ba5a0367cf82ed03ffeb63fe597b84f4a1") (:keywords "text") (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm"))]) +(writegood-mode . [(20180525 1343) nil "Polish up poor writing on the fly" single ((:commit . "b71757ec337e226909fb0422f0224e31acc71733") (:keywords "writing" "weasel-words" "grammar") (:authors ("Benjamin Beckwith")) (:maintainer "Benjamin Beckwith") (:url . "http://github.com/bnbeckwith/writegood-mode"))]) +(writefreely . [(20190628 1606) ((emacs (24 3)) (org (9 0)) (ox-gfm (0 0)) (request (0 3))) "Push your Org files as markdown to a writefreely instance" single ((:commit . "83a487e48e0d8342c372deb74d04c0b43474268c") (:keywords "convenience") (:authors ("Daniel Gomez ")) (:maintainer "Daniel Gomez ") (:url . "https://github.com/dangom/writefreely.el"))]) +(wrap-region . [(20140117 720) ((dash (1 0 3))) "Wrap text with punctation or tag" single ((:commit . "fbae9b0f106187af19823f1a6260b5c68b7252e6") (:keywords "speed" "convenience") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:url . "http://github.com/rejeep/wrap-region"))]) +(wotd . [(20170328 1948) ((emacs (24 4)) (org (8 2 10))) "Fetch word-of-the-day from multiple online sources" single ((:commit . "d2937a3d91e014f8028a1f33d21c18cc0b065a64") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com"))]) +(world-time-mode . [(20140627 807) nil "show whole days of world-time diffs" single ((:commit . "ce7a3b45c87eb24cfe61eee453175d64f741d7cc") (:keywords "tools" "calendar") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk"))]) +(workgroups2 . [(20141102 1922) ((cl-lib (0 4)) (dash (2 8 0)) (anaphora (1 0 0)) (f (0 17))) "New workspaces for Emacs" single ((:commit . "bbefbb2579d463b243dcd4ecbfce82e1bdac3882") (:keywords "session" "management" "window-configuration" "persistence") (:authors ("Sergey Pashinin ")) (:maintainer "Sergey Pashinin ") (:url . "https://github.com/pashinin/workgroups2"))]) +(workgroups . [(20110726 1641) nil "workgroups for windows (for Emacs)" single ((:commit . "9572b3492ee09054dc329f64ed846c962b395e39") (:keywords "session" "management" "window-configuration" "persistence") (:authors ("tlh" . "thunkout@gmail.com")) (:maintainer "tlh" . "thunkout@gmail.com"))]) +(worf . [(20191116 1730) ((swiper (0 11 0)) (ace-link (0 1 0)) (hydra (0 13 0)) (zoutline (0 1 0))) "A warrior does not press so many keys! (in org-mode)" tar ((:commit . "b1fb5771c4a3a47b628b8c349595c4ace347113b") (:keywords "lisp") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/worf"))]) +(wordsmith-mode . [(20171025 1430) nil "Syntax analysis and NLP text-processing in Emacs (OSX-only)" single ((:commit . "589a97412138145bea70e0450eeddeb7f138d538") (:authors ("istib" . "istib@thebati.net")) (:maintainer "istib" . "istib@thebati.net"))]) +(wordnut . [(20180313 443) ((emacs (24 4))) "Major mode interface to WordNet" tar ((:commit . "feac531404041855312c1a046bde7ea18c674915"))]) +(wordgen . [(20170803 1820) ((emacs (24)) (cl-lib (0 5))) "Random word generator" single ((:commit . "aacad928ae99a953e034a831dfd0ebdf7d52ac1d") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:url . "https://github.com/Fanael/wordgen.el"))]) +(wonderland . [(20130913 119) ((dash (2 0 0)) (dash-functional (1 0 0)) (multi (2 0 0)) (emacs (24))) "declarative configuration for Emacsen" single ((:commit . "89d274ad694b0e748efdac23ccd60b7d8b73d7c6") (:keywords "configuration" "profile" "wonderland") (:authors ("Christina Whyte" . "kurisu.whyte@gmail.com")) (:maintainer "Christina Whyte" . "kurisu.whyte@gmail.com") (:url . "http://github.com/kurisuwhyte/emacs-wonderland"))]) +(wolfram-mode . [(20180307 13) ((emacs (24 3))) "Mathematica editing and inferior mode." single ((:commit . "be680190cac6ccf579dbce107deaae495928d1b3") (:keywords "languages" "processes" "tools") (:authors ("Daichi Mochihashi ")) (:maintainer "Daichi Mochihashi ") (:url . "https://github.com/kawabata/wolfram-mode/"))]) +(wolfram . [(20190805 1007) nil "Wolfram Alpha Integration" single ((:commit . "a172712d5045834f5434cca2843a7c3506805db8") (:keywords "math") (:authors ("Hans Sjunnesson" . "hans.sjunnesson@gmail.com")) (:maintainer "Hans Sjunnesson" . "hans.sjunnesson@gmail.com"))]) +(wn-mode . [(20151110 552) ((emacs (24))) "numeric window switching shortcuts" single ((:commit . "f05c3151523e529af5a0a3fa8c948b61fb369f6e") (:keywords "buffers" "windows" "switching-windows") (:authors ("Anonymous")) (:maintainer "Luís Oliveira" . "luismbo@gmail.com") (:url . "https://github.com/luismbo/wn-mode"))]) +(with-venv . [(20190516 606) ((cl-lib (0 5)) (emacs (24 4))) "Execute with Python virtual environment activated" single ((:commit . "3728d3a60c600d7ac505ce281cd2579a8992c14d") (:keywords "processes" "python" "venv") (:authors ("10sr <8.slashes [at] gmail [dot] com>")) (:maintainer "10sr <8.slashes [at] gmail [dot] com>") (:url . "https://github.com/10sr/with-venv-el"))]) +(with-simulated-input . [(20190913 1524) ((emacs (24 4)) (seq (2 0)) (s (0))) "A macro to simulate user input non-interactively" single ((:commit . "3d881793521c5618cdb0968a85879e0e49da7fca") (:keywords "lisp" "tools" "extensions") (:authors ("Ryan C. Thompson")) (:maintainer "Ryan C. Thompson"))]) +(with-proxy . [(20190920 24) ((emacs (24 4))) "Evaluate expressions with proxy" single ((:commit . "a7506af86ffc943f5d4cba712ec661125799c30b") (:keywords "comm") (:authors ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainer "Gong Qijian" . "gongqijian@gmail.com") (:url . "https://github.com/twlz0ne/with-proxy.el"))]) +(with-namespace . [(20130407 1822) ((dash (1 1 0)) (loop (1 1))) "interoperable elisp namespaces" single ((:commit . "8ac52da3a09cf46087720e30cf730d00f140cde6") (:keywords "namespaces") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) +(with-emacs . [(20191117 323) ((emacs (24 4))) "Evaluate Emacs Lisp expressions in a separate Emacs process" single ((:commit . "0f10ee05101b8188fdae8abe8e2b2b49cf3fda41") (:keywords "tools") (:authors ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainer "Gong Qijian" . "gongqijian@gmail.com") (:url . "https://github.com/twlz0ne/with-emacs.el"))]) +(with-editor . [(20191105 2250) ((emacs (24 4)) (async (1 9))) "Use the Emacsclient as $EDITOR" tar ((:commit . "53dcd4d09924b0ae2908b417fe817dc5c6d90f20") (:keywords "tools") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/with-editor"))]) +(wispjs-mode . [(20170720 1919) ((clojure-mode (0))) "Major mode for Wisp code." single ((:commit . "60f9f5fd9d1556e2d008939f67eb1b1d0f325fa8") (:authors ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainer "Kris Jenkins" . "krisajenkins@gmail.com") (:url . "https://github.com/krisajenkins/wispjs-mode"))]) +(wisp-mode . [(20190921 2218) nil "Tools for wisp: the Whitespace-to-Lisp preprocessor" tar ((:commit . "0d2c025ac4cfd394706c07fbb60999eaf711020b") (:keywords "languages" "lisp") (:authors ("Arne Babenhauserheide" . "arne_bab@web.de")) (:maintainer "Arne Babenhauserheide" . "arne_bab@web.de"))]) +(winum . [(20190911 1607) ((cl-lib (0 5)) (dash (2 13 0))) "Navigate windows and frames using numbers." single ((:commit . "c5455e866e8a5f7eab6a7263e2057aff5f1118b9") (:keywords "convenience" "frames" "windows" "multi-screen") (:authors ("Thomas de Beauchêne" . "thomas.de.beauchene@gmail.com")) (:maintainer "Thomas de Beauchêne" . "thomas.de.beauchene@gmail.com") (:url . "http://github.com/deb0ch/winum.el"))]) +(winring . [(20180530 18) nil "Window configuration rings" single ((:commit . "f2d072bd446b73e93b127523f19ea82b99b9267f") (:keywords "frames" "tools") (:authors ("1997-2018 Barry A. Warsaw")) (:maintainer "1997-2018 Barry A. Warsaw") (:url . "https://gitlab.com/warsaw/winring"))]) +(winpoint . [(20131023 1713) nil "Remember buffer positions per-window, not per buffer" single ((:commit . "e6050093c076308184566fa1d1012423d6934773") (:keywords "convenience") (:authors ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainer "Jorgen Schaefer" . "forcer@forcix.cx") (:url . "https://github.com/jorgenschaefer/winpoint"))]) +(winnow . [(20170903 1206) ((emacs (24))) "winnow ag/grep results by matching/excluding lines" single ((:commit . "18cb6b94338f3b7b4f2cd0331dad22f82dd9e0d3") (:keywords "matching") (:authors ("Charles L.G. Comstock" . "dgtized@gmail.com")) (:maintainer "Charles L.G. Comstock" . "dgtized@gmail.com") (:url . "https://github.com/dgtized/winnow.el"))]) +(windwow . [(20170816 148) ((dash (2 11 0)) (cl-lib (0 6 1)) (emacs (24))) "simple workspace management" single ((:commit . "77bad26f651744b68d31b389389147014d250f23") (:keywords "frames") (:authors ("Viju Mathew" . "viju.jm@gmail.com")) (:maintainer "Viju Mathew" . "viju.jm@gmail.com") (:url . "github.com/vijumathew/windwow"))]) +(windsize . [(20181029 2257) nil "Simple, intuitive window resizing" single ((:commit . "62c2846bbe95b0a73e996c75e4a644d05f57aaaa") (:keywords "window" "resizing" "convenience") (:authors ("Chris Perkins" . "chrisperkins99@gmail.com")) (:maintainer "Chris Perkins" . "chrisperkins99@gmail.com") (:url . "http://github.com/grammati/windsize"))]) +(window-purpose . [(20190628 1827) ((emacs (24 4)) (let-alist (1 0 3)) (imenu-list (0 1))) "Purpose-based window management for Emacs" tar ((:commit . "f6421966761ad911fe8861aba2b110c5dd60d1ea") (:keywords "frames") (:authors ("Bar Magal")) (:maintainer "Bar Magal") (:url . "https://github.com/bmag/emacs-purpose"))]) +(window-numbering . [(20160809 1810) nil "Numbered window shortcuts" single ((:commit . "10809b3993a97c7b544240bf5d7ce9b1110a1b89") (:keywords "faces" "matching") (:authors ("Nikolaj Schumacher ")) (:maintainer "Nikolaj Schumacher ") (:url . "http://nschum.de/src/emacs/window-numbering-mode/"))]) +(window-number . [(20170801 151) nil "Select windows by numbers." single ((:commit . "d41722de646ffeb3f70d26e4a86a5a1ba5c6be87") (:keywords "windows") (:authors ("Johann \"Myrkraverk\" Oskarsson" . "myrkraverk@users.sourceforge.net")) (:maintainer "Nik Nyby" . "niknyby@riseup.net") (:url . "https://github.com/nikolas/window-number"))]) +(window-layout . [(20170215 33) nil "window layout manager" single ((:commit . "cd2e4f967b610c2bbef53182829e47250d027056") (:keywords "window" "layout") (:authors ("SAKURAI Masashi ")) (:maintainer "SAKURAI Masashi "))]) +(window-jump . [(20170809 2208) nil "Move left/right/up/down through your windows." single ((:commit . "6bdb51e9a346907d60a9625f6180bddd06be6674") (:keywords "frames" "convenience") (:authors ("Steven Thomas")) (:maintainer "Steven Thomas") (:url . "https://github.com/chumpage/chumpy-windows"))]) +(window-end-visible . [(20140508 2041) nil "Find the last visible point in a window" single ((:commit . "525500fb2ebc08f3f9ea493972e5f2e1d79f89ef") (:keywords "extensions") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:url . "http://github.com/rolandwalker/window-end-visible"))]) +(windata . [(20090830 1040) nil "convert window configuration to list" single ((:commit . "a723fc446ceaec23d5f29ecc8245d94c99d91625") (:keywords "convenience" "frames") (:authors (nil . "wenbinye@gmail.com")) (:maintainer nil . "wenbinye@gmail.com"))]) +(win-switch . [(20161009 1627) nil "fast, dynamic bindings for window-switching/resizing" single ((:commit . "954eb5e4c5737f0c06368c42a7f1c3dd374d782f") (:keywords "window" "switch" "key bindings" "ergonomic" "efficient") (:authors ("Christopher Genovese" . "genovese@cmu.edu")) (:maintainer "Christopher R. Genovese" . "genovese@cmu.edu") (:url . "http://www.stat.cmu.edu/~genovese/emacs/win-switch/"))]) +(wilt . [(20180220 854) ((emacs (24 3)) (dash (2 12 0)) (s (1 10 0))) "An extensions for calculating WILT in a buffer." single ((:commit . "04dbe37fa35d0b24c791421785d2c97a8cbfe2cc") (:authors ("Austin Bingham" . "austin@sixty-north.com")) (:maintainer "Austin Bingham" . "austin@sixty-north.com") (:url . "https://github.com/sixty-north/emacs-wilt"))]) +(wiki-summary . [(20181010 1824) ((emacs (24))) "View Wikipedia summaries in Emacs easily." single ((:commit . "fa41ab6e50b3b80e54148af9d4bac18fd0405000") (:keywords "wikipedia" "utility") (:authors ("Danny Gratzer")) (:maintainer "Danny Gratzer") (:url . "https://github.com/jozefg/wiki-summary.el"))]) +(wiki-nav . [(20150223 1354) ((button-lock (1 0 2)) (nav-flash (1 0 0))) "Simple file navigation using [[WikiStrings]]" single ((:commit . "f9082feb329432fcf2ac49a95e64bed9fda24d58") (:keywords "mouse" "button" "hypermedia" "navigation") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:url . "http://github.com/rolandwalker/button-lock"))]) +(widgetjs . [(20160719 1504) ((makey (0 3)) (js2-mode (20140114)) (js2-refactor (0 6 1)) (s (1 9 0))) "Widgetjs mode" single ((:commit . "0379c80a0c2df77cd18e95741caf6fc8acd90a41") (:keywords "help") (:authors ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainer "Nicolas Petton" . "petton.nicolas@gmail.com"))]) +(widget-mvc . [(20150102 406) nil "MVC framework for the emacs widgets" single ((:commit . "ff5a85880df7b87f9f480fe3c28438a0712b7b87") (:keywords "lisp" "widget") (:authors ("SAKURAI Masashi ")) (:maintainer "SAKURAI Masashi "))]) +(wide-column . [(20170925 1613) nil "Calls functions dependant on column position." single ((:commit . "ce9ef4675485a7bea381077866368ef875226b10") (:keywords "minor mode" "cursor colour" "column width") (:authors ("Phillip Lord" . "p.lord@russet.org.uk")) (:maintainer "Phillip Lord" . "p.lord@russet.org.uk"))]) +(whole-line-or-region . [(20190411 215) nil "on current line if region undefined" single ((:commit . "15f17488f98868f1628a3f9d91a812b1f89bc73a") (:keywords "convenience" "wp") (:authors ("Joe Casadonte" . "emacs@northbound-train.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/whole-line-or-region"))]) +(whois . [(20190529 1554) ((emacs (24))) "Syntax highlighted domain name queries using system whois" single ((:commit . "b4cdab4d25225c6e834727a7d85cdb0d493da152") (:keywords "network" "comm") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:url . "https://github.com/lassik/emacs-whois"))]) +(whizzml-mode . [(20190920 2342) ((emacs (24 4))) "Programming mode for editing WhizzML files" tar ((:commit . "5c5be351e11a71b31ede33ce941ce20ee0da75ed") (:keywords "languages" "lisp") (:authors ("Jose Antonio Ortega Ruiz" . "jao@bigml.com")) (:maintainer "Jose Antonio Ortega Ruiz" . "jao@bigml.com"))]) +(whitespace-cleanup-mode . [(20190106 2022) nil "Intelligently call whitespace-cleanup on save" single ((:commit . "121854747776df1b78d0ef89efb6d01c2c1e8c89") (:keywords "convenience") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/whitespace-cleanup-mode"))]) +(white-theme . [(20160917 1743) ((emacs (24))) "Minimalistic light color theme inspired by basic-theme" single ((:commit . "e9e6d5b9d43da6eb15e86f5fbc8b1ba83abe8c78") (:keywords "color" "theme" "minimal" "basic" "simple" "white") (:authors ("Anler Hernandez Peral" . "inbox@anler.me")) (:maintainer "Anler Hernandez Peral" . "inbox@anler.me") (:url . "http://github.com/anler/white-theme.el"))]) +(white-sand-theme . [(20151117 1648) ((emacs (24))) "Emacs theme with a light background." single ((:commit . "97621edd69267dd143760d94393db2c2558c9ea4") (:authors ("Martin Haesler")) (:maintainer "Martin Haesler"))]) +(whitaker . [(20150814 1122) ((dash (2 10 0))) "Comint interface for Whitaker's Words" single ((:commit . "eaf26ea647b729ca705b73ea70312d5ffdf89448") (:keywords "processes") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com"))]) +(which-key-posframe . [(20190427 1103) ((emacs (26 0)) (posframe (0 4 3)) (which-key (3 3 2))) "Using posframe to show which-key" single ((:commit . "e7f28608c7fc9507e407c6b840dff09062df533a") (:keywords "convenience" "bindings" "tooltip") (:authors ("Yanghao Xie")) (:maintainer "Yanghao Xie" . "yhaoxie@gmail.com") (:url . "https://github.com/yanghaoxie/which-key-posframe"))]) +(which-key . [(20191111 1951) ((emacs (24 4))) "Display available keybindings in popup" single ((:commit . "a916c9ae28e961922d8d8419e633f9321fcdbe53") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainer "Justin Burkett" . "justin@burkett.cc") (:url . "https://github.com/justbur/emacs-which-key"))]) +(what-the-commit . [(20150901 1316) nil "Random commit message generator" single ((:commit . "868c80a1b8614bcbd2225cd0290142c72f2a7956") (:keywords "git" "commit" "message") (:authors ("Dan Barbarito" . "dan@barbarito.me")) (:maintainer "Dan Barbarito" . "dan@barbarito.me") (:url . "http://barbarito.me/"))]) +(wgrep-pt . [(20140510 2231) ((wgrep (2 1 5))) "Writable pt buffer and apply the changes to files" single ((:commit . "379afd89ebd76f63842c8589127d66096a8bb595") (:keywords "grep" "edit" "extensions") (:authors ("Masahiro Hayashi , Bailey Ling" . "bling@live.ca")) (:maintainer "Masahiro Hayashi , Bailey Ling" . "bling@live.ca") (:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep-pt.el"))]) +(wgrep-helm . [(20190401 2156) ((wgrep (2 1 1))) "Writable helm-grep-mode buffer and apply the changes to files" single ((:commit . "379afd89ebd76f63842c8589127d66096a8bb595") (:keywords "grep" "edit" "extensions") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep-helm.el"))]) +(wgrep-ag . [(20181229 124) ((wgrep (2 1 5))) "Writable ag buffer and apply the changes to files" single ((:commit . "379afd89ebd76f63842c8589127d66096a8bb595") (:keywords "grep" "edit" "extensions") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep-ag.el"))]) +(wgrep-ack . [(20141012 1011) ((wgrep (2 1 1))) "Writable ack-and-a-half buffer and apply the changes to files" single ((:commit . "379afd89ebd76f63842c8589127d66096a8bb595") (:keywords "grep" "edit" "extensions") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep-ack.el"))]) +(wgrep . [(20181229 40) nil "Writable grep buffer and apply the changes to files" single ((:commit . "379afd89ebd76f63842c8589127d66096a8bb595") (:keywords "grep" "edit" "extensions") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:url . "http://github.com/mhayashi1120/Emacs-wgrep/raw/master/wgrep.el"))]) +(weibo . [(20150307 2242) ((cl-lib (0 5))) "Weibo client for Emacs" tar ((:commit . "a8abb50b7602fe15fe2bc6400ac29780e956b390") (:keywords "weibo") (:authors ("Austin" . "austiny.cn@gmail.com")) (:maintainer "Austin" . "austiny.cn@gmail.com") (:url . "https://github.com/austin-----/weibo.emacs"))]) +(weechat-alert . [(20160416 1248) ((weechat (0 3 1)) (cl-lib (0 5)) (alert (1 2))) "Weechat notifier using alerts" single ((:commit . "a8fd557c8f335322f132c1c6c08b6741d6394e2e") (:keywords "irc" "chat" "network" "weechat") (:authors ("Andreas Klein" . "git@kungi.org")) (:maintainer "Andreas Klein" . "git@kungi.org") (:url . "https://github.com/kungi/weechat-alert"))]) +(weechat . [(20190520 1551) ((s (1 3 1)) (cl-lib (0 2)) (emacs (24)) (tracking (1 2))) "Chat via WeeChat's relay protocol in Emacs" tar ((:commit . "d9a13306ea8be27367f92e9202d116a88fa1f441"))]) +(wedge-ws . [(20140714 2149) nil "Wedge whitespace between columns in text" single ((:commit . "4669115f02d9c6fee067cc5369bb38c0f9db88b2") (:keywords "formatting" "indentation") (:authors ("Anders Eurenius" . "aes@spotify.com")) (:maintainer "Anders Eurenius" . "aes@spotify.com"))]) +(websocket . [(20191120 405) ((cl-lib (0 5))) "Emacs WebSocket client and server" single ((:commit . "491a60b8bb8a6c3bd081c70354ab82040b0a7db3") (:keywords "communication" "websocket" "server") (:authors ("Andrew Hyatt" . "ahyatt@gmail.com")) (:maintainer "Andrew Hyatt" . "ahyatt@gmail.com"))]) +(webpaste . [(20190310 1048) ((emacs (24 4)) (request (0 2 0)) (cl-lib (0 5))) "Paste to pastebin-like services" single ((:commit . "bd38635d926a45a3cbe453fd9b41c8624a6d2309") (:keywords "convenience" "comm" "paste") (:authors ("Elis \"etu\" Hirwing")) (:maintainer "Elis \"etu\" Hirwing") (:url . "https://github.com/etu/webpaste.el"))]) +(weblogger . [(20110926 1618) ((xml-rpc (1 6 8))) "Weblog maintenance via XML-RPC APIs" single ((:commit . "b3dd4aead9d3a87e6d85e7fef4f4f3bd40d87b53") (:keywords "weblog" "blogger" "cms" "movable" "type" "openweblog" "blog") (:url . "http://launchpad.net/weblogger-el"))]) +(webkit-color-picker . [(20180325 736) ((emacs (26 0)) (posframe (0 1 0))) "Insert and adjust colors using Webkit Widgets" tar ((:commit . "765cac80144cad4bc0bf59025ea0199f0486f737") (:keywords "tools") (:authors ("Ozan Sener" . "hi@ozan.email")) (:maintainer "Ozan Sener" . "hi@ozan.email") (:url . "https://github.com/osener/emacs-webkit-color-picker"))]) +(web-server . [(20190310 213) ((emacs (24 3))) "Emacs Web Server" tar ((:commit . "cafa5b7582c57252a0884b2c33da9b18fb678713") (:keywords "http" "server" "network") (:authors ("Eric Schulte" . "schulte.eric@gmail.com")) (:maintainer "Eric Schulte" . "schulte.eric@gmail.com") (:url . "https://github.com/eschulte/emacs-web-server"))]) +(web-search . [(20190620 602) ((emacs (24 3))) "Open a web search" tar ((:commit . "a22cbdc663a1895d5a5b69de91e1e3b9eb64b92f") (:keywords "web" "search") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/web-search.el"))]) +(web-narrow-mode . [(20170407 210) ((web-mode (14 0 27))) "quick narrow code block in web-mode" single ((:commit . "73bdcb7d0701abe65dab4fc295d944885e05ae33") (:keywords "web-mode" "react" "narrow" "web") (:authors ("Qquanwei" . "quanwei9958@126.com")) (:maintainer "Johan Andersson" . "quanwei9958@126.com") (:url . "https://github.com/Qquanwei/web-narrow-mode"))]) +(web-mode-edit-element . [(20190531 852) ((emacs (24 4)) (web-mode (14))) "Helper-functions for attribute- and element-handling" tar ((:commit . "ad5d7e4dc2420bdd00ce65d9adffbd38a5904afa") (:keywords "languages" "convenience") (:authors ("Julian T. Knabenschuh" . "jtkdevelopments@gmail.com")) (:maintainer "Julian T. Knabenschuh" . "jtkdevelopments@gmail.com") (:url . "https://github.com/jtkDvlp/web-mode-edit-element"))]) +(web-mode . [(20191104 1859) ((emacs (23 1))) "major mode for editing web templates" single ((:commit . "cd000fcfce97152f8b831b7eef4ea0d0b1eed11a") (:keywords "languages") (:authors ("François-Xavier Bois ")) (:maintainer "François-Xavier Bois") (:url . "http://web-mode.org"))]) +(web-completion-data . [(20160318 848) nil "Shared completion data for ac-html and company-web" tar ((:commit . "c272c94e8a71b779c29653a532f619acad433a4f") (:keywords "html" "auto-complete" "company") (:authors ("Olexandr Sydorchuk" . "olexandr.syd@gmail.com")) (:maintainer "Olexandr Sydorchuk" . "olexandr.syd@gmail.com") (:url . "https://github.com/osv/web-completion-data"))]) +(web-beautify . [(20161115 2247) nil "Format HTML, CSS and JavaScript/JSON" single ((:commit . "e1b45321d8c11b404b12c8e55afe55eaa7c84ee9") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com") (:url . "https://github.com/yasuyk/web-beautify"))]) +(web . [(20141231 2001) ((dash (2 9 0)) (s (1 5 0))) "useful HTTP client" single ((:commit . "483188dac4bc6b409b985c9dae45f3324a425efd") (:keywords "lisp" "http" "hypermedia") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:url . "http://github.com/nicferrier/emacs-web"))]) +(weather-metno . [(20150901 107) ((emacs (24)) (cl-lib (0 3))) "Weather data from met.no in Emacs" tar ((:commit . "bfc7137095e0ee71aad70ac46f2af677f3c051b6"))]) +(wdl-mode . [(20180831 1946) nil "WDL (Workflow Definition Language) major mode" single ((:commit . "cef86e5afc136ae5ad9324cd6e6d6f860b889bcf") (:keywords "languages") (:authors ("Xiaowei Zhan" . "zhanxw@gmail.com")) (:maintainer "Xiaowei Zhan" . "zhanxw@gmail.com") (:url . "http://github.com/zhanxw/wdl-mode"))]) +(wcheck-mode . [(20190626 1839) nil "General interface for text checkers" tar ((:commit . "271198bca70c05b4591c836d3c670b72cdfabe9c"))]) +(wc-mode . [(20170127 429) nil "Running word count with goals (minor mode)" single ((:commit . "f218f42709a651b34d6c1ddd98856f44648ef707") (:authors ("Benjamin Beckwith")) (:maintainer "Benjamin Beckwith") (:url . "https://github.com/bnbeckwith/wc-mode"))]) +(wc-goal-mode . [(20140829 1359) nil "Running word count with goals (minor mode)" single ((:commit . "bf21ab9c5a449bcc20dd207a4915dcec218d2699") (:authors ("Benjamin Beckwith")) (:maintainer "Benjamin Beckwith") (:url . "https://github.com/bnbeckwith/wc-goal-mode"))]) +(wavefront-obj-mode . [(20170808 1716) nil "Major mode for Wavefront obj files" single ((:commit . "34027915de6496460d8e68b5991dd24d47d54859") (:authors ("Sasha Kovar" . "sasha-emacs@arcocene.org")) (:maintainer "Sasha Kovar" . "sasha-emacs@arcocene.org") (:url . "http://github.com/abend/wavefront-obj-mode"))]) +(watch-buffer . [(20120331 2044) nil "run a shell command when saving a buffer" single ((:commit . "761fd7252e6d7bf5148283c2a7ee935f087d9427") (:keywords "automation" "convenience") (:authors ("Michael Steger" . "mjsteger1@gmail.com")) (:maintainer "Michael Steger" . "mjsteger1@gmail.com") (:url . "https://github.com/mjsteger/watch-buffer"))]) +(warm-night-theme . [(20161101 1428) ((emacs (24))) "Emacs 24 theme with a dark background." single ((:commit . "020f084d23409b5035150508ba6e57c2509edd64") (:authors ("martin haesler")) (:maintainer "martin haesler"))]) +(wanderlust . [(20190919 859) ((semi (1 14 7))) "Yet Another Message Interface on Emacsen" tar ((:commit . "7a919e422a48f5021576e68282703de430558879"))]) +(wandbox . [(20170603 1231) ((emacs (24)) (request (0 3 0)) (s (1 10 0))) "Wandbox client" tar ((:commit . "e002fe41f2cd9b4ce2b1dc80b83301176e9117f1") (:keywords "tools") (:authors ("KOBAYASHI Shigeru (kosh)" . "shigeru.kb@gmail.com")) (:maintainer "KOBAYASHI Shigeru (kosh)" . "shigeru.kb@gmail.com") (:url . "https://github.com/kosh04/emacs-wandbox"))]) +(wand . [(20191122 1408) ((dash (2 15 0)) (s (0 1 1))) "Magic wand for Emacs - Select and execute" tar ((:commit . "93a5a4ecab1973e5846b35f856391daf8068d12e") (:keywords "extensions" "tools") (:authors ("Ha-Duong Nguyen ")) (:maintainer "Ha-Duong Nguyen ") (:url . "https://github.com/cmpitg/wand"))]) +(walkclj . [(20180718 900) ((emacs (25)) (parseclj (0 1 0)) (treepy (0 1 0))) "Manipulate Clojure parse trees" single ((:commit . "2e54fa813b11d1a87c890cdf117f30165a193024") (:keywords "languages") (:authors ("Arne Brasseur")) (:maintainer "Arne Brasseur") (:url . "https://github.com/plexus/walkclj"))]) +(wakib-keys . [(20190910 1011) ((emacs (24 4))) "Minor Mode for Modern Keybindings" single ((:commit . "23237fc2c255de798b8d3fc2cb68c7c22b53caa9") (:keywords "convenience" "keybindings" "keys") (:authors ("Abdulla Bubshait")) (:maintainer "Abdulla Bubshait") (:url . "https://github.com/darkstego/wakib-keys/"))]) +(wakatime-mode . [(20180920 702) nil "Automatic time tracking extension for WakaTime" single ((:commit . "2531cb58287770883ba534d20b3288955c4d6ef3") (:keywords "calendar" "comm") (:authors ("Gabor Torok" . "gabor@20y.hu")) (:maintainer "Alan Hamlett" . "alan@wakatime.com"))]) +(waher-theme . [(20141115 1230) ((emacs (24 1))) "Emacs 24 theme based on waher for st2 by dduckster" single ((:commit . "60d31519fcfd8e797723d47961b255ae2f2e2c0a") (:authors ("Jasonm23" . "jasonm23@gmail.com")) (:maintainer "Jasonm23" . "jasonm23@gmail.com") (:url . "https://github.com/jasonm23/emacs-waher-theme"))]) +(waf-mode . [(20170403 1940) nil "Waf integration for Emacs" single ((:commit . "20c75eabd1d54fbce8e0dbef785c9fb68577ee4f") (:authors ("Denys Valchuk" . "dvalchuk@gmail.com")) (:maintainer "Denys Valchuk" . "dvalchuk@gmail.com") (:url . "https://bitbucket.org/dvalchuk/waf-mode"))]) +(wacspace . [(20180311 2350) ((dash (1 2 0)) (cl-lib (0 2))) "The WACky WorkSPACE manager for emACS" tar ((:commit . "54d19aab6fd2bc5945b7ffc58104e695064927e2"))]) +(w3m . [(20191122 554) nil "an Emacs interface to w3m" tar ((:commit . "d8ba277836dee3af6706a4cb1c2f22b6bf5d0872") (:keywords "w3m" "www" "hypermedia"))]) +(w32-browser . [(20170101 1954) nil "Run Windows application associated with a file." single ((:commit . "e5c60eafd8f8d3546a0fa295ad5af2414d36b4e6") (:keywords "mouse" "dired" "w32" "explorer") (:authors ("Emacs Wiki, Drew Adams")) (:maintainer nil . "Drew Adams (concat \"drew.adams\" \"@\" \"oracle\" \".com\")") (:url . "http://www.emacswiki.org/w32-browser.el"))]) +(vyper-mode . [(20180707 1935) ((emacs (24 3))) "Major mode for the Vyper programming language" single ((:commit . "323dfddfc38f0b11697e9ebaf04d1b53297e54e5") (:keywords "languages") (:authors ("Alex Stokes" . "r.alex.stokes@gmail.com")) (:maintainer "Alex Stokes" . "r.alex.stokes@gmail.com") (:url . "https://github.com/ralexstokes/vyper-mode"))]) +(vue-mode . [(20190415 231) ((mmm-mode (0 5 5)) (vue-html-mode (0 2)) (ssass-mode (0 2)) (edit-indirect (0 1 4))) "Major mode for vue component based on mmm-mode" single ((:commit . "031edd1f97db6e7d8d6c295c0e6d58dd128b9e71") (:keywords "languages") (:authors ("codefalling" . "code.falling@gmail.com")) (:maintainer "codefalling" . "code.falling@gmail.com"))]) +(vue-html-mode . [(20180428 2035) nil "Major mode for editing Vue.js templates" single ((:commit . "1514939804bad558584feeb6298b38d22eadf64e") (:keywords "languages" "vue" "template") (:authors ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainer "Adam Niederer" . "adam.niederer@gmail.com") (:url . "http://github.com/AdamNiederer/vue-html-mode"))]) +(vterm-toggle . [(20191117 805) ((emacs (25 1)) (vterm (0 0 1))) "Toggles between the vterm buffer and other buffers." single ((:commit . "003f8537b3f26000006847a0a52aaf4e2fe3051b") (:keywords "vterm" "terminals") (:authors (nil . "jixiuf jixiuf@qq.com")) (:maintainer nil . "jixiuf jixiuf@qq.com") (:url . "https://github.com/jixiuf/vterm-toggle"))]) +(vterm . [(20191123 335) ((emacs (25 1))) "This package implements a terminal via libvterm" tar ((:commit . "0feda596d541c17249a0dc78365e6733b1651d6c") (:keywords "terminals") (:authors ("Lukas Fürmetz" . "fuermetz@mailbox.org")) (:maintainer "Lukas Fürmetz" . "fuermetz@mailbox.org") (:url . "https://github.com/akermu/emacs-libvterm"))]) +(vscode-icon . [(20191102 2010) ((emacs (25 1))) "Utility package to provide Vscode style icons" tar ((:commit . "4304e9f0a47406048129dc62171f08b67325a2ed") (:keywords "files" "tools") (:authors ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com") (:url . "https://github.com/jojojames/vscode-icon-emacs"))]) +(volume . [(20150718 2009) nil "tweak your sound card volume from Emacs" single ((:commit . "ecc1550b3c8b501d37e0f0116b54b535d15f90f6") (:authors ("Daniel Brockman" . "daniel@brockman.se")) (:maintainer "Daniel Brockman" . "daniel@brockman.se") (:url . "http://www.brockman.se/software/volume-el/"))]) +(volatile-highlights . [(20160612 155) nil "Minor mode for visual feedback on some operations." single ((:commit . "9a20091f0ce7fc0a6b3e641a6a46d5f3ac4d8392") (:keywords "emulations" "convenience" "wp") (:authors ("K-talo Miyazaki ")) (:maintainer "K-talo Miyazaki ") (:url . "http://www.emacswiki.org/emacs/download/volatile-highlights.el"))]) +(voca-builder . [(20161101 1645) ((popup (0 5 2))) "Helps you build up your vocabulary" single ((:commit . "51573beec8cd8308477b0faf453aad93e17f57c5") (:keywords "english" "vocabulary") (:authors ("Yi Tang" . "yi.tang.uk@me.com")) (:maintainer "Yi Tang" . "yi.tang.uk@me.com") (:url . "https://github.com/yitang/voca-builder"))]) +(vmd-mode . [(20190929 735) ((emacs (24 3))) "Fast Github-flavored Markdown preview using a vmd subprocess." single ((:commit . "aa9b753601ee1ed31b4f717629179ce7a2cacba5") (:keywords "markdown" "preview" "live" "vmd") (:authors ("Blake Miller" . "blak3mill3r@gmail.com")) (:maintainer "Blake Miller" . "blak3mill3r@gmail.com") (:url . "https://github.com/blak3mill3r/vmd-mode"))]) +(vlf . [(20180201 2254) nil "View Large Files" tar ((:commit . "31b292dc85a374fb343789e217015683bfbdf5f1") (:keywords "large files" "utilities") (:maintainer "Andrey Kotlarski" . "m00naticus@gmail.com") (:url . "https://github.com/m00natic/vlfi"))]) +(visual-regexp-steroids . [(20170222 253) ((visual-regexp (1 1))) "Extends visual-regexp to support other regexp engines" tar ((:commit . "a6420b25ec0fbba43bf57875827092e1196d8a9e") (:keywords "external" "foreign" "regexp" "replace" "python" "visual" "feedback") (:authors ("Marko Bencun" . "mbencun@gmail.com")) (:maintainer "Marko Bencun" . "mbencun@gmail.com") (:url . "https://github.com/benma/visual-regexp-steroids.el/"))]) +(visual-regexp . [(20190414 814) ((cl-lib (0 2))) "A regexp/replace command for Emacs with interactive visual feedback" single ((:commit . "3e3ed81a3cbadef1f1f4cb16f9112a58641d70ca") (:keywords "regexp" "replace" "visual" "feedback") (:authors ("Marko Bencun" . "mbencun@gmail.com")) (:maintainer "Marko Bencun" . "mbencun@gmail.com") (:url . "https://github.com/benma/visual-regexp.el/"))]) +(visual-fill-column . [(20190422 2154) ((emacs (24 3))) "fill-column for visual-line-mode" single ((:commit . "772d4b25ba19f57409cd03524be0f5bfdc2e8da1") (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm"))]) +(visual-ascii-mode . [(20150129 1046) nil "Visualize ascii code (small integer) on buffer." single ((:commit . "99285a099a17472ddd9f1b4f74e9d092dd8c5947") (:keywords "presentation") (:authors ("Dewdrops" . "v_v_4474@126.com")) (:maintainer "Dewdrops" . "v_v_4474@126.com") (:url . "https://github.com/Dewdrops/visual-ascii-mode"))]) +(visible-mark . [(20150624 450) nil "Make marks visible." single ((:commit . "a584db9bc88953b23a9648b3e14ade90767207f8") (:keywords "marking" "color" "faces") (:authors ("Ian Kelling" . "ian@iankelling.org")) (:maintainer "Ian Kelling" . "ian@iankelling.org") (:url . "https://gitlab.com/iankelling/visible-mark"))]) +(virtualenvwrapper . [(20190223 1919) ((dash (1 5 0)) (s (1 6 1))) "a featureful virtualenv tool for Emacs" single ((:commit . "107e7e0bf923f44d217712772cd58b414d0065cb") (:keywords "python" "virtualenv" "virtualenvwrapper") (:authors ("James J Porter" . "porterjamesj@gmail.com")) (:maintainer "James J Porter" . "porterjamesj@gmail.com") (:url . "http://github.com/porterjamesj/virtualenvwrapper.el"))]) +(virtualenv . [(20140220 2301) nil "Virtualenv for Python" single ((:commit . "276c0f4d6493b402dc4d22ecdf17b2b072e911b3") (:keywords "python" "virtualenv") (:authors ("Aaron Culich" . "aculich@gmail.com")) (:maintainer "Aaron Culich" . "aculich@gmail.com"))]) +(vimrc-mode . [(20181116 1919) nil "Major mode for vimrc files" single ((:commit . "13bc150a870d5d4a95f1111e4740e2b22813c30e") (:keywords "languages" "vim") (:url . "https://github.com/mcandre/vimrc-mode"))]) +(vimish-fold . [(20190713 1333) ((emacs (24 4)) (cl-lib (0 5)) (f (0 18 0))) "Fold text like in Vim" single ((:commit . "863bef039672693566cfcfe1d0ad236d3af48fea") (:keywords "convenience") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:url . "https://github.com/mrkkrp/vimish-fold"))]) +(vim-region . [(20140329 1624) ((expand-region (20140127))) "Select region as vim" single ((:commit . "7c4a99ce3678fee40c83ab88e8ad075d2a935fdf") (:authors ("ongaeshi" . "ongaeshi0621@gmail.com")) (:maintainer "ongaeshi" . "ongaeshi0621@gmail.com") (:url . "https://github.com/ongaeshi/emacs-vim-region"))]) +(vim-empty-lines-mode . [(20150111 426) ((emacs (23))) "Vim-like empty line indicator at end of files." single ((:commit . "d4a5034ca8ea0c962ad6e92c86c0fa2a74d2964b") (:keywords "emulations") (:authors ("Jonne Mickelin" . "jonne@ljhms.com")) (:maintainer "Jonne Mickelin" . "jonne@ljhms.com") (:url . "https://github.com/jmickelin/vim-empty-lines-mode"))]) +(viking-mode . [(20160705 2027) nil "kill first, ask later" single ((:commit . "c76aa265d13ad91d6890d242e142d05e31f0340b") (:keywords "kill" "delete") (:authors ("T.v.Dein" . "tlinden@cpan.org")) (:maintainer "T.v.Dein" . "tlinden@cpan.org") (:url . "https://github.com/tlinden/viking-mode"))]) +(viewer . [(20170107 202) nil "View-mode extension" single ((:commit . "6c8db025bf4021428f7f2c3ef9d74fb13f5d267a") (:keywords "view" "extensions") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:url . "http://github.com/rubikitch/viewer/"))]) +(vi-tilde-fringe . [(20141028 242) ((emacs (24))) "Displays tildes in the fringe on empty lines a la Vi." single ((:commit . "f1597a8d54535bb1d84b442577b2024e6f910308") (:keywords "emulation") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com") (:url . "https://github.com/syl20bnr/vi-tilde-fringe"))]) +(vhdl-tools . [(20190929 1532) ((ggtags (0 8 13)) (emacs (26 2)) (helm-rg (0 1)) (outshine (0))) "Utilities for navigating vhdl sources." single ((:commit . "9cf9ae509afb79c5579f645907387b8253db167a") (:keywords "languages" "convenience") (:authors ("Cayetano Santos")) (:maintainer "Cayetano Santos") (:url . "https://github.com/csantosb/vhdl-tools/wiki"))]) +(vhdl-capf . [(20160221 1734) nil "Completion at point function (capf) for vhdl-mode." single ((:commit . "290abe217050f33532bc9ccb04f894123402f414") (:keywords "convenience" "usability" "vhdl" "completion") (:authors ("sh-ow" . "sh-ow@users.noreply.github.com")) (:maintainer "sh-ow" . "sh-ow@users.noreply.github.com") (:url . "https://github.com/sh-ow/vhdl-capf"))]) +(vertigo . [(20180829 2230) ((dash (2 11 0))) "Jump across lines using the home row." single ((:commit . "6303d17270ea92290a6960890bca515274f1682b") (:keywords "vim" "vertigo") (:authors ("Fox Kiester" . "noct@posteo.net")) (:maintainer "Fox Kiester" . "noct@posteo.net") (:url . "https://github.com/noctuid/vertigo.el"))]) +(vertica-snippets . [(20191007 1546) ((yasnippet (0 6 1))) "Yasnippets for Vertica" tar ((:commit . "5750f359de2956f853b131c46cf56726a5a5dfd3") (:keywords "convenience" "snippets") (:authors ("Andreas Gerler" . "baron@bundesbrandschatzamt.de")) (:maintainer "Andreas Gerler" . "baron@bundesbrandschatzamt.de") (:url . "https://github.com/baron42bba/vertica-snippets"))]) +(vertica . [(20131217 1511) ((sql (3 0))) "Vertica SQL mode extension" single ((:commit . "3c9647b425c5c13c30bf0cba483646af18196588") (:keywords "sql" "vertica") (:authors ("Roman Scherer" . "roman@burningswell.com")) (:maintainer "Roman Scherer" . "roman@burningswell.com"))]) +(verify-url . [(20160426 1228) ((cl-lib (0 5))) "find out invalid urls in the buffer or region" single ((:commit . "d6f3623cda8cd526a2d198619b137059cb1ba1ab") (:keywords "convenience" "usability" "url") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:url . "https://github.com/lujun9972/verify-url"))]) +(veri-kompass . [(20181110 933) ((emacs (25)) (cl-lib (0 5)) (org (8 2 0))) "verilog codebase navigation facility" single ((:commit . "8638eea5a14f9834c001c943e7c22d8d90abc455") (:keywords "languages" "extensions" "verilog" "hardware" "rtl") (:maintainer nil . "andrea_corallo@yahoo.it") (:url . "https://gitlab.com/koral/veri-kompass"))]) +(vector-utils . [(20140508 2041) nil "Vector-manipulation utility functions" single ((:commit . "c38ca1c6a23b2b51a6ac36c2c64e50e21cbe9d21") (:keywords "extensions") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:url . "http://github.com/rolandwalker/vector-utils"))]) +(vdm-snippets . [(20190313 1122) ((emacs (24)) (yasnippet (0 13 0))) "YASnippets for VDM mode" tar ((:commit . "89e7db6ee1a89b8c1f7ce36ce6800c32b5c4ba2d") (:keywords "languages") (:authors ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainer "Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com") (:url . "https://github.com/peterwvj/vdm-mode"))]) +(vdm-mode . [(20190328 1408) ((emacs (25))) "Major mode for the Vienna Development Method" tar ((:commit . "89e7db6ee1a89b8c1f7ce36ce6800c32b5c4ba2d") (:keywords "languages") (:authors ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainer "Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com") (:url . "https://github.com/peterwvj/vdm-mode"))]) +(vdm-comint . [(20181127 2023) ((emacs (25)) (vdm-mode (0 0 4))) "REPL support for vdm-mode" single ((:commit . "89e7db6ee1a89b8c1f7ce36ce6800c32b5c4ba2d") (:keywords "languages") (:authors ("Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com")) (:maintainer "Peter W. V. Tran-Jørgensen" . "peter.w.v.jorgensen@gmail.com") (:url . "https://github.com/peterwvj/vdm-mode"))]) +(vdirel . [(20190430 624) ((emacs (24 4)) (org-vcard (0 1 0)) (helm (1 7 0)) (seq (1 11))) "Manipulate vdir (i.e., vCard) repositories" single ((:commit . "a9ef32a70a1f14416e3dc5fee478ce138cc011d3") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://github.com/DamienCassou/vdirel"))]) +(vdiff-magit . [(20190304 1707) ((emacs (24 4)) (vdiff (0 3)) (magit (2 10 0)) (transient (0 1 0))) "magit integration for vdiff" single ((:commit . "b100d126c69e5c26a61ae05aa1778bcc4302b597") (:keywords "diff") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainer "Justin Burkett" . "justin@burkett.cc") (:url . "https://github.com/justbur/emacs-vdiff-magit"))]) +(vdiff . [(20190227 303) ((emacs (24 4)) (hydra (0 13 0))) "A diff tool similar to vimdiff" single ((:commit . "09e15fc932bfd2febe1d4a65780a532394562b07") (:keywords "diff") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainer "Justin Burkett" . "justin@burkett.cc") (:url . "https://github.com/justbur/emacs-vdiff"))]) +(vcsh . [(20191007 1102) ((emacs (25))) "vcsh integration" single ((:commit . "cbb2b387ea035ee4f95455964144d699f573491d") (:keywords "vc" "files") (:authors ("Å tÄ›pán NÄ›mec" . "stepnem@gmail.com")) (:maintainer "Å tÄ›pán NÄ›mec" . "stepnem@gmail.com") (:url . "https://gitlab.com/stepnem/vcsh-el"))]) +(vcomp . [(20190128 20) nil "compare version strings" single ((:commit . "f839b3b3257a564b19d7f9557dc8bcbbe0b95842") (:keywords "versions") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/tarsius/vcomp"))]) +(vc-osc . [(20190402 2349) nil "non-resident support for osc version-control" single ((:commit . "bf5a515ed85f7d7cdfe66ed5bf4ef7554f8561e5") (:authors ("Adam Spiers (see vc.el for full credits)")) (:maintainer "Adam Spiers" . "aspiers@suse.com"))]) +(vc-msg . [(20191121 1056) ((emacs (24 4)) (popup (0 5 0))) "Show commit information of current line" tar ((:commit . "8106faafe10e9ac15abc2369a68d8e2cda7951ad") (:keywords "git" "vc" "svn" "hg" "messenger") (:authors ("Chen Bin ")) (:maintainer "Chen Bin ") (:url . "http://github.com/redguardtoo/vc-msg"))]) +(vc-hgcmd . [(20191114 810) ((emacs (25 1))) "VC mercurial backend that uses hg command server" single ((:commit . "b67e78d0fb11e044874fa0fe88cd79dcacd311ca") (:keywords "vc") (:authors ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainer "Andrii Kolomoiets" . "andreyk.mad@gmail.com") (:url . "https://github.com/muffinmad/emacs-vc-hgcmd"))]) +(vc-fossil . [(20180215 1635) nil "VC backend for the fossil sofware configuraiton management system" tar ((:commit . "7c5af95181213db38f81f5f9586f3334301a3ea0") (:authors ("Venkat Iyer" . "venkat@comit.com")) (:maintainer "Venkat Iyer" . "venkat@comit.com"))]) +(vc-darcs . [(20170905 320) ((emacs (24))) "a VC backend for darcs" single ((:commit . "390fb1ebdda1ffac45b9be02626dde3b6d95ac11") (:keywords "vc") (:authors ("Jorgen Schaefer" . "forcer@forcix.cx") ("Juliusz Chroboczek" . "jch@pps.univ-paris-diderot.fr")) (:maintainer "Libor ÄŒapák" . "capak@inputwish.com"))]) +(vc-check-status . [(20170107 1334) nil "Warn you when quitting emacs and leaving repo dirty." tar ((:commit . "37734beb16bfd8633ea328059bf9a47eed826d5c") (:keywords "vc" "convenience") (:authors ("Sylvain Rousseau ")) (:maintainer "Sylvain Rousseau ") (:url . "https://github.com/thisirs/vc-check-status"))]) +(vc-auto-commit . [(20170107 1333) nil "Auto-committing feature for your repository" tar ((:commit . "446f664f4ec835532f4f18ba18b5fb731f6030aa") (:keywords "vc" "convenience") (:authors ("Sylvain Rousseau ")) (:maintainer "Sylvain Rousseau ") (:url . "http://github.com/thisirs/vc-auto-commit.git"))]) +(vbasense . [(20140221 2353) ((auto-complete (1 4 0)) (log4e (0 2 0)) (yaxception (0 1))) "provide a environment like Visual Basic Editor." tar ((:commit . "8c61a492d7c15218ae1a96e2aebfe6f78bfff6db") (:keywords "vba" "completion") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:url . "https://github.com/aki2o/emacs-vbasense"))]) +(vale-mode . [(20190725 125) ((emacs (25))) "Major mode for writing Vale vaf files" single ((:commit . "48bbc4b4ee5bf0b1b73e52705c0fbc112b255cd0") (:keywords "convenience" "languages") (:authors ("Jay Bosamiya" . "jaybosamiya@gmail.com")) (:maintainer "Jay Bosamiya" . "jaybosamiya@gmail.com") (:url . "https://github.com/jaybosamiya/vale-mode.el"))]) +(vala-snippets . [(20150429 352) ((yasnippet (0 8 0))) "Yasnippets for Vala" tar ((:commit . "671439501060449bd100b9fffd524a86064fbfbb") (:authors ("Daniel Gopar")) (:maintainer "Daniel Gopar") (:url . "https://github.com/gopar/vala-snippets"))]) +(vala-mode . [(20150324 2225) nil "Vala mode derived mode" single ((:commit . "fb2871a4492d75d03d72e60474919ab89adb267b") (:keywords "vala" "languages" "oop") (:authors ("2005 Dylan R. E. Moonfire") (" 2008 Étienne BERSAC")) (:maintainer "Étienne BERSAC" . "bersace03@laposte.net"))]) +(vagrant-tramp . [(20190816 1846) ((dash (2 12 0))) "Vagrant method for TRAMP" tar ((:commit . "47c6fdc07722934eacce9f91c47bb1ee7d46b86f") (:keywords "vagrant") (:authors ("Doug MacEachern" . "dougm@vmware.com") ("Ryan Prior " . "ryanprior@gmail.com")) (:maintainer "Doug MacEachern" . "dougm@vmware.com") (:url . "https://github.com/dougm/vagrant-tramp"))]) +(vagrant . [(20170301 2206) nil "Manage a vagrant box from emacs" single ((:commit . "636ce2f9af32ea199170335a9cf1201b64873440") (:keywords "vagrant" "chef") (:authors ("Robert Crim" . "rob@servermilk.com")) (:maintainer "Robert Crim" . "rob@servermilk.com") (:url . "https://github.com/ottbot/vagrant.el"))]) +(v2ex-mode . [(20160720 345) ((cl-lib (0 5)) (request (0 2)) (let-alist (1 0 3))) "Major mode for visit http://v2ex.com/ site." single ((:commit . "b7d19bb594b43ea3824a6f215dd1e5d1d4c0e8ad") (:keywords "v2ex" "v2ex.com") (:authors ("Aborn Jiang" . "aborn.jiang@gmail.com")) (:maintainer "Aborn Jiang" . "aborn.jiang@gmail.com") (:url . "https://github.com/aborn/v2ex-mode"))]) +(uuidgen . [(20140918 2301) nil "Provides various UUID generating functions" single ((:commit . "7eb96415484c3854a3f383d1a3e10b87ae674e22") (:keywords "extensions" "lisp" "tools") (:authors ("Kan-Ru Chen" . "koster@debian.org")) (:maintainer "Kan-Ru Chen" . "koster@debian.org"))]) +(uuid . [(20120910 851) nil "UUID's for EmacsLisp" single ((:commit . "1519bfeb0e31602b840bc8dd35d7c7e732c159fe") (:keywords "lisp") (:authors ("James Mastros")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk"))]) +(utop . [(20190715 1836) ((emacs (24))) "Universal toplevel for OCaml" single ((:commit . "83ee76fc39b6cb394f5fb19063a3a7da09224339") (:keywords "ocaml" "languages") (:authors ("Jeremie Dimino" . "jeremie@dimino.org")) (:maintainer "Jeremie Dimino" . "jeremie@dimino.org") (:url . "https://github.com/diml/utop"))]) +(usql . [(20180305 2323) ((emacs (25 1))) "U-SQL support for sql-mode" single ((:commit . "bfaf428b366a9a185eef84f0d645a98dc918fe3d") (:keywords "languages") (:authors ("Nicholas Barnwell" . "nb@ul.io")) (:maintainer "Nicholas Barnwell" . "nb@ul.io") (:url . "https://github.com/nickbarwell/usql.el"))]) +(use-ttf . [(20190823 939) ((emacs (24 4)) (s (1 12 0))) "Keep font consistency across different OSs." single ((:commit . "8c7f50a2b6f5bd55cdd92e351371386ff4b6edce") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:url . "https://github.com/jcs090218/use-ttf"))]) +(use-package-hydra . [(20181228 745) ((emacs (24 3)) (use-package (2 4))) "Adds :hydra keyword to use-package macro" single ((:commit . "8cd55a1128fbdf6327bb38a199d206225896d146") (:keywords "convenience" "extensions" "tools") (:authors ("Toon Claes" . "toon@iotcl.com")) (:maintainer "Toon Claes" . "toon@iotcl.com") (:url . "https://gitlab.com/to1ne/use-package-hydra"))]) +(use-package-ensure-system-package . [(20180913 1501) ((use-package (2 1)) (system-packages (1 0 4))) "auto install system packages" single ((:commit . "df2528cd5116cdf2885f6f497511bf0946fe0825") (:keywords "convenience" "tools" "extensions") (:authors ("Justin Talbott" . "justin@waymondo.com")) (:maintainer "Justin Talbott" . "justin@waymondo.com") (:url . "https://github.com/waymondo/use-package-ensure-system-package"))]) +(use-package-el-get . [(20180131 505) ((use-package (1 0))) "el-get support for use package" single ((:commit . "cba87c4e9a3a66b7c10962e3aefdf11c83d737bc") (:keywords "dotemacs" "startup" "speed" "config" "package" "tools") (:authors ("Edward Knyshov" . "edvorg@gmail.com")) (:maintainer "Edward Knyshov" . "edvorg@gmail.com") (:url . "https://github.com/edvorg/use-package-el-get"))]) +(use-package-chords . [(20181024 2322) ((use-package (2 1)) (bind-key (1 0)) (bind-chord (0 2)) (key-chord (0 6))) "key-chord keyword for use-package" single ((:commit . "df2528cd5116cdf2885f6f497511bf0946fe0825") (:keywords "convenience" "tools" "extensions") (:authors ("Justin Talbott" . "justin@waymondo.com")) (:maintainer "Justin Talbott" . "justin@waymondo.com") (:url . "https://github.com/waymondo/use-package-chords"))]) +(use-package . [(20191110 416) ((emacs (24 3)) (bind-key (2 4))) "A configuration macro for simplifying your .emacs" tar ((:commit . "df2528cd5116cdf2885f6f497511bf0946fe0825") (:keywords "dotemacs" "startup" "speed" "config" "package") (:authors ("John Wiegley" . "johnw@newartisans.com")) (:maintainer "John Wiegley" . "johnw@newartisans.com") (:url . "https://github.com/jwiegley/use-package"))]) +(usage-memo . [(20170926 37) nil "integration of Emacs help system and memo" single ((:commit . "88e15a9942a3e0a6e36e9c3e51e3edb746067b1a") (:keywords "convenience" "languages" "lisp" "help" "tools" "docs") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/usage-memo.el"))]) +(urscript-mode . [(20190219 1604) ((emacs (24 4))) "major mode for editing URScript." single ((:commit . "b341f96b129ead8fb74d680cb4f546985bf110a9") (:keywords "languages") (:authors ("Guido Schmidt" . "git@guidoschmidt.cc")) (:maintainer "Guido Schmidt" . "git@guidoschmidt.cc") (:url . "https://github.com/guidoschmidt/urscript-mode"))]) +(urlenc . [(20140116 1456) nil "URL encoding/decoding utility for Emacs." single ((:commit . "835a6dcb783bbe84714bae87a3464aa0b128bfac") (:keywords "url") (:authors ("Taiki SUGAWARA" . "buzz.taiki@gmail.com")) (:maintainer "Taiki SUGAWARA" . "buzz.taiki@gmail.com") (:url . "https://github.com/buzztaiki/urlenc-el"))]) +(url-shortener . [(20170805 242) nil "shorten long url and expand tinyurl" single ((:commit . "06db8270213b9e352d6c335b0663059a1353d05e") (:authors ("Yu Yang" . "yy2012cn@NOSPAM.gmail.com")) (:maintainer "Yu Yang" . "yy2012cn@NOSPAM.gmail.com") (:url . "https://github.com/yuyang0/url-shortener"))]) +(uptimes . [(20191121 1030) ((cl-lib (0 5)) (emacs (24))) "Track and display Emacs session uptimes." single ((:commit . "29ae6585eeed5a00719b2e52f5ae1082087c1778") (:keywords "processes" "uptime") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:url . "https://github.com/davep/uptimes.el"))]) +(upbo . [(20180422 822) ((dash (2 12 0)) (emacs (24 4))) "Karma Test Runner Integration" single ((:commit . "1e4b1e7f44f242a6cdcce0c157d07efe667b7bef") (:keywords "javascript" "js" "test" "karma") (:authors ("Sungho Kim(shiren)")) (:maintainer "Sungho Kim(shiren)") (:url . "http://github.com/shiren"))]) +(untitled-new-buffer . [(20161212 1508) ((emacs (24 4)) (magic-filetype (0 2 0))) "Open untitled new buffer like other text editors." single ((:commit . "4eabc6937b0e83062ffce9de0d42110224063a6c") (:keywords "files" "convenience") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:url . "https://github.com/zonuexe/untitled-new-buffer.el"))]) +(unkillable-scratch . [(20190309 17) ((emacs (24))) "Disallow the \\*scratch\\* buffer from being killed" single ((:commit . "b24c2a760529833f230c14cb02ff6e7ec92288ab") (:keywords "convenience") (:authors ("Eric Crosson" . "eric.s.crosson@utexas.com")) (:maintainer "Eric Crosson" . "eric.s.crosson@utexas.com") (:url . "https://github.com/EricCrosson/unkillable-scratch"))]) +(universal-emotions-emoticons . [(20180729 1941) ((emacs (24 4))) "Emoticons For The Six Universal Expressions" single ((:commit . "9cedd09ee65cb9fa71f27b0ab46a8353bdc00902") (:keywords "convenience" "docs" "languages") (:authors ("Grant Rettke" . "gcr@wisdomandwonder.com")) (:maintainer nil . "") (:url . "https://github.com/grettke/universal-emotions-emoticons"))]) +(unison-mode . [(20160513 1501) nil "Syntax highlighting for unison file synchronization program" single ((:commit . "0bd6a65c0d12f87fcf7bdff15fe54444959b93bf") (:keywords "symchronization" "unison") (:authors ("Karl Fogelmark" . "karlfogel@gmail.com")) (:maintainer "Karl Fogelmark" . "karlfogel@gmail.com") (:url . "https://github.com/impaktor/unison-mode"))]) +(unison . [(20160704 740) ((emacs (24 1))) "sync with Unison" single ((:commit . "a78a04c0d1398d00f75a1bd4799622a65bcb0f28") (:keywords "sync") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org") (:url . "http://github.com/unhammer/unison.el"))]) +(unipoint . [(20140113 2224) nil "a simple way to insert unicode characters by TeX name" single ((:commit . "5da04aebac35a5c9e1d8704f2231808d42f4b36a") (:authors ("Andrew Gwozdziewycz" . "git@apgwoz.com")) (:maintainer "Andrew Gwozdziewycz" . "git@apgwoz.com") (:url . "https://github.com/apgwoz/unipoint"))]) +(unify-opening . [(20171122 2012) ((emacs (24 4))) "Unify the mechanism to open files" single ((:commit . "502469ddba6d8d52159f53976265f7d956b6b17c") (:authors ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainer "Damien Cassou" . "damien.cassou@gmail.com") (:url . "https://github.com/DamienCassou/unify-opening"))]) +(unidecode . [(20180312 1926) nil "Transliterate Unicode to ASCII" tar ((:commit . "5502ada9287b4012eabb879f12f5b0a9df52c5b7") (:authors ("sindikat ")) (:maintainer "John Mastro" . "john.b.mastro@gmail.com"))]) +(unicode-whitespace . [(20140508 2041) ((ucs-utils (0 7 6)) (list-utils (0 4 2)) (persistent-soft (0 8 8)) (pcache (0 2 3))) "teach whitespace-mode about fancy characters" single ((:commit . "a18c6b38d78b94f2eb1dcc4cb4fa91b6a17efabe") (:keywords "faces" "wp" "interface") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:url . "http://github.com/rolandwalker/unicode-whitespace"))]) +(unicode-troll-stopper . [(20190209 411) nil "Minor mode for Highlighting Unicode homoglyphs" single ((:commit . "5e8be35a7bf6382384a701663f7438ee27e4b67c") (:keywords "unicode") (:authors ("Cam Saül" . "cammsaul@gmail.com")) (:maintainer "Cam Saül" . "cammsaul@gmail.com") (:url . "https://github.com/camsaul/emacs-unicode-troll-stopper"))]) +(unicode-progress-reporter . [(20140508 2041) ((emacs (24 1 0)) (ucs-utils (0 7 6)) (list-utils (0 4 2)) (persistent-soft (0 8 8)) (pcache (0 2 3))) "Progress-reporter with fancy characters" single ((:commit . "5e66724fd7d15743213b082474d798117b194494") (:keywords "interface") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:url . "http://github.com/rolandwalker/unicode-progress-reporter"))]) +(unicode-math-input . [(20190813 1436) ((emacs (25))) "Insert Unicode math symbols using TeX notation" single ((:commit . "ba45edbfb8fa453e29c4c6c73af60f06637951d6") (:authors ("Augusto Stoffel")) (:maintainer "Augusto Stoffel") (:url . "https://github.com/astoff/unicode-math-input.el"))]) +(unicode-input . [(20141219 720) nil "Support for unicode character input" single ((:commit . "e76ccb549e6a2a66c373da927eb65d69353e07db") (:keywords "unicode" "input") (:authors ("m00nlight" . "dot_wangyushi@yeah.net")) (:maintainer "m00nlight" . "dot_wangyushi@yeah.net"))]) +(unicode-fonts . [(20181001 1509) ((font-utils (0 7 8)) (ucs-utils (0 8 2)) (list-utils (0 4 2)) (persistent-soft (0 8 10)) (pcache (0 3 1))) "Configure Unicode fonts" single ((:commit . "7b88ae84e589f6c8b9386b2fb5a02ff4ccb91169") (:keywords "i18n" "faces" "frames" "wp" "interface") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:url . "http://github.com/rolandwalker/unicode-fonts"))]) +(unicode-escape . [(20160614 1234) ((emacs (24)) (names (20151201 0)) (dash (2 12 1))) "Escape/Unescape unicode notations" single ((:commit . "fc69ec780d9e54c364a9252bd0cf1d2507f3fab7") (:keywords "i18n" "unicode") (:authors ("KOBAYASHI Shigeru (kosh)" . "shigeru.kb@gmail.com")) (:maintainer "KOBAYASHI Shigeru (kosh)" . "shigeru.kb@gmail.com") (:url . "https://github.com/kosh04/unicode-escape.el"))]) +(unicode-enbox . [(20140508 2041) ((string-utils (0 3 2)) (ucs-utils (0 7 6)) (list-utils (0 4 2)) (persistent-soft (0 8 8)) (pcache (0 2 3))) "Surround a string with box-drawing characters" single ((:commit . "77074fac1994a4236f111d6a1d0cf79ea3fca151") (:keywords "extensions" "interface") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:url . "http://github.com/rolandwalker/unicode-enbox"))]) +(unicode-emoticons . [(20150204 1108) nil "Shortcuts for common unicode emoticons" single ((:commit . "fb18631f342b0243cf77cf59ed2067c47aae5233") (:keywords "games" "entertainment" "comms") (:authors ("Gunther Hagleitner")) (:maintainer "Gunther Hagleitner") (:url . "https://github.com/hagleitn/unicode-emoticons"))]) +(unfill . [(20170723 146) nil "Unfill paragraphs or regions, and toggle between filled & unfilled" single ((:commit . "e03771f2d1163d04ca75de76fbfbaa2689c6a9aa") (:keywords "utilities") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/unfill"))]) +(undohist . [(20150315 1242) ((cl-lib (1 0))) "Persistent undo history for GNU Emacs" single ((:commit . "d2239a5f736724ceb9e3b6bcaa86f4064805cda0") (:keywords "convenience") (:authors ("MATSUYAMA Tomohiro" . "m2ym.pub@gmail.com")) (:maintainer "MATSUYAMA Tomohiro" . "m2ym.pub@gmail.com"))]) +(undo-propose . [(20191110 2327) ((emacs (24 3))) "Simple and safe undo navigation" single ((:commit . "78fde8146bedb5747231332c9864492418871a94") (:keywords "convenience" "files" "undo" "redo" "history") (:authors ("Jack Kamm")) (:maintainer "Jack Kamm") (:url . "https://github.com/jackkamm/undo-propose.el"))]) +(underwater-theme . [(20131118 2) nil "A gentle, deep blue color theme" single ((:commit . "4eb9ef014f580adc135d91d1cd68d37a310640b6") (:keywords "faces") (:authors ("Jon-Michael Deldin" . "dev@jmdeldin.com")) (:maintainer "Jon-Michael Deldin" . "dev@jmdeldin.com"))]) +(underline-with-char . [(20190715 1627) ((emacs (24))) "Underline with a char" single ((:commit . "82e15447fe5dcb99fcb9fc72128199a9bf6b7be5") (:keywords "convenience") (:maintainer nil . "marcowahlsoft@gmail.com") (:url . "https://gitlab.com/marcowahl/underline-with-char"))]) +(undercover . [(20191122 2126) ((emacs (24)) (dash (2 0 0)) (shut-up (0 3 2))) "Test coverage library for Emacs Lisp" single ((:commit . "9f4fbd04cd25c61397a7058bf2bad33c7b669aa4") (:keywords "lisp" "tests" "coverage" "tools") (:authors ("Sviridov Alexander" . "sviridov.vmi@gmail.com")) (:maintainer "Sviridov Alexander" . "sviridov.vmi@gmail.com") (:url . "https://github.com/sviridov/undercover.el"))]) +(uncrustify-mode . [(20130707 1359) nil "Minor mode to automatically uncrustify." single ((:commit . "73893d000361e95784911e5ec268ad0ab2a1473c") (:keywords "uncrustify") (:authors ("Tabito Ohtani" . "koko1000ban@gmail.com")) (:maintainer "Tabito Ohtani" . "koko1000ban@gmail.com"))]) +(ukrainian-holidays . [(20130720 1349) nil "Ukrainian holidays for Emacs calendar." single ((:commit . "e52b0c92843e9f4d0415a7ba3b8559785497d23d") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/ukrainian-holidays"))]) +(ujelly-theme . [(20180214 1624) nil "Ujelly theme for GNU Emacs 24 (deftheme)" single ((:commit . "bf724ce7806a738d2043544061e5f9bbfc56e674") (:authors ("Mark Tran" . "mark.tran@gmail.com")) (:maintainer "Mark Tran" . "mark.tran@gmail.com") (:url . "http://github.com/marktran/color-theme-ujelly"))]) +(uimage . [(20160901 1221) nil "An iimage like mode with the ability to display url images" single ((:commit . "9893d09160ef7e8c0ecdcd74fca99ffeb5f9d70d") (:keywords "lisp" "url" "image") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) +(ucs-utils . [(20150826 1414) ((persistent-soft (0 8 8)) (pcache (0 2 3)) (list-utils (0 4 2))) "Utilities for Unicode characters" tar ((:commit . "cbfd42f822bf5717934fa2d92060e6e24a813433") (:keywords "i18n" "extensions") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:url . "http://github.com/rolandwalker/ucs-utils"))]) +(ubuntu-theme . [(20150805 1506) nil "A theme inspired by the default terminal colors in Ubuntu" single ((:commit . "88b0eefc75d4cbcde103057e1c5968d4c3052f69") (:authors ("Francesc Rocher" . "francesc.rocher@gmail.com")) (:maintainer "Francesc Rocher" . "francesc.rocher@gmail.com") (:url . "http://github.com/rocher/ubuntu-theme"))]) +(typoscript-mode . [(20170126 912) ((emacs (24 4)) (use-package (0))) "mode for TypoScript files" single ((:commit . "44e7567e921573c4f33c537b827f71fb1f565c32") (:keywords "typo3" "typoscript") (:authors ("Johannes Goslar")) (:maintainer "Johannes Goslar") (:url . "https://github.com/ksjogo/typoscript-mode"))]) +(typo . [(20171209 1023) nil "Minor mode for typographic editing" single ((:commit . "9dad93b6f367f02f52c8d9bf15d446d922cec294") (:keywords "convenience" "wp") (:authors ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainer "Jorgen Schaefer" . "forcer@forcix.cx") (:url . "https://github.com/jorgenschaefer/typoel"))]) +(typit . [(20190713 1336) ((emacs (24 4)) (f (0 18)) (mmt (0 1 1))) "Typing game similar to tests on 10 fast fingers" tar ((:commit . "2adb0e0df4689b5abaa89a71808ec7993ecfaf9b") (:keywords "games") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:url . "https://github.com/mrkkrp/typit"))]) +(typing-game . [(20160426 1220) nil "a simple typing game" single ((:commit . "616435a5270274f4c7b698697674dbb2039049a4") (:keywords "lisp" "game") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) +(typing . [(20180830 2203) nil "The Typing Of Emacs" single ((:commit . "a2ef25dde2d8eb91bd9c0c6164cb5208208647fa") (:keywords "games") (:authors ("Alex Schroeder" . "alex@gnu.org")) (:maintainer "Alex Schroeder" . "alex@gnu.org") (:url . "http://www.emacswiki.org/emacs/TypingOfEmacs"))]) +(typescript-mode . [(20191120 346) ((emacs (24 3))) "Major mode for editing typescript" tar ((:commit . "fe63c579b51c7943f0c78702adbf1547b29cf6ed") (:keywords "typescript" "languages") (:url . "http://github.com/ananthakumaran/typescript.el"))]) +(twittering-mode . [(20181121 1402) nil "Major mode for Twitter" single ((:commit . "114891e8fdb4f06b1326a6cf795e49c205cf9e29") (:keywords "twitter" "web") (:authors ("Tadashi MATSUO" . "tad@mymail.twin.ne.jp") ("Y. Hayamizu" . "y.hayamizu@gmail.com") ("Tsuyoshi CHO" . "Tsuyoshi.CHO+develop@Gmail.com") ("Alberto Garcia" . "agarcia@igalia.com") ("Xavier Maillard" . "xavier@maillard.im")) (:maintainer "Tadashi MATSUO" . "tad@mymail.twin.ne.jp") (:url . "http://twmode.sf.net/"))]) +(twilight-theme . [(20120412 1303) nil "Twilight theme for GNU Emacs 24 (deftheme)" single ((:commit . "77c4741cb3dcf16e53d06d6c2ffdc660c40afb5b") (:authors ("Nick Parker" . "nickp@developernotes.com")) (:maintainer "Nick Parker" . "nickp@developernotes.com"))]) +(twilight-bright-theme . [(20130605 843) nil "A Emacs 24 faces port of the TextMate theme" single ((:commit . "322157cb2f3bf7920ecd209dafc31bc1c7959f49") (:keywords "themes") (:authors ("Jim Myhrberg" . "contact@jimeh.me")) (:maintainer "Jim Myhrberg" . "contact@jimeh.me") (:url . "https://github.com/jimeh/twilight-bright-theme.el"))]) +(twilight-anti-bright-theme . [(20160622 848) nil "A soothing Emacs 24 light-on-dark theme" single ((:commit . "523b95fcdbf4a6a6483af314ad05354a3d80f23f") (:keywords "themes") (:authors ("Jim Myhrberg" . "contact@jimeh.me")) (:maintainer "Jim Myhrberg" . "contact@jimeh.me") (:url . "https://github.com/jimeh/twilight-anti-bright-theme.el"))]) +(twig-mode . [(20130220 1850) nil "A major mode for twig" single ((:commit . "2849f273a4855d3314a9c0cc84134f5b28ad5ea6") (:authors ("Bojan Matic aka moljac024")) (:maintainer "Bojan Matic aka moljac024"))]) +(turnip . [(20150309 629) ((dash (2 6 0)) (s (1 9 0))) "Interacting with tmux from Emacs" single ((:commit . "2fd32562fc6fc1cda6d91aa939cfb29f9b16e9de") (:keywords "terminals" "tools") (:authors ("Johann Klähn" . "kljohann@gmail.com")) (:maintainer "Johann Klähn" . "kljohann@gmail.com"))]) +(turkish . [(20170910 1511) nil "Convert to Turkish characters on-the-fly" single ((:commit . "9831a316c176bb21a1b91226323ea4133163e00c") (:keywords "turkish" "languages" "automatic" "conversion") (:authors ("Deniz Yüret")) (:maintainer "Emre Sevinç" . "emre.sevinc@gmail.com") (:url . "http://www.denizyuret.com/2006/11/emacs-turkish-mode.html"))]) +(turing-machine . [(20180222 438) ((emacs (24 4))) "Single-tape Turing machine simulator" single ((:commit . "fa60b76a5bac1f54b7a1b3dc55aae7602c7e385b") (:keywords "turing" "machine" "simulation") (:authors ("Diego A. Mundo" . "diegoamundo@gmail.com")) (:maintainer "Diego A. Mundo" . "diegoamundo@gmail.com") (:url . "http://github.com/therockmandolinist/turing-machine"))]) +(tup-mode . [(20140410 1614) nil "Major mode for editing files for Tup" single ((:commit . "bcc100c6485f1c81fdcd1215dfc6c41a81c215c8") (:authors ("Eric James Michael Ritz" . "lobbyjones@gmail.com")) (:maintainer "Eric James Michael Ritz" . "lobbyjones@gmail.com") (:url . "https://github.com/ejmr/tup-mode"))]) +(tumblesocks . [(20191014 356) ((htmlize (1 39)) (oauth (1 0 3)) (markdown-mode (1 8 1))) "An Emacs tumblr client." tar ((:commit . "0e4c3847e31a59d405b9927107a23dde9531d744"))]) +(tumble . [(20160112 729) ((http-post-simple (0)) (cl-lib (0 5))) "an Tumblr mode for Emacs" single ((:commit . "e8fd7643cccf2b6ea4170f0c5f1f87d007e7fa00") (:keywords "tumblr") (:authors ("Federico Builes" . "federico.builes@gmail.com")) (:maintainer "Federico Builes" . "federico.builes@gmail.com"))]) +(tuareg . [(20190805 958) ((caml (3 12 0 1)) (emacs (24 4))) "OCaml mode for Emacs." tar ((:commit . "74e7f66f31290f6599fda0067d795e201270be43") (:keywords "ocaml" "languages") (:authors ("Albert Cohen" . "Albert.Cohen@inria.fr") ("Sam Steingold" . "sds@gnu.org") ("Christophe Troestler" . "Christophe.Troestler@umons.ac.be") ("Till Varoquaux" . "till@pps.jussieu.fr") ("Sean McLaughlin" . "seanmcl@gmail.com") ("Stefan Monnier" . "monnier@iro.umontreal.ca")) (:maintainer "Albert Cohen" . "Albert.Cohen@inria.fr") (:url . "https://github.com/ocaml/tuareg"))]) +(ttl-mode . [(20160505 832) nil "mode for Turtle (and Notation 3)" single nil]) +(tt-mode . [(20130804 1110) nil "Emacs major mode for editing Template Toolkit files." single ((:commit . "85ed3832e7eef391f7879d9990d59c7a3493c15e") (:authors ("Dave Cross" . "dave@dave.org.uk")) (:maintainer "Dave Cross" . "dave@dave.org.uk"))]) +(tss . [(20150913 1408) ((auto-complete (1 4 0)) (json-mode (1 1 0)) (log4e (0 2 0)) (yaxception (0 1))) "provide a interface for auto-complete.el/flymake.el on typescript-mode." tar ((:commit . "81ac6351a2ae258fd0ebf916dae9bd5a179fefd0") (:keywords "typescript" "completion") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:url . "https://github.com/aki2o/emacs-tss"))]) +(ts-comint . [(20181219 719) nil "Run a Typescript interpreter in an inferior process window." single ((:commit . "786b88fffc553e122868a1c4883f14136a040df6") (:keywords "typescript" "node" "inferior-mode" "convenience") (:authors ("Paul Huff" . "paul.huff@gmail.com")) (:maintainer "Paul Huff" . "paul.huff@gmail.com") (:url . "https://github.com/josteink/ts-comint"))]) +(ts . [(20191010 210) ((emacs (26 1)) (dash (2 14 1)) (s (1 12 0))) "Timestamp and date/time library" single ((:commit . "df48734ef046547c1aa0de0f4c07d11964ef1f7f") (:keywords "date" "time" "timestamp") (:authors (nil . "Adam Porter ")) (:maintainer "Sergei Nosov ") (:url . "https://github.com/snosov1/toc-org"))]) +(tmux-pane . [(20181210 1210) ((names (0 5)) (emacs (24)) (s (0))) "Provide integration between emacs window and tmux pane" single ((:commit . "5e83ec65a1d38af9b8a389bdf34a78d13437e63d") (:keywords "convenience" "terminals" "tmux" "window" "pane" "navigation" "integration") (:url . "https://github.com/laishulu/emacs-tmux-pane"))]) +(tmmofl . [(20121025 1101) nil "Calls functions dependant on font lock highlighting at point" single ((:commit . "532aa6978e994e2b069ffe37aaf9a0011a07dadc") (:keywords "minor mode" "font lock" "toggling.") (:authors ("Phillip Lord" . "p.lord@hgmp.mrc.ac.uk")) (:maintainer "Phillip Lord" . "p.lord@hgmp.mrc.ac.uk"))]) +(tldr . [(20191006 1059) ((emacs (24 3)) (request (0 3 0))) "tldr client for Emacs" single ((:commit . "b7f3e3e2171eab5707a42641f4470b69777feaea") (:keywords "tools" "docs") (:authors ("Ono Hiroko" . "azazabc123@gmail.com")) (:maintainer "Ono Hiroko" . "azazabc123@gmail.com") (:url . "https://github.com/kuanyui/tldr.el"))]) +(tj3-mode . [(20180519 1228) nil "major mode for editing TaskJuggler 3 files" single ((:commit . "1d98eb23f1606392f34ef1b80517cfc940fb9950") (:authors ("Christophe Rhodes" . "christophe@rhodes.io")) (:maintainer "Christophe Rhodes" . "christophe@rhodes.io") (:url . "https://github.com/csrhodes/tj3-mode"))]) +(tinysegmenter . [(20141124 1013) ((cl-lib (0 5))) "Super compact Japanese tokenizer in Javascript ported to emacs lisp" single ((:commit . "872134704bd25c13a4c59552433da4c6881b5230") (:keywords "convenience") (:authors ("lugecy" . "lugecy@gmail.com")) (:maintainer "myuhe") (:url . "https://github.com/myuhe/tinysegmenter.el"))]) +(tinypng . [(20190620 942) ((emacs (25 1))) "Compress PNG and JPEG with TinyPNG.com API" single ((:commit . "5910738ce129d93789c98f5722d33d1f40d15afc") (:keywords "multimedia") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/tinypng.el"))]) +(tiny-menu . [(20161213 1235) ((emacs (24 4))) "Display tiny menus." single ((:commit . "05563b94537b6eb22aeddedef2a6e59e3f88d073") (:keywords "menu" "tools") (:authors ("Aaron Bieber" . "aaron@aaronbieber.com")) (:maintainer "Aaron Bieber" . "aaron@aaronbieber.com") (:url . "https://github.com/aaronbieber/tiny-menu.el"))]) +(tiny . [(20190722 1212) nil "Quickly generate linear ranges in Emacs" single ((:commit . "fd8a6b0b0c564d8242259e20e557ee6041f40908") (:keywords "convenience") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/tiny"))]) +(tinkerer . [(20170906 1224) ((s (1 2 0))) "Elisp wrapper for Tinkerer Blogging Engine." single ((:commit . "e34135555f3748b578c7f8706dfd0c888fb87581") (:keywords "tinkerer" "blog" "wrapper") (:authors ("Yagnesh Raghava Yakkala" . "hi@yagnesh.org")) (:maintainer "Yagnesh Raghava Yakkala" . "hi@yagnesh.org") (:url . "https://github.com/yyr/tinkerer.el"))]) +(timp . [(20160618 803) ((emacs (24 4)) (cl-lib (0 5)) (fifo-class (1 0)) (signal (1 0))) "Multithreading library" tar ((:commit . "66b21934b1eb8ee428c06dd64b3562ad44776a35") (:keywords "internal" "lisp" "processes" "tools") (:authors ("Mola-T" . "Mola@molamola.xyz")) (:maintainer "Mola-T" . "Mola@molamola.xyz") (:url . "https://github.com/mola-T/timp"))]) +(timonier . [(20170411 800) ((emacs (24 4)) (s (1 11 0)) (f (0 19 0)) (dash (2 12 0)) (pkg-info (0 5 0)) (hydra (0 13 6)) (request (0 2 0)) (all-the-icons (2 0 0))) "Manage Kubernetes Applications" tar ((:commit . "0a150ea87bf695b43cf1740dfd7e553e0ae7601c") (:keywords "kubernetes" "docker") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:url . "https://github.com/nlamirault/timonier"))]) +(timesheet . [(20191024 151) ((s (1)) (org (7)) (auctex (11))) "Timesheet management add-on for org-mode" tar ((:commit . "5098dc87d3d4f289b6c1b6532070dacbfe6de9fd") (:keywords "org" "timesheet") (:authors ("Tom Marble")) (:maintainer "Tom Marble") (:url . "https://github.com/tmarble/timesheet.el"))]) +(timer-revert . [(20150122 2032) nil "minor mode to revert buffer for a given time interval." tar ((:commit . "615c91dec8b440d2b9b7c725dd733d7432564e45"))]) +(timecop . [(20160520 1052) ((cl-lib (0 5)) (datetime-format (0 0 1))) "Freeze Time for testing" single ((:commit . "e6427538b547cbe02e1bd6ed4b765c73620bdae8") (:keywords "datetime" "testing") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:url . "https://github.com/zonuexe/emacs-datetime"))]) +(time-ext . [(20170126 1215) nil "more function for time/date" single ((:commit . "d128becf660fe3f30178eb1b05cd266741f4784a") (:keywords "lisp") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/time-ext.el"))]) +(tile . [(20161225 357) ((emacs (25 1)) (s (1 9 0)) (dash (2 12 0)) (stream (2 2 3))) "Tile windows with layouts" single ((:commit . "22660f21f6e95de5aba55cd5d293d4841e9a4661") (:keywords "tile" "tiling" "window" "manager" "dynamic" "frames") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:url . "https://github.com/IvanMalison/tile"))]) +(tide . [(20191122 1303) ((dash (2 10 0)) (s (1 11 0)) (flycheck (27)) (typescript-mode (0 1)) (cl-lib (0 5))) "Typescript Interactive Development Environment" tar ((:commit . "e8e529139a415ef00e8875908981d031ca4ae251") (:keywords "typescript") (:authors ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainer "Anantha kumaran" . "ananthakumaran@gmail.com") (:url . "http://github.com/ananthakumaran/tide"))]) +(tidal . [(20191018 2235) ((haskell-mode (16)) (emacs (24))) "Interact with TidalCycles for live coding patterns" single ((:commit . "9d94f626af290fff765222505c9c517c2cb969ef") (:keywords "tools") (:authors (nil . "alex@slab.org")) (:maintainer nil . "alex@slab.org") (:url . "https://github.com/tidalcycles/Tidal"))]) +(tickscript-mode . [(20171219 203) ((emacs (24 1))) "A major mode for Tickscript files" single ((:commit . "f0579f38ff14954df5002ce30ae6d4a2c978d461") (:keywords "languages") (:authors ("Marc Sherry" . "msherry@gmail.com")) (:maintainer "Marc Sherry" . "msherry@gmail.com") (:url . "https://github.com/msherry/tickscript-mode"))]) +(thumb-through . [(20120119 534) nil "Plain text reader of HTML documents" single ((:commit . "08d8fb720f93c6172653e035191a8fa9c3305e63") (:keywords "html"))]) +(thrift . [(20180905 1050) ((emacs (24))) "major mode for fbthrift and Apache Thrift files" single ((:commit . "075d73d3b59ab6ce3b0157849374db14cc1dff55") (:keywords "languages"))]) +(threes . [(20160820 1242) ((emacs (24)) (seq (1 11))) "A clone of Threes (a tiny puzzle game)" single ((:commit . "6981acb30b856c77cba6aba63fefbf102cbdfbb2") (:keywords "games") (:authors ("Chunyang Xu" . "xuchunyang.me@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang.me@gmail.com") (:url . "https://github.com/xuchunyang/threes.el"))]) +(thread-dump . [(20170816 1850) nil "Java thread dump viewer" single ((:commit . "204c9600242756d4b514bb5ff6293e052bf4b49d") (:authors ("Dmitry Neverov")) (:maintainer "Dmitry Neverov") (:url . "http://github.com/nd/thread-dump.el"))]) +(thinks . [(20170802 1128) ((cl-lib (0 5))) "Insert text in a think bubble." single ((:commit . "c02f236abc8c2025d9f01460b09b89ebdc96e28d") (:keywords "convenience" "quoting") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:url . "https://github.com/davep/thinks.el"))]) +(thingopt . [(20160520 2318) nil "Thing at Point optional utilities" single ((:commit . "5679815852652479f3b3c9f3a98affc927384b2c") (:keywords "convenience") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainer "Tomohiro Matsuyama" . "m2ym.pub@gmail.com"))]) +(therapy . [(20151113 1953) ((emacs (24))) "Hooks for managing multiple Python major versions" single ((:commit . "775a92bb7b6b0fcc5b38c0b5198a9d0a1bef788a") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com") (:url . "https://github.com/abingham/therapy"))]) +(theme-magic . [(20190711 2034) ((emacs (25)) (seq (1 8))) "Apply your Emacs theme to the rest of Linux" tar ((:commit . "844c4311bd26ebafd4b6a1d72ddcc65d87f074e3") (:keywords "unix" "faces" "terminals" "extensions") (:authors ("GitHub user \"jcaw\"" . "40725916+jcaw@users.noreply.github.com")) (:maintainer "GitHub user \"jcaw\"" . "40725916+jcaw@users.noreply.github.com") (:url . "https://github.com/jcaw/theme-magic.el"))]) +(theme-looper . [(20190501 127) ((emacs (24)) (cl-lib (0 5))) "Loop thru the available color-themes" single ((:commit . "388138a238fbab9b4bc5ada0300c9bc5ef63d3f1") (:keywords "convenience" "color-themes") (:authors ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainer "Mohammed Ismail Ansari" . "team.terminal@gmail.com") (:url . "http://ismail.teamfluxion.com"))]) +(theme-changer . [(20171221 1927) nil "Sunrise/Sunset Theme Changer for Emacs" single ((:commit . "61945695a30d678e6a5d47cbe7c8aff59a8c30ea") (:keywords "color-theme" "deftheme" "solar" "sunrise" "sunset") (:authors ("Joshua B. Griffith" . "josh.griffith@gmail.com")) (:maintainer "Joshua B. Griffith" . "josh.griffith@gmail.com") (:url . "https://github.com/hadronzoo/theme-changer"))]) +(tfsmacs . [(20180911 2114) ((emacs (25)) (tablist (0 70))) "MS TFS source control interaction." single ((:commit . "3c20cb76ccd7951eda0b5f076cd79e42f71e7220") (:keywords "tfs" "vc") (:authors ("Dino Chiesa , Sebastian Monia" . "smonia@outlook.com")) (:maintainer "Dino Chiesa , Sebastian Monia" . "smonia@outlook.com") (:url . "http://github.com/sebasmonia/tfsmacs/"))]) +(tf2-conf-mode . [(20161209 1620) nil "TF2 Configuration files syntax highlighting" single ((:commit . "536950f64c071ffd8495fb2c7ac7c63a11e25f93") (:keywords "languages") (:authors ("Guillermo Robles" . "guillerobles1995@gmail.com")) (:maintainer "Guillermo Robles" . "guillerobles1995@gmail.com") (:url . "https://github.com/wynro/emacs-tf2-conf-mode"))]) +(textx-mode . [(20170516 911) ((emacs (24 3))) "Major mode for editing TextX files" single ((:commit . "72f9f0c5855b382024f0da8f56833c22a70a5cb3") (:keywords "textx") (:authors ("Novak BoÅ¡kov" . "gnovak.boskov@gmail.com")) (:maintainer "Novak BoÅ¡kov" . "gnovak.boskov@gmail.com") (:url . "https://github.com/novakboskov/textx-mode"))]) +(textmate-to-yas . [(20160409 1708) nil "Import Textmate macros into yasnippet syntax" tar ((:commit . "be3a768b7ac4c2e24b9d4aa6e9ac1d916cdc5a73") (:keywords "yasnippet" "textmate") (:authors ("Matthew L. Fidler")) (:maintainer "Matthew L. Fidler") (:url . "https://github.com/mlf176f2/textmate-to-yas.el/"))]) +(textmate . [(20110816 2146) nil "TextMate minor mode for Emacs" single ((:commit . "350918b070148f0ace6d9d3cd4ebcaf15c1a8781") (:keywords "textmate" "osx" "mac") (:authors ("Chris Wanstrath" . "chris@ozmm.org")) (:maintainer "Chris Wanstrath" . "chris@ozmm.org"))]) +(textile-mode . [(20170304 1716) nil "Textile markup editing major mode" single ((:commit . "c37aaab809503df008209390e31e19abf4e23630") (:authors ("Julien Barnier" . "julien@nozav.org")) (:maintainer "Julien Barnier" . "julien@nozav.org"))]) +(texfrag . [(20191120 2239) ((emacs (25)) (auctex (11 90 2))) "preview LaTeX fragments in alien major modes" single ((:commit . "04b0358ec2e47157c9adc3c99949bf62adff5bf7") (:keywords "tex" "languages" "wp") (:authors ("Tobias Zawada" . "i@tn-home.de")) (:maintainer "Tobias Zawada" . "i@tn-home.de") (:url . "https://github.com/TobiasZawada/texfrag"))]) +(tex-smart-umlauts . [(20190316 2215) nil "Smart umlaut conversion for TeX." single ((:commit . "f15ed781b1fb38bf3e46c481dd602c3999920b99") (:keywords "tex" "wp") (:authors ("Frank Fischer ")) (:maintainer "Frank Fischer ") (:url . "http://hub.darcs.net/lyro/tex-smart-umlauts"))]) +(test-simple . [(20170527 1532) ((cl-lib (0))) "Simple Unit Test Framework for Emacs Lisp" single ((:commit . "cfd383d36dc6853917acb753fdfa0eebf33856f3") (:keywords "unit-test") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:url . "http://github.com/rocky/emacs-test-simple"))]) +(test-kitchen . [(20171129 2035) nil "Run test-kitchen inside of emacs" single ((:commit . "0fc0ca4808425f03fbeb8125246043723e2a179a") (:keywords "chef" "ruby" "test-kitchen") (:authors ("JJ Asghar")) (:maintainer "JJ Asghar") (:url . "http://github.com/jjasghar/test-kitchen-el"))]) +(test-case-mode . [(20130525 1434) ((fringe-helper (0 1 1))) "unit test front-end" single ((:commit . "6074df10ebc97ddfcc228c71c73db179e672dac3") (:keywords "tools") (:authors ("Nikolaj Schumacher ")) (:maintainer "Nikolaj Schumacher ") (:url . "http://nschum.de/src/emacs/test-case-mode/"))]) +(test-c . [(20180423 1720) ((emacs (24 3))) "quickly test c code" single ((:commit . "761a576f62c7021ba941f178f153c51289df1553") (:authors ("Aurélien Aptel" . "aurelien.aptel@gmail.com")) (:maintainer "Aurélien Aptel" . "aurelien.aptel@gmail.com") (:url . "http://github.com/aaptel/test-c"))]) +(terraform-mode . [(20170112 517) ((emacs (24 3)) (hcl-mode (0 3))) "Major mode for terraform configuration file" single ((:commit . "6973d1acaba2835dfdf174f5a5e27de6366002e1") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-terraform-mode"))]) +(terraform-doc . [(20190813 1254) ((emacs (24 4))) "Look up terraform documentation on the fly" single ((:commit . "2ec10ea7bef5a75edfffeb515dd268e19c1f8c9c") (:keywords "comm") (:authors ("Giap Tran" . "txgvnn@gmail.com")) (:maintainer "Giap Tran" . "txgvnn@gmail.com") (:url . "https://github.com/TxGVNN/terraform-doc"))]) +(tern-django . [(20160221 1923) ((emacs (24)) (tern (0 0 1)) (f (0 17 1))) "Create tern projects for django applications." tar ((:commit . "46f2cd5e96bc804069f18455a828b8e4c5ec358a") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/tern-django"))]) +(tern-context-coloring . [(20161218 747) ((emacs (24 3)) (context-coloring (8 1 0)) (tern (0 0 1))) "Use Tern for context coloring" single ((:commit . "3a8e979d6cc83aabcb3dda3f5f31a6422532efba") (:keywords "convenience" "faces" "tools") (:authors ("Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com")) (:maintainer "Jackson Ray Hamilton" . "jackson@jacksonrayhamilton.com") (:url . "https://github.com/jacksonrayhamilton/tern-context-coloring"))]) +(tern-auto-complete . [(20170521 1935) ((tern (0 0 1)) (auto-complete (1 4)) (cl-lib (0 5)) (emacs (24))) "Tern Completion by auto-complete.el" single ((:commit . "9353d89f568a7e8c1e8e4191f764f435a63f0df2") (:authors ("")) (:maintainer ""))]) +(tern . [(20181108 722) ((json (1 2)) (cl-lib (0 5)) (emacs (24))) "Tern-powered JavaScript integration" single ((:commit . "9353d89f568a7e8c1e8e4191f764f435a63f0df2") (:authors ("Marijn Haverbeke")) (:maintainer "Marijn Haverbeke") (:url . "http://ternjs.net/"))]) +(terminal-toggle . [(20190226 1510) ((emacs (24)) (popwin (1 0 0))) "simple pop-up terminal" single ((:commit . "f824d634aef3600cb7a8e2ddf9e8444c6607c160") (:keywords "outlines") (:authors ("Mehmet Tekman")) (:maintainer "Mehmet Tekman") (:url . "https://github.com/mtekman/terminal-toggle.el"))]) +(terminal-here . [(20180513 833) ((emacs (24)) (cl-lib (0 5))) "Run an external terminal in current directory" single ((:commit . "bc7f3477133df0142d3e49e6eb8eaf4468b57865") (:keywords "tools" "frames") (:authors ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainer "David Shepherd" . "davidshepherd7@gmail.com") (:url . "https://github.com/davidshepherd7/terminal-here"))]) +(terminal-focus-reporting . [(20180830 719) ((emacs (24 4))) "Minor mode for terminal focus reporting." single ((:commit . "8b84bf18f4c5f1b59a11692eb706f13c3598d9a5") (:keywords "convenience") (:authors ("Vitalii Elenhaupt")) (:maintainer "Vitalii Elenhaupt") (:url . "https://github.com/veelenga/terminal-focus-reporting.el"))]) +(termbright-theme . [(20151031 235) ((emacs (24 1))) "a more usable theme for white-on-black terminals" single ((:commit . "bec6ab14336c0611e85f45486276004f16d20607") (:keywords "themes") (:authors ("Brian Mastenbrook" . "brian@mastenbrook.net")) (:maintainer "Brian Mastenbrook" . "brian@mastenbrook.net") (:url . "https://github.com/bmastenbrook/termbright-theme-el"))]) +(term-run . [(20190529 743) nil "Run arbitrary command in terminal buffer" single ((:commit . "fe8bf58814b167f887aaef98a148b8d5d8a11d3f") (:keywords "utility" "shell" "command" "term-mode") (:authors ("10sr <8slashes+el [at] gmail [dot] com>")) (:maintainer "10sr <8slashes+el [at] gmail [dot] com>") (:url . "https://github.com/10sr/term-run-el"))]) +(term-projectile . [(20190307 400) ((emacs (24)) (term-manager (0 1 0)) (projectile (0 13 0))) "projectile terminal management" single ((:commit . "eea7894350a4f31e1df0c666d3fb0bac822d34d2") (:keywords "projectile" "tools" "terminals" "vc") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:url . "https://www.github.com/IvanMalison/term-manager"))]) +(term-manager . [(20190610 2032) ((dash (2 12 0)) (emacs (24 4))) "Contextual terminal management" tar ((:commit . "eea7894350a4f31e1df0c666d3fb0bac822d34d2") (:keywords "terminals" "tools") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:url . "https://www.github.com/IvanMalison/term-manager"))]) +(term-cmd . [(20160517 1045) ((emacs (24 0)) (dash (2 12 0)) (f (0 18 2))) "Send commands from programs running in term.el." tar ((:commit . "552aa58965aab9b78e46934462bafe54c0396ffb"))]) +(term-alert . [(20161119 945) ((emacs (24 0)) (term-cmd (1 1)) (alert (1 1)) (f (0 18 2))) "Notifications when commands complete in term.el." tar ((:commit . "1166c39cc3fb1cb7808eb8955b7f9f6094a306cd"))]) +(term+mux . [(20140211 749) ((term+ (0 1)) (tab-group (0 1))) "term+ terminal multiplexer and session management" single ((:commit . "81b60e80cf008472bfd7fad9233af2ef722c208a") (:keywords "terminal" "emulation") (:authors ("INA Lintaro ")) (:maintainer "INA Lintaro ") (:url . "http://github.com/tarao/term+-el"))]) +(term+key-intercept . [(20140211 750) ((term+ (0 1)) (key-intercept (0 1))) "term+ intercept key mapping" single ((:commit . "fd0771fd66b8c7a909aaac972194485c79ba48c4") (:keywords "terminal" "emulation") (:authors ("INA Lintaro ")) (:maintainer "INA Lintaro ") (:url . "http://github.com/tarao/term+-el"))]) +(term+ . [(20170509 17) ((emacs (24)) (cl-lib (0 5))) "term-mode enhancement" tar ((:commit . "c3c9239b339c127231860de43abfa08c44c0201a") (:keywords "terminal" "emulation") (:authors ("INA Lintaro ")) (:maintainer "INA Lintaro ") (:url . "https://github.com/tarao/term-plus-el"))]) +(ten-hundred-mode . [(20161028 2236) ((cl-lib (0 5))) "use only the ten hundred most usual words" tar ((:commit . "bdcfda49b1819e82d61fe90947e50bb948cf7933"))]) +(temporary-persistent . [(20161210 1133) ((emacs (24 3)) (names (20151201 0)) (dash (2 12 1)) (s (1 10 0))) "Keep temp notes buffers persistent -*- lexical-binding: t" single ((:commit . "ac66f3054fc701d53f11ada9d2d9ab18ea481dc0") (:keywords "temp" "buffers" "notes") (:authors ("Kostafey" . "kostafey@gmail.com")) (:maintainer "Kostafey" . "kostafey@gmail.com") (:url . "https://github.com/kostafey/temporary-persistent"))]) +(template-overlays . [(20180706 1132) ((emacs (24 4)) (ov (1 0 6))) "Display template regions using overlays" single ((:commit . "d32db58c044b2aca3720879003f55b1d57208b07") (:keywords "faces" "convenience" "templates" "overlays") (:authors ("Mariano Montone" . "marianomontone@gmail.com")) (:maintainer "Mariano Montone" . "marianomontone@gmail.com") (:url . "http://www.github.com/mmontone/template-overlays"))]) +(telephone-line . [(20191120 27) ((emacs (24 4)) (cl-lib (0 5)) (cl-generic (0 2)) (seq (1 8))) "Rewrite of Powerline" tar ((:commit . "bfe7b189d708d9cbc69ef2eaf5542108edc4257d") (:keywords "mode-line") (:authors ("Daniel Bordak" . "dbordak@fastmail.fm")) (:maintainer "Daniel Bordak" . "dbordak@fastmail.fm") (:url . "https://github.com/dbordak/telephone-line"))]) +(telepathy . [(20131209 1258) nil "Access Telepathy from Emacs" single ((:commit . "211d785b02a29ddc254422fdcc3db45262582f8c") (:keywords "telepathy" "tools") (:authors ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainer "Nicolas Petton" . "petton.nicolas@gmail.com"))]) +(telega . [(20191122 1005) ((emacs (26 1)) (visual-fill-column (1 9))) "Telegram client (unofficial)" tar ((:commit . "184e4ef0608532de607565b7030f7c4242993f33") (:keywords "comm") (:authors ("Zajcev Evgeny" . "zevlg@yandex.ru")) (:maintainer "Zajcev Evgeny" . "zevlg@yandex.ru") (:url . "https://github.com/zevlg/telega.el"))]) +(teacode-expand . [(20181231 640) ((emacs (24 4))) "Expansion of text by TeaCode program." single ((:commit . "3aae07c71249de616d42fed7fa2585c4fa6f25c6") (:keywords "lisp") (:authors ("Richard Guay" . "raguay@customct.com")) (:maintainer "Richard Guay" . "raguay@customct.com") (:url . "https://github.com/raguay/TeaCode-Expand"))]) +(tea-time . [(20120331 820) nil "Simple timer package, useful to make perfect tea." single ((:commit . "1f6cf0bdd27c5eb3508989c5095427781f858eca") (:keywords "timer" "tea-time") (:authors ("konsty" . "antipin.konstantin@googlemail.com")) (:maintainer "Gabriel Saldana" . "gsaldana@gmail.com"))]) +(tdd-status-mode-line . [(20131123 1716) nil "TDD status on the mode-line" single ((:commit . "4c082e62f4915b573338a97efcc6854d132323dc") (:keywords "faces" "tdd") (:authors ("Gergely Nagy" . "algernon@madhouse-project.org")) (:maintainer "Gergely Nagy" . "algernon@madhouse-project.org") (:url . "https://github.com/algernon/tdd-status-mode-line"))]) +(tco . [(20190309 55) ((dash (1 2 0)) (emacs (24))) "tail-call optimisation for Emacs lisp" single ((:commit . "482db5313f090b17ed22ccd856f0e141dc75afe6") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) +(tc . [(20181109 428) nil "a Japanese input method with T-Code on Emacs" tar ((:commit . "cb3403fb134dc62d8a48253027891785849cff31") (:authors ("Kaoru Maeda" . "maeda@src.ricoh.co.jp") ("Yasushi Saito" . "yasushi@cs.washington.edu") ("KITAJIMA Akira" . "kitajima@isc.osakac.ac.jp")) (:maintainer "KITAJIMA Akira"))]) +(tbx2org . [(20140224 1559) ((dash (2 5 0)) (s (1 8 0)) (cl-lib (0 4))) "Tinderbox to org-mode conversion" single ((:commit . "08e9816ba6066f56936050b58d07ceb2187ae6f7") (:keywords "org-mode") (:authors ("istib")) (:maintainer "istib") (:url . "https://github.com/istib/tbx2org"))]) +(tblui . [(20161007 1912) ((dash (2 12 1)) (magit-popup (2 6 0)) (tablist (0 70)) (cl-lib (0 5))) "Define tabulated list UI easily" single ((:commit . "bb29323bb3e27093d50cb42db3a9329a096b6e4d") (:authors ("Yuki Inoue ")) (:maintainer "Yuki Inoue ") (:url . "https://github.com/Yuki-Inoue/tblui.el"))]) +(tawny-mode . [(20191108 1346) ((cider (0 12)) (emacs (25))) "Ontology Editing with Tawny-OWL" single ((:commit . "079028b7547743a36384650981ea068849aac53e") (:authors ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainer "Phillip Lord" . "phillip.lord@newcastle.ac.uk"))]) +(taskrunner . [(20190916 1608) ((emacs (25 1)) (projectile (2 0 0)) (async (1 9 3))) "Retrieve build system/taskrunner tasks" tar ((:commit . "716323aff410b4d864d137c9ebe4bbb5b8587f5e") (:keywords "build-system" "taskrunner" "build" "task-runner" "tasks" "convenience") (:authors ("Yavor Konstantinov ")) (:maintainer "Yavor Konstantinov ") (:url . "https://github.com/emacs-taskrunner/emacs-taskrunner"))]) +(taskpaper-mode . [(20191122 938) nil "Major mode for working with TaskPaper files" single ((:commit . "8a66ea22080696042947c447e3e8da4290de7d1f") (:keywords "outlines" "notetaking" "task management" "productivity" "taskpaper") (:authors ("Dmitry Safronov" . "saf.dmitry@gmail.com")) (:maintainer "Dmitry Safronov" . "saf.dmitry@gmail.com") (:url . "https://github.com/saf-dmitry/taskpaper-mode"))]) +(tao-theme . [(20191120 327) nil "This package provides two parametrized uncoloured color themes for Emacs: tao-yin and tao-yang." tar ((:commit . "d5b9693fcabf2281319acaf09e685e3eedf27e8f"))]) +(tangotango-theme . [(20170924 1509) nil "Tango Palette color theme for Emacs 24." single ((:commit . "e2f2ea9c35f06dfc43a29c91c14cf0cdb19f2144") (:keywords "tango" "palette" "color" "theme" "emacs") (:authors ("Julien Barnier")) (:maintainer "Julien Barnier") (:url . "https://github.com/juba/color-theme-tangotango"))]) +(tango-plus-theme . [(20170214 1708) nil "A color theme based on the tango palette" single ((:commit . "8ba8901397e3e9f1d53110487bfa0effc65015e7") (:authors ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de") (:url . "https://github.com/tmalsburg/tango-plus-theme"))]) +(tango-2-theme . [(20120312 2025) nil "Tango 2 color theme for GNU Emacs 24" single ((:commit . "64e44c98e41ebbe3b827d54280e3b9615787daaa") (:authors ("Nick Parker")) (:maintainer "Nick Parker"))]) +(take-off . [(20140531 917) ((emacs (24 3)) (web-server (0 1 0))) "Emacs remote web access" tar ((:commit . "aa9ea45566fc74febbb6ee9c409ecc4b59246215") (:authors ("Thomas Burette" . "burettethomas@gmail.com")) (:maintainer "Thomas Burette" . "burettethomas@gmail.com") (:url . "https://github.com/tburette/take-off"))]) +(tagedit . [(20161121 855) ((s (1 3 1)) (dash (1 0 3))) "Some paredit-like features for html-mode" single ((:commit . "b3a70101a0dcf85498c92b7fcfa7fdbac869746c") (:keywords "convenience") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) +(tabula-rasa . [(20141216 547) ((emacs (24 4))) "Distraction free writing mode" single ((:commit . "e85fff9de18dc31bc6a7aca726e34a95cc5459f5") (:keywords "distraction free" "writing") (:authors ("Ido Magal" . "misc@satans.church")) (:maintainer "Ido Magal" . "misc@satans.church") (:url . "https://github.com/idomagal/Tabula-Rasa/blob/master/tabula-rasa.el"))]) +(tablist . [(20190414 643) ((emacs (24 3))) "Extended tabulated-list-mode" tar ((:commit . "8079801527da1f596bc942162026328d7bdf6ad9") (:keywords "extensions" "lisp") (:authors ("Andreas Politz" . "politza@fh-trier.de")) (:maintainer "Andreas Politz" . "politza@fh-trier.de"))]) +(tabbar-ruler . [(20160802 307) ((tabbar (2 0 1)) (powerline (2 3)) (mode-icons (0 4 0)) (cl-lib (0 5))) "Pretty tabbar, autohide, use both tabbar/ruler" tar ((:commit . "535568189aa12a3eff7f977d2783e57b6a65ab6a") (:keywords "tabbar" "ruler mode" "menu" "tool bar.") (:authors ("Matthew Fidler, Ta Quang Trung, Nathaniel Cunningham")) (:maintainer "Matthew L. Fidler") (:url . "http://github.com/mlf176f2/tabbar-ruler.el"))]) +(tabbar . [(20180726 1735) nil "Display a tab bar in the header line" tar ((:commit . "82bbda31cbe8ef367dd6501c3aa14b7f2c835910") (:keywords "convenience") (:authors ("David Ponce" . "david@dponce.com")) (:maintainer "David Ponce" . "david@dponce.com"))]) +(tab-jump-out . [(20151006 130) ((dash (2 10)) (emacs (24 4))) "Use tab to jump out of delimiter pairs." single ((:commit . "1c3fec1826d2891177ea78e4e7cce1dc67e83e51") (:keywords "tab" "editing") (:authors ("Zhang Kai Yu" . "yeannylam@gmail.com")) (:maintainer "Zhang Kai Yu" . "yeannylam@gmail.com"))]) +(tab-group . [(20140306 1450) nil "Grouped tabs and their tabbar" single ((:commit . "5a290ec2608e4100fb188fd60ecb77affcc3465b") (:keywords "convenience" "tabs") (:authors ("INA Lintaro ")) (:maintainer "INA Lintaro ") (:url . "http://github.com/tarao/tab-group-el"))]) +(ta . [(20160619 1645) ((emacs (24 3)) (cl-lib (0 5))) "A tool to deal with Chinese homophonic characters" single ((:commit . "668ad41e71f374f8c32c8d0532f3d8485b355d35") (:keywords "tools") (:authors ("kuanyui" . "azazabc123@gmail.com")) (:maintainer "kuanyui" . "azazabc123@gmail.com") (:url . "http://github.com/kuanyui/ta.el"))]) +(systemtap-mode . [(20151122 1940) nil "A mode for SystemTap" single ((:commit . "1a968c2b1f3a054bebf91ac49739d3a81ce050a9") (:keywords "tools" "languages") (:maintainer nil . "ruediger@c-plusplus.de") (:url . "https://github.com/ruediger/systemtap-mode"))]) +(systemd . [(20191117 1614) ((emacs (24 4))) "Major mode for editing systemd units" tar ((:commit . "a9f82b1f8bef7ff35efcf5a562570f0f0d496dfe") (:keywords "tools" "unix") (:authors ("Mark Oteiza" . "mvoteiza@udel.edu")) (:maintainer "Mark Oteiza" . "mvoteiza@udel.edu"))]) +(system-specific-settings . [(20140818 1457) nil "Apply settings only on certain systems" single ((:commit . "0050d85b2175095aa5ecf580a2fe43c069b0eef3") (:keywords "configuration") (:authors ("Ryan C. Thompson")) (:maintainer "Ryan C. Thompson") (:url . "https://github.com/DarwinAwardWinner/emacs-system-specific-settings"))]) +(system-packages . [(20190614 1320) ((emacs (24 3))) "functions to manage system packages" single ((:commit . "3ad6d52072f0bd043dced40ba7bd422fd9c00a7b") (:authors ("J. Alexander Branham" . "alex.branham@gmail.com")) (:maintainer "J. Alexander Branham" . "alex.branham@gmail.com") (:url . "https://gitlab.com/jabranham/system-packages"))]) +(syslog-mode . [(20190913 2040) ((hide-lines (20130623)) (ov (20150311))) "Major-mode for viewing log files" single ((:commit . "18f441bf57dd70cdd48a71f1f4566ab35facdb35") (:keywords "unix") (:authors ("Harley Gorrell" . "harley@panix.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com") (:url . "https://github.com/vapniks/syslog-mode"))]) +(sysctl . [(20190720 2028) ((emacs (26))) "Manage sysctl though org-mode" single ((:commit . "0fc50305a96de059ad1ff4e6081c9b4089f5247f") (:keywords "sysctl" "tools" "unix") (:authors ("Dante Catalfamo")) (:maintainer "Dante Catalfamo") (:url . "https://github.com/dantecatalfamo/sysctl.el"))]) +(syntax-subword . [(20160519 1905) nil "make operations on words more fine-grained" single ((:commit . "ad0db0fcb464652a1d3408f525dee9293ce2b70c") (:authors ("Jonathan Kotta" . "jpkotta@gmail.com")) (:maintainer "Jonathan Kotta" . "jpkotta@gmail.com"))]) +(syntactic-sugar . [(20140508 2041) nil "Effect-free forms such as if/then/else" single ((:commit . "7ddc4502c831abe1c4ad4c7d1ca628a2c9e13968") (:keywords "extensions") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:url . "http://github.com/rolandwalker/syntactic-sugar"))]) +(syntactic-close . [(20191119 1007) ((emacs (24)) (cl-lib (0 5))) "Insert closing delimiter" single ((:commit . "5760319d8fdb3672dd0e95880c30e9c4d92ab239") (:keywords "languages" "convenience") (:authors ("Emacs User Group Berlin" . "emacs-berlin@emacs-berlin.org")) (:maintainer "Emacs User Group Berlin" . "emacs-berlin@emacs-berlin.org") (:url . "https://github.com/emacs-berlin/syntactic-close"))]) +(synquid . [(20160930 1550) ((flycheck (27)) (emacs (24 3))) "Major mode for editing Synquid files" single ((:commit . "28701ce1a15437202f53ab93a14bcba1de83fd2c") (:keywords "languages") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com") (:url . "https://github.com/cpitclaudel/synquid-mode"))]) +(synosaurus . [(20191120 1845) ((cl-lib (0 5))) "An extensible thesaurus supporting lookup and substitution." tar ((:commit . "7c8945b184b67caf8eae7f336f76827f0ab9d998") (:url . "https://github.com/hpdeifel/synosaurus"))]) +(synonymous . [(20180325 1817) ((emacs (24)) (cl-lib (0 5)) (request (0 2 0))) "A thesaurus at your fingertips" single ((:commit . "2cb9a674d84fddf3f1b00c9d6b13a853576acb87") (:keywords "utility") (:authors ("Katherine Whitlock" . "toroidalcode@gmail.com") ("Snippets adapted from FlySpell, authored by Manuel Serrano" . "Manuel.Serrano@inria.fr")) (:maintainer "Katherine Whitlock" . "toroidalcode@gmail.com") (:url . "http://github.com/toroidal-code/synonymous.el"))]) +(syndicate . [(20160603 1523) ((evil (1 0))) "evil keybindings for org-mode" single ((:commit . "90cee202a06f5bab48268ebf9f62c43334b69f50") (:keywords "evil" "org" "bindings") (:authors ("Kawin Nikomborirak")) (:maintainer "Kawin Nikomborirak") (:url . "https://github.com/KNX32542/syndicate.git"))]) +(sync-recentf . [(20160326 2001) nil "Synchronize the recent files list between Emacs instances" single ((:commit . "0052561d5c5b5c2684faedc3eead776aec06c3ed") (:keywords "recentf") (:authors ("François Févotte" . "fevotte@gmail.com")) (:maintainer "François Févotte" . "fevotte@gmail.com") (:url . "https://github.com/ffevotte/sync-recentf"))]) +(symon-lingr . [(20150719 1342) ((symon (1 1 2)) (cl-lib (0 5))) "A notification-based Lingr client powered by symon.el" single ((:commit . "056d1a473e36992ff5881e5ce6fdc331cead975f") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) +(symon . [(20170224 833) nil "tiny graphical system monitor" single ((:commit . "8dd8b6df49b03cd7d31b85aedbe9dd08fb922335") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) +(symex . [(20191010 1915) ((emacs (24 4)) (cl-lib (0 6 1)) (lispy (0 26 0)) (paredit (24)) (evil-cleverparens (20170718 413)) (dash-functional (2 15 0)) (evil (1 2 14)) (smartparens (1 11 0)) (racket-mode (20181030 1345)) (geiser (0 10)) (evil-surround (1 0 4)) (hydra (0 15 0)) (cider (0 21 0)) (slime (2 24))) "An evil way to edit Lisp symbolic expressions as trees" tar ((:commit . "955c160af27c585d339dee8dd8eda394b253d3cc") (:keywords "lisp" "evil") (:authors ("Siddhartha Kasivajhula" . "sid@countvajhula.com")) (:maintainer "Siddhartha Kasivajhula" . "sid@countvajhula.com") (:url . "https://github.com/countvajhula/symex.el"))]) +(symbolword-mode . [(20180401 1427) ((emacs (24)) (f (0 19 0))) "modify word split" single ((:commit . "9bd33e73ecb2a0e3e3757c55c05f46b6937227e0") (:authors ("ncaq" . "ncaq@ncaq.net")) (:maintainer "ncaq" . "ncaq@ncaq.net") (:url . "https://github.com/ncaq/symbolword-mode"))]) +(symbol-overlay . [(20191111 2339) ((emacs (24 3))) "Highlight symbols with keymap-enabled overlays" single ((:commit . "35bd60ead7f9f68359e85480448e62fda0d16a37") (:keywords "faces" "matching") (:authors ("wolray" . "wolray@foxmail.com")) (:maintainer "wolray" . "wolray@foxmail.com") (:url . "https://github.com/wolray/symbol-overlay/"))]) +(sx . [(20190114 1523) ((emacs (24 1)) (cl-lib (0 5)) (json (1 3)) (markdown-mode (2 0)) (let-alist (1 0 3))) "StackExchange client. Ask and answer questions on Stack Overflow, Super User, and the likes" tar ((:commit . "49358eae36dd4bb5b9207313b30df085e7f25cef") (:keywords "help" "hypermedia" "tools") (:authors ("Sean Allred" . "code@seanallred.com")) (:maintainer "Sean Allred" . "code@seanallred.com") (:url . "https://github.com/vermiculus/sx.el/"))]) +(sws-mode . [(20150317 1945) nil "(S)ignificant (W)hite(S)pace mode" single ((:commit . "4dbde92542fc7ad61df38776980905a4721d642e") (:authors ("Brian M. Carlson and other contributors")) (:maintainer "Brian M. Carlson and other contributors") (:url . "https://github.com/brianc/jade-mode"))]) +(swoop . [(20160120 1715) ((ht (2 0)) (pcre2el (1 5)) (async (1 1)) (emacs (24))) "Peculiar buffer navigation for Emacs" tar ((:commit . "a5e475db7a9f5db02ba3d08cd3c1c3594e2e01d7") (:keywords "swoop" "inner" "buffer" "search" "navigation") (:authors ("Shingo Fukuyama - http://fukuyama.co")) (:maintainer "Shingo Fukuyama - http://fukuyama.co") (:url . "https://github.com/ShingoFukuyama/emacs-swoop"))]) +(switch-window . [(20181104 340) ((emacs (24))) "A *visual* way to switch window" tar ((:commit . "204f9fc1a39868a2d16ab9370a142c8c9c7a0943") (:keywords "convenience") (:authors ("Dimitri Fontaine" . "dim@tapoueh.org") ("Feng Shu" . "tumashu@163.com")) (:maintainer "Dimitri Fontaine" . "dim@tapoueh.org") (:url . "https://github.com/dimitri/switch-window"))]) +(switch-buffer-functions . [(20171011 1704) nil "Hook run when current buffer changed" single ((:commit . "b8d8e01e21ae8c8c84234dddeb3cc8250814f7ba") (:keywords "hook" "utility") (:authors ("10sr <8slashes+el [at] gmail [dot] com>")) (:maintainer "10sr <8slashes+el [at] gmail [dot] com>") (:url . "https://github.com/10sr/switch-buffer-functions-el"))]) +(swiper-helm . [(20180131 1744) ((emacs (24 1)) (swiper (0 1 0)) (helm (1 5 3))) "Helm version of Swiper." single ((:commit . "93fb6db87bc6a5967898b5fd3286954cc72a0008") (:keywords "matching") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/swiper-helm"))]) +(swiper . [(20191114 1539) ((emacs (24 5)) (ivy (0 13 0))) "Isearch with an overview. Oh, man!" single ((:commit . "2fb4c9f8fbcba50c3d24fa49f844100cac5cc651") (:keywords "matching") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/swiper"))]) +(swift3-mode . [(20160918 1250) ((emacs (24 4))) "Major-mode for Apple's Swift programming language." tar ((:commit . "4e51265c6905e17d8910e35b0b37cf51e20ecdfe") (:keywords "languages" "swift") (:url . "https://github.com/taku0/swift3-mode"))]) +(swift-playground-mode . [(20190730 1707) ((emacs (24 4)) (seq (2 2 0))) "Run Apple's playgrounds in Swift buffers" tar ((:commit . "111cde906508824ee11d774b908df867142a8aec") (:keywords "languages" "swift") (:url . "https://gitlab.com/michael.sanders/swift-playground-mode"))]) +(swift-mode . [(20191026 1223) ((emacs (24 4)) (seq (2 3))) "Major-mode for Apple's Swift programming language." tar ((:commit . "acfc7fdf026532845fa433ad466149063a93e859") (:keywords "languages" "swift") (:url . "https://github.com/swift-emacs/swift-mode"))]) +(swift-helpful . [(20191013 1658) ((emacs (25 1)) (dash (2 12 0)) (lsp-mode (6 0)) (swift-mode (8 0 0))) "Show documentation for Swift programs." tar ((:commit . "a4f581cf38664e9605e45264d2fe715b79adb9fa") (:keywords "help" "swift") (:authors ("Daniel Martín" . "mardani29@yahoo.es")) (:maintainer "Daniel Martín" . "mardani29@yahoo.es") (:url . "https://github.com/danielmartin/swift-helpful"))]) +(sweetgreen . [(20180605 335) ((dash (2 12 1)) (helm (1 5 6)) (request (0 2 0)) (cl-lib (0 5))) "Order Salads from sweetgreen.com" single ((:commit . "e933fe466b5ef0e976967e203f88bd7a012469d1") (:keywords "salad" "food" "sweetgreen" "request") (:authors ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainer "Diego Berrocal" . "cestdiego@gmail.com") (:url . "https://www.github.com/CestDiego/sweetgreen.el"))]) +(swap-regions . [(20180915 1346) ((emacs (24 3))) "Swap text in two regions" single ((:commit . "f4fd9880cf690e003fcde88dcf2b46adbbbb03cd") (:keywords "convenience") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/swap-regions.el"))]) +(swap-buffers . [(20150506 2139) nil "The quickest way to swap buffers between windows. Based on switch-window package." single ((:commit . "46ab31359b70d935add6c6e9533443116dc51103") (:keywords "window" "swap" "buffer" "exchange") (:authors ("Evgeniy Kazakov" . "evgeniy.kazakov@gmail.com")) (:maintainer "Evgeniy Kazakov" . "evgeniy.kazakov@gmail.com") (:url . "https://github.com/ekazakov/swap-buffers"))]) +(swagger-to-org . [(20160611 56) ((emacs (24)) (cl-lib (0 5)) (json (1 4))) "Convert a swagger.json file into an org-mode file" single ((:commit . "181357c71ea24bede263f5706d8781ad65e16877") (:keywords "ahungry" "emacs" "swagger" "openapi" "orgmode" "org" "export") (:authors ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com") (:url . "https://github.com/ahungry/swagger-to-org"))]) +(svnwrapper . [(20180414 1843) ((e2ansi (0 1 1))) "Highlighting and paging for shell command `svn'" tar ((:commit . "de5069f5784e5d9e87a0af0159ba5f28a3716583") (:keywords "faces") (:authors ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:url . "https://github.com/Lindydancer/svnwrapper"))]) +(svg-mode-line-themes . [(20150425 2006) ((xmlgen (0 4))) "SVG-based themes for mode-line" tar ((:commit . "80a0e01839cafbd66899202e7764c33231974259") (:authors ("sabof")) (:maintainer "sabof") (:url . "https://github.com/sabof/svg-mode-line-themes"))]) +(sv-kalender-namnsdagar . [(20190421 1521) nil "Swedish celebrated name of the day" single ((:commit . "fff970f49c77abfc69e37817f25a939818420971") (:keywords "calendar" "swedish" "localization") (:authors ("Mats Lidell" . "mats.lidell@lidells.se")) (:maintainer "Mats Lidell" . "mats.lidell@lidells.se") (:url . "https://github.com/matsl/sv-kalender-namnsdagar"))]) +(suscolors-theme . [(20190713 1009) nil "Colorful theme, inspired by Gruvbox." single ((:commit . "b4a979ee23e26e255b9a63525b0a28e810fab9ae") (:url . "https://github.com/TheSuspiciousWombat/SusColors-emacs"))]) +(supergenpass . [(20130329 548) nil "SuperGenPass for Emacs" single ((:commit . "549072ef7b5b82913cadd4758e8a0a9926f0a04a") (:keywords "supergenpass") (:authors ("Jaime Fournier" . "jaimef@linbsd.org")) (:maintainer "Jaime Fournier" . "jaimef@linbsd.org"))]) +(super-save . [(20190806 915) ((emacs (24 4))) "Auto-save buffers, based on your activity." single ((:commit . "279aa8e0103d6bd367619b7f57f9d60d7a3c5cfd") (:keywords "convenience") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.com")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.com") (:url . "https://github.com/bbatsov/super-save"))]) +(suomalainen-kalenteri . [(20190310 910) nil "Finnish national and Christian holidays for calendar" tar ((:commit . "c8c03fe9bae57d4e15c287aef4f98911a3529240"))]) +(sunshine . [(20190905 1832) ((cl-lib (0 5))) "Provide weather and forecast information." single ((:commit . "5e57899b2201dd36ae7242aa13ca82efcded3b7c") (:keywords "tools" "weather") (:authors ("Aaron Bieber" . "aaron@aaronbieber.com")) (:maintainer "Aaron Bieber" . "aaron@aaronbieber.com") (:url . "https://github.com/aaronbieber/sunshine.el"))]) +(sunny-day-theme . [(20140413 2125) nil "Emacs24 theme with a light background." single ((:commit . "420e0a6eb33fcc9b75c2c9e88ab60a975d782a00") (:authors ("Martin Haesler")) (:maintainer "Martin Haesler") (:url . "http://github.com/mswift42/sunny-day-theme"))]) +(sunburn-theme . [(20180602 1929) ((emacs (24))) "A low contrast color theme" single ((:commit . "ddb01b6f1f4f823398f7f8e08900c2b4a7811d3b") (:authors ("Martín Varela" . "martin@varela.fi")) (:maintainer "Martín Varela" . "martin@varela.fi") (:url . "http://github.com/mvarela/Sunburn-Theme"))]) +(suggestion-box . [(20170830 807) ((emacs (25 1)) (popup (0 5 3))) "show tooltip on the cursor" single ((:commit . "50af0776c8caf3c79c4d37fd51cbf304ea34b68e") (:keywords "convenience") (:authors ("Yuta Yamada ")) (:maintainer "Yuta Yamada "))]) +(suggest . [(20180916 1859) ((emacs (24 4)) (loop (1 3)) (dash (2 13 0)) (s (1 11 0)) (f (0 18 2)) (spinner (1 7 3))) "suggest elisp functions that give the output requested" tar ((:commit . "83a2679baf661ee834e9e75921fd546243a6d919") (:keywords "convenience") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk") (:url . "https://github.com/Wilfred/suggest.el"))]) +(sudoku . [(20191015 1315) ((emacs (24 4))) "Simple sudoku game, can download puzzles" single ((:commit . "b1924fd244a5fa284de9d67b66fbd69164b37318") (:keywords "games") (:authors ("Zajcev Evgeny" . "zevlg@yandex.ru")) (:maintainer "Zajcev Evgeny" . "zevlg@yandex.ru"))]) +(sudo-ext . [(20170126 1214) nil "sudo support" single ((:commit . "9d4580f304121ce7b8104bd4bd3b64e4dfa3c9b3") (:keywords "unix") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/sudo-ext.el"))]) +(sudo-edit . [(20180731 1908) ((emacs (24)) (cl-lib (0 5))) "Open files as another user" single ((:commit . "cc3d478937b1accd38742bfceba92af02ee9357d") (:keywords "convenience") (:authors ("Nathaniel Flath" . "flat0103@gmail.com")) (:maintainer "Nathaniel Flath" . "flat0103@gmail.com") (:url . "https://github.com/nflath/sudo-edit"))]) +(sudden-death . [(20180217 23) nil "Totsuzen-no-Shi" single ((:commit . "791a63d3f4df192e71f4232a9a4c5588f4b43dfb") (:authors ("yewton")) (:maintainer "yewton") (:url . "https://github.com/yewton/sudden-death.el"))]) +(sublimity . [(20181121 1311) ((cl-lib (0 3))) "smooth-scrolling, minimap and distraction-free mode" tar ((:commit . "4c8d0280815978fc11e1c5f86266a11c717b0c89") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "https://github.com/zk-phi/sublimity"))]) +(sublime-themes . [(20170606 1844) nil "A collection of themes based on Sublime Text" tar ((:commit . "60ee40af82eb55b79d5ed4026f1911326311603f") (:keywords "faces") (:authors ("Owain Lewis" . "owain@owainlewis.com")) (:maintainer "Owain Lewis" . "owain@owainlewis.com"))]) +(subemacs . [(20170401 934) nil "Evaluating expressions in a fresh Emacs subprocess" single ((:commit . "18d53939fec8968c08dfc5aff7240ca07efb1aac") (:keywords "extensions" "lisp" "multiprocessing") (:authors ("Klaus-Dieter Bauer" . "bauer.klaus.dieter@gmail.com")) (:maintainer "Klaus-Dieter Bauer" . "bauer.klaus.dieter@gmail.com") (:url . "https://github.com/kbauer/subemacs"))]) +(subatomic256-theme . [(20130621 210) nil "Fork of subatomic-theme for terminals." single ((:commit . "326177d6f99cd2b1d30df695e67ee3bc441cd96f") (:authors ("John Olsson" . "john@cryon.se")) (:maintainer "John Olsson" . "john@cryon.se") (:url . "https://github.com/cryon/subatomic256"))]) +(subatomic-theme . [(20190607 1022) nil "Low contrast bluish color theme" single ((:commit . "a13cdac97a6d0488b13bc36d4c2f4d4102ff6a31") (:keywords "color-theme" "blue" "low contrast") (:authors ("John Olsson" . "john@cryon.se")) (:maintainer "John Olsson" . "john@cryon.se") (:url . "https://github.com/cryon/subatomic"))]) +(stylus-mode . [(20150313 1512) ((sws-mode (0))) "Major mode for editing .jade files" single ((:commit . "4dbde92542fc7ad61df38776980905a4721d642e") (:authors ("Brian M. Carlson and other contributors")) (:maintainer "Brian M. Carlson and other contributors") (:url . "https://github.com/brianc/jade-mode"))]) +(stylefmt . [(20161025 824) nil "Stylefmt interface" single ((:commit . "7a38f26bf8ff947215f34f0a064c7ca80575ccbc") (:keywords "style" "code" "formatter") (:authors ("κeen")) (:maintainer "κeen") (:url . "https://github.com/KeenS/stylefmt.el"))]) +(stupid-indent-mode . [(20170525 1117) nil "Plain stupid indentation minor mode" single ((:commit . "3295e7de5e2cfddc3bf0e462e852bf58972f5d70") (:authors ("Mihai Bazon" . "mihai.bazon@gmail.com")) (:maintainer "Mihai Bazon" . "mihai.bazon@gmail.com"))]) +(stumpwm-mode . [(20140131 216) nil "special lisp mode for evaluating code into running stumpwm" single ((:commit . "61a7cf27e49e0779a53c018b2342f5f1c5cc70b4") (:keywords "comm" "lisp" "tools") (:maintainer "Shawn Betts"))]) +(stripe-buffer . [(20141208 1508) ((cl-lib (1 0))) "Use a different background for even and odd lines" single ((:commit . "c252080f55cb78c951b19ebab9687f6d00237baf") (:authors ("Andy Stewart" . "lazycat.manatee@gmail.com")) (:maintainer "sabof" . "esabof@gmail.com") (:url . "https://github.com/sabof/stripe-buffer"))]) +(string-utils . [(20140508 2041) ((list-utils (0 4 2))) "String-manipulation utilities" single ((:commit . "c2232d691617973ecf12a970c6008a161c21da14") (:keywords "extensions") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:url . "http://github.com/rolandwalker/string-utils"))]) +(string-inflection . [(20180827 1301) nil "underscore -> UPCASE -> CamelCase -> lowerCamelCase conversion of names" single ((:commit . "e9a50855a4c718592c28a5a892f164ecf46e39a8") (:keywords "elisp") (:authors ("akicho8" . "akicho8@gmail.com")) (:maintainer "akicho8" . "akicho8@gmail.com"))]) +(string-edit . [(20160411 656) ((dash (1 2 0))) "Avoid escape nightmares by editing string in separate buffer" single ((:commit . "c44b65b4c5e9f52be9c14d88ca2f402a18d9e1dd") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) +(strie . [(20160211 2222) ((cl-lib (0 5))) "A simple trie data structure implementation" single ((:commit . "eb7efb0cccc127c414f6a64db11454869d9c10a8") (:authors ("James Atwood" . "jatwood@cs.umass.edu")) (:maintainer "James Atwood" . "jatwood@cs.umass.edu"))]) +(strace-mode . [(20171116 2039) nil "strace output syntax highlighting" single ((:commit . "2901baa968d5180ab985ac40ca22cc20914d01f5") (:keywords "languages") (:authors ("Preston Moore" . "prestonkmoore@gmail.com")) (:maintainer "Preston Moore" . "prestonkmoore@gmail.com"))]) +(stock-tracker . [(20190902 812) ((emacs (26)) (dash (2 16 0))) "Track stock price" single ((:commit . "c7455081fa78fd8ffa229dcf0c691f66bf2ece16") (:keywords "convenience" "chinese" "stock") (:authors ("Huming Chen" . "chenhuming@gmail.com")) (:maintainer "Huming Chen" . "chenhuming@gmail.com") (:url . "https://github.com/beacoder/stock-tracker"))]) +(stock-ticker . [(20150204 1052) ((s (1 9 0)) (request (0 2 0))) "Show stock prices in mode line" single ((:commit . "f2e564142c9de84232839a5b01979cf95b04d6a9") (:keywords "comms") (:authors ("Gunther Hagleitner")) (:maintainer "Gunther Hagleitner") (:url . "https://github.com/hagleitn/stock-ticker"))]) +(stickyfunc-enhance . [(20150429 1814) ((emacs (24 3))) "An enhancement to stock `semantic-stickyfunc-mode'" single ((:commit . "13bdba51fcd83ccbc3267959d23afc94d458dcb0") (:keywords "c" "languages" "tools") (:authors ("Tu, Do Hoang" . "tuhdo1710@gmail.com")) (:maintainer "Tu, Do Hoang") (:url . "https://github.com/tuhdo/semantic-stickyfunc-enhance"))]) +(sticky . [(20170926 36) nil "Sticky key for capital letters" single ((:commit . "fec4e1af38f17f5cd80eca361d8e8ef8772db366") (:keywords "convenience") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/sticky.el"))]) +(stgit . [(20171130 1559) nil "major mode for StGit interaction" single ((:commit . "c7c4453b2ead0fa9ef0e6c9bc045b5f151945a3b") (:authors ("David KÃ¥gedal" . "davidk@lysator.liu.se")) (:maintainer "David KÃ¥gedal" . "davidk@lysator.liu.se") (:url . "http://www.procode.org/stgit"))]) +(stem-english . [(20180109 358) ((emacs (24 3))) "- routines for stemming English word" single ((:commit . "c9fc4c6ed6bf82382e479dae80912f4ae17d31f4") (:keywords "text") (:authors ("Tsuchiya Masatoshi" . "tsuchiya@pine.kuee.kyoto-u.ac.jp")) (:maintainer "KAWABATA, Taichi ") (:url . "http://github.com/kawabata/stem-english"))]) +(stem . [(20131102 1109) nil "Routines for stemming" single ((:commit . "d74e6611d6ba5025e0276a2cc7c8a90f46bfa9ac") (:keywords "stemming") (:authors ("Tsuchiya Masatoshi" . "tsuchiya@pine.kuee.kyoto-u.ac.jp")) (:maintainer "Tsuchiya Masatoshi" . "tsuchiya@pine.kuee.kyoto-u.ac.jp") (:url . "https://github.com/yuutayamada/stem"))]) +(steam . [(20190916 627) ((cl-lib (0 5))) "Organize and launch Steam games" single ((:commit . "f32951f4e0a4bc92813d0121d9df0257101b8992") (:keywords "games") (:authors ("Erik Sjöstrand")) (:maintainer "Erik Sjöstrand") (:url . "http://github.com/Kungsgeten/steam.el"))]) +(status . [(20151230 1408) nil "This package adds support for status icons to Emacs." tar ((:commit . "b62c74bf272566f82a68622f29fb9edafea0f241"))]) +(state . [(20180627 1956) ((emacs (24))) "Quick navigation between workspaces" single ((:commit . "258fe1cba00bdc2c600f866bb0406c719661d0a6") (:keywords "convenience" "workspaces") (:authors ("Sylvain Rousseau ")) (:maintainer "Sylvain Rousseau ") (:url . "https://github.com/thisirs/state.git"))]) +(stash . [(20151117 1427) nil "lightweight persistent caching" single ((:commit . "c2e494d20c752b80ebbdffbf66687b3cdfc425ad") (:keywords "extensions" "data" "internal" "lisp") (:authors ("Sean Allred" . "code@seanallred.com")) (:maintainer "Sean Allred" . "code@seanallred.com") (:url . "https://www.github.com/vermiculus/stash.el/"))]) +(start-menu . [(20160426 1225) ((cl-lib (0 5)) (config-parser (0 1))) "start-menu for executing external program like in windows" single ((:commit . "f7d33fed7ad2dc61156f1c1cff9e1805366fbd69") (:keywords "convenience" "menu") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:url . "https://github.com/lujun9972/el-start-menu"))]) +(standoff-mode . [(20171115 1731) nil "Create stand-off markup, also called external markup." tar ((:commit . "cf84b14066d63694d931395c6026fd0245d8a62b"))]) +(stan-snippets . [(20191104 1056) ((emacs (24 3)) (stan-mode (10 0 0)) (yasnippet (0 8 0))) "Yasnippets for Stan" tar ((:commit . "711b56bce5ec6adbcabe964342d2d0adbd0fbf6a") (:keywords "languages" "tools") (:authors ("Jeffrey Arnold" . "jeffrey.arnold@gmail.com") ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainer "Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu") (:url . "https://github.com/stan-dev/stan-mode/tree/master/stan-snippets"))]) +(stan-mode . [(20191106 131) ((emacs (24 4))) "Major mode for editing Stan files" tar ((:commit . "711b56bce5ec6adbcabe964342d2d0adbd0fbf6a") (:keywords "languages" "c") (:authors ("Jeffrey Arnold" . "jeffrey.arnold@gmail.com") ("Daniel Lee" . "bearlee@alum.mit.edu") ("Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu")) (:maintainer "Kazuki Yoshida" . "kazukiyoshida@mail.harvard.edu") (:url . "https://github.com/stan-dev/stan-mode/tree/master/stan-mode"))]) +(stack-mode . [(20150923 1523) ((haskell-mode (13 14)) (cl-lib (0 5)) (flycheck (0 23))) "A minor mode enabling various features based on stack-ide." tar ((:commit . "f3481e239dde9817152ec00e32bfc3ebf5aaf2cb") (:keywords "haskell" "stack") (:url . "https://github.com/commercialhaskell/stack-ide"))]) +(ssh-tunnels . [(20190622 931) ((cl-lib (0 5)) (emacs (24))) "Manage SSH tunnels" tar ((:commit . "d32e2072f50bcbde787196abb5862735837dc8be") (:keywords "tools" "convenience") (:authors ("death ")) (:maintainer "death ") (:url . "http://github.com/death/ssh-tunnels"))]) +(ssh-deploy . [(20190917 530) ((emacs (25))) "Deployment via Tramp, global or per directory." tar ((:commit . "93a0e189a06d49b03627c65fe77652bee9f129d4") (:keywords "tools" "convenience") (:authors ("Christian Johansson" . "christian@cvj.se")) (:maintainer "Christian Johansson" . "christian@cvj.se") (:url . "https://github.com/cjohansson/emacs-ssh-deploy"))]) +(ssh-config-mode . [(20191102 951) nil "Mode for fontification of ~/.ssh/config" tar ((:commit . "41567507479c8cba0e3d6b140faccf826017f7aa") (:keywords "ssh" "config" "emacs") (:authors ("Harley Gorrell" . "harley@panix.com")) (:maintainer "Harley Gorrell" . "harley@panix.com") (:url . "https://github.com/jhgorrell/ssh-config-mode-el"))]) +(ssh-agency . [(20191009 156) ((emacs (24 4)) (dash (2 10 0))) "manage ssh-agent from Emacs" single ((:commit . "89ea87dbfa0aa2fe644f7215aa3628c3008852c5") (:authors ("Noam Postavsky" . "npostavs@user.sourceforge.net")) (:maintainer "Noam Postavsky" . "npostavs@user.sourceforge.net") (:url . "https://github.com/magit/ssh-agency"))]) +(ssh . [(20120904 2042) nil "Support for remote logins using ssh." single ((:commit . "c17cf5b43df8ac4662a0580f85898e1f078df0d1") (:keywords "unix" "comm") (:authors ("Noah Friedman" . "friedman@splode.com")) (:maintainer "Ian Eure" . "ian.eure@gmail.com"))]) +(ssass-mode . [(20190521 249) ((emacs (24 3))) "Edit Sass without a Turing Machine" single ((:commit . "c2c610abd85fecd171466bf5a9a4943bd62ffda5") (:keywords "languages" "sass") (:authors ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainer "Adam Niederer" . "adam.niederer@gmail.com") (:url . "http://github.com/AdamNiederer/ssass-mode"))]) +(srv . [(20180715 1959) ((emacs (24 3))) "perform SRV DNS requests" single ((:commit . "714387d5a5cf34d8d8cd96bdb1f9cb8ded823ff7") (:keywords "comm") (:authors ("Magnus Henoch" . "magnus.henoch@gmail.com")) (:maintainer "Magnus Henoch" . "magnus.henoch@gmail.com") (:url . "https://github.com/legoscia/srv.el"))]) +(srefactor . [(20180703 1810) ((emacs (24 4))) "A refactoring tool based on Semantic parser framework" tar ((:commit . "6f2c97d17fb70f4ca2112f5a2b99a8ec162004f5") (:keywords "c" "languages" "tools") (:authors ("Tu, Do Hoang" . "tuhdo1710@gmail.com")) (:maintainer "Tu, Do Hoang") (:url . "https://github.com/tuhdo/semantic-refactor"))]) +(srcery-theme . [(20190909 1149) ((emacs (24))) "Dark color theme." single ((:commit . "0879e2fe1872fe11c3ddfab631987ed64bb5c437") (:keywords "faces") (:authors ("Daniel Berg")) (:maintainer "Daniel Berg") (:url . "https://github.com/srcery-colors/srcery-emacs"))]) +(sr-speedbar . [(20161025 831) nil "Same frame speedbar" single ((:commit . "77a83fb50f763a465c021eca7343243f465b4a47") (:keywords "speedbar" "sr-speedbar.el") (:authors ("Sebastian Rose" . "sebastian_rose@gmx.de")) (:maintainer "Sebastian Rose" . "sebastian_rose@gmx.de") (:url . "http://www.emacswiki.org/emacs/download/sr-speedbar.el"))]) +(sqlup-mode . [(20170610 1537) nil "Upcase SQL words for you" single ((:commit . "3f9df9c88d6a7f9b1ae907e401cad8d3d7d63bbf") (:keywords "sql" "tools" "redis" "upcase") (:authors ("Aldric Giacomoni" . "trevoke@gmail.com")) (:maintainer "Aldric Giacomoni" . "trevoke@gmail.com") (:url . "https://github.com/trevoke/sqlup-mode.el"))]) +(sqlite . [(20180708 1711) nil "use sqlite via elisp" single ((:commit . "dad42b8bbca4994be1871343dd18fd6528ee5797") (:authors ("Christian Giménez")) (:maintainer "Christian Giménez"))]) +(sqlformat . [(20190420 2256) ((emacs (24)) (reformatter (0 3))) "Reformat SQL using sqlformat or pgformatter" single ((:commit . "f7f46be6f06b83642c312151f3b5276f8830d9d7") (:keywords "languages") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/sqlformat"))]) +(sql-sqlline . [(20191028 939) ((emacs (24 4))) "Adds SQLLine support to SQLi mode" single ((:commit . "990c79b7ebbf8ecb1e1161c9a942973efd8e2833") (:keywords "languages") (:authors ("Matteo Redaelli" . "matteo.redaelli@gmail.com")) (:maintainer "Matteo Redaelli" . "matteo.redaelli@gmail.com") (:url . "https://gitlab.com/matteo.redaelli/sql-sqlline"))]) +(sql-presto . [(20190113 1742) nil "No description available." single ((:commit . "bcda455e300a1af75c7bb805882329bc844703b2"))]) +(sql-impala . [(20181218 410) nil "comint support for Cloudera Impala" single ((:commit . "466e7c0c789ec3e5e8a276c8f6754f91bb584c3e") (:keywords "sql" "impala") (:authors ("Jason Terk" . "jason@goterkyourself.com")) (:maintainer "Jason Terk" . "jason@goterkyourself.com") (:url . "https://github.com/jterk/sql-impala"))]) +(sql-clickhouse . [(20180302 1555) ((emacs (24))) "support ClickHouse as SQL interpreter" single ((:commit . "2edccd94145c55a040a3a87193793f06cf01f64f") (:authors ("Robert Schwarz" . "mail@rschwarz.net")) (:maintainer "Robert Schwarz" . "mail@rschwarz.net") (:url . "https://github.com/leethargo/sql-clickhouse"))]) +(spu . [(20161214 324) ((emacs (24 4)) (signal (1 0)) (timp (1 2 0))) "Silently upgrade package in the background" tar ((:commit . "41eec86b595816e3852e8ad1a8e07e51a27fd065") (:keywords "convenience" "package") (:authors ("Mola-T" . "Mola@molamola.xyz")) (:maintainer "Mola-T" . "Mola@molamola.xyz") (:url . "https://github.com/mola-T/spu"))]) +(sprunge . [(20160301 243) ((request (0 2 0)) (cl-lib (0 5))) "Upload pastes to sprunge.us" single ((:commit . "0fd386b8b29c4175022a04ad70ea5643185b6726") (:keywords "tools") (:authors ("Tom Jakubowski")) (:maintainer "Tom Jakubowski"))]) +(sproto-mode . [(20151115 1805) nil "Major mode for editing sproto." single ((:commit . "0583a88273204dccd884b7edaa3590cefd31e7f7") (:keywords "sproto") (:authors ("m2q1n9")) (:maintainer "m2q1n9"))]) +(sprintly-mode . [(20121006 534) ((furl (0 0 2))) "Major mode for dealing with sprint.ly" single ((:commit . "6695892bae5860b5268bf3ae62be990ee9b63c11") (:authors ("Justin Lilly" . "justin@justinlilly.com")) (:maintainer "Justin Lilly" . "justin@justinlilly.com") (:url . "https://github.com/sprintly/sprintly-mode"))]) +(springboard . [(20170106 755) ((helm (1 6 9))) "Temporarily change default-directory for one command" single ((:commit . "687d1e5898a880878995dc9bffe93b4598366203") (:keywords "helm") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainer "John Wiegley" . "jwiegley@gmail.com") (:url . "https://github.com/jwiegley/springboard"))]) +(spray . [(20160304 2220) nil "a speed reading mode" single ((:commit . "00638bc916227f2f961013543d10e85a43a32e29") (:keywords "convenience") (:authors ("Ian Kelling" . "ian@iankelling.org")) (:maintainer "Ian Kelling" . "ian@iankelling.org") (:url . "https://github.com/ian-kelling/spray"))]) +(spotlight . [(20150929 755) ((emacs (24 1)) (swiper (0 6 0)) (counsel (0 6 0))) "search files with Mac OS X spotlight" single ((:commit . "ab902900f22e7d1ea2dd8169441d2da7155aaa68") (:keywords "search" "external") (:authors ("Ben Maughan" . "benmaughan@gmail.com")) (:maintainer "Ben Maughan" . "benmaughan@gmail.com") (:url . "http://www.pragmaticemacs.com"))]) +(spotify . [(20181030 810) ((cl-lib (0 5))) "Control the spotify application from emacs" single ((:commit . "29577cf1188161f98b8358c149aaf47b2c137902") (:keywords "convenience") (:authors ("R.W. van 't Veer")) (:maintainer "R.W. van 't Veer") (:url . "https://github.com/remvee/spotify-el"))]) +(splitter . [(20170809 2208) nil "Manage window splits" single ((:commit . "6bdb51e9a346907d60a9625f6180bddd06be6674") (:keywords "frames" "convenience") (:authors ("Steven Thomas")) (:maintainer "Steven Thomas") (:url . "https://github.com/chumpage/chumpy-windows"))]) +(splitjoin . [(20150505 1432) ((cl-lib (0 5))) "Transition between multiline and single-line code" single ((:commit . "e2945ee269e6e90f0243d6f2a33e067bb0a2873c") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-splitjoin"))]) +(spiral . [(20180223 1140) ((emacs (25 1)) (a (0 1 0 -3 4)) (avy (0 4 0)) (clojure-mode (5 6 0)) (highlight (0)) (treepy (1 0 0))) "Clojure IDE based on UNREPL" tar ((:commit . "907b9792467139a942ba7b07ca0276b90770baf9") (:keywords "languages" "clojure") (:authors ("Daniel Barreto" . "daniel@barreto.tech")) (:maintainer "Daniel Barreto" . "daniel@barreto.tech") (:url . "https://github.com/Unrepl/spiral"))]) +(spice-mode . [(20190608 1033) ((emacs (24 3))) "Major mode for SPICE" single ((:commit . "e5e0644f03f9696f56dd69e2b6979da7f30ed600") (:keywords "spice" "spice2g6" "spice3" "eldo" "hspice" "layla" "mondriaan" "fasthenry" "cdl" "spectre compatibility" "netlist editing") (:authors ("Geert A. M. Van der Plas" . "geert_vanderplas@email.com") ("Emmanuel Rouat" . "emmanuel.rouat@wanadoo.fr") ("Carlin J. Vieri, MIT AI Lab" . "cvieri@ai.mit.edu")) (:maintainer "Geert A. M. Van der Plas" . "geert_vanderplas@email.com") (:url . "http://spice-mode.4t.com/"))]) +(sphinx-mode . [(20180620 915) ((f (0 20 0)) (dash (2 14 1))) "Minor mode providing sphinx support." tar ((:commit . "b5ac514e213459dcc57184086f10b5b6be3cecd8"))]) +(sphinx-frontend . [(20161025 758) nil "Launch build process for rst documents via sphinx." single ((:commit . "0cbb03361c245382d3e679dded30c4fc1713c252") (:keywords "compile" "sphinx" "restructuredtext") (:authors ("Kostafey" . "kostafey@gmail.com")) (:maintainer "Kostafey" . "kostafey@gmail.com") (:url . "https://github.com/kostafey/sphinx-frontend"))]) +(sphinx-doc . [(20160116 1117) ((s (1 9 0)) (cl-lib (0 5)) (dash (2 10 0))) "Sphinx friendly docstrings for Python functions" single ((:commit . "f39da2e6cae55d5d7c7ce887e69755b7529bcd67") (:keywords "sphinx" "python") (:authors ("Vineet Naik" . "naikvin@gmail.com")) (:maintainer "Vineet Naik" . "naikvin@gmail.com") (:url . "https://github.com/naiquevin/sphinx-doc.el"))]) +(speeddating . [(20180319 723) ((emacs (25))) "Increase date and time at point" single ((:commit . "df69db0560f19636a66a74f3d88c793bbb18b21e") (:keywords "date" "time") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/emacs-speeddating"))]) +(speed-type . [(20190526 953) ((emacs (24 3)) (cl-lib (0 3))) "Practice touch and speed typing" single ((:commit . "c98f9ebd4abf96db967f9c0dff9ccfa4b7f4035b") (:keywords "games") (:authors ("Gunther Hagleitner")) (:maintainer "Julien Pagès" . "j.parkouss@gmail.com") (:url . "https://github.com/parkouss/speed-type"))]) +(speechd-el . [(20190821 1129) nil "Client to speech synthesizers and Braille displays." tar ((:commit . "1d4086a64ba554bb8c7d648c8d0e6c176277f6f3"))]) +(speech-tagger . [(20170728 1829) ((cl-lib (0 5))) "tag parts of speech using coreNLP" tar ((:commit . "61955b40d4e8b09e66a3e8033e82893f81657c06") (:keywords "speech" "tag" "nlp" "language" "corenlp" "parsing" "natural") (:authors ("Danny McClanahan" . "danieldmcclanahan@gmail.com")) (:maintainer "Danny McClanahan" . "danieldmcclanahan@gmail.com") (:url . "https://github.com/cosmicexplorer/speech-tagger"))]) +(sparql-mode . [(20180320 1802) ((cl-lib (0 5)) (emacs (24 3))) "Edit and interactively evaluate SPARQL queries." tar ((:commit . "a00bb622c54086ac1ee96c265bf7fbef12c68089") (:authors ("Craig Andera ")) (:maintainer "Bjarte Johansen ") (:url . "https://github.com/ljos/sparql-mode"))]) +(sparkline . [(20150101 1319) ((cl-lib (0 3))) "Make sparkline images from a list of numbers" single ((:commit . "a2b5d817d272d6363b67ed8f8cc75499a19fa8d2") (:keywords "extensions") (:authors ("Willem Rein Oudshoorn" . "woudshoo@xs4all.nl")) (:maintainer "Willem Rein Oudshoorn" . "woudshoo@xs4all.nl"))]) +(spark . [(20160415 201) ((emacs (24 3))) "sparkline generation" single ((:commit . "0bf148c3ede3b31d56fd75f347cdd0b0eae60025") (:keywords "lisp" "data") (:authors ("Alvin Francis Dumalus")) (:maintainer "Alvin Francis Dumalus") (:url . "https://github.com/alvinfrancis/spark"))]) +(spaces . [(20170809 2208) nil "Create and switch between named window configurations." single ((:commit . "6bdb51e9a346907d60a9625f6180bddd06be6674") (:keywords "frames" "convenience") (:authors ("Steven Thomas")) (:maintainer "Steven Thomas") (:url . "https://github.com/chumpage/chumpy-windows"))]) +(spacemacs-theme . [(20191107 1747) nil "Color theme with a dark and light versions" tar ((:commit . "02c36aac44e0352d25741ab2abc988246e91b64f") (:keywords "color" "theme") (:url . "https://github.com/nashamri/spacemacs-theme"))]) +(spaceline-all-the-icons . [(20190325 1602) ((emacs (24 4)) (all-the-icons (2 6 0)) (spaceline (2 0 0)) (memoize (1 0 1))) "A Spaceline theme using All The Icons" tar ((:commit . "5afd48c10f1bd42d9b9648c5e64596b72f3e9042") (:keywords "convenience" "lisp" "tools") (:authors ("Dominic Charlesworth" . "dgc336@gmail.com")) (:maintainer "Dominic Charlesworth" . "dgc336@gmail.com") (:url . "https://github.com/domtronn/spaceline-all-the-icons.el"))]) +(spaceline . [(20181223 2024) ((emacs (24 4)) (cl-lib (0 5)) (powerline (2 3)) (dash (2 11 0)) (s (1 10 0))) "Modeline configuration library for powerline" tar ((:commit . "ae45a819ea7ae52febb4d7d82170af44dff10f19") (:keywords "mode-line" "powerline" "spacemacs") (:authors ("Eivind Fonn" . "evfonn@gmail.com")) (:maintainer "Eivind Fonn" . "evfonn@gmail.com") (:url . "https://github.com/TheBB/spaceline"))]) +(spacegray-theme . [(20150719 1931) ((emacs (24 1))) "A Hyperminimal UI Theme" single ((:commit . "9826265c2bceb2ebc1c5e16a45021da0253ace97") (:keywords "themes") (:authors ("Bruce Williams" . "brwcodes@gmail.com")) (:maintainer "Bruce Williams" . "brwcodes@gmail.com") (:url . "http://github.com/bruce/emacs-spacegray-theme"))]) +(spacebar . [(20190719 334) ((eyebrowse (0 7 7)) (emacs (25 4 0))) "Workspaces Bar" single ((:commit . "2b2cd0e786877273103f048e62a06b0027deca2d") (:keywords "convenience") (:authors ("Matthias Margush" . "matthias.margush@gmail.com")) (:maintainer "Matthias Margush" . "matthias.margush@gmail.com") (:url . "https://github.com/matthias-margush/spacebar"))]) +(sourcetrail . [(20170410 2137) ((emacs (24 4))) "Communication with Sourcetrail" single ((:commit . "b8d5557aa565ae979622312576db20515f65f977") (:keywords "external" "tool") (:authors ("Andreas Stallinger" . "astallinger@sourcetrail.com")) (:maintainer "Andreas Stallinger" . "astallinger@sourcetrail.com"))]) +(sourcerer-theme . [(20161014 1625) nil "A version of sourcerer by xero" single ((:commit . "c7f8e665d53bb48fb72f95f706710d53d24bd407") (:keywords "themes") (:authors ("Bryan Gilbert" . "gilbertw1@gmail.com")) (:maintainer "Bryan Gilbert" . "gilbertw1@gmail.com") (:url . "http://github.com/gilbertw1/sourcerer-emacs"))]) +(sourcemap . [(20161216 540) ((emacs (24 3))) "Sourcemap parser" single ((:commit . "64c89d296186f48d9135fb8aad501de19f64bceb") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-sourcemap"))]) +(sourcekit . [(20180101 834) ((emacs (24 3)) (dash (2 12 1)) (dash-functional (1 2 0)) (request (0 2 0))) "Library to interact with sourcekittendaemon" single ((:commit . "abf9bc5a0102eb666d3aa6d6bf22f6efcc852781") (:keywords "tools" "processes") (:authors ("Nathan Kot" . "nk@nathankot.com")) (:maintainer "Nathan Kot" . "nk@nathankot.com") (:url . "https://github.com/nathankot/company-sourcekit"))]) +(soundklaus . [(20160314 1231) ((dash (2 12 1)) (emacs (24)) (emms (4 0)) (s (1 11 0)) (pkg-info (0 4)) (cl-lib (0 5)) (request (0 2 0))) "Play music on SoundCloud with Emacs via EMMS" tar ((:commit . "09ec030843482594beae2664b8fe1e0ad1e66472") (:keywords "soundcloud" "music" "emms") (:authors ("r0man" . "roman@burningswell.com")) (:maintainer "r0man" . "roman@burningswell.com") (:url . "https://github.com/r0man/soundklaus.el"))]) +(soundcloud . [(20150502 326) ((emms (20131016)) (json (1 2)) (deferred (0 3 1)) (string-utils (0 3 2)) (request (20140316 417)) (request-deferred (20130526 1015))) "a SoundCloud client for Emacs" single ((:commit . "f998d4276ea90258909c698f6a5a51fccb667c08") (:keywords "soundcloud" "music" "audio") (:authors ("Travis Thieman" . "travis.thieman@gmail.com")) (:maintainer "Travis Thieman" . "travis.thieman@gmail.com"))]) +(sound-wav . [(20181126 1726) ((deferred (0 3 1)) (cl-lib (0 5))) "Play wav file" single ((:commit . "49a9f10334b914cf6429e49b5449e0711a3aa251") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-sound-wav"))]) +(sotlisp . [(20190211 2026) ((emacs (24 1))) "Write lisp at the speed of thought." single ((:commit . "ed2356a325c7a4a88ec1bd31381c8666e8997e97") (:keywords "convenience" "lisp") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") (:url . "https://github.com/Malabarba/speed-of-thought-lisp"))]) +(sotclojure . [(20170922 8) ((emacs (24 1)) (clojure-mode (4 0 0)) (cider (0 8)) (sotlisp (1 3))) "Write clojure at the speed of thought." tar ((:commit . "a480c887b53cb007b7b099c5ffcab89b9e59d7bc") (:keywords "convenience" "clojure") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") (:url . "https://github.com/Malabarba/speed-of-thought-clojure"))]) +(sos . [(20141215 403) ((org (7))) "StackOverflow Search" single ((:commit . "1573adca912b88b5010d99a25c83a5b2313bd39c") (:keywords "tools" "search" "questions") (:authors ("Rudolf Olah")) (:maintainer "Rudolf Olah") (:url . "https://github.com/omouse/emacs-sos"))]) +(sort-words . [(20160929 1335) nil "Sort words in a selected region" single ((:commit . "7b6e108f80237363faf7ec28b2c58dec270b8601") (:keywords "tools") (:authors ("\"Aleksandar Simic\"" . "asimic@gmail.com")) (:maintainer "\"Aleksandar Simic\"" . "asimic@gmail.com") (:url . "http://github.org/dotemacs/sort-words.el"))]) +(soothe-theme . [(20141027 1441) ((emacs (24 1))) "a dark colorful theme for Emacs24." single ((:commit . "0786fe70c6c1b4ddcfb932fdc6862b9611cfc09b") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:url . "https://github.com/jasonm23/emacs-soothe-theme"))]) +(sonic-pi . [(20171205 1205) ((cl-lib (0 5)) (osc (0 1)) (dash (2 2 0)) (emacs (24)) (highlight (0))) "A Emacs client for SonicPi" tar ((:commit . "3cf101b3b299735ed91658c7791ea4f04164e076") (:keywords "sonicpi" "ruby") (:authors ("Joseph Wilk" . "joe@josephwilk.net")) (:maintainer "Joseph Wilk" . "joe@josephwilk.net") (:url . "http://www.github.com/repl-electric/sonic-pi.el"))]) +(solidity-mode . [(20190302 909) nil "Major mode for ethereum's solidity language" tar ((:commit . "47f15b2663a6cf92ae6ebf655841a9509ad79017") (:keywords "languages" "solidity") (:authors ("Lefteris Karapetsas " . "lefteris@refu.co")) (:maintainer "Lefteris Karapetsas " . "lefteris@refu.co"))]) +(solidity-flycheck . [(20181117 1518) ((flycheck (32 -4)) (solidity-mode (0 1 9))) "Flycheck integration for solidity emacs mode" single ((:commit . "47f15b2663a6cf92ae6ebf655841a9509ad79017") (:keywords "languages" "solidity" "flycheck") (:authors ("Lefteris Karapetsas " . "lefteris@refu.co")) (:maintainer "Lefteris Karapetsas " . "lefteris@refu.co"))]) +(solarized-theme . [(20191122 712) ((emacs (24 1)) (dash (2 16))) "The Solarized color theme" tar ((:commit . "157405c0ccb37bc0af7de262f511235908d513c4") (:keywords "convenience" "themes" "solarized") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.com")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.com") (:url . "http://github.com/bbatsov/solarized-emacs"))]) +(solaire-mode . [(20190721 1046) ((emacs (24 4)) (cl-lib (0 5))) "make certain buffers grossly incandescent" single ((:commit . "794245665c3374af74880cbc7b16b4da02ad0411") (:keywords "dim" "bright" "window" "buffer" "faces") (:authors ("Henrik Lissner ")) (:maintainer "Henrik Lissner" . "henrik@lissner.net") (:url . "https://github.com/hlissner/emacs-solaire-mode"))]) +(soft-stone-theme . [(20140614 835) ((emacs (24))) "Emacs 24 theme with a light background." single ((:commit . "fb475514cfb02cf30ce358a61c48e46614344d48") (:authors ("Martin Haesler")) (:maintainer "Martin Haesler") (:url . "http://github.com/mswift42/soft-stone-theme"))]) +(soft-morning-theme . [(20150918 2041) nil "Emacs24 theme with a light background." single ((:commit . "c0f9c70c97ef2be2a093cf839c4bfe27740a111c") (:authors ("Martin Haesler")) (:maintainer "Martin Haesler") (:url . "http://github.com/mswift42/soft-morning-theme"))]) +(soft-charcoal-theme . [(20140420 1643) nil "Dark charcoal theme with soft colors" single ((:commit . "5607ab977fae6638e78b1495e02da8955c9ba19f") (:authors ("Martin Haesler")) (:maintainer "Martin Haesler") (:url . "http://github.com/mswift42/soft-charcoal-theme"))]) +(socyl . [(20170212 642) ((s (1 11 0)) (dash (2 12 0)) (pkg-info (0 5 0)) (cl-lib (0 5))) "Frontend for several search tools" tar ((:commit . "1ef2da42f66f3ab31a34131e51648f352416f0ba") (:keywords "ripgrep" "sift" "ack" "pt" "ag" "grep" "search") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:url . "https://github.com/nlamirault/socyl"))]) +(soar-mode . [(20190503 1843) nil "A major mode for the Soar language" single ((:commit . "13b6fca62ea6574d230516fddf359a61f6558ecd") (:keywords "languages" "soar") (:url . "https://github.com/adeschamps/soar-mode"))]) +(snoopy . [(20171008 2004) ((emacs (24)) (cl-lib (0 6))) "minor mode for number row unshifted character insertion" single ((:commit . "ec4123bdebfe0bb7bf4feaac2dc02b59caffe386") (:keywords "lisp") (:authors ("António Nuno Monteiro" . "anmonteiro@gmail.com")) (:maintainer "António Nuno Monteiro" . "anmonteiro@gmail.com"))]) +(snippet . [(20130210 2315) nil "Insert snippets of text into a buffer" single ((:commit . "11d00dd803874b93836f2010b08bd2c97b0f3c63") (:authors ("Pete Kazmier")) (:maintainer "Pete Kazmier"))]) +(snazzy-theme . [(20170823 1832) ((emacs (24)) (base16-theme (2 1))) "An elegant syntax theme with bright colors" single ((:commit . "57a1763b49b4a776084c16bc70c219246fa5b412") (:keywords "faces" "theme" "color" "snazzy") (:url . "https://github.com/weijiangan/emacs-snazzy/"))]) +(snapshot-timemachine-rsnapshot . [(20170324 1213) ((snapshot-timemachine (20160222 132)) (seq (2 19))) "rsnapshot backend for snapshot-timemachine" single ((:commit . "72b0b700d80f1a0442e62bbbb6a0c8c59182f97f") (:authors ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr"))]) +(snapshot-timemachine . [(20161221 929) ((emacs (24 4))) "Step through (Btrfs, ZFS, ...) snapshots of files" single ((:commit . "99efcebab309b11ed512a8dc62555d3834df5efb") (:authors ("Thomas Winant" . "dewinant@gmail.com")) (:maintainer "Thomas Winant" . "dewinant@gmail.com") (:url . "https://github.com/mrBliss/snapshot-timemachine"))]) +(snakemake-mode . [(20190912 308) ((emacs (24 5)) (cl-lib (0 5)) (magit-popup (2 4 0))) "Major mode for editing Snakemake files" tar ((:commit . "239b0c812b6963877d64c7051128353f2b9bcb55") (:keywords "tools") (:authors ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainer "Kyle Meyer" . "kyle@kyleam.com") (:url . "https://github.com/kyleam/snakemake-mode"))]) +(smyx-theme . [(20141127 828) nil "smyx Color Theme" single ((:commit . "6263f6b401bbabaed388c8efcfc0be2e58c51401") (:keywords "color" "theme" "smyx") (:authors ("Uriel G Maldonado" . "uriel781@gmail.com")) (:maintainer "Uriel G Maldonado" . "uriel781@gmail.com"))]) +(smtpmail-multi . [(20160218 2349) nil "Use different smtp servers for sending mail" single ((:commit . "83fa9d7a02e000be95cb282c8b48446646896ea1") (:keywords "comm") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com") (:url . "https://github.com/vapniks/smtpmail-multi"))]) +(smotitah . [(20150218 1030) nil "Modular emacs configuration framework" tar ((:commit . "f9ab562128a5460549d016913533778e8c94bcf3"))]) +(smooth-scrolling . [(20161002 1949) nil "Make emacs scroll smoothly" single ((:commit . "2462c13640aa4c75ab3ddad443fedc29acf68f84") (:keywords "convenience") (:authors ("Adam Spiers" . "emacs-ss@adamspiers.org") ("Jeremy Bondeson" . "jbondeson@gmail.com") ("Ryan C. Thompson" . "rct+github@thompsonclan.org")) (:maintainer "Adam Spiers" . "emacs-ss@adamspiers.org") (:url . "http://github.com/aspiers/smooth-scrolling/"))]) +(smooth-scroll . [(20130322 414) nil "Minor mode for smooth scrolling and in-place scrolling." single ((:commit . "02320f28abb5cae28b3a18f6b9ce93129bdbfc45") (:keywords "convenience" "emulations" "frames") (:authors ("K-talo Miyazaki ")) (:maintainer "K-talo Miyazaki ") (:url . "http://www.emacswiki.org/emacs/download/smooth-scroll.el"))]) +(smmry . [(20161024 901) nil "SMMRY client" single ((:commit . "986a1b0aec8ab1ef17dbfb7886f47e5558cf738a") (:keywords "api" "smmry") (:authors ("james sangho nah" . "microamp@protonmail.com")) (:maintainer "james sangho nah" . "microamp@protonmail.com") (:url . "https://github.com/microamp/smmry.el"))]) +(sml-modeline . [(20170614 2111) nil "Show position in a scrollbar like way in mode-line" single ((:commit . "d2f9f70174c4cf68c67eb3bb8088235735e34d9a") (:authors ("Lennart Borgman (lennart O borgman A gmail O com)")) (:maintainer "Lennart Borgman (lennart O borgman A gmail O com)") (:url . "http://bazaar.launchpad.net/~nxhtml/nxhtml/main/annotate/head%3A/util/sml-modeline.el"))]) +(smiles-mode . [(20160717 1120) nil "Major mode for SMILES." single ((:commit . "fbb381758adcb000a0c304be1b797f985f00e2de") (:keywords "smiles") (:authors (nil . "John Kitchin [jkitchin@andrew.cmu.edu]")) (:maintainer nil . "John Kitchin [jkitchin@andrew.cmu.edu]"))]) +(smex . [(20151212 2209) ((emacs (24))) "M-x interface with Ido-style fuzzy matching." single ((:commit . "55aaebe3d793c2c990b39a302eb26c184281c42c") (:keywords "convenience" "usability") (:authors ("Cornelius Mika" . "cornelius.mika@gmail.com")) (:maintainer "Cornelius Mika" . "cornelius.mika@gmail.com") (:url . "http://github.com/nonsequitur/smex/"))]) +(smeargle . [(20161212 2358) ((emacs (24 3))) "Highlighting region by last updated time" single ((:commit . "0665b1ff5109731898bc4a0ca6d939933b804777") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-smeargle"))]) +(smblog . [(20190920 1823) ((emacs (24 3))) "samba log viewer" single ((:commit . "fe866afbe19f804f80c37e077192576e4b0aad1a") (:authors ("Aurélien Aptel" . "aaptel@suse.com")) (:maintainer "Aurélien Aptel" . "aaptel@suse.com") (:url . "http://github.com/aaptel/smblog-mode"))]) +(smbc . [(20171229 1808) nil "View SMBC from Emacs" single ((:commit . "10538e3d575ba6ef3c94d555af2744b42dfd36c7") (:keywords "smbc" "webcomic") (:authors ("Saksham Sharma" . "saksham0808@gmail.com")) (:maintainer "Saksham Sharma" . "saksham0808@gmail.com") (:url . "https://github.com/sakshamsharma/emacs-smbc"))]) +(smarty-mode . [(20100703 1158) nil "major mode for editing smarty templates" single ((:commit . "3dfdfe1571f5e9ef55a29c51e5a80046d4cb7568") (:keywords "smarty" "php" "languages" "templates") (:maintainer "Benj Carson") (:url . "none yet"))]) +(smartscan . [(20170211 2033) nil "Jumps between other symbols found at point" single ((:commit . "234e077145710a174c20742de792b97ed2f965f6") (:keywords "extensions") (:authors ("Mickey Petersen" . "mickey@masteringemacs.org")) (:maintainer "Mickey Petersen" . "mickey@masteringemacs.org"))]) +(smartrep . [(20150509 230) nil "Support sequential operation which omitted prefix keys." single ((:commit . "f0ff5a6d7b8603603598ae3045c98b011e58d86e") (:keywords "convenience") (:authors ("myuhe ")) (:maintainer "myuhe") (:url . "https://github.com/myuhe/smartrep.el"))]) +(smartparens . [(20191015 1754) ((dash (2 13 0)) (cl-lib (0 3))) "Automatic insertion, wrapping and paredit-like navigation with user defined pairs." tar ((:commit . "9738360eb2afb58b4c21815f9d5c793b8125f540"))]) +(smart-window . [(20160717 130) ((cl-lib (0 5))) "vim-like window controlling plugin" single ((:commit . "5996461b7cbc5ab4509ac48537916eb29a8e4c16") (:keywords "window") (:authors ("Felix Chern" . "idryman@gmail.com")) (:maintainer "Felix Chern" . "idryman@gmail.com") (:url . "https://github.com/dryman/smart-window.el"))]) +(smart-tabs-mode . [(20160629 1452) nil "Intelligently indent with tabs, align with spaces!" single ((:commit . "9cc2594b82b03e7d68645a4878f9359f8b8c34c5") (:keywords "languages") (:authors ("John Croisant" . "jacius@gmail.com") ("Alan Pearce" . "alan@alanpearce.co.uk") ("Daniel Dehennin" . "daniel.dehennin@baby-gnu.org") ("Matt Renaud" . "mrenaud92@gmail.com")) (:maintainer "Joel C. Salomon" . "joelcsalomon@gmail.com") (:url . "http://www.emacswiki.org/emacs/SmartTabs"))]) +(smart-tab . [(20190916 137) nil "Intelligent tab completion and indentation." single ((:commit . "0f6963ce4de403fa43f3db68b31ce059f6251c3a") (:keywords "extensions") (:authors ("John SJ Anderson" . "genehack@genehack.org") ("Sebastien Rocca Serra" . "sroccaserra@gmail.com") ("Daniel Hackney" . "dan@haxney.org")) (:maintainer "John SJ Anderson" . "genehack@genehack.org") (:url . "http://github.com/genehack/smart-tab/tree/master"))]) +(smart-shift . [(20150203 725) nil "Smart shift text left/right." single ((:commit . "a26ab2b240137e62ec4bce1698ed9c5f7b6d13ae") (:keywords "convenience" "tools") (:authors ("Bin Huang" . "huangbin88@foxmail.com")) (:maintainer "Bin Huang" . "huangbin88@foxmail.com") (:url . "https://github.com/hbin/smart-shift"))]) +(smart-semicolon . [(20171008 133) ((emacs (25))) "Insert semicolon smartly" single ((:commit . "bcea2aa37befa40abf8b24a2d2314904e6df43b3") (:authors ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainer "Iku Iwasa" . "iku.iwasa@gmail.com") (:url . "https://github.com/iquiw/smart-semicolon"))]) +(smart-region . [(20150903 1403) ((emacs (24 4)) (expand-region (0 10 0)) (multiple-cursors (1 3 0)) (cl-lib (0 5))) "Smartly select region, rectangle, multi cursors" single ((:commit . "5a8017fd8e8dc3483865951c4942cab3f96f69f6") (:keywords "marking" "region") (:authors ("Yuuki Arisawa" . "yuuki.ari@gmail.com")) (:maintainer "Yuuki Arisawa" . "yuuki.ari@gmail.com") (:url . "https://github.com/uk-ar/smart-region"))]) +(smart-newline . [(20131208 340) nil "Provide smart newline for one keybind." single ((:commit . "0553a9e4be7188352de1a28f2eddfd28e7436f94") (:authors ("Satoshi Namai")) (:maintainer "Satoshi Namai"))]) +(smart-mode-line-powerline-theme . [(20160706 38) ((emacs (24 3)) (powerline (2 2)) (smart-mode-line (2 5))) "smart-mode-line theme that mimics the powerline appearance." tar ((:commit . "999be065b195f2eddb4e1b629f99038d832d44b7") (:keywords "mode-line" "faces" "themes") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com") (:url . "http://github.com/Bruce-Connor/smart-mode-line"))]) +(smart-mode-line-atom-one-dark-theme . [(20181220 1756) ((emacs (24 3)) (smart-mode-line (2 10))) "Atom-one-dark theme for smart-mode-line" single ((:commit . "79261aeafa89664039201e3d3f405bc8b0a6aa8d") (:keywords "mode-line" "themes" "faces") (:authors ("Davide Restivo" . "davide.restivo@yahoo.it")) (:maintainer "Davide Restivo" . "davide.restivo@yahoo.it") (:url . "https://github.com/daviderestivo/smart-mode-line-atom-one-dark-theme"))]) +(smart-mode-line . [(20190527 1156) ((emacs (24 3)) (rich-minority (0 1 1))) "A color coded smart mode-line." tar ((:commit . "999be065b195f2eddb4e1b629f99038d832d44b7") (:keywords "mode-line" "faces" "themes") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") (:url . "http://github.com/Malabarba/smart-mode-line"))]) +(smart-mark . [(20150912 210) nil "Restore point after C-g when mark" single ((:commit . "04b522a23e3aae8381c6a976fc978532fcb2e7d0") (:keywords "mark" "restore") (:authors ("Kai Yu" . "yeannylam@gmail.com")) (:maintainer "Kai Yu" . "yeannylam@gmail.com"))]) +(smart-jump . [(20190925 1518) ((emacs (25 1)) (dumb-jump (0 5 1))) "Smart go to definition." tar ((:commit . "07800ddd508cf620e6360e4a1f5bb25f8eab3ab1") (:keywords "tools") (:authors ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com") (:url . "https://github.com/jojojames/smart-jump"))]) +(smart-indent-rigidly . [(20141206 15) nil "Smart rigid indenting" single ((:commit . "323d1fe4d0b81e598249aad01bc44adb180ece0e") (:keywords "indenting" "coffee-mode" "haml-mode" "sass-mode") (:authors ("atom smith")) (:maintainer "atom smith") (:url . "https://github.com/re5et/smart-indent-rigidly"))]) +(smart-hungry-delete . [(20170412 1343) ((emacs (24 3))) "smart hungry deletion of whitespace" single ((:commit . "7c1d56a92481594e14d40b5fdf6c48657a0108a0") (:keywords "convenience") (:authors ("Hauke Rehfeld" . "emacs@haukerehfeld.de")) (:maintainer "Hauke Rehfeld" . "emacs@haukerehfeld.de") (:url . "https://github.com/hrehfeld/emacs-smart-hungry-delete"))]) +(smart-forward . [(20140430 713) ((expand-region (0 8 0))) "Semantic navigation" single ((:commit . "7b6dbfdbd4b646376a567c70e1a161545431b72b") (:keywords "navigation") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) +(smart-dash . [(20110131 316) nil "Smart-Dash minor mode" single ((:commit . "f8f23121ecb1b4b153e3561065cd0846d6722638") (:authors ("Dennis Lambe Jr." . "malsyned@malsyned.net")) (:maintainer "Dennis Lambe Jr." . "malsyned@malsyned.net"))]) +(smart-cursor-color . [(20141124 1719) nil "Change cursor color dynamically" single ((:commit . "1d190f49ca77734b55ac58f1b6276e42ada967b0") (:keywords "cursor" "color" "face") (:authors ("7696122")) (:maintainer "7696122") (:url . "https://github.com/7696122/smart-cursor-color/"))]) +(smart-compile . [(20190522 1125) nil "an interface to `compile'" single ((:commit . "366a4cdab1ad20105910bc24c4f3e4f8734e4eae") (:keywords "tools" "unix") (:authors ("Seiji Zenitani" . "zenitani@mac.com")) (:maintainer "Seiji Zenitani" . "zenitani@mac.com"))]) +(smart-comment . [(20160322 1839) nil "smarter commenting" single ((:commit . "17ddbd83205818763e6d68aa7a1aa9aaf414cbd4") (:keywords "lisp") (:authors ("Simon Friis Vindum" . "simon@vindum.io")) (:maintainer "Simon Friis Vindum" . "simon@vindum.io"))]) +(smart-backspace . [(20171014 526) nil "intellj like backspace" single ((:commit . "a10ec44ff325ec8c4c98b1a6e44e89e60a9aa4ac") (:authors ("Takeshi Tsukamoto" . "t.t.itm.0403@gmail.com")) (:maintainer "Takeshi Tsukamoto" . "t.t.itm.0403@gmail.com") (:url . "https://github.com/itome/smart-backspace"))]) +(sly-repl-ansi-color . [(20171020 1516) ((sly (0)) (cl-lib (0 5))) "Add ANSI colors support to the sly mrepl." single ((:commit . "b9cd52d1cf927bf7e08582d46ab0bcf1d4fb5048") (:keywords "sly") (:authors ("Javier \"PuercoPop\" Olaechea" . "pirata@gmail.com") ("Max Mikhanosha")) (:maintainer "Javier \"PuercoPop\" Olaechea" . "pirata@gmail.com") (:url . "https://github.com/PuercoPop/sly-repl-ansi-color"))]) +(sly-quicklisp . [(20191012 2124) ((sly (1 0 0 -2 2))) "Quicklisp support for SLY" tar ((:commit . "01ebe3976a244309f2e277c09206831135a0b66c") (:keywords "languages" "lisp" "sly") (:authors ("João Távora" . "joaotavora@gmail.com")) (:maintainer "João Távora" . "joaotavora@gmail.com") (:url . "https://github.com/capitaomorte/sly-quicklisp"))]) +(sly-named-readtables . [(20191013 2138) ((sly (1 0 0 -2 2))) "Support named readtables in Common Lisp files" tar ((:commit . "a5a42674ccffa97ccd5e4e9742beaf3ea719931f") (:keywords "languages" "lisp" "sly") (:authors ("João Távora" . "joaotavora@gmail.com")) (:maintainer "João Távora" . "joaotavora@gmail.com") (:url . "https://github.com/capitaomorte/sly-named-readtables"))]) +(sly-macrostep . [(20191013 2138) ((sly (1 0 0 -2 2)) (macrostep (0 9))) "fancy macro-expansion via macrostep.el" tar ((:commit . "be2d24545092d164be1a91031d8881afd29c9ec0") (:keywords "languages" "lisp" "sly") (:url . "https://github.com/capitaomorte/sly-macrostep"))]) +(sly-hello-world . [(20191013 2137) ((sly (1 0 0 -2 2))) "A template SLY contrib" tar ((:commit . "ae8fe0a0ebcce50425a1d411c027db06ddec39ce") (:keywords "languages" "lisp" "sly") (:authors ("João Távora" . "joaotavora@gmail.com")) (:maintainer "João Távora" . "joaotavora@gmail.com") (:url . "https://github.com/capitaomorte/sly-hello-world"))]) +(sly-asdf . [(20191021 718) ((emacs (24 3)) (sly (1 0 0 -2 2))) "ASDF system support for SLY" tar ((:commit . "69123fcebe63bb4d6e40e3dcb187299622401b74") (:keywords "languages" "lisp" "sly" "asdf") (:maintainer "Matt George" . "mmge93@gmail.com") (:url . "https://github.com/mmgeorge/sly-asdf"))]) +(sly . [(20191122 1849) ((emacs (24 3))) "Sylvester the Cat's Common Lisp IDE" tar ((:commit . "a41e69006cf921679283896f85b6afacf91aa06f") (:keywords "languages" "lisp" "sly") (:url . "https://github.com/joaotavora/sly"))]) +(slstats . [(20170823 849) ((cl-lib (0 5)) (emacs (24))) "Acquire and display stats about Second Life" single ((:commit . "e9696066abf3f2b7b818a57c062530dfd9377033") (:keywords "games") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:url . "https://github.com/davep/slstats.el"))]) +(slow-keys . [(20180831 459) ((emacs (24 1))) "Slow keys mode to avoid RSI" single ((:commit . "b93ad77f9fc1d14e080d7d64864fc9cb222248b6") (:keywords "convenience") (:authors ("Manuel Uberti" . "manuel.uberti@inventati.org")) (:maintainer "Manuel Uberti" . "manuel.uberti@inventati.org") (:url . "https://github.com/manuel-uberti/slow-keys"))]) +(slovak-holidays . [(20150418 855) nil "Adds a list of slovak holidays to Emacs calendar" single ((:commit . "effb16dfcd14797bf7448f5113085479db339c02") (:keywords "calendar") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) +(slirm . [(20160201 1425) ((emacs (24 4))) "Systematic Literature Review Mode for Emacs." single ((:commit . "9adfbe1fc67580e7d0d90f7e927a25d63a797464") (:authors ("Florian Biermann" . "fbie@itu.dk")) (:maintainer "Florian Biermann" . "fbie@itu.dk") (:url . "http://github.com/fbie/slirm"))]) +(slime-volleyball . [(20190701 1624) nil "An SVG Slime Volleyball Game" tar ((:commit . "6c135ad18897c3566d4dadfe847061532600ba2e") (:keywords "games") (:authors ("Thomas Fitzsimmons" . "fitzsim@fitzsim.org")) (:maintainer "Thomas Fitzsimmons" . "fitzsim@fitzsim.org"))]) +(slime-theme . [(20170808 1322) ((emacs (24 0))) "an Emacs 24 theme based on Slime (tmTheme)" single ((:commit . "8e5880ac69e0b6a079103001cc3a90bdb688998f") (:authors ("Jason Milkins")) (:maintainer "Jason Milkins") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) +(slime-repl-ansi-color . [(20190426 1414) ((emacs (24)) (slime (2 3 1))) "Turn on ANSI colors in REPL output;" single ((:commit . "fdd0c7a75a217abca2ff16ab9281d55f392bd841") (:keywords "lisp") (:authors ("Max Mikhanosha" . "max@openchat.com")) (:maintainer "Augustin Fabre" . "augustin@augfab.fr") (:url . "https://gitlab.com/augfab/slime-repl-ansi-color"))]) +(slime-docker . [(20190430 157) ((emacs (24)) (slime (2 16)) (docker-tramp (0 1)) (cl-lib (0 5))) "Integration of SLIME with Docker containers." tar ((:commit . "151cec4a11965cdc00d231900a50f2c9f455fce2") (:keywords "docker" "lisp" "slime") (:url . "https://github.com/daewok/slime-docker"))]) +(slime-company . [(20190117 1538) ((emacs (24 4)) (slime (2 13)) (company (0 9 0))) "slime completion backend for company mode" single ((:commit . "7290cbad711a62f76c28e5638d1a4d77197a358c") (:keywords "convenience" "lisp" "abbrev") (:authors ("Ole Arndt" . "anwyn@sugarshark.com")) (:maintainer "Ole Arndt" . "anwyn@sugarshark.com"))]) +(slime . [(20191114 1625) ((cl-lib (0 5)) (macrostep (0 9))) "Superior Lisp Interaction Mode for Emacs" tar ((:commit . "26a79a673a1d0ed2ee3d6346b395aa8ba084ddde") (:keywords "languages" "lisp" "slime") (:url . "https://github.com/slime/slime"))]) +(slim-mode . [(20170728 1348) nil "Major mode for editing Slim files" single ((:commit . "3636d18ab1c8b316eea71c4732eb44743e2ded87") (:keywords "markup" "language") (:authors ("Nathan Weizenbaum")) (:maintainer "Nathan Weizenbaum") (:url . "http://github.com/slim-template/emacs-slim"))]) +(slideview . [(20150324 2240) ((cl-lib (0 3))) "File slideshow" single ((:commit . "b6d170bda139aedf81b47dc55cbd1a3af512fb4c") (:keywords "files") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:url . "https://github.com/mhayashi1120/Emacs-slideview"))]) +(slack . [(20191119 1737) ((websocket (1 8)) (request (0 2 0)) (oauth2 (0 10)) (circe (2 2)) (alert (1 2)) (emojify (0 2))) "Slack client for Emacs" tar ((:commit . "1dae9153f514ec3dd92690bca55f70ede1f72f80") (:url . "https://github.com/yuya373/emacs-slack"))]) +(sl . [(20161217 1404) ((cl-lib (0 5))) "An Emacs clone of sl(1)" tar ((:commit . "fceb2ae12a3065b2a265b921baca0891c5ea54dc") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/sl.el"))]) +(skype . [(20160711 824) nil "skype UI for emacs users.." tar ((:commit . "8e3b33e620ed355522aa36434ff41e3ced080629") (:keywords "skype" "chat") (:authors ("SAKURAI Masashi" . "m.sakurai@kiwanami.net")) (:maintainer "SAKURAI Masashi" . "m.sakurai@kiwanami.net"))]) +(skewer-reload-stylesheets . [(20160725 1220) ((skewer-mode (1 5 3))) "live-edit CSS, SCSS, Less, and friends." tar ((:commit . "b9cc5635230ac3c0603a6da690c6e632d0a7490a") (:authors ("Nate Eagleson" . "nate@nateeag.com")) (:maintainer "Nate Eagleson" . "nate@nateeag.com"))]) +(skewer-mode . [(20180706 1807) ((simple-httpd (1 4 0)) (js2-mode (20090723)) (emacs (24))) "live browser JavaScript, CSS, and HTML interaction" tar ((:commit . "a381049acc4fa2087615b4b3b26c0865841386bd"))]) +(skewer-less . [(20160828 2021) ((skewer-mode (1 5 3))) "Skewer support for live LESS stylesheet updates" single ((:commit . "8ce9d030e18133319181d5dabe3e905c8ca5fd6b") (:keywords "languages" "tools") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) +(skeletor . [(20190212 339) ((s (1 7 0)) (f (0 14 0)) (dash (2 2 0)) (cl-lib (0 3)) (let-alist (1 0 3)) (emacs (24 1))) "Provides project skeletons for Emacs" tar ((:commit . "47c5b761aee8452716c97a69949ac2f675affe13") (:authors ("Chris Barrett" . "chris.d.barrett@me.com")) (:maintainer "Chris Barrett" . "chris.d.barrett@me.com"))]) +(simplezen . [(20130421 1000) ((s (1 4 0)) (dash (1 1 0))) "A simple subset of zencoding-mode for Emacs." single ((:commit . "119fdf2c6890a0c56045ae72cf4fce0071a81481") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) +(simplenote2 . [(20190321 933) ((request-deferred (0 2 0)) (uuidgen (20140918)) (unicode-escape (1 1))) "Interact with app.simplenote.com" tar ((:commit . "760ffecda63bd218876b623f46d332e3ef079be6") (:keywords "simplenote") (:authors ("alpha22jp" . "alpha22jp@gmail.com")) (:maintainer "alpha22jp" . "alpha22jp@gmail.com"))]) +(simplenote . [(20141118 1440) nil "Interact with simple-note.appspot.com" single ((:commit . "e836fcdb5a6497a9ffd6bceddd19b4bc52189078") (:keywords "simplenote") (:authors ("Konstantinos Efstathiou" . "konstantinos@efstathiou.gr")) (:maintainer "Konstantinos Efstathiou" . "konstantinos@efstathiou.gr"))]) +(simpleclip . [(20181105 1636) nil "Simplified access to the system clipboard" single ((:commit . "2468b08ad829aaf4a90246541978be3974c60ab8") (:keywords "convenience") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:url . "http://github.com/rolandwalker/simpleclip"))]) +(simple-screen . [(20161009 920) nil "Simple screen configuration manager" single ((:commit . "596e3a451d9af24730ab31a8fe15c91a4264d09d") (:keywords "tools") (:authors ("Tadashi Watanabe" . "wac@umiushi.org")) (:maintainer "Tadashi Watanabe" . "wac@umiushi.org") (:url . "https://github.com/wachikun/simple-screen"))]) +(simple-rtm . [(20160222 1534) ((rtm (0 1)) (dash (2 0 0))) "Interactive Emacs mode for Remember The Milk" single ((:commit . "8c7cd96cf66ef112be5c363e3378e304f8f83999") (:keywords "remember" "the" "milk" "productivity" "todo") (:authors ("Moritz Bunkus" . "morit@bunkus.org")) (:maintainer "Moritz Bunkus" . "morit@bunkus.org"))]) +(simple-paren . [(20190603 1836) ((emacs (24)) (cl-lib (0 5))) "Non-electrical insert paired delimiter, wrap" single ((:commit . "2d3304af173b657176a1284abecdad2861820119") (:keywords "convenience") (:authors ("Andreas Röhler, Steve Purcell")) (:maintainer "Andreas Röhler, Steve Purcell") (:url . "https://github.com/andreas-roehler/simple-paren"))]) +(simple-mpc . [(20180716 129) ((s (1 10 0))) "provides a simple interface to mpc" tar ((:commit . "bee8520e81292b4c7353e45b193f9a13b482f5b2") (:keywords "multimedia" "mpd" "mpc") (:authors ("Joren Van Onder" . "joren.vanonder@gmail.com")) (:maintainer "Joren Van Onder" . "joren.vanonder@gmail.com") (:url . "https://github.com/jorenvo/simple-mpc"))]) +(simple-httpd . [(20191103 1446) ((cl-lib (0 3))) "pure elisp HTTP server" single ((:commit . "22ce66ea43e0eadb9ec1d691a35d9695fc29cee6") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/emacs-http-server"))]) +(simple-call-tree . [(20180224 2056) ((emacs (24 3)) (anaphora (1 0 0))) "analyze source code based on font-lock text-properties" single ((:commit . "20059eb5549408def76aeb03d0d20839903dedef") (:keywords "programming") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com") (:url . "http://www.emacswiki.org/emacs/download/simple-call-tree.el"))]) +(simple-bookmarks . [(20190204 1426) ((cl-lib (0 5))) "Bookmark / functioncall manager" tar ((:commit . "54e8d771bcdb0eb235b31c0aa9642171369500e5") (:keywords "bookmark" "functioncall") (:authors ("Julian T. Knabenschuh" . "jtkdevelopments@gmail.com")) (:maintainer "Julian T. Knabenschuh" . "jtkdevelopments@gmail.com") (:url . "https://github.com/jtkDvlp/simple-bookmarks"))]) +(simp . [(20180607 254) nil "Simple project definition, chiefly for file finding, and grepping" tar ((:commit . "d4d4b8547055347828bedccbeffdb4fd2d5a5d34") (:keywords "project" "grep" "find") (:authors ("atom smith")) (:maintainer "atom smith") (:url . "https://github.com/re5et/simp"))]) +(silkworm-theme . [(20191005 1903) ((emacs (24))) "Light theme with pleasant, low contrast colors." single ((:commit . "6cb44e3bfb095588aa3bdf8d0d45b583521f9e2c") (:authors ("Martin Haesler")) (:maintainer "Martin Haesler"))]) +(signature . [(20140730 1949) nil "Signature Survey" tar ((:commit . "c47df2e1189a84505f9224aa78e87b6c65d13d37") (:authors ("Peter Stiernström" . "peter@stiernstrom.se")) (:maintainer "Peter Stiernström" . "peter@stiernstrom.se"))]) +(signal . [(20160816 1438) ((emacs (24)) (cl-lib (0 5))) "Advanced hook" single ((:commit . "aa58327e2297df921d72a0370468b48663efd438") (:keywords "internal" "lisp" "processes" "tools") (:authors ("Mola-T" . "Mola@molamola.xyz")) (:maintainer "Mola-T" . "Mola@molamola.xyz") (:url . "https://github.com/mola-T/signal"))]) +(sift . [(20190521 823) nil "Front-end for sift, a fast and powerful grep alternative" single ((:commit . "33b2c9ff964fe53bb55b37429faaa4e903bead7a") (:keywords "sift" "ack" "pt" "ag" "grep" "search") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:url . "https://github.com/nlamirault/sift.el"))]) +(side-notes . [(20190903 818) ((emacs (24 5))) "Easy access to a directory notes file" single ((:commit . "0d23b13938d4443463ee66956bf57e0a459cb166") (:keywords "convenience") (:authors ("Paul W. Rankin" . "hello@paulwrankin.com")) (:maintainer "Paul W. Rankin" . "hello@paulwrankin.com") (:url . "https://github.com/rnkn/side-notes"))]) +(sicp . [(20180823 1222) nil "Structure and Interpretation of Computer Programs in info format" tar ((:commit . "33acfa10a058aa65b6b22084a5b86a82410d794e") (:authors ("Hal Abelson") ("Jerry Sussman") ("Julie Sussman")) (:maintainer "Hal Abelson") (:url . "https://mitpress.mit.edu/sicp"))]) +(sibilant-mode . [(20151119 2145) nil "Support for the Sibilant programming language" single ((:commit . "bc1b5d8cd597918bafc9b2880ee49024740e54ab") (:keywords "languages") (:authors ("Jacob Rothstein" . "hi@jbr.me")) (:maintainer "Jacob Rothstein" . "hi@jbr.me") (:url . "http://sibilantjs.info"))]) +(shx . [(20191027 2130) ((emacs (24 4))) "Extras for the comint-mode shell" single ((:commit . "298f96e68068d6891d20e6188e918ab55ac56b30") (:keywords "processes" "tools" "comint" "shell" "repl") (:url . "https://github.com/riscy/shx-for-emacs"))]) +(shut-up . [(20180628 1830) ((cl-lib (0 3)) (emacs (24))) "Shut up would you!" single ((:commit . "081d6b01e3ba0e60326558e545c4019219e046ce") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:url . "http://github.com/rejeep/shut-up.el"))]) +(shroud . [(20190623 126) ((emacs (25)) (epg (1 0 0)) (s (1 6 0)) (bui (1 2 0)) (dash (2 15 0)) (dash-functional (2 15 0))) "Shroud secrets" tar ((:commit . "a2f3b4ffdd227338d7e14bdd6085d73daf6d191b") (:keywords "tools" "password") (:authors ("Amar Singh" . "nly@disroot.org")) (:maintainer "Amar Singh" . "nly@disroot.org") (:url . "https://github.com/o-nly/emacs-shroud"))]) +(shrink-whitespace . [(20181003 321) nil "Whitespace removal DWIM key" single ((:commit . "0407b89c142bd17e65edb666f35e2c6755bd0867") (:keywords "convenience") (:authors ("Jean-Christophe Petkovich" . "jcpetkovich@gmail.com")) (:maintainer "Jean-Christophe Petkovich" . "jcpetkovich@gmail.com") (:url . "https://gitlab.com/jcpetkovich/shrink-whitespace.el"))]) +(shrink-path . [(20190208 1335) ((emacs (24)) (s (1 6 1)) (dash (1 8 0)) (f (0 10 0))) "fish-style path" single ((:commit . "c14882c8599aec79a6e8ef2d06454254bb3e1e41") (:authors ("Benjamin Andresen")) (:maintainer "Benjamin Andresen") (:url . "https://gitlab.com/bennya/shrink-path.el"))]) +(shr-tag-pre-highlight . [(20171113 914) ((emacs (25 1)) (language-detection (0 1 0))) "Syntax highlighting code block in HTML" single ((:commit . "6182f43a36b0f82ba6edcf6e423b5f69a46a814e") (:keywords "html") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/shr-tag-pre-highlight.el"))]) +(shpec-mode . [(20150530 922) nil "Minor mode for shpec specification" single ((:commit . "146adc8281d0f115df39a3a3f982ac59ab61b754") (:keywords "languages" "tools") (:authors ("AdrieanKhisbe" . "adriean.khisbe@live.fr")) (:maintainer "AdrieanKhisbe" . "adriean.khisbe@live.fr") (:url . "http://github.com/shpec/shpec-mode"))]) +(showtip . [(20090830 1040) nil "Show tip at cursor" single ((:commit . "930da302809a4257e8d69425455b29e1cc91949b") (:keywords "help") (:authors ("Ye Wenbin" . "wenbinye@gmail.com")) (:maintainer "Ye Wenbin" . "wenbinye@gmail.com"))]) +(show-marks . [(20130805 1449) ((fm (1 0))) "Navigate and visualize the mark-ring" single ((:commit . "97609566582e65eed0d0a854efa5c312f209115d") (:keywords "convenience") (:authors ("Greg Rowe" . "emacs@therowes.net")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com") (:url . "https://github.com/vapniks/mark"))]) +(show-eol . [(20190924 621) ((emacs (24 4))) "Show end of line symbol in buffer." single ((:commit . "097a2a79e5bd7c297bcdc231559813056cd584ac") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:url . "https://github.com/jcs090218/show-eol"))]) +(show-css . [(20160210 1408) ((doom (1 3)) (s (1 10 0))) "Show the css of the html attribute the cursor is on" tar ((:commit . "771daeddd4df7a7c10f66419a837145649bab63b") (:keywords "hypermedia") (:authors ("Sheldon McGrandle" . "developer@rednemesis.com")) (:maintainer "Sheldon McGrandle" . "developer@rednemesis.com") (:url . "https://github.com/smmcg/showcss-mode"))]) +(shoulda . [(20140616 1833) ((cl-lib (0 5))) "Shoulda test support for ruby" single ((:commit . "fbe8eb8efc6cfcca1713283a290882cfcdc8725e") (:keywords "ruby" "tests" "shoulda") (:authors ("Marcwebbie" . "marcwebbie@gmail.com")) (:maintainer "Marcwebbie" . "marcwebbie@gmail.com"))]) +(shm . [(20180327 57) nil "Structured Haskell Mode" tar ((:commit . "7f9df73f45d107017c18ce4835bbc190dfe6782e") (:keywords "development" "haskell" "structured") (:authors ("Chris Done" . "chrisdone@gmail.com")) (:maintainer "Chris Done" . "chrisdone@gmail.com"))]) +(shimbun . [(20190930 730) nil "interfacing with web newspapers" tar ((:commit . "d8ba277836dee3af6706a4cb1c2f22b6bf5d0872") (:keywords "news") (:authors ("TSUCHIYA Masatoshi" . "tsuchiya@namazu.org") ("Akihiro Arisawa " . "ari@mbf.sphere.ne.jp") ("Yuuichi Teranishi " . "teranisi@gohome.org") ("Katsumi Yamaoka " . "yamaoka@jpl.org")) (:maintainer "TSUCHIYA Masatoshi" . "tsuchiya@namazu.org"))]) +(shift-text . [(20130831 1655) ((cl-lib (1 0)) (es-lib (0 3))) "Move the region in 4 directions, in a way similar to Eclipse's" single ((:commit . "1be9cbf994000022172ceb746fe1d597f57ea8ba") (:authors ("sabof")) (:maintainer "sabof") (:url . "https://github.com/sabof/shift-text"))]) +(shift-number . [(20170301 1459) nil "Increase/decrease the number at point" single ((:commit . "cd099a5582fc996b800ac7607f6c38a004ce9740") (:keywords "convenience") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:url . "https://github.com/alezost/shift-number.el"))]) +(shen-elisp . [(20180915 2028) ((emacs (24 4))) "Shen implementation in Elisp" tar ((:commit . "73b74c8d6e3a2ea34b667d177d9f130765bfe501") (:keywords "shen" "elisp") (:url . "http://github.com/deech/shen-elisp"))]) +(shelltest-mode . [(20180501 141) nil "Major mode for shelltestrunner" single ((:commit . "5fea8c9394380e822971a171905b6b5ab9be812d") (:keywords "languages") (:authors ("Dustin Fechner" . "dfe@rtrn.io")) (:maintainer "Dustin Fechner" . "dfe@rtrn.io") (:url . "https://github.com/rtrn/shelltest-mode"))]) +(shelldoc . [(20151115 325) ((cl-lib (0 3)) (s (1 9 0))) "shell command editing support with man page." single ((:commit . "5df2264eb60e45066f3633df4f34834751667346") (:keywords "applications") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:url . "http://github.com/mhayashi1120/Emacs-shelldoc"))]) +(shell-toggle . [(20150226 1411) nil "Toggle to and from the shell buffer" single ((:commit . "0d01bd9a780fdb7fe6609c552523f4498649a3b9") (:keywords "processes") (:authors ("Mikael Sjödin" . "mic@docs.uu.se") ("Matthieu Moy") ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Mikael Sjödin" . "mic@docs.uu.se") (:url . "https://github.com/knu/shell-toggle.el"))]) +(shell-switcher . [(20161029 552) ((emacs (24))) "Provide fast switching between shell buffers." tar ((:commit . "28a7f753dd7addd2933510526f52620cb5a22048"))]) +(shell-split-string . [(20151224 1008) nil "Split strings using shell-like syntax" single ((:commit . "19f6f999c33cc66a4c91bacdcc3697c25d97bf5a") (:keywords "utility" "library" "shell" "string") (:authors ("10sr <8.slashes+el [at] gmail [dot] com>")) (:maintainer "10sr <8.slashes+el [at] gmail [dot] com>") (:url . "https://github.com/10sr/shell-split-string-el"))]) +(shell-pop . [(20170304 1416) ((emacs (24)) (cl-lib (0 5))) "helps you to use shell easily on Emacs. Only one key action to work." single ((:commit . "4a3a9d093ad1add792bba764c601aa28de302b34") (:keywords "shell" "terminal" "tools") (:authors ("Kazuo YAGI" . "kazuo.yagi@gmail.com")) (:maintainer "Kazuo YAGI" . "kazuo.yagi@gmail.com") (:url . "http://github.com/kyagi/shell-pop-el"))]) +(shell-history . [(20100505 839) nil "integration with shell history" single ((:commit . "ee371a81f2d2bf5a308344078329ca1e9b5ed38c") (:keywords "processes" "convenience") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/shell-history.el"))]) +(shell-here . [(20191011 1959) nil "Open a shell relative to the working directory" single ((:commit . "88b80deb1337a97b403b20fc467fa2d579b3bfd5") (:keywords "unix" "tools" "processes") (:authors ("Ian Eure" . "ian.eure@gmail.com")) (:maintainer "Ian Eure" . "ian.eure@gmail.com"))]) +(shell-current-directory . [(20140101 2354) nil "create new shell based on buffer directory" single ((:commit . "bf843771bf9a4aa05e054ade799eb8862f3be89a") (:keywords "shell" "comint") (:authors ("Daniel Polani")) (:maintainer "Daniel Polani"))]) +(shell-command . [(20090830 1040) nil "enables tab-completion for `shell-command'" single ((:commit . "7e22125f746ce9ffbe9b0282d62f4b4bbbe672bd") (:keywords "shell") (:authors ("TSUCHIYA Masatoshi" . "tsuchiya@namazu.org")) (:maintainer "TSUCHIYA Masatoshi" . "tsuchiya@namazu.org"))]) +(shampoo . [(20131230 1019) nil "A remote Smalltalk development mode" tar ((:commit . "bc193c39636c30182159c5c91c37a9a4cb50fedf"))]) +(shakespeare-mode . [(20180704 2138) nil "A major mode for editing Shakespearean templates." single ((:commit . "c442eeea9d585e1b1fbb8813e33d47feec348a57") (:keywords "shakespeare" "hamlet" "lucius" "julius" "mode") (:authors ("Cody Reichert")) (:maintainer "Cody Reichert") (:url . "http://github.com/CodyReichert/shakespeare-mode"))]) +(shadowenv . [(20190903 1907) ((emacs (24 3))) "Shadowenv integration." single ((:commit . "f3cbe25c82f99367ac009d67a2400eb6d56547ff") (:keywords "shadowenv" "tools") (:authors ("Dante Catalfamo" . "dante.catalfamo@shopify.com")) (:maintainer "Dante Catalfamo" . "dante.catalfamo@shopify.com") (:url . "https://github.com/Shopify/shadowenv.el"))]) +(shader-mode . [(20180518 1157) ((emacs (24))) "Major mode for shader" single ((:commit . "d7dc8d0d6fe8914e8b6d5cf2081ad61e6952359c") (:authors ("midnightSuyama" . "midnightSuyama@gmail.com")) (:maintainer "midnightSuyama" . "midnightSuyama@gmail.com") (:url . "https://github.com/midnightSuyama/shader-mode"))]) +(shadchen . [(20141102 1839) nil "pattern matching for elisp" single ((:commit . "35f2b9c304eec990c16efbd557198289dc7cbb1f") (:authors ("Vincent Toups")) (:maintainer "Vincent Toups"))]) +(shackle . [(20191020 1249) ((cl-lib (0 5))) "Enforce rules for popups" single ((:commit . "7ccbe513852a1d1700b698547efca14b8940319d") (:keywords "convenience") (:authors ("Vasilij Schneidermann" . "v.schneidermann@gmail.com")) (:maintainer "Vasilij Schneidermann" . "v.schneidermann@gmail.com") (:url . "https://github.com/wasamasa/shackle"))]) +(sexy-monochrome-theme . [(20180526 808) nil "A sexy dark Emacs >= 24 theme for your sexy code" single ((:commit . "036bc238e48dd21aae1c34e6971d376582d8281b") (:keywords "themes") (:authors ("Volodymyr Yevtushenko" . "voloyev@vivaldi.net")) (:maintainer "Volodymyr Yevtushenko" . "voloyev@vivaldi.net") (:url . "https://github.com/voloyev/sexy-monochrome-theme"))]) +(sexp-move . [(20150915 1730) nil "Improved S-Expression Movement" single ((:commit . "117f7a91ab7c25e438413753e916570122011ce7") (:keywords "sexp") (:authors ("Philip Woods" . "elzairthesorcerer@gmail.com")) (:maintainer "Philip Woods" . "elzairthesorcerer@gmail.com") (:url . "https://gitlab.com/elzair/sexp-move"))]) +(seti-theme . [(20190201 1848) nil "A dark colored theme, inspired by Seti Atom Theme" single ((:commit . "9d76db0b91d4f574dd96ac80fad41da35bffa109") (:keywords "themes") (:authors ("Vlad Piersec" . "vlad.piersec@gmail.com")) (:maintainer "Vlad Piersec" . "vlad.piersec@gmail.com") (:url . "https://github.com/caisah/seti-theme"))]) +(session . [(20120511 0) nil "use variables, registers and buffer places across sessions" single ((:commit . "19ea0806873daac3539a4b956e15655e99e3dd6c") (:keywords "session" "session management" "desktop" "data" "tools") (:authors ("Christoph Wedler" . "wedler@users.sourceforge.net")) (:maintainer "Christoph Wedler" . "wedler@users.sourceforge.net") (:url . "http://emacs-session.sourceforge.net/"))]) +(sesman . [(20190909 1754) ((emacs (25))) "Generic Session Manager" tar ((:commit . "edee869c209c016e5f0c5cbb8abb9f3ccd2d1e05") (:keywords "process") (:authors ("Vitalie Spinu")) (:maintainer "Vitalie Spinu") (:url . "https://github.com/vspinu/sesman"))]) +(services . [(20170802 1130) ((cl-lib (0 5))) "Services database access functions." single ((:commit . "04c7986041a33dfa0b0ae57c7d6fbd600548c596") (:keywords "convenience" "net" "services") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:url . "https://github.com/davep/services.el"))]) +(serverspec . [(20150623 1155) ((dash (2 6 0)) (s (1 9 0)) (f (0 16 2)) (helm (1 6 1))) "Serverspec minor mode" tar ((:commit . "b6dfe82af9869438de5e5d860ced196641f372c0") (:authors ("k1LoW (Kenichirou Oyama), ")) (:maintainer "k1LoW (Kenichirou Oyama), ") (:url . "http://101000lab.org"))]) +(servant . [(20140216 1219) ((s (1 8 0)) (dash (2 2 0)) (f (0 11 0)) (ansi (0 3 0)) (commander (0 5 0)) (epl (0 2)) (shut-up (0 2 1)) (web-server (0 0 1))) "ELPA server written in Emacs Lisp" tar ((:commit . "4d2aa8250b54b28e6e7ee4cd5ebd98a33db2c134") (:keywords "elpa" "server") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com") ("Sebastian Wiesner" . "lunaryorn@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:url . "http://github.com/rejeep/servant.el"))]) +(sequential-command . [(20170926 40) nil "Many commands into one command" tar ((:commit . "a48cbcbe273b33edd3ae56e68f44b4100fa3a48a") (:keywords "convenience" "lisp") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/sequential-command.el"))]) +(sequences . [(20170818 1252) ((emacs (24))) "Ports of some Clojure sequence functions." single ((:commit . "564ebbd93b0beea4e75acfbf824350e90b5d5738") (:keywords "convenience") (:authors ("Tim Visher" . "tim.visher@gmail.com")) (:maintainer "Tim Visher" . "tim.visher@gmail.com"))]) +(seoul256-theme . [(20180505 757) ((emacs (24 3))) "Low-contrast color scheme based on Seoul Colors." single ((:commit . "d28a9de73a5ffb1a1c9492db75a5c1efe5e9815f") (:keywords "theme") (:authors ("Anand Iyer" . "anand.ucb@gmail.com")) (:maintainer "Anand Iyer" . "anand.ucb@gmail.com") (:url . "http://github.com/anandpiyer/seoul256-emacs"))]) +(sentence-navigation . [(20180408 1619) ((ample-regexps (0 1)) (cl-lib (0 5)) (emacs (24 4))) "Commands to navigate one-spaced sentences." single ((:commit . "7c5d2edeaed01196aec25031782e89adeaa089f0") (:keywords "sentence" "evil") (:authors ("Fox Kiester" . "noct@openmailbox.org")) (:maintainer "Fox Kiester" . "noct@openmailbox.org") (:url . "https://github.com/noctuid/emacs-sentence-navigation"))]) +(sensitive . [(20170818 1251) ((emacs (24)) (sequences (0 1 0))) "A dead simple way to load sensitive information" single ((:commit . "69dd6125a41d8b55f4b6ba61daa4d1aa1f716fa8") (:keywords "convenience") (:authors ("Tim Visher" . "tim.visher@gmail.com")) (:maintainer "Tim Visher" . "tim.visher@gmail.com"))]) +(sendto . [(20160425 1250) ((emacs (24 4))) "send the region content to a function" single ((:commit . "076b81d7a53f75b0a59b0ef3448f35570567054c") (:keywords "convenience" "region") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:url . "https://github.com/lujun9972/sendto.el"))]) +(seml-mode . [(20191117 338) ((emacs (25)) (simple-httpd (1 5)) (htmlize (1 5)) (web-mode (16 0))) "major-mode for SEML, S-Expression Markup Language, file" single ((:commit . "a353edf1d1c5217c085c9bf2b6166b4249e21409") (:keywords "lisp" "html") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:url . "https://github.com/conao3/seml-mode"))]) +(semi . [(20190708 1302) ((flim (1 14 9))) "A library to provide MIME features." tar ((:commit . "16228dc2d147d6ba8762c10fb25c54a3757ee9b0"))]) +(semaphore-promise . [(20190607 2115) ((emacs (26)) (semaphore (1)) (promise (1))) "semaphore integration with promise" single ((:commit . "a069b69018b96d284ce7553cd63350a88ea3679c") (:keywords "processes" "unix") (:authors ("Herwig Hochleitner" . "herwig@bendlas.net")) (:maintainer "Herwig Hochleitner" . "herwig@bendlas.net") (:url . "http://github.com/webnf/semaphore.el"))]) +(semaphore . [(20190607 1949) ((emacs (26))) "Semaphore based on condition variables" single ((:commit . "a069b69018b96d284ce7553cd63350a88ea3679c") (:keywords "processes" "unix") (:authors ("Herwig Hochleitner" . "herwig@bendlas.net")) (:maintainer "Herwig Hochleitner" . "herwig@bendlas.net") (:url . "http://github.com/webnf/semaphore.el"))]) +(selectric-mode . [(20170216 1111) nil "IBM Selectric mode for Emacs" tar ((:commit . "aed70015b29074b52a5d0c49b88b7a501d276dda") (:keywords "multimedia" "convenience" "typewriter" "selectric") (:authors ("Ricardo Bánffy" . "rbanffy@gmail.com")) (:maintainer "Ricardo Banffy" . "rbanffy@gmail.com") (:url . "https://github.com/rbanffy/selectric-mode"))]) +(selected . [(20170222 834) nil "Keymap for when region is active" single ((:commit . "03edaeac90bc6000d263f03be3d889b4685e1bf7") (:keywords "convenience") (:authors ("Erik Sjöstrand")) (:maintainer "Erik Sjöstrand") (:url . "http://github.com/Kungsgeten/selected.el"))]) +(select-themes . [(20160221 106) nil "Color theme selection with completing-read" single ((:commit . "236f54287519a3ea6dd7b3992d053e4f4ff5d0fe") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:url . "https://github.com/jasonm23/emacs-select-themes"))]) +(sekka . [(20170803 1247) ((cl-lib (0 3)) (concurrent (0 3 1)) (popup (0 5 2))) "A client for Sekka IME server" single ((:commit . "61840b57d9ae32bf8e297b175942590a1319c7e7") (:keywords "ime" "skk" "japanese") (:authors ("Kiyoka Nishiyama" . "kiyoka@sumibi.org")) (:maintainer "Kiyoka Nishiyama" . "kiyoka@sumibi.org") (:url . "https://github.com/kiyoka/sekka"))]) +(seethru . [(20150218 1829) ((shadchen (1 4))) "Easily change Emacs' transparency" single ((:commit . "d87e231f99313bea75b1e69e48c0f32968c82060") (:keywords "lisp" "tools" "alpha" "transparency") (:authors ("Benaiah Mischenko" . "benaiah@mischenko.com")) (:maintainer "Benaiah Mischenko" . "benaiah@mischenko.com") (:url . "http://github.com/benaiah/seethru"))]) +(seeing-is-believing . [(20170214 1320) nil "minor mode for running the seeing-is-believing ruby gem" single ((:commit . "fbbe246c0fda87bb26227bb826eebadb418a220f") (:authors ("John Cinnamond")) (:maintainer "John Cinnamond"))]) +(see-mode . [(20180511 41) ((emacs (24 4)) (language-detection (0 1 0))) "Edit string in a separate buffer" single ((:commit . "b6e72ea90105b03816c334be9e43bb41dcc79abf") (:keywords "convenience") (:authors ("Marcelo Muñoz" . "ma.munoz.araya@gmail.com")) (:maintainer "Marcelo Muñoz" . "ma.munoz.araya@gmail.com") (:url . "https://github.com/marcelino-m/see-mode"))]) +(secretaria . [(20190116 2000) ((emacs (24 4)) (alert (1 2)) (s (1 12)) (f (0 20 0)) (org (9))) "A personal assistant based on org-mode" single ((:commit . "40f2df829c8b858922559cd1dfbf13a9f78db3e8") (:keywords "org" "convenience") (:authors ("Jorge Araya Navarro" . "jorge@esavara.cr")) (:maintainer "Jorge Araya Navarro" . "jorge@esavara.cr") (:url . "https://gitlab.com/shackra/secretaria"))]) +(seclusion-mode . [(20121118 2353) nil "Edit in seclusion. A Dark Room mode." single ((:commit . "9634e76c52bfb7200ff0f9f01404f743429e9ef0") (:authors (nil . "Daniel Leslie dan@ironoxide.ca")) (:maintainer nil . "Daniel Leslie dan@ironoxide.ca") (:url . "http://github.com/dleslie/seclusion-mode"))]) +(searchq . [(20150829 1211) ((emacs (24 3))) "Framework of queued search tasks using GREP, ACK, AG and more." tar ((:commit . "dd510d55ad66a82c6ef022cfe7c4a73ad5365f82") (:authors ("boyw165")) (:maintainer "boyw165"))]) +(search-web . [(20150312 1103) nil "Post web search queries using `browse-url'." single ((:commit . "c4ae86ac1acfc572b81f3d78764bd9a54034c331") (:authors ("Tomoya Otake" . "tomoya.ton@gmail.com")) (:maintainer "Tomoya Otake" . "tomoya.ton@gmail.com"))]) +(sdlang-mode . [(20161201 711) ((emacs (24 3))) "Major mode for Simple Declarative Language files." single ((:commit . "d42a6eedefeb44919fbacf58d302b6df18f05bbc") (:keywords "languages") (:authors ("Vladimir Panteleev")) (:maintainer "Vladimir Panteleev") (:url . "https://github.com/CyberShadow/sdlang-mode"))]) +(sdcv . [(20190610 732) ((emacs (24 3)) (popup (0 5 3)) (showtip (0 1)) (pos-tip (0 4 6)) (cl-lib (0 3))) "Interface for sdcv (StartDict console version)." single ((:commit . "943ae3e90cc9a0a88a37cc710acd7424fd4defc4") (:keywords "startdict" "sdcv") (:authors ("Andy Stewart" . "lazycat.manatee@gmail.com")) (:maintainer "Andy Stewart" . "lazycat.manatee@gmail.com") (:url . "http://www.emacswiki.org/emacs/download/sdcv.el"))]) +(scss-mode . [(20180123 1708) nil "Major mode for editing SCSS files" single ((:commit . "cf58dbec5394280503eb5502938f3b5445d1b53d") (:keywords "scss" "css" "mode") (:authors ("Anton Johansson" . "anton.johansson@gmail.com")) (:maintainer "Anton Johansson" . "anton.johansson@gmail.com") (:url . "https://github.com/antonj/scss-mode"))]) +(scrooge . [(20180630 1022) ((emacs (24)) (cl-lib (0 5)) (dash (2 13 0)) (thrift (0 9 3))) "Major mode for Twitter Scrooge files" single ((:commit . "0a8c58e9e6708abe4ef7e415bc1e0472318bb1b0") (:keywords "scrooge" "thrift") (:authors ("Daniel McClanahan" . "danieldmcclanahan@gmail.com")) (:maintainer "Daniel McClanahan" . "danieldmcclanahan@gmail.com"))]) +(scrollkeeper . [(20190109 629) ((emacs (25 1))) "Custom scrolling commands with visual guidelines" single ((:commit . "3c4ac6b6b44686d31c260ee0b19daaee59bdccd6") (:keywords "convenience") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "https://github.com/alphapapa/scrollkeeper.el"))]) +(scroll-on-drag . [(20190826 8) ((emacs (26 2))) "Interactive scrolling." single ((:commit . "271b4aa6b38c2550119a36efac2b92cf1233e6e3") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://github.com/ideasman42/emacs-scroll-on-drag"))]) +(scribble-mode . [(20190912 200) ((emacs (24))) "Major mode for editing Scribble documents" single ((:commit . "5c3ea3cc9bbad585476eee41ea76dc056c2012bb") (:keywords "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:url . "https://github.com/emacs-pe/scribble-mode"))]) +(scratches . [(20151006 416) ((dash (2 11 0)) (f (0 17 0))) "Multiple scratches in any language" single ((:commit . "9441afe6396ca38f08029123fab5d87429cbf315") (:keywords "scratch") (:authors ("Zhang Kai Yu" . "yeannylam@gmail.com")) (:maintainer "Zhang Kai Yu" . "yeannylam@gmail.com"))]) +(scratch-pop . [(20170510 1458) ((popwin (0 7 0 -3))) "Generate, popup (& optionally backup) scratch buffer(s)." single ((:commit . "7f4172c792b10bd38898dd8963cf0ade91921869") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) +(scratch-palette . [(20150225 842) ((popwin (0 7 0 -3))) "make scratch buffer for each files" single ((:commit . "f6803b448079f4a81cc699cec7442ef543cd5818") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) +(scratch-message . [(20170107 1336) nil "Changing message in your scratch buffer" single ((:commit . "3ecc7f5e3b8a597ebd1492fd426d3720a7f34302") (:keywords "util" "scratch") (:authors ("Sylvain Rousseau ")) (:maintainer "Sylvain Rousseau ") (:url . "https://github.com/thisirs/scratch-message.git"))]) +(scratch-log . [(20141115 743) nil "Utility for *scratch* buffer." single ((:commit . "1168f7f16d36ca0f4ddf2bb98881f8db62cc5dc0") (:authors ("kmori" . "morihenotegami@gmail.com")) (:maintainer "kmori" . "morihenotegami@gmail.com"))]) +(scratch-ext . [(20140104 516) nil "Extensions for *scratch*" single ((:commit . "388c53cddd0466b451264894667ed64a6947ad67") (:authors ("Kouhei Yanagita" . "yanagi@shakenbu.org")) (:maintainer "Kouhei Yanagita" . "yanagi@shakenbu.org") (:url . "https://github.com/kyanagi/scratch-ext-el"))]) +(scratch . [(20190314 614) ((emacs (25 1))) "Mode-specific scratch buffers" single ((:commit . "4813d82b39a451f2a6d5b730cd7ec49a9bdabcca") (:keywords "convenience" "tools" "files") (:authors ("Ian Eure" . "ian.eure@gmail.com")) (:maintainer "Ian Eure" . "ian.eure@gmail.com") (:url . "https://github.com/ieure/scratch-el"))]) +(scpaste . [(20190228 2151) ((htmlize (1 39))) "Paste to the web via scp." single ((:commit . "568faaa70fa0413e2d165ad232cd4c6ec2815197") (:keywords "convenience" "hypermedia") (:authors ("Phil Hagelberg")) (:maintainer "Phil Hagelberg") (:url . "https://github.com/technomancy/scpaste"))]) +(scp . [(20171204 251) ((emacs (25 1)) (cl-lib (0 5))) "Use the SCP command to transfer files with the remote server" single ((:commit . "447305db246d9c9240678dd9c734ed920300463a") (:keywords "convenience" "scp") (:authors ("zg" . "13853850881@163.com")) (:maintainer "zg" . "13853850881@163.com") (:url . "https://github.com/tszg/emacs-scp"))]) +(sclang-snippets . [(20130513 751) ((yasnippet (0 8 0))) "Snippets for the SuperCollider Emacs mode" tar ((:commit . "c840a416b96f83bdd70491e3d1fbe2f1ae8b3f58") (:keywords "snippets") (:authors ("ptrv" . "mail@petervasil.net")) (:maintainer "ptrv" . "mail@petervasil.net"))]) +(sclang-extensions . [(20160509 338) ((auto-complete (1 4 0)) (s (1 3 1)) (dash (1 2 0)) (emacs (24 1))) "Extensions for the SuperCollider Emacs mode." tar ((:commit . "e9cc79732f16fdb582129303110c163dcc0d6da0") (:keywords "sclang" "supercollider" "languages" "tools") (:authors ("Chris Barrett" . "chris.d.barrett@me.com")) (:maintainer "Chris Barrett" . "chris.d.barrett@me.com"))]) +(scion . [(20130315 1255) nil "Haskell Minor Mode for Interacting with the Scion Library" single ((:commit . "99b4589175665687181a932cd836850205625f71") (:url . "https://code.google.com/p/scion-lib/"))]) +(scihub . [(20190801 920) ((emacs (25))) "Sci-Hub integration" single ((:commit . "a32e8f47961d606c1315a972f2dab4d3a61945af") (:keywords "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:url . "https://github.com/emacs-pe/scihub.el"))]) +(schrute . [(20170521 1840) ((emacs (24 3))) "Help you remember there is a better way to do something." single ((:commit . "59faa6c4232ae183cea93237301acad8c0763997") (:keywords "convenience") (:authors ("Jorge Araya Navarro" . "elcorreo@deshackra.com")) (:maintainer "Jorge Araya Navarro" . "elcorreo@deshackra.com") (:url . "https://bitbucket.org/shackra/dwight-k.-schrute"))]) +(scheme-here . [(20141028 718) nil "cmuscheme extension for multiple inferior processes" single ((:commit . "430ba017cc530865218de23a8f7985095a58343f") (:keywords "scheme") (:authors ("Dimitris Vyzovitis" . "vyzo@media.mit.edu")) (:maintainer "Wei Zhao" . "kaihaosw@gmail.com") (:url . "https://github.com/kaihaosw/scheme-here"))]) +(scheme-complete . [(20181029 1255) nil "Smart auto completion for Scheme in Emacs" single ((:commit . "b86ee41d48664839181498313f4f3dc2fef17d6f") (:authors ("Alex Shinn")) (:maintainer "Alex Shinn"))]) +(scf-mode . [(20151122 248) nil "shorten file-names in compilation type buffers" single ((:commit . "dbfcdcd89034f208d65e181af58e0d73ad09f8b2") (:keywords "compilation") (:authors ("Le Wang")) (:maintainer "Le Wang") (:url . "https://github.com/lewang/scf-mode"))]) +(scalariform . [(20190114 215) ((s (1 12 0)) (f (0 20 0))) "Format Scala code with scalariform." single ((:commit . "478a15ccb4f825aba73262bccd3e61ce7017f64b") (:keywords "processes" "scala" "scalariform") (:authors ("zwild" . "judezhao@outlook.com")) (:maintainer "zwild" . "judezhao@outlook.com") (:url . "https://github.com/zwild/scalariform"))]) +(scala-mode . [(20190929 1522) nil "Major mode for editing Scala" tar ((:commit . "44772cbf1e1ade52bc5066555ff0aed68569aaec") (:keywords "languages") (:url . "https://github.com/hvesalai/emacs-scala-mode"))]) +(scad-preview . [(20160206 1336) ((scad-mode (91 0))) "Preview SCAD models in real-time within Emacs" single ((:commit . "fee011589671cc8f1296cb6aa81553e5bb699819") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) +(scad-mode . [(20190413 1246) nil "A major mode for editing OpenSCAD code" single ((:commit . "eedfcc4e1c6f44959e477dc592330220d51aaa36") (:keywords "languages") (:authors ("Len Trigg, Åukasz Stelmach")) (:maintainer "Len Trigg" . "lenbok@gmail.com") (:url . "https://raw.github.com/openscad/openscad/master/contrib/scad-mode.el"))]) +(sbt-mode . [(20190929 1531) ((emacs (24 4))) "Interactive support for sbt projects" tar ((:commit . "5d2edadff23fe23e911379d6c2141d55b23e7254") (:keywords "languages") (:url . "https://github.com/hvesalai/emacs-sbt-mode"))]) +(sayid . [(20190919 654) ((cider (0 21 0))) "sayid nREPL middleware client" single ((:commit . "277404a6bb0a979e195df5886fc143bb1d1f1e8c") (:authors ("Bill Piel" . "bill@billpiel.com")) (:maintainer "Bill Piel" . "bill@billpiel.com") (:url . "https://github.com/clojure-emacs/sayid"))]) +(say-what-im-doing . [(20160706 1931) nil "dictate what you're doing with text to speech" single ((:commit . "5b2ce6783b02805bcac1107a149bfba3852cd9d5") (:keywords "text to speech" "dumb" "funny") (:authors ("Benaiah Mischenko")) (:maintainer "Benaiah Mischenko") (:url . "http://github.com/benaiah/say-what-im-doing"))]) +(savekill . [(20140418 229) nil "Save kill ring to disk" single ((:commit . "67fc94e3d8fe8ce3ca16f90518f6a46479b63e34") (:keywords "tools") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/savekill.el"))]) +(save-visited-files . [(20190927 2153) nil "save opened files across sessions" single ((:commit . "0b61c9bd16947bd99ccd61208bd481325e8c5cba") (:authors ("Nathaniel Flath" . "nflath@gmail.com")) (:maintainer "Nathaniel Flath" . "nflath@gmail.com") (:url . "http://github.com/nflath/save-visited-files"))]) +(save-load-path . [(20140206 1214) nil "save load-path and reuse it to test" single ((:commit . "6cb763a37e2b8af505bff2bcd11fd49c9ea04d66") (:keywords "lisp") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/save-load-path.el"))]) +(sauron . [(20181216 1200) nil "Track (erc/org/dbus/...) events and react to them." tar ((:commit . "e20eb21c93492a7c9e89579409ae5a07f77aa9fd"))]) +(sass-mode . [(20190502 53) ((haml-mode (3 0 15)) (cl-lib (0 5))) "Major mode for editing Sass files" single ((:commit . "247a0d4b509f10b28e4687cd8763492bca03599b") (:keywords "markup" "language" "css") (:authors ("Natalie Weizenbaum")) (:maintainer "Natalie Weizenbaum") (:url . "http://github.com/nex3/haml/tree/master"))]) +(sane-term . [(20181130 101) ((emacs (24 1))) "Multi Term is crazy. This is not." single ((:commit . "46352169bd6d2a86ca9c2052cd05ecd16fc7657b") (:authors ("Adam Patterson" . "adam@adamrt.com")) (:maintainer "Adam Patterson" . "adam@adamrt.com") (:url . "http://github.com/adamrt/sane-term"))]) +(salt-mode . [(20181225 1157) ((emacs (24 4)) (yaml-mode (0 0 12)) (mmm-mode (0 5 4)) (mmm-jinja2 (0 1))) "Major mode for Salt States" single ((:commit . "5ed02dabe0c5c58f51959a48b559f7fc5425ea2c") (:keywords "languages") (:authors ("Ben Hayden" . "hayden767@gmail.com")) (:maintainer "Glynn Forrest" . "me@glynnforrest.com") (:url . "https://github.com/glynnforrest/salt-mode"))]) +(salesforce-utils . [(20160814 154) ((cl-lib (0 5))) "simple utilities for Salesforce" single ((:commit . "73328baf0fb94ac0d0de645a8f6d42e5ae27f773") (:authors ("Sean McAfee")) (:maintainer "Sean McAfee") (:url . "https://github.com/grimnebulin/emacs-salesforce"))]) +(sailfish-scratchbox . [(20171202 1332) nil "Sailfish OS scratchbox inside the emacs." single ((:commit . "bb5ed0f0b0cd72f2eb1af065b7587ec81866b089") (:keywords "sb2" "mb2" "building" "scratchbox" "sailfish") (:authors ("V. V. Polevoy" . "fx@thefx.co")) (:maintainer "V. V. Polevoy" . "fx@thefx.co") (:url . "https://github.com/vityafx/sailfish-scratchbox.el"))]) +(sage-shell-mode . [(20191103 1040) ((cl-lib (0 6 1)) (emacs (24 4)) (let-alist (1 0 5)) (deferred (0 5 1))) "A front-end for Sage Math" tar ((:commit . "8ff9888fd84a96816512403a1b5ded93b4d4278b") (:keywords "sage" "math") (:authors ("Sho Takemori" . "stakemorii@gmail.com")) (:maintainer "Sho Takemori" . "stakemorii@gmail.com") (:url . "https://github.com/sagemath/sage-shell-mode"))]) +(sackspace . [(20130719 956) nil "A better backspace" single ((:commit . "fd0480eaaf6d3d11fd30ac5feb2da2f4f7572708") (:keywords "delete" "convenience") (:authors ("Michael Markert" . "markert.michael@googlemail.com")) (:maintainer "Michael Markert" . "markert.michael@googlemail.com") (:url . "http://github.com/cofi/sackspace.el"))]) +(s3ed . [(20180204 1349) ((emacs (24 4)) (seq (0)) (dash (0))) "Tramp-like access to s3" tar ((:commit . "13503cb057bed29cb00a14dffe4472b5cb7748ad") (:keywords "s3" "tools") (:authors ("Matt Usifer" . "mattusifer@gmail.com")) (:maintainer "Matt Usifer" . "mattusifer@gmail.com") (:url . "https://github.com/mattusifer/s3ed"))]) +(s12cpuv2-mode . [(20171013 2051) ((emacs (24 3))) "Major-mode for S12CPUV2 assembly" single ((:commit . "b17d4cf848dec1e20e66458e5c7ff77a2c051a8c") (:keywords "s12cpuv2" "assembly" "languages") (:authors ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainer "Adam Niederer" . "adam.niederer@gmail.com") (:url . "https://github.com/AdamNiederer/s12cpuv2-mode"))]) +(s-buffer . [(20130605 2124) ((s (1 6 0)) (noflet (0 0 3))) "s operations for buffers" single ((:commit . "f95d234282377f00a2c3a9846681080cb95bb1df") (:keywords "lisp") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:url . "http://github.com/nicferrier/emacs-s-buffer"))]) +(s . [(20180406 808) nil "The long lost Emacs string manipulation library." single ((:commit . "03410e6a7a2b11e47e1fea3b7d9899c7df26435e") (:keywords "strings") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) +(ryo-modal . [(20191017 1323) ((emacs (25 1))) "Roll your own modal mode" single ((:commit . "3a54312eea7023a86ca3f8eb3c03c872554bff2f") (:keywords "convenience" "modal" "keys") (:authors ("Erik Sjöstrand" . "sjostrand.erik@gmail.com")) (:maintainer "Erik Sjöstrand" . "sjostrand.erik@gmail.com") (:url . "http://github.com/Kungsgeten/ryo-modal"))]) +(rvm . [(20150402 1442) nil "Emacs integration for rvm" single ((:commit . "134497bc460990c71ab8fa75431156e62c17da2d") (:keywords "ruby" "rvm") (:authors ("Yves Senn" . "yves.senn@gmx.ch")) (:maintainer "Yves Senn" . "yves.senn@gmx.ch") (:url . "http://www.emacswiki.org/emacs/RvmEl"))]) +(rustic . [(20191104 1755) ((emacs (26 1)) (xterm-color (1 6)) (dash (2 13 0)) (s (1 10 0)) (f (0 18 2)) (projectile (0 14 0)) (markdown-mode (2 3)) (spinner (1 7 3)) (let-alist (1 0 4)) (seq (2 3)) (ht (2 0))) "Rust development environment" tar ((:commit . "5eca42eeb6be13ef6f71bd68955bba173d01f3d6") (:keywords "languages") (:authors ("Mozilla")) (:maintainer "Mozilla"))]) +(rust-playground . [(20180807 1158) ((emacs (24 3))) "Local Rust playground for short code snippets." single ((:commit . "092c8b11d62dea23953a004744833092bac85fe1") (:keywords "tools" "rust") (:authors ("Alexander I.Grafov" . "grafov@gmail.com")) (:maintainer "Alexander I.Grafov" . "grafov@gmail.com") (:url . "https://github.com/grafov/rust-playground"))]) +(rust-mode . [(20191118 1015) ((emacs (24 0))) "A major emacs mode for editing Rust source code" single ((:commit . "4fd637c06b27c74df2e8080e832b8bd80a55be81") (:keywords "languages") (:authors ("Mozilla")) (:maintainer "Mozilla") (:url . "https://github.com/rust-lang/rust-mode"))]) +(rust-auto-use . [(20181125 637) nil "Utility to automatically insert Rust use statements" single ((:commit . "d924505ecd954625dcb2d56dfba97111dc6a17fa") (:keywords "languages") (:authors ("Rotem Yaari" . "rotemy@MBP.local")) (:maintainer "Rotem Yaari" . "rotemy@MBP.local"))]) +(russian-holidays . [(20170109 2140) nil "Russian holidays for the calendar" single ((:commit . "b285a30f29d85c48e3ea4eb93972d34a090c167b") (:authors ("Alexander I.Grafov" . "siberian@laika.name")) (:maintainer "Alexander I.Grafov" . "siberian@laika.name") (:url . "https://github.com/grafov/russian-holidays"))]) +(runtests . [(20150807 831) nil "Run unit tests from Emacs" single ((:commit . "ed90249f24cc48290018df48b9b9b7172440be3e") (:keywords "test") (:authors ("Sune Simonsen" . "sune@we-knowhow.dk")) (:maintainer "Sune Simonsen" . "sune@we-knowhow.dk") (:url . "https://github.com/sunesimonsen/emacs-runtests"))]) +(runner . [(20160524 743) nil "Improved \"open with\" suggestions for dired" single ((:commit . "a211d57ddc600410d07a8b534920ba905b093d87") (:keywords "shell command" "dired" "file extension" "open with") (:authors ("Thamer Mahmoud" . "thamer.mahmoud@gmail.com")) (:maintainer "Thamer Mahmoud" . "thamer.mahmoud@gmail.com") (:url . "https://github.com/thamer/runner"))]) +(run-stuff . [(20180209 748) ((emacs (24 4))) "context based command execution" single ((:commit . "ed42a7bc9a197ccf1ca87f9937bf98f0a9ed3f92") (:keywords "files" "lisp" "files" "convenience" "hypermedia") (:authors ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Campbell Barton" . "ideasman42@gmail.com") (:url . "https://github.com/ideasman42/emacs-run-stuff"))]) +(rum-mode . [(20180127 22) ((emacs (24))) "Major mode for Rum programming language" single ((:commit . "b69a3866e0299cae8c9c805d644e69b2c17b64de") (:keywords "rum" "languages" "lisp") (:url . "https://github.com/rumlang/rum-mode"))]) +(rufo . [(20170718 1416) ((emacs (24 3))) "use rufo to automatically format ruby files" single ((:commit . "020b02ed6e9ab49e79d2ddf63e4ee2684c1728f4") (:authors ("Daniel Ma" . "danielhgma@gmail.com")) (:maintainer "Daniel Ma" . "danielhgma@gmail.com") (:url . "https://github.com/danielma/rufo.el"))]) +(ruby-tools . [(20151209 1615) nil "Collection of handy functions for ruby-mode." tar ((:commit . "6b97066b58a4f82eb2ecea6434a0a7e981aa4c18"))]) +(ruby-test-mode . [(20190412 909) ((ruby-mode (1 0)) (pcre2el (1 8))) "Minor mode for Behaviour and Test Driven" single ((:commit . "e805a81c3ea787f3c82dbb252c21d747be20bc7a") (:keywords "ruby" "unit" "test" "rspec" "tools") (:authors ("Roman Scherer" . "roman.scherer@gmx.de") ("Caspar Florian Ebeling" . "florian.ebeling@gmail.com")) (:maintainer "Roman Scherer" . "roman.scherer@burningswell.com") (:url . "https://github.com/ruby-test-mode/ruby-test-mode"))]) +(ruby-refactor . [(20160214 1650) ((ruby-mode (1 2))) "A minor mode which presents various Ruby refactoring helpers." single ((:commit . "e6b7125878a08518bffec6942df0c606f748e9ee") (:keywords "refactor" "ruby") (:url . "https://github.com/ajvargo/ruby-refactor"))]) +(ruby-interpolation . [(20131112 1652) nil "Ruby string interpolation helpers" single ((:commit . "1978e337601222cedf00e117bf4b5cac15d1f203") (:authors ("Arthur Leonard Andersen" . "leoc.git@gmail.com")) (:maintainer "Arthur Leonard Andersen" . "leoc.git@gmail.com") (:url . "http://github.com/leoc/ruby-interpolation.el"))]) +(ruby-hash-syntax . [(20190109 2227) nil "Toggle ruby hash syntax between => and 1.9+ styles" single ((:commit . "577ab383c142e3a0697ce73480158a8b489038da") (:keywords "languages") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/ruby-hash-syntax"))]) +(ruby-factory . [(20160102 721) ((inflections (1 1))) "Minor mode for Ruby test object generation libraries" tar ((:commit . "2bb7ccc2fccb5257376a989aa395bc7b9eb1d55d") (:keywords "ruby" "rails" "convenience") (:authors ("Skye Shaw" . "skye.shaw@gmail.com")) (:maintainer "Skye Shaw" . "skye.shaw@gmail.com") (:url . "http://github.com/sshaw/ruby-factory-mode"))]) +(ruby-extra-highlight . [(20171106 1933) nil "Highlight Ruby parameters." single ((:commit . "83942d18eae361998d24c1c523b308eea821f048") (:keywords "languages" "faces") (:authors ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:url . "https://github.com/Lindydancer/ruby-extra-highlight"))]) +(ruby-end . [(20141215 1223) nil "Automatic insertion of end blocks for Ruby" single ((:commit . "a136f75abb6d5577ce40d61dfeb778c2e9bb09c0") (:keywords "speed" "convenience" "ruby") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:url . "http://github.com/rejeep/ruby-end"))]) +(ruby-electric . [(20170810 1130) nil "Minor mode for electrically editing ruby code" single ((:commit . "3553448a780a1ea5c3b0e9becd820d4762876593") (:keywords "languages" "ruby") (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:url . "https://github.com/knu/ruby-electric.el"))]) +(ruby-compilation . [(20150709 640) ((inf-ruby (2 2 1))) "run a ruby process in a compilation buffer" single ((:commit . "134438af8fbdfa9c8077267c768d273a9792b484") (:keywords "test" "convenience") (:authors ("Eric Schulte")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/eschulte/rinari"))]) +(ruby-additional . [(20181221 1159) ((emacs (24 3)) (ruby-mode (1 2))) "ruby-mode extensions yet to be merged into Emacs" tar ((:commit . "75bccbb384e6907df47ab69acdccb4536806c890") (:keywords "ruby" "languages") (:url . "https://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/misc/"))]) +(rubocopfmt . [(20181009 1703) ((cl-lib (0 5))) "Minor-mode to format Ruby code with RuboCop on save" single ((:commit . "fc96145719a65b2551339d087ddd95b72e14646f") (:keywords "convenience" "wp" "edit" "ruby" "rubocop") (:authors ("Jim Myhrberg")) (:maintainer "Jim Myhrberg") (:url . "https://github.com/jimeh/rubocopfmt.el"))]) +(rubocop . [(20190326 1424) ((emacs (24))) "An Emacs interface for RuboCop" single ((:commit . "03bf15558a6eb65e4f74000cab29412efd46660e") (:keywords "project" "convenience") (:authors ("Bozhidar Batsov")) (:maintainer "Bozhidar Batsov") (:url . "https://github.com/bbatsov/rubocop-emacs"))]) +(rubik . [(20180222 2014) ((cl-lib (1 0)) (emacs (25 3))) "Rubik's Cube" single ((:commit . "c8dab1726463dbc9042a0b00186e4a8df02eb868") (:keywords "games") (:authors ("Ivan 'Kurvivor' Truskov" . "trus19@gmail.com")) (:maintainer "Ivan 'Kurvivor' Truskov" . "trus19@gmail.com") (:url . "https://github.com/Kurvivor19/rubik-mode"))]) +(rtm . [(20180329 1508) ((cl-lib (1 0))) "An elisp implementation of the Remember The Milk API" single ((:commit . "3e3d09387cb84801343ecca8fb02e82f213e7bbe") (:keywords "remember" "the" "milk" "productivity" "todo") (:authors ("Friedrich Delgado Friedrichs" . "frie...@nomaden.org")) (:maintainer "Friedrich Delgado Friedrichs" . "frie...@nomaden.org") (:url . "https://github.com/pmiddend/emacs-rtm"))]) +(rtags . [(20191029 2101) nil "A front-end for rtags" single ((:commit . "7338aad79d5d0b19bbc0aa59f718605867222a31") (:authors ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainer "Jan Erik Hanssen" . "jhanssen@gmail.com") (:url . "http://rtags.net"))]) +(rspec-mode . [(20190912 856) ((ruby-mode (1 0)) (cl-lib (0 4))) "Enhance ruby-mode for RSpec" tar ((:commit . "66ea7cc9699d6edc6115daa024818adbd85efc20") (:keywords "rspec" "ruby") (:authors ("Peter Williams, et al.")) (:maintainer "Peter Williams, et al.") (:url . "http://github.com/pezra/rspec-mode"))]) +(rsense . [(20100511 405) nil "RSense client for Emacs" single ((:commit . "8b5ee58318747ca1dde84ee41d48c4f50175cf35") (:keywords "convenience") (:authors ("Tomohiro Matsuyama" . "tomo@cx4a.org")) (:maintainer "Tomohiro Matsuyama" . "tomo@cx4a.org"))]) +(rpn-calc . [(20181121 1154) ((popup (0 4))) "quick RPN calculator for hackers" single ((:commit . "27279f89c80eb3f28ff9f981eff06502056943e2") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "https://github.com/zk-phi/rpn-calc"))]) +(rpm-spec-mode . [(20160710 1136) nil "RPM spec file editing commands for Emacs/XEmacs" single ((:commit . "c1c38050c48ea330c7cea632b8785d66daeefb2b") (:keywords "unix" "languages") (:authors ("Stig Bjørlykke," . "stig@bjorlykke.org")) (:maintainer "Stig Bjørlykke," . "stig@bjorlykke.org"))]) +(roy-mode . [(20121208 1158) nil "Roy major mode" single ((:commit . "0416f561edbc6b4a29fced8be84d2527a9613d65") (:keywords "extensions") (:authors ("Georgii Leontiev")) (:maintainer "Georgii Leontiev") (:url . "https://github.com/folone/roy-mode"))]) +(rotate . [(20160909 836) nil "Rotate the layout of emacs" single ((:commit . "091b5ac4fc310773253efb317e3dbe8e46959ba6") (:keywords "window" "layout") (:authors ("daichi.hirata ")) (:maintainer "daichi.hirata ") (:url . "https://github.com/daichirata/emacs-rotate"))]) +(ros . [(20191109 1939) ((emacs (24 4))) "Package to interact with and write code for ROS systems" tar ((:commit . "46ce6b5c16d24ebd80da39cf48f207cf12f1a5d0") (:authors ("Max Beutelspacher" . "max.beutelspacher@mailbox.org")) (:maintainer "Max Beutelspacher" . "max.beutelspacher@mailbox.org") (:url . "https://github.com/DerBeutlin/ros.el"))]) +(rope-read-mode . [(20191104 2208) ((emacs (24))) "Rearrange lines to read text smoothly" single ((:commit . "95ee549845c9b33c3652d64214488b9655026526") (:keywords "reading" "convenience" "chill") (:authors ("Marco Wahl" . "marcowahlsoft@gmail.com")) (:maintainer "Marco Wahl" . "marcowahlsoft@gmail.com") (:url . "https://github.com/marcowahl/rope-read-mode"))]) +(roguel-ike . [(20160120 302) ((popup (0 5 0))) "A coffee-break roguelike" tar ((:commit . "706dcb0687e8016d7d776f9d9e5ace9fdbbca43c"))]) +(robots-txt-mode . [(20190812 1858) nil "Major mode for editing robots.txt" single ((:commit . "8bf67285a25a6756607354d184e36583f2847e7d") (:keywords "languages" "comm" "web") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:url . "https://github.com/emacs-php/robots-txt-mode"))]) +(robe . [(20190521 58) ((inf-ruby (2 5 1)) (emacs (24 4))) "Code navigation, documentation lookup and completion for Ruby" tar ((:commit . "8190cb7c7beb8385dd3abf6ea357f33d8981ae8a") (:keywords "ruby" "convenience" "rails") (:authors ("Dmitry Gutov")) (:maintainer "Dmitry Gutov") (:url . "https://github.com/dgutov/robe"))]) +(rmsbolt . [(20191113 210) ((emacs (25 1))) "A compiler output viewer" tar ((:commit . "7c735240b0f7685457e4e77470b7562e7790803f") (:keywords "compilation" "tools") (:authors ("Jay Kamat" . "jaygkamat@gmail.com")) (:maintainer "Jay Kamat" . "jaygkamat@gmail.com") (:url . "http://gitlab.com/jgkamat/rmsbolt"))]) +(rjsx-mode . [(20190614 2215) ((emacs (24 4)) (js2-mode (20170504))) "Real support for JSX" single ((:commit . "0e7fa6b4facdec4f85a7a8865bdf59dfd57217b5") (:keywords "languages") (:authors ("Felipe Ochoa" . "felipe@fov.space")) (:maintainer "Felipe Ochoa" . "felipe@fov.space") (:url . "https://github.com/felipeochoa/rjsx-mode/"))]) +(riscv-mode . [(20170804 1521) ((emacs (24 4))) "Major-mode for RISC V assembly" single ((:commit . "99febf97d1fa9441e8dada94fe30c2aa439c9749") (:keywords "riscv" "assembly") (:authors ("Adam Niederer ")) (:maintainer "Adam Niederer") (:url . "https://github.com/AdamNiederer/riscv-mode"))]) +(ripgrep . [(20190215 841) nil "Front-end for ripgrep, a command line search tool" single ((:commit . "40e871dcc4519a70981e9f28acea304692a60978") (:keywords "ripgrep" "ack" "pt" "ag" "sift" "grep" "search") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:url . "https://github.com/nlamirault/ripgrep.el"))]) +(rings . [(20160531 2027) nil "Buffer rings. Like tabs, but better." single ((:commit . "3590b222eb80652cbd27866f066bd3571d86edfc") (:keywords "utilities" "productivity") (:authors ("Konrad Scorciapino")) (:maintainer "Konrad Scorciapino") (:url . "http://github.com/konr/rings"))]) +(rinari . [(20150709 640) ((ruby-mode (1 0)) (inf-ruby (2 2 5)) (ruby-compilation (0 16)) (jump (2 0))) "Rinari Is Not A Rails IDE" single ((:commit . "134438af8fbdfa9c8077267c768d273a9792b484") (:keywords "ruby" "rails" "project" "convenience" "web") (:authors ("Phil Hagelberg, Eric Schulte, Steve Purcell")) (:maintainer "Phil Hagelberg, Eric Schulte, Steve Purcell") (:url . "https://github.com/eschulte/rinari"))]) +(rimero-theme . [(20180901 1348) ((emacs (24))) "Theme with a dark background suitable for UI and terminal usage." single ((:commit . "a2e706c2b34f749019979a133f08a2d94a1104b3") (:keywords "faces" "theme" "dark" "light colors") (:authors ("Yves Zoundi" . "yveszoundi@users.sf.net")) (:maintainer "Yves Zoundi" . "yveszoundi@users.sf.net") (:url . "https://github.com/yveszoundi/emacs-rimero-theme"))]) +(rigid-tabs . [(20170903 1559) ((emacs (24 3))) "Fix TAB alignment in diff buffers" single ((:commit . "eba84ceaba2e57e76ad2dfbb7a7154238a25d956") (:keywords "diff" "whitespace" "version control" "magit") (:authors ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainer "Yuri D'Elia" . "wavexx@thregr.org") (:url . "https://github.com/wavexx/rigid-tabs.el"))]) +(right-click-context . [(20190528 1832) ((emacs (24 3)) (cl-lib (0 5)) (popup (0 5)) (ordinal (0 0 1))) "Right Click Context menu" single ((:commit . "4b1a2cd2b3eaea2393d3696a36da8f42e386c23d") (:keywords "mouse" "menu" "rightclick") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:url . "https://github.com/zonuexe/right-click-context"))]) +(rich-minority . [(20190419 1136) ((cl-lib (0 5))) "Clean-up and Beautify the list of minor-modes." single ((:commit . "a03e693f6f9232cf75363aaaf1cb041f21675c19") (:keywords "mode-line" "faces") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") (:url . "https://github.com/Malabarba/rich-minority"))]) +(rib-mode . [(20170726 1448) ((emacs (24))) "RenderMan® Interface Bytestream (RIB) Major Mode" single ((:commit . "97470158784c3c212e22e2c20b8471ee65ba59af") (:authors ("Remik Ziemlinski and Daniel Blezek" . "daniel.blezek@gmail.com")) (:maintainer "Remik Ziemlinski and Daniel Blezek" . "daniel.blezek@gmail.com") (:url . "https://github.com/blezek/rib-mode"))]) +(rhtml-mode . [(20130422 1311) nil "major mode for editing RHTML files" tar ((:commit . "a6d71b38a3db867ccf82999c99805db1a3a33c33"))]) +(rg . [(20191103 1443) ((cl-lib (0 5)) (emacs (25 1)) (s (1 10 0)) (transient (0 1 0)) (wgrep (2 1 10))) "A search tool based on ripgrep." tar ((:commit . "036675f6447efb4dbc7f220a85488c2f97a333b1") (:keywords "matching" "tools") (:authors ("David Landell" . "david.landell@sunnyhill.email") ("Roland McGrath" . "roland@gnu.org")) (:maintainer "David Landell" . "david.landell@sunnyhill.email") (:url . "https://github.com/dajva/rg.el"))]) +(rfc-mode . [(20190525 1910) ((emacs (25 1)) (helm (3 2))) "RFC document browser and viewer" single ((:commit . "e7d9e2f4cb9ff302231efe57af6fdc201e5b48f0") (:authors ("Nicolas Martyanoff" . "khaelin@gmail.com")) (:maintainer "Nicolas Martyanoff" . "khaelin@gmail.com") (:url . "https://github.com/galdor/rfc-mode"))]) +(reykjavik-theme . [(20180823 1544) ((emacs (24))) "Theme with a dark background." single ((:commit . "2cd0043ae6d046f812a95bb26398ea23141beccc") (:authors ("martin haesler")) (:maintainer "martin haesler"))]) +(review-mode . [(20190728 1435) nil "major mode for ReVIEW" single ((:commit . "3066beb9f3b7ef64da870b829bec8fe73e84b07c") (:authors ("Kenshi Muto" . "kmuto@debian.org")) (:maintainer "Kenshi Muto" . "kmuto@debian.org") (:url . "https://github.com/kmuto/review-el"))]) +(reverse-theme . [(20141205 145) nil "Reverse theme for Emacs" single ((:commit . "8319d0d5342890a3530ffa4daafdb7c35feda1ca") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-reverse-theme"))]) +(reverse-im . [(20191113 1509) ((emacs (25 1))) "Reverse mapping for keyboard layouts other than english." single ((:commit . "a04ce1236dd6bfaa0c520162e6c5a1017c099030") (:keywords "input" "method") (:url . "https://github.com/a13/reverse-im.el"))]) +(reveal-in-osx-finder . [(20150802 1657) nil "Reveal file associated with buffer in OS X Finder" single ((:commit . "5710e5936e47139a610ec9a06899f72e77ddc7bc") (:keywords "os x" "finder") (:authors ("Kazuki YOSHIDA")) (:maintainer "Kazuki YOSHIDA") (:url . "https://github.com/kaz-yos/reveal-in-osx-finder"))]) +(restclient-test . [(20180106 2046) ((emacs (24 4)) (restclient (0))) "Run tests with restclient.el" single ((:commit . "4518561bc9661fedacb6fb352e9677207f45c418") (:authors ("Simen Heggestøyl" . "simenheg@gmail.com")) (:maintainer "Simen Heggestøyl" . "simenheg@gmail.com") (:url . "https://github.com/simenheg/restclient-test.el"))]) +(restclient-helm . [(20170314 1554) ((restclient (0)) (helm (1 9 4))) "helm interface for restclient.el" single ((:commit . "e8ca809ace13549a1ddffb4e4aaa5d5fce750f3d") (:keywords "http" "helm") (:authors ("Pavel Kurnosov" . "pashky@gmail.com")) (:maintainer "Pavel Kurnosov" . "pashky@gmail.com"))]) +(restclient . [(20191009 1208) nil "An interactive HTTP client for Emacs" single ((:commit . "e8ca809ace13549a1ddffb4e4aaa5d5fce750f3d") (:keywords "http") (:authors ("Pavel Kurnosov" . "pashky@gmail.com")) (:maintainer "Pavel Kurnosov" . "pashky@gmail.com"))]) +(restart-emacs . [(20180601 1031) nil "Restart emacs from within emacs" single ((:commit . "9aa90d3df9e08bc420e1c9845ee3ff568e911bd9") (:keywords "convenience") (:authors ("Iqbal Ansari" . "iqbalansari02@yahoo.com")) (:maintainer "Iqbal Ansari" . "iqbalansari02@yahoo.com") (:url . "https://github.com/iqbalansari/restart-emacs"))]) +(resize-window . [(20180918 538) ((emacs (24)) (cl-lib (0 5))) "easily resize windows" single ((:commit . "72018aa4d2401b60120588199d4cedd0dc1fbcfb") (:keywords "window" "resize") (:authors ("Dan Sutton " . "danielsutton01@gmail.com")) (:maintainer "Dan Sutton " . "danielsutton01@gmail.com") (:url . "https://github.com/dpsutton/resize-mode"))]) +(requirejs-mode . [(20130215 2104) nil "Improved AMD module management" single ((:commit . "bbb0c09f8eb2d6a33c17319be8137f68bb16bc92") (:keywords "javascript" "amd" "requirejs") (:authors ("Marc-Olivier Ricard" . "marco.ricard@gmail.com")) (:maintainer "Marc-Olivier Ricard" . "marco.ricard@gmail.com"))]) +(requirejs . [(20151204 719) ((js2-mode (20150713)) (popup (0 5 3)) (s (1 9 0)) (cl-lib (0 5)) (yasnippet (20151011 1823))) "Requirejs import manipulation and source traversal." tar ((:commit . "4ea2a5fcbc76e4cbb6a7461e6f05f019b75865b1") (:keywords "javascript" "requirejs") (:authors ("Joe Heyming" . "joeheyming@gmail.com")) (:maintainer "Joe Heyming" . "joeheyming@gmail.com") (:url . "https://github.com/joeheyming/requirejs-emacs"))]) +(request-deferred . [(20181129 317) ((deferred (0 3 1)) (request (0 2 0))) "Wrap request.el by deferred" single ((:commit . "005f08ffbb533795f1b7dde4c4ab8d6a0de15adc") (:authors ("Takafumi Arakaki ")) (:maintainer "Takafumi Arakaki ") (:url . "https://github.com/tkf/emacs-request"))]) +(request . [(20191122 1416) ((emacs (24 4))) "Compatible layer for URL request in Emacs" single ((:commit . "005f08ffbb533795f1b7dde4c4ab8d6a0de15adc") (:authors ("Takafumi Arakaki ")) (:maintainer "Takafumi Arakaki ") (:url . "https://github.com/tkf/emacs-request"))]) +(req-package . [(20180122 500) ((use-package (1 0)) (dash (2 7 0)) (log4e (0 2 0)) (ht (0))) "A use-package wrapper for package runtime dependencies management" tar ((:commit . "0c0ac7451149dac6bfda2adfe959d1df1c273de6") (:keywords "dotemacs" "startup" "speed" "config" "package") (:authors ("Edward Knyshov" . "edvorg@gmail.com")) (:maintainer "Edward Knyshov" . "edvorg@gmail.com") (:url . "https://github.com/edvorg/req-package"))]) +(repo . [(20190326 1644) ((emacs (24 3))) "Running repo from Emacs" single ((:commit . "c53c06169dec4e556982fb06ca780ca4708dc436") (:keywords "convenience") (:authors ("Damien Merenne")) (:maintainer "Damien Merenne") (:url . "https://github.com/canatella/repo-el"))]) +(replace-with-inflections . [(20180831 635) ((cl-lib (0 5)) (string-inflection (1 0 10)) (inflections (1 1))) "Inflection aware `query-replace'" single ((:commit . "d9201e047856492f282da65459b28aba25998dbb") (:keywords "matching") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:url . "https://github.com/knu/replace-with-inflections.el"))]) +(replace-symbol . [(20160518 12) nil "Rename symbols in expressions or buffers" single ((:commit . "baf949e528aee1881f455f9c84e67718bedcb3f6") (:authors ("Brian Mastenbrook" . "brian@mastenbrook.net")) (:maintainer "Brian Mastenbrook" . "brian@mastenbrook.net") (:url . "https://github.com/bmastenbrook/replace-symbol-el"))]) +(replace-pairs . [(20160207 1251) ((emacs (24 4))) "Query-replace pairs of things" single ((:commit . "acfb254dddffcee4250092fab9394ef2b42ffbc0") (:authors ("David Shepherd" . "davidshepherd7@gmail.com")) (:maintainer "David Shepherd" . "davidshepherd7@gmail.com") (:url . "https://github.com/davidshepherd7/replace-pairs"))]) +(replace-from-region . [(20170227 2316) nil "Replace commands whose query is from region" single ((:commit . "dc9318b9b2822da7b00ecc34d1dc965c8f96c9bb") (:keywords "replace" "search" "region") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:url . "http://www.emacswiki.org/emacs/download/replace-from-region.el"))]) +(repl-toggle . [(20190430 713) ((fullframe (0 0 5))) "Switch to/from repl buffer for current major-mode" single ((:commit . "a36caac7649fbffbe30f7b06541c9efd723563fc") (:keywords "repl" "buffers" "toggle") (:authors ("Tom Regner" . "tom@goochesa.de")) (:maintainer "Tom Regner" . "tom@goochesa.de"))]) +(repeater . [(20180418 1212) ((emacs (24 4))) "Repeat recent repeated commands" single ((:commit . "854b874542b186b2408cbc58ad0591fe8eb70b6c") (:keywords "convenience") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/repeater"))]) +(repeatable-motion . [(20170620 1848) ((emacs (24))) "Make repeatable versions of motions" tar ((:commit . "f29effdc4121c2dc7e3fec9b3a62debce29cda9d") (:keywords "motion" "repeatable") (:authors ("William Hatch" . "willghatch@gmail.com")) (:maintainer "William Hatch" . "willghatch@gmail.com") (:url . "https://github.com/willghatch/emacs-repeatable-motion"))]) +(renpy . [(20190419 1749) nil "silly walks for Renpy" single ((:commit . "943e1af71d23128ff100d41d178ccffe28f97944") (:keywords "languages") (:authors ("PyTom" . "pytom@bishoujo.us")) (:maintainer "Dave Love" . "fx@gnu.org") (:url . "https://github.com/billywade/renpy-mode"))]) +(remember-last-theme . [(20170619 2133) ((emacs (24 4))) "Remember the last used theme between sessions." single ((:commit . "0973f1aa6b96355fa376fffe8b45733b6e963c51") (:keywords "convenience" "faces") (:authors ("Anler Hernández Peral" . "inbox+emacs@anler.me")) (:maintainer "Anler Hernández Peral" . "inbox+emacs@anler.me") (:url . "https://github.com/anler/remember-last-theme"))]) +(remark-mode . [(20191103 1825) ((emacs (25 1)) (markdown-mode (2 0))) "Major mode for the remark slideshow tool" tar ((:commit . "e80a1b78304045dec3eceffb6c8cbaf2b6c7b57a") (:keywords "remark" "slideshow" "markdown" "hot reload") (:authors ("@torgeir")) (:maintainer "@torgeir"))]) +(relax . [(20131029 2134) ((json (1 2))) "For browsing and interacting with CouchDB" single ((:commit . "6e33892623ab87833082262321dc8e1977209626") (:keywords "database" "http") (:authors ("Phil Hagelberg")) (:maintainer "Phil Hagelberg") (:url . "http://github.com/technomancy/relax.el"))]) +(relative-buffers . [(20191004 1205) ((cl-lib (0 5)) (dash (2 6 0)) (s (1 9 0)) (f (0 16 2))) "Emacs buffers naming convention" single ((:commit . "6064cd0b3cbd42c4a46c70fc396f05be71f42bd6") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/relative-buffers"))]) +(related . [(20190327 1024) ((cl-lib (0 5))) "Switch back and forth between similarly named buffers." single ((:commit . "546c7e811b290470288b617f2c27106bd83ccd33") (:keywords "file" "buffer" "switch" "selection" "matching" "convenience") (:authors ("Julien Montmartin")) (:maintainer "Julien Montmartin") (:url . "https://github.com/julien-montmartin/related"))]) +(register-channel . [(20180926 2349) nil "Jump around fast using registers" single ((:commit . "9272923757402d177a0b2deab1d9c3c74601c48e") (:keywords "convenience") (:authors ("Yang Zhao" . "YangZhao11@users.noreply.github.com")) (:maintainer "Yang Zhao" . "YangZhao11@users.noreply.github.com"))]) +(region-state . [(20181205 1746) nil "Show the number of chars/lines or rows/columns in the region" single ((:commit . "8c636b655eef45e0015684699737d31e15450000") (:keywords "convenience") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/region-state.el"))]) +(region-occurrences-highlighter . [(20190905 730) ((emacs (24))) "Mark occurrences of current region (selection)." single ((:commit . "ee86d6a79342c6e4b3cfad5ec73cb0a40e18ae3d") (:keywords "convenience") (:authors ("Ãlvaro González Sotillo" . "alvarogonzalezsotillo@gmail.com")) (:maintainer "Ãlvaro González Sotillo" . "alvarogonzalezsotillo@gmail.com") (:url . "https://github.com/alvarogonzalezsotillo/region-occurrences-highlighter"))]) +(region-convert . [(20181221 528) nil "Convert string in region by Lisp function" single ((:commit . "a50a0828a989fc1788a32946249a3758793156b3") (:keywords "region" "convenience") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:url . "https://github.com/zonuexe/right-click-context"))]) +(region-bindings-mode . [(20140407 2214) nil "Enable custom bindings when mark is active." single ((:commit . "3fa5dbdbd7c000bebff6d9d14a4be326ec24b6fc") (:keywords "convenience") (:authors ("Fabián E. Gallina" . "fabian@anue.biz")) (:maintainer "Fabián E. Gallina" . "fabian@anue.biz") (:url . "https://github.com/fgallina/region-bindings-mode"))]) +(regex-tool . [(20170104 1918) nil "A regular expression evaluation tool for programmers" single ((:commit . "0b4a0111143c88ef94bec56624cb2e00c1a054e6") (:keywords "regex" "languages" "programming" "development") (:authors ("John Wiegley" . "johnw@newartisans.com")) (:maintainer "John Wiegley" . "johnw@newartisans.com") (:url . "http://www.newartisans.com/"))]) +(regex-dsl . [(20100124 1028) nil "lisp syntax for regexps" single ((:commit . "ac89ab8b7691a165ef3007cb84417125cfc0632e") (:authors ("Aliaksey Kandratsenka" . "alk@tut.by")) (:maintainer "Aliaksey Kandratsenka" . "alk@tut.by"))]) +(reformatter . [(20191103 357) ((emacs (24 3))) "Define commands which run reformatters on the current buffer" single ((:commit . "6c5e7f64c5ac1178dff5ca28d9809c08398fb3e6") (:keywords "convenience" "tools") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/reformatter.el"))]) +(refine . [(20180315 2228) ((emacs (24 3)) (s (1 11 0)) (dash (2 12 0)) (list-utils (0 4 4)) (loop (1 2))) "interactive value editing" single ((:commit . "0a99439a0b4ed6f79b9a240ea1270140a9e328bc") (:keywords "convenience") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) +(redtt . [(20181121 21) ((emacs (25 3))) "Major mode for editing redtt proofs" single ((:commit . "0904065857c4388c18d1eacca89769e566d36a9f") (:keywords "languages") (:authors ("Jonathan Sterling" . "jon@jonmsterling.com")) (:maintainer "Jonathan Sterling" . "jon@jonmsterling.com") (:url . "http://github.com/RedPRL/redtt"))]) +(redtick . [(20180424 2136) ((emacs (24 4))) "Smallest pomodoro timer (1 char)" tar ((:commit . "94b4cd43ac20c64dcac96edac2c1a3b9fcc59bb9") (:keywords "calendar") (:authors ("F. Febles")) (:maintainer "F. Febles") (:url . "http://github.com/ferfebles/redtick"))]) +(redshank . [(20180730 407) ((paredit (21))) "Common Lisp Editing Extensions" tar ((:commit . "d059c5841044aa163664f8bf87c1d981bf0a04fe") (:keywords "languages" "lisp") (:authors ("Michael Weber" . "michaelw@foldr.org")) (:maintainer "Michael Weber" . "michaelw@foldr.org"))]) +(redprl . [(20180418 1434) ((emacs (24 3))) "Major mode for editing RedPRL proofs and interacting with RedPRL" single ((:commit . "c72190de76f7ed1cfbe1d2046c96e99ac5022b0c") (:keywords "languages") (:authors ("Jonathan Sterling" . "jon@jonmsterling.com")) (:maintainer "Jonathan Sterling" . "jon@jonmsterling.com"))]) +(redpen-paragraph . [(20160625 1050) ((emacs (24)) (cl-lib (0 5)) (json (1 4))) "RedPen interface." single ((:commit . "770ffb34b04bfa0ea8484fa1506e96c530168e13") (:keywords "document" "proofreading" "help") (:authors ("karronoli")) (:maintainer "karronoli") (:url . "https://github.com/karronoli/redpen-paragraph.el"))]) +(redis . [(20150531 1948) ((emacs (24)) (cl-lib (0 5))) "Redis integration" single ((:commit . "2c33f3397bc14e7a8192867b55920492d4eead8c") (:keywords "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:url . "https://github.com/emacs-pe/redis.el"))]) +(recursive-narrow . [(20190306 1521) nil "narrow-to-region that operates recursively" single ((:commit . "5e3e2067d5a148d7e64e64e0355d3b6860e4c259") (:authors ("Nathaniel Flath" . "flat0103@gmail.com")) (:maintainer "Nathaniel Flath" . "flat0103@gmail.com") (:url . "http://github.com/nflath/recursive-narrow"))]) +(rectangle-utils . [(20190411 1757) ((emacs (24)) (cl-lib (0 5))) "Some useful rectangle functions." single ((:commit . "46f7e73340fee40c1ab9a4e766a08ae3fce83ebe") (:authors ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com") (:url . "https://github.com/thierryvolpiatto/rectangle-utils"))]) +(rect+ . [(20150621 44) nil "Extensions to rect.el" single ((:commit . "299b742faa0bc4448e0d5fe9cb98ab1eb93b8dcc") (:keywords "extensions" "data" "tools") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:url . "https://github.com/mhayashi1120/Emacs-rectplus"))]) +(recover-buffers . [(20171009 437) nil "revisit all buffers from an auto-save file" tar ((:commit . "81a5cb53099955ebc2a411a44cba5a394ee3f2d1") (:authors ("era eriksson ")) (:maintainer "era eriksson "))]) +(recompile-on-save . [(20151126 1446) ((dash (1 1 0)) (cl-lib (0 5))) "Trigger recompilation on file save." single ((:commit . "92e11446869d878803d4f3dec5d2101380c12bb2") (:keywords "convenience" "files" "processes" "tools") (:authors ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainer "Marian Schubert" . "marian.schubert@gmail.com") (:url . "https://github.com/maio/recompile-on-save.el"))]) +(recently . [(20190317 1234) ((cl-lib (0 5)) (emacs (24))) "Track recently opened files to visit them again" single ((:commit . "7b5d1128becb387d759a3a95f6afb9ef54be792a") (:keywords "utility" "files") (:authors ("10sr <8.slashes [at] gmail [dot] com>")) (:maintainer "10sr <8.slashes [at] gmail [dot] com>") (:url . "https://github.com/10sr/recently-el"))]) +(recentf-remove-sudo-tramp-prefix . [(20180205 556) ((emacs (24 4))) "Normalise recentf history" single ((:commit . "6cb762efbd0aa323f96c687b6bebc9bf00a3ceb3") (:authors ("ncaq" . "ncaq@ncaq.net")) (:maintainer "ncaq" . "ncaq@ncaq.net") (:url . "https://github.com/ncaq/recentf-remove-sudo-tramp-prefix"))]) +(recentf-ext . [(20170926 35) nil "Recentf extensions" single ((:commit . "450de5f8544ed6414e88d4924d7daa5caa55b7fe") (:keywords "convenience" "files") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/recentf-ext.el"))]) +(rebox2 . [(20121113 1300) nil "Handling of comment boxes in various styles." single ((:commit . "00634eca420cc48657b81e40e599ff8548083985") (:authors ("François Pinard") ("Le Wang")) (:maintainer "Le Wang (lewang.emacs!!!gmayo.com remove exclamations, correct host, hint: google mail)") (:url . "https://github.com/lewang/rebox2"))]) +(rebecca-theme . [(20180324 821) ((emacs (24))) "Rebecca Purple Theme" single ((:commit . "9ac0c71c2858b76dc5499f62c7c7fb7f9e8f16bc") (:keywords "theme" "dark") (:authors ("vic" . "vborja@apache.org")) (:maintainer "vic" . "vborja@apache.org") (:url . "https://github.com/vic/rebecca-theme"))]) +(reazon . [(20180921 1437) ((emacs (26))) "miniKanren for Emacs" tar ((:commit . "020be6467a83957adcbdcb192b61f2c76a94079b") (:keywords "languages" "extensions" "lisp") (:authors ("Nick Drozd" . "nicholasdrozd@gmail.com")) (:maintainer "Nick Drozd" . "nicholasdrozd@gmail.com") (:url . "https://github.com/nickdrozd/reazon"))]) +(reason-mode . [(20190710 1037) ((emacs (24 3))) "A major mode for editing ReasonML" tar ((:commit . "5e6205cfede8c10c6821dfd9f9757a9d8035ec04") (:keywords "languages" "ocaml") (:authors ("Mozilla")) (:maintainer "Mozilla") (:url . "https://github.com/reasonml-editor/reason-mode"))]) +(reaper . [(20190920 2209) ((emacs (24 3))) "Interact with Harvest time tracking app" single ((:commit . "1c58c96380b8dc31002bbc87100c3faecfa01f1b") (:keywords "tools") (:authors ("Thomas Fini Hansen" . "xen@xen.dk")) (:maintainer "Thomas Fini Hansen" . "xen@xen.dk") (:url . "https://github.com/xendk/reaper"))]) +(realgud-trepan-ni . [(20190912 1418) ((load-relative (1 2)) (realgud (1 5 0)) (emacs (25))) "Realgud front-end to trepan-ni" tar ((:commit . "6e9cac5e8097018aadf41c88de541168036cc227") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:url . "http://github.com/realgud/realgud-trepan-ni"))]) +(realgud-rdb2 . [(20190520 1146) ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) (emacs (24))) "Realgud front-end for interacting with Ruby debugger2" tar ((:commit . "3594aa74f7afda3c3251bb2af7fe0e8ec6d621ae") (:authors ("Rocky Bernstein")) (:maintainer "Rocky Bernstein") (:url . "http://github.com/rocky/realgud-ruby-debugger2"))]) +(realgud-pry . [(20190520 1139) ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) (emacs (24))) "Realgud front-end to the Ruby pry debugger" tar ((:commit . "fe04c0e1e1ce33361d12ad6f9bcf493f3fe228e0") (:authors ("Rocky Bernstein")) (:maintainer "Rocky Bernstein") (:url . "http://github.com/rocky/realgud-pry"))]) +(realgud-old-debuggers . [(20190520 1150) ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) (emacs (24))) "Realgud front-end to older lesser-used debuggers" tar ((:commit . "0fad38283e885c452160232e01adf3f6ae51983b") (:authors ("Rocky Bernstein")) (:maintainer "Rocky Bernstein") (:url . "http://github.com/rocky/realgud-old-debuggers"))]) +(realgud-node-inspect . [(20190523 1251) ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) (emacs (24))) "Realgud front-end to newer \"node inspect\"" tar ((:commit . "c3ed48cf3bc2b28f9fd23bcf60ea13a3cf019fc8") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:url . "http://github.com/realgud/realgud-node-inspect"))]) +(realgud-node-debug . [(20190525 1634) ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) (emacs (25))) "Realgud front-end to older \"node debug\"" tar ((:commit . "72e786359ce9dace1796b0d81a00e9340e9c90ad") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:url . "http://github.com/realgud/realgud-node-debug"))]) +(realgud-lldb . [(20190912 1335) ((load-relative (1 3 1)) (realgud (1 5 0)) (emacs (25))) "Realgud front-end to lldb" tar ((:commit . "47cb0178fdde50a9d9151ab45806b41007cd758a") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:url . "http://github.com/realgud/realgud-lldb"))]) +(realgud-jdb . [(20190625 1911) ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) (emacs (25))) "Realgud front-end to Java's jdb debugger\"" tar ((:commit . "8cfe452f5028f3ac0f6e0ae7fa03c2a31d197ded") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:url . "http://github.com/realgud/realgud-jdb"))]) +(realgud-ipdb . [(20191115 1116) ((realgud (1 5 0)) (load-relative (1 3 1)) (emacs (25))) "Realgud front-end to ipdb" tar ((:commit . "347090928d7866a9909208c5bbe2cb8fa7b55cd7") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:url . "http://github.com/rocky/realgud-ipdb"))]) +(realgud-byebug . [(20190520 1140) ((realgud (1 4 5)) (load-relative (1 2)) (cl-lib (0 5)) (emacs (24))) "Realgud front-end to the Ruby byebug debugger" tar ((:commit . "f8f20b92c6b13f75cc9797921c0e28d3def48b1c") (:authors ("Rocky Bernstein")) (:maintainer "Rocky Bernstein") (:url . "http://github.com/rocky/realgud-byebug"))]) +(realgud . [(20190912 744) ((load-relative (1 3 1)) (loc-changes (1 2)) (test-simple (1 3 0)) (emacs (25))) "A modular front-end for interacting with external debuggers" tar ((:commit . "703cd5de5469a7bd511cad9e36dfc85f0cc8524c") (:keywords "debugger" "gdb" "python" "perl" "go" "bash" "zsh" "bashdb" "zshdb" "remake" "trepan" "perldb" "pdb") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:url . "http://github.com/realgud/realgud/"))]) +(real-auto-save . [(20190224 1446) nil "Automatically save your all your buffers/files at regular intervals." single ((:commit . "824ad04121493723b08838c8b96559947dca7ed9") (:authors ("Chaoji Li ") ("Anand Reddy Pandikunta ")) (:maintainer "Chaoji Li "))]) +(readline-complete . [(20150708 1437) nil "offers completions in shell mode" single ((:commit . "30c020c37b2741160cc37e656e13c85d826a0ebf") (:authors ("Christopher Monsanto" . "chris@monsan.to")) (:maintainer "Christopher Monsanto" . "chris@monsan.to"))]) +(readability . [(20140716 27) ((oauth (1 4)) (ov (1 0)) (emacs (24 3))) "Read articles from Readability in Emacs" single ((:commit . "6c220ab8e0ca63946574ed892add5c8fd14002ce") (:keywords "readability" "oauth") (:authors ("Shingo Fukuyama - http://fukuyama.co")) (:maintainer "Shingo Fukuyama - http://fukuyama.co") (:url . "https://github.com/ShingoFukuyama/emacs-readability"))]) +(read-aloud . [(20160923 500) ((emacs (24 4))) "A simple interface to TTS engines" single ((:commit . "c662366226abfb07204ab442b4f853ed85438d8a") (:keywords "multimedia") (:authors ("Alexander Gromnitsky" . "alexander.gromnitsky@gmail.com")) (:maintainer "Alexander Gromnitsky" . "alexander.gromnitsky@gmail.com") (:url . "https://github.com/gromnitsky/read-aloud.el"))]) +(react-snippets . [(20181002 1046) ((yasnippet (0 7 0))) "Yasnippets for React" tar ((:commit . "87ccb640d265fe799583ab55605b84d113223694"))]) +(rdxmk . [(20170630 134) nil "A small set of tools for redox developments" tar ((:commit . "e78749fb29738365ffa4d863ffabeb969ebb0bcf") (:keywords "redox" "convenience" "tools") (:authors ("Jacob Salzberg" . "jsalzbergedu@yahoo.com")) (:maintainer "Jacob Salzberg" . "jsalzbergedu@yahoo.com") (:url . "https://github.com/jsalzbergedu/rdxmk"))]) +(rdp . [(20120929 154) nil "Recursive Descent Parser library" single ((:commit . "b620192afada04aec33b38cc130fef0765f41ca9") (:authors ("Christopher Wellons" . "mosquitopsu@gmail.com")) (:maintainer "Christopher Wellons" . "mosquitopsu@gmail.com") (:url . "https://github.com/skeeto/rdp"))]) +(rdf-prefix . [(20190511 1212) nil "Prefix lookup for RDF" single ((:commit . "6daf675d96aa4a0bc78adc93560b791a77651b22") (:keywords "convenience" "abbrev") (:authors ("Simen Heggestøyl" . "simenheg@gmail.com")) (:maintainer "Simen Heggestøyl" . "simenheg@gmail.com") (:url . "https://github.com/simenheg/rdf-prefix"))]) +(rcirc-styles . [(20160207 250) ((cl-lib (0 5))) "support mIRC-style color and attribute codes" single ((:commit . "f313bf6a7470bed314b27c7a40558cb787d7bc67"))]) +(rcirc-notify . [(20150219 2204) nil "libnotify popups" single ((:commit . "841a7b5a6cdb0c11a812df924d2c6a7d364fd455") (:keywords "lisp" "rcirc" "irc" "notify" "growl") (:authors ("Will Farrington, Alex Schroeder , Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk"))]) +(rcirc-groups . [(20170731 2101) nil "an emacs buffer in rcirc-groups major mode" single ((:commit . "b68ece9d219b909244d4e3c0d8bf6a746d6fead7") (:keywords "comm" "convenience") (:authors ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainer "Dimitri Fontaine" . "dim@tapoueh.org") (:url . "http://tapoueh.org/emacs/rcirc-groups.html"))]) +(rcirc-alertify . [(20140407 119) ((alert (20140406 1353))) "Cross platform notifications for rcirc" single ((:commit . "ea5cafc55893f375eccbe013d12dbaa94bf6e259") (:keywords "comm" "convenience") (:authors ("Fabián Ezequiel Gallina" . "fgallina@gnu.org")) (:maintainer "Fabián Ezequiel Gallina" . "fgallina@gnu.org"))]) +(rcirc-alert . [(20141127 1047) nil "Configurable alert messages on top of RCIRC" tar ((:commit . "0adf8ff9c47023fec578f678424be62b0f49057f") (:keywords "lisp" "rcirc" "irc" "alert" "awesome") (:maintainer "Cayetano Santos"))]) +(rc-mode . [(20160913 1918) nil "Major mode for the Plan9 rc shell" single ((:commit . "fe2e0570bf9c19a292e16b18fd4b0a256df5d93f") (:keywords "rc" "plan9" "shell") (:authors ("Jordan Brown")) (:maintainer "Jordan Brown") (:url . "https://github.com/mrhmouse/rc-mode.el"))]) +(rbtagger . [(20191115 1858) ((emacs (25 1))) "Ruby tagging tools" tar ((:commit . "e46137e36a3bdba8dd4d27017b194a8524c7375b") (:keywords "languages" "tools") (:authors ("Thiago Araújo" . "thiagoaraujos@gmail.com")) (:maintainer "Thiago Araújo" . "thiagoaraujos@gmail.com") (:url . "https://www.github.com/thiagoa/rbtagger"))]) +(rbt . [(20170202 2302) ((popup (0 5 3)) (magit (20160128 1201))) "Integrate reviewboard with emacs." single ((:commit . "32bfba9062a014e375451cf4203c29535b5efc1e") (:keywords "reviewboard" "rbt") (:authors ("Joe Heyming" . "joeheyming@gmail.com")) (:maintainer "Joe Heyming" . "joeheyming@gmail.com"))]) +(rbenv . [(20141120 749) nil "Emacs integration for rbenv" single ((:commit . "2ea1a5bdc1266caef1dd77700f2c8f42429b03f1") (:keywords "ruby" "rbenv") (:authors ("Yves Senn" . "yves.senn@gmail.com")) (:maintainer "Yves Senn" . "yves.senn@gmail.com") (:url . "https://github.com/senny/rbenv.el"))]) +(rats . [(20170818 1013) ((s (1 10 0)) (go-mode (1 3 1)) (cl-lib (0 5))) "Rapid testing suite for Go" single ((:commit . "a6d55aebcc54f669c6c6ffedf84364c4097903cc") (:keywords "go") (:authors ("Antoine Kalmbach" . "ane@iki.fi")) (:maintainer "Antoine Kalmbach" . "ane@iki.fi"))]) +(rase . [(20120928 2045) nil "Run At Sun Event daemon" single ((:commit . "59b5f7e8102570b65040e8d55781c7ea28de7338") (:keywords "solar" "sunrise" "sunset" "midday" "midnight") (:authors ("Andrey Kotlarski" . "m00naticus@gmail.com")) (:maintainer "Andrey Kotlarski" . "m00naticus@gmail.com") (:url . "https://github.com/m00natic/rase/"))]) +(ranger . [(20190412 624) ((emacs (24 4))) "Make dired more like ranger" single ((:commit . "c3f349e52f5c50926dc0f285c97676934f50bc18") (:keywords "files" "convenience" "dired") (:authors ("Rich Alesi ")) (:maintainer "Rich Alesi ") (:url . "https://github.com/ralesi/ranger"))]) +(random-splash-image . [(20151003 130) nil "Randomly sets splash image to *GNU Emacs* buffer on startup." single ((:commit . "53a39ebfd8ac6be066a652a508a717870f94218a") (:keywords "games") (:authors ("kakakaya ")) (:maintainer "kakakaya ") (:url . "https://github.com/kakakaya/random-splash-image"))]) +(rand-theme . [(20151219 2335) ((cl-lib (0 5))) "Random Emacs theme at start-up!" single ((:commit . "65a00e5c5150f857aa96803b68f50bc8da0215b7") (:authors ("Daniel Gopar")) (:maintainer "Daniel Gopar") (:url . "https://github.com/gopar/rand-theme"))]) +(rally-mode . [(20161114 354) ((popwin (1 0 0))) "a mode to interact with the Rally Software web site." single ((:commit . "0f5e09a6abe2de7613f174b4f54863df93343134") (:keywords "rally" "ca" "agile") (:authors ("Sean LeBlanc" . "seanleblanc@gmail.com")) (:maintainer "Sean LeBlanc" . "seanleblanc@gmail.com") (:url . "https://pragcraft.wordpress.com/"))]) +(rake . [(20180212 1008) ((f (0 13 0)) (dash (1 5 0)) (cl-lib (0 5))) "Run rake commands" single ((:commit . "9c204334b03b4e899fadae6e59c20cf105404128") (:keywords "rake" "ruby") (:authors ("Adam Sokolnicki" . "adam.sokolnicki@gmail.com")) (:maintainer "Adam Sokolnicki" . "adam.sokolnicki@gmail.com") (:url . "https://github.com/asok/rake.el"))]) +(rainbow-identifiers . [(20141102 1526) ((emacs (24))) "Highlight identifiers according to their names" single ((:commit . "19fbfded1baa98d12335f26f6d7b20e5ae44ce2e") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:url . "https://github.com/Fanael/rainbow-identifiers"))]) +(rainbow-delimiters . [(20191018 1233) nil "Highlight brackets according to their depth" single ((:commit . "5125f4e47604ad36c3eb4706310fcafac729ca8c") (:keywords "faces" "convenience" "lisp" "tools") (:authors ("Jeremy Rayman" . "opensource@jeremyrayman.com") ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:url . "https://github.com/Fanael/rainbow-delimiters"))]) +(rainbow-blocks . [(20171025 1438) nil "Block syntax highlighting for lisp code" single ((:commit . "dd435d7bb34ff6f162a5f315df308b90b7e9f842") (:authors ("istib")) (:maintainer "istib") (:url . "https://github.com/istib/rainbow-blocks"))]) +(railscasts-theme . [(20150219 1525) nil "Railscasts color theme for GNU Emacs." single ((:commit . "1340c3f6c2717761cab95617cf8dcbd962b1095b") (:keywords "railscasts" "color" "theme") (:authors ("Oleg Shaldybin")) (:maintainer "Oleg Shaldybin") (:url . "https://github.com/mikenichols/railscasts-theme"))]) +(railscasts-reloaded-theme . [(20190308 759) nil "Railscasts Reloaded color theme" single ((:commit . "c6a1cf13a164f22b026b0959527c3b98c2b1aa49") (:authors ("George Thomas" . "iamgeorgethomas@gmail.com")) (:maintainer "George Thomas" . "iamgeorgethomas@gmail.com") (:url . "https://github.com/thegeorgeous/railscasts-reloaded-theme"))]) +(rails-log-mode . [(20140408 425) nil "Major mode for viewing Rails log files" single ((:commit . "ff440003ad7d47cb0ac3300f2a632f4cfd36a446") (:keywords "rails" "log") (:authors ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainer "Anantha kumaran" . "ananthakumaran@gmail.com"))]) +(racket-mode . [(20191112 1417) ((emacs (24 3)) (faceup (0 0 2))) "Major mode for Racket language." tar ((:commit . "94096f40e5a11195974d614bb140c062b56038dc") (:authors ("Greg Hendershott")) (:maintainer "Greg Hendershott") (:url . "https://www.racket-mode.com/"))]) +(racer . [(20191001 2344) ((emacs (25 1)) (rust-mode (0 2 0)) (dash (2 13 0)) (s (1 10 0)) (f (0 18 2)) (pos-tip (0 4 6))) "code completion, goto-definition and docs browsing for Rust via racer" single ((:commit . "a0bdf778f01e8c4b8a92591447257422ac0b455b") (:keywords "abbrev" "convenience" "matching" "rust" "tools") (:authors ("Phil Dawes")) (:maintainer "Phil Dawes") (:url . "https://github.com/racer-rust/emacs-racer"))]) +(r-autoyas . [(20140101 1510) ((ess (0)) (yasnippet (0 8 0))) "Provides automatically created yasnippets for R function argument lists." tar ((:commit . "b4020ee7f5f895e0065b8b26da8a49c51432d530") (:keywords "r" "yasnippet") (:authors ("Sven Hartenstein & Matthew Fidler")) (:maintainer "Matthew Fidler") (:url . "https://github.com/mlf176f2/r-autoyas.el"))]) +(quiz . [(20190525 1206) ((cl-lib (0 5)) (emacs (25))) "Multiple choice quiz game" single ((:commit . "570bf53926d89282cdb9653bd5aa8fe968f92bbd") (:keywords "games" "trivia" "quiz") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:url . "https://github.com/davep/quiz.el"))]) +(quilt . [(20190828 506) ((emacs (26 0))) "Minor mode for working with files in quilt" single ((:commit . "b56a1f1acc46cdf8655710e4c8f24f5f31f22c6a") (:keywords "extensions") (:authors ("Matt Mackall" . "mpm@selenic.com")) (:maintainer "Jan Stranik" . "jan@stranik.org") (:url . "https://github.com/jstranik/emacs-quilt"))]) +(quiet . [(20160508 1256) nil "disconnect from the online world for a while" single ((:commit . "6f20309f99e26fcae2601d1544b342f044e54baf") (:keywords "quiet" "distraction" "network" "detachment" "offline") (:authors ("nik gaffney" . "nik@fo.am")) (:maintainer "nik gaffney" . "nik@fo.am") (:url . "https://github.com/zzkt/quiet"))]) +(quickrun . [(20170223 115) ((emacs (24 3))) "Run commands quickly" single ((:commit . "55bbe5d54b80206ea5a60bf2f58eb6368b2c8201") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-quickrun"))]) +(quickref . [(20170817 1232) ((dash (1 0 3)) (s (1 0 0))) "Display relevant notes-to-self in the echo area" single ((:commit . "f368c8b8219bb90498c5ab84e26f00eedaa234cf") (:authors ("Kyle Hargraves")) (:maintainer "Kyle Hargraves") (:url . "https://github.com/pd/quickref.el"))]) +(quick-shell-keybind . [(20171023 613) ((emacs (24))) "Interactively bind a key to shell commands" single ((:commit . "5f4541a5a5554d108bf16b5fd1713e962161ca1b") (:keywords "maint" "convenience" "processes") (:authors ("eyeinsky" . "eyeinsky9@gmail.com")) (:maintainer "eyeinsky" . "eyeinsky9@gmail.com") (:url . "https://github.com/eyeinsky/quick-shell-keybind"))]) +(quick-preview . [(20150829 439) nil "quick preview using GNOME sushi, gloobus or quick look" single ((:commit . "29c884c6ab385ef67d9aa656ebb7c94cabeb5c35") (:keywords "files" "hypermedia") (:authors ("myuhe ")) (:maintainer "myuhe") (:url . "https://github.com/myuhe/quick-preview.el"))]) +(quick-peek . [(20190208 1515) ((emacs (24 3))) "Inline quick-peek windows" single ((:commit . "fd8a6c81422932539d221f39f18c90f2811f2dd9") (:keywords "tools" "help" "doc" "convenience") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com"))]) +(quick-buffer-switch . [(20151007 2208) nil "Quick switch to file or dir buffers." single ((:commit . "d5fdd67b4c9f04b7a7122da2215e4ae076a03b1b") (:keywords "emacs" "configuration") (:authors ("Sebastien Gross ")) (:maintainer "Sebastien Gross "))]) +(quelpa-use-package . [(20190210 1838) ((emacs (24 3)) (quelpa (0)) (use-package (2))) "quelpa handler for use-package" single ((:commit . "6f3cc87caa6cb8795079c5cab3c6665970859098") (:keywords "package" "management" "elpa" "use-package") (:authors ("steckerhalter")) (:maintainer "steckerhalter") (:url . "https://framagit.org/steckerhalter/quelpa-use-package"))]) +(quelpa . [(20191014 628) ((emacs (24 3))) "Emacs Lisp packages built directly from source" tar ((:commit . "0c4dab17591b15cea7dccf905afac9991f3b4971") (:keywords "package" "management" "build" "source" "elpa") (:authors ("steckerhalter")) (:maintainer "steckerhalter") (:url . "https://framagit.org/steckerhalter/quelpa"))]) +(quasi-monochrome-theme . [(20181213 827) nil "Quasi Monochrome theme" tar ((:commit . "68060dbbc0bbfe4924387392874186c5a29bb434") (:keywords "color" "theme" "monochrome"))]) +(quack . [(20181106 1301) nil "enhanced support for editing and running Scheme code" single ((:commit . "2146805ce2b5a9b155d73929986f11e713787e26"))]) +(qt-pro-mode . [(20170604 1841) ((emacs (24))) "Qt Pro/Pri major mode" single ((:commit . "7a2da323de834294b413cbbb3c92f42f54913643") (:keywords "extensions") (:authors ("Todd Neal" . "tolchz@gmail.com")) (:maintainer "Todd Neal" . "tolchz@gmail.com"))]) +(qml-mode . [(20161016 31) nil "Major mode for editing QT Declarative (QML) code." single ((:commit . "6c5f33ba88ae010bf201a80ee8095e20a724558c") (:keywords "qml" "qt" "qt declarative") (:authors ("Yen-Chin Lee" . "coldnew.tw@gmail.com")) (:maintainer "Yen-Chin Lee" . "coldnew.tw@gmail.com") (:url . "https://github.com/coldnew/qml-mode"))]) +(ql . [(20180418 2020) ((emacs (24))) "Control Quod Libet" single ((:commit . "d976414ba6aa576ad524b5ee5bfa620efd072258") (:keywords "multimedia") (:authors ("Ian Eure" . "ian.eure@gmail.com")) (:maintainer "Ian Eure" . "ian.eure@gmail.com") (:url . "https://github.com/ieure/ql-el"))]) +(qiita . [(20140118 844) ((helm (1 5 9)) (markdown-mode (2 0))) "Qiita API Library for emacs" single ((:commit . "93c697b97d540fd1601a13a3d9889fb939b19878") (:keywords "qiita") (:authors ("Wataru MIYAGUNI (gonngo _at_ gmail.com)")) (:maintainer "Wataru MIYAGUNI (gonngo _at_ gmail.com)") (:url . "https://github.com/gongo/qiita-el"))]) +(q-mode . [(20181216 1747) ((emacs (24))) "A q editing mode" single ((:commit . "7a13fb68a0ad3d843c8cdc188cf0adb9723f42f7") (:keywords "faces" "files" "q") (:url . "https://github.com/psaris/q-mode"))]) +(pyvenv . [(20191006 1304) nil "Python virtual environment interface" single ((:commit . "103d2f158ef2a760741682e18741e44107c68f3f") (:keywords "python" "virtualenv" "tools") (:authors ("Jorgen Schaefer" . "contact@jorgenschaefer.de")) (:maintainer "Jorgen Schaefer" . "contact@jorgenschaefer.de") (:url . "http://github.com/jorgenschaefer/pyvenv"))]) +(pythonic . [(20191021 811) ((emacs (25 1)) (s (1 9)) (f (0 17 2))) "Utility functions for writing pythonic emacs package." single ((:commit . "ba9af8ce302579a2b2097b867a35a9fc0bc4bceb") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/pythonic"))]) +(python-x . [(20190611 1303) ((python (0 24)) (folding (0)) (cl-lib (0 5))) "python.el extras for interactive evaluation" tar ((:commit . "b1f8eaccee210d7c0580dba6dc9bd361fcf3765d") (:keywords "python" "eval" "folding") (:url . "https://github.com/wavexx/python-x.el") (:author . "Yuri D'Elia "))]) +(python-test . [(20181018 29) ((emacs (25 1))) "Python testing integration" single ((:commit . "f899975b133539e19ba822e4b0bfd1a28572967e") (:keywords "convenience" "tools" "processes") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:url . "https://github.com/emacs-pe/python-test.el"))]) +(python-switch-quotes . [(20161228 809) ((emacs (24 3))) "cycle between ' and \" quotes in python strings" single ((:commit . "93f1e9b40e061a6cea480139e8b1362b6404abd0") (:keywords "python" "tools" "convenience") (:authors ("Vladimir Lagunov" . "lagunov.vladimir@gmail.com")) (:maintainer "Vladimir Lagunov" . "lagunov.vladimir@gmail.com") (:url . "https://github.com/werehuman/python-switch-quotes"))]) +(python-pytest . [(20180725 1146) ((emacs (24 4)) (dash (2 12 0)) (dash-functional (2 12 0)) (magit-popup (2 12 0)) (projectile (0 14 0)) (s (1 12 0))) "helpers to run pytest" single ((:commit . "09ad688df207ee9b02c990d3897a9e2841931d97") (:keywords "pytest" "test" "python" "languages" "processes" "tools") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee") (:url . "https://github.com/wbolster/emacs-python-pytest"))]) +(python-mode . [(20191120 1409) nil "Python major mode" tar ((:commit . "3fab57bb1968e320a246b08c41da0f97b50ca5a3"))]) +(python-info . [(20151228 1852) nil "Python info manual for Emacs" tar ((:commit . "306f15441b54b25757cdfd3b327b84024ea21ed7"))]) +(python-environment . [(20150310 853) ((deferred (0 3 1))) "virtualenv API for Emacs Lisp" tar ((:commit . "401006584e32864a10c69d29f14414828909362e") (:keywords "applications" "tools") (:authors ("Takafumi Arakaki ")) (:maintainer "Takafumi Arakaki "))]) +(python-docstring . [(20190716 921) nil "Smart Python docstring formatting" tar ((:commit . "0d2f783f5a868ded8a37aa5881f8952aa36b053f"))]) +(python-django . [(20150822 404) nil "A Jazzy package for managing Django projects" single ((:commit . "fc54ad74f0309670359b939f64d0f1fff68aeac4") (:keywords "languages") (:authors ("Fabián E. Gallina" . "fabian@anue.biz")) (:maintainer "FSF") (:url . "https://github.com/fgallina/python-django.el"))]) +(python-cell . [(20190217 1823) nil "Support for MATLAB-like cells in python mode" single ((:commit . "665725446b194dbaaff9645dd880524368dd710a") (:keywords "python" "matlab" "cell") (:authors ("Thomas Hisch" . "t.hisch@gmail.com")) (:maintainer "Thomas Hisch" . "t.hisch@gmail.com"))]) +(python-black . [(20190817 1754) ((emacs (25)) (dash (2 16 0)) (reformatter (0 3))) "Reformat Python using python-black" single ((:commit . "706d317f0874d7c5b5a3d844698bcfb8b1fe253e") (:keywords "languages") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee") (:url . "https://github.com/wbolster/emacs-python-black"))]) +(pytest-pdb-break . [(20191016 530) ((emacs (25))) "A pytest PDB launcher" tar ((:commit . "eb206b1b288a60bbaace10c16c440c11401b6a99") (:keywords "languages" "tools") (:authors ("Jane Soko" . "poppyschmo@protonmail.com")) (:maintainer "Jane Soko" . "poppyschmo@protonmail.com") (:url . "https://github.com/poppyschmo/pytest-pdb-break"))]) +(pytest . [(20181005 1524) ((s (1 9 0))) "Easy Python test running in Emacs" single ((:commit . "1bfa7549001e61ecd59cd6eae7c6656a924d1ba4") (:keywords "pytest" "python" "testing") (:url . "https://github.com/ionrock/pytest-el"))]) +(pyramid . [(20181212 1204) ((emacs (25 2)) (pythonic (0 1 1)) (tablist (0 70))) "Minor mode for working with pyramid projects" tar ((:commit . "05697e881a8b57c4f183344c42ae36662b180663") (:keywords "python" "pyramid" "pylons" "convenience" "tools" "processes") (:authors ("Daniel Kraus" . "daniel@kraus.my")) (:maintainer "Daniel Kraus" . "daniel@kraus.my") (:url . "https://github.com/dakra/pyramid.el"))]) +(pynt . [(20180710 726) ((emacs (24 4)) (ein (0 13 1)) (epc (0 1 1)) (deferred (0 5 1))) "Generate and scroll EIN buffers from python code" single ((:commit . "86cf9ce78d34f92bfd0764c9cbb75427ebd429e6") (:keywords "convenience") (:authors ("Edward Banner" . "edward.banner@gmail.com")) (:maintainer "Edward Banner" . "edward.banner@gmail.com") (:url . "https://github.com/ebanner/pynt"))]) +(pylint . [(20170402 1255) nil "minor mode for running `pylint'" single ((:commit . "114298dccd13e72fe4733034e07ae0f2bf3aaeda") (:keywords "languages" "python") (:authors ("Ian Eure" . "ian.eure@gmail.com")) (:maintainer "Jonathan Kotta" . "jpkotta@gmail.com"))]) +(pyimpsort . [(20160130 453) ((emacs (24 3))) "Sort python imports." tar ((:commit . "d5c61d70896b642646dfd3c809c06174ae086c1a") (:keywords "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:url . "https://github.com/emacs-pe/pyimpsort.el"))]) +(pyimport . [(20180308 1752) ((dash (2 8 0)) (s (1 9 0)) (shut-up (0 3 2))) "Manage Python imports!" single ((:commit . "a6f63cf7ed93f0c0f7c207e6595813966f8852b9") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) +(pyim-wbdict . [(20190201 2300) ((pyim (1 0))) "Some wubi dicts for pyim" tar ((:commit . "9799b689643052078f53d69342a82315251490f4") (:keywords "convenience" "chinese" "pinyin" "input-method" "complete") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com") (:url . "https://github.com/tumashu/pyim-wbdict"))]) +(pyim-cangjie5dict . [(20170730 246) ((pyim (1 0))) "Some cangjie5 dicts for pyim" tar ((:commit . "c8618590780b818db1a67a29bc47c5d25903517a") (:keywords "convenience" "chinese" "pinyin" "input-method" "complete") (:authors ("Yuanchen Xie" . "yuanchen.gm@gmail.com")) (:maintainer "Yuanchen Xie" . "yuanchen.gm@gmail.com") (:url . "https://github.com/erstern/pyim-cangjie5dict"))]) +(pyim-basedict . [(20190719 1252) nil "The default pinyin dict of pyim" tar ((:commit . "d499104189a9462cb80f8efd9713e4064dc7093d") (:keywords "convenience" "chinese" "pinyin" "input-method" "complete") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com") (:url . "https://github.com/tumashu/pyim-basedict"))]) +(pyim . [(20191118 33) ((emacs (24 4)) (popup (0 1)) (async (1 6)) (xr (1 13)) (pyim-basedict (0 1))) "A Chinese input method support quanpin, shuangpin, wubi and cangjie." tar ((:commit . "e2a20779e1ff94aabcc3a2d599643c84514d930d"))]) +(pygen . [(20161121 506) ((elpy (1 12 0)) (python-mode (6 2 2)) (dash (2 13 0))) "Python code generation using Elpy and Python-mode." single ((:commit . "9019ff44ba49d7295b1476530feab91fdadb084b") (:keywords "python" "code generation") (:authors ("Jack Crawley ")) (:maintainer "Jack Crawley ") (:url . "https://github.com/JackCrawley/pygen/"))]) +(pyfmt . [(20150521 2056) nil "Emacs interface to pyfmt" single ((:commit . "cb92be2cf0804cc53142dc5edb36f8e0ef5cec32") (:keywords "tools") (:authors ("Alexandre Héaumé" . "aheaume@gmail.com")) (:maintainer "Alexandre Héaumé" . "aheaume@gmail.com") (:url . "https://github.com/aheaume/pyfmt.el"))]) +(pyenv-mode-auto . [(20180620 1252) ((pyenv-mode (0 1 0)) (s (1 11 0)) (f (0 17 0))) "Automatically activates pyenv version if .python-version file exists." single ((:commit . "347b94cd5ad22e33cc41be661c102d4548767858") (:keywords "python" "pyenv") (:authors ("Sviatoslav Bulbakha" . "mail@ssbb.me")) (:maintainer "Sviatoslav Bulbakha" . "mail@ssbb.me") (:url . "https://github.com/ssbb/pyenv-mode-auto"))]) +(pyenv-mode . [(20170801 2348) ((pythonic (0 1 0))) "Integrate pyenv with python-mode" single ((:commit . "aec6f2aa289f6aed974f053c081143758dd142fb") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/pyenv-mode"))]) +(pydoc-info . [(20110301 834) nil "Better Python support for info-lookup-symbol." tar ((:commit . "151d877c8fb8e418a573b1e879b1263c18e22776"))]) +(pydoc . [(20181025 51) nil "functional, syntax highlighted pydoc navigation" single ((:commit . "abb948e27efaf2452f339c62cd99a1c69930bbfe") (:keywords "pydoc" "python") (:authors ("John Kitchin" . "jkitchin@andrew.cmu.edu")) (:maintainer "Brian J. Lopes" . "statmobile@gmail.com") (:url . "https://github.com/statmobile/pydoc"))]) +(pycoverage . [(20190607 2004) ((emacs (24 3))) "Support for coverage stats on Python 2.X and 3" tar ((:commit . "01bd47171eefcab2e19d7cffd9a2dd3bd9bd6812") (:keywords "project" "convenience") (:authors ("matt harrison")) (:maintainer "matt harrison") (:url . "https://github.com/mattharrison/pycoverage.el"))]) +(pycarddavel . [(20150831 1216) ((helm (1 7 0)) (emacs (24 0))) "Integrate pycarddav" single ((:commit . "a6d81ee4eb8309cd82f6082aeca68c5a015702a3") (:keywords "helm" "pyccarddav" "carddav" "message" "mu4e" "contacts") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me"))]) +(py-yapf . [(20160925 1122) nil "Use yapf to beautify a Python buffer" single ((:commit . "a878304202ad827a1f3de3dce1badd9ca8731146") (:authors ("Friedrich Paetzke" . "f.paetzke@gmail.com")) (:maintainer "Friedrich Paetzke" . "f.paetzke@gmail.com") (:url . "https://github.com/paetzke/py-yapf.el"))]) +(py-test . [(20151117 622) ((dash (2 9 0)) (f (0 17)) (emacs (24 4))) "A test runner for Python code." single ((:commit . "3b2a0bdaacb54df6f2bee8317423e5c0d159d5cf") (:keywords "python" "testing" "py.test") (:authors ("Bogdan Paul Popa" . "popa.bogdanp@gmail.com")) (:maintainer "Bogdan Paul Popa" . "popa.bogdanp@gmail.com") (:url . "https://github.com/Bogdanp/py-test.el"))]) +(py-smart-operator . [(20170531 1209) ((s (1 9 0))) "smart-operator for python-mode" single ((:commit . "0c8a66faca4b35158d0b5885472cb75286039167") (:keywords "python" "convenience" "smart-operator") (:authors ("Rustem Muslimov" . "r.muslimov@gmail.com")) (:maintainer "Rustem Muslimov" . "r.muslimov@gmail.com"))]) +(py-isort . [(20160925 1018) nil "Use isort to sort the imports in a Python buffer" single ((:commit . "e67306f459c47c53a65604e4eea88a3914596560") (:authors ("Friedrich Paetzke" . "paetzke@fastmail.fm")) (:maintainer "Friedrich Paetzke" . "paetzke@fastmail.fm") (:url . "http://paetzke.me/project/py-isort.el"))]) +(py-import-check . [(20130802 1111) nil "Finds the unused python imports using importchecker" single ((:commit . "9787f87745a4234cd9bed711860b707902bc8ae4") (:keywords "python" "import" "check") (:authors ("Sibi" . "sibi@psibi.in")) (:maintainer "Sibi" . "sibi@psibi.in") (:url . "https://github.com/psibi/emacs-py-import-check"))]) +(py-gnitset . [(20170821 1732) nil "Run your Python tests any way you'd like" single ((:commit . "1e993cc29cbc31e06fe1e335dec198e21972fa55") (:authors ("Brandon W Maister" . "quodlibetor@gmail.com")) (:maintainer "Brandon W Maister" . "quodlibetor@gmail.com") (:url . "https://www.github.com/quodlibetor/py-gnitset"))]) +(py-autopep8 . [(20160925 1052) nil "Use autopep8 to beautify a Python buffer" single ((:commit . "68e12d8788c91c7ec53a68acf1d23adb2ffa4788") (:authors ("Friedrich Paetzke" . "f.paetzke@gmail.com")) (:maintainer "Friedrich Paetzke" . "f.paetzke@gmail.com") (:url . "http://paetzke.me/project/py-autopep8.el"))]) +(px . [(20170317 2330) nil "preview inline latex in any mode" single ((:commit . "0c52f7933eab3ca1642ab0df151db9950430c9e2") (:authors ("Aurélien Aptel" . "aurelien.aptel@gmail.com")) (:maintainer "Aurélien Aptel" . "aurelien.aptel@gmail.com") (:url . "http://github.com/aaptel/preview-latex"))]) +(pushover . [(20170818 2103) ((cl-lib (0 5))) "Pushover API Access" single ((:commit . "bbe3ac8df3c532a72da4552615af960b8a577588") (:keywords "notifications") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org") (:url . "http://github.com/swflint/pushover.el"))]) +(pushbullet . [(20140809 1232) ((grapnel (0 5 2)) (json (1 2))) "Emacs client for the PushBullet Android app" single ((:commit . "73c59a0f1dc04875b3e5a2c8afbc26c32128e445") (:keywords "convenience") (:authors ("Abhishek L" . "abhishek.lekshmanan@gmail.com")) (:maintainer "Abhishek L" . "abhishek.lekshmanan@gmail.com") (:url . "http://www.github.com/theanalyst/revolver"))]) +(purty-mode . [(20131004 2259) nil "Safely pretty-print greek letters, mathematical symbols, or anything else." single ((:commit . "8eef77317a3bab07ade212353a50fbd3f20f365a") (:authors ("James Atwood" . "jatwood@cs.umass.edu")) (:maintainer "James Atwood" . "jatwood@cs.umass.edu"))]) +(purple-haze-theme . [(20141015 229) ((emacs (24 0))) "an overtly purple color theme for Emacs24." single ((:commit . "3e245cbef7cd09e6b3ee124963e372a04e9a6485") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:url . "https://github.com/jasonm23/emacs-purple-haze-theme"))]) +(purp-theme . [(20190629 1829) nil "No description available." tar ((:commit . "f821a7c30452d970ccb0ee08b68d56603860e31d"))]) +(purescript-mode . [(20190522 2230) ((emacs (24)) (cl-lib (0 6))) "A PureScript editing mode" tar ((:commit . "8db1d0243c03da31adac4d7c5287407a4df6aff2"))]) +(puppet-mode . [(20180813 1947) ((emacs (24 1)) (pkg-info (0 4))) "Major mode for Puppet manifests" single ((:commit . "7dee1b5a5debac6e56f9107492a413b6c0edb94d") (:keywords "languages") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.com") ("Sebastian Wiesner" . "swiesner@lunaryorn.com") ("Russ Allbery" . "rra@stanford.edu")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.com") (:url . "https://github.com/voxpupuli/puppet-mode"))]) +(punpun-theme . [(20190928 1413) nil "A bleak theme" tar ((:commit . "2f78125609277b2478abdebd8f9d5ee10a823b65"))]) +(pungi . [(20150222 1246) ((jedi (0 2 0 -3 2)) (pyvenv (1 5))) "Integrates jedi with virtualenv and buildout python environments" single ((:commit . "a2d4d439ea371be0b064a12248288903b8a521a0") (:keywords "convenience") (:authors ("Matthew Russell" . "matthew.russell@horizon5.org")) (:maintainer "Matthew Russell" . "matthew.russell@horizon5.org"))]) +(punctuality-logger . [(20141120 2031) nil "Punctuality logger for Emacs" single ((:commit . "e09e5dd37bc92289fa2f7dc44aed51a7b5e04bb0") (:keywords "reminder" "calendar") (:authors ("Philip Woods" . "elzairthesorcerer@gmail.com")) (:maintainer "Philip Woods" . "elzairthesorcerer@gmail.com") (:url . "https://gitlab.com/elzair/punctuality-logger"))]) +(pulseaudio-control . [(20190828 1136) nil "Use `pactl' to manage PulseAudio volumes." single ((:commit . "1b844a9b21d549bfe767990b4c611de3bc4e2241") (:keywords "multimedia" "hardware" "sound" "pulseaudio") (:authors ("Alexis" . "flexibeast@gmail.com") ("Ellington Santos" . "ellingtonsantos@gmail.com") ("Sergey Trofimov" . "sarg@sarg.org.ru")) (:maintainer "Alexis" . "flexibeast@gmail.com") (:url . "https://github.com/flexibeast/pulseaudio-control"))]) +(pug-mode . [(20180513 2126) ((emacs (24 4)) (cl-lib (0 5))) "Major mode for jade/pug template files" single ((:commit . "685fd3414d89736bf232f5d1a6bed9e0353b98fe") (:keywords "markup" "language" "jade" "pug") (:authors ("Nathan Weizenbaum")) (:maintainer "Henrik Lissner" . "henrik@lissner.net") (:url . "https://github.com/hlissner/emacs-pug-mode"))]) +(pubmed . [(20190502 2121) ((emacs (25 1)) (deferred (0 5 1)) (esxml (0 3 4)) (s (1 12 0))) "Interface to PubMed" tar ((:commit . "67fbb6e8834feda85e8301adc5c17d9e38395d6a") (:keywords "pubmed" "hypermedia") (:authors ("Folkert van der Beek" . "folkertvanderbeek@gmail.com")) (:maintainer "Folkert van der Beek" . "folkertvanderbeek@gmail.com") (:url . "https://gitlab.com/fvdbeek/emacs-pubmed"))]) +(pt . [(20161226 1959) nil "A front-end for pt, The Platinum Searcher." single ((:commit . "6d99b2aaded3ece3db19a20f4b8f1d4abe382622") (:keywords "pt" "ack" "ag" "grep" "search") (:authors ("Bailey Ling")) (:maintainer "Bailey Ling") (:url . "https://github.com/bling/pt.el"))]) +(psysh . [(20190709 106) ((emacs (24 3)) (s (1 9 0)) (f (0 17)) (php-runtime (0 2))) "PsySH, PHP interactive shell (REPL)" single ((:commit . "21250984ad8137aa3440ac12e52475ef03f19fcb") (:keywords "processes" "php") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:url . "https://github.com/zonuexe/psysh.el"))]) +(psession . [(20190808 1626) ((emacs (24)) (cl-lib (0 5)) (async (1 9 3))) "Persistent save of elisp objects." single ((:commit . "3e97267c92b164584e06a6c70ee7491714c7c12c") (:authors ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com") (:url . "https://github.com/thierryvolpiatto/psession"))]) +(psci . [(20191025 830) ((emacs (24 4)) (purescript-mode (13 10)) (dash (2 9 0))) "Major mode for purescript repl psci" tar ((:commit . "95fb5d14033add8fe9c8c6b4379758beb88af1d0") (:keywords "languages" "purescript" "psci" "repl") (:authors ("Antoine R. Dumont ")) (:maintainer "Antoine R. Dumont ") (:url . "https://github.com/purescript-emacs/emacs-psci"))]) +(psc-ide . [(20190326 2110) ((emacs (25)) (dash (2 13 0)) (dash-functional (1 2 0)) (company (0 8 7)) (s (1 10 0)) (flycheck (0 24)) (let-alist (1 0 4)) (seq (1 11))) "Minor mode for PureScript's psc-ide tool." tar ((:commit . "a10cc85565f330ee277698b27f3f715fef2e1ce2") (:keywords "languages") (:authors ("Erik Post" . "erik@shinsetsu.nl") ("Dmitry Bushenko" . "d.bushenko@gmail.com") ("Christoph Hegemann") ("Brian Sermons")) (:maintainer "Erik Post" . "erik@shinsetsu.nl") (:url . "https://github.com/epost/psc-ide-emacs"))]) +(proxy-mode . [(20190130 8) ((emacs (25))) "A minor mode to toggle proxy." single ((:commit . "a6c55e97dbe4ec4df9dc21d234cabe806dce3a29") (:keywords "comm" "proxy") (:url . "https://github.com/stardiviner/proxy-mode"))]) +(protocols . [(20170802 1132) ((cl-lib (0 5))) "Protocol database access functions." single ((:commit . "d0f7c4acb05465f1a0d4be54363bbd2802647e77") (:keywords "convenience" "net" "protocols") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:url . "https://github.com/davep/protocols.el"))]) +(protobuf-mode . [(20170526 1650) nil "major mode for editing protocol buffers." single ((:commit . "a9f390f44e3d138e1e94fd17046f865517b3b62d") (:keywords "google" "protobuf" "languages") (:authors ("Alexandre Vassalotti" . "alexandre@peadrop.com")) (:maintainer "Alexandre Vassalotti" . "alexandre@peadrop.com"))]) +(prosjekt . [(20151127 1416) ((dash (2 8 0))) "a software project tool for emacs" tar ((:commit . "a864a8be5842223043702395f311e3350c28e9db") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com") (:url . "https://github.com/abingham/prosjekt"))]) +(proportional . [(20190806 1901) ((emacs (25 1))) "use a proportional font everywhere" single ((:commit . "f600b7ed2ab19a3072adad3f47048a5bbdb82703") (:keywords "faces") (:authors ("Johannes Goslar")) (:maintainer "Johannes Goslar") (:url . "https://github.com/ksjogo/proportional"))]) +(propfont-mixed . [(20150113 2211) ((emacs (24)) (cl-lib (0 5))) "Use proportional fonts with space-based indentation." single ((:commit . "0b461ef4754a469610dba71874a34b6da42176bf") (:keywords "faces") (:authors ("Kirill Ignatiev ")) (:maintainer "Kirill Ignatiev ") (:url . "https://github.com/ikirill/propfont-mixed"))]) +(prop-menu . [(20150728 1118) ((emacs (24 3)) (cl-lib (0 5))) "Create and display a context menu based on text and overlay properties" single ((:commit . "50b102c1c0935fd3e0c465feed7f27d66b21cdf3") (:keywords "convenience") (:authors ("David Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Christiansen" . "david@davidchristiansen.dk") (:url . "https://github.com/david-christiansen/prop-menu-el"))]) +(proof-general . [(20191007 1041) ((emacs (24 3))) "A generic front-end for proof assistants (interactive theorem provers)" tar ((:commit . "15ccaec24ce935de366cae08b906c130379758ce"))]) +(prompts . [(20160916 1041) ((dash (2 13 0))) "utilities for working with text prompts." single ((:commit . "1cd5e732ff2a86b47836eb7252e5b59cd4b6ab26") (:keywords "input" "minibuffer") (:authors ("Ben Moon" . "guiltydolphin@gmail.com")) (:maintainer "Ben Moon" . "guiltydolphin@gmail.com") (:url . "https://github.com/guiltydolphin/prompts.el"))]) +(prompt-text . [(20190408 310) nil "Configure your minibuffer prompt" single ((:commit . "0a75ecd5058c9a006e02d1ecd3f1c84194881abd") (:keywords "utility" "minibuffer") (:authors ("10sr <8slashes+el [at] gmail [dot] com>")) (:maintainer "10sr <8slashes+el [at] gmail [dot] com>") (:url . "https://github.com/10sr/prompt-text-el"))]) +(promise . [(20191122 729) ((emacs (26 1)) (async (1 9))) "Promises/A+" tar ((:commit . "bbcf82851427d374bf1f9e7701dce6f18c814d8e") (:keywords "async" "promise" "convenience") (:authors ("chuntaro" . "chuntaro@sakura-games.jp")) (:maintainer "chuntaro" . "chuntaro@sakura-games.jp") (:url . "https://github.com/chuntaro/emacs-promise"))]) +(projmake-mode . [(20161031 1715) ((dash (20150611 922)) (indicators (20130217 1405))) "Project oriented automatic builder and error highlighter, flymake for projects" tar ((:commit . "a897701f7e8f8cc11459ed44eb0e454db2a460c1"))]) +(projekt . [(20150324 848) ((emacs (24))) "some kind of staging for CVS" single ((:commit . "a65e554e5d8b0def08c5d06f3fe34fec40bebd83") (:authors ("Engelke Eschner" . "tekai@gmx.li")) (:maintainer "Engelke Eschner" . "tekai@gmx.li"))]) +(projector . [(20190703 1418) ((alert (1 1)) (projectile (0 11 0)) (cl-lib (0 5))) "Lightweight library for managing project-aware shell and command buffers" single ((:commit . "bad51a81fbcae9aabe47dafc2499ba27cd7308be") (:authors ("Justin Talbott" . "justin@waymondo.com")) (:maintainer "Justin Talbott" . "justin@waymondo.com") (:url . "https://github.com/waymondo/projector.el"))]) +(projectile-variable . [(20170208 1718) ((emacs (24)) (cl-lib (0 5))) "Store project local variables." single ((:commit . "8d348ac70bdd6dc320c13a12941b32b38140e264") (:keywords "project" "convenience") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:url . "https://github.com/zonuexe/projectile-variable"))]) +(projectile-trailblazer . [(20170928 1624) ((emacs (24 4)) (projectile (0 12 0)) (inflections (1 1)) (inf-ruby (2 2 6)) (f (0 13 0)) (rake (0 3 2))) "Minor mode for Rails projects using trailblazer" single ((:commit . "a37a4f7b7f727d98e4c74c0256e059e84263553d") (:keywords "rails" "projectile" "trailblazer" "languages") (:authors ("Michael Dahl" . "michael.dahl84@gmail.com")) (:maintainer "Michael Dahl" . "michael.dahl84@gmail.com") (:url . "https://github.com/micdahl/projectile-trailblazer"))]) +(projectile-speedbar . [(20190807 2010) ((projectile (0 11 0)) (sr-speedbar (0))) "projectile integration for speedbar" single ((:commit . "93320e467ee78772065e599a5dba94889a77db22") (:keywords "project" "convenience" "speedbar" "projectile") (:authors ("Anshul Verma" . "anshul.verma86@gmail.com")) (:maintainer "Anshul Verma" . "anshul.verma86@gmail.com") (:url . "https://github.com/anshulverma/projectile-speedbar"))]) +(projectile-sift . [(20160107 1015) ((sift (0 2 0)) (projectile (0 13 0))) "Run a sift with Projectile" single ((:commit . "33b2c9ff964fe53bb55b37429faaa4e903bead7a") (:keywords "sift" "projectile") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:url . "https://github.com/nlamirault/sift.el"))]) +(projectile-ripgrep . [(20180914 1500) ((ripgrep (0 3 0)) (projectile (0 14 0))) "Run ripgrep with Projectile" single ((:commit . "40e871dcc4519a70981e9f28acea304692a60978") (:keywords "ripgrep" "projectile") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:url . "https://github.com/nlamirault/ripgrep.el"))]) +(projectile-rails . [(20191102 819) ((emacs (24 3)) (projectile (0 12 0)) (inflections (1 1)) (inf-ruby (2 2 6)) (f (0 13 0)) (rake (0 3 2))) "Minor mode for Rails projects based on projectile-mode" single ((:commit . "c8906d9fa3ae0b74a74f8ae296162be4ff7ed42e") (:keywords "rails" "projectile") (:authors ("Adam Sokolnicki" . "adam.sokolnicki@gmail.com")) (:maintainer "Adam Sokolnicki" . "adam.sokolnicki@gmail.com") (:url . "https://github.com/asok/projectile-rails"))]) +(projectile-hanami . [(20160505 1311) ((emacs (24 3)) (projectile (0 12 0)) (rake (0 3 2)) (inf-ruby (2 2 6))) "Minor mode for Hanami projects based on projectile" single ((:commit . "c4b8e7d4dfec789ef8493a7c5d4ce0cf7937e579") (:keywords "hanami" "ruby" "projectile") (:authors ("Arjan van der Gaag")) (:maintainer "Arjan van der Gaag") (:url . "https://github.com/avdgaag/projectile-hanami"))]) +(projectile-git-autofetch . [(20191013 1806) ((emacs (25 1)) (projectile (0 14 0)) (alert (1 2))) "automatically fetch git repositories" single ((:commit . "4a3eba7658a52c6e955d5f7085cd3fd62b53b9c6") (:keywords "tools" "vc") (:authors ("Andreas Müller" . "code@0x7.ch")) (:maintainer "Andreas Müller" . "code@0x7.ch") (:url . "https://github.com/andrmuel/projectile-git-autofetch"))]) +(projectile-direnv . [(20160306 138) ((emacs (24)) (s (1 11 0)) (dash (2 12 0)) (projectile (0 13 0))) "Set environment variables from .envrc" single ((:commit . "d5d29e5228f840b7a25358a2fd50353ef2dc9b16") (:keywords "convenience") (:authors ("Christian Romney" . "crommney@pointslope.com")) (:maintainer "Christian Romney" . "crommney@pointslope.com") (:url . "https://github.com/christianromney/projectile-direnv"))]) +(projectile-codesearch . [(20180508 1522) ((codesearch (20171122 431)) (projectile (20150405 126))) "Integration of codesearch into projectile" single ((:commit . "f6eb96f034a925444412cfa03e45e0ccbbafe3f2") (:keywords "tools" "development" "search") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com") (:url . "https://github.com/abingham/emacs-codesearch"))]) +(projectile . [(20191024 721) ((emacs (25 1)) (pkg-info (0 4))) "Manage and navigate projects in Emacs easily" single ((:commit . "a9a4ce46c1d3ef24b6a6ea04bb206d9aa875328b") (:keywords "project" "convenience") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.com")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.com") (:url . "https://github.com/bbatsov/projectile"))]) +(project-shells . [(20171107 851) ((emacs (24 3)) (seq (2 19))) "Manage the shell buffers of each project" single ((:commit . "d9401de750e444697c2eb9de1ff79f2a2eba4af8") (:keywords "processes" "terminals") (:authors ("\"Huang, Ying\"" . "huang.ying.caritas@gmail.com")) (:maintainer "\"Huang, Ying\"" . "huang.ying.caritas@gmail.com") (:url . "https://github.com/hying-caritas/project-shells"))]) +(project-root . [(20110206 2030) nil "Define a project root and take actions based upon it." single ((:commit . "a49b1be864357683d9489074148b6d667f4ed23b") (:authors ("Philip Jackson" . "phil@shellarchive.co.uk")) (:maintainer "Philip Jackson" . "phil@shellarchive.co.uk"))]) +(project-persist-drawer . [(20151108 1222) ((project-persist (0 3))) "Use a project drawer with project-persist." tar ((:commit . "35bbe132a4fab6a0fec15ce6c0fd2fe6a4aa9626"))]) +(project-persist . [(20180906 1302) nil "A minor mode to allow loading and saving of project settings." tar ((:commit . "26d9435bef44da2a1b0892eba822f9f487b98eec"))]) +(project-explorer . [(20150504 14) ((cl-lib (0 3)) (es-lib (0 3)) (es-windows (0 1)) (emacs (24))) "A project explorer sidebar" single ((:commit . "589a09008706f5f4ef91393dc4306eede0d15ca9") (:authors ("sabof")) (:maintainer "sabof") (:url . "https://github.com/sabof/project-explorer"))]) +(project-abbrev . [(20190517 521) ((emacs (24 4))) "Customize abbreviation expansion in the project." single ((:commit . "fc4e9f774cae42a6fe135833774daaecf2b3dac0") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:url . "https://github.com/jcs090218/project-abbrev"))]) +(programmer-dvorak . [(20150427 137) nil "Input method for Programmer Dvorak." single ((:commit . "3288a8f058eca4cab390a564babbbcb17cfa0350") (:keywords "dvorak" "programmer-dvorak" "input-method") (:authors ("Chenyun Yang" . "yangchenyun@gmail.com")) (:maintainer "Chenyun Yang" . "yangchenyun@gmail.com") (:url . "https://github.com/yangchenyun/programmer-dvorak"))]) +(prognth . [(20130920 1759) nil "Extend prog1 to arbitrary index" single ((:commit . "2f1ca4d34b1fd581163e1df122c85418137e8e62") (:keywords "lisp") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com"))]) +(prog-fill . [(20180607 132) ((emacs (25 1)) (cl-lib (0 6 1))) "Smartly format lines to use vertical space." single ((:commit . "3fbf7da6dd826e95c9077d659566ee29814a31d8") (:keywords "ahungry" "convenience" "c" "formatting" "editing") (:authors ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com") (:url . "https://github.com/ahungry/prog-fill"))]) +(professional-theme . [(20150315 1100) nil "Emacs port of Vim's professional theme" single ((:commit . "0927d1474049a193f9f366bde5eb1887b9ba20ed") (:keywords "theme" "light" "professional") (:authors ("Juanjo Alvarez" . "juanjo@juanjoalvarez.net")) (:maintainer "Juanjo Alvarez" . "juanjo@juanjoalvarez.net") (:url . "https://github.com/juanjux/emacs-professional-theme"))]) +(prodigy . [(20191108 1330) ((s (1 8 0)) (dash (2 4 0)) (f (0 14 0)) (emacs (24))) "Manage external services from within Emacs" single ((:commit . "56861ae81dc720bfc2e4adaf9ff54243a600b3a2") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:url . "http://github.com/rejeep/prodigy.el"))]) +(processing-snippets . [(20140426 1428) ((yasnippet (0 8 0))) "Snippets for processing-mode" tar ((:commit . "448aba82970c98322629eaf2746e73be6c30c98e"))]) +(processing-mode . [(20171022 2302) nil "Major mode for Processing 2.0" single ((:commit . "448aba82970c98322629eaf2746e73be6c30c98e") (:keywords "languages" "snippets") (:authors ("Peter Vasil" . "mail@petervasil.net")) (:maintainer "Peter Vasil" . "mail@petervasil.net") (:url . "https://github.com/ptrv/processing2-emacs"))]) +(proced-narrow . [(20190911 1818) ((seq (2 20)) (emacs (24))) "Live-narrowing of search results for proced." single ((:commit . "0e2a4dfb072eb0369d0020b429e820ae620d325e") (:keywords "processes" "proced") (:authors ("Travis Jeffery" . "tj@travisjeffery.com")) (:maintainer "Travis Jeffery" . "tj@travisjeffery.com") (:url . "https://github.com/travisjeffery/proced-narrow"))]) +(proc-net . [(20130322 12) nil "network process tools" single ((:commit . "10861112a1f3994c8e6374d6c5bb5d734cfeaf73") (:keywords "processes") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:url . "http://github.com/nicferrier/emacs-procnet"))]) +(private-diary . [(20151216 1657) ((emacs (24 0))) "maintain a private diary in Emacs" single ((:commit . "0c86fb6150ad8ed14f94def3504f5a68f4147283") (:keywords "diary" "encryption") (:authors ("James P. Ascher" . "jpa4q@virginia.edu")) (:maintainer "James P. Ascher" . "jpa4q@virginia.edu") (:url . "https://github.com/cacology/private-diary"))]) +(private . [(20150122 157) ((aes (0 6))) "take care of your private configuration files." single ((:commit . "9266d01c095895cc3ee9de95bc20511e88353755") (:keywords "private" "configuration" "backup" "recover") (:authors ("Cheung Mou Wai" . "yeannylam@gmail.com")) (:maintainer "Cheung Mou Wai" . "yeannylam@gmail.com") (:url . "https://github.com/cheunghy/private"))]) +(prism . [(20190908 1820) ((emacs (26 1)) (dash (2 14 1))) "Customizable, depth-based syntax coloring" single ((:commit . "49c8b97b286c7403bf239645964416200ea82dd5") (:keywords "faces" "lisp") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "https://github.com/alphapapa/prism.el"))]) +(pretty-symbols . [(20140814 959) nil "Draw tokens as Unicode glyphs." single ((:commit . "582cbe51ecfe1cc0a5b185bc06113c8a661e3956") (:keywords "faces") (:authors ("David Röthlisberger" . "david@rothlis.net")) (:maintainer "David Röthlisberger" . "david@rothlis.net") (:url . "http://github.com/drothlis/pretty-symbols"))]) +(pretty-sha-path . [(20141105 1826) nil "Prettify Guix/Nix store paths" single ((:commit . "a2b43dd9de423a38d67cda2e3bd9412f7d363257") (:keywords "faces" "convenience") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:url . "https://gitorious.org/alezost-emacs/pretty-sha-path"))]) +(pretty-mode . [(20190615 2045) nil "Redisplay parts of the buffer as pretty Unicode symbols." single ((:commit . "5154355e90fdd70d3647257280a89eeb725ef084") (:keywords "pretty" "unicode" "symbols") (:authors ("Arthur Danskin" . "arthurdanskin@gmail.com")) (:maintainer "Grant Rettke" . "grant@wisdomandwonder.com") (:url . "https://github.com/akatov/pretty-mode"))]) +(pretty-hydra . [(20190930 2105) ((hydra (0 15 0)) (s (1 12 0)) (dash (2 15 0)) (dash-functional (1 2 0)) (emacs (24))) "A macro for creating nice-looking hydras" single ((:commit . "fd362d2be7ed80889715ed8a30a61780a18ce6ea") (:authors ("Jerry Peng" . "pr2jerry@gmail.com")) (:maintainer "Jerry Peng" . "pr2jerry@gmail.com") (:url . "https://github.com/jerrypnz/major-mode-hydra.el"))]) +(prettify-greek . [(20160603 908) nil "Greek letters for prettify-symbols" single ((:commit . "698d07a6ffe85f6fb53f3bfec4f49380c25cfd90") (:keywords "faces") (:url . "https://gitlab.com/fommil/emacs-prettify-greek"))]) +(prettier-js . [(20180109 726) nil "Minor mode to format JS code on file save" single ((:commit . "e9b73e81d3e1642aec682195f127a42dfb0b5774") (:keywords "convenience" "wp" "edit" "js") (:authors ("James Long and contributors")) (:maintainer "James Long and contributors") (:url . "https://github.com/prettier/prettier-emacs"))]) +(presentation . [(20180427 224) ((emacs (24 4)) (cl-lib (0 5))) "Display large character for presentation" single ((:commit . "f53f67aeab97e8eea6d1f12df5f7ce3b1b03b879") (:keywords "environment" "faces" "frames") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:url . "https://github.com/zonuexe/emacs-presentation-mode"))]) +(preseed-generic-mode . [(20180210 500) nil "Debian preseed file major mode" single ((:commit . "3aa8806c4a659064baa01751400c53fbaf847f66") (:authors ("Tong Sun" . "suntong@users.sourceforge.net")) (:maintainer "Tong Sun" . "suntong@users.sourceforge.net") (:url . "https://github.com/suntong/preseed-generic-mode"))]) +(prescient . [(20191025 347) ((emacs (25 1))) "Better sorting and filtering" single ((:commit . "c04cce14351c960098a0c8d4647c0d32e9e45669") (:keywords "extensions") (:authors ("Radon Rosborough" . "radon.neon@gmail.com")) (:maintainer "Radon Rosborough" . "radon.neon@gmail.com") (:url . "https://github.com/raxod502/prescient.el"))]) +(preproc-font-lock . [(20151107 2018) nil "Highlight C-style preprocessor directives." single ((:commit . "565fda9f5fdeb0598986174a07e9fb09f7604397") (:keywords "c" "languages" "faces") (:authors ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:url . "https://github.com/Lindydancer/preproc-font-lock"))]) +(prassee-theme . [(20180709 1004) ((emacs (24))) "A high contrast color theme for Emacs." single ((:commit . "81126f69cdbaab836c00ae7a49aaf89d4229fde1") (:keywords "dark" "high-contrast" "faces") (:authors ("Prassee " . "prassee.sathian@gmail.com")) (:maintainer "Prassee " . "prassee.sathian@gmail.com") (:url . "https://github.com/prassee/prassee-emacs-theme"))]) +(ppd-sr-speedbar . [(20151108 1224) ((sr-speedbar (20140914 2339)) (project-persist-drawer (0 0 4))) "Sr Speedbar adaptor for project-persist-drawer." tar ((:commit . "d88d7f63f695824c435dd996405454d1e46d2aa3"))]) +(powerthesaurus . [(20190721 805) ((emacs (24)) (request (0 3 0)) (s (1 12 0)) (jeison (1 0 0))) "Powerthesaurus integration" single ((:commit . "81a262ec0c9294ad377bafc6cc4e6d91b461acb6") (:keywords "convenience" "writing") (:url . "http://github.com/SavchenkoValeriy/emacs-powerthesaurus"))]) +(powershell . [(20190421 2038) ((emacs (24))) "Mode for editing PowerShell scripts" single ((:commit . "87826777bd3ebd53740be99b4546bfc11ccc625d") (:keywords "powershell" "languages") (:authors ("Frédéric Perrin ")) (:maintainer "Frédéric Perrin ") (:url . "http://github.com/jschaf/powershell.el"))]) +(powerline-evil . [(20190603 340) ((evil (1 0 8)) (powerline (2 3))) "Utilities for better Evil support for Powerline" tar ((:commit . "b77e2cf571e9990734f2b30d826f3a362b559fd1") (:keywords "evil" "mode-line" "powerline") (:authors ("Chris Johnson" . "chris@christophermjohnson.net")) (:maintainer "Chris Johnson" . "chris@christophermjohnson.net") (:url . "http://github.com/johnson-christopher/powerline-evil/"))]) +(powerline . [(20190323 213) ((cl-lib (0 2))) "Rewrite of Powerline" tar ((:commit . "6ef4a06c3c583045accbc957b6f449b7c0c57cd8") (:keywords "mode-line") (:authors ("Donald Ephraim Curtis" . "dcurtis@milkbox.net")) (:maintainer "Donald Ephraim Curtis" . "dcurtis@milkbox.net") (:url . "http://github.com/milkypostman/powerline/"))]) +(pow . [(20140420 806) ((emacs (24)) (cl-lib (0 5))) "pow (http://pow.cx/) manager for emacs" tar ((:commit . "ea83986b8ca8e27cb996290d6463b111ec0966ce") (:keywords "develop" "web" "pow") (:authors ("yukihiro hara" . "yukihr@gmail.com")) (:maintainer "yukihiro hara" . "yukihr@gmail.com") (:url . "http://github.com/yukihr/emacs-pow"))]) +(pov-mode . [(20161115 743) nil "Major mode for editing POV-Ray scene files." tar ((:commit . "9fc1db3aab7c27155674dd1a87ec62606035d074"))]) +(postcss-sorting . [(20180211 956) ((emacs (24))) "postcss-sorting interface" single ((:commit . "deb0c935d2904c11a965758a9aee5a0e905f21fc") (:authors ("Peiwen Lu" . "hi@peiwen.lu")) (:maintainer "Peiwen Lu" . "hi@peiwen.lu") (:url . "https://github.com/P233/postcss-sorting.el"))]) +(posframe . [(20191108 745) ((emacs (26))) "Pop a posframe (just a frame) at point" single ((:commit . "952089375b1cbe98217f5d5210bfef7b1bfd56f6") (:keywords "convenience" "tooltip") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com") (:url . "https://github.com/tumashu/posframe"))]) +(pos-tip . [(20150318 1513) nil "Show tooltip at point" single ((:commit . "051e08fec5cf30b7574bdf439f79fef7d42d689d") (:keywords "tooltip") (:authors ("S. Irie")) (:maintainer "S. Irie"))]) +(porthole . [(20190721 1428) ((emacs (26)) (elnode (0 9 9 8)) (f (0 19 0)) (json-rpc-server (0 1 2))) "RPC Servers in Emacs" single ((:commit . "0e73b8e527cfc9ecba2fa4f88382f588fb4a300d") (:keywords "comm" "rpc" "http" "json") (:authors ("GitHub user \"Jcaw\"")) (:maintainer "GitHub user \"Jcaw\"") (:url . "https://github.com/jcaw/porthole"))]) +(portage-navi . [(20141208 1355) ((concurrent (0 3 1)) (ctable (0 1 2))) "portage viewer" single ((:commit . "8016c3e99fe6cef101d479a3d69185796b22ca2f") (:keywords "tools" "gentoo") (:authors ("")) (:maintainer "") (:url . "https://github.com/kiwanami/emacs-portage-navi"))]) +(popwin . [(20150315 1300) nil "Popup Window Manager." single ((:commit . "95dea14c60019d6cccf9a3b33e0dec4e1f22c304") (:keywords "convenience") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainer "Tomohiro Matsuyama" . "m2ym.pub@gmail.com"))]) +(popup-switcher . [(20190917 1634) ((cl-lib (0 3)) (popup (0 5 3))) "switch to other buffers and files via popup." single ((:commit . "953f599c1fd9d6843ec9380cc0fc3f8248390d24") (:keywords "popup" "switch" "buffers" "functions") (:authors ("Kostafey" . "kostafey@gmail.com")) (:maintainer "Kostafey" . "kostafey@gmail.com") (:url . "https://github.com/kostafey/popup-switcher"))]) +(popup-kill-ring . [(20131020 1854) ((popup (0 4)) (pos-tip (0 4))) "interactively insert item from kill-ring" single ((:commit . "5773dfadc104a906c088a3ec62e8cdd3e01e57fa") (:keywords "popup" "kill-ring" "pos-tip") (:authors ("khiker" . "khiker.mail+elisp@gmail.com")) (:maintainer "khiker" . "khiker.mail+elisp@gmail.com") (:url . "https://github.com/waymondo/popup-kill-ring"))]) +(popup-imenu . [(20170326 1040) ((dash (2 12 1)) (popup (0 5 3)) (flx-ido (0 6 1))) "imenu index popup" single ((:commit . "c5e2e69adbd3a630e4cb750965a1aee8c10c1f09") (:keywords "popup" "imenu") (:authors ("Igor Shymko" . "igor.shimko@gmail.com")) (:maintainer "Igor Shymko" . "igor.shimko@gmail.com") (:url . "https://github.com/ancane/popup-imenu"))]) +(popup-edit-menu . [(20170404 1425) ((emacs (24))) "a popup context edit menu package" single ((:commit . "925600a6e29183841199e866cf55e566a6a1b002") (:keywords "lisp" "pop-up" "context" "edit" "menu") (:authors ("Debugfan Chin" . "debugfanchin@gmail.com")) (:maintainer "Debugfan Chin" . "debugfanchin@gmail.com"))]) +(popup-complete . [(20141109 308) ((popup (0 5 0))) "completion with popup" single ((:commit . "caa655a6d8472e9a4bfa1311126d90d7d1b07fca") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-popup-complete"))]) +(popup . [(20160709 1429) ((cl-lib (0 5))) "Visual Popup User Interface" single ((:commit . "80829dd46381754639fb764da11c67235fe63282") (:keywords "lisp") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainer "Tomohiro Matsuyama" . "m2ym.pub@gmail.com"))]) +(poporg . [(20170403 751) nil "Pop a comment or string to an empty buffer for text editing" single ((:commit . "2c58d68c81ecca4140bf179f19ed153ec804b65a") (:keywords "outlines" "tools") (:authors ("François Pinard" . "pinard@iro.umontreal.ca") ("Joseph Rabinoff" . "rabinoff@post.harvard.edu")) (:maintainer "Joseph Rabinoff" . "rabinoff@post.harvard.edu") (:url . "https://github.com/QBobWatson/poporg"))]) +(pophint . [(20170918 248) ((log4e (0 2 0)) (yaxception (0 3))) "Provide navigation using pop-up tips, like Firefox's Vimperator Hint Mode" tar ((:commit . "909025c5a871ca4b9ec7aed7f1a27c819a94dba1") (:keywords "popup") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:url . "https://github.com/aki2o/emacs-pophint"))]) +(ponylang-mode . [(20180804 1521) ((dash (2 10 0))) "Major mode for Pony code" single ((:commit . "ea98ba541b4a439accc126f17120c5425f741b67") (:keywords "languages" "programming") (:url . "https://github.com/seantallen/ponylang-mode"))]) +(pony-snippets . [(20160205 411) ((yasnippet (0 8 0))) "Yasnippets for Pony" tar ((:commit . "b921bd943b528f04d4293625b28fd2d4a013a1bf") (:keywords "snippets" "pony") (:url . "https://github.com/seantallen/pony-snippets"))]) +(pony-mode . [(20170807 1522) nil "Minor mode for working with Django Projects" tar ((:commit . "760684d30b6c234d1b88c9a4673a808f36f7f341"))]) +(pomodoro . [(20190201 2152) nil "A timer for the Pomodoro Technique" single ((:commit . "6cd665ceeaca1f70954aa4caef6f085179f94c69") (:authors ("David Kerschner" . "dkerschner@gmail.com")) (:maintainer "David Kerschner" . "dkerschner@gmail.com"))]) +(pomidor . [(20190523 1414) ((emacs (24 3)) (alert (1 2))) "Simple and cool pomodoro timer" tar ((:commit . "590e64d316d9210bd00cb4eb39d2f07ddc16809a") (:keywords "tools" "time" "applications" "pomodoro technique") (:authors ("TatriX" . "tatrics@gmail.com")) (:maintainer "TatriX" . "tatrics@gmail.com") (:url . "https://github.com/TatriX/pomidor"))]) +(polymode . [(20190714 2017) ((emacs (25))) "Extensible framework for multiple major modes" tar ((:commit . "01232ad3800e974938199c9ac07fad57fcec540c") (:keywords "languages" "multi-modes" "processes") (:authors ("Vitalie Spinu")) (:maintainer "Vitalie Spinu") (:url . "https://github.com/vitoshka/polymode"))]) +(poly-wdl . [(20190712 529) ((emacs (25)) (polymode (0 2)) (wdl-mode (20170709))) "Polymode for WDL" single ((:commit . "963faa828d15d49cee5a63f619c3c30e162c2d0f") (:keywords "languages") (:authors ("Jean Monlong" . "jean.monlong@gmail.com")) (:maintainer "Jean Monlong" . "jean.monlong@gmail.com") (:url . "https://github.com/jmonlong/poly-wdl"))]) +(poly-slim . [(20190605 2103) ((emacs (25)) (polymode (0 2)) (slim-mode (1 1))) "Polymodes for slim" single ((:commit . "a4fb8166d110b82eb3f1d0b4fc87045c3308bd7d") (:keywords "emacs") (:authors ("Siavash Sajjadi and Vitalie Spinu")) (:maintainer "Vitalie Spinu") (:url . "https://github.com/polymode/poly-slim"))]) +(poly-ruby . [(20180905 929) ((emacs (25)) (polymode (0 1 2))) "Provides poly-ruby-mode" single ((:commit . "794ebb926ace23e9c1398da934701951432dcea2") (:keywords "languages") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:url . "https://github.com/knu/poly-ruby.el"))]) +(poly-rst . [(20190605 2103) ((emacs (25)) (polymode (0 2))) "poly-rst-mode polymode" single ((:commit . "1a7d38e1c1d35cf64e4dad408db486a8e1931e61") (:keywords "languages" "multi-modes") (:authors ("Gustaf Waldemarson, Vitalie Spinu")) (:maintainer "Gustaf Waldemarson, Vitalie Spinu") (:url . "https://github.com/polymode/poly-rst"))]) +(poly-org . [(20190605 2103) ((emacs (25)) (polymode (0 2))) "Polymode for org-mode" single ((:commit . "8b0de75b1f9b65c22f7e3fbc205c9408214c8a1f") (:keywords "languages" "multi-modes") (:authors ("Vitalie Spinu")) (:maintainer "Vitalie Spinu") (:url . "https://github.com/polymode/poly-org"))]) +(poly-noweb . [(20190605 2102) ((emacs (25)) (polymode (0 2))) "Polymode for noweb" single ((:commit . "4e65cb22d6bca901021205257f867f868989c665") (:keywords "languages" "multi-modes") (:authors ("Vitalie Spinu")) (:maintainer "Vitalie Spinu") (:url . "https://github.com/polymode/poly-noweb"))]) +(poly-markdown . [(20190916 702) ((emacs (25)) (polymode (0 2)) (markdown-mode (2 3))) "Polymode for markdown-mode" single ((:commit . "a867e5e5689f1e1a5bab5db57c7d39bac2448bcb") (:keywords "emacs") (:authors ("Vitalie Spinu")) (:maintainer "Vitalie Spinu") (:url . "https://github.com/polymode/poly-markdown"))]) +(poly-erb . [(20190605 2102) ((emacs (25)) (polymode (0 2))) "Polymode for erb" single ((:commit . "304204f415b9e46ee36b64531b7d170540828335") (:keywords "emacs") (:authors ("Siavash Sajjadi and Vitalie Spinu")) (:maintainer "Vitalie Spinu") (:url . "https://github.com/polymode/poly-erb"))]) +(poly-ansible . [(20181222 1517) ((ansible (0)) (ansible-doc (0 4)) (jinja2-mode (0 2)) (polymode (0 1 5)) (yaml-mode (0 0 13))) "Polymode for Ansible: Jinja2 in YAML" tar ((:commit . "2cb970a0e27b41ae85bc51d24ef36fa2c7b34bbc") (:keywords "languages") (:authors ("Peter Oliver" . "poly-ansible@mavit.org.uk")) (:maintainer "Peter Oliver" . "poly-ansible@mavit.org.uk") (:url . "https://gitlab.com/mavit/poly-ansible/"))]) +(poly-R . [(20190605 2103) ((emacs (25)) (polymode (0 2)) (poly-markdown (0 2)) (poly-noweb (0 2))) "Various polymodes for R language" single ((:commit . "0443c89b4d2bc2ed235a0c017109c2dbd342aa02") (:keywords "languages" "multi-modes") (:authors ("Vitalie Spinu")) (:maintainer "Vitalie Spinu") (:url . "https://github.com/polymode/poly-R"))]) +(pollen-mode . [(20190310 538) ((emacs (24 3)) (cl-lib (0 5))) "major mode for editing pollen files" single ((:commit . "819edf830e9519f8ca57e9cef31211e3f444d11a") (:keywords "languages" "pollen" "pollenpub") (:authors ("Junsong Li ")) (:maintainer "Junsong Li") (:url . "https://github.com/lijunsong/pollen-mode"))]) +(pointback . [(20100210 1552) nil "Restore window points when returning to buffers" single ((:commit . "e3a02c1784d81b5a1d2477338d049af581ed19f8") (:keywords "convenience") (:authors ("Markus Triska" . "markus.triska@gmx.at")) (:maintainer "Markus Triska" . "markus.triska@gmx.at"))]) +(point-stack . [(20170808 1658) nil "Back and forward navigation through buffer locations" single ((:commit . "76e17311e3a810314c7d31ac46dc55450ff30fa2") (:authors ("Matt Harrison" . "matthewharrison@gmail.com") ("Dmitry Gutov" . "dgutov@yandex.ru")) (:maintainer "Matt Harrison" . "matthewharrison@gmail.com"))]) +(point-pos . [(20170421 1632) nil "Save and restore point positions" single ((:commit . "442bccb40791832cbc2d6f5c8f53be745aea2b73") (:keywords "tools" "convenience") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:url . "https://github.com/alezost/point-pos.el"))]) +(poetry . [(20191022 938) ((transient (0 1 0)) (pyvenv (1 2)) (emacs (25 1))) "Interface to Poetry" single ((:commit . "3f9ac720b423f087797b9e345b575275f2dcd740") (:keywords "python" "tools") (:authors ("Gaby Launay" . "gaby.launay@protonmail.com")) (:maintainer "Gaby Launay" . "gaby.launay@protonmail.com") (:url . "https://github.com/galaunay/poetry.el"))]) +(poet-theme . [(20191103 1948) nil "A theme for prose." tar ((:commit . "c3071c00f2e7f77be6d048d295241e67e46cb3c0") (:authors ("Kunal Bhalla" . "bhalla.kunal@gmail.com")) (:maintainer "Kunal Bhalla" . "bhalla.kunal@gmail.com") (:url . "https://github.com/kunalb/poet/"))]) +(poet-client . [(20190124 654) ((emacs (24 4)) (request (0 3 0))) "Client for po.et network api" single ((:commit . "32382057b3e4b8a02ec5ac3190dbe4b93d058741") (:authors ("W.Yahia")) (:maintainer "W.Yahia") (:url . "https://github.com/wailo/emacs-poet"))]) +(poe-lootfilter-mode . [(20190330 1117) ((emacs (24 3))) "Major mode for editing Path of Exile lootfilters" single ((:commit . "5ef06684cb2b17b090ee1f303c2b789fa71bc106") (:keywords "languages" "games") (:authors ("Jeremiah Dodds" . "jeremiah.dodds@gmail.com")) (:maintainer "Jeremiah Dodds" . "jeremiah.dodds@gmail.com") (:url . "https://github.com/jdodds/poe-lootfilter-mode"))]) +(podcaster . [(20161020 1535) ((cl-lib (0 5))) "Podcast client" single ((:commit . "9854517025deb5d556168a68955fb7b662239f5c") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:url . "https://github.com/lujun9972/podcaster"))]) +(pocket-reader . [(20181219 930) ((emacs (25 1)) (dash (2 13 0)) (kv (0 0 19)) (pocket-lib (0 1)) (s (1 10)) (ov (1 0 6)) (rainbow-identifiers (0 2 2)) (org-web-tools (0 1)) (ht (2 2))) "Client for Pocket reading list" single ((:commit . "86c51c65d97819e11b3df403beea424f30125d30") (:keywords "pocket") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "https://github.com/alphapapa/pocket-reader.el"))]) +(pocket-mode . [(20171201 1315) ((emacs (24 4)) (pocket-api (0 1))) "Manage your pocket" single ((:commit . "229de7d35b7e5605797591c46aa8200d7efc363c") (:keywords "convenience" "pocket") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com"))]) +(pocket-lib . [(20190720 1957) ((emacs (25 1)) (request (0 2)) (dash (2 13 0)) (kv (0 0 19)) (s (1 12 0))) "Library for accessing getpocket.com API" single ((:commit . "f794e3e619e1f6cad25bbfd5fe019a7e62820bf4") (:keywords "pocket") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "https://github.com/alphapapa/pocket-lib.el"))]) +(pocket-api . [(20180403 109) ((emacs (24 4)) (request (0 2))) "another pocket api" single ((:commit . "3eb9430b9db90bc02e736e433eb86389f7655189") (:keywords "convenience" "pocket") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:url . "https://github.com/lujun9972/pocket-api.el"))]) +(po-mode . [(20190511 1542) nil "major mode for GNU gettext PO files" single ((:commit . "1916142f6a817c733d5ec37e3b4fbae3da67e499") (:keywords "i18n" "gettext"))]) +(pmdm . [(20191101 2346) nil "poor man's desktop-mode alternative." single ((:commit . "1f30adce8a23da94b3c2460b7248d5910592d8af") (:authors ("Iñigo Serna" . "inigoserna@gmx.com")) (:maintainer "Iñigo Serna" . "inigoserna@gmx.com") (:url . "https://hg.serna.eu/emacs/pmdm"))]) +(plur . [(20160504 924) ((emacs (24 4))) "Easily search and replace multiple variants of a word" single ((:commit . "5bdd3b9a2f0624414bd596e798644713cd1545f0") (:authors ("Chunyang Xu" . "xuchunyang.me@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang.me@gmail.com") (:url . "https://github.com/xuchunyang/plur"))]) +(plsense-direx . [(20140520 2008) ((direx (0 1 -3)) (plsense (0 3 2)) (log4e (0 2 0)) (yaxception (0 3 2))) "Perl Package Explorer" single ((:commit . "8a2f465264c74e04524cc789cdad0190ace43f6c") (:keywords "perl" "convenience") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:url . "https://github.com/aki2o/plsense-direx"))]) +(plsense . [(20151104 1445) ((auto-complete (1 4 0)) (log4e (0 2 0)) (yaxception (0 2 0))) "provide interface for PlSense that is a development tool for Perl." single ((:commit . "d50f9dccc98f42bdb42f1d1c8142246e03879218") (:keywords "perl" "completion") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:url . "https://github.com/aki2o/emacs-plsense"))]) +(plisp-mode . [(20190914 513) nil "Major mode for PicoLisp programming." tar ((:commit . "1ae7af6c310d20b31b8229dc8c1eedeb47aa3311") (:keywords "picolisp" "lisp" "programming") (:authors ("Alexis" . "flexibeast@gmail.com")) (:maintainer "Alexis" . "flexibeast@gmail.com") (:url . "https://github.com/flexibeast/plisp-mode"))]) +(plim-mode . [(20140813 13) nil "Major mode for editing Plim files" single ((:commit . "92e39190286f172567ceb02c80e1df3b81abfa2d") (:keywords "markup" "language") (:authors ("Dong Weiming")) (:maintainer "Dong Weiming") (:url . "http://github.com/dongweiming/plim-mode"))]) +(plenv . [(20130707 616) nil "A plenv wrapper for Emacs" single ((:commit . "ee937d0f3a1a7ba2d035f45be896d3ed8fefaee2") (:keywords "emacs" "perl") (:authors ("Kenta Sato" . "karupa@cpan.org")) (:maintainer "Kenta Sato" . "karupa@cpan.org"))]) +(playground . [(20180624 326) ((emacs (24 4))) "Manage sandboxes for alternative configurations" single ((:commit . "9212790026bea9ab5fb4ecf0da1163be8ab00776") (:keywords "maint") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:url . "https://github.com/akirak/emacs-playground"))]) +(playerctl . [(20180301 1354) nil "Control your music player (e.g. Spotify) with playerctl" single ((:commit . "3eee541423c2e5eb9f23a26fa9aa88c9c5a19ad1") (:keywords "multimedia" "playerctl" "music") (:authors ("Thomas Luquet" . "thomas@luquet.net")) (:maintainer "Thomas Luquet" . "thomas@luquet.net") (:url . "https://github.com/thomasluquet/playerctl.el"))]) +(play-routes-mode . [(20170426 733) nil "Play Framework Routes File Support" single ((:commit . "22d7b87e0eaf0330f2b2283872f8dc08a3258771") (:keywords "play" "scala") (:authors ("M.Riehl , P.Haun" . "bomgar85@googlemail.com")) (:maintainer "M.Riehl , P.Haun" . "bomgar85@googlemail.com") (:url . "https://github.com/brocode/play-routes-mode/"))]) +(play-crystal . [(20180114 1024) ((emacs (24 4)) (dash (2 12 0)) (request (0 2 0))) "https://play.crystal-lang.org integration." single ((:commit . "0b4810a9025213bd11dbcbfd38b3ca928829e0a5") (:keywords "convenience") (:authors ("Vitalii Elenhaupt")) (:maintainer "Vitalii Elenhaupt") (:url . "https://github.com/veelenga/play-crystal.el"))]) +(platformio-mode . [(20161210 1339) ((projectile (0 13 0))) "PlatformIO integration" single ((:commit . "1466aed132a77f48fcb31938d64abb1a1e58ec42") (:authors ("Zach Massia" . "zmassia@gmail.com")) (:maintainer "Zach Massia" . "zmassia@gmail.com") (:url . "https://github.com/zachmassia/platformio-mode"))]) +(plaster . [(20180127 2050) ((emacs (24 3))) "Pasting to a plaster host with buffers." single ((:commit . "f82f845ede3b48ca11934171b30effb523ba9fcf") (:keywords "convenience" "paste service") (:authors ("Nicolas Hafner" . "shinmera@tymoon.eu")) (:maintainer "Nicolas Hafner" . "shinmera@tymoon.eu") (:url . "http://github.com/shirakumo/plaster/"))]) +(plantuml-mode . [(20191102 2056) ((dash (2 0 0)) (emacs (25 0))) "Major mode for PlantUML" single ((:commit . "ea45a13707abd2a70df183f1aec6447197fc9ccc") (:keywords "uml" "plantuml" "ascii") (:authors ("Zhang Weize (zwz)")) (:maintainer "Carlo Sciolla (skuro)"))]) +(planet-theme . [(20161031 217) ((emacs (24))) "A dark theme inspired by Gmail's 'Planets' theme of yore" single ((:commit . "b0a310ff36565fe22224c407cf59569986698a32") (:keywords "themes") (:authors ("Charlie McMackin" . "charlie.mac@gmail.com")) (:maintainer "Charlie McMackin" . "charlie.mac@gmail.com") (:url . "https://github.com/cmack/emacs-planet-theme"))]) +(plan9-theme . [(20180804 1441) nil "A color theme for Emacs based on Plan9" single ((:commit . "c2da2fcb241e9800d931a1ff19ecd9fd84d30382") (:authors ("John Louis Del Rosario" . "john2x@gmail.com")) (:maintainer "John Louis Del Rosario" . "john2x@gmail.com") (:url . "https://github.com/john2x/plan9-theme.el"))]) +(plain-theme . [(20171124 410) ((emacs (24))) "Plain theme without syntax highlighting" single ((:commit . "48b37b9b19d8f1e0accbf930f30b5346cf7959fe"))]) +(plain-org-wiki . [(20191013 1833) ((emacs (24 3)) (ivy (0 12 0))) "Simple jump-to-org-files in a directory package" single ((:commit . "887717c184fb22dd219c78851303a8e5b917f877") (:keywords "convenience") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/plain-org-wiki"))]) +(pkgbuild-mode . [(20181216 1331) ((emacs (25 1))) "Interface to the ArchLinux package manager" single ((:commit . "e30e37730b5f30bc0dd5b9328fbf4cb3e6f46fdd") (:keywords "languages") (:authors ("Juergen Hoetzel" . "juergen@hoetzel.info")) (:maintainer "Juergen Hoetzel" . "juergen@hoetzel.info") (:url . "https://github.com/juergenhoetzel/pkgbuild-mode"))]) +(pkg-info . [(20150517 1143) ((epl (0 8))) "Information about packages" single ((:commit . "76ba7415480687d05a4353b27fea2ae02b8d9d61") (:keywords "convenience") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com") (:url . "https://github.com/lunaryorn/pkg-info.el"))]) +(pixiv-novel-mode . [(20160220 1421) nil "Major mode for pixiv novel" single ((:commit . "0d1ca524d92b91f20a7105402a773bc21779b434") (:keywords "novel" "pixiv") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) +(pixie-mode . [(20180626 541) ((clojure-mode (3 0 1)) (inf-clojure (1 0 0))) "Major mode for Pixie-lang" single ((:commit . "a40c2632cfbe948852a5cdcfd44e6a65db11834d") (:authors ("John Walker" . "john.lou.walker@gmail.com")) (:maintainer "John Walker" . "john.lou.walker@gmail.com") (:url . "https://github.com/johnwalker/pixie-mode"))]) +(pivotal-tracker . [(20170720 1516) nil "Interact with Pivotal Tracker through its API" single ((:commit . "0311d117037c74512149a4a78b269c2e46d7dfba") (:authors ("John Andrews")) (:maintainer "John Andrews") (:url . "http://github.com/jxa/pivotal-tracker"))]) +(pippel . [(20180710 856) ((emacs (25 1)) (s (1 11 0)) (dash (2 12 0))) "Frontend to python package manager pip" tar ((:commit . "21a5200e8e5ccaa1911abb4ebf090b76ca839756") (:authors ("Fritz Stelzer" . "brotzeitmacher@gmail.com")) (:maintainer "Fritz Stelzer" . "brotzeitmacher@gmail.com") (:url . "https://github.com/brotzeitmacher/pippel"))]) +(pipenv . [(20190919 2147) ((emacs (25 1)) (f (0 19 0)) (s (1 12 0)) (pyvenv (1 20))) "A Pipenv porcelain." single ((:commit . "b730bb509e8b60af9f5ab1f1e6c3458d1d95d789") (:authors ("Paul Walsh" . "paulywalsh@gmail.com")) (:maintainer "Paul Walsh" . "paulywalsh@gmail.com") (:url . "https://github.com/pwalsh/pipenv.el"))]) +(pip-requirements . [(20181027 1629) ((dash (2 8 0))) "A major mode for editing pip requirements files." single ((:commit . "216cd1690f80cc965d4ae47b8753fc185f778ff6") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) +(pinyinlib . [(20170827 2142) nil "Convert first letter of Pinyin to Simplified/Traditional Chinese characters" single ((:commit . "45f05d3dbb4fe957f7ab332ca6f94675848b6aa3") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com"))]) +(pinyin-search . [(20160515 358) ((pinyinlib (0 1 0))) "Search Chinese by Pinyin" single ((:commit . "2e877a76851009d41bde66eb33182a03a7f04262") (:keywords "chinese" "search") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com") (:url . "https://github.com/xuchunyang/pinyin-search.el"))]) +(pinyin . [(20180620 1241) ((cl-lib (0 5)) (emacs (24))) "Convert Hanzi to Pinyin (汉字转拼音)" tar ((:commit . "a325e790e9dd7c5028c4c8d110b08e9d78227382") (:keywords "extensions") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/pinyin.el"))]) +(pinot . [(20140211 2026) nil "Emacs interface to pinot-search" tar ((:commit . "67fda555a155b22bb2ce44ba618b4bd6fc5f144a") (:authors ("Takafumi Arakaki ")) (:maintainer "Takafumi Arakaki "))]) +(pine-script-mode . [(20181110 151) ((emacs (24))) "Trading View Pine Script major mode" single ((:commit . "f7892d373e30df0b2e8d2191e4ddb2064a92dd3c") (:keywords "extensions") (:authors ("Eric Crosson" . "eric.s.crosson@utexas.edu")) (:maintainer "Eric Crosson" . "eric.s.crosson@utexas.edu") (:url . "https://github.com/ericcrosson/pine-script-mode"))]) +(pinboard-popular . [(20180511 1726) ((loop (1 4))) "Displays links from the pinboard.in popular page." single ((:commit . "c0bc76cd35f8ecf34723c64a702b82eec2751318") (:keywords "pinboard") (:url . "https://github.com/asimpson/pinboard-popular"))]) +(pinboard-api . [(20140324 1148) nil "Rudimentary http://pinboard.in integration" single ((:commit . "b7b5214d0c35178f8dca08cf22d6ef3c21f0fce4") (:keywords "pinboard" "www") (:authors ("Danie Roux" . "danie@danieroux.com")) (:maintainer "Danie Roux" . "danie@danieroux.com") (:url . "https://github.com/danieroux/pinboard-api-el"))]) +(pinboard . [(20190623 1421) ((emacs (25)) (cl-lib (0 5))) "A pinboard.in client" single ((:commit . "910d0fae61badd7e25e148d2ea84f0188b802fb1") (:keywords "hypermedia" "bookmarking" "reading" "pinboard") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:url . "https://github.com/davep/pinboard.el"))]) +(pillar . [(20141112 1811) ((makey (0 3))) "Major mode for editing Pillar files" tar ((:commit . "13a7f676544cc66005ccd8e6fc1c25e4ccd6f909") (:keywords "markup" "major-mode") (:authors ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainer "Damien Cassou" . "damien.cassou@gmail.com") (:url . "http://github.com/DamienCassou/pillar-mode"))]) +(pig-snippets . [(20130913 624) ((yasnippet (0 8 0))) "Snippets for pig-mode" tar ((:commit . "4c6c6e1b1bb719d8adc6c47cc24665f6fe558959"))]) +(pig-mode . [(20180520 1400) nil "Major mode for Pig files" single ((:commit . "4c6c6e1b1bb719d8adc6c47cc24665f6fe558959") (:maintainer "David A. Shamma"))]) +(picpocket . [(20180914 1819) ((emacs (24 4))) "Image viewer" single ((:commit . "6fd88b8711c4370662c0f9c462170187d092a046") (:keywords "multimedia") (:authors ("Johan Claesson" . "johanclaesson@bredband.net")) (:maintainer "Johan Claesson" . "johanclaesson@bredband.net") (:url . "https://github.com/johanclaesson/picpocket"))]) +(picolisp-mode . [(20190824 806) nil "[ Obsolete; use 'plisp-mode' instead ]" tar ((:commit . "1ae7af6c310d20b31b8229dc8c1eedeb47aa3311") (:keywords "picolisp" "lisp" "programming") (:authors ("Alexis" . "flexibeast@gmail.com")) (:maintainer "Alexis" . "flexibeast@gmail.com") (:url . "https://github.com/flexibeast/picolisp-mode"))]) +(pickle . [(20190923 354) ((emacs (25 1)) (cl-lib (0 6 1))) "Major mode for editing cucumber gherkin files." single ((:commit . "3a0a717f2a24827667f34bc53830a3b81cd57460") (:keywords "ahungry" "languages" "cucumber" "gherkin") (:authors ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com") (:url . "https://github.com/ahungry/pickle-mode"))]) +(pianobar . [(20180417 104) nil "thin wrapper for Pianobar, a Pandora Radio client" single ((:commit . "3154c4cb7401017fd441fcd6a7a0b669a4406882") (:authors ("Aaron Griffith" . "aargri@gmail.com")) (:maintainer "Aaron Griffith" . "aargri@gmail.com") (:url . "http://github.com/agrif/pianobar.el"))]) +(phpunit . [(20180829 1438) ((s (1 12 0)) (f (0 19 0)) (pkg-info (0 6)) (cl-lib (0 5)) (emacs (24 3))) "Launch PHP unit tests using phpunit" tar ((:commit . "fe6bc91c3bd8b329c6d26ad883a025f06b5121ee") (:keywords "tools" "php" "tests" "phpunit") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com") ("Eric Hansen" . "hansen.c.eric@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:url . "https://github.com/nlamirault/phpunit.el"))]) +(phpt-mode . [(20190512 1809) ((emacs (25)) (polymode (0 1 5)) (php-mode (1 21 2))) "Major mode for editing PHPT test code" single ((:commit . "deb386f1a81003074c476f15e1975d445ff6df01") (:keywords "languages" "php") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:url . "https://github.com/emacs-php/phpt-mode"))]) +(phpstan . [(20190929 612) ((emacs (24 3))) "Interface to PHPStan." single ((:commit . "81bcfa59d1e5708239d8c32d99cd84405449fb64") (:keywords "tools" "php") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:url . "https://github.com/emacs-php/phpstan.el"))]) +(phpcbf . [(20181228 423) ((s (1 9 0))) "Format PHP code in Emacs using PHP_CodeSniffer's phpcbf" single ((:commit . "fb0bc6073a57126cf1a8404723aa0a715dd761aa") (:keywords "tools" "php") (:authors ("nishimaki10")) (:maintainer "nishimaki10") (:url . "https://github.com/nishimaki10/emacs-phpcbf"))]) +(phpactor . [(20190913 1340) ((emacs (24 4)) (cl-lib (0 5)) (f (0 17)) (php-runtime (0 2)) (composer (0 1)) (async (1 9 3))) "Interface to Phpactor" tar ((:commit . "a12ec67ce9de9e96c89548052ae323a277cba846") (:keywords "tools" "php") (:authors ("USAMI Kenta" . "tadsan@zonu.me") ("Mikael Kermorgant" . "mikael@kgtech.fi")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:url . "https://github.com/emacs-php/phpactor.el"))]) +(php-scratch . [(20161103 2217) ((emacs (24 3)) (s (1 11 0)) (php-mode (1 17 0))) "A scratch buffer to interactively evaluate php code" single ((:commit . "3aa66d1d53b84b779374edff7a7e6b5f2cd7575d") (:authors ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainer "Tijs Mallaerts" . "tijs.mallaerts@gmail.com"))]) +(php-runtime . [(20181212 1825) ((emacs (25)) (cl-lib (0 5)) (f (0 20)) (s (1 7))) "Language binding bridge to PHP" single ((:commit . "017e0e70f07d6b25e37d5c5f4d271a914b677631") (:keywords "processes" "php") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:url . "https://github.com/emacs-php/php-runtime.el"))]) +(php-refactor-mode . [(20171124 635) nil "Minor mode to quickly and safely perform common refactorings" single ((:commit . "7a794b0618df2882b1bd586fdd698dba0bc5130d") (:keywords "php" "refactor") (:authors ("Matthew M. Keeler" . "keelerm84@gmail.com")) (:maintainer "Matthew M. Keeler" . "keelerm84@gmail.com") (:url . "https://github.com/keelerm84/php-refactor-mode.el"))]) +(php-mode . [(20191122 103) ((emacs (24 3))) "Major mode for editing PHP code" tar ((:commit . "d638cecd43604477f4f8ff7ce55b2390b8b0b593") (:keywords "languages" "php") (:authors ("Eric James Michael Ritz")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:url . "https://github.com/emacs-php/php-mode"))]) +(php-eldoc . [(20140202 1941) nil "eldoc backend for php" tar ((:commit . "df05064146b884d9081e10657e32dc480f070cfe") (:authors ("sabof")) (:maintainer "sabof") (:url . "https://github.com/sabof/php-eldoc"))]) +(php-cs-fixer . [(20190207 1126) ((cl-lib (0 5))) "php-cs-fixer wrapper." single ((:commit . "6540006710daf2b2d47576968ea826a83a40a6bf") (:keywords "languages" "php") (:authors ("Philippe Ivaldi for OVYA")) (:maintainer "Philippe Ivaldi for OVYA") (:url . "https://github.com/OVYA/php-cs-fixer"))]) +(php-boris-minor-mode . [(20140209 1835) ((php-boris (0 0 1)) (highlight (0))) "a minor mode to evaluate PHP code in the Boris repl" single ((:commit . "c70e176dd6545f2d42ca3427e87b469635616d8a") (:keywords "php" "repl" "eval") (:authors ("steckerhalter")) (:maintainer "steckerhalter") (:url . "https://github.com/steckerhalter/php-boris-minor-mode"))]) +(php-boris . [(20130527 821) nil "Run boris php REPL" single ((:commit . "f2faebf610c917f7091f7ec0cd97645629c4f819") (:keywords "php" "commint" "repl" "boris") (:authors ("Tom Regner")) (:maintainer "Tom Regner" . "tom@goochesa.de"))]) +(php-auto-yasnippets . [(20170331 114) ((php-mode (1 11)) (yasnippet (0 8 0))) "Creates snippets for PHP functions" tar ((:commit . "03e1f0899c081813901ac15c2f7a675a37cca9f5") (:authors ("Eric James Michael Ritz")) (:maintainer "Eric James Michael Ritz") (:url . "https://github.com/ejmr/php-auto-yasnippets"))]) +(phoenix-dark-pink-theme . [(20190821 48) nil "Originally a port of the Sublime Text 2 theme" single ((:commit . "ddd98a45775be105984ec598384e68df3d3e8046") (:authors ("J Irving" . "j@lollyshouse.ca")) (:maintainer "J Irving" . "j@lollyshouse.ca") (:url . "http://github.com/j0ni/phoenix-dark-pink"))]) +(phoenix-dark-mono-theme . [(20170729 1406) nil "Monochromatic version of the Phoenix theme" single ((:commit . "a54f515d162148bcb38676980bc2316adb3d7b8b") (:authors ("J Irving" . "j@lollyshouse.ca")) (:maintainer "J Irving" . "j@lollyshouse.ca") (:url . "http://github.com/j0ni/phoenix-dark-mono"))]) +(phi-search-migemo . [(20170618 921) ((phi-search (2 2 0)) (migemo (1 9 1))) "migemo extension for phi-search" single ((:commit . "308909ebfc8003d16673f97ca9eb26a667b72969") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) +(phi-search-mc . [(20160324 1503) ((phi-search (2 0 0)) (multiple-cursors (1 2 1))) "multiple-cursors extension for phi-search" single ((:commit . "7aa671910f766437089aec26c3aa7814222d1356") (:keywords "search" "cursors") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:url . "https://github.com/knu/phi-search-mc.el"))]) +(phi-search-dired . [(20150405 714) ((phi-search (2 2 0))) "interactive filtering for dired powered by phi-search" single ((:commit . "162a5e4507c72512affae22744bb606a906d4193") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) +(phi-search . [(20191106 233) nil "another incremental search & replace, compatible with \"multiple-cursors\"" tar ((:commit . "2a8fe73aa9ef014e27e202964c5a4f4e94ef24b2") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) +(phi-rectangle . [(20151208 654) nil "another rectangle-mark command (rewrite of rect-mark)" single ((:commit . "0c12716afc71d803d1f39417469521dc465762d9") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) +(phi-grep . [(20190920 908) ((cl-lib (0 1))) "Interactively-editable recursive grep implementation in elisp" single ((:commit . "06b740e3fb20074be9bae87530f5616a122c3aca") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://github.com/zk-phi/phi-grep"))]) +(phi-autopair . [(20170217 353) ((paredit (20))) "another simple-minded autopair implementation" single ((:commit . "3c7556779c3a53b045f5df33ae2a0c67469cbf60") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) +(phan . [(20190521 203) ((emacs (24)) (composer (0 0 8)) (f (0 17))) "Utility functions for Phan (PHP static analizer)" single ((:commit . "82c2d962cd5cab647e8f2f5636bc83511ea40cb4") (:keywords "tools" "php") (:authors ("USAMI Kenta" . "tadsan@pixiv.com")) (:maintainer "USAMI Kenta" . "tadsan@pixiv.com") (:url . "https://github.com/emacs-php/phan.el"))]) +(phabricator . [(20160510 1425) ((emacs (24 4)) (dash (1 0)) (projectile (0 13 0)) (s (1 10 0)) (f (0 17 2))) "Phabricator/Arcanist helpers for Emacs." single ((:commit . "d09d6f059aea92d3b11c68664a5e80c901182ab8") (:keywords "phabricator" "arcanist" "diffusion") (:authors ("Andrew Tulloch")) (:maintainer "Andrew Tulloch") (:url . "https://github.com/ajtulloch/phabricator.el"))]) +(ph . [(20161029 1522) ((emacs (24 3))) "A global minor mode for managing multiple projects." tar ((:commit . "ed80dad9211583ed0db633448b3624c99b7fac23"))]) +(pgdevenv . [(20150105 2236) nil "Manage your PostgreSQL development envs" tar ((:commit . "7f1d5bc734750aca98cf67a9491cdbd5615fd132") (:keywords "emacs" "postgresql" "development" "environment" "shell" "debug" "gdb") (:authors ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainer "Dimitri Fontaine" . "dim@tapoueh.org"))]) +(pg . [(20130731 2142) nil "Emacs Lisp interface to the PostgreSQL RDBMS" single ((:commit . "4f6516ec3946d95dcef49abb6703cc89ecb5183d") (:keywords "data" "comm" "database" "postgresql") (:authors ("Eric Marsden" . "emarsden@laas.fr")) (:maintainer "Helmut Eller" . "heller@common-lisp.net"))]) +(pfuture . [(20190505 1006) ((emacs (25 2))) "a simple wrapper around asynchronous processes" single ((:commit . "368254ee30692c709400db413c347e18e76a8a55") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/pfuture"))]) +(perspeen . [(20171203 1021) ((emacs (25 0)) (powerline (2 4))) "An package for multi-workspace" tar ((:commit . "edb70c530bda50ff3d1756e32a703d5fef5e5480") (:keywords "lisp") (:authors ("Peng Li" . "seudut@gmail.com")) (:maintainer "Peng Li" . "seudut@gmail.com") (:url . "https://github.com/seudut/perspeen"))]) +(perspective . [(20191120 3) ((cl-lib (0 5))) "switch between named \"perspectives\" of the editor" single ((:commit . "29f4c5cad502ec73d4c62199a9d940b318351dd3") (:keywords "workspace" "convenience" "frames") (:authors ("Natalie Weizenbaum" . "nex342@gmail.com")) (:maintainer "Natalie Weizenbaum" . "nex342@gmail.com") (:url . "http://github.com/nex3/perspective-el"))]) +(persp-projectile . [(20180616 1944) ((perspective (1 9)) (projectile (0 11 0)) (cl-lib (0 3))) "Perspective integration with Projectile" single ((:commit . "533808b3e4f8f95a1e3ed9c55d9aa720277ebd5f") (:keywords "project" "convenience") (:authors ("Daniel Wu")) (:maintainer "Daniel Wu"))]) +(persp-mode-projectile-bridge . [(20170315 1120) ((persp-mode (2 9)) (projectile (0 13 0)) (cl-lib (0 5))) "persp-mode + projectile integration." single ((:commit . "f6453cd7b8b4352c06e771706f2c5b7e2cdff1ce") (:keywords "persp-mode" "projectile") (:authors ("Constantin Kulikov (Bad_ptr)" . "zxnotdead@gmail.com")) (:maintainer "Constantin Kulikov (Bad_ptr)" . "zxnotdead@gmail.com") (:url . "https://github.com/Bad-ptr/persp-mode-projectile-bridge.el"))]) +(persp-mode . [(20190511 1402) nil "windows/buffers sets shared among frames + save/load." single ((:commit . "e330e6240bbb82589077f30472b05b95d1ff430d") (:keywords "perspectives" "session" "workspace" "persistence" "windows" "buffers" "convenience") (:authors ("Constantin Kulikov (Bad_ptr)" . "zxnotdead@gmail.com")) (:maintainer "Constantin Kulikov (Bad_ptr)" . "zxnotdead@gmail.com") (:url . "https://github.com/Bad-ptr/persp-mode.el"))]) +(persp-fr . [(20191108 754) ((emacs (25 1)) (persp-mode (2 9 6)) (dash (2 13 0))) "In persp-mode, show perspective list in the GUI window title" single ((:commit . "1adbb6a9f9a4db580a9b7ed8b4091738e01345e6") (:keywords "perspectives" "workspace" "windows" "convenience") (:authors ("Francesc Rocher" . "francesc.rocher@gmail.com")) (:maintainer "Francesc Rocher" . "francesc.rocher@gmail.com") (:url . "http://github.com/rocher/persp-fr"))]) +(persistent-soft . [(20150223 1853) ((pcache (0 3 1)) (list-utils (0 4 2))) "Persistent storage, returning nil on failure" single ((:commit . "a1e0ddf2a12a6f18cab565dee250f070384cbe02") (:keywords "data" "extensions") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:url . "http://github.com/rolandwalker/persistent-soft"))]) +(persistent-scratch . [(20190922 1046) ((emacs (24))) "Preserve the scratch buffer across Emacs sessions" single ((:commit . "fd690e138459e0b490f1fda469811a9cbcb34df7") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:url . "https://github.com/Fanael/persistent-scratch"))]) +(persistent-overlays . [(20161128 700) nil "Minor mode to store selected overlays to be loaded later" tar ((:commit . "f563c8b966edc78c9d806661c4eb80e4781c4eab") (:keywords "overlays" "persistent") (:authors ("Michael Neilly" . "mneilly@yahoo.com")) (:maintainer "Michael Neilly" . "mneilly@yahoo.com") (:url . "https://github.com/mneilly/Emacs-Persistent-Overlays"))]) +(perlbrew . [(20161109 709) nil "A perlbrew wrapper for Emacs" single ((:commit . "3a3406c3307c92aa30f9400d430925c434a3b6f0") (:keywords "emacs" "perl") (:authors ("Kentaro Kuribayashi" . "kentarok@gmail.com")) (:maintainer "Kentaro Kuribayashi" . "kentarok@gmail.com"))]) +(perl6-mode . [(20180619 1159) ((emacs (24 4)) (pkg-info (0 1))) "Major mode for editing Perl 6 code" tar ((:commit . "88de065795d6863b23b6042576b9e90f8cbf8798") (:keywords "languages") (:authors ("Hinrik Örn Sigurðsson" . "hinrik.sig@gmail.com")) (:maintainer "Hinrik Örn Sigurðsson" . "hinrik.sig@gmail.com") (:url . "https://github.com/hinrik/perl6-mode"))]) +(perfect-margin . [(20190722 126) ((emacs (24 0)) (cl-lib (0 5))) "auto center windows, work with minimap and/or linum-mode" single ((:commit . "94b055c743b1859098870c8aca3e915bd6e67d9d") (:keywords "convenience" "frames") (:authors ("Randall Wang" . "randall.wjz@gmail.com")) (:maintainer "Randall Wang" . "randall.wjz@gmail.com") (:url . "https://github.com/mpwang/perfect-margin"))]) +(per-buffer-theme . [(20191101 2333) ((cl-lib (0 5))) "Change theme according to buffer name or major mode." single ((:commit . "7df4d2f4be64dbcf0bf10a2b9ac3db858fbcd9c8") (:keywords "themes") (:authors ("Iñigo Serna" . "inigoserna@gmx.com")) (:maintainer "Iñigo Serna" . "inigoserna@gmx.com") (:url . "https://hg.serna.eu/emacs/per-buffer-theme"))]) +(pepita . [(20190907 409) ((emacs (25)) (csv (2 1))) "Run Splunk search commands, export results to CSV/HTML/JSON" single ((:commit . "489ddc2675906f9dd27bd4ec69ef140e52194952") (:keywords "tools" "convenience" "matching") (:authors ("Sebastian Monia" . "smonia@outlook.com")) (:maintainer "Sebastian Monia" . "smonia@outlook.com") (:url . "https://github.com/sebasmonia/pepita.git"))]) +(pelican-mode . [(20190124 2336) ((emacs (25))) "Minor mode for editing Pelican sites" single ((:commit . "65d7caf5d926599a5007eb7bc279215908aa5252") (:keywords "convenience" "editing") (:authors ("Joe Wreschnig" . "joe.wreschnig@gmail.com")) (:maintainer "Joe Wreschnig" . "joe.wreschnig@gmail.com") (:url . "https://git.korewanetadesu.com/pelican-mode.git"))]) +(peg . [(20150708 641) nil "Parsing Expression Grammars in Emacs Lisp" single ((:commit . "081efeca91d790c7fbc90871ac22c40935f4833b"))]) +(peep-dired . [(20160321 2237) nil "Peep at files in another window from dired buffers" single ((:commit . "1d410a4e48db07a942e54d3b83a85c7a7ec0aab3") (:keywords "files" "convenience") (:authors ("Adam Sokolnicki" . "adam.sokolnicki@gmail.com")) (:maintainer "Adam Sokolnicki" . "adam.sokolnicki@gmail.com"))]) +(peek-mode . [(20130620 1946) ((elnode (0 9 8 1))) "Serve buffers live over HTTP with elnode backend" tar ((:commit . "55a7dd011375330c7d57322257a5167516702c71") (:authors ("Erik Iverson" . "erik@sigmafield.org")) (:maintainer "Erik Iverson" . "erik@sigmafield.org") (:url . "https://github.com/erikriverson/peek-mode"))]) +(peacock-theme . [(20170808 1320) ((emacs (24 0))) "an Emacs 24 theme based on Peacock (tmTheme)" single ((:commit . "9e46fbfb562b6e26c6e3d6d618b044b3694da4c8") (:authors ("Jason Milkins")) (:maintainer "Jason Milkins") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) +(pdfgrep . [(20181007 1728) ((emacs (24 4))) "run `pdfgrep' and display the results." single ((:commit . "e251cd5c88a4ba5cb69008ba412d329f4d59e1d2") (:keywords "extensions" "mail" "pdf" "grep") (:authors ("Jérémy Compostella" . "jeremy.compostella@gmail.com")) (:maintainer "Jérémy Compostella" . "jeremy.compostella@gmail.com") (:url . "https://github.com/jeremy-compostella/pdfgrep"))]) +(pdf-view-restore . [(20190904 1708) ((pdf-tools (0 90)) (emacs (26 0))) "Support for opening last known pdf position in pdfview mode" single ((:commit . "5a1947c01a3edecc9e0fe7629041a2f53e0610c9") (:keywords "files" "convenience") (:authors ("Kevin Kim" . "kevinkim1991@gmail.com")) (:maintainer "Kevin Kim" . "kevinkim1991@gmail.com") (:url . "https://github.com/007kevin/pdf-view-restore"))]) +(pdf-tools . [(20191031 642) ((emacs (24 3)) (tablist (1 0)) (let-alist (1 0 4))) "Support library for PDF documents." tar ((:commit . "29d9f4f5b1d295cce1be686201bcbda1a9e4b62e") (:keywords "files" "multimedia") (:authors ("Andreas Politz" . "politza@fh-trier.de")) (:maintainer "Andreas Politz" . "politza@fh-trier.de"))]) +(pdb-mode . [(20150128 1751) nil "Major mode for editing Protein Data Bank files" single ((:commit . "855fb18ebb73b5df30c8d7677c2bcd0f361b138a") (:keywords "data" "pdb") (:authors (nil . "charles.bond@uwa.edu.au")) (:maintainer nil . "aix.bing@gmail.com") (:url . "http://bondxray.org/software/pdb-mode/"))]) +(pcsv . [(20150220 1131) nil "Parser of csv" single ((:commit . "798e0933f8d0818beb17aebf3b1056bbf74e03d0") (:keywords "data") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:url . "https://github.com/mhayashi1120/Emacs-pcsv/raw/master/pcsv.el"))]) +(pcre2el . [(20161120 2103) ((emacs (24)) (cl-lib (0 3))) "regexp syntax converter" single ((:commit . "0b5b2a2c173aab3fd14aac6cf5e90ad3bf58fa7d") (:authors ("joddie ")) (:maintainer "joddie ") (:url . "https://github.com/joddie/pcre2el"))]) +(pcomplete-extension . [(20190928 519) ((emacs (24)) (cl-lib (0 5))) "additional completion for pcomplete" single ((:commit . "bc5eb204fee659e0980056009409b44bc7655716") (:authors ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com") (:url . "https://github.com/thierryvolpiatto/pcomplete-extension"))]) +(pcmpl-pip . [(20181229 1420) ((s (1 12 0)) (f (0 19 0)) (seq (2 15))) "pcomplete for pip" single ((:commit . "bc79228674ad5c1bc458c90dd8839790fb0a09e8") (:keywords "pcomplete" "pip" "python" "tools") (:authors ("zwild" . "judezhao@outlook.com")) (:maintainer "zwild" . "judezhao@outlook.com"))]) +(pcmpl-homebrew . [(20190213 318) nil "pcomplete for homebrew" single ((:commit . "39f2e8faf4d866410a625bbcf88f2504940c8982") (:keywords "pcomplete" "homebrew" "tools" "cask" "services") (:authors ("zwild" . "judezhao@outlook.com")) (:maintainer "zwild" . "judezhao@outlook.com"))]) +(pcmpl-git . [(20170121 59) nil "pcomplete for git" tar ((:commit . "9472ac70baeda025ef7becd1cf141d72aec93f32") (:keywords "tools") (:authors ("Leo Liu" . "sdl.web@gmail.com")) (:maintainer "Leo Liu" . "sdl.web@gmail.com"))]) +(pcmpl-args . [(20190223 1613) nil "Enhanced shell command completion" single ((:commit . "0b8a05fc6e370fa9c466250659619f8d6b53d446") (:keywords "abbrev" "completion" "convenience" "processes" "terminals" "unix") (:authors ("Jonathan Waltman" . "jonathan.waltman@gmail.com")) (:maintainer "Jonathan Waltman" . "jonathan.waltman@gmail.com") (:url . "https://github.com/JonWaltman/pcmpl-args.el"))]) +(pcap-mode . [(20161025 1448) ((emacs (24 3))) "Major mode for working with PCAP files" single ((:commit . "52780669af0ade136f84d73f21b4dbb7ab655416") (:keywords "pcap" "packets" "tcpdump" "wireshark" "tshark") (:authors ("Aaron Conole" . "aconole@bytheb.org")) (:maintainer "Aaron Conole" . "aconole@bytheb.org"))]) +(pcache . [(20170105 2214) ((eieio (1 3))) "persistent caching for Emacs." single ((:commit . "1f8086077d770e524492e6fa59b07856e85a6fea") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainer "Yann Hodique" . "yann.hodique@gmail.com"))]) +(pc-bufsw . [(20191014 848) nil "PC style quick buffer switcher" single ((:commit . "a7c7bba4b7d511eceaaa8fee34d598296402555b") (:keywords "buffer") (:authors ("Igor Bukanov" . "igor@mir2.org")) (:maintainer "Igor Bukanov" . "igor@mir2.org") (:url . "https://github.com/ibukanov/pc-bufsw"))]) +(pbcopy . [(20150225 459) nil "Emacs Interface to pbcopy" single ((:commit . "338f7245746b5de1bb96c5cc2b32bfd9b5d83272") (:keywords "mac" "osx" "pbcopy") (:authors ("Daniel Nelson")) (:maintainer "Daniel Nelson") (:url . "https://github.com/jkp/pbcopy.el"))]) +(paxedit . [(20160730 1727) ((cl-lib (0 5)) (paredit (23))) "Structured, Context Driven LISP Editing and Refactoring" single ((:commit . "09f3d5aeb108937a801e77ef413e29eaa4ecc4be") (:keywords "lisp" "refactoring" "context") (:authors ("Mustafa Shameem")) (:maintainer "Mustafa Shameem") (:url . "https://github.com/promethial/paxedit"))]) +(pathify . [(20160423 846) nil "Symlink your scripts into a PATH directory" single ((:commit . "401b184c743694a60b3bc4273fc43de05cd5ac4b") (:keywords "convenience") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:url . "https://gitlab.com/alezost-emacs/pathify"))]) +(path-helper . [(20181208 2229) ((emacs (24))) "Set PATH environment variables from config files" single ((:commit . "34538affb3f341b3c56a875bb094ddb2b859a8ef") (:keywords "tools" "unix") (:authors ("Arnaud Rouanet" . "arnaud@rouanet.org")) (:maintainer "Arnaud Rouanet" . "arnaud@rouanet.org") (:url . "https://github.com/arouanet/path-helper"))]) +(path-headerline-mode . [(20140423 1332) nil "Displaying file path on headerline." single ((:commit . "b5b2725c6a8b1cb592fc242b7dbbd54b4dff2e69") (:keywords "headerline") (:authors ("7696122")) (:maintainer "7696122") (:url . "https://github.com/7696122/path-headerline-mode"))]) +(pastery . [(20171114 349) ((emacs (24 4)) (request (0 2 0))) "paste snippets to pastery.net." tar ((:commit . "4493be98b743b4d062cb4e00760125e394a55022") (:keywords "tools") (:authors ("Bruno Dias" . "dias.h.bruno@gmail.com")) (:maintainer "Bruno Dias" . "dias.h.bruno@gmail.com") (:url . "https://github.com/diasbruno/pastery.el"))]) +(pastelmac-theme . [(20151031 236) ((emacs (24 1))) "a soothing theme with a pastel color palette" single ((:commit . "bead21741e3f46f6506e8aef4469d4240a819389") (:keywords "themes") (:authors ("Brian Mastenbrook" . "brian@mastenbrook.net")) (:maintainer "Brian Mastenbrook" . "brian@mastenbrook.net") (:url . "https://github.com/bmastenbrook/pastelmac-theme-el"))]) +(pastehub . [(20140615 620) nil "A client for the PasteHub cloud service" single ((:commit . "37b045c67659c078f1517d0fbd5282dab58dca23") (:authors ("Kiyoka Nishiyama")) (:maintainer "Kiyoka Nishiyama") (:url . "https://github.com/kiyoka/pastehub"))]) +(pastebin . [(20101125 2002) nil "A simple interface to the www.pastebin.com webservice" single ((:commit . "8e9a829298ce0f747ab80758aa26caeb2af6cb30"))]) +(paste-of-code . [(20170709 2355) ((emacs (24 3)) (request (0 2 0))) "paste code on https://paste.ofcode.org" single ((:commit . "92d258e8ec98598d847ecab82903f9224c7c2050") (:keywords "lisp") (:authors ("Bernhard Specht" . "bernhard@specht.net")) (:maintainer "Bernhard Specht" . "bernhard@specht.net"))]) +(password-vault . [(20160126 1820) ((cl-lib (0 2)) (emacs (24))) "A Password manager for Emacs." single ((:commit . "dc56e6c2f5da66f1ab63736cecf08fb2c6c2b30f") (:keywords "password" "productivity") (:authors ("Javier \"PuercoPop\" Olaechea" . "pirata@gmail.com")) (:maintainer "Javier \"PuercoPop\" Olaechea" . "pirata@gmail.com") (:url . "http://github.com/PuercoPop/password-vault"))]) +(password-store-otp . [(20190713 1748) ((emacs (25)) (s (1 9 0)) (password-store (0 1))) "Password store (pass) OTP extension support" single ((:commit . "04998c8578a060ab4a4e8f46f2ee0aafad4ab4d5") (:keywords "tools" "pass") (:authors ("Daniel Barreto")) (:maintainer "Daniel Barreto") (:url . "https://github.com/volrath/password-store-otp.el"))]) +(password-store . [(20190929 1627) ((emacs (25)) (f (0 11 0)) (s (1 9 0)) (with-editor (2 5 11)) (auth-source-pass (5 0 0))) "Password store (pass) support" single ((:commit . "b830119762416fa8706e479e9b01f2453d6f6ad6") (:keywords "tools" "pass" "password" "password-store") (:authors ("Svend Sorensen" . "svend@svends.net")) (:maintainer "Tino Calancha" . "tino.calancha@gmail.com") (:url . "https://www.passwordstore.org/"))]) +(password-mode . [(20170412 629) nil "Hide password text using overlays" single ((:commit . "ed764a4ec1011526457c71b7c37fa9a659a866ab") (:keywords "docs" "password" "passphrase") (:authors ("Jürgen Hötzel" . "juergen@archlinux.org")) (:maintainer "Jürgen Hötzel" . "juergen@archlinux.org"))]) +(password-generator . [(20150222 2040) nil "Password generator for humans. Good, Bad, Phonetic passwords included." single ((:commit . "904cdb591a04305ba882ce19e1d117f5fa60f7d3") (:authors ("Zargener" . "zargener@gmail.com")) (:maintainer "Zargener" . "zargener@gmail.com") (:url . "http://github.com/zargener/emacs-password-genarator"))]) +(passthword . [(20141201 923) ((cl-lib (0 5))) "Simple password manager" single ((:commit . "30bace842eaaa6b48cb2251fb84868ebca0467d6") (:authors ("Peter Stiernström" . "peter@stiernstrom.se")) (:maintainer "Peter Stiernström" . "peter@stiernstrom.se"))]) +(passmm . [(20181130 1612) ((emacs (24 4)) (password-store (0))) "A minor mode for pass (Password Store)." single ((:commit . "b25a92048c788a8477cc5ffe14c0c4a4df19d79a") (:authors ("Peter Jones" . "pjones@devalot.com")) (:maintainer "Peter Jones" . "pjones@devalot.com") (:url . "https://github.com/pjones/passmm"))]) +(pass . [(20190830 2017) ((emacs (25)) (password-store (2 1 0)) (password-store-otp (0 1 5)) (f (0 17))) "Major mode for password-store.el" single ((:commit . "919d8e3826d556433ab67d4ee21a509d209d1baa") (:keywords "password-store" "password" "keychain") (:authors ("Nicolas Petton" . "petton.nicolas@gmail.com") ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Nicolas Petton" . "petton.nicolas@gmail.com"))]) +(pasp-mode . [(20180404 1700) ((emacs (24 3))) "- A major mode for editing Answer Set Programs." single ((:commit . "59385eb0e8ebcfc8c11dd811fb145d4b0fa3cc92") (:keywords "asp" "pasp" "answer set programs" "potassco answer set programs" "major mode" "languages") (:authors ("Henrik Jürges" . "juerges.henrik@gmail.com")) (:maintainer "Henrik Jürges" . "juerges.henrik@gmail.com") (:url . "https://github.com/santifa/pasp-mode"))]) +(parseedn . [(20191113 831) ((emacs (25)) (a (0 1 0 -3 4)) (parseclj (0 1 0))) "Clojure/EDN parser" single ((:commit . "f42ff988338484815ccd925c8f83a32c5d52319b") (:keywords "lisp" "clojure" "edn" "parser") (:authors ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainer "Arne Brasseur" . "arne@arnebrasseur.net"))]) +(parseclj . [(20190531 711) ((emacs (25)) (a (0 1 0 -3 4))) "Clojure/EDN parser" tar ((:commit . "b34d3e13a249d4b92f1a008cdc1df20a92f866c5") (:keywords "lisp" "clojure" "edn" "parser") (:authors ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainer "Arne Brasseur" . "arne@arnebrasseur.net"))]) +(parsec . [(20180730 16) ((emacs (24)) (cl-lib (0 5))) "Parser combinator library" single ((:commit . "2cbbbc2254aa7bcaa4fb5e07c8c1bf2f381dba26") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:url . "https://github.com/cute-jumper/parsec.el"))]) +(parsebib . [(20181219 928) ((emacs (24 3))) "A library for parsing bib files" single ((:commit . "9a5f1730b8ef1fb6c29262a8ba79f8136e5548d4") (:keywords "text" "bibtex") (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm"))]) +(parse-csv . [(20160512 1723) nil "Parse strings with CSV fields into s-expressions" single ((:commit . "96bef1ffbc89ea12d13311c9fa239c5c3e864890") (:keywords "csv") (:authors ("Edward Marco Baringer (Common Lisp)") ("Matt Curtis" . "matt.r.curtis@gmail.com")) (:maintainer "Matt Curtis" . "matt.r.curtis@gmail.com") (:url . "https://github.com/mrc/el-csv"))]) +(parrot . [(20191015 2127) ((emacs (24 1))) "Party Parrot rotates gracefully in mode-line." tar ((:commit . "13757524f1c708b866f4aaab5a9fb3599a1c4f56") (:keywords "party" "parrot" "rotate" "sirocco" "kakapo" "games") (:authors ("Daniel Ting" . "deep.paren.12@gmail.com")) (:maintainer "Daniel Ting" . "deep.paren.12@gmail.com") (:url . "https://github.com/dp12/parrot.git"))]) +(parinfer . [(20180904 844) ((dash (2 13 0)) (cl-lib (0 5))) "Simpler Lisp editing" tar ((:commit . "eaad857ae4351f72a561ee3dec8943713510003f") (:keywords "parinfer") (:authors ("Shi Tianshu")) (:maintainer "Shi Tianshu") (:url . "https://github.com/DogLooksGood/parinfer-mode"))]) +(parent-mode . [(20150824 2300) nil "get major mode's parent modes" single ((:commit . "db692cf08deff2f0e973e6e86e26662b44813d1b") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:url . "https://github.com/Fanael/parent-mode"))]) +(paren-face . [(20191105 2246) nil "a face for parentheses in lisp modes" single ((:commit . "57f8fff2a6765057cc52e6c75560c00049f1a535") (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/tarsius/paren-face"))]) +(paren-completer . [(20160501 1052) ((emacs (24 3))) "Automatically, language agnostically, fill in delimiters." single ((:commit . "74183a8e13fa1266271bdcbcb4bfb29a4f915f0a") (:keywords "convenience") (:authors ("Matthew Bregg")) (:maintainer "Matthew Bregg") (:url . "https://github.com/MatthewBregg/paren-completer"))]) +(paredit-menu . [(20160128 1733) ((paredit (25))) "Adds a menu to paredit.el as memory aid" single ((:commit . "cc0ae85bd819f9ebfa4f2a419ab3b2d70e39c9c8") (:keywords "paredit") (:authors ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainer "Phillip Lord" . "phillip.lord@newcastle.ac.uk"))]) +(paredit-everywhere . [(20180506 849) ((paredit (22))) "Enable some paredit features in non-lisp buffers" single ((:commit . "f04c522e6b088a11255a95cb1e6a08198b4d6537") (:keywords "languages" "convenience") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) +(paredit . [(20191121 2328) nil "minor mode for editing parentheses" single ((:commit . "814999bb320e6d5aaa9c8ff663b1933157129571") (:keywords "lisp") (:authors ("Taylor R. Campbell" . "campbell+paredit@mumble.net")) (:maintainer "Taylor R. Campbell" . "campbell+paredit@mumble.net"))]) +(parchment-theme . [(20190703 1531) ((emacs (24))) "Light theme inspired by Acme and Leuven" single ((:commit . "30eedd346175072e013b7bcf6ae1795f022fee0b") (:authors ("Alex Griffin" . "a@ajgrf.com")) (:maintainer "Alex Griffin" . "a@ajgrf.com") (:url . "https://github.com/ajgrf/parchment"))]) +(paradox . [(20191011 1111) ((emacs (24 4)) (seq (1 7)) (let-alist (1 0 3)) (spinner (1 7 3)) (hydra (0 13 2))) "A modern Packages Menu. Colored, with package ratings, and customizable." tar ((:commit . "339fe3518d1d102b2295670340e75caf4f01a29a") (:keywords "package" "packages") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") (:url . "https://github.com/Malabarba/paradox"))]) +(paperless . [(20180224 1245) ((emacs (24 4)) (f (0 11 0)) (s (1 10 0)) (cl-lib (0 6 1))) "A major mode for sorting and filing PDF documents." tar ((:commit . "b3b6c05da393f6b1292a3d5937bc4499baabd0b6") (:keywords "pdf" "convenience") (:authors ("Anthony Green" . "green@moxielogic.com")) (:maintainer "Anthony Green" . "green@moxielogic.com") (:url . "http://github.com/atgreen/paperless"))]) +(paper-theme . [(20190124 1828) ((emacs (24))) "A minimal Emacs colour theme." single ((:commit . "5f3e67448cc98fe2875115163849acae4d9e8526") (:keywords "theme" "paper") (:authors ("GöktuÄŸ Kayaalp")) (:maintainer "GöktuÄŸ Kayaalp") (:url . "https://dev.gkayaalp.com/elisp/index.html#paper"))]) +(pangu-spacing . [(20190823 401) nil "Minor-mode to add space between Chinese and English characters." single ((:commit . "f92898949ba3bf991fd229416f3bbb54e9c6c223") (:authors ("coldnew" . "coldnew.tw@gmail.com")) (:maintainer "coldnew" . "coldnew.tw@gmail.com") (:url . "http://github.com/coldnew/pangu-spacing"))]) +(pandoc-mode . [(20191003 1221) ((hydra (0 10 0)) (dash (2 10 0))) "Minor mode for interacting with Pandoc" tar ((:commit . "f4f10a329acd354aa7dda52e7f7bc23ca28366d3") (:keywords "text" "pandoc") (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm"))]) +(pandoc . [(20161128 1157) ((emacs (24 4))) "Pandoc interface" single ((:commit . "198d262d09e30448f1672338b0b5a81cf75e1eaa") (:keywords "hypermedia" "documentation" "markup" "converter") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:url . "https://github.com/zonuexe/pandoc.el"))]) +(panda-theme . [(20181128 1738) ((emacs (24))) "Panda Theme" single ((:commit . "60aa47c7a930377807da0d601351ad91e8ca446a") (:authors ("jamiecollinson" . "jamiecollinson@gmail.com")) (:maintainer "jamiecollinson" . "jamiecollinson@gmail.com") (:url . "https://github.com/jamiecollinson/emacs-panda-theme"))]) +(panda . [(20190907 314) ((emacs (25))) "Client for Bamboo's REST API." single ((:commit . "5a3da498a8ab8a60cef3a3a5e8f3e14dea9992dd") (:keywords "maint" "tool") (:authors ("Sebastian Monia" . "smonia@outlook.com")) (:maintainer "Sebastian Monia" . "smonia@outlook.com") (:url . "https://github.com/sebasmonia/panda"))]) +(pamparam . [(20190827 1127) ((emacs (24 3)) (lispy (0 26 0)) (worf (0 1 0)) (hydra (0 13 4))) "Simple and fast flashcards." tar ((:commit . "3690a3691da7792ed2f2270d1006632640182ae0") (:keywords "outlines" "hypermedia" "flashcards" "memory") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/pamparam"))]) +(pallet . [(20150512 702) ((dash (2 10 0)) (s (1 9 0)) (f (0 17 1)) (cask (0 7))) "A package management tool for Emacs, using Cask." tar ((:commit . "b8d0df1883224a371ac0a3bc9b9c1c4dc61e6ac0"))]) +(palimpsest . [(20170119 2032) nil "Various deletion strategies when editing" single ((:commit . "e6d5944393c260ceb724462c84046cc62c9ae916") (:authors ("Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com")) (:maintainer "Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com"))]) +(pager-default-keybindings . [(20130719 2057) ((pager (1 0))) "Add the default keybindings suggested for pager.el" single ((:commit . "dbbd49c2ac5906d1dabf9e9c832bfebc1ab405b3") (:authors ("Nathaniel Flath" . "nflath@gmail.com")) (:maintainer "Nathaniel Flath" . "nflath@gmail.com") (:url . "http://github.com/nflath/pager-default-keybindings"))]) +(pager . [(20151202 120) nil "windows-scroll commands" single ((:commit . "5c791ed23f1136e04040d6f4bc9b4ca5b6dc919f") (:authors (nil . "Mikael Sjödin -- mic@docs.uu.se")) (:maintainer nil . "Mikael Sjödin -- mic@docs.uu.se"))]) +(page-break-lines . [(20190519 2238) ((emacs (24 4))) "Display ^L page breaks as tidy horizontal lines" single ((:commit . "2e1d274e11071bb8daea4d6f4c0369c84466de7a") (:keywords "convenience" "faces") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/page-break-lines"))]) +(paganini-theme . [(20180815 1921) ((emacs (24 0))) "A colorful, dark and warm theme." single ((:commit . "255c5a2a8abee9c5935465ec42b9c3604c178c3c") (:authors ("Onur Temizkan")) (:maintainer "Onur Temizkan") (:url . "https://github.com/onurtemizkan/paganini"))]) +(pact-mode . [(20191117 2337) ((emacs (24 3))) "Mode for Pact, a LISPlike smart contract language." single ((:commit . "220bf985cb31d60f47042d5f424de8b9a589e544") (:keywords "pact" "lisp" "languages" "blockchain" "smartcontracts" "tools" "mode") (:authors ("Stuart Popejoy")) (:maintainer "Stuart Popejoy" . "stuart@kadena.io") (:url . "https://github.com/kadena-io/pact-mode"))]) +(pacmacs . [(20160131 832) ((emacs (24 4)) (dash (2 11 0)) (dash-functional (1 2 0)) (cl-lib (0 5)) (f (0 18 0))) "Pacman for Emacs" tar ((:commit . "d813e9c62c2540fe619234824fc60e128c786442") (:authors ("Codingteam" . "codingteam@conference.jabber.ru")) (:maintainer "Alexey Kutepov" . "reximkut@gmail.com") (:url . "http://github.com/codingteam/pacmacs.el"))]) +(packed . [(20180318 1729) ((emacs (24 3))) "package manager agnostic Emacs Lisp package utilities" single ((:commit . "f350cc446c65b85bcc213265cd6dcadee1568762") (:keywords "compile" "convenience" "lisp" "package" "library") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/emacscollective/packed"))]) +(package-utils . [(20180514 1415) ((restart-emacs (0 1 1))) "Extensions for package.el" single ((:commit . "5621b95c56b55499f0463fd8b29501da25d861bd") (:keywords "package" "convenience") (:authors ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainer "Philippe Vaucher" . "philippe.vaucher@gmail.com") (:url . "https://github.com/Silex/package-utils"))]) +(package-safe-delete . [(20150116 1607) ((emacs (24)) (epl (0 7 -4))) "Safely delete package.el packages" single ((:commit . "138171e4fc03c0ef05a8260cbb5cd2e114c1c194") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:url . "https://github.com/Fanael/package-safe-delete"))]) +(package-lint-flymake . [(20191116 45) ((emacs (26 1)) (package-lint (0 5))) "A package-lint Flymake backend" single ((:commit . "1f4775bd9c2ed277bf4d375afd0447207c3a19c0") (:url . "https://github.com/purcell/package-lint"))]) +(package-lint . [(20191122 246) ((cl-lib (0 5)) (emacs (24 1)) (let-alist (1 0 6))) "A linting library for elisp package authors" tar ((:commit . "1f4775bd9c2ed277bf4d375afd0447207c3a19c0") (:keywords "lisp") (:authors ("Steve Purcell" . "steve@sanityinc.com") ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/package-lint"))]) +(package-filter . [(20161122 719) nil "package archive whitelist and blacklist" single ((:commit . "bc73b41aea1d65ca44ef1593ca13126df9bbb39e") (:authors ("Donald Ephraim Curtis" . "dcurtis@milkbox.net")) (:maintainer "Donald Ephraim Curtis" . "dcurtis@milkbox.net") (:url . "https://github.com/milkypostman/package-filter"))]) +(package-build . [(20191010 616) ((cl-lib (0 5))) "Tools for assembling a package archive" tar ((:commit . "f761c2ffeed0daba9c17ac7571c7b979b6ceed64") (:keywords "tools") (:authors ("Donald Ephraim Curtis" . "dcurtis@milkbox.net")) (:maintainer "Donald Ephraim Curtis" . "dcurtis@milkbox.net"))]) +(package+ . [(20190702 253) ((emacs (24 3))) "Extensions for the package library." single ((:commit . "3d108ff6af00d2fe978787217a13660af057cafc") (:keywords "extensions" "tools") (:authors ("Ryan Davis" . "ryand-ruby@zenspider.com")) (:maintainer "Ryan Davis" . "ryand-ruby@zenspider.com") (:url . "https://github.com/zenspider/package"))]) +(pack . [(20191017 456) ((emacs (24)) (cl-lib (0 5))) "Pack and unpack archive files" single ((:commit . "85cd856fdc00a2365e88b50373b99f1b3d2227be") (:keywords "files" "dired") (:authors ("10sr" . "8.slashes@gmail.com")) (:maintainer "10sr" . "8.slashes@gmail.com") (:url . "https://github.com/10sr/pack-el"))]) +(pacfiles-mode . [(20181028 1744) ((emacs (26)) (cl-lib (0 5))) "pacnew and pacsave merging tool" tar ((:commit . "ff58f387e0f85ca20c4c9f119bf13303bf8b5a76") (:keywords "files" "pacman" "arch" "pacnew" "pacsave" "update" "linux") (:authors ("Carlos G. Cordero ")) (:maintainer "Carlos G. Cordero" . "pacfiles@binarycharly.com") (:url . "https://github.com/UndeadKernel/pacfiles-mode"))]) +(pabbrev . [(20160320 2101) nil "Predictive abbreviation expansion" single ((:commit . "56400d5d256b42ffe45c229ea9827f026b650cf5") (:authors ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainer "Phillip Lord" . "phillip.lord@newcastle.ac.uk"))]) +(p4 . [(20150721 1937) nil "Simple Perforce-Emacs Integration" single ((:commit . "eff047caa75dbe4965defca9d1212454cdb755d5") (:authors ("Gareth Rees" . "gdr@garethrees.org")) (:maintainer "Gareth Rees" . "gdr@garethrees.org") (:url . "https://github.com/gareth-rees/p4.el"))]) +(ox-wk . [(20190526 1024) ((emacs (24 4)) (org (8 3))) "Wiki Back-End for Org Export Engine" single ((:commit . "3da2213be1874d9d3e8a9337b09003d9c102b943") (:keywords "org" "wp" "wiki") (:authors ("Vilibald WanÄa" . "vilibald@wvi.cz")) (:maintainer "Vilibald WanÄa" . "vilibald@wvi.cz") (:url . "https://github.com/w-vi/ox-wk.el"))]) +(ox-twiki . [(20170803 2039) ((org (8)) (cl-lib (0 5))) "org Twiki and Foswiki export" single ((:commit . "99d0c25d56dbf75ce894a84e776ba4459208dbc2") (:keywords "org") (:authors ("Derek Feichtinger" . "derek.feichtinger@psi.ch")) (:maintainer "Derek Feichtinger" . "derek.feichtinger@psi.ch") (:url . "https://github.com/dfeich/org8-wikiexporters"))]) +(ox-twbs . [(20161103 2016) nil "Bootstrap compatible HTML Back-End for Org" single ((:commit . "2414e6b1de7deb6dd2ae79a7be633fdccb9c2f28") (:keywords "org" "html" "publish" "twitter" "bootstrap") (:authors ("Carsten Dominik ") ("Jambunathan K ") ("Brandon van Beekum ")) (:maintainer "Carsten Dominik ") (:url . "https://github.com/marsmining/ox-twbs"))]) +(ox-tufte . [(20160926 1607) ((org (8 2)) (emacs (24))) "Tufte HTML org-mode export backend" single ((:commit . "49d7ea78fde063b407ce6fa57739f90c83500682") (:keywords "org" "tufte" "html") (:authors ("M. Lee Hinman")) (:maintainer "M. Lee Hinman") (:url . "https://github.com/dakrone/ox-tufte"))]) +(ox-trac . [(20171026 1823) ((org (9 0))) "Org Export Backend to Trac WikiFormat" single ((:commit . "03cc31efb1aa06991918f1071e250a9d58f96cfb") (:keywords "org-mode" "trac") (:authors ("Brian J. Carlson ")) (:maintainer "Brian J. Carlson ") (:url . "https://github.com/JalapenoGremlin/ox-trac"))]) +(ox-tiddly . [(20180626 2052) ((org (8)) (cl-lib (0 5))) "org TiddlyWiki exporter" single ((:commit . "99d0c25d56dbf75ce894a84e776ba4459208dbc2") (:keywords "org") (:authors ("Derek Feichtinger" . "derek.feichtinger@psi.ch")) (:maintainer "Derek Feichtinger" . "derek.feichtinger@psi.ch") (:url . "https://github.com/dfeich/org8-wikiexporters"))]) +(ox-textile . [(20180502 947) ((org (8 1))) "Textile Back-End for Org Export Engine" single ((:commit . "b179abaa6616604c6efe32cb509e62ad46e7374e") (:keywords "org" "textile") (:authors ("Yasushi SHOJI" . "yasushi.shoji@gmail.com")) (:maintainer "Yasushi SHOJI" . "yasushi.shoji@gmail.com") (:url . "https://github.com/yashi/org-textile"))]) +(ox-spectacle . [(20181211 953) ((org (8 3))) "spectacle.js Presentation Back-End for Org Export Engine" single ((:commit . "9d3ec9a6326289074d8620e97d65e3105307ff51") (:keywords "presentation") (:authors ("imfine" . "lorniu@gmail.com")) (:maintainer "imfine" . "lorniu@gmail.com"))]) +(ox-slimhtml . [(20181219 850) ((emacs (24)) (cl-lib (0 6))) "a minimal HTML org export backend" single ((:commit . "a5070cb2c67425aa33da8503c83361e8814a86ec") (:keywords "files") (:authors ("Elo Laszlo ")) (:maintainer "Elo Laszlo ") (:url . "http://bald.cat/slimhtml"))]) +(ox-slack . [(20181119 1131) ((org (9 1 4)) (ox-gfm (1 0))) "Slack Exporter for org-mode" single ((:commit . "96d90914e6df1a0141657fc51f1dc5bb8f1da6bd") (:keywords "org" "slack" "outlines") (:authors ("Matt Price")) (:maintainer "Matt Price") (:url . "https://github.com/titaniumbones/ox-slack"))]) +(ox-rst . [(20191013 551) ((emacs (25 1)) (org (8 3))) "Export reStructuredText using org-mode." single ((:commit . "9158bfd18096c559e0a225ae62ab683f1c98a547") (:keywords "org" "rst" "rest" "restructuredtext") (:authors ("Masanao Igarashi" . "syoux2@gmail.com")) (:maintainer "Masanao Igarashi" . "syoux2@gmail.com") (:url . "https://github.com/msnoigrs/ox-rst"))]) +(ox-rfc . [(20190926 851) ((emacs (24 3)) (org (8 3))) "RFC Back-End for Org Export Engine" tar ((:commit . "b86c9e6f21d99ea657b4f2224f816300485ed73f") (:keywords "org" "rfc" "wp" "xml") (:authors ("Christian Hopps" . "chopps@devhopps.com")) (:maintainer "Christian Hopps" . "chopps@devhopps.com") (:url . "https://github.com/choppsv1/org-rfc-export"))]) +(ox-reveal . [(20190918 1627) ((org (8 3))) "reveal.js Presentation Back-End for Org Export Engine" single ((:commit . "a49425c3d16dc63fb4ed44a5169f80e290fa9c87") (:keywords "outlines" "hypermedia" "slideshow" "presentation") (:authors ("Yujie Wen ")) (:maintainer "Yujie Wen "))]) +(ox-qmd . [(20170402 1657) ((org (8 0))) "Qiita Markdown Back-End for Org Export Engine" single ((:commit . "3a24c7a0b3ec80e494b977e14a3dfb94c9f1d8ec") (:keywords "org" "wp" "markdown" "qiita") (:authors ("0x60DF" . "0x60DF@gmail.com")) (:maintainer "0x60DF" . "0x60DF@gmail.com") (:url . "https://github.com/0x60df/ox-qmd"))]) +(ox-pukiwiki . [(20150124 1716) ((org (8 1))) "Pukiwiki Back-End for Org Export Engine" single ((:commit . "bdbde2c294f5d3de11f08a3fe19f01175d2e011a") (:keywords "org" "pukiwiki") (:authors ("Yasushi SHOJI" . "yasushi.shoji@gmail.com")) (:maintainer "Yasushi SHOJI" . "yasushi.shoji@gmail.com") (:url . "https://github.com/yashi/org-pukiwiki"))]) +(ox-pandoc . [(20180510 1338) ((org (8 2)) (emacs (24)) (dash (2 8)) (ht (2 0)) (cl-lib (0 5))) "org exporter for pandoc." single ((:commit . "aa37dc7e94213d4ebedb85c384c1ba35007da18e") (:keywords "tools") (:authors ("KAWABATA, Taichi" . "kawabata.taichi@gmail.com")) (:maintainer "KAWABATA, Taichi" . "kawabata.taichi@gmail.com") (:url . "https://github.com/kawabata/ox-pandoc"))]) +(ox-nikola . [(20151114 1116) ((emacs (24 4)) (org (8 2 4)) (ox-rst (0 2))) "Export Nikola articles using org-mode." single ((:commit . "5bcbc1a38f6619f62294194f13ca0cd4ca14dd48") (:keywords "org" "nikola") (:authors ("IGARASHI Masanao" . "syoux2@gmail.com")) (:maintainer "IGARASHI Masanao" . "syoux2@gmail.com") (:url . "https://github.com/masayuko/ox-nikola"))]) +(ox-minutes . [(20180202 1734) ((emacs (24 4))) "Plain text backend for Org for Meeting Minutes" single ((:commit . "27c29f3fdb9181322ae56f8bace8d95e621230e5") (:keywords "org" "exporter" "notes") (:authors ("Kaushal Modi" . "kaushal.modi@gmail.com")) (:maintainer "Kaushal Modi" . "kaushal.modi@gmail.com") (:url . "https://github.com/kaushalmodi/ox-minutes"))]) +(ox-mediawiki . [(20180105 2154) ((cl-lib (0 5)) (s (1 9 0))) "Mediawiki Back-End for Org Export Engine" single ((:commit . "a9327150293e370e500ba55bddfe5fc435c6bf9b") (:keywords "org" "wp" "mediawiki") (:authors ("Tom Alexander" . "tomalexander@paphus.com")) (:maintainer "Tom Alexander" . "tomalexander@paphus.com") (:url . "https://github.com/tomalexander/orgmode-mediawiki"))]) +(ox-mdx-deck . [(20181115 1847) ((emacs (24)) (ox-hugo (0 7))) "org-mode to mdx-deck exporter" single ((:commit . "2e46ac76f7ac279c371474cbbf39634bbe40f4c7") (:keywords "lisp" "org" "ox" "mdx" "deck") (:authors ("Joshua Wolfe")) (:maintainer "Joshua Wolfe") (:url . "https://github.com/WolfeCub/ox-mdx-deck/"))]) +(ox-latex-subfigure . [(20190816 1905) ((emacs (24))) "Subfigure for latex export" single ((:commit . "5436eaf0cb036fed0a2042533ec1466a33cf9493") (:keywords "convenience" "ox" "latex" "subfigure" "org" "org-mode") (:authors ("Quang Linh LE" . "linktohack@gmail.com")) (:maintainer "Quang Linh LE" . "linktohack@gmail.com") (:url . "http://github.com/linktohack/ox-latex-subfigure"))]) +(ox-json . [(20191109 156) ((emacs (24)) (org (9)) (s (1 12))) "JSON export backend for Org mode" single ((:commit . "1627f14da943fd67a571e4064edbe83277d70fbd") (:keywords "outlines") (:authors ("Jared Lumpe" . "mjlumpe@gmail.com")) (:maintainer "Jared Lumpe" . "mjlumpe@gmail.com") (:url . "https://github.com/jlumpe/ox-json"))]) +(ox-jira . [(20171001 916) ((org (8 3))) "JIRA Backend for Org Export Engine" single ((:commit . "db2ec528f46c9e611624ba28611c440a99bff255") (:keywords "outlines" "hypermedia" "wp") (:authors ("Stig Brautaset" . "stig@brautaset.org")) (:maintainer "Stig Brautaset" . "stig@brautaset.org") (:url . "https://github.com/stig/ox-jira.el"))]) +(ox-jekyll-md . [(20180831 1732) nil "Export Jekyll on Markdown articles using org-mode." single ((:commit . "ff7b81733354c2b427293e531bb51647fa84fc88") (:keywords "org" "jekyll") (:authors ("Elsa Gonsiorowski" . "gonsie@me.com")) (:maintainer "Elsa Gonsiorowski" . "gonsie@me.com"))]) +(ox-ioslide . [(20161015 1338) ((emacs (24 1)) (org (8 0)) (cl-lib (0 5)) (f (0 17 2)) (makey (0 3))) "Export org-mode to Google I/O HTML5 slide." tar ((:commit . "6555680be5364c8ddd2bf446865cb1a82adb6b9e") (:keywords "html" "presentation") (:authors ("coldnew" . "coldnew.tw@gmail.com")) (:maintainer "coldnew" . "coldnew.tw@gmail.com") (:url . "http://github.com/coldnew/org-ioslide"))]) +(ox-impress-js . [(20150412 1716) ((org (8))) "impress.js Back-End for Org Export Engine" tar ((:commit . "91c6d2af6af308ade352a03355c4fb551b238c6b") (:keywords "outlines" "hypermedia" "calendar" "wp") (:authors ("Takumi Kinjo ")) (:maintainer "Takumi Kinjo ") (:url . "https://github.com/kinjo/org-impress-js.el"))]) +(ox-hugo . [(20191026 2105) ((emacs (24 4)) (org (9 0))) "Hugo Markdown Back-End for Org Export Engine" tar ((:commit . "762b7cc6b05cf8b8d1d6d01db08ef5df136ad519") (:keywords "org" "markdown" "docs") (:url . "https://ox-hugo.scripter.co"))]) +(ox-html5slide . [(20131228 606) ((org (8 0))) "Export org-mode to HTML5 slide." single ((:commit . "4703dfbd9d79161509def673d2c1e118d722a58f") (:keywords "html" "presentation") (:authors ("coldnew" . "coldnew.tw@gmail.com")) (:maintainer "coldnew" . "coldnew.tw@gmail.com") (:url . "http://github.com/coldnew/org-html5slide"))]) +(ox-haunt . [(20190720 2352) ((emacs (24 3)) (org (9 0))) "Haunt-flavored HTML backend for the Org export engine" single ((:commit . "9d25ec4fc66fccbae23489abd4b9e8933c5b7dbd") (:keywords "convenience" "hypermedia" "wp") (:authors ("Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org")) (:maintainer "Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org") (:url . "https://git.sr.ht/~jakob/ox-haunt"))]) +(ox-gfm . [(20170628 2102) nil "Github Flavored Markdown Back-End for Org Export Engine" single ((:commit . "99f93011b069e02b37c9660b8fcb45dab086a07f") (:keywords "org" "wp" "markdown" "github") (:authors ("Lars Tveito")) (:maintainer "Lars Tveito"))]) +(ox-epub . [(20181101 1854) ((emacs (24 3)) (org (9))) "Export org mode projects to EPUB" single ((:commit . "c9629ef4b4bc40d51afefd8c0bb2c683931e6409") (:keywords "hypermedia") (:authors ("Mark Meyer" . "mark@ofosos.org")) (:maintainer "Mark Meyer" . "mark@ofosos.org") (:url . "http://github.com/ofosos/org-epub"))]) +(ox-clip . [(20191122 237) ((org (8 2)) (htmlize (0))) "Cross-platform formatted copying for org-mode" single ((:commit . "bd36f9fb4e3b1b9e8686b993b02ccd780ff75a96") (:keywords "org-mode") (:authors ("John Kitchin" . "jkitchin@andrew.cmu.edu")) (:maintainer "John Kitchin" . "jkitchin@andrew.cmu.edu") (:url . "https://github.com/jkitchin/ox-clip"))]) +(ox-bibtex-chinese . [(20170723 309) ((emacs (24 4))) "Let ox-bibtex work well for Chinese users" tar ((:commit . "2ad2364399229144110db7ef6365ad0461d6a38c"))]) +(ox-asciidoc . [(20181230 620) ((org (8 1))) "AsciiDoc Back-End for Org Export Engine" single ((:commit . "e931362e641f97d17dc738d22bb461e54045786d") (:keywords "org" "asciidoc") (:authors ("Yasushi SHOJI" . "yasushi.shoji@gmail.com")) (:maintainer "Yasushi SHOJI" . "yasushi.shoji@gmail.com") (:url . "https://github.com/yashi/org-asciidoc"))]) +(owdriver . [(20170401 1312) ((smartrep (0 0 3)) (log4e (0 2 0)) (yaxception (0 2 0))) "Quickly perform various actions on other windows" single ((:commit . "d934f182bafe29aa16c173440eff3fef08b0ec10") (:keywords "convenience") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:url . "https://github.com/aki2o/owdriver"))]) +(ovpn-mode . [(20190811 2200) ((emacs (25)) (cl-lib (0 5))) "an openvpn management mode" single ((:commit . "dce04d9f35fd203afd098ba413595db6c2cbc051") (:keywords "comm") (:authors ("Bas Alberts" . "bas@anti.computer")) (:maintainer "Bas Alberts" . "bas@anti.computer") (:url . "https://github.com/anticomputer/ovpn-mode"))]) +(overseer . [(20180226 619) ((emacs (24)) (dash (2 10 0)) (pkg-info (0 4)) (f (0 18 1))) "Ert-runner Integration Into Emacs" single ((:commit . "02d49f582e80e36b4334c9187801c5ecfb027789") (:authors ("Samuel Tonini" . "tonini.samuel@gmail.com")) (:maintainer "Samuel Tonini" . "tonini.samuel@gmail.com") (:url . "http://www.github.com/tonini/overseer.el"))]) +(overcast-theme . [(20190326 1646) ((emacs (24))) "A dark but vibrant color theme for Emacs" single ((:commit . "afb8098ad2234a65ec614f4028f7cf2555134f46") (:keywords "theme") (:authors ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainer "Mohammed Ismail Ansari" . "team.terminal@gmail.com") (:url . "http://ismail.teamfluxion.com"))]) +(ov . [(20150312 528) ((emacs (24 3))) "Overlay library for Emacs Lisp" single ((:commit . "fae7215b3dedba2a9ced145284332e4609bfdc38") (:keywords "overlay") (:authors ("Shingo Fukuyama - http://fukuyama.co")) (:maintainer "Shingo Fukuyama - http://fukuyama.co") (:url . "https://github.com/ShingoFukuyama/ov.el"))]) +(outshine . [(20191112 1414) ((outorg (2 0)) (cl-lib (0 5))) "outline with outshine outshines outline" tar ((:commit . "9334b555aaf1426a9e405a57b80809a1615627b3") (:keywords "convenience" "outlines" "org") (:authors ("Thorsten Jolitz")) (:maintainer "Thibault Polge" . "thibault@thb.lt") (:url . "https://github.com/alphapapa/outshine"))]) +(outrespace . [(20190724 1553) ((emacs (24 4))) "Some c++ namespace utility functions" single ((:commit . "d8c1619ec81fd3f4e728212a3526cd13bc2b0147") (:keywords "tools" "c++" "namespace") (:authors ("Dan Harms" . "danielrharms@gmail.com")) (:maintainer "Dan Harms" . "danielrharms@gmail.com") (:url . "https://github.com/articuluxe/outrespace.git"))]) +(outorg . [(20190720 2002) ((emacs (24 4))) "Org-style comment editing" single ((:commit . "ef0f86f4b893b30be8bcf8b43a5ec357a6c70f07") (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "https://github.com/alphapapa/outorg"))]) +(outlook . [(20180428 1430) ((emacs (24 4))) "send emails in MS Outlook style" tar ((:commit . "359683aff91b38bd1398a6ed4058a06f09a02d65") (:keywords "mail") (:authors ("Andrew Savonichev")) (:maintainer "Andrew Savonichev") (:url . "https://github.com/asavonic/outlook.el"))]) +(outlined-elisp-mode . [(20131108 1127) nil "outline-minor-mode settings for emacs lisp" single ((:commit . "c16cb02b540448919ad148f2be6a41523ee5489c") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) +(outline-toc . [(20170730 1130) nil "Sidebar showing a \"table of contents\"." single ((:commit . "31f04bea19cfcfb01a94d1fd2b72391cb02b7463") (:keywords "convenience" "outlines") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com") (:url . "https://github.com/abingham/outline-toc.el"))]) +(outline-minor-faces . [(20191104 1340) ((emacs (25 1))) "Headings faces for outline-minor-mode" single ((:commit . "acf989051afd6fa8854834e2c6a67ad632e44edd") (:keywords "outlines") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/tarsius/bicycle"))]) +(outline-magic . [(20180619 1819) nil "outline mode extensions for Emacs" single ((:commit . "2a5f07417b696cf7541d435c43bafcc64817636b") (:keywords "outlines") (:authors ("Carsten Dominik" . "dominik@science.uva.nl")) (:maintainer "Thorsten Jolitz "))]) +(other-emacs-eval . [(20180408 1348) ((emacs (25 1)) (async (1 9 2))) "Evaluate the Emacs Lisp expression in other Emacs" single ((:commit . "8ace5acafef65daabf0c6619eff60733d7f5d792") (:keywords "tools") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/other-emacs-eval"))]) +(otama . [(20160404 1032) nil "Org-table Manipulator" single ((:commit . "c114fd8006762f891bc120a7c0ea213872e7ab31") (:keywords "database" "org-mode") (:authors ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainer "Yoshinari Nomura" . "nom@quickhack.net"))]) +(osx-trash . [(20160520 1300) ((emacs (24 1))) "System trash for OS X" tar ((:commit . "0f1dc052d0a750b8c75f14530a4897f5d4324b4e") (:keywords "files" "convenience" "tools" "unix") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com") (:url . "https://github.com/lunaryorn/osx-trash.el"))]) +(osx-pseudo-daemon . [(20170722 607) nil "Daemon mode that plays nice with OSX." single ((:commit . "d235680a72677f11925b912428ad1a57b664e3e8") (:keywords "convenience" "osx") (:authors ("Ryan C. Thompson")) (:maintainer "Ryan C. Thompson") (:url . "https://github.com/DarwinAwardWinner/osx-pseudo-daemon"))]) +(osx-org-clock-menubar . [(20150205 2111) nil "simple menubar integration for org-clock" tar ((:commit . "9964d2a97cc2fb6570dc4116da44f73bd8eb7cb3") (:keywords "org" "osx") (:authors ("Jordon Biondo" . "jordonbiondo@gmail.com")) (:maintainer "Jordon Biondo" . "jordonbiondo@gmail.com") (:url . "https://github.com/jordonbiondo/osx-org-clock-menubar"))]) +(osx-location . [(20150613 917) nil "Watch and respond to changes in geographical location on OS X" tar ((:commit . "8bb3a94cc9f04b922d2d730fe08596cc6ee12bf2"))]) +(osx-lib . [(20191121 1440) ((emacs (24 4))) "Basic function for Apple/OSX." single ((:commit . "01cba80ccc20412759f87b8f7531580bb04ec9c1") (:keywords "apple" "applescript" "osx" "finder" "emacs" "elisp" "vpn" "speech") (:authors ("Raghav Kumar Gautam" . "raghav@apache.org")) (:maintainer "Raghav Kumar Gautam" . "raghav@apache.org") (:url . "https://github.com/raghavgautam/osx-lib"))]) +(osx-dictionary . [(20171026 734) ((cl-lib (0 5))) "Interface for OSX Dictionary.app" tar ((:commit . "b16630ecf69f87ac873486d8b9c8c03e6c9ea7fa") (:keywords "mac" "dictionary") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/osx-dictionary.el"))]) +(osx-clipboard . [(20141012 717) nil "Use the OS X clipboard from terminal Emacs" single ((:commit . "e46dd31327a3f92f77b013b4c9b1e5fdd0e5c73d") (:authors ("Jon Oddie ")) (:maintainer "Jon Oddie ") (:url . "https://github.com/joddie/osx-clipboard-mode"))]) +(osx-browse . [(20140508 2041) ((string-utils (0 3 2)) (browse-url-dwim (0 6 6))) "Web browsing helpers for OS X" single ((:commit . "44ded7cc3a7ee426c1c3257fae534c121f7e752e") (:keywords "hypermedia" "external") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:url . "http://github.com/rolandwalker/osx-browse"))]) +(origami . [(20180101 1553) ((s (1 9 0)) (dash (2 5 0)) (emacs (24)) (cl-lib (0 5))) "Flexible text folding" tar ((:commit . "1f38085c8f9af7842765ed63f7d6dfe4dab59366") (:keywords "folding") (:authors ("Greg Sexton" . "gregsexton@gmail.com")) (:maintainer "Greg Sexton" . "gregsexton@gmail.com") (:url . "https://github.com/gregsexton/origami.el"))]) +(orgtbl-show-header . [(20141023 837) nil "Show the header of the current column in the minibuffer" single ((:commit . "112d54a44682f065318ed0c9c89a8f5b8907342a") (:authors ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainer "Damien Cassou" . "damien.cassou@gmail.com"))]) +(orgtbl-join . [(20150121 2246) ((cl-lib (0 5))) "join columns from another table" tar ((:commit . "ccf5e0d96e053dc289da39a048715fcf36835ff2") (:keywords "org" "table" "join" "filtering") (:authors ("Thierry Banel tbanelwebmin at free dot fr")) (:maintainer "Thierry Banel tbanelwebmin at free dot fr"))]) +(orgtbl-ascii-plot . [(20151215 2151) nil "ascii-art bar plots in org-mode tables" single ((:commit . "cd91f6ae26a7402e192a1f4fd6248f5797edf19e") (:keywords "org" "table" "ascii" "plot") (:authors ("Thierry Banel tbanelwebmin at free dot fr") ("Michael Brand")) (:maintainer "Thierry Banel tbanelwebmin at free dot fr"))]) +(orgtbl-aggregate . [(20190812 604) nil "Create an aggregated Org table from another one" tar ((:commit . "1a13f7f70357f369e16bfa3038a9fb760cbffb46") (:keywords "org" "table" "aggregation" "filtering"))]) +(orgnav . [(20170608 1713) ((helm (2 7 0)) (s (1 11 0)) (dash (1 11 0)) (emacs (24))) "Org tree navigation using helm" tar ((:commit . "9e2cac9c1a67af5f0080e60022e821bf7b70312d") (:keywords "convenience" "outlines") (:authors ("Facet Framer" . "facet@facetframer.com")) (:maintainer "Facet Framer" . "facet@facetframer.com") (:url . "http://github.com/facetframer/orgnav"))]) +(orglue . [(20171220 1226) ((org (8 1)) (epic (0 2))) "more functionality to org-mode." tar ((:commit . "ae2a45c19b52e45db7891093a3ff17ba2e51c507") (:keywords "org") (:authors ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainer "Yoshinari Nomura" . "nom@quickhack.net"))]) +(orglink . [(20190919 1859) ((emacs (24 3)) (dash (2 12 1)) (org (9 3))) "use Org Mode links in other modes" single ((:commit . "988ad54db45708b0fe835829d512eb6d5f6cf161") (:keywords "hypertext") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/tarsius/orglink"))]) +(orgit . [(20191105 2246) ((emacs (25 1)) (dash (2 14 1)) (magit (2 90 0)) (org (9 3))) "support for Org links to Magit buffers" single ((:commit . "158438c540ab80f515c669ad42c8dab67f193d77") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/orgit"))]) +(orgbox . [(20180827 218) ((org (8 0)) (cl-lib (0 5))) "Mailbox-like task scheduling Org." single ((:commit . "3982f56efd67ec016389cad82ce5a44f619b36a9") (:keywords "org") (:authors ("Yasuhito Takamiya" . "yasuhito@gmail.com")) (:maintainer "Yasuhito Takamiya" . "yasuhito@gmail.com") (:url . "https://github.com/yasuhito/orgbox"))]) +(organize-imports-java . [(20190922 1520) ((emacs (24)) (f (0 20 0)) (s (1 12 0)) (cl-lib (0 6))) "Automatically organize imports in Java code." single ((:commit . "de094d6d56c85aa9820c77055b54287ae6b46d20") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:url . "https://github.com/jcs090218/organize-imports-java"))]) +(organic-green-theme . [(20191114 1718) nil "Low-contrast green color theme." single ((:commit . "360a3d956a208a39c35b25e264b7f8d7b00c5c26"))]) +(org2web . [(20171005 2317) ((cl-lib (1 0)) (ht (1 5)) (mustache (0 22)) (htmlize (1 47)) (org (8 0)) (dash (2 0 0)) (el2org (0 10)) (simple-httpd (0 1))) "A static site generator based on org mode." tar ((:commit . "5243b399927a4c474bb3b8d1c8a00799df1f27d7"))]) +(org2jekyll . [(20170225 915) ((dash-functional (2 11 0)) (s (1 9 0)) (deferred (0 3 1)) (kv (0 0 19))) "Minor mode to publish org-mode post to jekyll without specific yaml" tar ((:commit . "52a19a5d372116262b9d613f4ec8490a3b49e329") (:keywords "org-mode" "jekyll" "blog" "publish") (:authors ("Antoine R. Dumont ")) (:maintainer "Antoine R. Dumont ") (:url . "https://github.com/ardumont/org2jekyll"))]) +(org2issue . [(20190531 941) ((org (8 0)) (emacs (24 4)) (ox-gfm (0 1)) (gh (0 1)) (s (20160405 920))) "export org to github issue" single ((:commit . "910b98c858762fd14b11d261626c5e979dde0833") (:keywords "convenience" "github" "org") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:url . "https://github.com/lujun9972/org2issue"))]) +(org2elcomment . [(20170324 945) ((org (8 3 4))) "Convert Org file to Elisp comments" single ((:commit . "c88a75d9587c484ead18f7adf08592b09c1cceb0") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com"))]) +(org2ctex . [(20191024 610) ((emacs (24 4))) "Export org to ctex (a latex macro for Chinese)" single ((:commit . "d4af170f5190dad3aa31ab1cf4c6f087d56ab111") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com") (:url . "https://github.com/tumashu/org2ctex"))]) +(org2blog . [(20191102 28) ((htmlize (1 54)) (hydra (0 15 0)) (xml-rpc (1 6 12)) (metaweblog (1 1 1))) "Blog from Org mode to WordPress" tar ((:commit . "58398120907504ff200adfd9b817f297142c9680") (:homepage . "https://github.com/org2blog/org2blog") (:keywords "comm" "convenience" "outlines" "wp") (:maintainer "Grant Rettke" . "grant@wisdomandwonder.com") (:authors ("Puneeth Chaganti" . "punchagan+org2blog@gmail.com")))]) +(org-wunderlist . [(20150818 213) ((request-deferred (0 2 0)) (alert (1 1)) (emacs (24)) (cl-lib (0 5)) (org (8 2 4)) (s (1 9 0))) "Org sync with Wunderlist" single ((:commit . "f7f1ca73661356b9fa072efd73431592ff1182e1") (:keywords "convenience") (:authors ("myuhe ")) (:maintainer "myuhe") (:url . "https://github.com/myuhe/org-wunderlist.el"))]) +(org-wild-notifier . [(20191114 1632) ((alert (1 2)) (async (1 9 3)) (dash (2 13 0)) (dash-functional (1 2 0)) (emacs (24 4))) "Customizable org-agenda notifications" single ((:commit . "713c5205869dde4d42127fd9365f5831ec222503") (:keywords "notification" "alert" "org" "org-agenda" "agenda") (:authors ("Artem Khramov" . "futu.fata@gmail.com")) (:maintainer "Artem Khramov" . "futu.fata@gmail.com") (:url . "https://github.com/akhramov/org-wild-notifier.el"))]) +(org-web-tools . [(20191022 337) ((emacs (25 1)) (org (9 0)) (dash (2 12)) (esxml (0 3 4)) (s (1 10 0)) (request (0 3 0))) "Display and capture web content with Org-mode" tar ((:commit . "3f528c0d2cf6eeb5f0a672d1ed719b7476472136") (:keywords "hypermedia" "outlines" "org" "web") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "http://github.com/alphapapa/org-web-tools"))]) +(org-wc . [(20180610 253) nil "Count words in org mode trees." single ((:commit . "0716c1e8276f6953e139e357e97566e792c8be19") (:authors ("Simon Guest")) (:maintainer "Simon Guest"))]) +(org-vcard . [(20190810 124) nil "org-mode support for vCard export and import." tar ((:commit . "df5e2d3bc0c3970e5fd553ee9d55878c4f9a163d") (:keywords "outlines" "org" "vcard") (:authors ("Alexis" . "flexibeast@gmail.com") ("Will Dey" . "will123dey@gmail.com")) (:maintainer "Alexis" . "flexibeast@gmail.com") (:url . "https://github.com/flexibeast/org-vcard"))]) +(org-variable-pitch . [(20190914 2046) ((emacs (25))) "Minor mode for variable pitch text in org mode." single ((:commit . "5f3e67448cc98fe2875115163849acae4d9e8526") (:keywords "faces") (:authors ("GöktuÄŸ Kayaalp" . "self@gkayaalp.com")) (:maintainer "GöktuÄŸ Kayaalp" . "self@gkayaalp.com") (:url . "https://dev.gkayaalp.com/elisp/index.html#ovp"))]) +(org-trello . [(20190304 900) ((request-deferred (0 2 0)) (deferred (0 4 0)) (s (1 11 0)) (dash-functional (2 12 1)) (dash (2 12 1))) "Minor mode to synchronize org-mode buffer and trello board" tar ((:commit . "94539558343ff109030e20ebba6a282af41a5eb9"))]) +(org-tree-slide . [(20190729 1550) nil "A presentation tool for org-mode" single ((:commit . "036a36eec1cf712d3db155572aed325daa372eb5") (:keywords "convenience" "org-mode" "presentation" "narrowing") (:authors ("Takaaki ISHIKAWA ")) (:maintainer "Takaaki ISHIKAWA ") (:url . "https://github.com/takaxp/org-tree-slide"))]) +(org-transform-tree-table . [(20150110 1433) ((dash (2 10 0)) (s (1 3 0))) "Transform org-mode tree with properties to a table, and the other way around" single ((:commit . "0a9bf07f01bc5fc3b349aff64e83999a8de83b52") (:keywords "org-mode" "table" "org-table" "tree" "csv" "convert") (:authors (nil . "Johan Lindstrom ")) (:maintainer nil . "Johan Lindstrom ") (:url . "https://github.com/jplindstrom/emacs-org-transform-tree-table"))]) +(org-tracktable . [(20161118 1329) ((emacs (24)) (cl-lib (0 5))) "Track your writing progress in an org-table" single ((:commit . "8e0e60a582a034bd66d5efb72d513140b7d4d90a") (:keywords "org" "writing") (:authors ("tty-tourist" . "andreasrasholm@protonmail.com")) (:maintainer "tty-tourist" . "andreasrasholm@protonmail.com") (:url . "https://github.com/tty-tourist/org-tracktable"))]) +(org-toodledo . [(20150301 1113) ((request-deferred (0 2 0)) (emacs (24)) (cl-lib (0 5))) "Toodledo integration for Emacs Org mode" tar ((:commit . "2c91a92bd07ae4a546771b018a6faa0e06399968") (:keywords "outlines" "data") (:authors ("Christopher J. White" . "emacs@grierwhite.com")) (:maintainer "Christopher J. White" . "emacs@grierwhite.com"))]) +(org-timeline . [(20190612 1759) ((dash (2 13 0)) (emacs (24 3))) "Add graphical view of agenda to agenda buffer." single ((:commit . "f628519a12ce3d534b9aa5043b0273880cf29790") (:keywords "calendar") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:url . "https://github.com/Fuco1/org-timeline/"))]) +(org-time-budgets . [(20151111 801) ((alert (0 5 10)) (cl-lib (0 5))) "Define time budgets and display clocked time." single ((:commit . "baa1ce6333157fed3b3799a80e6cf8c73c9e2c18") (:authors ("Arthur Leonard Andersen" . "leoc.git@gmail.com")) (:maintainer "Arthur Leonard Andersen" . "leoc.git@gmail.com"))]) +(org-themis . [(20160122 404) ((cl-lib (0 4))) "Experimental project management mode for org-mode" single ((:commit . "78aadbbe22b1993be5c4accd0d3f91a4e85c9a3c") (:keywords "org-mode" "elisp" "project") (:maintainer "Zachary Elliott" . "contact@zell.io") (:url . "http://github.com/zellio/org-themis"))]) +(org-tfl . [(20170923 1218) ((org (0 16 2)) (cl-lib (0 5)) (emacs (24 1))) "Transport for London meets Orgmode" tar ((:commit . "f0d7d39106a1de5457f5160cddd98ab892b61066") (:keywords "org" "tfl") (:authors ("storax (David Zuber), ")) (:maintainer "storax (David Zuber), ") (:url . "https://github.com/storax/org-tfl"))]) +(org-tanglesync . [(20190926 1345) ((emacs (24 4))) "Syncing org src blocks with tangled external files" single ((:commit . "d99181f173b4e55b4e835d99fcd415e62beb047f") (:keywords "outlines") (:authors ("Mehmet Tekman")) (:maintainer "Mehmet Tekman") (:url . "https://github.com/mtekman/org-tanglesync.el"))]) +(org-table-sticky-header . [(20190924 506) ((org (8 2 10)) (emacs (24 4))) "Sticky header for org-mode tables" single ((:commit . "b65442857128ab04724aaa301e60aa874a31a798") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com"))]) +(org-table-comment . [(20120209 1851) nil "Org table comment modes." single ((:commit . "33b9966c33ecbc3e27cca67c2f2cdea04364d74e") (:keywords "org-mode" "orgtbl") (:authors ("Matthew L. Fidler ")) (:maintainer "Matthew L. Fidler") (:url . "http://github.com/mlf176f2/org-table-comment.el"))]) +(org-sync-snippets . [(20190318 1744) ((org (8 3 5)) (emacs (24 3)) (f (0 17 3))) "Export snippets to org-mode and vice versa" single ((:commit . "50cefe5a37196ed1af3d330d6871c3b37fa90d41") (:keywords "snippet" "org-mode" "yasnippet" "tools") (:authors ("Adrien Brochard")) (:maintainer "Adrien Brochard") (:url . "https://github.com/abrochard/org-sync-snippets"))]) +(org-sync . [(20181204 23) ((cl-lib (0 5)) (org (8 2)) (emacs (24))) "Synchronize Org documents with External Issue Trackers" tar ((:commit . "e34a385fa9e658c8341a0a6e6bc3472d4d536bb8") (:keywords "org" "synchronization" "issue tracking" "github" "redmine") (:authors ("Aurelien Aptel ")) (:maintainer "Andrei Beliankou" . "arbox@yandex.ru") (:url . "https://github.com/arbox/org-sync"))]) +(org-super-agenda . [(20190925 958) ((emacs (26 1)) (s (1 10 0)) (dash (2 13)) (org (9 0)) (ht (2 2)) (ts (0 2))) "Supercharge your agenda" tar ((:commit . "a87ca11fbbe72ab6c1c4c3b55ae9e1e93ebfb8ba") (:keywords "hypermedia" "outlines" "org" "agenda") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "http://github.com/alphapapa/org-super-agenda"))]) +(org-sticky-header . [(20191117 549) ((emacs (24 4)) (org (8 3 5))) "Show off-screen Org heading at top of window" single ((:commit . "1053ebdeb3bd14fc8d4538643532efb86d18b73c") (:keywords "hypermedia" "outlines" "org") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "http://github.com/alphapapa/org-sticky-header"))]) +(org-static-blog . [(20191107 805) ((emacs (24 3))) "a simple org-mode based static blog generator" single ((:commit . "6381b933853878eb0eac9404d9596ea59c5b1a1e") (:authors ("Bastian Bechtold")) (:maintainer "Bastian Bechtold") (:url . "https://github.com/bastibe/org-static-blog"))]) +(org-starter-swiper . [(20190929 646) ((emacs (25 1)) (swiper (0 11)) (org-starter (0 2 4))) "Swiper for org-starter" single ((:commit . "c9f0f91437131dbace3299ff5912e85f07bf2b21") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:url . "https://github.com/akirak/org-starter"))]) +(org-starter . [(20191005 413) ((emacs (25 1)) (dash (2 12)) (dash-functional (1 2 0))) "A basic configuration framework for org mode" tar ((:commit . "c9f0f91437131dbace3299ff5912e85f07bf2b21") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:url . "https://github.com/akirak/org-starter"))]) +(org-sql . [(20190621 2111) ((emacs (25)) (dash (2 15))) "Org-Mode SQL converter" single ((:commit . "e1bcfd7d648ce60bc2dd24b6e2144199af03563a") (:keywords "org-mode" "data") (:authors ("Nathan Dwarshuis" . "natedwarshuis@gmail.com")) (:maintainer "Nathan Dwarshuis" . "natedwarshuis@gmail.com") (:url . "https://github.com/ndwarshuis/org-sql"))]) +(org-snooze . [(20181229 1424) ((emacs (24 4))) "Snooze your code, doc and feed" single ((:commit . "8799adc14a20f3489063d279ff69312de3180bf9") (:keywords "extensions") (:authors ("Bill Xue")) (:maintainer "Bill Xue") (:url . "https://github.com/xueeinstein/org-snooze.el"))]) +(org-sidebar . [(20191012 514) ((emacs (26 1)) (s (1 10 0)) (dash (2 13)) (dash-functional (1 2 0)) (org (9 0)) (org-ql (0 2)) (org-super-agenda (1 0))) "Helpful sidebar for Org buffers" single ((:commit . "b5eff7195718e6a70a42d36e48800632080aab0c") (:keywords "hypermedia" "outlines" "org" "agenda") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "https://github.com/alphapapa/org-sidebar"))]) +(org-shoplist . [(20190809 2156) ((emacs (25))) "Eat the world" single ((:commit . "9591a4747eb2e5cab53203a120f9b854c75e629b") (:keywords "extensions" "matching") (:authors ("lordnik22")) (:maintainer "lordnik22") (:url . "https://github.com/lordnik22"))]) +(org-send-ebook . [(20181016 800) ((emacs (25)) (cl-lib (0 5)) (seq (2 20))) "Send org link file to ebook reader." single ((:commit . "b4913a709f9206115c3e3ea73e217029cc0fb3de") (:keywords "org" "link" "ebook" "kindle" "epub" "mobi") (:url . "https://github.com/stardiviner/org-send-ebook"))]) +(org-seek . [(20161217 502) ((emacs (24 3)) (ag (0 48))) "Searching Org-mode files with search tools." single ((:commit . "1f51e6634e3b9a6a29d335d0d14370a6ffef2265") (:keywords "org" "search" "ag" "pt") (:authors ("stardiviner" . "numbchild@gmail.com")) (:maintainer "stardiviner" . "numbchild@gmail.com") (:url . "https://github.com/stardiviner/org-seek.el"))]) +(org-rtm . [(20160214 1236) ((rtm (0 1))) "Simple import/export from rememberthemilk to org-mode" single ((:commit . "adc42ad1fbe92ab447ccc9553780f4456f2508d2") (:keywords "outlines" "data") (:authors ("Philipp Middendorf" . "pmidden@secure.mailbox.org")) (:maintainer "Philipp Middendorf" . "pmidden@secure.mailbox.org") (:url . "https://github.com/pmiddend/org-rtm"))]) +(org-rich-yank . [(20181120 1354) ((emacs (24 4))) "paste with org-mode markup and link to source" single ((:commit . "d2f350c5296cf05d6c84b02762ba44f09a02b4e3") (:keywords "convenience" "hypermedia" "org") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org") (:url . "https://github.com/unhammer/org-rich-yank"))]) +(org-review . [(20160907 537) nil "schedule reviews for Org entries" single ((:commit . "058e75b7f28d2ad2390290fe17a63d98ef5ab763") (:keywords "org" "review") (:authors ("Alan Schmitt" . "alan.schmitt@polytechnique.org")) (:maintainer "Alan Schmitt" . "alan.schmitt@polytechnique.org") (:url . "https://github.com/brabalan/org-review"))]) +(org-reverse-datetree . [(20190914 102) ((emacs (26 1)) (dash (2 12))) "Create reverse date trees in org-mode" single ((:commit . "7668fb561320bf01e73d98795eb6ad69f1e933ac") (:keywords "outlines") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:url . "https://github.com/akirak/org-reverse-datetree"))]) +(org-repo-todo . [(20171228 119) nil "Simple repository todo management with org-mode" single ((:commit . "f73ebd91399c5760ad52c6ad9033de1066042003") (:keywords "convenience") (:authors ("justin talbott" . "justin@waymondo.com")) (:maintainer "justin talbott" . "justin@waymondo.com") (:url . "https://github.com/waymondo/org-repo-todo"))]) +(org-ref . [(20191023 117) ((dash (2 11 0)) (htmlize (1 51)) (helm (1 5 5)) (helm-bibtex (2 0 0)) (ivy (0 8 0)) (hydra (0 13 2)) (key-chord (0)) (s (1 10 0)) (f (0 18 0)) (emacs (24 4)) (pdf-tools (0 7))) "citations, cross-references and bibliographies in org-mode" tar ((:commit . "58ae484729aa2027fcc3283a75f4c2c19cf499a2") (:keywords "org-mode" "cite" "ref" "label") (:authors ("John Kitchin" . "jkitchin@andrew.cmu.edu")) (:maintainer "John Kitchin" . "jkitchin@andrew.cmu.edu") (:url . "https://github.com/jkitchin/org-ref"))]) +(org-redmine . [(20160711 1114) nil "Redmine tools using Emacs OrgMode" single ((:commit . "e77d013bc3784947c46a5c53f03cd7d3c68552fc") (:keywords "redmine" "org") (:authors ("Wataru MIYAGUNI" . "gonngo@gmail.com")) (:maintainer "Wataru MIYAGUNI" . "gonngo@gmail.com") (:url . "https://github.com/gongo/org-redmine"))]) +(org-recur . [(20190719 846) ((emacs (24)) (org (9 0))) "Recurring org-mode tasks." single ((:commit . "23c3c3a85d9042dc09ed6147b274f4043cfa50f7") (:authors ("Marcin Swieczkowski" . "marcin.swieczkowski@gmail.com")) (:maintainer "Marcin Swieczkowski" . "marcin.swieczkowski@gmail.com") (:url . "https://github.com/m-cat/org-recur"))]) +(org-recent-headings . [(20190909 1618) ((emacs (26 1)) (org (9 0 5)) (dash (2 13 0)) (dash-functional (1 2 0)) (frecency (0 1)) (s (1 12 0))) "Jump to recently used Org headings" single ((:commit . "6430700dbe2ba34d852b36d56b3a879d71dabc9a") (:keywords "hypermedia" "outlines" "org") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "http://github.com/alphapapa/org-recent-headings"))]) +(org-readme . [(20151204 1217) ((http-post-simple (1 0)) (yaoddmuse (0 1 1)) (header2 (21 0)) (lib-requires (21 0)) (cl-lib (0 5))) "Integrates Readme.org and Commentary/Change-logs." tar ((:commit . "4cb9f768d282a2835b4510b6504ff9ede487007d") (:keywords "header2" "readme.org" "emacswiki" "git") (:authors ("Matthew L. Fidler")) (:maintainer "Matthew L. Fidler") (:url . "https://github.com/mlf176f2/org-readme"))]) +(org-re-reveal-ref . [(20191022 1426) ((emacs (24 4)) (org-ref (1 1 1)) (org-re-reveal (0 9 3))) "Citations and bibliography for org-re-reveal" tar ((:commit . "1f56a1fc9a52f3815bb2115ebeca3c355688d722") (:keywords "hypermedia" "tools" "slideshow" "presentation" "bibliography") (:authors ("Jens Lechtenbörger")) (:maintainer "Jens Lechtenbörger") (:url . "https://gitlab.com/oer/org-re-reveal-ref"))]) +(org-re-reveal . [(20191020 1137) ((emacs (24 4)) (org (8 3)) (htmlize (1 34))) "Org export to reveal.js presentations" tar ((:commit . "62f0868c4e9b098fb43b62b257bcd924779838c0") (:keywords "tools" "outlines" "hypermedia" "slideshow" "presentation" "oer") (:url . "https://gitlab.com/oer/org-re-reveal"))]) +(org-randomnote . [(20190403 1633) ((f (0 19 0)) (dash (2 12 0)) (org (0))) "Find a random note in your Org-Mode files" single ((:commit . "f35a9d948751ad409aa057bfb68f1d008fdf9442") (:authors ("Michael Fogleman" . "michaelwfogleman@gmail.com")) (:maintainer "Michael Fogleman" . "michaelwfogleman@gmail.com") (:url . "http://github.com/mwfogleman/org-randomnote"))]) +(org-random-todo . [(20190214 2057) ((emacs (24 3)) (alert (1 3))) "show a random TODO (with alert) every so often" single ((:commit . "4f7677af740e8f3f7cfaf630ae2e594a125af760") (:keywords "org" "todo" "notification" "calendar") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org") (:url . "https://github.com/unhammer/org-random-todo"))]) +(org-radiobutton . [(20180612 1028) ((dash (2 13 0)) (emacs (24))) "Radiobutton for org-mode lists." single ((:commit . "4182aafbe5ae1bdfb0b07efa435bdba8bbd7199d") (:keywords "outlines") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com") (:url . "https://github.com/Fuco1/org-radiobutton"))]) +(org-ql . [(20191105 2141) ((emacs (26 1)) (dash (2 13)) (dash-functional (1 2 0)) (f (0 17 2)) (org (9 0)) (org-super-agenda (1 2 -1)) (ov (1 0 6)) (peg (0 6)) (s (1 12 0)) (ts (0 2 -1))) "Org Query Language, search command, and agenda-like view" tar ((:commit . "d3272cdd8bd013d6925696656f5ed51a4a5e0c4b") (:keywords "hypermedia" "outlines" "org" "agenda") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "https://github.com/alphapapa/org-ql"))]) +(org-protocol-jekyll . [(20170328 1639) ((cl-lib (0 5))) "Jekyll's handler for org-protocol" single ((:commit . "dec064a42d6dfe81dfde7ba59ece5ca103ac6334") (:authors ("Vladimir S. Ivanov" . "ivvl82@gmail.com")) (:maintainer "Vladimir S. Ivanov" . "ivvl82@gmail.com"))]) +(org-projectile-helm . [(20180601 1822) ((org-projectile (1 0 0)) (helm (2 3 1)) (emacs (25))) "helm functions for org-projectile" single ((:commit . "de37d0094791ab1146276904f3a37eba699e0b60") (:keywords "org" "projectile" "todo" "helm" "outlines") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:url . "https://github.com/IvanMalison/org-projectile"))]) +(org-projectile . [(20190130 1439) ((projectile (0 11 0)) (dash (2 10 0)) (emacs (24)) (s (1 9 0)) (org-category-capture (0 0 0))) "Repository todo management for org-mode" single ((:commit . "de37d0094791ab1146276904f3a37eba699e0b60") (:keywords "org-mode" "projectile" "todo" "tools" "outlines") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:url . "https://github.com/IvanMalison/org-projectile"))]) +(org-preview-html . [(20180625 619) ((org (8 0)) (emacs (24 4))) "automatically use eww to preview the current org file on save" single ((:commit . "8ba7ecd7ac624f33b3e2395f477bbff4f1ec4efe") (:keywords "convenience" "eww" "org") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:url . "https://github.com/lujun9972/org-preview-html"))]) +(org-pretty-tags . [(20191120 1343) ((emacs (25))) "Surrogates for tags" single ((:commit . "23b1f46b47f09ffee68434a276008e346f929218") (:keywords "reading" "outlines") (:authors ("Marco Wahl" . "marcowahlsoft@gmail.com")) (:maintainer "Marco Wahl" . "marcowahlsoft@gmail.com") (:url . "https://gitlab.com/marcowahl/org-pretty-tags"))]) +(org-present-remote . [(20181001 2141) ((org-present (9)) (elnode (0 9)) (emacs (24))) "A web-based remote control for org-present" single ((:commit . "d0f96dd57c152e7aa311ecbe03e7be287fd5979f") (:keywords "comm" "docs") (:authors ("Duncan Bayne" . "duncan@bayne.id.au")) (:maintainer "Duncan Bayne" . "duncan@bayne.id.au") (:url . "https://gitlab.com/duncan-bayne/org-present-remote"))]) +(org-present . [(20180303 2330) ((org (7))) "Minimalist presentation minor-mode for Emacs org-mode." single ((:commit . "d13acd70eff6a1608bc991920232146a0de76b21") (:authors ("Ric Lister")) (:maintainer "Ric Lister") (:url . "https://github.com/rlister/org-present"))]) +(org-pomodoro . [(20190530 1445) ((alert (0 5 10)) (cl-lib (0 5))) "Pomodoro implementation for org-mode." tar ((:commit . "aa07c11318f91219336197e62c47bc7a3d090479") (:authors ("Arthur Leonard Andersen" . "leoc.git@gmail.com")) (:maintainer "Arthur Leonard Andersen" . "leoc.git@gmail.com") (:url . "https://github.com/lolownia/org-pomodoro"))]) +(org-pivotal . [(20191116 530) ((a (0 1 1)) (dash (2 14 1)) (dash-functional (1 2 0)) (emacs (26 1)) (request (0 3 0))) "Sync Pivotal Tracker to org buffer" tar ((:commit . "fc6929de03785ca3e9bb3ba21038c3a262594a7f") (:authors ("Huy Duong" . "qhuyduong@hotmail.com")) (:maintainer "Huy Duong" . "qhuyduong@hotmail.com") (:url . "https://github.com/org-pivotal/org-pivotal"))]) +(org-picklink . [(20190902 654) ((emacs (24 4))) "Pick a headline link from org-agenda" single ((:commit . "e8c95e188b60ff84d794cbedbcce6732ccb82e4f") (:keywords "convenience") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com") (:url . "https://github.com/tumashu/org-picklink"))]) +(org-pdfview . [(20180225 1006) ((org (8 2 10)) (pdf-tools (0 80))) "Support for links to documents in pdfview mode" single ((:commit . "8b71f313634b95a1fac42fc701934fd796565f3b") (:keywords "org" "pdf-view" "pdf-tools") (:authors ("Markus Hauck" . "markus1189@gmail.com")) (:maintainer "Markus Hauck" . "markus1189@gmail.com"))]) +(org-password-manager . [(20180227 1810) ((org (8 2 10)) (s (1 9 0)) (dash (2 13 0))) "Password manager for Org Mode." single ((:commit . "4b30a36e71182553a02e4dd415369290d98ec03a") (:keywords "password") (:authors ("Leandro Facchinetti" . "me@leafac.com")) (:maintainer "Leandro Facchinetti" . "me@leafac.com") (:url . "https://git.leafac.com/org-password-manager"))]) +(org-parser . [(20190207 521) ((emacs (25 1)) (dash (2 12 0)) (ht (2 1))) "parse org files into structured datatypes." single ((:commit . "8610aef8dc878fc001975780bcbcbab30dc929b7") (:keywords "files" "outlines" "tools") (:url . "https://bitbucket.org/zck/org-parser.el"))]) +(org-page . [(20170807 224) ((ht (1 5)) (simple-httpd (1 4 6)) (mustache (0 22)) (htmlize (1 47)) (org (8 0)) (dash (2 0 0)) (cl-lib (0 5)) (git (0 1 1))) "a static site generator based on org mode" tar ((:commit . "d0e55416174a60d3305e97ca193b333f4cccba4f"))]) +(org-outlook . [(20160705 1338) nil "Outlook org" tar ((:commit . "ec32d8d9d8ffd17e6de4de0b52fc3f5ad9b4cc0d") (:keywords "org-outlook") (:authors ("Matthew L. Fidler")) (:maintainer "Matthew L. Fidler") (:url . "https://github.com/mlf176f2/org-outlook.el"))]) +(org-outline-numbering . [(20180705 1501) ((emacs (24)) (org (8 3)) (cl-lib (0 6)) (ov (1 0 6))) "Show outline numbering as overlays in org-mode" single ((:commit . "22014917dd7e751c46fa13e1e836c2d0265ce82f") (:keywords "wp" "convenience") (:authors ("Anders Johansson")) (:maintainer "Anders Johansson") (:url . "https://gitlab.com/andersjohansson/org-outline-numbering"))]) +(org-onenote . [(20171008 500) ((oauth2 (0 11)) (request (0 2 0)) (org (8 2 10))) "export org-mode document to onenote." single ((:commit . "5ce5cf4edb143180e0b185ac26826d39ae5bc929") (:keywords "tools" "docs" "org-mode" "onenote") (:authors ("Frei Zhang" . "ifree0@gmail.com")) (:maintainer "Frei Zhang" . "ifree0@gmail.com") (:url . "https://github.com/ifree/org-onenote"))]) +(org-octopress . [(20170821 415) ((org (9 0)) (orglue (0 1)) (ctable (0 1 1))) "Compose octopress articles using org-mode." tar ((:commit . "38598ef98d04076a8eb78d549907ddfde8d3a652") (:keywords "org" "jekyll" "octopress" "blog") (:authors ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainer "Yoshinari Nomura" . "nom@quickhack.net"))]) +(org-noter . [(20191020 1212) ((emacs (24 4)) (cl-lib (0 6)) (org (9 0))) "A synchronized, Org-mode, document annotator" single ((:commit . "9ead81d42dd4dd5074782d239b2efddf9b8b7b3d") (:keywords "lisp" "pdf" "interleave" "annotate" "external" "sync" "notes" "documents" "org-mode") (:authors (nil . "Gonçalo Santos (aka. weirdNox@GitHub)")) (:maintainer nil . "Gonçalo Santos (aka. weirdNox@GitHub)") (:url . "https://github.com/weirdNox/org-noter"))]) +(org-notebook . [(20170322 452) ((emacs (24)) (org (8)) (cl-lib (0 5))) "Ease the use of org-mode as a notebook" single ((:commit . "86042d866bf441e2c9bb51f995e5994141b78517") (:keywords "convenience" "tools") (:authors ("Paul Elder" . "paul.elder@amanokami.net")) (:maintainer "Paul Elder" . "paul.elder@amanokami.net"))]) +(org-multiple-keymap . [(20150329 106) ((org (8 2 4)) (emacs (24)) (cl-lib (0 5))) "Set keymap to elements, such as timestamp and priority." single ((:commit . "8ebc532df7f0dd6e6c3aa7c380a51d4166c668e8") (:keywords "convenience" "org-mode") (:authors ("myuhe ")) (:maintainer "myuhe") (:url . "https://github.com/myuhe/org-multiple-keymap.el"))]) +(org-msg . [(20191105 2244) ((emacs (24 4)) (htmlize (1 54))) "Org mode to send and reply to email in HTML." single ((:commit . "02192449bf4edb99775607a0151ab7e2c50becdc") (:keywords "extensions" "mail") (:authors ("Jérémy Compostella" . "jeremy.compostella@gmail.com")) (:maintainer "Jérémy Compostella" . "jeremy.compostella@gmail.com") (:url . "https://github.com/jeremy-compostella/org-msg"))]) +(org-mru-clock . [(20191121 840) ((emacs (24 3))) "clock in/out of tasks with completion and persistent history" single ((:commit . "1ec07f8ce60b3eca281072e51f88065469450ab1") (:keywords "convenience" "calendar") (:authors ("Kevin Brubeck Unhammer" . "unhammer@fsfe.org")) (:maintainer "Kevin Brubeck Unhammer" . "unhammer@fsfe.org") (:url . "https://github.com/unhammer/org-mru-clock"))]) +(org-mobile-sync . [(20180606 524) ((emacs (24 3 50)) (org (8 0))) "automatically sync org-mobile on changes" single ((:commit . "06764b943a528827df1e2acc6bc7806cc2c1351f") (:keywords "org-mode" "org" "mobile" "sync" "todo") (:authors ("steckerhalter")) (:maintainer "steckerhalter") (:url . "https://framagit.org/steckerhalter/org-mobile-sync"))]) +(org-mind-map . [(20180826 2340) ((emacs (24)) (dash (1 8 0)) (org (8 2 10))) "Creates a directed graph from org-mode files" single ((:commit . "16a8aac5462c01c4e7b6b7915381fde42fd3caf6") (:keywords "orgmode" "extensions" "graphviz" "dot") (:authors ("Ted Wiles" . "theodore.wiles@gmail.com")) (:maintainer "Ted Wiles" . "theodore.wiles@gmail.com") (:url . "https://github.com/theodorewiles/org-mind-map"))]) +(org-mime . [(20191106 1140) ((emacs (24 4)) (cl-lib (0 5))) "org html export for text/html MIME emails" single ((:commit . "dd9dac74cc05cd8439d59580ec9c7d9749359b54") (:keywords "mime" "mail" "email" "html") (:authors ("Eric Schulte")) (:maintainer "Chen Bin (redguardtoo)") (:url . "http://github.com/org-mime/org-mime"))]) +(org-make-toc . [(20191014 2307) ((emacs (25 1)) (dash (2 12)) (s (1 10 0)) (org (9 0))) "Automatic tables of contents for Org files" single ((:commit . "d2f61e3c7e995adf0954cd85139842e57d744eb4") (:keywords "org" "convenience") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "http://github.com/alphapapa/org-make-toc"))]) +(org-lookup-dnd . [(20190622 2224) ((emacs (24 4)) (org-pdfview (0 1))) "Reference the index of a D&D handbook pdf" single ((:commit . "af09bdf2c83499be9f7c271bb3c0cc3c46ed95f4") (:authors ("Malte Lau Petersen" . "maltelau@protonmail.com")) (:maintainer "Malte Lau Petersen" . "maltelau@protonmail.com") (:url . "https://gitlab.com/maltelau/org-lookup-dnd"))]) +(org-listcruncher . [(20180815 603) ((cl-lib (0 5)) (seq (2 3)) (emacs (24 4))) "Parse Org mode list contents into table" single ((:commit . "65c09c5deba065752eb88875c54dc26abcdfaffb") (:keywords "convenience") (:authors ("Derek Feichtinger" . "dfeich@gmail.com")) (:maintainer "Derek Feichtinger" . "dfeich@gmail.com") (:url . "https://github.com/dfeich/org-listcruncher"))]) +(org-linkany . [(20160207 411) ((log4e (0 2 0)) (yaxception (0 1))) "Insert link using anything.el/helm.el on org-mode" single ((:commit . "8cfe2f1a46e6654a79f56505349d1396263cecb3") (:keywords "org" "completion") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:url . "https://github.com/aki2o/org-linkany"))]) +(org-link-travis . [(20140405 2327) ((org (7))) "Insert/Export the link of Travis CI on org-mode" single ((:commit . "596615ad8373d9090bd4138da683524f0ad0bda5") (:keywords "org") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:url . "https://github.com/aki2o/org-link-travis"))]) +(org-link-minor-mode . [(20170805 1852) ((org (8))) "Enable org-mode links in non-org modes" single ((:commit . "7b92df60f3fee7f609d649d80ef243b45771ebea") (:authors ("Sean O'Halpin ")) (:maintainer "Sean O'Halpin ") (:url . "https://github.com/seanohalpin/org-link-minor-mode"))]) +(org-kindle . [(20190315 439) ((emacs (25)) (cl-lib (0 5)) (seq (2 20))) "Send org link file to ebook reader." single ((:commit . "612a2894bbbff8a6cf54709d591fee86005755de") (:keywords "org" "link" "ebook" "kindle" "epub" "mobi") (:url . "https://github.com/stardiviner/org-kindle"))]) +(org-kanban . [(20191003 1455) ((s (0)) (dash (2 13 0)) (emacs (24 4)) (org (9 1))) "kanban dynamic block for org-mode." single ((:commit . "3007d636f0c7b69d767d7adcca4ab462708f9610") (:keywords "org-mode" "org" "kanban" "tools") (:authors ("Christian Köstlin" . "christian.koestlin@gmail.com")) (:maintainer "Christian Köstlin" . "christian.koestlin@gmail.com") (:url . "http://github.com/gizmomogwai/org-kanban"))]) +(org-journal-list . [(20190221 2052) ((emacs (25))) "Org mode Journal List" single ((:commit . "2b26d00181bb49bff64b31ad020490acd1b6ae02") (:authors ("Huy Tran" . "huytd189@gmail.com")) (:maintainer "Huy Tran" . "huytd189@gmail.com") (:url . "https://github.com/huytd/org-journal-list"))]) +(org-journal . [(20191102 1031) ((emacs (25 1))) "a simple org-mode based journaling mode" single ((:commit . "b4909dece7def25ab672f735818d57576b2e4bbf") (:authors ("Bastian Bechtold")) (:maintainer "Bastian Bechtold") (:url . "http://github.com/bastibe/org-journal"))]) +(org-jira . [(20190930 1406) ((emacs (24 5)) (cl-lib (0 5)) (request (0 2 0)) (dash (2 14 1))) "Syncing between Jira and Org-mode." tar ((:commit . "5123c29867e5da54d80e92f9a5a4259144451404") (:keywords "ahungry" "jira" "org" "bug" "tracker") (:maintainer "Matthew Carter" . "m@ahungry.com") (:url . "https://github.com/ahungry/org-jira"))]) +(org-iv . [(20171001 1022) ((impatient-mode (1 0 0)) (org (8 0)) (cl-lib (0 5))) "a tool used to view html (in browser) generated by org-file once the org-file changes" tar ((:commit . "7f2bb1b32647655fd9d6684f6f09dcc66b61b0cd"))]) +(org-index . [(20190920 356) ((emacs (24 4))) "A personal adaptive index for org" single ((:commit . "aba9b1ea49e83c541c544e4030fcc2e0a55c908b") (:authors ("Marc Ihm" . "1@2484.de")) (:maintainer "Marc Ihm" . "1@2484.de") (:url . "https://github.com/marcIhm/org-index"))]) +(org-if . [(20150920 1513) nil "Interactive Fiction Authoring System for Org-Mode." tar ((:commit . "fab602cc1bbee7a4e99c0083e129219d3f9ed2e8"))]) +(org-grep . [(20151202 1229) ((cl-lib (0 5))) "Kind of M-x rgrep adapted for Org mode." single ((:commit . "5bdd04c0f53b8a3d656f36ea17bba3df7f0cb684") (:authors ("François Pinard" . "pinard@iro.umontreal.ca")) (:maintainer "François Pinard" . "pinard@iro.umontreal.ca") (:url . "https://github.com/pinard/org-grep"))]) +(org-gnome . [(20150614 1457) ((alert (1 2)) (telepathy (0 1)) (gnome-calendar (0 1))) "Orgmode integration with the GNOME desktop" single ((:commit . "122e14cf6f8104150a65246a9a7c10e1d7939862") (:keywords "org" "gnome") (:authors ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainer "Nicolas Petton" . "petton.nicolas@gmail.com"))]) +(org-gcal . [(20191018 921) ((request (20190901)) (request-deferred (20181129)) (alert (0)) (emacs (26))) "Org sync with Google Calendar" single ((:commit . "6821e349673e9ba8d7ae7b84789f931889273dc0") (:keywords "convenience") (:authors ("myuhe ")) (:maintainer "Raimon Grau" . "raimonster@gmail.com") (:url . "https://github.com/kidd/org-gcal.el"))]) +(org-fancy-priorities . [(20180328 2331) nil "Display org priorities as custom strings" single ((:commit . "819bb993b71e7253cefef7047306ab4e0f9d0a86") (:keywords "convenience" "faces" "outlines") (:authors ("Harry Bournis" . "harrybournis@gmail.com")) (:maintainer "Harry Bournis" . "harrybournis@gmail.com") (:url . "https://github.com/harrybournis/org-fancy-priorities"))]) +(org-evil . [(20180620 1517) ((dash (2 13 0)) (evil (0)) (monitor (0)) (org (0))) "Evil extensions for Org." tar ((:commit . "3b4620edc606412ef75c0b5aa637af22486eb126") (:keywords "convenience" "evil" "org") (:authors ("Ben Moon" . "software@guiltydolphin.com")) (:maintainer "Ben Moon" . "software@guiltydolphin.com") (:url . "https://github.com/guiltydolphin/org-evil"))]) +(org-emms . [(20181010 1114) ((emacs (24))) "Play multimedia files from org-mode" single ((:commit . "07a8917f3d628c32e5de1dbd118ac08203772533") (:keywords "multimedia") (:authors ("Jonathan Gregory ")) (:maintainer "Jonathan Gregory ") (:url . "https://gitlab.com/jagrg/org-emms"))]) +(org-elisp-help . [(20161122 55) ((cl-lib (0 5)) (org (9 0))) "org links to emacs-lisp documentation" single ((:commit . "3e33ab1a2933dd7f2782ef91d667a37f12d633ab") (:keywords "org" "remember" "lisp") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/tarsius/org-elisp-help"))]) +(org-ehtml . [(20150506 2358) ((web-server (20140109 2200)) (emacs (24 3))) "Export Org-mode files as editable web pages" tar ((:commit . "9df85de1a0fe1e7b2d6c000777c1a0c0217f92d0"))]) +(org-edit-latex . [(20170908 1522) ((emacs (24 4)) (auctex (11 90))) "Edit embedded LaTeX in a dedicated buffer" single ((:commit . "1f228310ef2f3f2959a527f6d99e42ce977384c8") (:keywords "org" "latex") (:authors ("James Wong" . "jianwang.academic@gmail.com")) (:maintainer "James Wong" . "jianwang.academic@gmail.com") (:url . "https://github.com/et2010/org-edit-latex"))]) +(org-easy-img-insert . [(20160915 2008) ((emacs (24 4))) "An easier way to add images from the web in org mode" single ((:commit . "9f8aaa7f68ff1f0d8d7b1e9b618abb15002f971e") (:keywords "convenience" "hypermedia" "files") (:authors ("Tashrif Sanil" . "tashrifsanil@kloke-source.com")) (:maintainer "Tashrif Sanil" . "tashrifsanil@kloke-source.com") (:url . "https://github.com/tashrifsanil/org-easy-img-insert"))]) +(org-dropbox . [(20150114 509) ((dash (2 2)) (names (20150000)) (emacs (24))) "move Dropbox notes from phone into org-mode datetree" single ((:commit . "75dab6d6f0438a7a8a18ccf3a5d55f50bf531f6e") (:keywords "dropbox" "android" "notes" "org-mode") (:authors ("Heikki Lehvaslaiho" . "heikki.lehvaslaiho@gmail.com")) (:maintainer "Heikki Lehvaslaiho" . "heikki.lehvaslaiho@gmail.com") (:url . "https://github.com/heikkil/org-dropbox"))]) +(org-drill-table . [(20180115 1009) ((s (1 7 0)) (dash (2 2 0)) (cl-lib (0 3)) (org (8 2)) (emacs (24 1))) "Generate drill cards from org tables" single ((:commit . "2729aaa42c1e2720d9bf7bcc125e92dcf48b7f7d") (:authors ("Chris Barrett" . "chris.d.barrett@me.com")) (:maintainer "Chris Barrett" . "chris.d.barrett@me.com"))]) +(org-drill . [(20190727 1930) ((emacs (25 3)) (seq (2 14)) (org (9 2 4)) (persist (0 3))) "Self-testing using spaced repetition" single ((:commit . "7dece4a5e4b37ff32a7733e407d19ba67422008b") (:keywords "games" "outlines" "multimedia") (:authors ("Paul Sexton" . "eeeickythump@gmail.com")) (:maintainer "Phillip Lord" . "phillip.lord@russet.org.uk") (:url . "https://gitlab.com/phillord/org-drill/issues"))]) +(org-dp . [(20180311 923) ((cl-lib (0 5))) "Declarative Local Programming with Org Elements" tar ((:commit . "e720f1c155a795a5b65a04790ad195c413449716") (:authors ("Thorsten Jolitz ")) (:maintainer "Thorsten Jolitz ") (:url . "https://github.com/tj64/org-dp"))]) +(org-download . [(20191118 934) ((emacs (24 3)) (async (1 2))) "Image drag-and-drop for Org-mode." single ((:commit . "f434cec862e8d1d3b58573ab81078a4297315edc") (:keywords "multimedia" "images" "screenshots" "download") (:authors ("Oleh Krehel")) (:maintainer "Oleh Krehel") (:url . "https://github.com/abo-abo/org-download"))]) +(org-dotemacs . [(20190903 2024) ((org (7 9 3)) (cl-lib (0 5))) "Store your emacs config as an org file, and choose which bits to load." single ((:commit . "ee59739c2d59151fe7d7d3034e87c7691120a5be") (:keywords "local") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com") (:url . "https://github.com/vapniks/org-dotemacs"))]) +(org-doing . [(20161017 1620) nil "Keep track of what you're doing" tar ((:commit . "07ddbfc238cba31e4990c9b52e9a2757b39111da") (:keywords "tools" "org") (:authors ("Rudolf Olah")) (:maintainer "Rudolf Olah") (:url . "https://github.com/omouse/org-doing"))]) +(org-dashboard . [(20171223 1924) ((cl-lib (0 5))) "Visually summarize progress in org files" single ((:commit . "02c0699771d199075a286e4502340ca6e7c9e831") (:keywords "outlines" "calendar") (:authors ("Massimiliano Mirra" . "hyperstruct@gmail.com")) (:maintainer "Massimiliano Mirra" . "hyperstruct@gmail.com") (:url . "http://github.com/bard/org-dashboard"))]) +(org-d20 . [(20190628 1356) ((s (1 11 0)) (seq (2 19)) (dash (2 12 0)) (emacs (24))) "minor mode for d20 tabletop roleplaying games" single ((:commit . "0ca1b0a8d9ab0a7d687a9f2edb6eae2e57851129") (:keywords "outlines" "games") (:authors ("Sean Whitton" . "spwhitton@spwhitton.name")) (:maintainer "Sean Whitton" . "spwhitton@spwhitton.name") (:url . "https://spwhitton.name/tech/code/org-d20/"))]) +(org-cua-dwim . [(20120203 534) nil "Org-mode and Cua mode compatibility layer" single ((:commit . "a55d6c7009fc0b22f1110c07de629acc955c85e4") (:keywords "org-mode" "cua-mode") (:authors ("Matthew L. Fidler")) (:maintainer "Matthew L. Fidler"))]) +(org-context . [(20170107 1337) nil "Contextual capture and agenda commands for Org-mode" single ((:commit . "a3b4a4ce6d15e3c2d45eb5dcb78bea81913f3e21") (:keywords "org" "capture" "agenda" "convenience") (:authors ("Sylvain Rousseau ")) (:maintainer "Sylvain Rousseau ") (:url . "https://github.com/thisirs/org-context"))]) +(org-commentary . [(20160802 637) ((dash (2 0)) (emacs (24 4)) (org (8 0))) "generate or update conventional library headers using Org mode files" tar ((:commit . "821ccb994811359c42f4e3d459e0e88849d42b75") (:keywords "convenience" "docs" "tools") (:authors ("Sergei Maximov" . "s.b.maximov@gmail.com")) (:maintainer "Sergei Maximov" . "s.b.maximov@gmail.com") (:url . "https://github.com/smaximov/org-commentary"))]) +(org-clock-today . [(20190915 701) ((emacs (25))) "Show total clocked time of the current day in the mode line" single ((:commit . "18af3fede1aa0ccab83ce9195f94f9097f51c548") (:authors ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainer "Tijs Mallaerts" . "tijs.mallaerts@gmail.com") (:url . "https://github.com/mallt/org-clock-today-mode"))]) +(org-clock-split . [(20180909 2047) ((emacs (24))) "Split clock entries" single ((:commit . "b2f1497b62e7f4a767be02e249e4ac95d4f8f21c") (:keywords "calendar") (:authors ("Justin Taft ")) (:maintainer "Justin Taft ") (:url . "https://github.com/justintaft/emacs-org-clock-split"))]) +(org-clock-csv . [(20190418 1505) ((org (8 3)) (s (1 0))) "Export `org-mode' clock entries to CSV format." single ((:commit . "e2fbaa1ad1a1be40fceecde603a600b292b76acc") (:keywords "calendar" "data" "org") (:authors ("Aaron Jacobs" . "atheriel@gmail.com")) (:maintainer "Aaron Jacobs" . "atheriel@gmail.com") (:url . "https://github.com/atheriel/org-clock-csv"))]) +(org-clock-convenience . [(20190130 1610) ((cl-lib (0 5)) (org (8)) (emacs (24 3))) "convenience functions for org time tracking" single ((:commit . "7d14699a15ad6c5b9a63246a11188c77f8800e94") (:keywords "org") (:authors ("Derek Feichtinger ")) (:maintainer "Derek Feichtinger ") (:url . "https://github.com/dfeich/org-clock-convenience"))]) +(org-cliplink . [(20190608 2134) ((emacs (24 4))) "insert org-mode links from the clipboard" tar ((:commit . "82402cae7e118d67de7328417fd018a18f95fac2") (:authors ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainer "Alexey Kutepov" . "reximkut@gmail.com") (:url . "http://github.com/rexim/org-cliplink"))]) +(org-chef . [(20191017 2015) ((org (0)) (emacs (24))) "Cookbook and recipe management with org-mode." tar ((:commit . "440e0a11b4af85f558aa138de58d347020439f0b") (:keywords "convenience" "abbrev" "outlines" "org" "food" "recipes" "cooking") (:authors ("Calvin Beck" . "hobbes@ualberta.ca")) (:maintainer "Calvin Beck" . "hobbes@ualberta.ca") (:url . "https://github.com/Chobbes/org-chef"))]) +(org-category-capture . [(20180601 242) ((org (9 0 0)) (emacs (24))) "Contextualy capture of org-mode TODOs." single ((:commit . "de37d0094791ab1146276904f3a37eba699e0b60") (:keywords "org-mode" "todo" "tools" "outlines") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:url . "https://github.com/IvanMalison/org-projectile"))]) +(org-capture-pop-frame . [(20160518 1008) ((emacs (24 4))) "Run org-capture in a new pop frame" single ((:commit . "b16fd712de62cf0d1f9befd03be6ab5983cb3301") (:authors ("Feng Shu" . "tumashu@163.com")) (:maintainer "Feng Shu" . "tumashu@163.com") (:url . "https://github.com/tumashu/org-capture-pop-frame.git"))]) +(org-caldav . [(20191024 724) ((org (7))) "Sync org files with external calendar through CalDAV" single ((:commit . "f530b94b6f8d8d1f8a207e48986da75227bd78a0") (:keywords "calendar" "caldav") (:authors ("David Engster" . "deng@randomsample.de")) (:maintainer "David Engster" . "deng@randomsample.de"))]) +(org-bullets . [(20190802 927) nil "Show bullets in org-mode as UTF-8 characters" single ((:commit . "c19b13be00df8d8dc596e4f1aef4a094b08ac801") (:authors ("sabof")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/emacsorphanage/org-bullets"))]) +(org-brain . [(20191110 1324) ((emacs (25 1)) (org (9 2))) "Org-mode concept mapping" single ((:commit . "32e2b38b9fd350de3a640f3ac85f00c7ae7e1d12") (:keywords "outlines" "hypermedia") (:authors ("Erik Sjöstrand" . "sjostrand.erik@gmail.com")) (:maintainer "Erik Sjöstrand" . "sjostrand.erik@gmail.com") (:url . "http://github.com/Kungsgeten/org-brain"))]) +(org-bookmark-heading . [(20180904 1709) ((emacs (24 4)) (f (0 17 2))) "Emacs bookmark support for org-mode" single ((:commit . "eba5ef7a3c992c4a9da86f64d12fca0c1158208a") (:keywords "hypermedia" "outlines") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "http://github.com/alphapapa/org-bookmark-heading"))]) +(org-board . [(20190203 1424) nil "bookmarking and web archival system for Org mode." single ((:commit . "2e01e801abc04b8fb718ca4bc19636242ac0cb52") (:keywords "org" "bookmarks" "archives") (:authors ("Charles A. Roelli " . "charles@aurox.ch")) (:maintainer "Charles A. Roelli " . "charles@aurox.ch") (:url . "https://github.com/scallywag/org-board"))]) +(org-beautify-theme . [(20170908 2218) nil "A sub-theme to make org-mode more beautiful." single ((:commit . "df6a1114fda313e1689363e196c8284fbe2a2738") (:keywords "org" "theme") (:authors ("Jonathan Arkell" . "jonnay@jonnay.net")) (:maintainer "Jonathan Arkell" . "jonnay@jonnay.net"))]) +(org-babel-eval-in-repl . [(20191110 344) ((eval-in-repl (0 9 2)) (matlab-mode (3 3 6)) (ess (16 10)) (emacs (24))) "Eval org-mode babel code blocks in various REPLs." tar ((:commit . "929d160685db57c4f0aedf26b52f9d7a918a40dd") (:keywords "literate programming" "reproducible research" "async execution") (:authors ("Takeshi Teshima" . "diadochos.developer@gmail.com")) (:maintainer "Takeshi Teshima" . "diadochos.developer@gmail.com") (:url . "https://github.com/diadochos/org-babel-eval-in-repl"))]) +(org-autolist . [(20170924 1901) nil "Improved list management in org-mode" single ((:commit . "c82d1e83e982b5f0c106b8800e5b0cfd5f73fdc1") (:keywords "lists" "checklists" "org-mode") (:authors ("Calvin Young")) (:maintainer "Calvin Young") (:url . "https://github.com/calvinwyoung/org-autolist"))]) +(org-attach-screenshot . [(20180420 525) nil "screenshots integrated with org attachment dirs" single ((:commit . "6b1edbd2384191122a30788ac72f2233c2df0294") (:keywords "org") (:authors ("Derek Feichtinger" . "derek.feichtinger@psi.ch")) (:maintainer "Derek Feichtinger" . "derek.feichtinger@psi.ch") (:url . "https://github.com/dfeich/org-screenshot"))]) +(org-analyzer . [(20191001 1717) nil "org-analyzer is a tool that extracts time tracking data from org files." tar ((:commit . "19da62aa4dcf1090be8f574f6f2d4c7e116163a8"))]) +(org-alert . [(20180524 133) ((s (1 10 0)) (dash (2 11 0)) (alert (1 2))) "Notify org deadlines via notify-send" single ((:commit . "f87bff4acbd839acb4d2245b56b2c3d21f950911") (:keywords "org" "org-mode" "notify" "notifications" "calendar") (:authors ("Stephen Pegoraro" . "spegoraro@tutive.com")) (:maintainer "Stephen Pegoraro" . "spegoraro@tutive.com") (:url . "https://github.com/groksteve/org-alert"))]) +(org-agenda-property . [(20140626 2116) ((emacs (24 2))) "Display org properties in the agenda buffer." single ((:commit . "3b469f3e93de0036547f3631cd0366d53f7584c8") (:keywords "calendar") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com") (:url . "http://github.com/Bruce-Connor/org-agenda-property"))]) +(org-ac . [(20170401 1307) ((auto-complete-pcmp (0 0 1)) (log4e (0 2 0)) (yaxception (0 1))) "Some auto-complete sources for org-mode" single ((:commit . "41e3ef8e4039619d0370c23c66730b3b2e9e32ed") (:keywords "org" "completion") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:url . "https://github.com/aki2o/org-ac"))]) +(ordinal . [(20190104 1421) ((emacs (24)) (cl-lib (0 5))) "Convert number to ordinal number notation" single ((:commit . "75af95abbac3e30c4dd804411cb3e867c741a747") (:keywords "lisp") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:url . "https://github.com/zonuexe/ordinal.el"))]) +(orca . [(20191112 1629) ((emacs (24 3))) "Org Capture" single ((:commit . "6ecf211b56e4296898aa87eec8c6fed365a5d220") (:keywords "org" "convenience") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/orca"))]) +(operate-on-number . [(20150707 623) nil "Operate on number at point with arithmetic functions" single ((:commit . "ceb3be565a29326c1098244fac0c50606723a56e") (:keywords "editing") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:url . "https://github.com/knu/operate-on-number.el"))]) +(openwith . [(20120531 2136) nil "Open files with external programs" single ((:commit . "aeb78782ec87680ea9f082a3f20a3675b3770cf9") (:keywords "files" "processes") (:authors ("Markus Triska" . "markus.triska@gmx.at")) (:maintainer "Markus Triska" . "markus.triska@gmx.at") (:url . "https://bitbucket.org/jpkotta/openwith"))]) +(openstack-cgit-browse-file . [(20130819 927) nil "Browse the current file in OpenStack cgit" single ((:commit . "244219288b9aef41155044697bb114b7af83ab8f") (:keywords "convenience" "vc" "git" "cgit" "gerrit" "openstack") (:authors ("Chmouel Boudjnah" . "chmouel@chmouel.com")) (:maintainer "Chmouel Boudjnah" . "chmouel@chmouel.com") (:url . "https://github.com/chmouel/openstack-cgit-browse-file"))]) +(opensource . [(20160926 1616) ((s (1 11 0)) (dash (2 12 1)) (pkg-info (0 6 0)) (request (0 2 0))) "Client for Opensource API" tar ((:commit . "13499b7ae602c735e40c1c494bda6252a2f1c98f") (:keywords "opensource") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:url . "https://github.com/OpenSourceOrg/el-opensourceorg"))]) +(opener . [(20161207 1810) ((request (0 2 0)) (emacs (24)) (cl-lib (0 5))) "opening urls as buffers" tar ((:commit . "c384f67278046fdcd220275fdd212ab85672cbeb") (:keywords "url" "http" "files") (:authors ("Tim Reddehase" . "tr@rightsrestricted.com")) (:maintainer "Tim Reddehase" . "tr@rightsrestricted.com") (:url . "https://github.com/0robustus1/opener.el"))]) +(opencl-mode . [(20190615 1957) nil "Syntax coloring for opencl kernels" single ((:commit . "55cb49c8243e6420961d719faced035bc547c1ef") (:keywords "c" "opencl") (:authors ("Salmane Bah" . "salmane.bah@u-bordeaux.fr")) (:maintainer "Salmane Bah" . "salmane.bah@u-bordeaux.fr") (:url . "https://github.com/salmanebah/opencl-mode"))]) +(opencc . [(20170722 816) ((emacs (24 4))) "中文简ç¹è½¬æ¢ <-> 中文簡ç¹è½‰æ› (Convert Chinese with OpenCC)" single ((:commit . "8c539f72669ba9a99d8b5198db5ea930897ad1b9") (:keywords "chinese") (:authors ("å¾æ˜¥é˜³" . "mail@xuchunyang.me")) (:maintainer "å¾æ˜¥é˜³" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/emacs-opencc"))]) +(open-junk-file . [(20161210 1114) nil "Open a junk (memo) file to try-and-error" single ((:commit . "558bec7372b0fed4c4cb6074ab906535fae615bd") (:keywords "convenience" "tools") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/open-junk-file.el"))]) +(open-in-msvs . [(20170123 2228) nil "Open current file:line:column in Microsoft Visual Studio" tar ((:commit . "e0d071c83188ad5db8f3297d6ce784b4ed554a04") (:keywords "convenience" "usability" "integration" "visual studio" "msvs" "ide") (:authors ("Evgeny Panasyuk")) (:maintainer "Evgeny Panasyuk") (:url . "https://github.com/evgeny-panasyuk/open-in-msvs"))]) +(opam . [(20150719 1220) ((emacs (24 1))) "OPAM tools" single ((:commit . "4d589de5765728f56af7078fae328b6792de8600") (:keywords "convenience") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com") (:url . "https://github.com/lunaryorn/opam.el"))]) +(one-time-pad-encrypt . [(20160329 1513) nil "One time pad encryption within file" single ((:commit . "87cc1f124024ce3d277299ca0ac703f182937d9f") (:keywords "convenience") (:authors ("Garvin Guan" . "garvin.guan@gmail.com")) (:maintainer "Garvin Guan" . "garvin.guan@gmail.com") (:url . "https://github.com/garvinguan/emacs-one-time-pad/"))]) +(one-themes . [(20190424 740) ((emacs (24))) "One Colorscheme" tar ((:commit . "e62e4ebef7ef8ccb1e90781d613638d30cf24d7a") (:authors ("Balaji Sivaraman" . "balaji@balajisivaraman.com")) (:maintainer "Balaji Sivaraman" . "balaji@balajisivaraman.com") (:url . "http://github.com/balajisivaraman/emacs-one-themes"))]) +(on-screen . [(20160302 950) ((cl-lib (0))) "guide your eyes while scrolling" single ((:commit . "206468aa4de299ad26c2db12b757f5ad7290912f") (:keywords "convenience") (:authors ("Michael Heerdegen" . "michael_heerdegen@web.de")) (:maintainer "Michael Heerdegen" . "michael_heerdegen@web.de") (:url . "https://github.com/michael-heerdegen/on-screen.el"))]) +(on-parens . [(20180202 2241) ((dash (2 10 0)) (emacs (24)) (evil (1 1 6)) (smartparens (1 6 3))) "smartparens wrapper to fit with evil-mode/vim normal-state" single ((:commit . "7a41bc02bcffd265f8a69ed4b4e0df3c3009aaa4") (:keywords "evil" "smartparens") (:authors ("William G Hatch")) (:maintainer "William G Hatch"))]) +(omtose-phellack-theme . [(20161111 2120) nil "A dark theme, with cold bluish touch." tar ((:commit . "66f99633e199e65bd28641626435e8e59246529a"))]) +(omnisharp . [(20191015 635) ((emacs (24 4)) (flycheck (30)) (dash (2 12 0)) (auto-complete (1 4)) (popup (0 5 1)) (csharp-mode (0 8 7)) (cl-lib (0 5)) (s (1 10 0)) (f (0 19 0))) "Omnicompletion (intellisense) and more for C#" tar ((:commit . "e658a18a762438c3e1737612737b05d02a21ca2a") (:keywords "languages" "csharp" "c#" "ide" "auto-complete" "intellisense") (:authors ("Mika Vilpas and others")) (:maintainer "Mika Vilpas and others") (:url . "https://github.com/Omnisharp/omnisharp-emacs"))]) +(omnibox . [(20180423 49) ((emacs (26 1)) (dash (2 13)) (frame-local (0 0 1))) "Selection package" single ((:commit . "8ee75c71c20c438ebc43ba24ef6f543633d118f3") (:keywords "completion" "selection" "convenience" "frames") (:authors ("Sebastien Chapuis" . "sebastien@chapu.is")) (:maintainer "Sebastien Chapuis" . "sebastien@chapu.is") (:url . "https://github.com/sebastiencs/omnibox"))]) +(omni-tags . [(20170426 2109) ((pcre2el (1 7)) (cl-lib (0 5))) "Highlight and Actions for 'Tags'" tar ((:commit . "8f0f6c302fab900b7681e5c039f90850cbbabd33") (:keywords "convenience") (:authors ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainer "Adrien Becchis" . "adriean.khisbe@live.fr") (:url . "http://github.com/AdrieanKhisbe/omni-tags.el"))]) +(omni-scratch . [(20171009 2151) nil "Easy and mode-specific draft buffers" single ((:commit . "9eee3161e5cb6df58618548a2173f4da7d194814") (:keywords "convenience" "languages" "tools") (:authors ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainer "Adrien Becchis" . "adriean.khisbe@live.fr") (:url . "https://github.com/AdrieanKhisbe/omni-scratch.el"))]) +(omni-quotes . [(20170425 1832) ((dash (2 8)) (omni-log (0 3 3)) (f (0 19 0)) (s (1 11 0)) (ht (2 1))) "Random quotes displayer" tar ((:commit . "454116c1dd6581baaeefd6b9310b1b6b7a5c36d0") (:keywords "convenience") (:authors ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainer "Adrien Becchis" . "adriean.khisbe@live.fr") (:url . "https://github.com/AdrieanKhisbe/omni-quotes.el"))]) +(omni-log . [(20170930 1235) ((emacs (24)) (ht (2 0)) (s (1 6 1)) (dash (2 13 0))) "Logging utilities" tar ((:commit . "11e959473c1bd9415d0cda785940c36ba6ad44ab") (:keywords "convenience" "languages" "tools") (:authors ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainer "Adrien Becchis" . "adriean.khisbe@live.fr") (:url . "https://github.com/AdrieanKhisbe/omni-log.el"))]) +(omni-kill . [(20171016 2140) nil "Kill all the things" single ((:commit . "904549c8fd6ac3cf22b5d7111ca8944e179cffea") (:keywords "convenience" "editing" "tools") (:authors ("Adrien Becchis" . "adriean.khisbe@live.fr")) (:maintainer "Adrien Becchis" . "adriean.khisbe@live.fr"))]) +(om-mode . [(20140915 2110) nil "Insert Om component template with life cycle." single ((:commit . "cdc0c2912321f8438b0f3449ba8aca50ec150bba") (:keywords "clojurescript") (:authors ("Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com")) (:maintainer "Daniel Szmulewicz" . "daniel.szmulewicz@gmail.com"))]) +(olivetti . [(20190923 840) ((emacs (24 5))) "Minor mode for a nice writing environment" single ((:commit . "c7784fe2dccf676310a9a602b6eedc2a7b667499") (:keywords "wp" "text") (:authors ("Paul W. Rankin" . "pwr@sdf.org")) (:maintainer "Paul W. Rankin" . "pwr@sdf.org") (:url . "https://gthub.com/rnkn/olivetti"))]) +(oldlace-theme . [(20150705 1300) ((emacs (24))) "Emacs 24 theme with an 'oldlace' background." single ((:commit . "5c6f437203b0783b36a7aff4a578de4a0c8c4ee6") (:authors ("martin haesler")) (:maintainer "martin haesler"))]) +(old-norse-input . [(20170816 1842) ((emacs (24))) "An input method for Old Norse" single ((:commit . "c2e21ee72c3768e9152aff6baf12a19cde1d0c53") (:keywords "languages") (:authors ("David Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Christiansen" . "david@davidchristiansen.dk") (:url . "https://github.com/david-christiansen/emacs-old-norse-input"))]) +(offlineimap . [(20150916 1158) nil "Run OfflineIMAP from Emacs" single ((:commit . "cc3e067e6237a1eb7b21c575a41683b1febb47f1") (:authors ("Julien Danjou" . "julien@danjou.info")) (:maintainer "Julien Danjou" . "julien@danjou.info") (:url . "http://julien.danjou.info/offlineimap-el.html"))]) +(oer-reveal . [(20191024 907) ((emacs (24 4)) (org-re-reveal (2 12 0))) "OER with reveal.js, plugins, and org-re-reveal" tar ((:commit . "641c905b7453855bc99ba64441d1346b03d44fae") (:keywords "hypermedia" "tools" "slideshow" "presentation" "oer") (:authors ("Jens Lechtenbörger")) (:maintainer "Jens Lechtenbörger") (:url . "https://gitlab.com/oer/oer-reveal"))]) +(octopress . [(20190123 107) nil "A lightweight wrapper for Jekyll and Octopress." tar ((:commit . "f2c92d5420f14fc9167c7de1873836510e652de2") (:keywords "octopress" "blog") (:authors ("Aaron Bieber" . "aaron@aaronbieber.com")) (:maintainer "Aaron Bieber" . "aaron@aaronbieber.com") (:url . "https://github.com/aaronbieber/octopress.el"))]) +(octo-mode . [(20161008 1229) ((emacs (24))) "Major mode for Octo assembly language" single ((:commit . "bd4db7e5e3275b24c74e6a23c11d04f54e9feca5") (:keywords "languages") (:authors ("John Olsson" . "john@cryon.se")) (:maintainer "John Olsson" . "john@cryon.se") (:url . "https://github.com/cryon/octo-mode"))]) +(octicons . [(20151101 340) ((cl-lib (0 5))) "octicons utility" tar ((:commit . "a61e561966ffd8faa3b48ce5b3a4eec10c59708b") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-octicons"))]) +(ocp-indent . [(20190726 1452) nil "automatic indentation with ocp-indent" single ((:commit . "9e26c0a2699b7076cebc04ece59fb354eb84c11c") (:keywords "ocaml" "languages") (:url . "http://www.typerex.org/ocp-indent.html"))]) +(ocodo-svg-modelines . [(20150516 1419) ((svg-mode-line-themes (0))) "A collection of beautiful SVG modelines" tar ((:commit . "c7b0789a177219f117c4de5659ecfa8622958c40"))]) +(oceanic-theme . [(20161015 819) nil "Oceanic theme." single ((:commit . "a92ee9b470843c923e6cdcafdd65106ff994d04d") (:keywords "oceanic" "color" "theme") (:authors ("Tengfei Guo")) (:maintainer "Tengfei Guo") (:url . "https://github.com/terry3/oceanic-theme"))]) +(occur-x . [(20130610 1343) nil "Extra functionality for occur" single ((:commit . "352f5fab207d8a1d3dd048073ff127a83e97c82b") (:keywords "occur" "search" "convenience") (:authors ("Juan-Leon Lahoz" . "juanleon1@gmail.com")) (:maintainer "Juan-Leon Lahoz" . "juanleon1@gmail.com"))]) +(occur-context-resize . [(20170904 2309) nil "dynamically resize context around matches in occur-mode" single ((:commit . "cdee5a631ceed9337579d4090e0acf8140747f80") (:keywords "matching") (:authors ("Charles L.G. Comstock" . "dgtized@gmail.com")) (:maintainer "Charles L.G. Comstock" . "dgtized@gmail.com") (:url . "https://github.com/dgtized/occur-context-resize.el"))]) +(occidental-theme . [(20130312 1958) nil "Custom theme for faces based on Adwaita" single ((:commit . "fd2db7256d4f78c43d99c3cddb1c39106d479816") (:authors ("William Stevenson" . "yhvh2000@gmail.com") ("Erik Timan" . "dev@timan.info")) (:maintainer "William Stevenson" . "yhvh2000@gmail.com") (:url . "http://github.com/olcai/occidental-theme"))]) +(obsidian-theme . [(20170719 948) nil "port of the eclipse obsidian theme" single ((:commit . "f45efb2ebe9942466c1db6abbe2d0e6847b785ea") (:authors ("martin haesler")) (:maintainer "martin haesler") (:url . "http://github.com/mswift42/obsidian-theme"))]) +(objed . [(20191107 1952) ((emacs (25)) (cl-lib (0 5))) "Navigate and edit text objects." tar ((:commit . "4a954dc34e258436761ad354930f1d7478e55457") (:keywords "convenience") (:authors ("Clemens Radermacher" . "clemera@posteo.net")) (:maintainer "Clemens Radermacher" . "clemera@posteo.net") (:url . "https://github.com/clemera/objed"))]) +(objc-font-lock . [(20141021 1822) nil "Highlight Objective-C method calls." single ((:commit . "34b457d577f97ca94b8792d025f9a909c7610612") (:keywords "languages" "faces") (:authors ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:url . "https://github.com/Lindydancer/objc-font-lock"))]) +(obfusurl . [(20170809 1524) ((cl-lib (0 5))) "Obfuscate URLs so they aren't spoilers" single ((:commit . "7a5a41905000ce2ec1fd72509a5567e5fd9f47e5") (:keywords "convenience" "web" "text") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:url . "https://github.com/davep/obfusurl.el"))]) +(oberon . [(20120715 909) nil "Major mode for editing Oberon/Oberon-2 program texts" single ((:commit . "fb57d18ce13835a8a69b6bafecdd9193ca9a59a3") (:keywords "oberon" "oberon-2" "languages" "oop") (:authors ("Karl Landström" . "karl@karllandstrom.se")) (:maintainer "Karl Landström" . "karl@karllandstrom.se"))]) +(ob-uart . [(20170521 858) nil "org-babel support for UART communication" single ((:commit . "90daeac90a9e75c20cdcf71234c67b812110c50e") (:keywords "tools" "comm" "org-mode" "uart" "literate programming" "reproducible development") (:authors ("Andreas Müller")) (:maintainer "Andreas Müller") (:url . "https://www.0x7.ch"))]) +(ob-typescript . [(20190910 946) ((emacs (24)) (org (8 0))) "org-babel functions for typescript evaluation" single ((:commit . "0b2766b9d136cd6d81f4c15f1ad4b28542f484b9") (:keywords "literate programming" "reproducible research" "typescript") (:authors ("KURASHIKI Satoru")) (:maintainer "KURASHIKI Satoru") (:url . "https://github.com/lurdan/ob-typescript"))]) +(ob-translate . [(20170720 1919) ((google-translate (0 11)) (org (8))) "Translation of text blocks in org-mode." single ((:commit . "9d9054a51bafd5a29a8135964069b4fa3a80b169") (:keywords "org" "babel" "translate" "translation") (:authors ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainer "Kris Jenkins" . "krisajenkins@gmail.com") (:url . "https://github.com/krisajenkins/ob-translate"))]) +(ob-tmux . [(20190708 1202) ((emacs (25 1)) (seq (2 3)) (s (1 9 0))) "Babel Support for Interactive Terminal" single ((:commit . "3687ed7b874bdfe14617f5d14492887cb0836a85") (:keywords "literate programming" "interactive shell" "tmux") (:authors ("Allard Hendriksen")) (:maintainer "Allard Hendriksen") (:url . "https://github.com/ahendriksen/ob-tmux"))]) +(ob-swift . [(20170921 1325) ((org (8))) "org-babel functions for swift evaluation" single ((:commit . "ed478ddbbe41ce5373efde06b4dd0c3663c9055f") (:keywords "org" "babel" "swift") (:authors ("Feng Zhou" . "zf.pascal@gmail.com")) (:maintainer "Feng Zhou" . "zf.pascal@gmail.com") (:url . "http://github.com/zweifisch/ob-swift"))]) +(ob-svgbob . [(20190911 300) ((emacs (24))) "Babel Functions for svgbob" single ((:commit . "5747f96fb4fdb8711546b3313df9412177eb3c1a") (:keywords "tools" "files") (:authors ("Marcio Giaxa" . "i@mgxm.me")) (:maintainer "Marcio Giaxa" . "i@mgxm.me") (:url . "https://github.com/mgxm/ob-svgbob"))]) +(ob-sql-mode . [(20190421 1539) ((emacs (24 4))) "SQL code blocks evaluated by sql-mode" single ((:commit . "b31a016585324ad91f1742ff6205bcb76f3ece6e") (:keywords "languages" "org" "org-babel" "sql") (:authors (nil . "Nik Clayton nik@google.com")) (:maintainer nil . "Nik Clayton nik@google.com") (:url . "http://github.com/nikclayton/ob-sql-mode"))]) +(ob-sml . [(20130829 1843) ((sml-mode (6 4))) "org-babel functions for template evaluation" single ((:commit . "958165c92b6cff6cada5c85c8ae5887806b8451b") (:keywords "literate programming" "reproducible research") (:authors ("David Nolen")) (:maintainer "David Nolen") (:url . "http://orgmode.org"))]) +(ob-sagemath . [(20191106 828) ((sage-shell-mode (0 0 8)) (s (1 8 0)) (emacs (24))) "org-babel functions for SageMath evaluation" tar ((:commit . "79645bce0c25a650bae61e550434bed836995dce") (:keywords "sagemath" "org-babel") (:authors ("Sho Takemori" . "stakemorii@gmail.com")) (:maintainer "Sho Takemori" . "stakemorii@gmail.com") (:url . "https://github.com/stakemori/ob-sagemath"))]) +(ob-rust . [(20180911 1535) nil "Org-babel functions for Rust" tar ((:commit . "6a82587598cd097e9642be916243c31f1231b24a") (:keywords "rust" "languages" "org" "babel") (:authors ("Mican Zhang")) (:maintainer "Mican Zhang") (:url . "https://github.com/micanzhang/ob-rust"))]) +(ob-restclient . [(20191119 924) ((restclient (0))) "org-babel functions for restclient-mode" single ((:commit . "fa4ac671756c9d4e395bd481405239d06b202bae") (:keywords "literate programming" "reproducible research") (:authors ("Alf LervÃ¥g")) (:maintainer "Alf LervÃ¥g") (:url . "https://github.com/alf/ob-restclient.el"))]) +(ob-prolog . [(20190410 2130) nil "org-babel functions for prolog evaluation." single ((:commit . "331899cfe345c934026c70b78352d320f7d8e239") (:keywords "literate programming" "reproducible research") (:authors ("Bjarte Johansen")) (:maintainer "Bjarte Johansen") (:url . "https://github.com/ljos/ob-prolog"))]) +(ob-nim . [(20170809 1830) ((cl-lib (0 5))) "Babel Functions for nim" single ((:commit . "bf1642cb93f0a898804dc13fd9408d2964403bd2") (:keywords "literate programming" "reproducible research") (:authors ("Lompik")) (:maintainer "Lompik"))]) +(ob-mongo . [(20170720 1919) ((org (8))) "Execute mongodb queries within org-mode blocks." single ((:commit . "371bf19c7c10eab2f86424f8db8ab685997eb5aa") (:keywords "org" "babel" "mongo" "mongodb") (:authors ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainer "Kris Jenkins" . "krisajenkins@gmail.com") (:url . "https://github.com/krisajenkins/ob-mongo"))]) +(ob-ml-marklogic . [(20190312 1314) nil "org-babel functions for MarkLogic evaluation" tar ((:commit . "d5660ad14f29e17cd26ae92eeb585b24030e9570") (:keywords "marklogic" "xquery" "javascript" "sparql") (:authors ("Norman Walsh" . "ndw@nwalsh.com")) (:maintainer "Norman Walsh" . "ndw@nwalsh.com") (:url . "http://github.com/ndw/ob-ml-marklogic"))]) +(ob-mermaid . [(20180522 1659) nil "org-babel support for mermaid evaluation" single ((:commit . "5deaea757b3a5de874d94e40c03116fbc8195308") (:keywords "lisp") (:authors ("Alexei Nunez" . "alexeirnunez@gmail.com")) (:maintainer "Alexei Nunez" . "alexeirnunez@gmail.com") (:url . "https://github.com/arnm/ob-mermaid"))]) +(ob-lfe . [(20170725 1420) ((org (8))) "org-babel functions for lfe evaluation" single ((:commit . "f7780f58e650b4d29dfd834c662b1d354b620a8e") (:keywords "org" "babel" "lfe" "lisp" "erlang") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com") (:url . "http://github.com/zweifisch/ob-lfe"))]) +(ob-kotlin . [(20180823 1321) ((org (8))) "org-babel functions for kotlin evaluation" single ((:commit . "96e420cbd2e9ea8a77043e5dcaebdfc6da17492a") (:keywords "org" "babel" "kotlin") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com") (:url . "http://github.com/zweifisch/ob-kotlin"))]) +(ob-ipython . [(20180224 953) ((s (1 9 0)) (dash (2 10 0)) (dash-functional (1 2 0)) (f (0 17 2)) (emacs (24))) "org-babel functions for IPython evaluation" tar ((:commit . "7147455230841744fb5b95dcbe03320313a77124") (:keywords "literate programming" "reproducible research") (:authors ("Greg Sexton" . "gregsexton@gmail.com")) (:maintainer "Greg Sexton" . "gregsexton@gmail.com") (:url . "http://www.gregsexton.org"))]) +(ob-hy . [(20180702 540) ((emacs (24 4))) "org-babel functions for Hy-lang evaluation" tar ((:commit . "a42ecaf440adc03e279afe43ee5ef6093ddd542a") (:keywords "hy" "literate programming" "reproducible research") (:authors ("Brantou" . "brantou89@gmail.com")) (:maintainer "Brantou" . "brantou89@gmail.com") (:url . "https://github.com/brantou/ob-hy"))]) +(ob-http . [(20180707 1448) ((s (1 9 0)) (cl-lib (0 5))) "http request in org-mode babel" tar ((:commit . "b1428ea2a63bcb510e7382a1bf5fe82b19c104a7") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com") (:url . "http://github.com/zweifisch/ob-http"))]) +(ob-html-chrome . [(20181219 1042) ((emacs (24 4)) (f (0 20 0)) (s (1 7 0))) "HTML code blocks converted to PNG using Chrome" single ((:commit . "7af6e4a24ed0aaf67751bdf752c7ca0ba02bb8d4") (:keywords "languages" "org" "org-babel" "chrome" "html") (:authors (nil . "Nik Clayton nik@ngo.org.uk")) (:maintainer nil . "Nik Clayton nik@ngo.org.uk") (:url . "http://github.com/nikclayton/ob-html-chrome"))]) +(ob-go . [(20190201 2040) nil "org-babel functions for go evaluation" tar ((:commit . "2067ed55f4c1d33a43cb3f6948609d240a8915f5") (:keywords "golang" "go" "literate programming" "reproducible research") (:authors ("K. Adam Christensen")) (:maintainer "K. Adam Christensen") (:url . "http://orgmode.org"))]) +(ob-fsharp . [(20170618 1429) ((emacs (25)) (fsharp-mode (1 9 8))) "Org-Babel F#" single ((:commit . "0b2fdd9bb4f38af8b5cf4914627af52f5b43d9f7") (:keywords "literate programming" "reproducible research") (:authors ("Jürgen Hötzel" . "juergen@archlinux.org")) (:maintainer "Jürgen Hötzel" . "juergen@archlinux.org") (:url . "https://github.com/juergenhoetzel/ob-fsharp"))]) +(ob-elvish . [(20180427 1900) nil "org-babel functions for Elvish shell" single ((:commit . "369181ceae1190bf971c71aebf9fc6133bd98c39") (:keywords "literate programming" "elvish" "shell" "languages" "processes" "tools") (:authors ("Diego Zamboni" . "diego@zzamboni.org")) (:maintainer "Diego Zamboni" . "diego@zzamboni.org") (:url . "https://github.com/zzamboni/ob-elvish"))]) +(ob-elixir . [(20170725 1419) ((org (8))) "org-babel functions for elixir evaluation" single ((:commit . "8990a8178b2f7bd93504a9ab136622aab6e82e32") (:keywords "org" "babel" "elixir") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com") (:url . "http://github.com/zweifisch/ob-elixir"))]) +(ob-diagrams . [(20160407 1237) nil "org-babel functions for diagrams evaluation" single ((:commit . "ed6649616325ca5b2d2109f74aded8bcb8aa5186") (:keywords "literate programming" "reproducible research") (:authors ("Daniel Bergey")) (:maintainer "Daniel Bergey") (:url . "http://orgmode.org"))]) +(ob-dart . [(20170106 1624) nil "org-babel functions for Dart evaluation" single ((:commit . "04d63b922a5469506560ca0c00678e57131e0269") (:keywords "literate programming" "reproducible research" "emacs" "org" "babel" "dart") (:authors ("Milan Zimmermann")) (:maintainer "Milan Zimmermann") (:url . "http://github.org/mzimmerm/ob-dart"))]) +(ob-dao . [(20170816 1558) ((org (8))) "Org Babel Functions for Dao" single ((:commit . "fa92f62a63c684d689f57e790e5dd614c5bba270") (:keywords "literate programming" "reproducible research" "org" "babel" "dao") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/ob-dao"))]) +(ob-cypher . [(20170725 1420) ((s (1 9 0)) (cypher-mode (0 0 6)) (dash (2 10 0)) (dash-functional (1 2 0))) "query neo4j using cypher in org-mode blocks" single ((:commit . "114bdf6db20ee0ade060bb5df379ddee48ff4f26") (:keywords "org" "babel" "cypher" "neo4j") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com") (:url . "http://github.com/zweifisch/ob-cypher"))]) +(ob-crystal . [(20180126 718) ((emacs (24 3))) "org-babel functions for Crystal evaluation" tar ((:commit . "d84c1adee4b269cdba06a97caedb8071561a09af") (:keywords "crystal" "literate programming" "reproducible research") (:authors ("Brantou" . "brantou89@gmail.com")) (:maintainer "Brantou" . "brantou89@gmail.com") (:url . "https://github.com/brantou/ob-crystal"))]) +(ob-coffeescript . [(20180126 719) ((emacs (24 4))) "org-babel functions for coffee-script evaluation, and fully implementation!" single ((:commit . "5a5bb04aea9c2a6eab5b05f90f5c7cb6de7b4261") (:keywords "coffee-script" "literate programming" "reproducible research") (:authors ("Brantou" . "brantou89@gmail.com")) (:maintainer "Brantou" . "brantou89@gmail.com") (:url . "https://github.com/brantou/ob-coffeescript"))]) +(ob-coffee . [(20170725 1424) ((org (8))) "org-babel functions for coffee-script evaluation" tar ((:commit . "7f0b330273e8af7777de87a75fe52a89798e4548") (:keywords "org" "babel" "coffee-script") (:authors ("ZHOU Feng" . "zf.pascal@gmail.com")) (:maintainer "ZHOU Feng" . "zf.pascal@gmail.com") (:url . "http://github.com/zweifisch/ob-coffee"))]) +(ob-clojurescript . [(20180406 1828) ((emacs (24 4)) (org (9 0))) "org-babel functions for ClojureScript evaluation" single ((:commit . "17ee1558aa94c7b0246fd03f684884122806cfe7") (:keywords "literate programming" "reproducible research") (:authors ("Larry Staton Jr.")) (:maintainer "Larry Staton Jr.") (:url . "https://gitlab.com/statonjr/ob-clojurescript"))]) +(ob-cfengine3 . [(20191011 1721) nil "Org Babel functions for CFEngine 3" single ((:commit . "195ba4694a0ec18d3fb89342e8e0988b382a5b1a") (:keywords "tools" "convenience") (:authors ("Nick Anderson" . "nick@cmdln.org")) (:maintainer "Nick Anderson" . "nick@cmdln.org") (:url . "https://github.com/nickanderson/ob-cfengine3"))]) +(ob-browser . [(20170720 1918) ((org (8))) "Render HTML in org-mode blocks." tar ((:commit . "a347d9df1c87b7eb660be8723982c7ad2563631a") (:keywords "org" "babel" "browser" "phantomjs") (:authors ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainer "Kris Jenkins" . "krisajenkins@gmail.com") (:url . "https://github.com/krisajenkins/ob-browser"))]) +(ob-blockdiag . [(20190720 1858) nil "org-babel functions for blockdiag evaluation" single ((:commit . "272fafcf3bc37f9de41b11beb6a33e0dbf0a1909") (:keywords "tools" "convenience") (:authors ("Dmitry Moskowski")) (:maintainer "Dmitry Moskowski") (:url . "https://github.com/corpix/ob-blockdiag.el"))]) +(ob-axiom . [(20190623 2052) ((emacs (24 2)) (axiom-environment (20171021))) "An org-babel backend for the axiom-environment system" single ((:commit . "3e7885d694efef923e7b53827d277c28bfa09320") (:keywords "axiom" "openaxiom" "fricas") (:authors ("Paul Onions")) (:maintainer "Paul Onions"))]) +(ob-async . [(20190916 1537) ((async (1 9)) (org (9 0 1)) (emacs (24 4)) (dash (2 14 1))) "Asynchronous org-babel src block execution" single ((:commit . "80a30b96a007d419ece12c976a81804ede340311") (:keywords "tools") (:authors ("Andrew Stahlman" . "andrewstahlman@gmail.com")) (:maintainer "Andrew Stahlman" . "andrewstahlman@gmail.com") (:url . "https://github.com/astahlman/ob-async"))]) +(ob-applescript . [(20190709 1607) nil "Org-babel functions for AppleScript" single ((:commit . "2b07b77b75bd02f2102f62e6d52ffdd0f921439a") (:keywords "literate programming" "reproducible research" "mac") (:authors ("Stig Brautaset")) (:maintainer "Stig Brautaset") (:url . "http://github.com/stig/ob-applescript.el"))]) +(ob-ammonite . [(20190813 59) ((s (1 12 0)) (ammonite-term-repl (0 1)) (xterm-color (1 7))) "org-babel for scala evaluation in Ammonite." single ((:commit . "39937dff395e70aff76a4224fa49cf2ec6c57cca") (:keywords "tools" "ammnite" "org-mode" "scala" "org-babel") (:authors ("zwild" . "judezhao@outlook.com")) (:maintainer "zwild" . "judezhao@outlook.com") (:url . "https://github.com/zwild/ob-ammonite"))]) +(oauth . [(20130128 151) nil "Oauth library." tar ((:commit . "ee4744ad76a1560281b0c4944575a3bd598c6458") (:keywords "comm") (:authors ("Peter Sanford ")) (:maintainer "Peter Sanford "))]) +(o-blog . [(20151202 2339) nil "Standalone orgmode blog exporter" tar ((:commit . "e466c59478feddc8126c43c1b98550474af484c0") (:keywords "emacs") (:authors ("Sébastien Gross ")) (:maintainer "Sébastien Gross "))]) +(nz-holidays . [(20190415 703) nil "New Zealand public holidays for calendar." single ((:commit . "afc875cf40789fa45a4a811685b0a7c4f239392f") (:keywords "calendar") (:authors ("Sod Oscarfono" . "sod@oscarfono.com")) (:maintainer "Sod Oscarfono" . "sod@oscarfono.com") (:url . "https://github.com/techquila/nz-holidays"))]) +(nyx-theme . [(20170910 1307) ((emacs (24))) "Dark theme" single ((:commit . "afe2b8c3b5421b4c292d182dcf77079b278e93d8") (:keywords "themes" "dark-theme") (:authors ("Guido Schmidt")) (:maintainer "Guido Schmidt" . "guido.schmidt.2912@gmail.com") (:url . "https://github.com/GuidoSchmidt/emacs-nyx-theme"))]) +(nyan-mode . [(20170423 740) nil "Nyan Cat shows position in current buffer in mode-line." tar ((:commit . "a85ac925367ddc542827182a2d9f0133b421c41b") (:keywords "nyan" "cat" "lulz" "scrolling" "pop tart cat" "build something amazing") (:authors ("Jacek \"TeMPOraL\" Zlydach" . "temporal.pl@gmail.com")) (:maintainer "Jacek \"TeMPOraL\" Zlydach" . "temporal.pl@gmail.com") (:url . "https://github.com/TeMPOraL/nyan-mode/"))]) +(nvm . [(20190912 626) ((s (1 8 0)) (dash (2 4 0)) (f (0 14 0)) (dash-functional (2 4 0))) "Manage Node versions within Emacs" single ((:commit . "e93e5216e311c665c593ac68c5456d624120ea42") (:keywords "node" "nvm") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:url . "http://github.com/rejeep/nvm.el"))]) +(nv-delete-back . [(20170224 1249) ((emacs (24))) "backward delete like modern text editors" single ((:commit . "b17cb826f14c18c2875d112574edb5e4f46f5296") (:keywords "lisp") (:authors ("Nicolas Vaughan ")) (:maintainer "Nicolas Vaughan "))]) +(nummm-mode . [(20131117 1014) nil "Display the number of minor modes instead of their names" single ((:commit . "81951e12032274543c5f7a585b29bd93961e94e4") (:authors ("Andreu Gil" . "agpchil@gmail.com")) (:maintainer "Andreu Gil" . "agpchil@gmail.com") (:url . "http://github.com/agpchil/nummm-mode"))]) +(numbers . [(20170802 1134) ((emacs (24))) "Display information and trivia about numbers" single ((:commit . "dd02508b788a13b7d4dbcc4923fa23134b783ab3") (:keywords "games" "trivia" "maths" "numbers") (:authors ("Dave Pearson" . "davep@davep.org")) (:maintainer "Dave Pearson" . "davep@davep.org") (:url . "https://github.com/davep/numbers.el"))]) +(number-lock . [(20160830 200) nil "Enter symbols on your number keys without pressing shift" single ((:commit . "74417b1238953bf485961a0dd7d20f5c36ae25ea") (:keywords "convenience") (:authors ("Liu233w" . "wwwlsmcom@outlook.com")) (:maintainer "Liu233w" . "wwwlsmcom@outlook.com") (:url . "https://github.com/Liu233w/number-lock.el"))]) +(number . [(20170901 1312) nil "Working with numbers at point." single ((:commit . "bbc278d34dbcca83e70e3be855ec98b23debfb99"))]) +(nubox . [(20170619 910) nil "Nubox color theme (dark, light and tty versions)" tar ((:commit . "1ccb8035ae42727ba6bdd5c1106fbceddeeed370") (:keywords "faces") (:authors ("Martijn Terpstra" . "bigmartijn@gmail.com")) (:maintainer "Martijn Terpstra" . "bigmartijn@gmail.com"))]) +(nu-mode . [(20190404 2032) ((undo-tree (0 6 5)) (ace-window (0)) (lv (0)) (avy (0)) (which-key (0)) (transpose-frame (0))) "Modern Emacs Prompts Based Keybinding." tar ((:commit . "d5fb4d26d1b0bb383ea2827cc5af5dfb2a269d2b"))]) +(nswbuff . [(20191013 2037) ((emacs (25 1))) "Quick switching between buffers." single ((:commit . "19c04c1042fa1ff45bf923e9e50271c0bb57268d") (:keywords "extensions" "convenience") (:authors ("David Ponce" . "david@dponce.com") ("Kahlil (Kal) HODGSON" . "dorge@tpg.com.au") ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm") (:url . "https://github.com/joostkremers/nswbuff"))]) +(nsis-mode . [(20190615 1827) nil "NSIS-mode" tar ((:commit . "0a2e6ece2fe682dced4d31688b38bb472a877cdf") (:keywords "nsis") (:authors ("Matthew L. Fidler")) (:maintainer "Matthew L. Fidler") (:url . "http://github.com/mlf176f2/nsis-mode"))]) +(ns-auto-titlebar . [(20181022 2154) ((emacs (24 4))) "Set the MacOS transparent titlebar to match theme" single ((:commit . "1efc30d38509647b417f05587fd7003457719256") (:keywords "frames") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/ns-auto-titlebar"))]) +(nrepl-sync . [(20140807 1554) ((cider (0 6))) "connect to nrepl port and eval .sync.clj." single ((:commit . "bab53a2361526d63a24cda176d07a1247bf5b399") (:authors ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainer "Phillip Lord" . "phillip.lord@newcastle.ac.uk") (:url . "https://github.com/phillord/lein-sync"))]) +(nrepl-eval-sexp-fu . [(20140311 1041) ((highlight (0 0 0)) (smartparens (0 0 0)) (thingatpt (0 0 0))) "Tiny functionality enhancements for evaluating sexps." single ((:commit . "3a24b7d4bca13e87c987a4ddd212da914ff59191") (:keywords "lisp" "highlight" "convenience") (:authors ("Takeshi Banse" . "takebi@laafc.net")) (:maintainer "Takeshi Banse" . "takebi@laafc.net"))]) +(npm-mode . [(20190616 2025) ((emacs (24 1))) "minor mode for working with npm projects" single ((:commit . "3ee7c0bad5b7a041d4739ef3aaa06a3dc764e5eb") (:keywords "convenience" "project" "javascript" "node" "npm") (:authors ("Allen Gooch" . "allen.gooch@gmail.com")) (:maintainer "Allen Gooch" . "allen.gooch@gmail.com") (:url . "https://github.com/mojochao/npm-mode"))]) +(noxml-fold . [(20170823 1357) nil "Fold away XML things." single ((:commit . "46c7f6a008672213238a9f8d7a416ce80916aa62") (:keywords "xml" "folding") (:authors ("Patrick McAllister" . "pma@rdorte.org")) (:maintainer "Patrick McAllister" . "pma@rdorte.org") (:url . "https://github.com/paddymcall/noxml-fold"))]) +(nova-theme . [(20191105 1829) ((emacs (24 3))) "A dark, pastel color theme" single ((:commit . "fc4ce3f420a7456a9ca4166d8d3038c10b61a53c") (:keywords "theme" "dark" "nova" "pastel" "faces") (:authors ("Muir Manders" . "muir+emacs@mnd.rs")) (:maintainer "Muir Manders" . "muir+emacs@mnd.rs") (:url . "https://github.com/muirmanders/emacs-nova-theme"))]) +(nov . [(20190821 1920) ((dash (2 12 0)) (esxml (0 3 3)) (emacs (24 4))) "Featureful EPUB reader mode" single ((:commit . "ecbdecc927a3b3f7e0927d225e6e6464c244c2ae") (:keywords "hypermedia" "multimedia" "epub") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") (:url . "https://github.com/wasamasa/nov.el"))]) +(notmuch-labeler . [(20131230 1719) ((notmuch (0))) "Improve notmuch way of displaying labels" tar ((:commit . "d65d1129555d368243df4770ecc1e7ccb88efc58") (:keywords "emacs" "package" "elisp" "notmuch" "emails") (:authors ("Damien Cassou" . "damien.cassou@gmail.com")) (:maintainer "Damien Cassou" . "damien.cassou@gmail.com") (:url . "https://github.com/DamienCassou/notmuch-labeler"))]) +(notmuch . [(20190525 1602) nil "run notmuch within emacs" tar ((:commit . "bb843f63fc0469c2660d5d0a7b49602fcfb2c879") (:url . "https://notmuchmail.org/"))]) +(nose . [(20140520 1648) nil "Easy Python test running in Emacs" single ((:commit . "194d7789bf797f31ea0adc45f08beb66ae9ea98e") (:keywords "nose" "python" "testing"))]) +(northcode-theme . [(20180423 1649) ((emacs (24))) "A dark theme focused on blue and orange colors." single ((:commit . "4d3750461ba25ec45321318b5f1af4e8fdf16147") (:authors ("Andreas Larsen" . "andreas@northcode.no")) (:maintainer "Andreas Larsen" . "andreas@northcode.no") (:url . "https://github.com/Northcode/northcode-theme.el"))]) +(nordless-theme . [(20190802 725) ((colorless-themes (0 1))) "A colorless theme inspired by nord" single ((:commit . "12678144d17edf36d34e6bcdc5435593e191d96d") (:keywords "theme") (:authors ("Thomas Letan" . "contact@thomasletan.fr")) (:maintainer "Thomas Letan" . "contact@thomasletan.fr") (:url . "https://git.sr.ht/~lthms/colorles-themes.el"))]) +(nord-theme . [(20190616 1757) ((emacs (24))) "An arctic, north-bluish clean and elegant theme" single ((:commit . "52756cdc909b29691eef228897b3de561cd99f43") (:authors ("Arctic Ice Studio" . "development@arcticicestudio.com")) (:maintainer "Arctic Ice Studio" . "development@arcticicestudio.com") (:url . "https://github.com/arcticicestudio/nord-emacs"))]) +(nofrils-acme-theme . [(20180620 1248) ((emacs (24))) "Port of \"No Frils Acme\" Vim theme." tar ((:commit . "98ad7bfaff1d85b33dc162645670285b067c6f92") (:authors ("Eric Sessoms" . "esessoms@protonmail.com")) (:maintainer "Eric Sessoms" . "esessoms@protonmail.com") (:url . "https://gitlab.com/esessoms/nofrils-theme"))]) +(noflet . [(20141102 1454) nil "locally override functions" single ((:commit . "7ae84dc3257637af7334101456dafe1759c6b68a") (:keywords "lisp") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:url . "https://github.com/nicferrier/emacs-noflet"))]) +(nodenv . [(20181023 1543) ((emacs (24 4))) "Integration with nodenv" tar ((:commit . "832fb0cbac4513edde7ebd6d1ab971c54313be36") (:keywords "node" "environment" "tools") (:authors ("Gong Qijian" . "gongqijian@gmail.com")) (:maintainer "Gong Qijian" . "gongqijian@gmail.com") (:url . "https://github.com/twlz0ne/nodenv.el"))]) +(nodemcu-mode . [(20180501 2225) ((emacs (25))) "Minor mode for NodeMCU" single ((:commit . "8effd9f3df40b6b92a2f05e4d54750b624afc4a7") (:keywords "tools") (:authors ("Andreas Müller" . "code@0x7.ch")) (:maintainer "Andreas Müller" . "code@0x7.ch") (:url . "https://github.com/andrmuel/nodemcu-mode"))]) +(nodejs-repl . [(20190616 1753) nil "Run Node.js REPL" single ((:commit . "d43b8b276a90ccf980150a7d6fbb1f4d2a7cbe20") (:authors ("Takeshi Arabiki")) (:maintainer "Takeshi Arabiki"))]) +(node-resolver . [(20140930 1723) ((cl-lib (0 5))) "hook to install node modules in background" single ((:commit . "ef9d0486907a746a80b02ffc6208a09c168a9f7c") (:keywords "convenience" "nodejs" "javascript" "npm") (:authors ("Dave Justice")) (:maintainer "Dave Justice") (:url . "https://github.com/meandavejustice/node-resolver.el"))]) +(noctilux-theme . [(20161113 1442) ((emacs (24))) "Dark theme inspired by LightTable" single ((:commit . "a3265a1be7f4d73f44acce6d968ca6f7add1f2ca") (:authors ("Simon Manning" . "simon@ecksdee.org")) (:maintainer "Simon Manning" . "simon@ecksdee.org") (:url . "https://github.com/sjrmanning/noctilux-theme"))]) +(nocomments-mode . [(20170213 2037) nil "Minor mode that makes comments invisible." single ((:commit . "5a41a20cc44dfe4a9ea584354ed6dbc15dd92f46") (:authors ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:url . "https://github.com/Lindydancer/nocomments-mode"))]) +(noccur . [(20191015 719) nil "Run multi-occur on project/dired files" single ((:commit . "fa91647a305e89561d3dbe53da002fff49abe0bb") (:keywords "convenience") (:authors ("Nicolas Petton" . "petton.nicolas@gmail.com")) (:maintainer "Nicolas Petton" . "petton.nicolas@gmail.com"))]) +(noaa . [(20190202 1634) ((request (0 2 0)) (cl-lib (0 5)) (emacs (24)) (dash (2 14 1))) "Get NOAA weather data" single ((:commit . "532eb14328027ee29e124768feec23a8ef7ee798") (:authors ("David Thompson")) (:maintainer "David Thompson") (:url . "https://github.com/thomp/noaa"))]) +(no-spam . [(20190724 1854) ((emacs (25 1))) "Add repeat delays to commands" single ((:commit . "860860e4a0d59bd15c8e092dc42f5f7f769a428e") (:keywords "keyboard" "tools") (:authors ("Daniel Phan" . "daniel.phan36@gmail.com")) (:maintainer "Daniel Phan" . "daniel.phan36@gmail.com") (:url . "https://github.com/mamapanda/no-spam"))]) +(no-littering . [(20191114 913) ((cl-lib (0 5))) "help keeping ~/.emacs.d clean" single ((:commit . "64de979ffba8af5541fd072b9227ec6b4c3c940f") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/emacscollective/no-littering"))]) +(no-emoji . [(20180515 1837) ((emacs (24))) "Show :emoji-name: instead of emoji characters" single ((:commit . "ebceeab50dbfe4d60235180a57633745dbc18c77") (:keywords "extensions") (:authors ("Peter" . "craven@gmx.net")) (:maintainer "Peter" . "craven@gmx.net") (:url . "https://github.com/ecraven/no-emoji"))]) +(nnreddit . [(20191115 2152) ((emacs (25)) (virtualenvwrapper (20190223)) (json-rpc (20180104)) (dash (20190401)) (anaphora (20180618)) (request (20190819))) "Gnus Backend For Reddit" tar ((:commit . "40680ee7f2839c776d3c63376c32ada9619e713e") (:url . "https://github.com/dickmao/nnreddit"))]) +(nnir-est . [(20180710 2103) nil "Gnus nnir interface for HyperEstraier" single ((:commit . "6d0d5c8e33f4e4ccbc22350324c0990d2676fb5a") (:keywords "mail") (:authors ("KAWABATA, Taichi ")) (:maintainer "KAWABATA, Taichi ") (:url . "https://github.com/kawabata/nnir-est"))]) +(nnhackernews . [(20191111 1736) ((emacs (25 2)) (request (20190819)) (dash (20190401)) (dash-functional (20180107)) (anaphora (20180618))) "Gnus backend for Hacker News" single ((:commit . "a29e5c8acae23302ce2af48eedbaf921d9e4e813") (:keywords "news") (:url . "https://github.com/dickmao/nnhackernews"))]) +(nm . [(20151110 1910) ((notmuch (0 21)) (peg (0 6)) (company (0)) (emacs (24 3))) "NEVERMORE: an email interface for Notmuch" tar ((:commit . "5a3f29174b3a4b2b2e7a700a862f3b16a942687e") (:authors ("Trevor Jim")) (:maintainer "Trevor Jim") (:url . "https://github.com/tjim/nevermore"))]) +(nlinum-relative . [(20160526 708) ((emacs (24 4)) (nlinum (1 5))) "Relative line number with nlinum" single ((:commit . "5b9950c97ba79a6f0683e38b13da23f39e01031c") (:keywords "convenience") (:authors ("codefalling" . "code.falling@gmail.com")) (:maintainer "codefalling" . "code.falling@gmail.com"))]) +(nlinum-hl . [(20190301 2117) ((emacs (24 4)) (nlinum (1 7)) (cl-lib (0 5))) "heal nlinum's line numbers" single ((:commit . "dc6b365a58e06c7d637a76a31c71a40b20da8b56") (:keywords "nlinum" "highlight" "current" "line" "faces") (:authors ("Henrik Lissner ")) (:maintainer "Henrik Lissner" . "henrik@lissner.net") (:url . "https://github.com/hlissner/emacs-nlinum-hl"))]) +(nixos-options . [(20160209 1841) ((emacs (24))) "Interface for browsing and completing NixOS options." single ((:commit . "45c8d90748304c90e1503c9fa8db0443f3d4bd89") (:keywords "unix") (:authors ("Diego Berrocal" . "cestdiego@gmail.com") ("Travis B. Hartwell" . "nafai@travishartwell.net")) (:maintainer "Diego Berrocal" . "cestdiego@gmail.com") (:url . "http://www.github.com/travisbhartwell/nix-emacs/"))]) +(nix-update . [(20190124 1935) ((emacs (25))) "Update \"fetch\" blocks in .nix expressions" single ((:commit . "fc6c39c2da3fcfa62f4796816c084a6389c8b6e7") (:keywords "nix") (:authors ("John Wiegley" . "johnw@newartisans.com")) (:maintainer "John Wiegley" . "johnw@newartisans.com") (:url . "https://github.com/jwiegley/nix-update-el"))]) +(nix-sandbox . [(20171004 1706) ((dash (2 12 1)) (s (1 10 0))) "Utility functions to work with nix-shell sandboxes" single ((:commit . "45c8d90748304c90e1503c9fa8db0443f3d4bd89") (:authors ("Sven Keidel" . "svenkeidel@gmail.com")) (:maintainer "Sven Keidel" . "svenkeidel@gmail.com") (:url . "https://github.com/travisbhartwell/nix-emacs"))]) +(nix-mode . [(20190904 1440) ((emacs (25))) "Major mode for editing .nix files" tar ((:commit . "5b5961780f3b1c1b62453d2087f775298980f10d") (:keywords "nix" "languages" "tools" "unix") (:maintainer "Matthew Bauer" . "mjbauer95@gmail.com") (:url . "https://github.com/NixOS/nix-mode"))]) +(nix-haskell-mode . [(20190615 135) ((emacs (25)) (haskell-mode (16 0)) (nix-mode (1 3 0))) "haskell-mode integrations for Nix" single ((:commit . "68efbcbf949a706ecca6409506968ed2ef928a20") (:keywords "nix" "haskell" "languages" "processes") (:authors ("Matthew Bauer" . "mjbauer95@gmail.com")) (:maintainer "Matthew Bauer" . "mjbauer95@gmail.com") (:url . "https://github.com/matthewbauer/nix-haskell"))]) +(nix-buffer . [(20180212 1518) ((f (0 17 3)) (emacs (24 4))) "Set up buffer environments with nix" single ((:commit . "db57cda36e7477bdc7ef5a136357b971b1d4d099") (:authors ("Shea Levy")) (:maintainer "Shea Levy") (:url . "https://github.com/shlevy/nix-buffer/tree/master/"))]) +(ninja-mode . [(20181024 1439) ((emacs (24))) "Major mode for editing .ninja files" single ((:commit . "ed154b90522eaa47f255f416e882de9f9771aadf"))]) +(nimbus-theme . [(20191106 1807) ((emacs (24))) "An awesome dark theme." single ((:commit . "938197ed9bbfc549082492e7fa90d0a5423a7e54") (:keywords "faces") (:authors ("Marcin Swieczkowski" . "marcin.swieczkowski@gmail.com") ("See README.md for full list of contributors.")) (:maintainer "Marcin Swieczkowski" . "marcin.swieczkowski@gmail.com") (:url . "https://github.com/m-cat/nimbus-theme"))]) +(nim-mode . [(20190823 1009) ((emacs (24 4)) (epc (0 1 1)) (let-alist (1 0 1)) (commenter (0 5 1)) (flycheck-nimsuggest (0 8 1))) "A major mode for the Nim programming language" tar ((:commit . "3fb6643ff684c5b5f3812cf66ea370a9c0e9559e") (:keywords "nim" "languages") (:authors ("Simon Hafner")) (:maintainer "Simon Hafner" . "hafnersimon@gmail.com"))]) +(nikola . [(20170703 2021) ((async (1 5)) (emacs (24 3))) "Simple wrapper for nikola" single ((:commit . "964715ac30943c9d6976999cad208dc60d09def0") (:keywords ":" "nikola") (:authors (": drymer ")) (:maintainer ": drymer ") (:url . ": https://git.daemons.it/drymer/nikola.el"))]) +(night-owl-theme . [(20190825 1559) ((emacs (24))) "A color theme for the night owls out there" single ((:commit . "44c1b98f7c0d8b7ad31d6e1b3382bcf0294e03f2") (:authors ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainer "Aaron Jensen" . "aaronjensen@gmail.com") (:url . "http://github.com/aaronjensen/night-owl-theme"))]) +(niconama . [(20170910 1501) ((emacs (24)) (request (20170131 1747)) (cl-lib (0 5))) "Tools for Niconico Live Broadcast" single ((:commit . "96e7553e50e6bf7b58aac50f52c9b0b8edb41c56") (:keywords "comm") (:url . "https://github.com/NOBUTOKA/niconama.el"))]) +(niceify-info . [(20160416 1244) nil "improve usability of Info pages" single ((:commit . "38df5062bc3b99d1074cab3e788b5ed66732111c"))]) +(nginx-mode . [(20170612 437) nil "major mode for editing nginx config files" single ((:commit . "a2bab83c2eb233d57d76b236e7c141c2ccc97005") (:keywords "languages" "nginx") (:authors ("Andrew J Cosgriff" . "andrew@cosgriff.name")) (:maintainer "Andrew J Cosgriff" . "andrew@cosgriff.name"))]) +(ng2-mode . [(20190524 1912) ((typescript-mode (0 1))) "Major modes for editing Angular 2" tar ((:commit . "52fdfe27247548b46f6171eebaf887a90dd67463") (:keywords "typescript" "angular" "angular2" "template") (:authors ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainer "Adam Niederer" . "adam.niederer@gmail.com") (:url . "http://github.com/AdamNiederer/ng2-mode"))]) +(nexus . [(20140114 1305) nil "REST Client for Nexus Maven Repository servers" tar ((:commit . "c46f499951b90839aa8683779fe43d8f01672a60") (:keywords "comm") (:authors ("Juergen Hoetzel" . "juergen@archlinux.org")) (:maintainer "Juergen Hoetzel" . "juergen@archlinux.org"))]) +(newlisp-mode . [(20160226 1545) nil "newLISP editing mode for Emacs" single ((:commit . "ac23be40c81a360988ab803d365f1510733f6db4") (:keywords "language" "lisp" "newlisp") (:authors ("KOBAYASHI Shigeru ")) (:maintainer "KOBAYASHI Shigeru ") (:url . "https://github.com/kosh04/newlisp-mode"))]) +(never-comment . [(20140104 2207) nil "Never blocks are comment" single ((:commit . "74ded8f1e7f23240f5f6032d0451fb0a51733bc4") (:authors ("Scott Frazer")) (:maintainer "Toon Claes") (:url . "http://stackoverflow.com/a/4554658/89376"))]) +(network-watch . [(20171123 1146) ((emacs (24 3))) "Support for intermittent network connectivity" single ((:commit . "958dd0d419e4f9402648a86b754091ba346e01b8") (:keywords "unix" "tools" "hardware" "lisp") (:authors ("Juan Amiguet Vercher" . "jamiguet@gmail.com")) (:maintainer "Juan Amiguet Vercher" . "jamiguet@gmail.com") (:url . "https://github.com/jamiguet/network-watch"))]) +(netrunner . [(20160910 2332) ((popup (0 5 3)) (company (0 9 0)) (helm (1 9 5))) "Create Android: Netrunner decklists using Company, Helm and org-mode" single ((:commit . "c64672992175c8c1073c0f56c2e471839db71a0f") (:keywords "games") (:authors ("Erik Sjöstrand")) (:maintainer "Erik Sjöstrand") (:url . "http://github.com/Kungsgeten/netrunner"))]) +(netherlands-holidays . [(20150202 1617) nil "Netherlands holidays for Emacs calendar." single ((:commit . "26236178cdd650df9958bf5a086e184096559f00") (:keywords "calendar") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/netherlands-holidays"))]) +(netease-music . [(20190708 215) ((names (0 5)) (emacs (25))) "listen netease music" single ((:commit . "39a7d7a15f63435d9efaf469ea7c971069c07acb") (:keywords "multimedia" "chinese" "music") (:authors ("hiro方圆" . "wfy11235813@gmail.com")) (:maintainer "hiro方圆" . "wfy11235813@gmail.com") (:url . "https://github.com/nicehiro/netease-music"))]) +(nerdtab . [(20180811 339) ((emacs (24 5))) "Keyboard-oriented tabs" single ((:commit . "74ccc14d7956712e477a34b4a733284e8b3832a6") (:keywords "convenience") (:authors ("Yuan Fu" . "casouri@gmail.com")) (:maintainer "Yuan Fu" . "casouri@gmail.com") (:url . "https://github.com/casouri/nerdtab"))]) +(neotree . [(20181121 2026) ((cl-lib (0 5))) "A tree plugin like NerdTree for Vim" tar ((:commit . "c2420a4b344a9337760981c451783f0ff9df8bbf") (:authors ("jaypei" . "jaypei97159@gmail.com")) (:maintainer "jaypei" . "jaypei97159@gmail.com") (:url . "https://github.com/jaypei/emacs-neotree"))]) +(neon-mode . [(20180406 1156) nil "Simple major mode for editing neon files" single ((:commit . "99d15e46beaf1e7d71e39a00cce810df1f33229d") (:keywords "conf") (:authors ("Matúš Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matúš Goljer" . "matus.goljer@gmail.com"))]) +(nemerle . [(20161029 2023) nil "major mode for editing nemerle programs" single ((:commit . "f7ebf8f2cff477c3d9b8abdb6470e7b8d80f51ce") (:keywords "nemerle" "mode" "languages") (:authors ("Jacek Sliwerski (rzyjontko)" . "rzyj@o2.pl")) (:maintainer "Jacek Sliwerski (rzyjontko)" . "rzyj@o2.pl"))]) +(neato-graph-bar . [(20181130 1649) ((emacs (24 3))) "Neat-o graph bars CPU/memory etc." single ((:commit . "a7ae35afd67911e8924f36e646bce0d3e3c1bbe6") (:authors ("Robert Cochran" . "robert-git@cochranmail.com")) (:maintainer "Robert Cochran" . "robert-git@cochranmail.com") (:url . "https://gitlab.com/RobertCochran/neato-graph-bar"))]) +(nclip . [(20130617 2015) nil "Network (HTTP) Clipboard" tar ((:commit . "af88e38b1f04be02bf2e57affc662dbd0f828e67") (:keywords "nclip" "clipboard" "network") (:authors ("Marian Schubert" . "marian.schubert@gmail.com")) (:maintainer "Marian Schubert" . "marian.schubert@gmail.com") (:url . "http://www.github.com/maio/nclip.el"))]) +(ncl-mode . [(20180129 703) ((emacs (24))) "Major Mode for editing NCL scripts and other goodies" tar ((:commit . "602292712a9e6b7e7c25155978999e77d06b7338"))]) +(naysayer-theme . [(20190704 201) ((emacs (24))) "The naysayer color theme" single ((:commit . "8eed91b268403cb9043e0c9d9aaf324db1ab7d7e") (:authors ("Nick Aversano" . "nickav@users.noreply.github.com")) (:maintainer "Nick Aversano" . "nickav@users.noreply.github.com") (:url . "https://github.com/nickav/naysayer-theme.el"))]) +(navorski . [(20141203 1824) ((s (1 9 0)) (dash (1 5 0)) (multi-term (0 8 14))) "Helping you live in the terminal, like Viktor did." single ((:commit . "698c1c62da70164aebe9a7a5d034778fbc30ea5b") (:keywords "terminal") (:authors ("Roman Gonzalez , Tavis Rudd" . "tavis@birdseye-sw.com")) (:maintainer "Roman Gonzalez" . "romanandreg@gmail.com"))]) +(navigel . [(20190828 449) ((emacs (25 1)) (tablist (1 0))) "Facilitate the creation of tabulated-list based UIs" single ((:commit . "6f53ec5c5c070b524624ef23ea6a096f9d7c8af7") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://gitlab.petton.fr/DamienCassou/navigel"))]) +(navi2ch . [(20150330 216) nil "Navigator for 2ch for Emacsen" tar ((:commit . "f39d93c32acd5b9c3a7fb1a9fe14c5e1c4b5288e") (:keywords "network" "2ch") (:authors ("Taiki SUGAWARA" . "taiki@users.sourceforge.net")) (:maintainer "Taiki SUGAWARA" . "taiki@users.sourceforge.net"))]) +(navi-mode . [(20190720 2003) ((outshine (2 0)) (outorg (2 0))) "major-mode for easy buffer-navigation" single ((:commit . "7eb7cf0c4a6ee537ec462f5ec90f00d12e3ca9c2") (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "https://github.com/alphapapa/navi"))]) +(nav-flash . [(20140508 2041) nil "Briefly highlight the current line" single ((:commit . "53f5bc59e3f32c1192d15637d3979732dacb2c35") (:keywords "extensions" "navigation" "interface") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:url . "http://github.com/rolandwalker/nav-flash"))]) +(nav . [(20120507 707) nil "Emacs mode for filesystem navigation" tar ((:commit . "c5eb234c063f435dbdcd1f8bdc46cfc68c973ebe") (:authors ("Issac Trotts" . "issactrotts@google.com")) (:maintainer "Issac Trotts" . "issactrotts@google.com"))]) +(nasm-mode . [(20190410 342) ((emacs (24 3))) "NASM x86 assembly major mode" single ((:commit . "65ca6546fc395711fac5b3b4299e76c2303d43a8") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/nasm-mode"))]) +(nash-mode . [(20160830 1212) nil "Nash major mode" single ((:commit . "2cd96535eb7d669a94306183e95ee37333872c1a") (:keywords "nash" "languages") (:authors ("Tiago Natel de Moura")) (:maintainer "Tiago Natel de Moura") (:url . "https://github.com/tiago4orion/nash-mode.el"))]) +(narrowed-page-navigation . [(20150109 519) ((emacs (24)) (cl-lib (0 5))) "A minor mode for showing one page at a time" single ((:commit . "b215adbac4873f56fbab65772062f0f5be8058a1") (:keywords "outlines") (:authors ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Raymond Christiansen" . "david@davidchristiansen.dk"))]) +(narrow-reindent . [(20150722 1906) ((emacs (24 4))) "Defines a minor mode to left-align narrowed regions." single ((:commit . "87466aac4dbeb79597124dd077bf5c704872fd3d") (:authors ("J David Smith" . "emallson@atlanis.net")) (:maintainer "J David Smith" . "emallson@atlanis.net") (:url . "https://github.com/emallson/narrow-reindent.el"))]) +(naquadah-theme . [(20190225 1427) nil "A theme based on Tango color set" single ((:commit . "430c3b7bd51922cb616b3f60301f4e2604816ed8"))]) +(nanowrimo . [(20151105 228) nil "Track progress for nanowrimo" single ((:commit . "b1d41458926ccb39cefbb1bb74aefe4f02fd349f") (:authors ("Ivan Andrus ")) (:maintainer "Ivan Andrus ") (:url . "https://bitbucket.org/gvol/nanowrimo-mode"))]) +(nand2tetris-assembler . [(20171201 1813) ((nand2tetris (1 1 0))) "Assembler For the Nand2tetris Course" single ((:commit . "33acee34d24b1c6a87db833b7d23449cf858f64f") (:keywords "nand2tetris-assembler" "hdl") (:authors ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainer "Diego Berrocal" . "cestdiego@gmail.com") (:url . "http://www.github.com/CestDiego/nand2tetris-assembler.el/"))]) +(nand2tetris . [(20171201 1813) ((emacs (24))) "Major mode for HDL files in the nand2tetris course" tar ((:commit . "33acee34d24b1c6a87db833b7d23449cf858f64f") (:keywords "nand2tetris" "hdl") (:authors ("Diego Berrocal" . "cestdiego@gmail.com")) (:maintainer "Diego Berrocal" . "cestdiego@gmail.com") (:url . "http://www.github.com/CestDiego/nand2tetris.el/"))]) +(namespaces . [(20130326 2250) nil "An implementation of namespaces for Elisp, with an emphasis on immutabilty." single ((:commit . "3d02525d9b9a5ae6e7be3adefd880121436e6270") (:authors ("Chris Barrett")) (:maintainer "Chris Barrett") (:url . "https://github.com/chrisbarrett/elisp-namespaces"))]) +(names . [(20180321 1155) ((emacs (24 1)) (cl-lib (0 5))) "Namespaces for emacs-lisp. Avoid name clobbering without hiding symbols." tar ((:commit . "d8baba5360e5253938a25d3e005455b6d2d86971") (:keywords "extensions" "lisp") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") (:url . "https://github.com/Malabarba/names"))]) +(nameless . [(20190429 1202) ((emacs (24 4))) "Hide package namespace in your emacs-lisp code" single ((:commit . "a3a1ce3ec0c5724bcbfe553d831bd4f6b3fe863a") (:keywords "convenience" "lisp") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") (:url . "https://github.com/Malabarba/nameless"))]) +(nameframe-projectile . [(20160928 403) ((nameframe (0 4 1 -2)) (projectile (0 13 0))) "Nameframe integration with Projectile" single ((:commit . "aafb8c5c5fbe0510e2f5d5b6b6b5dd0b73abe5d8") (:authors ("John Del Rosario" . "john2x@gmail.com")) (:maintainer "John Del Rosario" . "john2x@gmail.com") (:url . "https://github.com/john2x/nameframe"))]) +(nameframe-perspective . [(20170406 119) ((nameframe (0 4 1 -2)) (perspective (1 12))) "Nameframe integration with perspective.el" single ((:commit . "aafb8c5c5fbe0510e2f5d5b6b6b5dd0b73abe5d8") (:authors ("John Del Rosario" . "john2x@gmail.com")) (:maintainer "John Del Rosario" . "john2x@gmail.com") (:url . "https://github.com/john2x/nameframe"))]) +(nameframe . [(20171107 56) nil "Manage frames by name." single ((:commit . "aafb8c5c5fbe0510e2f5d5b6b6b5dd0b73abe5d8") (:authors ("John Del Rosario" . "john2x@gmail.com")) (:maintainer "John Del Rosario" . "john2x@gmail.com") (:url . "https://github.com/john2x/nameframe"))]) +(named-timer . [(20181120 2224) ((emacs (24 4))) "Simplified timer management for Emacs Lisp" single ((:commit . "670b81e3eddef2e7353a4eedc9553a85306445db") (:keywords "tools") (:authors ("Ryan C. Thompson")) (:maintainer "Ryan C. Thompson") (:url . "https://github.com/DarwinAwardWinner/emacs-named-timer"))]) +(name-this-color . [(20151014 2030) ((emacs (24)) (cl-lib (0 5)) (dash (2 11 0))) "Match RGB codes to names easily and precisely" single ((:commit . "e37cd1291d5d68d4c8d6386eab9cb9d94fd3bcfa") (:keywords "lisp" "color" "hex" "rgb" "shade" "name") (:url . "https://github.com/knl/name-this-color.el"))]) +(n4js . [(20150714 231) ((emacs (24)) (cypher-mode (0))) "Neo4j Shell" single ((:commit . "3991ed8975151d5e8d568e952362df810f7ffab7") (:keywords "neo4j" "shell" "comint") (:authors ("TruongTx" . "me@truongtx.me")) (:maintainer "TruongTx" . "me@truongtx.me") (:url . "https://github.com/tmtxt/n4js.el"))]) +(myterminal-controls . [(20190426 421) ((emacs (24))) "Quick toggle controls at a key-stroke" single ((:commit . "733cdd7ab4f172b6dca09720fc5ae7dbc248c822") (:keywords "convenience" "shortcuts") (:authors ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainer "Mohammed Ismail Ansari" . "team.terminal@gmail.com") (:url . "http://ismail.teamfluxion.com"))]) +(mysql2sqlite . [(20170725 2216) nil "Convert mysql databases into sqlite databases." single ((:commit . "8e6e74451c942e2e92f90dc13222b95a7dbb285e"))]) +(mysql-to-org . [(20181012 2034) ((emacs (24 3)) (s (1 11 0))) "Minor mode to output the results of mysql queries to org tables" single ((:commit . "7c986065adcbe13a525e1da5db8aa4c80b0ef7a3") (:authors ("Tijs Mallaerts" . "tijs.mallaerts@gmail.com")) (:maintainer "Tijs Mallaerts" . "tijs.mallaerts@gmail.com"))]) +(myrddin-mode . [(20190804 2205) ((emacs (24 3))) "Major mode for editing Myrddin source files" single ((:commit . "b996da5e3bae842eacba4b3e429899bb841b077e") (:keywords "languages") (:authors ("Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org")) (:maintainer "Jakob L. Kreuze" . "zerodaysfordays@sdf.lonestar.org") (:url . "https://git.sr.ht/~jakob/myrddin-mode"))]) +(mynt-mode . [(20150512 2049) ((virtualenvwrapper (20131514))) "Minor mode to work with the mynt static site generator" single ((:commit . "23d4489167bfa899634548cb41ed32fdeb3600c9") (:keywords "convenience") (:authors ("Christian Brassat")) (:maintainer "Christian Brassat") (:url . "https://github.com/crshd/mynt-mode"))]) +(mykie . [(20150808 2205) ((emacs (24 3)) (cl-lib (0 5))) "Command multiplexer: Register multiple functions to a keybind" tar ((:commit . "7676f0e883af1d1054e404e97691f3c13aba196f") (:keywords "emacs" "configuration" "keybind") (:authors ("Yuta Yamada ")) (:maintainer "Yuta Yamada ") (:url . "https://github.com/yuutayamada/mykie-el"))]) +(myanmar-input-methods . [(20160106 1537) nil "Emacs Input Method for Myanmar" single ((:commit . "9d4e0d6358c61bde7a2274e430ef71683faea32e") (:keywords "myanmar" "unicode" "keyboard") (:authors ("Ye Lin Kyaw" . "yelinkyaw@gmail.com")) (:maintainer "Ye Lin Kyaw" . "yelinkyaw@gmail.com") (:url . "http://github.com/yelinkyaw/emacs-myanmar-input-methods"))]) +(mxf-view . [(20180501 740) ((emacs (25))) "Simple MXF viewer" single ((:commit . "6ca3cc93d995fac5fc4d72275e1e984e9857ffcb") (:keywords "data" "multimedia") (:authors ("Tomotaka SUWA" . "tomotaka.suwa@gmail.com")) (:maintainer "Tomotaka SUWA" . "tomotaka.suwa@gmail.com") (:url . "https://github.com/t-suwa/mxf-view"))]) +(mwim . [(20181110 1900) nil "Switch between the beginning/end of line or code" single ((:commit . "b4f3edb4c0fb8f8b71cecbf8095c2c25a8ffbf85") (:keywords "convenience") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:url . "https://github.com/alezost/mwim.el"))]) +(mw-thesaurus . [(20190620 2330) ((emacs (25)) (request (0 3 0)) (dash (2 16 0))) "Merriam-Webster Thesaurus" single ((:commit . "8327bae11588bcad5d73dcfbeb5e8d10f623d6b6") (:keywords "wp" "matching") (:authors ("Ag Ibragimov")) (:maintainer "Ag Ibragimov") (:url . "https://github.com/agzam/mw-thesaurus.el"))]) +(mvn . [(20181002 1617) nil "helpers for compiling with maven" single ((:commit . "ffa40235b7dabb6c6c165f64f32a963cde8031f0") (:keywords "compilation" "maven" "java") (:authors ("Andrew Gwozdziewycz" . "git@apgwoz.com")) (:maintainer "Andrew Gwozdziewycz" . "git@apgwoz.com") (:url . "https://github.com/apgwoz/mvn-el"))]) +(mutt-mode . [(20191102 2330) ((emacs (24))) "major mode for editing mutt configuration" single ((:commit . "1d495de49e6f536459b00d5396a2f5ce5ad4757b") (:keywords "languages") (:authors ("Felix Weilbach" . "felix.weilbach@t-online.de")) (:maintainer "Felix Weilbach" . "felix.weilbach@t-online.de") (:url . "https://gitlab.com/flexw/mutt-mode"))]) +(mutant . [(20160124 1353) ((emacs (24 4)) (dash (2 1 0))) "An interface for the Mutant testing tool" single ((:commit . "de9cdefe48c880128a8f62c6699d7416e9c8ced1") (:keywords "mutant" "testing") (:authors ("Pedro Lambert")) (:maintainer "Pedro Lambert") (:url . "http://github.com/p-lambert/mutant.el"))]) +(mustard-theme . [(20170808 1319) ((emacs (24 0))) "an Emacs 24 theme based on Mustard (tmTheme)" single ((:commit . "3b15d992c79590d7ea2503004e2a863b57e274b5") (:authors ("Jason Milkins")) (:maintainer "Jason Milkins") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) +(mustang-theme . [(20170719 946) nil "port of vim's mustang theme" single ((:commit . "dda6d04803f1c9b196b620ef564e7768fee15de2") (:authors ("martin haesler")) (:maintainer "martin haesler") (:url . "http://github.com/mswift42/mustang-theme"))]) +(mustache-mode . [(20141024 1432) nil "A major mode for editing Mustache files." single ((:commit . "bf9897eb287ca47ced65d7d4e07ea61ea0aec39f") (:authors ("Tony Gentilcore") ("Chris Wanstrath") ("Daniel Hackney")) (:maintainer "Tony Gentilcore"))]) +(mustache . [(20190905 2214) ((ht (0 9)) (s (1 3 0)) (dash (1 2 0))) "a mustache templating library in emacs lisp" tar ((:commit . "6443e1563ddf4eee2236ca1bb1fe87ddfde4b2bb"))]) +(multitran . [(20190714 1049) ((emacs (24)) (cl-lib (0 5))) "Interface to multitran" single ((:commit . "eea1e4a57870dd6ee6c6f0a85e53cb66af8954de") (:keywords "dictionary" "hypermedia") (:authors ("Zajcev Evgeny" . "zevlg@yandex.ru")) (:maintainer "Zajcev Evgeny" . "zevlg@yandex.ru"))]) +(multiple-cursors . [(20190820 749) ((cl-lib (0 5))) "Multiple cursors for Emacs." tar ((:commit . "b9b851a7670f4348f3a08b11ef12ed99676c8b84"))]) +(multifiles . [(20130615 2133) nil "View and edit parts of multiple files in one buffer" single ((:commit . "dddfe64b8e1c1cd1f9ccc1f03405477fc0d53897") (:keywords "multiple" "files") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) +(multicolumn . [(20150202 2251) nil "Creating and managing multiple side-by-side windows." single ((:commit . "c7a3afecd470859b2e60aa7c554d6e4d436df7fa") (:authors ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:url . "https://github.com/Lindydancer/multicolumn"))]) +(multi-web-mode . [(20130824 354) nil "multiple major mode support for web editing" tar ((:commit . "ad1c8d1c870334052d244c7ae3636cb7b9357b7c") (:keywords "convenience" "languages" "wp") (:authors ("Fabián E. Gallina" . "fabian@anue.biz")) (:maintainer "Fabián E. Gallina" . "fabian@anue.biz") (:url . "https://github.com/fgallina/multi-web-mode"))]) +(multi-term . [(20191104 1156) nil "Managing multiple terminal buffers in Emacs." single ((:commit . "8deb0f2252399cca2426eb3cc3e9646c5de726b3") (:keywords "term" "terminal" "multiple buffer") (:authors ("Andy Stewart" . "lazycat.manatee@gmail.com")) (:maintainer "Andy Stewart" . "lazycat.manatee@gmail.com") (:url . "http://www.emacswiki.org/emacs/download/multi-term.el"))]) +(multi-run . [(20190507 2349) ((emacs (24)) (window-layout (1 4))) "Efficiently manage multiple remote nodes" tar ((:commit . "c6256b0cc2876c29faf381d8324b31b911045a27") (:keywords "multiple shells" "multi-run" "remote nodes") (:authors ("Sagar Jha")) (:maintainer "Sagar Jha") (:url . "https://www.github.com/sagarjha/multi-run"))]) +(multi-project . [(20191117 1203) ((emacs (25))) "Find files, compile, and search for multiple projects." single ((:commit . "4045823d51f6330466b6ab83828b6c598ac817a0") (:keywords "convenience" "project" "management") (:authors ("Shawn Ellis" . "shawn.ellis17@gmail.com")) (:maintainer "Shawn Ellis" . "shawn.ellis17@gmail.com") (:url . "https://hg.osdn.net/view/multi-project/multi-project"))]) +(multi-line . [(20170822 226) ((emacs (24 3)) (s (1 9 0)) (cl-lib (0 5)) (dash (2 12 0)) (shut-up (0 3 2))) "multi-line statements" tar ((:commit . "d5ae863ced0adeb7032ada398005f27a6c669d79") (:keywords "multi" "line" "length" "whitespace" "programming" "tools" "convenience" "files") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:url . "https://github.com/IvanMalison/multi-line"))]) +(multi-compile . [(20160306 2223) ((emacs (24)) (dash (2 12 1))) "Multi target interface to compile." single ((:commit . "bd0331854774e7a269ce8a7dd49580cd397c0ec2") (:keywords "tools" "compile" "build") (:authors ("Kvashnin Vladimir" . "reangd@gmail.com")) (:maintainer "Kvashnin Vladimir" . "reangd@gmail.com") (:url . "https://github.com/ReanGD/emacs-multi-compile"))]) +(multi . [(20131013 1544) ((emacs (24))) "Clojure-style multi-methods for emacs lisp" single ((:commit . "0987ab71692717ed457cb3984de184db9185806d") (:keywords "multimethod" "generic" "predicate" "dispatch") (:authors ("Christina Whyte" . "kurisu.whyte@gmail.com")) (:maintainer "Christina Whyte" . "kurisu.whyte@gmail.com") (:url . "http://github.com/kurisuwhyte/emacs-multi"))]) +(muban . [(20180415 1219) ((emacs (25))) "Lightweight template expansion tool" single ((:commit . "7078e439ee0433a8fbd1cb174464496f9a9d00fa") (:keywords "abbrev" "tools") (:authors ("Jiahao Li" . "jiahaowork@gmail.com")) (:maintainer "Jiahao Li" . "jiahaowork@gmail.com") (:url . "https://github.com/jiahaowork/muban.el"))]) +(mu4e-query-fragments . [(20170923 1322) ((emacs (24 4))) "mu4e query fragments extension" single ((:commit . "34ddad4e6785f575333efcc66153d892daa1c884") (:keywords "mu4e" "mail" "convenience") (:authors ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainer "Yuri D'Elia" . "wavexx@thregr.org") (:url . "https://github.com/wavexx/mu4e-query-fragments.el"))]) +(mu4e-overview . [(20191020 842) ((emacs (26))) "Show overview of maildir" single ((:commit . "c34f45b3ab9cce892835e14c6701b531a4f54cce") (:keywords "mail" "tools") (:authors ("MichaÅ‚ Krzywkowski" . "k.michal@zoho.com")) (:maintainer "MichaÅ‚ Krzywkowski" . "k.michal@zoho.com") (:url . "https://github.com/mkcms/mu4e-overview"))]) +(mu4e-maildirs-extension . [(20180606 812) ((dash (0 0 0))) "Show mu4e maildirs summary in mu4e-main-view" single ((:commit . "3ef4c48516be66e73d24fe764aadbcfc126b7964") (:authors ("Andreu Gil Pàmies" . "agpchil@gmail.com")) (:maintainer "Andreu Gil Pàmies" . "agpchil@gmail.com") (:url . "http://github.com/agpchil/mu4e-maildirs-extension"))]) +(mu4e-jump-to-list . [(20190419 1442) ((emacs (24 4)) (cl-lib (0 5))) "mu4e jump-to-list extension" single ((:commit . "358bba003543b49ffa266e503e54aebd0ebe614b") (:keywords "mu4e" "mail" "convenience") (:authors ("Yuri D'Elia" . "wavexx@thregr.org")) (:maintainer "Yuri D'Elia" . "wavexx@thregr.org") (:url . "https://github.com/wavexx/mu4e-jump-to-list.el"))]) +(mu4e-conversation . [(20190609 812) ((emacs (25 1))) "Show a complete thread in a single buffer" single ((:commit . "98110bb9c300fc9866dee8e0023355f9f79c9b96") (:keywords "mail" "convenience" "mu4e") (:authors ("Pierre Neidhardt" . "mail@ambrevar.xyz")) (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz") (:url . "https://gitlab.com/Ambrevar/mu4e-conversation"))]) +(mu4e-alert . [(20190418 558) ((alert (1 2)) (s (1 10 0)) (ht (2 0)) (emacs (24 3))) "Desktop notification for mu4e" single ((:commit . "91f0657c5b245a9de57aa38391221fb5d141d9bd") (:keywords "mail" "convenience") (:authors ("Iqbal Ansari" . "iqbalansari02@yahoo.com")) (:maintainer "Iqbal Ansari" . "iqbalansari02@yahoo.com") (:url . "https://github.com/iqbalansari/mu4e-alert"))]) +(mu2tex . [(20190520 503) nil "Convert plain text molecule names and units to TeX" single ((:commit . "9467076ee4115d7fc19abaeadecc603e9115bf8d") (:keywords "tex") (:authors ("Carsten Dominik" . "dominik@.uva.nl")) (:maintainer "Carsten Dominik" . "dominik@.uva.nl") (:url . "https://github.com/cdominik/mu2tex"))]) +(mu-cite . [(20190803 439) ((flim (1 14 9))) "A library to provide MIME features." tar ((:commit . "b2c83bbce4646d100b942f0f0de0877a8d47298c"))]) +(mtg-deck-mode . [(20180613 2010) ((emacs (25 1))) "Major mode to edit MTG decks" tar ((:commit . "8265b8ed17fcd4406760c19aa6ee9c76068b1ab0") (:keywords "data" "mtg" "magic") (:authors ("Mattias Bengtsson" . "mattias.jc.bengtsson@gmail.com")) (:maintainer "Mattias Bengtsson" . "mattias.jc.bengtsson@gmail.com") (:url . "https://github.com/mattiasb/mtg-deck-mode"))]) +(msvc . [(20190426 1045) ((emacs (24)) (cl-lib (0 5)) (cedet (1 0)) (ac-clang (2 0 0))) "Microsoft Visual C/C++ mode" tar ((:commit . "c3b86fb517e95c9ae4d6b851984f4f4ed1864c06") (:keywords "languages" "completion" "syntax check" "mode" "intellisense") (:authors ("yaruopooner [https://github.com/yaruopooner]")) (:maintainer "yaruopooner [https://github.com/yaruopooner]") (:url . "https://github.com/yaruopooner/msvc"))]) +(ms-python . [(20190413 516) ((emacs (26 1)) (lsp-mode (5 0))) "A lsp client for microsoft python language server." single ((:commit . "d95ac8f1633764cdb4bb43bf44c2eb6b225f9f93") (:keywords "tools") (:authors ("Yong Cheng" . "xhcoding@163.com")) (:maintainer "Yong Cheng" . "xhcoding@163.com") (:url . "https://github.com/xhcoding/ms-python"))]) +(mqtt-mode . [(20180605 1731) ((emacs (25)) (dash (2 12 0))) "client for interaction with MQTT servers" single ((:commit . "36d1d4296d79e17b8f35e8e14f2708980eb502db") (:keywords "tools") (:authors ("Andreas Müller" . "code@0x7.ch")) (:maintainer "Andreas Müller" . "code@0x7.ch") (:url . "https://github.com/andrmuel/mqtt-mode"))]) +(mqr . [(20180527 1204) ((emacs (24 4))) "Multi-dimensional query and replace" single ((:commit . "4ade19d4620b8b61340290bf63fa56d5e493859f") (:keywords "convenience" "extensions" "lisp") (:authors ("Tino Calancha" . "tino.calancha@gmail.com")) (:maintainer "Tino Calancha" . "tino.calancha@gmail.com") (:url . "https://github.com/calancha/multi-replace"))]) +(mpv . [(20180602 1014) ((cl-lib (0 5)) (emacs (24)) (json (1 3)) (org (8 0))) "control mpv for easy note-taking" single ((:commit . "9dedf3b7c1bfd778284df7f394207ce0447ea7aa") (:keywords "tools" "multimedia") (:authors ("Johann Klähn" . "kljohann@gmail.com")) (:maintainer "Johann Klähn" . "kljohann@gmail.com") (:url . "https://github.com/kljohann/mpv.el"))]) +(mpmc-queue . [(20180303 2029) ((emacs (26 0)) (queue (0 2 0))) "a multiple-producer-multiple-consumer queue" single ((:commit . "df07d6bef7468edb1d73ef73b8331b94d0e5d0ca") (:keywords "lisp" "async") (:authors ("Sho Mizoe" . "sho.mizoe@gmail.com")) (:maintainer "Sho Mizoe" . "sho.mizoe@gmail.com") (:url . "https://github.com/smizoe/mpmc-queue"))]) +(mpdel . [(20190911 632) ((emacs (25 1)) (libmpdel (1 0 0)) (navigel (0 6 0))) "Play and control your MPD music" tar ((:commit . "e09904bf31ed465ea93ef2c165e8a6f705229f57") (:keywords "multimedia") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://gitlab.petton.fr/mpdel/mpdel"))]) +(mpages . [(20150710 1404) nil "An Emacs buffer for quickly writing your Morning Pages" single ((:commit . "39a72a0931ab1cdbfdf0ab9f412dc12d43a3829f") (:authors ("Sean Levin")) (:maintainer "Sean Levin") (:url . "https://github.com/slevin/mpages"))]) +(mozc-temp . [(20160228 840) ((emacs (24)) (dash (2 10 0)) (mozc (0))) "Use mozc temporarily" single ((:commit . "01f09b6c0b308e9f7057fb2aa80171e2ce328bb8") (:authors ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainer "Hiroki YAMAKAWA" . "s06139@gmail.com") (:url . "https://github.com/HKey/mozc-temp"))]) +(mozc-popup . [(20150224 34) ((popup (0 5 2)) (mozc (0))) "Mozc with popup" single ((:commit . "f0684b875a7427ec08f8df13939a486e5d5cf420") (:keywords "i18n" "extentions") (:authors ("Daisuke Kobayashi" . "d5884jp@gmail.com")) (:maintainer "Daisuke Kobayashi" . "d5884jp@gmail.com"))]) +(mozc-im . [(20160412 22) ((mozc (0))) "Mozc with input-method-function interface." single ((:commit . "df614a1076c28a11551fb3e822868bae47e855a5") (:keywords "i18n" "extentions") (:authors ("Daisuke Kobayashi" . "d5884jp@gmail.com")) (:maintainer "Daisuke Kobayashi" . "d5884jp@gmail.com"))]) +(mozc-cand-posframe . [(20190817 2037) ((emacs (26 1)) (posframe (0 5 0)) (mozc (20180101 800))) "Posframe frontend for mozc.el" single ((:commit . "20df08f0bf239bc2a686ff2c6d9390b5ea6d89fa") (:keywords "i18n" "tooltip") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:url . "https://github.com/akirak/mozc-posframe"))]) +(mozc . [(20180101 800) nil "minor mode to input Japanese with Mozc" single ((:commit . "afb03ddfe72dde4cf2409863a3bfea160f7a66d8") (:keywords "mule" "multilingual" "input method"))]) +(moz-controller . [(20151209 206) ((moz (0))) "Control Firefox from Emacs" single ((:commit . "46f665c03574fa922de767fc29795e0db4a7c5c6") (:authors ("任文山 (Ren Wenshan) ")) (:maintainer "任文山 (Ren Wenshan) ") (:url . "https://github.com/RenWenshan/emacs-moz-controller"))]) +(moz . [(20150805 1706) nil "Lets current buffer interact with inferior mozilla." single ((:commit . "ab3e79914445039ceb62f7f2dc342358fec3492e") (:authors ("Massimiliano Mirra, ")) (:maintainer "Massimiliano Mirra, ") (:url . "http://github.com/bard/mozrepl/raw/master/chrome/content/moz.el"))]) +(mowedline . [(20161122 235) nil "elisp utilities for using mowedline" single ((:commit . "6121b7d4aacd18f7b24da226e61dbae054e50a7c") (:authors ("John Foerch" . "jjfoerch@earthlink.net")) (:maintainer "John Foerch" . "jjfoerch@earthlink.net"))]) +(move-text . [(20170909 330) nil "Move current line or region with M-up or M-down." single ((:commit . "7cbc941a9150468609010a93c429117da2523903") (:keywords "edit") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:url . "https://github.com/emacsfodder/move-text"))]) +(move-dup . [(20190408 1246) nil "Eclipse-like moving and duplicating lines or rectangles." single ((:commit . "19f1c075d939084279b190c38412b4cfda96840d") (:keywords "convenience" "text" "edit") (:authors ("Jimmy Yuen Ho Wong" . "wyuenho@gmail.com")) (:maintainer "Jimmy Yuen Ho Wong" . "wyuenho@gmail.com") (:url . "https://github.com/wyuenho/move-dup"))]) +(mouse-slider-mode . [(20161021 1914) ((emacs (24 3)) (cl-lib (0 3))) "scale numbers dragged under the mouse" single ((:commit . "b3c19cd231edecce76787c5a9bbe5e4046d91f88") (:authors ("Christopher Wellons" . "mosquitopsu@gmail.com")) (:maintainer "Christopher Wellons" . "mosquitopsu@gmail.com") (:url . "https://github.com/skeeto/mouse-slider-mode"))]) +(motion-mode . [(20140920 156) ((flymake-easy (0 7)) (flymake-cursor (1 0 2))) "major mode for RubyMotion enviroment" tar ((:commit . "4c94180e3ecea611a61240a0c0cd48f1032c4a55") (:authors ("Satoshi Namai")) (:maintainer "Satoshi Namai") (:url . "https://github.com/ainame/motion-mode"))]) +(mote-mode . [(20160123 29) ((ruby-mode (1 1))) "Mote minor mode" single ((:commit . "666c6641addbd3b337a7aa01fd2742ded2f41b83") (:authors ("Leandro López (inkel)" . "inkel.ar@gmail.com")) (:maintainer "Leandro López (inkel)" . "inkel.ar@gmail.com") (:url . "http://inkel.github.com/mote-mode/"))]) +(mosey . [(20180614 1649) ((emacs (24 4))) "Mosey around your buffers" single ((:commit . "2e3ac9d334fa2937ed5267193dfd25d8e1f14dc2") (:keywords "convenience") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "http://github.com/alphapapa/mosey.el"))]) +(morlock . [(20180318 2023) nil "more font-lock keywords for elisp" single ((:commit . "b883d48024ddfffebe2d0dd69f5ed54c617f8834") (:keywords "convenience") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/tarsius/morlock"))]) +(morganey-mode . [(20170118 934) ((emacs (24 4))) "Major mode for editing Morganey files" single ((:commit . "5cf3870432a2aeb69d373abe63b3be1f325f6d21") (:authors ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainer "Alexey Kutepov" . "reximkut@gmail.com") (:url . "https://github.com/morganey-lang/morganey-mode"))]) +(moonscript . [(20170831 2226) ((cl-lib (0 5)) (emacs (24))) "Major mode for editing MoonScript code" tar ((:commit . "56f90471e2ced2b0a177aed4d8c2f854797e9cc7") (:authors ("@GriffinSchneider, @k2052, @EmacsFodder")) (:maintainer "@GriffinSchneider, @k2052, @EmacsFodder"))]) +(moom . [(20191118 902) ((emacs (25 1))) "Commands to control frame position and size" tar ((:commit . "f16c8c509990932f3db7570a838a441d5c22dec3") (:keywords "frames" "faces" "convenience") (:authors ("Takaaki ISHIKAWA ")) (:maintainer "Takaaki ISHIKAWA ") (:url . "https://github.com/takaxp/Moom"))]) +(moody . [(20191105 2245) ((emacs (25 3))) "Tabs and ribbons for the mode line" single ((:commit . "b51c2218fd1d207186694cae7d09315795f3c847") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/tarsius/moody"))]) +(mood-one-theme . [(20191029 743) ((emacs (24 4))) "A dark color scheme inspired by the Doom One theme." single ((:commit . "77ff4bfd954d46bc7580175ef443a9168938f9cd") (:keywords "mode-line" "faces") (:authors ("Jessie Hildebrandt ")) (:maintainer "Jessie Hildebrandt ") (:url . "https://gitlab.com/jessieh/mood-one-theme"))]) +(mood-line . [(20191101 1955) ((emacs (24 4))) "A minimal mode-line inspired by doom-modeline." single ((:commit . "0b07bdc7e77e19d7c722c2db803be0d3b47aa692") (:keywords "mode-line" "faces") (:authors ("Jessie Hildebrandt ")) (:maintainer "Jessie Hildebrandt ") (:url . "https://gitlab.com/jessieh/mood-line"))]) +(monroe . [(20190912 1624) nil "Yet another client for nREPL" single ((:commit . "508f5ed0f88b0b5e01a37d456186ea437f44d93c") (:keywords "languages" "clojure" "nrepl" "lisp") (:authors ("Sanel Zukan" . "sanelz@gmail.com")) (:maintainer "Sanel Zukan" . "sanelz@gmail.com") (:url . "http://www.github.com/sanel/monroe"))]) +(monotropic-theme . [(20181015 1230) ((emacs (24))) "Monotropic Theme" single ((:commit . "36df566aa8225e303f6c9d90c00740dd678a415e") (:authors ("caffo")) (:maintainer "caffo") (:url . "https://github.com/caffo/monotropic-theme"))]) +(monokai-theme . [(20190801 1701) nil "A fruity color theme for Emacs." single ((:commit . "e407f51d34b0c30cfe9d815f80a0c3539b998b08") (:authors ("Kelvin Smith" . "oneKelvinSmith@gmail.com")) (:maintainer "Kelvin Smith" . "oneKelvinSmith@gmail.com") (:url . "http://github.com/oneKelvinSmith/monokai-emacs"))]) +(monokai-pro-theme . [(20191115 714) nil "A simple theme based on the Monokai Pro Sublime color schemes" single ((:commit . "622e3a7203907978ce0d2409e3df2d65c63ce938") (:authors ("Kaleb Elwert" . "kaleb@coded.io")) (:maintainer "Kaleb Elwert" . "kaleb@coded.io") (:url . "https://github.com/belak/emacs-monokai-pro-theme"))]) +(monokai-alt-theme . [(20170630 2048) ((emacs (24))) "Theme with a dark background. Based on sublime monokai theme." single ((:commit . "f342b6afc31f929be0626eca2d696ee9fab78011") (:authors ("Dmytro Koval")) (:maintainer "Dmytro Koval") (:url . "https://github.com/dawidof/emacs-monokai-theme"))]) +(monochrome-theme . [(20140326 1050) nil "A dark Emacs 24 theme for your focused hacking sessions" tar ((:commit . "bfca67fe7365310bc47ae9ca96c417caada54896") (:authors ("Xavier Noria" . "fxn@hashref.com")) (:maintainer "Xavier Noria" . "fxn@hashref.com"))]) +(monky . [(20190619 1637) nil "Control Hg from Emacs." tar ((:commit . "9d379a2306a8b7cd9c4faba20490480acdc1d763") (:keywords "tools") (:authors ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainer "Anantha kumaran" . "ananthakumaran@gmail.com") (:url . "http://github.com/ananthakumaran/monky"))]) +(monitor . [(20161018 1144) ((dash (2 13 0))) "Utilities for monitoring expressions." tar ((:commit . "63f4643a0ee81616dbb692b8b03bae21df2283e2") (:keywords "lisp" "monitor" "utility") (:authors ("Ben Moon" . "software@guiltydolphin.com")) (:maintainer "Ben Moon" . "software@guiltydolphin.com") (:url . "https://github.com/guiltydolphin/monitor"))]) +(mongo . [(20150315 1219) nil "MongoDB driver for Emacs Lisp" tar ((:commit . "595529ddd70ecb9fab8b11daad2c3929941099d6") (:keywords "convenience") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainer "Tomohiro Matsuyama" . "m2ym.pub@gmail.com"))]) +(molokai-theme . [(20151016 1545) nil "molokai theme with Emacs theme engine" single ((:commit . "04a44f21184b6a26caae4f2c92db9019d883309c") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/alloy-d/color-theme-molokai"))]) +(molecule . [(20180527 743) ((emacs (25 1))) "Simple wrapper for molecule" single ((:commit . "2ef72b81d9aa24ea782b71a061a3abdad6cae162") (:keywords ":" "languages" "terminals") (:authors (": drymer ")) (:maintainer ": drymer ") (:url . "https://git.daemons.it/drymer/molecule.el"))]) +(moe-theme . [(20180617 200) nil "A colorful eye-candy theme. Moe, moe, kyun!" tar ((:commit . "6e086d855d6bb446bbd1090742815589a81a915f") (:url . "https://github.com/kuanyui/moe-theme.el"))]) +(modtime-skip-mode . [(20140128 2201) nil "Minor mode for disabling modtime and supersession checks on files." single ((:commit . "c0e49523aa26b2263a8693691ac775988015f592") (:authors ("Jordon Biondo" . "biondoj@mail.gvsu.edu")) (:maintainer "Jordon Biondo" . "biondoj@mail.gvsu.edu") (:url . "http://www.github.com/jordonbiondo/modtime-skip-mode"))]) +(modern-cpp-font-lock . [(20190331 1528) nil "Font-locking for \"Modern C++\"" single ((:commit . "02f104701bc34c146d22e3143ae59ef362999098") (:keywords "languages" "c++" "cpp" "font-lock") (:authors ("Ludwig PACIFICI" . "ludwig@lud.cc")) (:maintainer "Ludwig PACIFICI" . "ludwig@lud.cc") (:url . "https://github.com/ludwigpacifici/modern-cpp-font-lock"))]) +(mode-line-debug . [(20180318 2225) nil "show status of `debug-on-error' in the mode-line" single ((:commit . "a0fcc394b07d2414bd6f722da10f1c7567333f6b") (:keywords "convenience" "lisp") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/tarsius/mode-line-debug"))]) +(mode-line-bell . [(20181029 516) nil "Flash the mode line instead of ringing the bell" single ((:commit . "26ac7d97abdeb762ceaeab6b892f3ed7e3412494") (:keywords "convenience") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) +(mode-icons . [(20190627 2121) ((emacs (24)) (cl-lib (0 5))) "Show icons for modes" tar ((:commit . "f16969f053f43bf706257673d0800de438d4e33b") (:keywords "multimedia") (:authors ("Tom Willemse" . "tom@ryuslash.org")) (:maintainer "Tom Willemse" . "tom@ryuslash.org") (:url . "http://ryuslash.org/projects/mode-icons.html"))]) +(modalka . [(20190713 1335) ((emacs (24 4))) "Easily introduce native modal editing of your own design" single ((:commit . "0a641093f5edb1e0849b82f90a1464623bb14a2f") (:keywords "modal" "editing") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:url . "https://github.com/mrkkrp/modalka"))]) +(mocker . [(20150917 154) ((eieio (1 3)) (el-x (0 2 4))) "mocking framework for emacs" single ((:commit . "6a1d7c9189bd721debd1a60707526e43a733f537") (:keywords "lisp" "testing") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainer "Yann Hodique" . "yann.hodique@gmail.com"))]) +(mocha-snippets . [(20190417 1931) ((yasnippet (0 8 0))) "Yasnippets for the Mocha JS Testing Framework" tar ((:commit . "361a3809f755577406e109b9e44d473dfa7c08e0") (:keywords "test" "javascript") (:authors ("Charles Lowell" . "cowboyd@frontside.io")) (:maintainer "Charles Lowell" . "cowboyd@frontside.io"))]) +(mocha . [(20180321 2322) ((js2-mode (20150909)) (f (0 18))) "Run Mocha or Jasmine tests" single ((:commit . "33e1b521a8a8d0225df353b51f1e8a4588ee32d0") (:keywords "javascript" "mocha" "jasmine") (:authors ("Al Scott")) (:maintainer "Al Scott") (:url . "http://github.com/scottaj/mocha.el"))]) +(mobdebug-mode . [(20140110 346) ((lua-mode (20130419)) (emacs (24))) "Major mode for MobDebug" single ((:commit . "e1d483bc4e341c762bc5c0a8c52306a8d01ea0da") (:authors ("Shihpin Tseng" . "deftsp@gmail.com")) (:maintainer "Shihpin Tseng" . "deftsp@gmail.com") (:url . "https://github.com/deftsp/mobdebug-mode"))]) +(mo-vi-ment-mode . [(20181217 206) nil "Provide vi-like cursor movement that's easy on the fingers" single ((:commit . "e8b525ffc5faa31d36ecc5496b40f0f5c3603c08") (:keywords "convenience") (:authors ("Ajay MT" . "ajay.tatachar@gmail.com")) (:maintainer "Ajay MT" . "ajay.tatachar@gmail.com"))]) +(mo-git-blame . [(20160129 1759) nil "An interactive, iterative 'git blame' mode for Emacs" single ((:commit . "254a675eb794cdbbdef9fa2b4b7bb510b70089c0") (:keywords "tools") (:authors ("Moritz Bunkus" . "moritz@bunkus.org")) (:maintainer "Moritz Bunkus" . "moritz@bunkus.org"))]) +(mmt . [(20190713 1347) ((emacs (24 1)) (cl-lib (0 3))) "Missing macro tools for Emacs Lisp" single ((:commit . "753f6dc888acbd932c4fbd7c73ff750381058561") (:keywords "macro" "emacs-lisp") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:url . "https://github.com/mrkkrp/mmt"))]) +(mmm-mako . [(20121020 651) ((mmm-mode (0 4 8))) "MMM submode class for Mako Templates" single ((:commit . "5c9ff92137b547569264eeca1ab2a86e4ba12f55") (:authors ("Philip Jenvey" . "pjenvey@underboss.org")) (:maintainer "Philip Jenvey" . "pjenvey@underboss.org") (:url . "https://bitbucket.org/pjenvey/mmm-mako"))]) +(mmm-jinja2 . [(20170313 1420) ((mmm-mode (0 5 4))) "MMM submode class for Jinja2 Templates" single ((:commit . "c8cb763174fa2fb61b9a0e5e0ff8cb0210f8492f") (:authors ("Ben Hayden" . "hayden767@gmail.com")) (:maintainer "Ben Hayden" . "hayden767@gmail.com") (:url . "https://github.com/glynnforrest/mmm-jinja2"))]) +(mkdown . [(20140517 1418) ((markdown-mode (2 0))) "Pretty Markdown previews based on mkdown.com" tar ((:commit . "8e23de82719af6c5b53b52b3308a02b3a1fb872e") (:keywords "markdown") (:authors ("Andrew Tulloch")) (:maintainer "Andrew Tulloch") (:url . "https://github.com/ajtulloch/mkdown.el"))]) +(mixed-pitch . [(20191023 1025) ((emacs (24 3))) "Use a variable pitch, keeping fixed pitch where it's sensible" single ((:commit . "f512a803fdfcea9ca17e0f57a16d4059b1772390") (:authors ("J. Alexander Branham" . "branham@utexas.edu")) (:maintainer "J. Alexander Branham" . "branham@utexas.edu") (:url . "https://gitlab.com/jabranham/mixed-pitch"))]) +(mips-mode . [(20180502 1457) nil "Major-mode for MIPS assembly" single ((:commit . "75152fc78baa762af4f83602f6cb3c8b9bcebca3") (:keywords "languages" "mips" "assembly") (:authors ("Henrik Lissner ")) (:maintainer "Henrik Lissner" . "henrik@lissner.net") (:url . "https://github.com/hlissner/emacs-mips-mode"))]) +(mip-mode . [(20151127 617) nil "virtual projects for emacs." single ((:commit . "7c88c383b4c7ed0a4c1dc397735f365c1fcb461c") (:keywords "workspaces" "workspace" "project" "projects" "mip-mode") (:authors ("Eeli Reilin" . "gaudecker@fea.st")) (:maintainer "Eeli Reilin" . "gaudecker@fea.st"))]) +(minor-mode-hack . [(20170926 34) nil "Change priority of minor-mode keymaps" single ((:commit . "9688994e23ccb2de568225ef125b41c46e5667c3") (:keywords "lisp") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/minor-mode-hack.el"))]) +(minizinc-mode . [(20180201 1450) ((emacs (24 1))) "Major mode for MiniZinc code" single ((:commit . "2512521ba7f8e263a06db88df663fc6b3cca7e16") (:keywords "languages" "minizinc") (:url . "http://github.com/m00nlight/minizinc-mode"))]) +(minitest . [(20160628 1820) ((dash (1 0 0))) "An Emacs mode for ruby minitest files" tar ((:commit . "1aadb7865c1dc69c201cecee275751ecec33a182") (:authors ("Arthur Neves")) (:maintainer "Arthur Neves") (:url . "https://github.com/arthurnn/minitest-emacs"))]) +(minions . [(20190918 2048) ((emacs (25 2)) (dash (2 13 0))) "A minor-mode menu for the mode line" single ((:commit . "ca6a3e77ddbd19cdf363ea71ba357096395a5de5") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/tarsius/minions"))]) +(minimal-theme . [(20190113 2132) nil "A light/dark minimalistic Emacs 24 theme." tar ((:commit . "063b4d8ca33d55d04c341f0b2b777ec241a3e201") (:keywords "color" "theme" "minimal") (:authors ("Anler Hp ")) (:maintainer "Anler Hp ") (:url . "http://github.com/ikame/minimal-theme"))]) +(minimal-session-saver . [(20140508 2041) nil "Very lean session saver" single ((:commit . "cf654ac549850746dc21091746e4bcc1aef7668e") (:keywords "tools" "frames" "project") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:url . "http://github.com/rolandwalker/minimal-session-saver"))]) +(miniedit . [(20100419 1745) nil "Enhanced editing for minibuffer fields." single ((:commit . "e12bf659c3eb92dd8a4cb77642dc0865c54667a3"))]) +(minibuffer-cua . [(20130906 1134) nil "Make CUA mode's S-up/S-down work in minibuffer" single ((:commit . "adc4979a64f8b36e05960e9afa0746dfa9e2e4c7") (:keywords "completion" "editing") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:url . "https://github.com/knu/minibuffer-cua.el"))]) +(minibuffer-complete-cycle . [(20130813 1645) nil "Cycle through the *Completions* buffer" single ((:commit . "3df80135887d0169e02294a948711f6dfeca4a6f") (:keywords "completion") (:authors ("Akinori MUSHA" . "knu@iDaemons.org") ("Kevin Rodgers" . "ihs_4664@yahoo.com")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:url . "https://github.com/knu/minibuffer-complete-cycle"))]) +(minibuf-isearch . [(20151226 1943) nil "incremental search on minibuffer history" single ((:commit . "2846c6ac369ee623dad4cd3c8a7a6d9078965516") (:keywords "minibuffer" "history" "incremental search") (:authors ("Keiichiro Nagano" . "knagano@sodan.org") ("Hideyuki SHIRAI " . "shirai@meadowy.org")) (:maintainer "Keiichiro Nagano" . "knagano@sodan.org"))]) +(mini-modeline . [(20191006 1733) ((emacs (25 1)) (dash (2 12 0))) "Display modeline in minibuffer" single ((:commit . "d523de5918a842cd67c029535cf399278396264b") (:keywords "convenience" "tools") (:authors ("Kien Nguyen" . "kien.n.quang@gmail.com")) (:maintainer "Kien Nguyen" . "kien.n.quang@gmail.com") (:url . "https://github.com/kiennq/emacs-mini-modeline"))]) +(mini-header-line . [(20170621 1221) ((emacs (24 4))) "a minimal header-line" single ((:commit . "73b6724e0a26c4528d93768191c8aa59e6bce2e5") (:keywords "header-line" "mode-line") (:authors ("Johannes Goslar")) (:maintainer "Johannes Goslar") (:url . "https://github.com/ksjogo/mini-header-line"))]) +(mingus . [(20190106 1443) ((libmpdee (2 1))) "MPD Interface" tar ((:commit . "4223be618f57f10f18114a74393a71955b568884") (:keywords "multimedia" "elisp" "music" "mpd") (:authors ("Niels Giesen ")) (:maintainer "Niels Giesen ") (:url . "https://github.com/pft/mingus"))]) +(minesweeper . [(20150414 522) nil "play minesweeper in Emacs" single ((:commit . "d29af12fc6115399c11bdf7461a74cb810c97336") (:keywords "game" "fun" "minesweeper" "inane" "diversion") (:authors ("Zachary Kanfer" . "zkanfer@gmail.com")) (:maintainer "Zachary Kanfer" . "zkanfer@gmail.com") (:url . "https://bitbucket.org/zck/minesweeper.el"))]) +(milkode . [(20140927 529) nil "Command line search and direct jump with Milkode" single ((:commit . "ba97e2aeefa1d9d0b3835bf08edd0de248b0c513") (:keywords "milkode" "search" "grep" "jump" "keyword") (:authors ("ongaeshi")) (:maintainer "ongaeshi"))]) +(migemo . [(20190112 516) ((cl-lib (0 5))) "Japanese incremental search through dynamic pattern expansion" single ((:commit . "f42832c8ac462ecbec9a16eb781194f876fba64a") (:authors ("Satoru Takabayashi" . "satoru-t@is.aist-nara.ac.jp")) (:maintainer "Satoru Takabayashi" . "satoru-t@is.aist-nara.ac.jp") (:url . "https://github.com/emacs-jp/migemo"))]) +(midje-mode . [(20170809 403) ((cider (0 1 4)) (clojure-mode (1 0))) "Minor mode for running Midje tests in emacs" tar ((:commit . "10ad5b6084cd03d5cd268b486a7c3c246d85535f"))]) +(micgoline . [(20160415 326) ((emacs (24 3)) (powerline (2 3))) "powerline mode, color schemes from microsoft and google's logo." single ((:commit . "837504263bb1711203b0f7efecd6b7b5f272fae0") (:keywords "mode-line" "powerline" "theme") (:authors ("yzprofile" . "yzprofiles@gmail.com")) (:maintainer "yzprofile" . "yzprofiles@gmail.com") (:url . "https://github.com/yzprofile/micgoline"))]) +(mic-paren . [(20170731 1907) nil "advanced highlighting of matching parentheses" single ((:commit . "d0410c7d805c9aaf51a1bcefaaef092bed5824c4") (:keywords "languages" "faces" "parenthesis" "matching") (:authors ("Mikael Sjödin" . "mic@docs.uu.se") ("Klaus Berndl " . "berndl@sdm.de") ("Jonathan Kotta" . "jpkotta@gmail.com")) (:maintainer "ttn"))]) +(mhc . [(20190807 513) ((calfw (20150703))) "Message Harmonized Calendaring system." tar ((:commit . "86d3682ff9491893da671237be3cde0b0010ca85") (:keywords "calendar") (:authors ("Yoshinari Nomura" . "nom@quickhack.net")) (:maintainer "Yoshinari Nomura" . "nom@quickhack.net") (:url . "http://www.quickhack.net/mhc"))]) +(mgmtconfig-mode . [(20190324 1908) ((emacs (24 3))) "mgmt configuration management language" single ((:commit . "fdc459ec5bbd3422af537f392d552bbdb7fe6f35") (:keywords "languages") (:authors ("Peter Oliver" . "mgmtconfig@mavit.org.uk")) (:maintainer "Mgmt contributors ") (:url . "https://github.com/purpleidea/mgmt/misc/emacs"))]) +(mexican-holidays . [(20190506 245) nil "Mexico holidays for Emacs calendar." single ((:commit . "663633be1d693f6081d7d000e05d15ddbf71aa10") (:keywords "calendar") (:authors ("Saúl Gutiérrez" . "me@sggc.me")) (:maintainer "Saúl Gutiérrez" . "me@sggc.me") (:url . "https://github.com/shopClerk/mexican-holidays"))]) +(mew . [(20190825 2345) nil "Messaging in the Emacs World" tar ((:commit . "3bc70db24c4f1410eb91017ea37173ba7da70281") (:authors ("Kazu Yamamoto" . "Kazu@Mew.org")) (:maintainer "Kazu Yamamoto" . "Kazu@Mew.org"))]) +(metaweblog . [(20191018 242) ((emacs (26 3))) "An XML-RPC MetaWeblog and WordPress API client." single ((:commit . "58398120907504ff200adfd9b817f297142c9680") (:keywords "comm") (:authors ("Puneeth Chaganti" . "punchagan+org2blog@gmail.com")) (:maintainer "Grant Rettke" . "grant@wisdomandwonder.com") (:url . "https://github.com/org2blog/org2blog"))]) +(metascript-mode . [(20150709 57) ((emacs (24 3))) "Major mode for the Metascript programming language" single ((:commit . "edb361c7b0e5de231e5334a17b90652fb1df78f9") (:keywords "languages" "metascript" "mjs") (:url . "http://github.com/metascript/metascript-mode"))]) +(metamorph . [(20180930 2028) ((emacs (24 4))) "Transform your buffers with lisp" single ((:commit . "d9dc7037b7eed7b3fe85ea50e91f332e3f831514") (:keywords "metaprogramming" "wp") (:authors ("Adam Niederer" . "adam.niederer@gmail.com")) (:maintainer "Adam Niederer" . "adam.niederer@gmail.com") (:url . "http://github.com/AdamNiederer/metamorph"))]) +(metalheart-theme . [(20160710 641) ((emacs (24))) "Low-contrast theme with a dark blue-green background." single ((:commit . "ec98ea2c11dc1213dae8cbe1fe0cee73ca138bb2") (:authors ("Martin Haesler")) (:maintainer "Martin Haesler"))]) +(meta-presenter . [(20190414 1720) nil "A simple multi-file presentation tool for Emacs" single ((:commit . "704a2e0f2a3e6bb72578e00eccb772dfcf0670fc") (:keywords "productivity" "presentation") (:authors ("Mohammed Ismail Ansari" . "team.terminal@gmail.com")) (:maintainer "Mohammed Ismail Ansari" . "team.terminal@gmail.com") (:url . "http://ismail.teamfluxion.com"))]) +(messages-are-flowing . [(20191029 954) nil "visible indication when composing \"flowed\" emails" single ((:commit . "d582a564a63b7b90764ffc5c618bc5300225d0ab") (:keywords "mail") (:authors ("Magnus Henoch" . "magnus.henoch@gmail.com")) (:maintainer "Magnus Henoch" . "magnus.henoch@gmail.com"))]) +(meson-mode . [(20181115 2125) ((emacs (24 3))) "Major mode for the Meson build system files" single ((:commit . "b507a87455af906e6c49aa4af70eba5b1d1af9ef") (:keywords "languages" "tools") (:authors ("Michal Sojka" . "sojkam1@fel.cvut.cz")) (:maintainer "Michal Sojka" . "sojkam1@fel.cvut.cz") (:url . "https://github.com/wentasah/meson-mode"))]) +(mermaid-mode . [(20190503 1726) ((f (0 20 0)) (emacs (25 3))) "major mode for working with mermaid graphs" single ((:commit . "6b3cc82cf68528d9056dd3803dc5fab62300a44a") (:keywords "mermaid" "graphs" "tools" "processes") (:authors ("Adrien Brochard")) (:maintainer "Adrien Brochard") (:url . "https://github.com/abrochard/mermaid-mode"))]) +(merlin-eldoc . [(20190830 517) ((emacs (24 4)) (merlin (3 0))) "eldoc for OCaml and Reason" single ((:commit . "db7fab1eddfe34781b7e79694f8923b285698032") (:keywords "merlin" "ocaml" "languages" "eldoc") (:authors ("Louis Roché" . "louis@louisroche.net")) (:maintainer "Louis Roché" . "louis@louisroche.net") (:url . "https://github.com/khady/merlin-eldoc"))]) +(merlin . [(20191025 851) nil "Mode for Merlin, an assistant for OCaml." tar ((:commit . "adcae5ff2896d8992ec19bfa784dc1a3143b45b0") (:keywords "ocaml" "languages") (:authors ("Frédéric Bour ")) (:maintainer "Frédéric Bour ") (:url . "https://github.com/ocaml/merlin"))]) +(mentor . [(20190511 1638) ((xml-rpc (1 6 9)) (seq (1 11)) (cl-lib (0 5)) (async (1 9 3))) "Frontend for the rTorrent bittorrent client" tar ((:commit . "b5e441b7dc077d5532a3818b5441e52baefad839") (:keywords "comm" "processes" "bittorrent") (:authors ("Stefan Kangas" . "stefankangas@gmail.com")) (:maintainer "Stefan Kangas" . "stefankangas@gmail.com"))]) +(memolist . [(20150804 1721) ((markdown-mode (22 0)) (ag (0 45))) "memolist.el is Emacs port of memolist.vim." single ((:commit . "c437a32d3955f859d9bbcbadf0911bbe27d877ff") (:keywords "markdown" "memo") (:authors ("mikanfactory ")) (:maintainer "mikanfactory") (:url . "http://github.com/mikanfactory/emacs-memolist"))]) +(memoize . [(20191004 351) nil "Memoization functions" single ((:commit . "b3129775a6d5c0d9cdacf5aede9683f5962c464e") (:authors ("Christopher Wellons" . "mosquitopsu@gmail.com")) (:maintainer "Christopher Wellons" . "mosquitopsu@gmail.com") (:url . "https://github.com/skeeto/emacs-memoize"))]) +(memento-mori . [(20190628 2147) ((emacs (24)) (cl-lib (0 5))) "Reminder of mortality" single ((:commit . "b99c5ff526079fc5a1e1be097534855da176bc2b") (:keywords "help") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:url . "https://github.com/lassik/emacs-memento-mori"))]) +(melpa-upstream-visit . [(20130720 1033) ((s (1 6 0))) "A set of kludges to visit a melpa-hosted package's homepage" single ((:commit . "7310c74fdead3c0f86ad6eff76cf989e63f70f66") (:keywords "convenience") (:authors ("Alessandro Piras" . "laynor@gmail.com")) (:maintainer "Alessandro Piras" . "laynor@gmail.com"))]) +(mellow-theme . [(20170808 1317) ((emacs (24 0))) "an Emacs 24 theme based on Mellow (tmTheme)" single ((:commit . "2bdf18f05f5212b6f269d9a94afe2cf201766891") (:authors ("Jason Milkins")) (:maintainer "Jason Milkins") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) +(melancholy-theme . [(20190620 1001) nil "No description available." single ((:commit . "3140860d0b310b6ff51b0df11de992cd65135692"))]) +(meghanada . [(20190526 548) ((emacs (24 3)) (yasnippet (0 6 1)) (company (0 9 0)) (flycheck (0 23))) "A better java development mode" tar ((:commit . "24813cf364f1c857c2ee412d0a088f0ceff53842") (:keywords "languages" "java") (:authors ("Yutaka Matsubara" . "yutaka.matsubara@gmail.com")) (:maintainer "Yutaka Matsubara" . "yutaka.matsubara@gmail.com") (:url . "https://github.com/mopemope/meghanada-emacs"))]) +(mediawiki . [(20170813 555) nil "mediawiki frontend" single ((:commit . "8473e12d1839f5287a4227586bf117dad820f867") (:keywords "mediawiki" "wikipedia" "network" "wiki") (:authors ("Mark A. Hershberger" . "mah@everybody.org")) (:maintainer "Mark A. Hershberger" . "mah@everybody.org") (:url . "https://github.com/hexmode/mediawiki-el"))]) +(md4rd . [(20191113 2108) ((emacs (25 1)) (hierarchy (0 7 0)) (request (0 3 0)) (cl-lib (0 6 1)) (dash (2 12 0)) (s (1 12 0)) (tree-mode (1 0 0))) "Mode for reddit (browse it)." single ((:commit . "ff7d95fc0fdf46a3cb6b3bbe52396dc4e474b8fd") (:keywords "ahungry" "reddit" "browse" "news") (:authors ("Matthew Carter" . "m@ahungry.com")) (:maintainer "Matthew Carter" . "m@ahungry.com") (:url . "https://github.com/ahungry/md4rd"))]) +(md-readme . [(20191112 1943) nil "Markdown-formatted READMEs for your ELisp" tar ((:commit . "ca99f44de11fab18d1f50d4b1722f2ceee3c814d") (:keywords "lisp" "help" "readme" "markdown" "header" "documentation" "github") (:authors ("Thomas Kappler" . "tkappler@gmail.com")) (:maintainer "Thomas Kappler" . "tkappler@gmail.com") (:url . "http://github.com/thomas11/md-readme/tree/master"))]) +(mc-extras . [(20181109 1735) ((multiple-cursors (1 2 1))) "Extra functions for multiple-cursors mode." tar ((:commit . "053abc52181b8718559d7361a587bbb795faf164") (:keywords "editing" "cursors") (:authors ("Akinori MUSHA" . "knu@iDaemons.org")) (:maintainer "Akinori MUSHA" . "knu@iDaemons.org") (:url . "https://github.com/knu/mc-extras.el"))]) +(mbsync . [(20191002 751) nil "run mbsync to fetch mails" single ((:commit . "b62491c0e0d89eb9c66261a16d7ac81231c9c453") (:authors ("Dimitri Fontaine" . "dim@tapoueh.org")) (:maintainer "Dimitri Fontaine" . "dim@tapoueh.org") (:url . "https://github.com/dimitri/mbsync-el"))]) +(mbo70s-theme . [(20170808 1315) ((emacs (24 0))) "70s style palette, with similarities to mbo theme" single ((:commit . "bed3db8965708ed4e9482b224a9b084765c052f2") (:authors ("Jason Milkins")) (:maintainer "Jason Milkins") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) +(mbe . [(20151126 1134) ((emacs (24)) (cl-lib (0 5))) "Macros by Example" single ((:commit . "bb10aa8f26bb7e9b1d5746934c94edb00402940c") (:keywords "tools" "macros") (:authors ("Ian Price" . "ianprice90@googlemail.com")) (:maintainer "Ian Price" . "ianprice90@googlemail.com") (:url . "https://github.com/ijp/mbe.el"))]) +(mb-url . [(20191006 1930) ((cl-lib (0))) "Multiple Backends for Emacs URL package." tar ((:commit . "7230902e1f844e0a1388f741e9ae6260cda3de69") (:url . "https://github.com/dochang/mb-url") (:keywords "url"))]) +(maxframe . [(20170120 1705) nil "maximize the emacs frame based on display size" single ((:commit . "daeb5c35bb677a23df69336b4843ea59517e57ed") (:keywords "display" "frame" "window" "maximize") (:authors ("Ryan McGeary")) (:maintainer "Ryan McGeary"))]) +(maven-test-mode . [(20141220 557) ((s (1 9)) (emacs (24))) "Utilities for navigating test files and running maven test tasks." single ((:commit . "a19151861df2ad8ae4880a2e7c86ddf848cb569a") (:keywords "java" "maven" "test") (:authors ("Renan Ranelli")) (:maintainer "Renan Ranelli") (:url . "http://github.com/rranelli/maven-test-mode"))]) +(maude-mode . [(20160222 1607) nil "Emacs mode for the programming language Maude" single ((:commit . "c9543bb8a172fa77af592388e7f520a4a6d38987") (:keywords "maude") (:authors ("Ellef Gjelstad ")) (:maintainer "Rudi Schlatte" . "rudi@constantly.at"))]) +(matlab-mode . [(20191010 653) nil "Major mode for MATLAB(R) dot-m files" tar ((:commit . "e8d02b83ee22e976c32de211b4a0f6513470c462") (:url . "http://sourceforge.net/projects/matlab-emacs/") (:keywords "matlab" "programming" "language" "(X)emacs"))]) +(math-symbols . [(20170818 1459) ((helm (1 0))) "Math Symbol Input methods and conversion tools" tar ((:commit . "3f8b466f002e1b28ddbe9a6f236c9a1352adb17d") (:keywords "i18n" "languages" "tex") (:authors ("KAWABATA, Taichi ")) (:maintainer "KAWABATA, Taichi ") (:url . "https://github.com/kawabata/math-symbols"))]) +(math-symbol-lists . [(20190605 2058) nil "Lists of Unicode math symbols and latex commands" tar ((:commit . "dc7531cff0c845d5470a50c24d5d7309b2ced7eb") (:keywords "unicode" "symbols" "mathematics") (:authors ("Vitalie Spinu" . "spinuvit@gmail.com")) (:maintainer "Vitalie Spinu" . "spinuvit@gmail.com") (:url . "https://github.com/vspinu/math-symbol-lists"))]) +(material-theme . [(20171123 1840) ((emacs (24 1))) "A Theme based on the colors of the Google Material Design" tar ((:commit . "b66838d220ad380a16da1d8878936974b26f815d") (:keywords "themes") (:authors ("Christoph Paulik" . "cpaulik@gmail.com")) (:maintainer "Christoph Paulik" . "cpaulik@gmail.com") (:url . "http://github.com/cpaulik/emacs-material-theme"))]) +(mastodon . [(20190305 344) ((emacs (24 4))) "Client for Mastodon" tar ((:commit . "5095797ef32b922d2a624fa6beb970b5e9cf5ca0") (:authors ("Johnson Denen" . "johnson.denen@gmail.com")) (:maintainer "Johnson Denen" . "johnson.denen@gmail.com") (:url . "https://github.com/jdenen/mastodon.el"))]) +(maruo-macro-mode . [(20160616 1349) ((emacs (24 3))) "Major mode for editing Hidemaru/Maruo macro script" single ((:commit . "8fc9a38ad051eafa8eb94038711acc52c5d1d8d5") (:keywords "programming" "editor" "macro") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me"))]) +(marshal . [(20180124 1239) ((eieio (1 4)) (json (1 3)) (ht (2 1))) "eieio extension for automatic (un)marshalling" single ((:commit . "f038689cbd5b3680b80b44edd0c7a63ca3038e26") (:keywords "eieio") (:authors ("Yann Hodique" . "hodiquey@vmware.com")) (:maintainer "Yann Hodique" . "hodiquey@vmware.com") (:url . "https://github.com/sigma/marshal.el"))]) +(marquee-header . [(20191017 1017) ((emacs (25 1))) "Code interface for displaying marquee in header." single ((:commit . "77e4becd8a812377eb219c77641a22a77b4fdfef") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:url . "https://github.com/jcs090218/marquee-header"))]) +(marmalade-client . [(20141231 2007) ((web (0 5 2)) (kv (0 0 19)) (gh (0 8 0))) "client for marmalade API from emacs" tar ((:commit . "f315dea57e4fbebd9ee0668c0bafd4c45c7b754a") (:keywords "lisp") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:url . "https://github.com/nicferrier/emacs-marmalade-upload"))]) +(markup-faces . [(20141110 817) nil "collection of faces for markup language modes" single ((:commit . "98a807ed82473eb41c6a201ed7ef816d6bcd67b0") (:keywords "wp" "faces") (:authors ("Florian Kaufmann" . "sensorflo@gmail.com")) (:maintainer "Florian Kaufmann" . "sensorflo@gmail.com") (:url . "https://github.com/sensorflo/markup-faces"))]) +(markup . [(20170420 1129) ((cl-lib (0 5))) "Simple markup generation helpers." single ((:commit . "876da2d3f23473475bb0fd0a1480ae11d2671291") (:keywords "convenience" "markup" "html") (:authors ("Arthur Leonard Andersen" . "leoc.git@gmail.com")) (:maintainer "Arthur Leonard Andersen" . "leoc.git@gmail.com") (:url . "http://github.com/leoc/markup.el"))]) +(markless . [(20190306 1002) ((emacs (24 4))) "Major mode for Markless documents" single ((:commit . "75fdef45df96978e9326ea4d9bf4e534a250c4c0") (:keywords "languages" "wp") (:authors ("Nicolas Hafner" . "shinmera@tymoon.eu")) (:maintainer "Nicolas Hafner" . "shinmera@tymoon.eu") (:url . "http://github.com/shirakumo/markless.el/"))]) +(markdownfmt . [(20160609 1241) ((emacs (24))) "Format markdown using markdownfmt" single ((:commit . "187a74eb4fd9e8520ce08da42d1d292b9af7f2b7") (:keywords "markdown") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:url . "https://github.com/nlamirault/emacs-markdownfmt"))]) +(markdown-toc . [(20170711 1949) ((s (1 9 0)) (dash (2 11 0)) (markdown-mode (2 1))) "A simple TOC generator for markdown file" tar ((:commit . "7038f4f6d5c2bc7e4aea89699a607ac2b7dd16a8"))]) +(markdown-preview-mode . [(20181213 1339) ((emacs (24 3)) (websocket (1 6)) (markdown-mode (2 0)) (cl-lib (0 5)) (web-server (0 1 1))) "markdown realtime preview minor mode." tar ((:commit . "f98d9114ca87e3e8e5ce70e601d13061eda15415") (:keywords "markdown" "gfm" "convenience") (:authors ("Igor Shymko" . "igor.shimko@gmail.com")) (:maintainer "Igor Shymko" . "igor.shimko@gmail.com") (:url . "https://github.com/ancane/markdown-preview-mode"))]) +(markdown-preview-eww . [(20160111 1502) ((emacs (24 4))) "Realtime preview by eww" single ((:commit . "5853f836425c877c8a956501f0adda137ef1d3b7") (:authors ("niku" . "niku@niku.name")) (:maintainer "niku" . "niku@niku.name") (:url . "https://github.com/niku/markdown-preview-eww"))]) +(markdown-mode . [(20190802 2215) ((emacs (24 4)) (cl-lib (0 5))) "Major mode for Markdown-formatted text" single ((:commit . "f3c54e34cc5228001af36a5301883325319f21d4") (:keywords "markdown" "github flavored markdown" "itex") (:authors ("Jason R. Blevins" . "jblevins@xbeta.org")) (:maintainer "Jason R. Blevins" . "jblevins@xbeta.org") (:url . "https://jblevins.org/projects/markdown-mode/"))]) +(markdown-mode+ . [(20170320 2104) ((markdown-mode (20111229))) "extra functions for markdown-mode" tar ((:commit . "411d079f4430a33c34ec0bbcb1535fe1145a2509") (:keywords "markdown" "latex" "osx" "rtf") (:authors ("Donald Ephraim Curtis")) (:maintainer "Donald Ephraim Curtis") (:url . "http://github.com/milkypostman/markdown-mode-plus"))]) +(mark-tools . [(20130614 1025) nil "Some simple tools to access the mark-ring in Emacs" single ((:commit . "a11b61effa90bd0abc876d12573674d36fc17f0c") (:authors ("Alex Bennée" . "alex@bennee.com")) (:maintainer "Alex Bennée" . "alex@bennee.com") (:url . "https://github.com/stsquad/emacs-mark-tools"))]) +(mark-thing-at . [(20190817 1623) ((emacs (26)) (choice-program (0 9))) "Mark a pattern at the current point" single ((:commit . "0d2220fdc81c33a36ab5f136856f9f2f79cd01a7") (:keywords "mark" "point" "lisp") (:authors ("Paul Landes")) (:maintainer "Paul Landes") (:url . "https://github.com/plandes/mark-thing-at"))]) +(mark-multiple . [(20121118 1554) nil "Sorta lets you mark several regions at once." tar ((:commit . "f6a53c7c5283d640ae718f4548b0fda78877a375"))]) +(marcopolo . [(20160421 1004) ((s (1 9 0)) (dash (2 9 0)) (pkg-info (0 5 0)) (request (0 1 0))) "Emacs client to the Docker HUB/Registry API" tar ((:commit . "9193aabdf12223087b5ed58f1507d5d8a24a4381") (:keywords "docker") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:url . "https://github.com/nlamirault/marcopolo"))]) +(map-regexp . [(20190128 18) ((cl-lib (0 6 1))) "map over matches of a regular expression" single ((:commit . "ae2d1c22f786ad987aef3e319925e80160a887a0") (:keywords "convenience") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/tarsius/map-regexp"))]) +(map-progress . [(20190128 16) ((cl-lib (0 6 1))) "mapping macros that report progress" single ((:commit . "1fb916159cd054c233ce3c80d9d01adfae640297") (:keywords "convenience") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/tarsius/map-progress"))]) +(mandoku-tls . [(20171118 240) ((emacs (24 4)) (mandoku (20170301)) (github-clone (0 2)) (hydra (0 13 6)) (helm (1 7 0)) (org (9 0)) (helm-charinfo (20170601))) "A tool to access the TLS database" single ((:commit . "ffeebf5bd451ac1806ddfe1744fbbd036a56f902") (:keywords "convenience") (:authors ("Christian Wittern" . "cwittern@gmail.com")) (:maintainer "Christian Wittern" . "cwittern@gmail.com") (:url . "https://github.com/mandoku/mandoku-tls"))]) +(mandoku . [(20180403 1106) ((org (8 0)) (magit (20151028)) (github-clone (20150705)) (git (20140128))) "A tool to access repositories of premodern Chinese texts" tar ((:commit . "d65dbaa329ecf931f4142be72862972ea6a24e63"))]) +(mandm-theme . [(20191112 1832) nil "An M&M color theme." single ((:commit . "4e6ce4f222c1fa175d56e926628f37caa5f398ce") (:authors ("Christian Hopps" . "chopps@gmail.com")) (:maintainer "Christian Hopps" . "chopps@gmail.com") (:url . "https://github.com/choppsv1/emacs-mandm-theme.git"))]) +(manage-minor-mode . [(20140310 1600) ((emacs (24 3))) "Manage your minor-modes easily" single ((:commit . "1bed33b0752380b548b822fe72e6858c5fe70c8e") (:keywords "minor-mode" "manage" "emacs") (:authors ("Shingo Fukuyama - http://fukuyama.co")) (:maintainer "Shingo Fukuyama - http://fukuyama.co") (:url . "https://github.com/ShingoFukuyama/manage-minor-mode"))]) +(man-commands . [(20151221 2221) ((cl-lib (0 5))) "Add interactive commands for every manpages installed in your computer." single ((:commit . "f4ba0c3790855d7544dff92d470d212f24de1d9d") (:authors ("Nathaniel Flath" . "nflath@gmail.com")) (:maintainer "Nathaniel Flath" . "nflath@gmail.com") (:url . "http://github.com/nflath/man-commands"))]) +(malyon . [(20161208 2125) ((cl-lib (0 5))) "mode to execute Z-code files version 3, 5, 8" single ((:commit . "0d9882650720b4a791556f5e2d917388965d6fc0") (:keywords "games" "emulations") (:authors ("Peter Ilberg , Christopher Madsen , Erik Selberg" . "erik@selberg.org")) (:maintainer "Christopher Madsen , Erik Selberg" . "erik@selberg.org") (:url . "https://github.com/speedenator/malyon"))]) +(mallard-snippets . [(20131023 1851) ((yasnippet (0 8 0)) (mallard-mode (0 1 1))) "Yasnippets for Mallard" tar ((:commit . "70c5293f10722f2ace73bdf74d9a18f95b040edc") (:keywords "snippets" "mallard") (:authors ("Jaromir Hradilek" . "jhradilek@gmail.com")) (:maintainer "Jaromir Hradilek" . "jhradilek@gmail.com") (:url . "https://github.com/jhradilek/emacs-mallard-snippets"))]) +(mallard-mode . [(20131204 425) nil "Major mode for editing Mallard files" tar ((:commit . "c48170c1ace4959abcc5fb1df0d4cb149cff44c1") (:keywords "xml" "mallard") (:authors ("Jaromir Hradilek" . "jhradilek@gmail.com")) (:maintainer "Jaromir Hradilek" . "jhradilek@gmail.com") (:url . "https://github.com/jhradilek/emacs-mallard-mode"))]) +(malinka . [(20171202 1021) ((s (1 9 0)) (dash (2 4 0)) (f (0 11 0)) (cl-lib (0 3)) (rtags (0 0)) (projectile (0 11 0))) "A C/C++ project configuration package for Emacs" single ((:commit . "d4aa517c7a9022eae16c758c7efdb3a0403542d7") (:keywords "c" "c++" "project-management") (:authors ("Lefteris Karapetsas" . "lefteris@refu.co")) (:maintainer "Lefteris Karapetsas" . "lefteris@refu.co") (:url . "https://github.com/LefterisJP/malinka"))]) +(makey . [(20131231 1430) ((cl-lib (0 2))) "interactive commandline mode" single ((:commit . "a61781e69d3b451551e269446e1c5f624ab81137") (:authors ("Mickey Petersen" . "mickey@masteringemacs.org")) (:maintainer "Mickey Petersen" . "mickey@masteringemacs.org"))]) +(makefile-executor . [(20180720 832) ((emacs (24 3)) (dash (2 11 0)) (f (0 11 0)) (s (1 10 0))) "Commands for conveniently running makefile targets" single ((:commit . "9a7d78f814a4b372d8f8179819cb1b37b83b1973") (:keywords "processes") (:authors ("Lowe Thiderman" . "lowe.thiderman@gmail.com")) (:maintainer "Lowe Thiderman" . "lowe.thiderman@gmail.com") (:url . "https://github.com/thiderman/makefile-executor.el"))]) +(make-it-so . [(20190625 1036) ((swiper (0 8 0)) (emacs (24))) "Transform files with Makefile recipes." tar ((:commit . "b73dfb640588123c9eece230ad72b37604f5c126") (:keywords "make" "dired") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/make-it-so"))]) +(make-color . [(20140625 1150) nil "Alternative to picking color - update fg/bg color by pressing r/g/b/... keys" single ((:commit . "5ca1383ca9228bca82120b238bdc119f302b75c0") (:keywords "color") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:url . "https://github.com/alezost/make-color.el"))]) +(major-mode-icons . [(20170301 714) ((emacs (24 3)) (powerline (2 4)) (all-the-icons (2 3 0))) "display icon for major-mode on mode-line." tar ((:commit . "e6117a236b2ad52e948576550b183053321dfc91") (:keywords "frames" "multimedia") (:url . "http://github.com/stardiviner/major-mode-icons"))]) +(major-mode-hydra . [(20191014 337) ((dash (2 15 0)) (pretty-hydra (0 2 2)) (emacs (25))) "Major mode keybindings managed by Hydra" single ((:commit . "fd362d2be7ed80889715ed8a30a61780a18ce6ea") (:authors ("Jerry Peng" . "pr2jerry@gmail.com")) (:maintainer "Jerry Peng" . "pr2jerry@gmail.com") (:url . "https://github.com/jerrypnz/major-mode-hydra.el"))]) +(majapahit-theme . [(20160817 1848) nil "Color theme with a dark and light versions" tar ((:commit . "77c96df7619666b2102d90d452eeadf04adc89a6") (:keywords "color" "theme") (:url . "https://gitlab.com/franksn/majapahit-theme"))]) +(magnatune . [(20151030 1935) ((dash (2 9 0)) (s (1 9 0))) "browse magnatune's music catalog" tar ((:commit . "605b01505ba30589c77ebb4c96834b5072ccbdd4"))]) +(magma-mode . [(20181205 1708) ((cl-lib (0 3)) (dash (2 6 0)) (f (0 17 1))) "Magma mode for Emacs" tar ((:commit . "9b734abbdf15fddecb58dc9eed1cbc39b78be2e1") (:url . "https://github.com/ThibautVerron/magma-mode"))]) +(magithub . [(20190512 2316) ((emacs (25)) (magit (2 12)) (s (1 12 0)) (ghub+ (0 3)) (git-commit (2 12)) (markdown-mode (2 3))) "Magit interfaces for GitHub" tar ((:commit . "9fb9c653d0dad3da7ccff3ae321fa6e54c08f41b") (:keywords "git" "tools" "vc") (:authors ("Sean Allred" . "code@seanallred.com")) (:maintainer "Sean Allred" . "code@seanallred.com") (:url . "https://github.com/vermiculus/magithub"))]) +(magit-vcsh . [(20190817 2014) ((magit (2 90 1)) (vcsh (0 4)) (emacs (24 4))) "Magit vcsh integration" single ((:commit . "fcff128cdbe3ef547dc64f2496cb6405b8ee21ca") (:keywords "vc" "files" "magit") (:authors ("Å tÄ›pán NÄ›mec" . "stepnem@gmail.com")) (:maintainer "Å tÄ›pán NÄ›mec" . "stepnem@gmail.com") (:url . "https://gitlab.com/stepnem/magit-vcsh-el"))]) +(magit-topgit . [(20160313 1954) ((emacs (24 4)) (magit (2 1 0))) "TopGit extension for Magit" single ((:commit . "11489ea798bc88d0ea5244bbf725285eedfefbef") (:keywords "vc" "tools") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainer "Robin Green" . "greenrd@greenrd.org"))]) +(magit-todos . [(20190907 1321) ((emacs (25 2)) (async (1 9 2)) (dash (2 13 0)) (f (0 17 2)) (hl-todo (1 9 0)) (magit (2 13 0)) (pcre2el (1 8)) (s (1 12 0))) "Show source file TODOs in Magit" single ((:commit . "a80dace2bf8bf3e697e3e8421189996adcecc900") (:keywords "magit" "vc") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "http://github.com/alphapapa/magit-todos"))]) +(magit-tbdiff . [(20190918 6) ((emacs (24 4)) (magit (2 10 0))) "Magit extension for range diffs" single ((:commit . "2b08d93c5ead14f34f9cc3c3140ecf25b1531151") (:keywords "vc" "tools") (:authors ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainer "Kyle Meyer" . "kyle@kyleam.com") (:url . "https://github.com/magit/magit-tbdiff"))]) +(magit-svn . [(20190821 1455) ((emacs (24 4)) (magit (2 1 0))) "Git-Svn extension for Magit" single ((:commit . "2cff1a30a30f2b3963342a7d185ec13fc12279c3") (:keywords "vc" "tools") (:authors ("Phil Jackson" . "phil@shellarchive.co.uk")) (:maintainer "Phil Jackson" . "phil@shellarchive.co.uk"))]) +(magit-stgit . [(20190313 1158) nil "No description available." single ((:commit . "8294f34e4927798d9db883cafe946a9041b7e331"))]) +(magit-reviewboard . [(20190211 2244) ((emacs (25 2)) (magit (2 13 0)) (s (1 12 0)) (request (0 3 0))) "Show open Reviewboard reviews in Magit" single ((:commit . "f3d5ed914243e3930f9c06f59021305e7e43e67d") (:keywords "magit" "vc") (:authors ("Jules Tamagnan" . "jtamagnan@gmail.com")) (:maintainer "Jules Tamagnan" . "jtamagnan@gmail.com") (:url . "http://github.com/jtamagnan/magit-reviewboard"))]) +(magit-rbr . [(20181009 2016) ((magit (2 13 0)) (emacs (24 3))) "Support for git rbr in Magit" single ((:commit . "029203b3e48537205052a058e964f058cd802c3c") (:keywords "git" "magit" "rbr" "tools") (:authors ("Anatoly Fayngelerin" . "fanatoly+magitrbr@gmail.com")) (:maintainer "Anatoly Fayngelerin" . "fanatoly+magitrbr@gmail.com") (:url . "https://github.com/fanatoly/magit-rbr"))]) +(magit-popup . [(20190223 2234) ((emacs (24 4)) (async (1 9 2)) (dash (2 13 0))) "Define prefix-infix-suffix command combos" tar ((:commit . "4250c3a606011e3ff2477e3b5bbde2b493f3c85c") (:keywords "bindings") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/magit-popup"))]) +(magit-p4 . [(20170414 1246) ((magit (2 1)) (magit-popup (2 1)) (p4 (12 0)) (cl-lib (0 5))) "git-p4 plug-in for Magit" single ((:commit . "cdc05f2d564409baac9ca15b1a2a0110a6ff12b7") (:keywords "vc" "tools") (:authors ("Damian T. Dobroczy\\\\'nski" . "qoocku@gmail.com")) (:maintainer "Aleksey Fedotov" . "lexa@cfotr.com") (:url . "https://github.com/qoocku/magit-p4"))]) +(magit-org-todos . [(20180709 1950) ((magit (2 0 0)) (emacs (24))) "Add local todo items to the magit status buffer" single ((:commit . "9ffa3efb098434d837cab4bacd1601fdfc6fe999") (:keywords "org-mode" "magit" "tools") (:authors ("Daniel Ma")) (:maintainer "Daniel Ma") (:url . "http://github.com/danielma/magit-org-todos"))]) +(magit-libgit . [(20190419 1545) ((emacs (26 1)) (magit (0)) (libgit (0))) "Libgit functionality" single ((:commit . "5560f91fa51cb6a9add0cfb4dc2cf2635f5ae5bc") (:keywords "git" "tools" "vc") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/magit"))]) +(magit-lfs . [(20190831 118) ((emacs (24 4)) (magit (2 10 3)) (dash (2 13 0))) "Magit plugin for Git LFS" single ((:commit . "75bf6d3310eae24889589a09e96a4a855e1a11c4") (:keywords "magit" "git" "lfs" "tools" "vc") (:authors ("Junyoung Clare Jang" . "jjc9310@gmail.com")) (:maintainer "Junyoung Clare Jang" . "jjc9310@gmail.com") (:url . "https://github.com/ailrun/magit-lfs"))]) +(magit-imerge . [(20191105 2245) ((emacs (24 4)) (magit (2 10 0))) "Magit extension for git-imerge" single ((:commit . "a7357ab87c89187234fe333bb869727c417638d1") (:keywords "vc" "tools") (:authors ("Kyle Meyer" . "kyle@kyleam.com")) (:maintainer "Kyle Meyer" . "kyle@kyleam.com") (:url . "https://github.com/magit/magit-imerge"))]) +(magit-gitflow . [(20170929 824) ((magit (2 1 0)) (magit-popup (2 2 0))) "gitflow extension for magit" single ((:commit . "cc41b561ec6eea947fe9a176349fb4f771ed865b") (:keywords "vc" "tools") (:authors ("Jan Tatarik" . "Jan.Tatarik@gmail.com")) (:maintainer "Jan Tatarik" . "Jan.Tatarik@gmail.com") (:url . "https://github.com/jtatarik/magit-gitflow"))]) +(magit-gh-pulls . [(20180716 1636) ((emacs (24 4)) (gh (0 9 1)) (magit (2 12 0)) (pcache (0 2 3)) (s (1 6 1))) "GitHub pull requests extension for Magit" single ((:commit . "6949e973f3e951cb0bfe75d889e0fcccc33ba733") (:keywords "git" "tools") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainer "Yann Hodique" . "yann.hodique@gmail.com") (:url . "https://github.com/sigma/magit-gh-pulls"))]) +(magit-gerrit . [(20160226 930) ((magit (2 3 1))) "Magit plugin for Gerrit Code Review" single ((:commit . "ece6f369694aca17f3ac166ed2801b432acfe20d") (:authors ("Brian Fransioli" . "assem@terranpro.org")) (:maintainer "Brian Fransioli" . "assem@terranpro.org") (:url . "https://github.com/terranpro/magit-gerrit"))]) +(magit-find-file . [(20150702 830) ((magit (2 1 0)) (dash (2 8 0))) "completing-read over all files in Git" single ((:commit . "c3ea91bab37d10a814a829728ec972811f728d60") (:keywords "git") (:authors ("Bradley Wright" . "brad@intranation.com")) (:maintainer "Bradley Wright" . "brad@intranation.com") (:url . "https://github.com/bradleywright/magit-find-file.el"))]) +(magit-filenotify . [(20151116 2340) ((magit (1 3 0)) (emacs (24 4))) "Refresh status buffer when git tree changes" single ((:commit . "c0865b3c41af20b6cd89de23d3b0beb54c8401a4") (:keywords "tools") (:authors ("Rüdiger Sonderfeld" . "ruediger@c-plusplus.de")) (:maintainer "Rüdiger Sonderfeld" . "ruediger@c-plusplus.de"))]) +(magit-diff-flycheck . [(20190524 551) ((magit (2)) (flycheck (31)) (seq (2)) (emacs (25 1))) "Report errors in diffs" single ((:commit . "28acf74f59e385865746cccf4b1e4c4025ae9433") (:keywords "convenience" "matching") (:authors ("Alex Ragone" . "ragonedk@gmail.com")) (:maintainer "Alex Ragone" . "ragonedk@gmail.com") (:url . "https://github.com/ragone/magit-diff-flycheck"))]) +(magit-circleci . [(20190814 1723) ((dash (2 16 0)) (transient (0 1 0)) (magit (2 90 0)) (emacs (25 3))) "CircleCI integration for Magit" single ((:commit . "03101bd9cdbdfd779471a4c6d3d00ebadc8ca4a2") (:keywords "circleci" "continuous" "integration" "magit" "vc" "tools") (:authors ("Adrien Brochard")) (:maintainer "Adrien Brochard") (:url . "https://github.com/abrochard/magit-circleci"))]) +(magit-annex . [(20190421 241) ((cl-lib (0 3)) (magit (2 90 0))) "Control git-annex from Magit" single ((:commit . "d5d819c609256a3b7b11ccaf6664be61aa3597b6") (:keywords "vc" "tools") (:authors ("Kyle Meyer" . "kyle@kyleam.com") ("Rémi Vanicat" . "vanicat@debian.org")) (:maintainer "Kyle Meyer" . "kyle@kyleam.com") (:url . "https://github.com/magit/magit-annex"))]) +(magit . [(20191122 2040) ((emacs (25 1)) (async (20180527)) (dash (20180910)) (git-commit (20181104)) (transient (20190812)) (with-editor (20181103))) "A Git porcelain inside Emacs." tar ((:commit . "5560f91fa51cb6a9add0cfb4dc2cf2635f5ae5bc") (:keywords "git" "tools" "vc"))]) +(magik-mode . [(20191119 2050) nil "mode for editing Magik + some utils." tar ((:commit . "11ea02254f2bdfaecc12a75545c558fd37b98954") (:keywords "languages") (:url . "http://github.com/roadrunner1776/magik"))]) +(magic-latex-buffer . [(20191106 241) ((cl-lib (0 5)) (emacs (24 3))) "Magically enhance LaTeX-mode font-locking for semi-WYSIWYG editing" single ((:commit . "8597f4db70732d6e479396e2f2a7e78742387253") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) +(magic-filetype . [(20180219 1552) ((emacs (24)) (s (1 9 0))) "Enhance filetype major mode" single ((:commit . "019494add5ff02dd36cb3f500142fc51125522cc") (:keywords "emulations" "vim" "ft" "file" "magic-mode") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:url . "https://github.com/zonuexe/magic-filetype.el"))]) +(mag-menu . [(20150505 1850) ((splitter (0 1 0))) "Intuitive keyboard-centric menu system" single ((:commit . "9b9277021cd09fb1dba64b1d2a00705d20914bd6") (:keywords "convenience") (:authors ("Steven Thomas")) (:maintainer "Steven Thomas") (:url . "https://github.com/chumpage/mag-menu"))]) +(madhat2r-theme . [(20170203 30) ((emacs (24))) "dark color theme that is easy on the eyes" single ((:commit . "6b387f09de055cfcc15d74981cd4f32f8f9a7323") (:keywords "color" "theme") (:authors ("Micah Duke")) (:maintainer "Micah Duke") (:url . "https://github.com/madhat2r/madhat2r-theme"))]) +(macrostep . [(20161120 2106) ((cl-lib (0 5))) "interactive macro expander" tar ((:commit . "424e3734a1ee526a1bd7b5c3cd1d3ef19d184267") (:keywords "lisp" "languages" "macro" "debugging") (:authors ("joddie" . "j.j.oddie@gmail.com")) (:maintainer "joddie" . "j.j.oddie@gmail.com") (:url . "https://github.com/joddie/macrostep"))]) +(macro-math . [(20130328 1604) nil "in-buffer mathematical operations" single ((:commit . "216e59371e9ee39c34117ba79b9acd78bb415750") (:keywords "convenience") (:authors ("Nikolaj Schumacher ")) (:maintainer "Nikolaj Schumacher ") (:url . "http://nschum.de/src/emacs/macro-math/"))]) +(maces-game . [(20170903 1551) ((dash (2 12 0)) (cl-lib (0 5)) (emacs (24))) "another anagram game." tar ((:commit . "c0fb795f5642467ea528d2f04d904547e8a77ecd") (:keywords "games" "word games" "anagram") (:authors ("Pawel Bokota" . "pawelb.lnx@gmail.com")) (:maintainer "Pawel Bokota" . "pawelb.lnx@gmail.com") (:url . "https://github.com/pawelbx/anagram-game"))]) +(mac-pseudo-daemon . [(20170728 1940) ((cl-lib (0 1))) "Daemon mode that plays nice with Mac OS." single ((:commit . "d235680a72677f11925b912428ad1a57b664e3e8") (:keywords "convenience" "osx" "mac") (:authors ("Ryan C. Thompson")) (:maintainer "Ryan C. Thompson") (:url . "https://github.com/DarwinAwardWinner/osx-pseudo-daemon"))]) +(m-buffer . [(20170407 2141) ((seq (2 14))) "List-Oriented, Functional Buffer Manipulation" tar ((:commit . "8681342aaffa187e5c54945ab91b812965a96d19") (:authors ("Phillip Lord" . "phillip.lord@russet.org.uk")) (:maintainer "Phillip Lord" . "phillip.lord@russet.rg.uk"))]) +(lyrics . [(20180812 1841) ((emacs (25 1)) (seq (2 15))) "Show lyrics" single ((:commit . "d0b920be634a5be81ad49418cfaada0f0a57d6cd") (:keywords "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:url . "https://github.com/emacs-pe/lyrics.el"))]) +(lxd-tramp . [(20181023 7) ((emacs (24 4)) (cl-lib (0 6))) "TRAMP integration for LXD containers" single ((:commit . "f335c76245f62b02cf67a9376eca6f3863c8a75a") (:keywords "lxd" "lxc" "convenience") (:authors ("Yc.S" . "onixie@gmail.com")) (:maintainer "Yc.S" . "onixie@gmail.com") (:url . "https://github.com/onixie/lxd-tramp.git"))]) +(lxc-tramp . [(20180523 2024) ((emacs (24)) (cl-lib (0 6))) "TRAMP integration for LXC containers" single ((:commit . "1aab85fef50df2067902bff13e1bac5e6366908b") (:keywords "lxc" "convenience") (:authors ("montag451")) (:maintainer "montag451") (:url . "https://github.com/montag451/lxc-tramp"))]) +(lxc . [(20140410 2022) nil "lxc integration with Emacs" single ((:commit . "88bed56c954d1edd9ff5ce0ced2c02dcf9f71835") (:keywords "processes") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk") (:url . "https://github.com/nicferrier/emacs-lxc"))]) +(lv . [(20191106 1238) nil "Other echo area" single ((:commit . "d38c63d3d85a06fd34b28626d7ebd97bb05db48c") (:authors ("Oleh Krehel")) (:maintainer "Oleh Krehel"))]) +(lusty-explorer . [(20191115 1552) ((cl-lib (0)) (dired (0))) "Dynamic filesystem explorer and buffer switcher" single ((:commit . "4197a5e4e32f8bc2a94f7777ec6cc12279a1000c") (:keywords "convenience" "files" "matching" "tools") (:url . "https://github.com/sjbach/lusty-emacs"))]) +(lush-theme . [(20180816 2200) ((emacs (24))) "A dark theme with lush colors" single ((:commit . "7cfc993709d712f75c51b505078608c9e1c11466") (:keywords "theme" "dark" "strong colors") (:authors ("Andre Richter" . "andre.o.richter@gmail.com")) (:maintainer "Andre Richter" . "andre.o.richter@gmail.com") (:url . "https://github.com/andre-richter/emacs-lush-theme"))]) +(luarocks . [(20170430 2305) ((emacs (24)) (cl-lib (0 5))) "luarocks tools" single ((:commit . "cee27ba0716edf338077387969883226dd2b7484") (:keywords "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:url . "https://github.com/emacs-pe/luarocks.el"))]) +(lua-mode . [(20191111 809) nil "a major-mode for editing Lua scripts" tar ((:commit . "dc302400e38d19cf2bd94d0c30d659ffaf10c6d2") (:keywords "languages" "processes" "tools") (:authors ("2011-2013 immerrr" . "immerrr+lua@gmail.com") ("2010-2011 Reuben Thomas" . "rrt@sc3d.org") ("2006 Juergen Hoetzel" . "juergen@hoetzel.info") ("2004 various (support for Lua 5 and byte compilation)") ("2001 Christian Vogler" . "cvogler@gradient.cis.upenn.edu") ("1997 Bret Mogilefsky" . "mogul-lua@gelatinous.com") ("tcl-mode by Gregor Schmid" . "schmid@fb3-s7.math.tu-berlin.de") ("with tons of assistance from") ("Paul Du Bois" . "pld-lua@gelatinous.com") ("Aaron Smith" . "aaron-lua@gelatinous.com")) (:maintainer "2011-2013 immerrr" . "immerrr+lua@gmail.com") (:url . "http://immerrr.github.com/lua-mode"))]) +(lsp-ui . [(20191122 1942) ((emacs (25 1)) (dash (2 14)) (dash-functional (1 2 0)) (lsp-mode (6 0)) (markdown-mode (2 3))) "UI modules for lsp-mode" tar ((:commit . "c5a9221ac67f060a3f4e4be526893afee629b14f") (:keywords "lsp") (:authors ("Sebastien Chapuis , Fangrui Song" . "i@maskray.me")) (:maintainer "Sebastien Chapuis , Fangrui Song" . "i@maskray.me") (:url . "https://github.com/emacs-lsp/lsp-ui"))]) +(lsp-treemacs . [(20191121 1951) ((emacs (25 1)) (dash (2 14 1)) (dash-functional (2 14 1)) (f (0 20 0)) (ht (2 0)) (treemacs (2 5)) (lsp-mode (6 0))) "LSP treemacs" tar ((:commit . "ee56c75ea342e6d5803518f7b577e0039c93e032") (:keywords "languages") (:authors ("Ivan Yonchovski")) (:maintainer "Ivan Yonchovski") (:url . "https://github.com/emacs-lsp/lsp-treemacs"))]) +(lsp-sourcekit . [(20181216 1450) ((emacs (25 1)) (lsp-mode (5))) "sourcekit-lsp client for lsp-mode" single ((:commit . "04d75b6a0be5894fea4a55fec0b2ccedf5b3be58") (:keywords "languages" "lsp" "swift" "objective-c" "c++") (:authors ("Daniel Martín")) (:maintainer "Daniel Martín") (:url . "https://github.com/emacs-lsp/lsp-sourcekit"))]) +(lsp-scala . [(20190604 1237) ((emacs (24 4)) (lsp-mode (5 0)) (sbt-mode (2 0))) "Scala support for lsp-mode" single ((:commit . "06f189aa5cafe93cecbdaa234bccd900def7bc68") (:keywords "languages" "tools" "scala" "lsp" "metals") (:authors ("Ross A. Baker" . "ross@rossabaker.com")) (:maintainer "Ross A. Baker" . "ross@rossabaker.com") (:url . "https://github.com/rossabaker/lsp-scala"))]) +(lsp-python-ms . [(20191119 1605) ((emacs (25 1)) (cl-lib (0 6 1)) (lsp-mode (6 0))) "The lsp-mode client for Microsoft python-language-server" single ((:commit . "d8fa9d9eea03a457eaf9944c6188107ff2ed342c") (:keywords "languages" "tools") (:authors ("Charl Botha")) (:maintainer "Andrew Christianson, Vincent Zhang") (:url . "https://github.com/andrew-christianson/lsp-python-ms"))]) +(lsp-pyre . [(20190406 335) ((lsp-mode (6 0))) "lsp-mode client for python using pyre" single ((:commit . "e177b8f5efd1a955b5753aeb5d1894e6d21be35a") (:authors ("John Allen" . "oss@porcnick.com")) (:maintainer "John Allen" . "oss@porcnick.com") (:url . "https://github.com/jra3/lsp-pyre"))]) +(lsp-p4 . [(20190127 1049) ((lsp-mode (3 0))) "P4 support for lsp-mode" tar ((:commit . "54dd19d88cd561061ac3103dc452d6854e5899fa") (:keywords "lsp" "p4") (:authors ("Dmitri Makarov")) (:maintainer "Dmitri Makarov") (:url . "https://github.com/dmakarov/p4ls"))]) +(lsp-origami . [(20190331 1723) ((origami (1 0)) (lsp-mode (20190326 522))) "origami.el support for lsp-mode" single ((:commit . "c7653602a2f2396b1a42d6053fd2be55fce8e0a2") (:keywords "languages" "lsp-mode") (:authors ("Vibhav Pant")) (:maintainer "Vibhav Pant") (:url . "https://github.com/emacs-lsp/lsp-origami"))]) +(lsp-mode . [(20191121 1005) ((emacs (25 1)) (dash (2 14 1)) (dash-functional (2 14 1)) (f (0 20 0)) (ht (2 0)) (spinner (1 7 3)) (markdown-mode (2 3))) "LSP mode" tar ((:commit . "39fca2d9ef944f56b86d1ad761370064ed5ff2fd") (:keywords "languages") (:authors ("Vibhav Pant, Fangrui Song, Ivan Yonchovski")) (:maintainer "Vibhav Pant, Fangrui Song, Ivan Yonchovski") (:url . "https://github.com/emacs-lsp/lsp-mode"))]) +(lsp-julia . [(20191011 1005) ((emacs (25 1)) (lsp-mode (6 0)) (julia-mode (0 3))) "Julia support for lsp-mode" tar ((:commit . "da66e78eb601b1652c3a9096e0ceea6b852aa6a0") (:keywords "languages" "tools") (:authors ("Martin Wolke" . "vibhavp@gmail.com") ("Adam Beckmeyer" . "adam_git@thebeckmeyers.xyz") ("Guido Kraemer" . "gdkrmr@users.noreply.github.com")) (:maintainer "Adam Beckmeyer" . "adam_git@thebeckmeyers.xyz") (:url . "https://github.com/non-Jedi/lsp-julia"))]) +(lsp-javacomp . [(20190124 1755) ((emacs (25 1)) (lsp-mode (3 0)) (s (1 2 0))) "Provide Java IDE features powered by JavaComp." single ((:commit . "82aa4ad6ca03a74565c35e855b318b1887bcd89b") (:keywords "java" "tools" "lsp") (:url . "https://github.com/tigersoldier/lsp-javacomp"))]) +(lsp-java . [(20191115 1712) ((emacs (25 1)) (lsp-mode (6 0)) (markdown-mode (2 3)) (dash (2 14 1)) (f (0 20 0)) (ht (2 0)) (dash-functional (1 2 0)) (request (0 3 0)) (treemacs (2 5))) "Java support for lsp-mode" tar ((:commit . "b77a30eea684cae47e71e3a560f3b549a3cf09b8") (:keywords "java") (:url . "https://github.com/emacs-lsp/lsp-java"))]) +(lsp-ivy . [(20191028 902) ((emacs (25 1)) (dash (2 14 1)) (lsp-mode (5 0)) (ivy (0 13 0))) "LSP ivy integration" single ((:commit . "78c1429c62c19006058b89d462657e1448d1e595") (:keywords "languages" "debug") (:authors ("Sebastian Sturm")) (:maintainer "Sebastian Sturm") (:url . "https://github.com/emacs-lsp/lsp-ivy"))]) +(lsp-intellij . [(20180831 2051) ((emacs (25 1)) (lsp-mode (4 1))) "intellij lsp client" single ((:commit . "cf30f0ac63bd0140e758840b8ab070e8313697b2") (:keywords "languages" "processes" "tools") (:authors ("Ruin0x11" . "ipickering2@gmail.com")) (:maintainer "Ruin0x11" . "ipickering2@gmail.com") (:url . "https://github.com/Ruin0x11/lsp-intellij"))]) +(lsp-haskell . [(20190602 825) ((lsp-mode (3 0)) (haskell-mode (1 0))) "Haskell support for lsp-mode" single ((:commit . "64106be79350f9ce6903d22c66b29761dadb5001") (:keywords "haskell") (:url . "https://github.com/emacs-lsp/lsp-haskell"))]) +(lsp-hack . [(20190329 1931) ((lsp-mode (20190328 2018))) "lsp-mode client for hacklang" single ((:commit . "7c3305c30bffda6fcb74d8f3b0dfecd0369713dc") (:authors ("John Allen" . "oss@porcnick.com")) (:maintainer "John Allen" . "oss@porcnick.com") (:url . "https://github.com/jra3/lsp-hack"))]) +(lsp-elixir\.el . [(20190105 2059) nil "No description available." tar ((:commit . "9fd091c092144a09c0df2d477257c1f4c37bb985"))]) +(lsp-elixir . [(20190105 2059) ((lsp-mode (20190104 2105)) (emacs (24 4))) "Elixir tooling integration into Emacs" tar ((:commit . "9fd091c092144a09c0df2d477257c1f4c37bb985") (:keywords "languages" "elixir" "elixirc" "mix" "hex" "alchemist") (:authors ("Aldric Giacomoni" . "trevoke@gmail.com")) (:maintainer "Aldric Giacomoni" . "trevoke@gmail.com") (:url . "http://www.github.com/trevoke/lsp-elixir.el"))]) +(love-minor-mode . [(20170727 536) ((lua-mode (20130419))) "Minor mode for working on LÖVE projects" single ((:commit . "3ca8f3405338f2d6f4fbcdd5e89342a46378543a") (:authors ("Eric James Michael Ritz")) (:maintainer "Eric James Michael Ritz") (:url . "https://github.com/ejmr/love-minor-mode"))]) +(lorem-ipsum . [(20190819 2042) nil "Insert dummy pseudo Latin text." single ((:commit . "da75c155da327c7a7aedb80f5cfe409984787049") (:keywords "tools" "language" "convenience") (:authors ("Jean-Philippe Theberge" . "jphil21@sourceforge.net")) (:maintainer "Joe Schafer" . "joe@jschaf.com"))]) +(loop . [(20160813 1407) nil "friendly imperative loop structures" single ((:commit . "e22807f83a0890dc8a904c51ee0742c34efccc6c") (:keywords "loop" "while" "for each" "break" "continue") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) +(look-mode . [(20190212 2346) nil "quick file viewer for image and text file browsing" single ((:commit . "d686e4cfafeac24e07e3efdb9763472f78d878f4") (:authors ("Peter H. Mao " . "petermao@jpl.nasa.gov")) (:maintainer "Peter H. Mao " . "petermao@jpl.nasa.gov"))]) +(look-dired . [(20160729 2323) ((look-mode (1 0))) "Extensions to look-mode for dired buffers" single ((:commit . "9bfa4e5e6f3810705b6426c88493ea0bf6b15640") (:keywords "convenience") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com") (:url . "https://github.com/vapniks/look-dired"))]) +(lolcode-mode . [(20111002 847) nil "Major mode for editing LOLCODE" single ((:commit . "1914f1ba87587ecf5f175eeb2144c28e9f039317") (:keywords "lolcode" "major" "mode") (:authors ("Bodil Stokke" . "lolcode@bodil.tv")) (:maintainer "Bodil Stokke" . "lolcode@bodil.tv") (:url . "http://github.com/bodil/lolcode-mode"))]) +(lolcat . [(20190527 1145) ((emacs (24 3))) "Rainbows and unicorns!" single ((:commit . "4855e587a3b9681c077dac4b9f166dd860f439a4") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/lolcat.el"))]) +(logview . [(20181027 1757) ((emacs (24 4)) (datetime (0 6 1)) (extmap (1 0))) "Major mode for viewing log files" single ((:commit . "bd662d467dbd7c93cfe1e3058e4f11c49314fd6a") (:keywords "files" "tools") (:authors ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainer "Paul Pogonyshev" . "pogonyshev@gmail.com") (:url . "https://github.com/doublep/logview"))]) +(logstash-conf . [(20170524 1929) nil "basic mode for editing logstash configuration" single ((:commit . "4e127f9aec190786613445aa88efa307ff7c6748") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) +(logpad . [(20190927 2043) nil "Simulate Windows Notepad for logging." single ((:commit . "ff80fd198b196c4db9ca88ae8cf858cae491e121") (:keywords "files" "outlines" "notepad") (:authors ("Jens K. Loewe" . "git@tuxproject.de")) (:maintainer "Jens K. Loewe" . "git@tuxproject.de") (:url . "https://bitbucket.org/tux_/logpad.el"))]) +(lognav-mode . [(20191117 1202) ((emacs (24 3))) "Navigate Log Error Messages" single ((:commit . "5105e2e2a5586a04e95d3f0573682166026d25b1") (:keywords "log" "error" "lognav-mode" "convenience") (:authors ("Shawn Ellis" . "shawn.ellis17@gmail.com")) (:maintainer "Shawn Ellis" . "shawn.ellis17@gmail.com") (:url . "https://hg.osdn.net/view/lognav-mode/lognav-mode"))]) +(logito . [(20120225 2055) ((eieio (1 3))) "logging library for Emacs" single ((:commit . "824acb89d2cc18cb47281a4fbddd81ad244a2052") (:keywords "lisp" "tool") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainer "Yann Hodique" . "yann.hodique@gmail.com"))]) +(logalimacs . [(20131021 1829) ((popwin (0 6 2)) (popup (0 5 0)) (stem (20130120))) "Front-end to logaling-command for Ruby gems" single ((:commit . "8286e39502250fc6c3c6656a7f46a8eee8e9a713") (:keywords "translation" "logaling-command") (:authors ("Yuta Yamada ")) (:maintainer "Yuta Yamada ") (:url . "https://github.com/logaling/logalimacs"))]) +(log4j-mode . [(20160108 1918) nil "major mode for viewing log files" single ((:commit . "26171b1e723502055e085393b0ecdcb6db406010") (:keywords "tools") (:authors ("Johan Dykstrom" . "jody4711-sf@yahoo.se")) (:maintainer "Johan Dykstrom" . "jody4711-sf@yahoo.se") (:url . "http://log4j-mode.sourceforge.net"))]) +(log4e . [(20170401 1304) nil "provide logging framework for elisp" single ((:commit . "c69424e407be0d9d0e54b427d8b18b1ac5a607e2") (:keywords "log") (:authors ("Hiroaki Otsu" . "ootsuhiroaki@gmail.com")) (:maintainer "Hiroaki Otsu" . "ootsuhiroaki@gmail.com") (:url . "https://github.com/aki2o/log4e"))]) +(lodgeit . [(20190802 1308) nil "Paste to a lodgeit powered pastebin" single ((:commit . "442637194d48a7105b7747b8d98772f5899f9e21") (:keywords "pastebin" "lodgeit") (:authors ("Eric Larson" . "eric@ionrock.org")) (:maintainer "Eric Larson" . "eric@ionrock.org") (:url . "https://github.com/ionrock/lodgeit-el"))]) +(lockfile-mode . [(20170625 507) nil "Major mode for .lock files" single ((:commit . "fcfef88460cb3cd67c4d83a1801d0326d282feac") (:authors ("Preetpal S. Sohal")) (:maintainer "Preetpal S. Sohal") (:url . "https://github.com/preetpalS/emacs-lockfile-mode"))]) +(loccur . [(20191022 1955) ((emacs (24 3))) "Perform an occur-like folding in current buffer" single ((:commit . "4934c0560d2f63e6314b4584211a0cc0a7e671c4") (:keywords "matching") (:authors ("Alexey Veretennikov" . "alexey.veretennikov@gmail.com")) (:maintainer "Alexey Veretennikov" . "alexey.veretennikov@gmail.com") (:url . "https://github.com/fourier/loccur"))]) +(loc-changes . [(20160801 1708) nil "keep track of positions even after buffer changes" single ((:commit . "4d1dcdf7631c23b1259ad4f72bf9686cf95fb46c") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:url . "http://github.com/rocky/emacs-loc-changes"))]) +(load-theme-buffer-local . [(20120702 2036) nil "Install emacs24 color themes by buffer." single ((:commit . "e606dec66f16a06140b9aad625a4fd52bca4f936") (:keywords "faces") (:authors ("Victor Borja" . "vic.borja@gmail.com")) (:maintainer "Victor Borja" . "vic.borja@gmail.com") (:url . "http://github.com/vic/color-theme-buffer-local"))]) +(load-relative . [(20190601 1221) nil "Relative file load (within a multi-file Emacs package)" tar ((:commit . "dbcd7cbcca6503ef93f4b8d19bf7a9efd7f6bf9b") (:keywords "internal") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:url . "http://github.com/rocky/emacs-load-relative"))]) +(load-env-vars . [(20180511 2210) ((emacs (24))) "Load environment variables from files" single ((:commit . "3808520efaf9492033f6e11a9bffd68eabf02a0f") (:keywords "lisp") (:authors ("Jorge Dias" . "jorge@mrdias.com")) (:maintainer "Jorge Dias" . "jorge@mrdias.com") (:url . "https://github.com/diasjorge/emacs-load-env-vars"))]) +(load-bash-alias . [(20181220 1755) ((emacs (24 1)) (seq (2 16))) "Convert bash aliases into eshell ones" single ((:commit . "50df445bace7896318f10c58d26b673635704215") (:keywords "emacs" "bash" "eshell" "alias") (:authors ("Davide Restivo" . "davide.restivo@yahoo.it")) (:maintainer "Davide Restivo" . "davide.restivo@yahoo.it") (:url . "https://github.com/daviderestivo/load-bash-alias"))]) +(lms . [(20191102 3) ((emacs (25 1))) "Squeezebox / Logitech Media Server frontend" single ((:commit . "0967d3bada2ab70784a944d56c81691b8e87dbd8") (:keywords "multimedia") (:authors ("Iñigo Serna" . "inigoserna@gmx.com")) (:maintainer "Iñigo Serna" . "inigoserna@gmx.com") (:url . "https://hg.serna.eu/emacs/lms"))]) +(livid-mode . [(20131116 1344) ((skewer-mode (1 5 3)) (s (1 8 0))) "Live browser eval of JavaScript every time a buffer changes" single ((:commit . "dfe5212fa64738bc4138bfebf349fbc8bc237c26") (:authors ("Murphy McMahon")) (:maintainer "Murphy McMahon") (:url . "https://github.com/pandeiro/livid-mode"))]) +(livescript-mode . [(20140613 421) nil "Major mode for editing LiveScript files" single ((:commit . "90a918d9686e256e6d4d439cc20f24dad8d3b804") (:keywords "languages" "livescript") (:authors ("Hisamatsu Yasuyuki" . "yas@null.net")) (:maintainer "Hisamatsu Yasuyuki" . "yas@null.net") (:url . "https://github.com/yhisamatsu/livescript-mode"))]) +(livereload . [(20170629 650) ((emacs (25)) (websocket (1 8))) "Livereload server" tar ((:commit . "1e501d7e46dbd476c2c7cc9d20b5ac9d41fb1955") (:keywords "convenience") (:authors ("João Távora" . "joaotavora@gmail.com")) (:maintainer "João Távora" . "joaotavora@gmail.com"))]) +(lively . [(20171005 754) nil "interactively updating text" single ((:commit . "348675828c6a81bfa1ac311ca465aad813542c1b") (:authors ("Luke Gorrie" . "luke@bup.co.nz")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) +(live-py-mode . [(20191108 345) ((emacs (24 3))) "Live Coding in Python" tar ((:commit . "25dfd4d57f7254781fe49211e8fb77b778ffcc62") (:keywords "live" "coding") (:authors ("Don Kirkby http://donkirkby.github.io")) (:maintainer "Don Kirkby http://donkirkby.github.io") (:url . "http://donkirkby.github.io/live-py-plugin/"))]) +(live-preview . [(20190415 2214) ((emacs (24 4))) "Live preview by any shell command while editing" single ((:commit . "bc3f79b58c4e428485b2cf800278004220f7433d") (:keywords "languages" "util") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:url . "https://github.com/lassik/emacs-live-preview"))]) +(live-code-talks . [(20180907 1647) ((emacs (24)) (cl-lib (0 5)) (narrowed-page-navigation (0 1))) "Support for slides with live code in them" single ((:commit . "97f16a9ee4e6ff3e0f9291eaead772c66e3e12ae") (:keywords "docs" "multimedia") (:authors ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Raymond Christiansen" . "david@davidchristiansen.dk"))]) +(literate-starter-kit . [(20150730 1854) ((emacs (24 3))) "A literate starter kit to configure Emacs using Org-mode files." tar ((:commit . "6dce1d01781966c14558aa553cfc85008c06e115"))]) +(literate-elisp . [(20191012 606) ((cl-lib (0 6)) (emacs (24 4))) "literate program to write elisp codes in org mode" single ((:commit . "fb3b376de483d6923bb067caa01ebdb65a0161c2") (:keywords "lisp" "docs" "extensions" "tools") (:authors ("Jingtao Xu" . "jingtaozf@gmail.com")) (:maintainer "Jingtao Xu" . "jingtaozf@gmail.com") (:url . "https://github.com/jingtaozf/literate-elisp"))]) +(literate-coffee-mode . [(20170211 1515) ((coffee-mode (0 5 0))) "major-mode for Literate CoffeeScript" single ((:commit . "55ce0305495f4a38c8063c4bd63deb1e1252373d") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-literate-coffee-mode"))]) +(literal-string . [(20191023 733) ((emacs (25)) (edit-indirect (0 1 5))) "edit string literals in a dedicated buffer" single ((:commit . "afffa86e626798ee9f9188ea3be2d5ee6ad17c39") (:keywords "lisp" "tools" "docs") (:authors ("Joost Diepenmaat" . "joost@zeekat.nl")) (:maintainer "Joost Diepenmaat" . "joost@zeekat.nl") (:url . "https://github.com/joodie/literal-string-mode/"))]) +(litecoin-ticker . [(20160612 11) ((json (1 2))) "litecoin price in modeline" single ((:commit . "3d8047c736e4ee0b8638953f8cc63eaefad34106") (:authors ("Zhe Lei")) (:maintainer "Zhe Lei"))]) +(litable . [(20160922 1559) ((dash (2 6 0))) "dynamic evaluation replacement with emacs" single ((:commit . "b0278f3f8dcff424bfbdfdefb545b1fbff33206f") (:keywords "lisp") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com"))]) +(lit-mode . [(20141123 1736) nil "Major mode for lit" single ((:commit . "c61c403afc8333a5649c5421ab1a6341dc1c7d92") (:keywords "languages" "tools") (:authors ("Hector A Escobedo" . "ninjahector.escobedo@gmail.com")) (:maintainer "Hector A Escobedo" . "ninjahector.escobedo@gmail.com"))]) +(list-utils . [(20160414 1402) nil "List-manipulation utility functions" single ((:commit . "acf18aca1131a90f8d673974673e3c5d8fdc6a86") (:keywords "extensions") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:url . "http://github.com/rolandwalker/list-utils"))]) +(list-unicode-display . [(20181121 2316) ((emacs (24 3))) "Search for and list unicode characters by name" single ((:commit . "0ecc2402b258990e7a0cf7e60847712c69444070") (:keywords "convenience") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) +(list-packages-ext . [(20151115 1716) ((s (1 6 0)) (ht (1 5 0)) (persistent-soft (0 8 6))) "Extras for list-packages" single ((:commit . "b4dd644e4369c9aa66f5bb8895ea49ebbfd0a27a") (:keywords "convenience" "tools") (:authors ("Alessandro Piras" . "laynor@gmail.com")) (:maintainer "Alessandro Piras" . "laynor@gmail.com"))]) +(list-environment . [(20151227 256) nil "A tabulated process environment editor" single ((:commit . "b7ca30b05905047be2e55199a6475f8d98ce318b") (:keywords "processes" "unix") (:authors ("Charles L.G. Comstock" . "dgtized@gmail.com")) (:maintainer "Charles L.G. Comstock" . "dgtized@gmail.com"))]) +(lispyville . [(20190719 141) ((lispy (0)) (evil (1 2 12)) (cl-lib (0 5)) (emacs (24 4))) "A minor mode for integrating evil with lispy." single ((:commit . "56198f1c4488a52a0d0512c717dff36e8b9fbfd0") (:keywords "vim" "evil" "lispy" "lisp" "parentheses") (:authors ("Fox Kiester" . "noct@posteo.net")) (:maintainer "Fox Kiester" . "noct@posteo.net") (:url . "https://github.com/noctuid/lispyville"))]) +(lispyscript-mode . [(20170720 1917) nil "Major mode for LispyScript code." single ((:commit . "def632e3335b0c481fbcf5a17f18b0a8c58dd12f") (:keywords "lisp" "languages") (:authors ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainer "Kris Jenkins" . "krisajenkins@gmail.com") (:url . "https://github.com/krisajenkins/lispyscript-mode"))]) +(lispy . [(20191120 1054) ((emacs (24 3)) (ace-window (0 9 0)) (iedit (0 9 9)) (counsel (0 11 0)) (hydra (0 14 0)) (zoutline (0 1 0))) "vi-like Paredit" tar ((:commit . "1705e4931e8db8e43740a4dfc9ace104a6affc4f"))]) +(lispxmp . [(20170926 23) nil "Automagic emacs lisp code annotation" single ((:commit . "7ad077b4ee91ce8a42f84eeddb9fc7ea4eac7814") (:keywords "lisp" "convenience") (:authors ("rubikitch" . "rubikitch@ruby-lang.org")) (:maintainer "rubikitch" . "rubikitch@ruby-lang.org") (:url . "http://www.emacswiki.org/cgi-bin/wiki/download/lispxmp.el"))]) +(lisp-extra-font-lock . [(20181008 1921) nil "Highlight bound variables and quoted exprs." single ((:commit . "4605eccbe1a7fcbd3cacf5b71249435413b4db4f") (:keywords "languages" "faces") (:authors ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:url . "https://github.com/Lindydancer/lisp-extra-font-lock"))]) +(lisp-butt-mode . [(20191024 1229) ((emacs (25))) "Slim Lisp Butts" single ((:commit . "47007084d0893373731fabd828c4d4f28058f8e1") (:keywords "lisp") (:authors ("Marco Wahl" . "marcowahlsoft@gmail.com")) (:maintainer "Marco Wahl" . "marcowahlsoft@gmail.com") (:url . "https://gitlab.com/marcowahl/lisp-butt-mode"))]) +(liso-theme . [(20160410 2029) nil "Eclectic Dark Theme for GNU Emacs" single ((:commit . "844688245eb860d23043455e165ee24503454c81") (:keywords "theme" "themes") (:authors ("Vlad Piersec" . "vlad.piersec@gmail.com")) (:maintainer "Vlad Piersec" . "vlad.piersec@gmail.com") (:url . "https://github.com/caisah/liso-theme"))]) +(liquid-types . [(20151202 735) ((flycheck (0 13)) (dash (1 2)) (emacs (24 1)) (popup (0 5 2)) (pos-tip (0 5 0)) (flycheck-liquidhs (0 0 1)) (button-lock (1 0 2))) "show inferred liquid-types" single ((:commit . "cc4bacbbf204ef9cf0756f78dfebee2c6ae14d7b") (:authors ("Ranjit Jhala" . "jhala@cs.ucsd.edu")) (:maintainer "Ranjit Jhala" . "jhala@cs.ucsd.edu"))]) +(linum-relative . [(20180124 1047) nil "display relative line number in emacs." single ((:commit . "c74a6981b688a5e1e6b8e0809363963ff558ce4d") (:keywords "converience") (:authors ("coldnew" . "coldnew.tw@gmail.com")) (:maintainer "coldnew" . "coldnew.tw@gmail.com") (:url . "http://github.com/coldnew/linum-relative"))]) +(linum-off . [(20160217 2137) nil "Provides an interface for turning line-numbering off" single ((:commit . "116e66ac259b183e0763b85616888316ab196822") (:keywords "line" "numbering") (:authors ("Matthew L. Fidler, Florian Adamsky (see wiki)")) (:maintainer "Matthew L. Fidler") (:url . "http://www.emacswiki.org/emacs/auto-indent-mode.el "))]) +(linphone . [(20130524 1109) nil "Emacs interface to Linphone" tar ((:commit . "99af3db941b7f4e5272bb48bff96c1ce4ceac302") (:keywords "comm") (:authors ("Yoni Rabkin" . "yonirabkin@member.fsf.org")) (:maintainer "Yoni Rabkin" . "yonirabkin@member.fsf.org") (:url . "https://github.com/zabbal/emacs-linphone"))]) +(link-hint . [(20190721 1844) ((avy (0 4 0)) (emacs (24 1)) (cl-lib (0 5))) "Use avy to open, copy, etc. visible links." single ((:commit . "4db4e6fb82bfffd00f540e3a489013f6a8173871") (:keywords "convenience" "url" "avy" "link" "links" "hyperlink") (:authors ("Fox Kiester" . "noct@posteo.net")) (:maintainer "Fox Kiester" . "noct@posteo.net") (:url . "https://github.com/noctuid/link-hint.el"))]) +(link . [(20191111 446) nil "Hypertext links in text buffers" single ((:commit . "c9cad101100975e88873636bfd426b7a19304ebd") (:keywords "interface" "hypermedia") (:authors ("Torsten Hilbrich" . "torsten.hilbrich@gmx.net")) (:maintainer "Torsten Hilbrich" . "torsten.hilbrich@gmx.net"))]) +(linguistic . [(20181129 2116) nil "A package for basic linguistic analysis." tar ((:commit . "23e47e98cdb09ee61883669b6d8a11bf6449862c") (:keywords "linguistics" "text analysis" "matching") (:authors ("Andrew Favia ")) (:maintainer "Andrew Favia ") (:url . "https://github.com/andcarnivorous/linguistic"))]) +(lingr . [(20100807 1731) nil "Lingr Client for GNU Emacs" single ((:commit . "4215a8704492d3c860097cbe2649936c22c196df") (:keywords "chat" "client" "internet") (:authors ("lugecy" . "lugecy@gmail.com")) (:maintainer "lugecy" . "lugecy@gmail.com") (:url . "http://github.com/lugecy/lingr-el"))]) +(lines-at-once . [(20180422 247) ((emacs (25))) "Insert and edit multiple lines at once" single ((:commit . "a018ba90549384d52ec58c2685fd14a0f65252be") (:keywords "abbrev" "tools") (:authors ("Jiahao Li" . "jiahaowork@gmail.com")) (:maintainer "Jiahao Li" . "jiahaowork@gmail.com") (:url . "https://github.com/jiahaowork/lines-at-once.el"))]) +(line-up-words . [(20180219 1024) nil "Align words in an intelligent way" single ((:commit . "fefdee6fb6f7467b5afee6a591f677d7981b60bf") (:url . "https://github.com/janestreet/line-up-words"))]) +(line-reminder . [(20191016 1528) ((emacs (24 4)) (cl-lib (0 6))) "Line annotation similar to Visual Studio." single ((:commit . "ea7fc43210b5293beac4ac453b1bdde415f5183e") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:url . "https://github.com/jcs090218/line-reminder"))]) +(light-soap-theme . [(20150607 1445) ((emacs (24))) "Emacs 24 theme with a light background." single ((:commit . "76a787bd40c6b567ae68ced7f5d9f9f10725e00d"))]) +(lice . [(20191011 631) nil "License And Header Template" tar ((:commit . "3ff90745cd43d1cc41216a01f55f871a00692ffe") (:keywords "template" "license" "tools") (:authors ("Taiki Sugawara" . "buzz.taiki@gmail.com")) (:maintainer "Taiki Sugawara" . "buzz.taiki@gmail.com") (:url . "https://github.com/buzztaiki/lice-el"))]) +(libmpdel . [(20191119 1933) ((emacs (25 1))) "Communication with an MPD server" single ((:commit . "a1d1a686ad0cd300f07b6ef213659b0b3a22197c") (:keywords "multimedia") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://gitlab.petton.fr/mpdel/libmpdel"))]) +(libmpdee . [(20160117 2301) nil "Client end library for mpd, a music playing daemon" single ((:commit . "a6ca3b7d6687f3ba60996b9b5044ad1d3b228290") (:keywords "music" "mpd") (:authors ("Ramkumar R. Aiyengar" . "andyetitmoves@gmail.com")) (:maintainer "Ramkumar R. Aiyengar" . "andyetitmoves@gmail.com"))]) +(libgit . [(20191105 2242) ((emacs (25 1))) "Thin bindings to libgit2." tar ((:commit . "d587efce66a961e94187f399aef08cc3b1d21741") (:keywords "git" "vc") (:authors ("Eivind Fonn" . "evfonn@gmail.com")) (:maintainer "Eivind Fonn" . "evfonn@gmail.com") (:url . "https://github.com/TheBB/libegit2"))]) +(libelcouch . [(20190820 1632) ((emacs (25 1)) (request (0 3 0))) "Communication with CouchDB" single ((:commit . "29e369df4f96c7ad95bb33292de7a44122e0b4e7") (:keywords "tools") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://gitlab.petton.fr/elcouch/libelcouch/"))]) +(libbcel . [(20191010 815) ((emacs (26 1)) (request (0 3 1))) "Library to connect to basecamp 3 API" tar ((:commit . "69aea8fa1be58a394106d8a490d8aa5211f7380e") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://gitlab.petton.fr/bcel/libbcel"))]) +(libbasecampel . [(20190919 1948) nil "No description available." tar ((:commit . "f3eab975b7222eb4441743744eb8697bd82b57ec"))]) +(lfe-mode . [(20170121 1254) nil "Lisp Flavoured Erlang mode" tar ((:commit . "a6c9922f31f59686bb48db1b8d5b75e74e79757a"))]) +(lexbind-mode . [(20141027 1429) nil "Puts the value of lexical-binding in the mode line" single ((:commit . "fa0a6848c1cfd3fbf45db43dc2deef16377d887d") (:keywords "convenience" "lisp") (:authors ("Andrew Kirkpatrick" . "ubermonk@gmail.com")) (:maintainer "Andrew Kirkpatrick" . "ubermonk@gmail.com") (:url . "https://github.com/spacebat/lexbind-mode"))]) +(levenshtein . [(20090830 1040) nil "Edit distance between two strings." single ((:commit . "070925197ebf6b704e6e00c4f2d2ec783f3df38c") (:keywords "lisp") (:authors ("Aaron S. Hawley ,") ("Art Taylor")) (:maintainer "Aaron S. Hawley ,"))]) +(leuven-theme . [(20190831 1008) nil "Awesome Emacs color theme on white background" tar ((:commit . "026da5d614864a60bb151f0e75240a938e41923b") (:keywords "color" "theme") (:authors ("Fabrice Niessen <(concat \"fniessen\" at-sign \"pirilampo.org\")>")) (:maintainer "Fabrice Niessen <(concat \"fniessen\" at-sign \"pirilampo.org\")>") (:url . "https://github.com/fniessen/emacs-leuven-theme"))]) +(letterbox-mode . [(20170702 125) ((emacs (24 3))) "hide sensitive text on a buffer" single ((:commit . "88c67a51d67216d569a28e8423200883fde096dd") (:keywords "password" "convenience") (:authors ("Fernando Leboran" . "f.leboran@gmail.com")) (:maintainer "Fernando Leboran" . "f.leboran@gmail.com") (:url . "http://github.com/pacha64/letterbox-mode"))]) +(letcheck . [(20160202 1948) nil "Check the erroneous assignments in let forms" single ((:commit . "edf188ca2f85349e971b83f164c6484264e79426") (:keywords "convenience") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:url . "https://github.com/Fuco1/letcheck"))]) +(less-css-mode . [(20161001 453) nil "Major mode for editing LESS CSS files (lesscss.org)" single ((:commit . "c7fa3d56d83206b28657f2e56439dc62280a2bf2") (:keywords "less" "css" "mode") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/less-css-mode"))]) +(lentic-server . [(20160717 2052) ((lentic (0 8)) (web-server (0 1 1))) "Web Server for Emacs Literate Source" single ((:commit . "8e809fafbb27a98f815b544d9d9ee15843eb6a36") (:authors ("Phillip Lord" . "phillip.lord@newcastle.ac.uk")) (:maintainer "Phillip Lord" . "phillip.lord@newcastle.ac.uk"))]) +(lentic . [(20190102 2124) ((emacs (24 4)) (m-buffer (0 13)) (dash (2 5 0)) (f (0 17 2)) (s (1 9 0))) "One buffer as a view of another" tar ((:commit . "e6d013bf570bb235817f6c8f0abdd31d3b456d53") (:authors ("Phillip Lord" . "phillip.lord@russet.org.uk")) (:maintainer "Phillip Lord" . "phillip.lord@russet.org.uk"))]) +(lenlen-theme . [(20170329 245) ((color-theme-solarized (20150110))) "a solarized-based kawaii light theme" single ((:commit . "b8a6412c81633b10fb98ba0930f55b25071c084a") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) +(lemon-mode . [(20130216 1304) nil "A major mode for editing lemon grammar files" single ((:commit . "155bfced6c9afc8072a0133d3d1baa54c6d67430") (:keywords "lemon") (:authors ("mooz" . "stillpedant@gmail.com")) (:maintainer "mooz" . "stillpedant@gmail.com"))]) +(legalese . [(20150820 1724) nil "Add legalese to your program files" single ((:commit . "ec23e69d18329456beed9546a1d6c72f96db91cf") (:keywords "convenience") (:authors ("Jorgen Schaefer" . "forcer@forcix.cx")) (:maintainer "Jorgen Schaefer" . "forcer@forcix.cx") (:url . "https://github.com/jorgenschaefer/legalese"))]) +(leetcode . [(20191011 800) ((emacs (26)) (dash (2 16 0)) (graphql (0 1 1)) (spinner (1 7 3)) (aio (1 0))) "An leetcode client." single ((:commit . "86e9e167c10eed487cf6715a764527d84ccb35fa") (:keywords "extensions" "tools") (:authors ("Wang Kai" . "kaiwkx@gmail.com")) (:maintainer "Wang Kai" . "kaiwkx@gmail.com") (:url . "https://github.com/kaiwk/leetcode.el"))]) +(leerzeichen . [(20170422 1313) nil "Minor mode to display whitespace characters." single ((:commit . "5acf9855ecb2b2cd5da4402bb48df149e7525cc5") (:keywords "whitespace" "characters") (:authors ("Felix Geller" . "fgeller@gmail.com")) (:maintainer "Felix Geller" . "fgeller@gmail.com") (:url . "http://github.com/fgeller/leerzeichen.el"))]) +(ledger-mode . [(20191112 49) ((emacs (24 3))) "Helper code for use with the \"ledger\" command-line tool" tar ((:commit . "52d2802d255f081f3f30b944c461ceb3128d45bd"))]) +(ledger-import . [(20190502 456) ((emacs (25 1)) (ledger-mode (3 1 1))) "Fetch OFX files from bank and push them to Ledger" single ((:commit . "6911708e373e2cbdb3868df7711ef07925ed36bf") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://gitlab.petton.fr/mpdel/libmpdel"))]) +(leanote . [(20161223 139) ((emacs (24 4)) (cl-lib (0 5)) (request (0 2)) (let-alist (1 0 3)) (pcache (0 4 0)) (s (1 10 0)) (async (1 9))) "A minor mode writing markdown leanote" single ((:commit . "d499e7b59bb1f1a2fabc0e4c26fb101ed62ebc7b") (:keywords "leanote" "note" "markdown") (:authors ("Aborn Jiang" . "aborn.jiang@gmail.com")) (:maintainer "Aborn Jiang" . "aborn.jiang@gmail.com") (:url . "https://github.com/aborn/leanote-emacs"))]) +(lean-mode . [(20190914 958) ((emacs (24 3)) (dash (2 12 0)) (dash-functional (1 2 0)) (s (1 10 0)) (f (0 19 0)) (flycheck (30))) "A major mode for the Lean language" tar ((:commit . "b5ba739f68ef731c03247bf6db2708502c8ac46c") (:keywords "languages") (:authors ("Leonardo de Moura" . "leonardo@microsoft.com") ("Soonho Kong " . "soonhok@cs.cmu.edu") ("Gabriel Ebner " . "gebner@gebner.org") ("Sebastian Ullrich" . "sebasti@nullri.ch")) (:maintainer "Sebastian Ullrich" . "sebasti@nullri.ch") (:url . "https://github.com/leanprover/lean-mode"))]) +(leaf-keywords . [(20191117 338) ((emacs (24 4)) (leaf (3 5 0))) "Additional leaf.el keywords for external packages" single ((:commit . "44b50d9fb22c0a60273b53af7c30fc415db1d469") (:keywords "lisp" "settings") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:url . "https://github.com/conao3/leaf-keywords.el"))]) +(leaf . [(20191117 339) ((emacs (24 4))) "Simplify your init.el configuration, extended use-package" single ((:commit . "57b99052f949f34471265f8b010549ee4725c320") (:keywords "lisp" "settings") (:authors ("Naoya Yamashita" . "conao3@gmail.com")) (:maintainer "Naoya Yamashita" . "conao3@gmail.com") (:url . "https://github.com/conao3/leaf.el"))]) +(lcr . [(20180902 1919) ((dash (2 12 0)) (emacs (25 1))) "lightweight coroutines" single ((:commit . "c14f40692292d59156c7632dbdd2867c086aa75f") (:keywords "tools") (:authors ("Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com")) (:maintainer "Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com") (:url . "https://github.com/jyp/lcr"))]) +(lcb-mode . [(20160816 540) ((emacs (24))) "LiveCode Builder major mode" single ((:commit . "be0768e9aa6f9b8e76f2230f4f7f4d152a766b9a") (:keywords "languages") (:authors ("Peter TB Brett" . "peter@peter-b.co.uk")) (:maintainer "Peter TB Brett" . "peter@peter-b.co.uk") (:url . "https://github.com/peter-b/lcb-mode"))]) +(lavender-theme . [(20170808 1313) ((emacs (24 0))) "an Emacs 24 theme based on Lavender (tmTheme)" single ((:commit . "ef5e959b95d7fb8152137bc186c4c24e986c1e3c") (:authors ("Jason Milkins")) (:maintainer "Jason Milkins") (:url . "https://github.com/emacsfodder/tmtheme-to-deftheme"))]) +(launchctl . [(20150518 1309) ((emacs (24 1))) "Interface to launchctl on Mac OS X." single ((:commit . "73f8f52a5aa9a0be9bdcf68c29ad0fa2b4a115a4") (:keywords "tools" "convenience") (:authors ("Peking Duck ")) (:maintainer "Peking Duck ") (:url . "http://github.com/pekingduck/launchctl-el"))]) +(launch-mode . [(20170106 512) ((emacs (24 4))) "Major mode for launch-formatted text" tar ((:commit . "25ebd4ba77afcbe729901eb74923dbe9ae81c313") (:authors ("iory" . "ab.ioryz@gmail.com")) (:maintainer "iory" . "ab.ioryz@gmail.com") (:url . "https://github.com/iory/launch-mode"))]) +(launch . [(20130619 2204) nil "launch files with OS-standard associated applications." single ((:commit . "e7c3b573fc05fe4d3d322389079909311542e799") (:keywords "convenience" "processes") (:authors ("Simon Law" . "sfllaw@sfllaw.ca")) (:maintainer "Simon Law" . "sfllaw@sfllaw.ca") (:url . "https://github.com/sfllaw/emacs-launch"))]) +(latexdiff . [(20190827 1651) ((emacs (24 4))) "Latexdiff integration in Emacs" single ((:commit . "56d0b240867527d1b43d3ddec14059361929b971") (:keywords "tex" "vc" "tools" "git" "helm") (:authors ("Launay Gaby" . "gaby.launay@tutanota.com")) (:maintainer "Launay Gaby" . "gaby.launay@tutanota.com") (:url . "http://github.com/galaunay/latexdiff.el"))]) +(latex-unicode-math-mode . [(20170123 1816) nil "Input method for Unicode math symbols" tar ((:commit . "eb4a5c9f9b00a58d2ca80f90782a851f4c8497b8") (:authors ("Christoph Dittmann" . "github@christoph-d.de")) (:maintainer "Christoph Dittmann" . "github@christoph-d.de") (:url . "https://github.com/Christoph-D/latex-unicode-math-mode"))]) +(latex-preview-pane . [(20181008 1822) nil "Makes LaTeX editing less painful by providing a updatable preview pane" tar ((:commit . "5297668a89996b50b2b62f99cba01cc544dbed2e"))]) +(latex-pretty-symbols . [(20151112 1044) nil "Display many latex symbols as their unicode counterparts" single ((:commit . "83d5888147bb734a94dfd4847a11e975a7d86ba8") (:keywords "convenience" "display") (:authors ("Erik Parmann" . "eparmann@gmail.com") ("PÃ¥l Drange")) (:maintainer "Erik Parmann" . "eparmann@gmail.com") (:url . "https://bitbucket.org/mortiferus/latex-pretty-symbols.el"))]) +(latex-math-preview . [(20190123 802) nil "preview LaTeX mathematical expressions." single ((:commit . "90fd86da2d9514882146a5db40cb916fc533cf55") (:keywords "latex" "tex") (:authors ("Takayuki YAMAGUCHI" . "d@ytak.info")) (:maintainer "Takayuki YAMAGUCHI" . "d@ytak.info") (:url . "https://gitlab.com/latex-math-preview/latex-math-preview"))]) +(latex-extra . [(20170817 147) ((auctex (11 86 1)) (cl-lib (0 5))) "Adds several useful functionalities to LaTeX-mode." single ((:commit . "82d99b8b0c2db20e5270749582e03bcc2443ffb5") (:keywords "tex") (:authors ("Artur Malabarba" . "artur@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "artur@endlessparentheses.com") (:url . "http://github.com/Malabarba/latex-extra"))]) +(lastpass . [(20191102 611) ((emacs (24 4)) (seq (1 9)) (cl-lib (0 5))) "LastPass command wrapper" single ((:commit . "e07b1a062153b9d56d0112ac45caf76d6bce67c5") (:keywords "extensions" "processes" "lpass" "lastpass") (:authors ("Petter Storvik")) (:maintainer "Petter Storvik") (:url . "https://github.com/storvik/emacs-lastpass"))]) +(language-id . [(20190207 1057) ((emacs (24)) (cl-lib (0 5))) "Library to work with programming language identifiers" single ((:commit . "9145c75eaa41a7a9deda928f704b99db056d3e9d") (:keywords "languages" "util") (:authors ("Lassi Kortela" . "lassi@lassi.io")) (:maintainer "Lassi Kortela" . "lassi@lassi.io") (:url . "https://github.com/lassik/emacs-language-id"))]) +(language-detection . [(20161123 1813) ((emacs (24)) (cl-lib (0 5))) "Automatic language detection from code snippets" single ((:commit . "54a6ecf55304fba7d215ef38a4ec96daff2f35a4") (:authors ("Andreas Jansson" . "andreas@jansson.me.uk")) (:maintainer "Andreas Jansson" . "andreas@jansson.me.uk") (:url . "https://github.com/andreasjansson/language-detection.el"))]) +(langtool . [(20190303 2227) ((cl-lib (0 3))) "Grammar check utility using LanguageTool" single ((:commit . "81f2b8a07b29bbdd558db4b68dd904f4c0eb10a4") (:keywords "docs") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:url . "https://github.com/mhayashi1120/Emacs-langtool"))]) +(langdoc . [(20150218 645) ((cl-lib (0 2))) "Help to define help document mode for various languages" single ((:commit . "2c7223bacb116992d700ecb19a60df5c09c63424") (:keywords "convenience" "eldoc") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com") (:url . "https://github.com/tom-tan/langdoc/"))]) +(lang-refactor-perl . [(20131122 2127) nil "Simple refactorings, primarily for Perl" single ((:commit . "691bd69639de6b7af357e3b7143563ececd9c497") (:keywords "languages" "refactoring" "perl") (:authors (nil . "Johan Lindstrom ")) (:maintainer nil . "Johan Lindstrom ") (:url . "https://github.com/jplindstrom/emacs-lang-refactor-perl"))]) +(lammps-mode . [(20180801 1319) ((emacs (24 4))) "basic syntax highlighting for LAMMPS files" single ((:commit . "a5b68d7a59975770b56ee8f6e66fa4f703a72ffe") (:keywords "languages" "faces") (:authors ("Aidan Thompson ")) (:maintainer "Rohit Goswami ") (:url . "https://github.com/lammps/lammps/tree/master/tools/emacs"))]) +(laguna-theme . [(20190714 1830) nil "A theme that's easy on the eyes & focuses on importance." single ((:commit . "66c613692b9f0c71050a236e98dbc54cb410946b") (:authors ("Henry Newcomer" . "a.cliche.email@gmail.com")) (:maintainer "Henry Newcomer" . "a.cliche.email@gmail.com") (:url . "https://github.com/henrynewcomer/laguna"))]) +(labburn-theme . [(20170502 907) nil "A lab color space zenburn theme." single ((:commit . "e95334acd8a73fbe8e156f70e047014a87e92e66") (:keywords "theme" "zenburn") (:authors ("Johannes Goslar")) (:maintainer "Johannes Goslar") (:url . "https://github.com/ksjogo/labburn-theme"))]) +(lab-themes . [(20190320 1827) ((emacs (24))) "A custom theme carefully constructed in the LAB space" tar ((:commit . "a4d1806793ab7a651c5380ebb2d1b53c8fbf7944") (:keywords "lisp") (:authors ("MetroWind" . "chris.corsair@gmail.com")) (:maintainer "MetroWind" . "chris.corsair@gmail.com") (:url . "https://github.com/MetroWind/lab-theme"))]) +(kwin . [(20150308 1812) nil "communicatewith the KWin window manager" single ((:commit . "d4f8f3593598b71ee596e0a87b2c1d6a912a9566") (:authors ("Simon Hafner")) (:maintainer "Simon Hafner") (:url . "http://github.com/reactormonk/kwin-minor-mode"))]) +(kv . [(20140108 1534) nil "key/value data structure functions" single ((:commit . "721148475bce38a70e0b678ba8aa923652e8900e") (:keywords "lisp") (:authors ("Nic Ferrier" . "nferrier@ferrier.me.uk")) (:maintainer "Nic Ferrier" . "nferrier@ferrier.me.uk"))]) +(kurecolor . [(20180401 1221) ((emacs (24 1)) (s (1 0))) "color editing goodies for Emacs" single ((:commit . "a27153f6a01f38226920772dc4917b73166da5e6") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com"))]) +(kubernetes-tramp . [(20181228 922) ((emacs (24)) (cl-lib (0 5))) "TRAMP integration for kubernetes containers" single ((:commit . "8713571b66940f8f3f496b55baa23cdf1df7a869") (:keywords "kubernetes" "convenience") (:authors ("Giovanni Ruggiero" . "giovanni.ruggiero+github@gmail.com")) (:maintainer "Giovanni Ruggiero" . "giovanni.ruggiero+github@gmail.com") (:url . "https://github.com/gruggiero/kubernetes-tramp"))]) +(kubernetes-helm . [(20190201 320) ((yaml-mode (0 0 13)) (emacs (25 3))) "extension for helm, the package manager for kubernetes" single ((:commit . "bdf9280899b5efab6d55ffd96bad716c5f8e75bc") (:keywords "kubernetes" "helm" "k8s" "tools" "processes") (:authors ("Adrien Brochard")) (:maintainer "Adrien Brochard") (:url . "https://github.com/abrochard/kubernetes-helm"))]) +(kubernetes-evil . [(20191108 615) ((kubernetes (0 13 0)) (evil (1 2 12))) "Kubernetes keybindings for evil-mode." single ((:commit . "12aac86cab9019c1caff8dce26535228c9ee2a23") (:authors ("Chris Barrett" . "chris+emacs@walrus.cool")) (:maintainer "Chris Barrett" . "chris+emacs@walrus.cool"))]) +(kubernetes . [(20191108 615) ((emacs (25 1)) (dash (2 12 0)) (magit (2 8 0)) (magit-popup (2 13 0))) "Magit-like porcelain for Kubernetes." tar ((:commit . "12aac86cab9019c1caff8dce26535228c9ee2a23") (:authors ("Chris Barrett" . "chris+emacs@walrus.cool")) (:maintainer "Chris Barrett" . "chris+emacs@walrus.cool"))]) +(kubel . [(20191014 2010) ((transient (0 1 0)) (emacs (25 3))) "extension for controlling Kubernetes with limited permissions" single ((:commit . "101793932651b736a76d53008ef07aac4a3ff52c") (:keywords "kubernetes" "k8s" "tools" "processes") (:authors ("Adrien Brochard")) (:maintainer "Adrien Brochard") (:url . "https://github.com/abrochard/kubel"))]) +(ksp-cfg-mode . [(20190414 2348) ((emacs (24)) (cl-lib (0 5))) "major mode for editing KSP CFG files" single ((:commit . "faec8bd8456c67276d065eb68c88a30efcef59ef") (:keywords "data") (:authors ("Emily Backes" . "lucca@accela.net")) (:maintainer "Emily Backes" . "lucca@accela.net") (:url . "http://github.com/lashtear/ksp-cfg-mode"))]) +(kroman . [(20150827 2340) nil "Korean hangul romanization" single ((:commit . "90402b6ae40383e75d8ba97d66eee93eebf40f70") (:keywords "korean" "roman") (:authors ("Zhang Kai Yu" . "yeannylam@gmail.com")) (:maintainer "Zhang Kai Yu" . "yeannylam@gmail.com"))]) +(kpm-list . [(20170924 1352) nil "An emacs buffer list that tries to intelligently group together buffers." single ((:commit . "e0f5112e5ce8ec1b603f4428fa51681c68bb28f5") (:authors ("Kevin Mahoney")) (:maintainer "Kevin Mahoney") (:url . "https://github.com/KMahoney/kpm-list/"))]) +(kotlin-mode . [(20191102 1510) ((emacs (24 3))) "Major mode for kotlin" tar ((:commit . "ab610996820b5cbdb032edbf8747661131603ab8") (:keywords "languages") (:authors ("Shodai Yokoyama" . "quantumcars@gmail.com")) (:maintainer "Shodai Yokoyama" . "quantumcars@gmail.com"))]) +(kosmos-theme . [(20170502 1850) ((emacs (24))) "Black and lightgray theme with not so much syntax highlighting." single ((:commit . "616456d2376a75dc31190ad65137d179fbad4336") (:authors ("Maxim Kim" . "habamax@gmail.com")) (:maintainer "Maxim Kim" . "habamax@gmail.com") (:url . "https://github.com/habamax/kosmos-theme"))]) +(korean-holidays . [(20190102 1558) nil "Korean holidays for calendar." single ((:commit . "3f90ed86f46f8e5533f23baa40e2513ac497ca2b") (:keywords "calendar") (:authors ("SeungKi Kim" . "tttuuu888@gmail.com")) (:maintainer "SeungKi Kim" . "tttuuu888@gmail.com") (:url . "https://github.com/tttuuu888/korean-holidays"))]) +(kooten-theme . [(20161023 905) ((emacs (24 1))) "Dark color theme" single ((:commit . "d10197b4dd7af02cd14aeab2573c273a294798c3") (:keywords "themes") (:authors ("Pascal van Kooten" . "kootenpv@gmail.com")) (:maintainer "Pascal van Kooten" . "kootenpv@gmail.com") (:url . "http://github.com/kootenpv/emacs-kooten-theme"))]) +(kolon-mode . [(20140122 1134) nil "Syntax highlighting for Text::Xslate's Kolon syntax" single ((:commit . "5af0955e280ae991862189ebecd3937c5fc8fb9f") (:keywords "xslate" "perl") (:authors ("Sam Tran")) (:maintainer "Sam Tran") (:url . "https://github.com/samvtran/kolon-mode"))]) +(kodi-remote . [(20190622 1325) ((request (0 2 0)) (let-alist (1 0 4)) (json (1 4)) (cl-lib (0 5)) (f (20190109 906))) "Remote Control for Kodi" single ((:commit . "f5e932036c16e2b61a63020e006fc601e38d181e") (:keywords "kodi" "tools" "convinience") (:authors ("Stefan Huchler" . "stefan.huchler@mail.de")) (:maintainer "Stefan Huchler" . "stefan.huchler@mail.de") (:url . "http://github.com/spiderbit/kodi-remote.el"))]) +(know-your-http-well . [(20160208 2304) nil "Look up the meaning of HTTP headers, methods, relations, status codes" tar ((:commit . "3cc5ab6d2764ab7aacb1b6e026abaccbeb6c37f2"))]) +(klere-theme . [(20180415 1823) ((emacs (24))) "A dark theme with lambent color highlights and incremental grays" single ((:commit . "c064f9e5c44173c239fce239a62c8d5e61827672") (:authors ("Wamm K. D." . "jaft.r@outlook.com")) (:maintainer "Wamm K. D." . "jaft.r@outlook.com") (:url . "https://github.com/WammKD/emacs-klere-theme"))]) +(kixtart-mode . [(20150611 1604) ((emacs (24))) "major mode for Kixtart scripting files" single ((:commit . "1c2356797e7b766bbaaa2b341176a8b10499cd79") (:keywords "languages") (:authors ("Ryrun ")) (:maintainer "Ryrun ") (:url . "https://github.com/ryrun/kixtart-mode"))]) +(kiwix . [(20191016 951) ((emacs (24 4)) (cl-lib (0 5)) (request (0 3 0))) "Searching offline Wikipedia through Kiwix." single ((:commit . "1fdcfcc6c080b5232cf588460283e16180a81dc9") (:keywords "kiwix" "wikipedia") (:authors ("stardiviner" . "numbchild@gmail.com")) (:maintainer "stardiviner" . "numbchild@gmail.com") (:url . "https://github.com/stardiviner/kiwix.el"))]) +(kivy-mode . [(20180702 2029) nil "Emacs major mode for editing Kivy files" single ((:commit . "fd7e81ef8288f7e522fba43604c951e6f78a2053") (:authors ("Dean Serenevy" . "dean@serenevy.net")) (:maintainer "Dean Serenevy" . "dean@serenevy.net"))]) +(kite-mini . [(20160508 1106) ((dash (2 11 0)) (websocket (1 5))) "Remotely evaluate JavaScript in the WebKit debugger" tar ((:commit . "a68619dbc109c7989f3448426d8c1ee9e797c11f") (:keywords "webkit") (:authors ("Tung Dao" . "me@tungdao.com")) (:maintainer "Tung Dao" . "me@tungdao.com") (:url . "https://github.com/tungd/kite-mini.el"))]) +(kite . [(20130201 1938) ((json (1 2)) (websocket (0 93 1))) "WebKit inspector front-end" tar ((:commit . "7ed74d1147a6ddd152d3da65dc30df3517d53144") (:keywords "tools") (:authors ("Julian Scheid" . "julians37@gmail.com")) (:maintainer "Julian Scheid" . "julians37@gmail.com"))]) +(killer . [(20190128 10) nil "kill and delete text" single ((:commit . "ace0547944933440384ceeb5876b1f68c082d540") (:keywords "convenience") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "http://github.com/tarsius/killer"))]) +(kill-ring-search . [(20140422 1555) nil "incremental search for the kill ring" single ((:commit . "23535b4a01a1cb1574604e36c49614e84e85c883") (:keywords "convenience" "matching") (:authors ("Nikolaj Schumacher ")) (:maintainer "Nikolaj Schumacher ") (:url . "http://nschum.de/src/emacs/kill-ring-search/"))]) +(kill-or-bury-alive . [(20190713 1340) ((emacs (24 4)) (cl-lib (0 5))) "Precise control over buffer killing in Emacs" single ((:commit . "fec16e7e5bf603c6971230f344882ce7a0d04e90") (:keywords "buffer" "killing" "convenience") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:url . "https://github.com/mrkkrp/kill-or-bury-alive"))]) +(kibit-helper . [(20150508 1533) ((s (0 8)) (emacs (24))) "Conveniently use the Kibit Leiningen plugin from Emacs" single ((:commit . "16bdfff785ee05d8e74a5780f6808506d990cef7") (:keywords "languages" "clojure" "kibit") (:authors ("Jonas Enlund") ("James Elliott" . "james@brunchboy.com")) (:maintainer "Jonas Enlund") (:url . "http://www.github.com/brunchboy/kibit-helper"))]) +(kfg . [(20140909 538) ((f (0 17 1))) "an emacs configuration system" single ((:commit . "d2c9dd26618fb2f7bf1e7b6eae193b1cceba3c97") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com") (:url . "https://github.com/abingham/kfg"))]) +(keyword-search . [(20180424 1102) nil "browser keyword search from Emacs" tar ((:commit . "f8475ecaddb8804a9be6bee47678207c86ac8dee") (:keywords "web" "search" "keyword") (:maintainer "Jens Petersen") (:url . "https://github.com/juhp/keyword-search"))]) +(keyswap . [(20160813 957) ((emacs (24 3))) "swap bindings between key pairs" single ((:commit . "cd682a7c4a8d64d6bae6a005db5045232e5e7b95") (:keywords "convenience") (:authors ("Matthew Malcomson" . "hardenedapple@gmail.com")) (:maintainer "Matthew Malcomson" . "hardenedapple@gmail.com") (:url . "http://github.com/hardenedapple/keyswap.el"))]) +(keystore-mode . [(20190409 1946) ((emacs (24 3)) (origami (1 0)) (s (1 12 0)) (seq (2 20))) "A major mode for viewing and managing (java) keystores" tar ((:commit . "43bd5926348298d077c7221f37902c990df3f951") (:keywords "tools") (:authors ("Peterpaul Taekele Klein Haneveld" . "pp.kleinhaneveld@gmail.com")) (:maintainer "Peterpaul Taekele Klein Haneveld" . "pp.kleinhaneveld@gmail.com") (:url . "https://github.com/peterpaul/keystore-mode"))]) +(keyset . [(20150220 530) ((dash (2 8 0)) (cl-lib (0 5))) "A small library for structuring key bindings." single ((:commit . "41bbfc4dbed5de6ecf3ec1dba634c7c26241ca84") (:authors ("Hiroki YAMAKAWA" . "s06139@gmail.com")) (:maintainer "Hiroki YAMAKAWA" . "s06139@gmail.com") (:url . "https://github.com/HKey/keyset"))]) +(keypress-multi-event . [(20190109 530) ((emacs (24 3))) "Perform different actions for the same keypress." single ((:commit . "9de65a27e10d8ae47aa6d28c02c3eb82ee8c0b2e") (:keywords "abbrev" "convenience" "wp" "keyboard") (:authors ("Boruch Baum" . "boruch_baum@gmx.com")) (:maintainer "Boruch Baum" . "boruch_baum@gmx.com") (:url . "https://www.github.com/Boruch_Baum/emacs-keypress-multi-event"))]) +(keymap-utils . [(20191105 2240) ((cl-lib (0 3))) "keymap utilities" single ((:commit . "5d3ecdaaa36afb60e5effac43052e573bee0bb28") (:keywords "convenience" "extensions") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/tarsius/keymap-utils"))]) +(keyfreq . [(20160516 1416) ((cl-lib (0 5))) "track command frequencies" single ((:commit . "9c665c8c219d18866403897936427bb408e3d6b9") (:authors ("Ryan Yeske, Michal Nazarewicz (mina86/AT/mina86.com)")) (:maintainer "David Capello, Xah lee"))]) +(keydef . [(20090428 1931) nil "a simpler way to define keys, with kbd syntax" single ((:commit . "dff2be9f58d12d8c6a490ad0c1b2b10b55528dc0") (:keywords "convenience" "lisp" "customization" "keyboard" "keys") (:authors ("Michael John Downes" . "mjd@ams.org")) (:maintainer "Michael John Downes" . "mjd@ams.org"))]) +(keychain-environment . [(20180318 2223) nil "load keychain environment variables" single ((:commit . "d3643196de6dc79ea77f9f4805028350fd76100b") (:keywords "gnupg" "pgp" "ssh") (:authors ("Paul Tipper ")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/tarsius/keychain-environment"))]) +(keycast . [(20191105 2240) ((emacs (25 3))) "Show current command and its key in the mode line" single ((:commit . "b7ef571043b9563918e741ed966abb3f47160195") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/tarsius/keycast"))]) +(key-seq . [(20150907 756) ((key-chord (0 6))) "map pairs of sequentially pressed keys to commands" single ((:commit . "e29b083a6427d061638749194fc249ef69ad2cc0") (:keywords "convenience" "keyboard" "keybindings") (:authors ("Vyacheslav Levit" . "dev@vlevit.org")) (:maintainer "Vyacheslav Levit" . "dev@vlevit.org") (:url . "http://github.com/vlevit/key-seq.el"))]) +(key-quiz . [(20190721 1357) ((emacs (26))) "Emacs Keys Quiz" single ((:commit . "f4a27da3c09dbee62d63dd756bc44652f6319692") (:keywords "games") (:authors ("Federico Tedin" . "federicotedin@gmail.com")) (:maintainer "Federico Tedin" . "federicotedin@gmail.com") (:url . "https://github.com/federicotdn/key-quiz"))]) +(key-leap . [(20160831 1447) ((emacs (24 3))) "Leap between lines by typing keywords" single ((:commit . "b3f6ef15c8a13870475d5af159fa24b30f97dea0") (:keywords "point" "convenience") (:authors ("Martin Rykfors" . "martinrykfors@gmail.com")) (:maintainer "Martin Rykfors" . "martinrykfors@gmail.com") (:url . "https://github.com/MartinRykfors/key-leap"))]) +(key-intercept . [(20140211 749) nil "Intercept prefix keys" single ((:commit . "d9a60edb4ce893f2d3d94f242164fdcc62d43cf2") (:keywords "keyboard") (:authors ("INA Lintaro ")) (:maintainer "INA Lintaro ") (:url . "http://github.com/tarao/key-intercept-el"))]) +(key-combo . [(20150324 1439) nil "map key sequence to commands" single ((:commit . "2fb5c65bc82d5bd2964e2b163822429ab45d90a1") (:keywords "keyboard" "input") (:authors ("Yuuki Arisawa" . "yuuki.ari@gmail.com")) (:maintainer "Vitalie Spinu" . "spinuvit@gmail.com") (:url . "https://github.com/uk-ar/key-combo"))]) +(key-chord . [(20160227 1238) nil "map pairs of simultaneously pressed keys to commands" single ((:commit . "72443e9ff3c4f1c3ccaced3130236801efde3d83") (:keywords "keyboard" "chord" "input") (:authors ("David Andersson ")) (:maintainer "David Andersson "))]) +(kerl . [(20150424 2005) nil "Emacs integration for kerl" single ((:commit . "1732ee26213f021bf040919c45ad276aafcaae14") (:keywords "tools") (:authors ("Correl Roush" . "correl@gmail.com")) (:maintainer "Correl Roush" . "correl@gmail.com") (:url . "http://github.com/correl/kerl.el/"))]) +(kdeconnect . [(20180126 2340) nil "An interface for KDE Connect" single ((:commit . "ca0cbf9a628ba7b519b43fa85e0d988ca26bf853") (:keywords "kdeconnect" "android") (:authors ("Carl Lieberman" . "dev@carl.ac")) (:maintainer "Carl Lieberman" . "dev@carl.ac"))]) +(kconfig-mode . [(20190818 2030) ((emacs (24 3))) "Major mode for editing Kconfig files" single ((:commit . "02bb919596cf673828e95872dc329f2424a99864") (:keywords "kconfig" "languages" "linux" "kernel") (:authors ("Dela Anthonio" . "dell.anthonio@gmail.com")) (:maintainer "Dela Anthonio" . "dell.anthonio@gmail.com") (:url . "https://github.com/delaanthonio/kernel-modes"))]) +(karma . [(20160220 1245) ((pkg-info (0 4)) (emacs (24))) "Karma Test Runner Emacs Integration" single ((:commit . "31d3e7708246183d7ed0686be92bf23140af348c") (:keywords "language" "javascript" "js" "karma" "testing") (:authors ("Samuel Tonini")) (:maintainer "Samuel Tonini") (:url . "http://github.com/tonini/karma.el"))]) +(kapacitor . [(20190414 1908) ((emacs (25 1)) (magit (2 13 0)) (magit-popup (2 12 4))) "Main file for kapacitor-mode" single ((:commit . "e3300d8b4017a2f66b0d929cb85bcc7ee2612072") (:keywords "kapacitor" "emacs" "magit" "tools") (:authors ("Manoj Kumar Manikchand" . "manojm.321@gmail.com")) (:maintainer "Manoj Kumar Manikchand" . "manojm.321@gmail.com") (:url . "http://github.com/Manoj321/kapacitor-el"))]) +(kaomoji . [(20171227 440) ((emacs (24 3)) (helm-core (1 9 1))) "Input kaomoji superb easily" tar ((:commit . "90a1490743b2a30762f5454c9d9309018eff83dd") (:keywords "tools" "fun") (:authors ("Ono Hiroko" . "azazabc123@gmail.com")) (:maintainer "Ono Hiroko" . "azazabc123@gmail.com") (:url . "https://github.com/kuanyui/kaomoji.el"))]) +(kaolin-themes . [(20191122 1458) ((emacs (25 1)) (autothemer (0 2 2)) (cl-lib (0 6))) "A set of eye pleasing themes" tar ((:commit . "db1c43915fe68f31fffa00159b4198c32e87c8ed") (:keywords "dark" "light" "teal" "blue" "violet" "purple" "brown" "theme" "faces") (:authors ("Ogden Webb" . "ogdenwebb@gmail.com")) (:maintainer "Ogden Webb" . "ogdenwebb@gmail.com") (:url . "https://github.com/ogdenwebb/emacs-kaolin-themes"))]) +(kaocha-runner . [(20190904 1950) ((emacs (26)) (s (1 4 0)) (cider (0 21 0)) (parseedn (0 1 0))) "A package for running Kaocha tests via CIDER." single ((:commit . "1376d50f1fc91f9345351aeb4960b54bf83be59e") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com") (:url . "https://github.com/magnars/kaocha-runner.el"))]) +(kanji-mode . [(20160826 1139) nil "View stroke order for kanji characters at cursor" tar ((:commit . "eda4f8666486689d36317db7dbda54fb73d3e3d2") (:authors ("Wojciech Gac" . "wojciech.s.gac@gmail.com")) (:maintainer "Wojciech Gac" . "wojciech.s.gac@gmail.com") (:url . "http://github.com/wsgac/kanji-mode "))]) +(kanban . [(20170418 810) nil "Parse org-todo headlines to use org-tables as Kanban tables" single ((:commit . "dd11d722b20ae720f29b8aa93a3b1cad87650b33") (:keywords "outlines" "convenience") (:authors ("Arne Babenhauserheide" . "arne_bab@web.de")) (:maintainer "Arne Babenhauserheide" . "arne_bab@web.de"))]) +(kaleidoscope-evil-state-flash . [(20170728 1020) ((evil (1 2 12)) (kaleidoscope (0 1 0)) (s (1 11 0))) "Flash keyboard LEDs when changing Evil state" single ((:commit . "52b5be3277f65cb5ca657973e9bd7f914b996356") (:authors ("Gergely Nagy")) (:maintainer "Gergely Nagy") (:url . "https://github.com/algernon/kaleidoscope.el"))]) +(kaleidoscope . [(20170808 817) ((s (1 11 0))) "Controlling Kaleidoscope-powered devices." single ((:commit . "52b5be3277f65cb5ca657973e9bd7f914b996356") (:authors ("Gergely Nagy")) (:maintainer "Gergely Nagy") (:url . "https://github.com/algernon/kaleidoscope.el"))]) +(kakoune . [(20191017 1502) ((ryo-modal (0 4)) (multiple-cursors (1 4)) (expand-region (0 11 0)) (emacs (25 1))) "A simulation, but not emulation, of kakoune" tar ((:commit . "d73d14e69ea38076af50cc69f846808383ff539d") (:authors ("Joseph Morag" . "jm4157@columbia.edu")) (:maintainer "Joseph Morag" . "jm4157@columbia.edu") (:url . "https://github.com/jmorag/kakoune.el"))]) +(kakapo-mode . [(20171004 451) ((cl-lib (0 5))) "TABS (hard or soft) for indentation (leading whitespace), and SPACES for alignment." single ((:commit . "292e07203c676361a1d918deb5acf2123cd70eaf") (:keywords "indentation") (:url . "https://github.com/listx/kakapo-mode"))]) +(kaesar-mode . [(20160128 1008) ((kaesar (0 1 4)) (cl-lib (0 3))) "Encrypt/Decrypt buffer by AES with password." single ((:commit . "d087075cb1a46c2c85cd075220e09b2eaef9b86e") (:keywords "data" "convenience") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:url . "https://github.com/mhayashi1120/Emacs-kaesar"))]) +(kaesar-file . [(20160128 1008) ((kaesar (0 1 1))) "Encrypt/Decrypt file by AES with password." single ((:commit . "d087075cb1a46c2c85cd075220e09b2eaef9b86e") (:keywords "data" "files") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:url . "https://github.com/mhayashi1120/Emacs-kaesar"))]) +(kaesar . [(20160128 1008) ((cl-lib (0 3))) "Another AES algorithm encrypt/decrypt string with password." single ((:commit . "d087075cb1a46c2c85cd075220e09b2eaef9b86e") (:keywords "data") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:url . "https://github.com/mhayashi1120/Emacs-kaesar"))]) +(k8s-mode . [(20191006 849) ((emacs (24 3)) (yaml-mode (0 0 10))) "Major mode for Kubernetes configuration file" tar ((:commit . "5984acee6f3891afa78acfd1d08c44a24953a233") (:authors ("Giap Tran" . "txgvnn@gmail.com")) (:maintainer "Giap Tran" . "txgvnn@gmail.com") (:url . "https://github.com/TxGVNN/emacs-k8s-mode"))]) +(jvm-mode . [(20150422 708) ((dash (2 6 0)) (emacs (24))) "Monitor and manage your JVMs" single ((:commit . "3355dbaf5b0185aadfbad24160399abb32c5bea0") (:keywords "convenience") (:authors ("Martin Trojer" . "martin.trojer@gmail.com")) (:maintainer "Martin Trojer" . "martin.trojer@gmail.com") (:url . "https://github.com/martintrojer/jvm-mode.el"))]) +(jupyter . [(20191019 1519) ((emacs (26)) (zmq (0 10 3)) (cl-lib (0 5)) (simple-httpd (1 5 0)) (websocket (1 9))) "Jupyter" tar ((:commit . "9e3c1633586982e278f072dfaaabd115fa4d19f7") (:authors ("Nathaniel Nicandro" . "nathanielnicandro@gmail.com")) (:maintainer "Nathaniel Nicandro" . "nathanielnicandro@gmail.com") (:url . "https://github.com/dzop/emacs-jupyter"))]) +(jumplist . [(20151120 345) ((cl-lib (0 5))) "Jump like vim jumplist or ex jumplist" single ((:commit . "c482d137d95bc5e1bcd790cdbde25b7f729b2502") (:keywords "jumplist" "vim") (:authors ("ganmacs ")) (:maintainer "ganmacs ") (:url . "https://github.com/ganmacs/jumplist"))]) +(jump-tree . [(20171014 1551) nil "Treat position history as a tree" tar ((:commit . "282267dc6305889e31d46b405b7ad4dfe5923b66") (:keywords "convenience" "position" "jump" "tree") (:authors ("Wen Yang" . "yangwen0228@foxmail.com")) (:maintainer "Wen Yang" . "yangwen0228@foxmail.com") (:url . "https://github.com/yangwen0228/jump-tree"))]) +(jump-to-line . [(20130122 1653) nil "Jump to line number at point." single ((:commit . "01ef8c3529d85e6c59cc20840acbc4a8e8325bc8") (:keywords "jump" "line" "back" "file" "ruby" "csharp" "python" "perl") (:authors ("ongaeshi")) (:maintainer "ongaeshi"))]) +(jump-char . [(20180601 1348) nil "navigation by char" single ((:commit . "1e31a3c687f2b3c71bbfab881c6d75915534bb9e") (:authors ("Le Wang")) (:maintainer "Le Wang") (:url . "https://github.com/lewang/jump-char"))]) +(jump . [(20161127 128) ((findr (0 7)) (inflections (2 4)) (cl-lib (0 5))) "build functions which contextually jump between files" single ((:commit . "e4f1372cf22e811faca52fc86bdd5d817498a4d8") (:keywords "project" "convenience" "navigation") (:authors ("Eric Schulte")) (:maintainer "Eric Schulte") (:url . "http://github.com/eschulte/jump.el"))]) +(jumblr . [(20170727 2043) ((s (1 8 0)) (dash (2 2 0))) "an anagram game for emacs" tar ((:commit . "34533dfb9db8538c005f4eaffafeff7ed193729f") (:keywords "anagram" "word game" "games") (:url . "https://github.com/mkmcc/jumblr"))]) +(julia-shell . [(20161125 1910) ((julia-mode (0 3))) "Major mode for an inferior Julia shell" tar ((:commit . "583a0b2ca20461ab4356929fd0f2212c22341b69") (:authors ("Dennis Ogbe" . "dogbe@purdue.edu")) (:maintainer "Dennis Ogbe" . "dogbe@purdue.edu"))]) +(julia-repl . [(20190908 1717) ((emacs (25))) "A minor mode for a Julia REPL" single ((:commit . "e3c38251cbd684188812f15aa039fb66034910b7") (:keywords "languages") (:authors ("Tamas Papp" . "tkpapp@gmail.com")) (:maintainer "Tamas Papp" . "tkpapp@gmail.com") (:url . "https://github.com/tpapp/julia-repl"))]) +(julia-mode . [(20191108 1436) nil "Major mode for editing Julia source code" tar ((:commit . "addd3d461b21d83da13331b96f198e908cd9b95e") (:keywords "languages") (:url . "https://github.com/JuliaLang/julia"))]) +(jtags . [(20160211 2029) nil "enhanced tags functionality for Java development" tar ((:commit . "b50daa48510f71e74ce0ec2eb85030896a79cf96") (:keywords "languages" "tools") (:authors ("Alexander Baltatzis" . "alexander@baltatzis.com") ("Johan Dykstrom" . "jody4711-sf@yahoo.se")) (:maintainer "Johan Dykstrom" . "jody4711-sf@yahoo.se") (:url . "http://jtags.sourceforge.net"))]) +(jsx-mode . [(20191116 1044) nil "major mode for JSX, an altJS" single ((:commit . "e3f52e9c5ea2a61cbe288d8cd3525a335f5d3afd") (:authors ("Takeshi Arabiki (abicky)")) (:maintainer "Takeshi Arabiki (abicky)") (:url . "https://github.com/jsx/jsx-mode.el"))]) +(jst . [(20150604 1138) ((s (1 9)) (f (0 17)) (dash (2 10)) (pcache (0 3)) (emacs (24 4))) "JS test mode" single ((:commit . "2a3fd16c992f7790dc67134ef06a814c3d20579c") (:keywords "js" "javascript" "jasmine" "coffee" "coffeescript") (:authors ("Cheung Hoi Yu" . "yeannylam@gmail.com")) (:maintainer "Cheung Hoi Yu" . "yeannylam@gmail.com") (:url . "https://github.com/cheunghy/jst-mode"))]) +(jss . [(20130508 1423) ((emacs (24 1)) (websocket (0)) (js2-mode (0))) "An emacs interface to webkit and mozilla debuggers" tar ((:commit . "41749257aecf13c7bd6ed489b5ab3304d06e40bc") (:keywords "languages") (:authors ("Marco Baringer" . "mb@bese.it")) (:maintainer "Marco Baringer" . "mb@bese.it"))]) +(jsonnet-mode . [(20181211 1853) ((emacs (24))) "Major mode for editing jsonnet files" single ((:commit . "2b90b4e12a11c42df0f1e5db327a50555b6ff023") (:keywords "languages") (:authors ("Nick Lanham")) (:maintainer "Nick Lanham") (:url . "https://github.com/mgyucht/jsonnet-mode"))]) +(jsonl . [(20190623 509) ((emacs (25))) "Utility functions for working with line-delimited JSON" single ((:commit . "3dd0b7bb2b4bce9f9de7367941f0cc78f82049c9") (:keywords "tools") (:authors ("Erik Anderson" . "erik@ebpa.link")) (:maintainer "Erik Anderson" . "erik@ebpa.link") (:url . "https://github.com/ebpa/jsonl.el"))]) +(json-snatcher . [(20150512 347) ((emacs (24))) "Grabs the path to JSON values in a JSON file" single ((:commit . "c4cecc0a5051bd364373aa499c47a1bb7a5ac51c") (:authors ("Sterling Graham" . "sterlingrgraham@gmail.com")) (:maintainer "Sterling Graham" . "sterlingrgraham@gmail.com") (:url . "http://github.com/sterlingg/json-snatcher"))]) +(json-rpc-server . [(20190714 1521) ((emacs (26))) "Server-side JSON-RPC library." single ((:commit . "1623346b308dc8f593346dc947fdc4092d674834") (:keywords "tools" "comm" "json" "rpc") (:authors ("GitHub user \"Jcaw\"")) (:maintainer "GitHub user \"Jcaw\"") (:url . "https://github.com/jcaw/json-rpc-server.el"))]) +(json-rpc . [(20180104 1528) ((emacs (24 1)) (cl-lib (0 5))) "JSON-RPC library" single ((:commit . "0992ae71964055230aa5d4d934a1b93b5dfd7eb4") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/elisp-json-rpc"))]) +(json-reformatter-jq . [(20190425 925) ((emacs (24)) (reformatter (0 3))) "reformat json using jq" single ((:commit . "86bb6f7f7e116bcb0d52f37db308085b5b6ecb16") (:keywords "languages") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee") (:url . "https://github.com/wbolster/emacs-json-reformatter-jq"))]) +(json-reformat . [(20160212 853) nil "Reformatting tool for JSON" single ((:commit . "8eb6668ed447988aea06467ba8f42e1f2178246f") (:keywords "json") (:authors ("Wataru MIYAGUNI" . "gonngo@gmail.com")) (:maintainer "Wataru MIYAGUNI" . "gonngo@gmail.com") (:url . "https://github.com/gongo/json-reformat"))]) +(json-process-client . [(20190827 1858) ((emacs (25 1))) "Interact with a TCP process using JSON" single ((:commit . "422606a7bf08d13646e3db4f6c2bddb69bd61dec") (:authors ("Nicolas Petton" . "nicolas@petton.fr") ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr") (:url . "https://gitlab.petton.fr/nico/json-process-client"))]) +(json-navigator . [(20190131 1031) ((emacs (24 3)) (hierarchy (0 6 0))) "View and navigate JSON structures" single ((:commit . "f4cde60c4203fc70cc7ff22ed1d6579159ce2598") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://github.com/DamienCassou/json-navigator"))]) +(json-mode . [(20190123 422) ((json-reformat (0 0 5)) (json-snatcher (1 0 0))) "Major mode for editing JSON files." single ((:commit . "0e819e519ae17a2686e0881c4ca51fa873fa9b83") (:authors ("Josh Johnston")) (:maintainer "Josh Johnston") (:url . "https://github.com/joshwnj/json-mode"))]) +(jsfmt . [(20180920 1008) nil "Interface to jsfmt command for javascript files" single ((:commit . "ca141a135c7700eaedef92561d334e1fb7dc28a1") (:authors ("Brett Langdon" . "brett@blangdon.com")) (:maintainer "Brett Langdon" . "brett@blangdon.com") (:url . "https://github.com/brettlangdon/jsfmt.el"))]) +(jscs . [(20151015 1749) ((emacs (24 1)) (cl-lib (0 5))) "Consistent JavaScript editing using JSCS" single ((:commit . "9d39d0f2355e69a020bf76242504f3a33e013ccf") (:keywords "languages" "convenience") (:authors ("papaeye" . "papaeye@gmail.com")) (:maintainer "papaeye" . "papaeye@gmail.com") (:url . "https://github.com/papaeye/emacs-jscs"))]) +(js3-mode . [(20160515 1550) nil "An improved JavaScript editing mode" tar ((:commit . "229aeb374f1b1f3ee5c59b8ba3eebb6385c232cb") (:keywords "javascript" "languages") (:authors ("Thom Blake" . "webmaster@thomblake.com")) (:maintainer "Thom Blake" . "webmaster@thomblake.com"))]) +(js2-refactor . [(20190630 2108) ((js2-mode (20101228)) (s (1 9 0)) (multiple-cursors (1 0 0)) (dash (1 0 0)) (s (1 0 0)) (yasnippet (0 9 0 1))) "A JavaScript refactoring library for emacs." tar ((:commit . "d4c40b5fc86d3edd7c6a7d83ac86483ee1cb7a28"))]) +(js2-mode . [(20190815 1327) ((emacs (24 1)) (cl-lib (0 5))) "Improved JavaScript editing mode" tar ((:commit . "b3841a7a304d9d1328fdb0868fbbecf0c2f9831f") (:keywords "languages" "javascript") (:authors ("Steve Yegge" . "steve.yegge@gmail.com") ("mooz" . "stillpedant@gmail.com") ("Dmitry Gutov" . "dgutov@yandex.ru")) (:maintainer "Steve Yegge" . "steve.yegge@gmail.com") (:url . "https://github.com/mooz/js2-mode/"))]) +(js2-highlight-vars . [(20170418 1829) ((emacs (24 4)) (js2-mode (20150908))) "highlight occurrences of the variable under cursor" single ((:commit . "e3bb177e50f76b272e8073a94d4f46be6512a163") (:authors ("Mihai Bazon" . "mihai.bazon@gmail.com")) (:maintainer "Mihai Bazon" . "mihai.bazon@gmail.com") (:url . "http://mihai.bazon.net/projects/editing-javascript-with-emacs-js2-mode/js2-highlight-vars-mode"))]) +(js2-closure . [(20170816 1918) ((js2-mode (20150909))) "Google Closure dependency manager" single ((:commit . "f59db386d7d0693935d0bf52babcd2c203c06d04") (:keywords "javascript" "closure") (:authors ("Justine Tunney" . "jart@google.com")) (:maintainer "Justine Tunney" . "jart@google.com") (:url . "http://github.com/jart/js2-closure"))]) +(js-react-redux-yasnippets . [(20190911 1259) ((emacs (24 3)) (yasnippet (0 8 0))) "JavaScript,React,Redux yasnippets" tar ((:commit . "70785d126a28ffcb314fb4b354319418586e06b1") (:keywords "convenience" "snippets") (:authors ("sooqua")) (:maintainer "sooqua") (:url . "https://github.com/sooqua/js-react-redux-yasnippets"))]) +(js-import . [(20190218 1319) ((emacs (24 4)) (f (0 19 0)) (projectile (0 14 0)) (dash (2 13 0))) "Import Javascript files from your current project or dependencies" single ((:commit . "2ab3b120cc94ebf4bee2d959c8869440bc4c7484") (:keywords "tools") (:authors ("Jakob Lind" . "karl.jakob.lind@gmail.com")) (:maintainer "Jakob Lind" . "karl.jakob.lind@gmail.com") (:url . "https://github.com/jakoblind/js-import"))]) +(js-format . [(20170119 102) ((emacs (24 1)) (js2-mode (20101228))) "Format or transform code style using NodeJS server with different javascript formatter" tar ((:commit . "544bda9be72b74ec2d442543ba60cff727d96669") (:keywords "js" "javascript" "format" "standard" "jsbeautify" "esformatter" "airbnb") (:authors ("James Yang" . "jamesyang999@gmail.com")) (:maintainer "James Yang" . "jamesyang999@gmail.com") (:url . "http://github.com/futurist/js-format.el"))]) +(js-doc . [(20160715 434) nil "Insert JsDoc style comment easily" single ((:commit . "f0606e89d5aa89146f96edb38cf69af0068a9d1e") (:keywords "document" "comment") (:authors ("mooz" . "stillpedant@gmail.com")) (:maintainer "mooz" . "stillpedant@gmail.com") (:url . "https://github.com/mooz/js-doc"))]) +(js-comint . [(20190606 6) ((emacs (24 3))) "JavaScript interpreter in window." single ((:commit . "ab8953bdf0176b1fadd7a3bb621f848ec5dc1f0c") (:keywords "javascript" "node" "inferior-mode" "convenience") (:authors ("Paul Huff" . "paul.huff@gmail.com")) (:maintainer "Chen Bin ") (:url . "https://github.com/redguardtoo/js-comint"))]) +(js-codemod . [(20190921 941) ((emacs (24 4))) "Run js-codemod on current sentence or selected region" tar ((:commit . "056bdf3e5e0c807b8cf17edb5834179a90fb722b") (:keywords "js" "codemod" "region") (:authors (nil . "Torgeir Thoresen <@torgeir>")) (:maintainer nil . "Torgeir Thoresen <@torgeir>"))]) +(js-auto-format-mode . [(20180807 1352) ((emacs (24))) "Minor mode for auto-formatting JavaScript code" single ((:commit . "0ea56bf620105af71d2575f62f9527773b6e3d68") (:keywords "languages") (:authors ("Masafumi Koba" . "ybiquitous@gmail.com")) (:maintainer "Masafumi Koba" . "ybiquitous@gmail.com") (:url . "https://github.com/ybiquitous/js-auto-format-mode"))]) +(js-auto-beautify . [(20161031 509) ((web-beautify (0 3 1)) (web-mode (14 0 27))) "auto format you js/jsx file" single ((:commit . "180d15af7b5dfaab4ee1954cca2fdc797932f9de") (:authors (nil . "quanwei9958@126.com")) (:maintainer nil . "quanwei9958@126.com"))]) +(jquery-doc . [(20150812 758) nil "jQuery api documentation interface for emacs" tar ((:commit . "24032284919b942ec27707d929bdd8bf48420062") (:keywords "docs" "jquery") (:authors ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainer "Anantha kumaran" . "ananthakumaran@gmail.com"))]) +(jq-mode . [(20190718 913) ((emacs (25 1))) "Edit jq scripts." tar ((:commit . "a439bd395e0ad6b6110789b8f10d0efbe1fe889d") (:authors ("Bjarte Johansen ")) (:maintainer "Bjarte Johansen ") (:url . "https://github.com/ljos/jq-mode"))]) +(jq-format . [(20190428 1434) ((emacs (24)) (reformatter (0 3))) "Reformat JSON and JSONLines using jq" single ((:commit . "47e1c5adb89b37b4d53fe01302d8c675913c20e7") (:keywords "languages") (:authors ("wouter bolsterlee" . "wouter@bolsterl.ee")) (:maintainer "wouter bolsterlee" . "wouter@bolsterl.ee") (:url . "https://github.com/wbolster/emacs-jq-format"))]) +(jpop . [(20170410 1250) ((emacs (24)) (dash (2 11 0)) (cl-lib (0 5))) "Lightweight project caching and navigation framework" tar ((:commit . "7628b03260be96576b34459d45959ee77d8b2110") (:keywords "project" "convenience") (:authors ("Dom Charlesworth" . "dgc336@gmail.com")) (:maintainer "Dom Charlesworth" . "dgc336@gmail.com") (:url . "https://github.com/domtronn/jpop.el"))]) +(jonprl-mode . [(20160819 59) ((emacs (24 3)) (cl-lib (0 5)) (yasnippet (0 8 0))) "A major mode for editing JonPRL files" tar ((:commit . "6059bb64891fae45827174e044d6a87ac07172d8") (:keywords "languages") (:authors ("David Raymond Christiansen" . "david@davidchristiansen.dk")) (:maintainer "David Raymond Christiansen" . "david@davidchristiansen.dk"))]) +(jknav . [(20121006 2025) nil "Automatically enable j/k keys for line-based navigation" single ((:commit . "861245715c728503dad6573278fdd75c271dbf8b") (:keywords "keyboard" "navigation") (:authors ("Aaron Culich" . "aculich@gmail.com")) (:maintainer "Aaron Culich" . "aculich@gmail.com"))]) +(jist . [(20161229 1721) ((emacs (24 4)) (dash (2 12 0)) (seq (1 11)) (let-alist (1 0 4)) (magit (2 1 0)) (request (0 2 0))) "Gist integration" single ((:commit . "da0692452e312a99bb27d8708504b521798aca48") (:keywords "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:url . "https://github.com/emacs-pe/jist.el"))]) +(jiralib2 . [(20190927 2010) ((emacs (25)) (request (0 3)) (dash (2 14 1))) "JIRA REST API bindings to Elisp" single ((:commit . "e913f8e4a994850d2cff18ce2b1f4177cac62c91") (:keywords "comm" "jira" "rest" "api") (:authors ("Henrik Nyman" . "h@nyymanni.com")) (:maintainer "Henrik Nyman" . "h@nyymanni.com") (:url . "https://github.com/nyyManni/jiralib2"))]) +(jira-markup-mode . [(20150601 2109) nil "Emacs Major mode for JIRA-markup-formatted text files" single ((:commit . "4fc534c47df26a2f402bf835ebe2ed89474a4062") (:keywords "jira" "markup") (:authors ("Matthias Nuessler" . "m.nuessler@web.de>")) (:maintainer "Matthias Nuessler" . "m.nuessler@web.de>") (:url . "https://github.com/mnuessler/jira-markup-mode"))]) +(jinja2-mode . [(20141128 1007) nil "A major mode for jinja2" single ((:commit . "cfaa7bbe7bb290cc500440124ce89686f3e26f86") (:authors ("Florian Mounier aka paradoxxxzero")) (:maintainer "Florian Mounier aka paradoxxxzero"))]) +(jg-quicknav . [(20170809 130) ((s (1 9 0)) (cl-lib (0 5))) "Quickly navigate the file system to find a file." single ((:commit . "c8d53e774d63e68a944092c08a026b57da741038") (:keywords "navigation") (:authors ("Jeff Gran" . "jeff@jeffgran.com")) (:maintainer "Jeff Gran" . "jeff@jeffgran.com") (:url . "https://github.com/jeffgran/jg-quicknav"))]) +(jetbrains . [(20180301 502) ((emacs (24 3)) (cl-lib (0 5)) (f (0 17))) "JetBrains IDE bridge" single ((:commit . "56f71a17d455581c10d48f6dbb31d9e2126227bf") (:keywords "tools" "php") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:url . "https://github.com/emacs-php/jetbrains.el"))]) +(jest . [(20181216 459) ((emacs (24 4)) (dash (2 12 0)) (dash-functional (2 12 0)) (magit-popup (2 12 0)) (projectile (0 14 0)) (s (1 12 0)) (js2-mode (20180301)) (cl-lib (0 6 1))) "helpers to run jest" single ((:commit . "4c3b718b6a6fd4bf1d6209be1beffa33f6156b90") (:keywords "jest" "javascript" "testing") (:authors ("Edmund Miller" . "edmund.a.miller@gmail.com")) (:maintainer "Edmund Miller" . "edmund.a.miller@gmail.com") (:url . "https://github.com/emiller88/emacs-jest/"))]) +(jenkins-watch . [(20121004 2326) nil "Watch continuous integration build status" single ((:commit . "37b84dfbd98240a57ff798e1ff8bc7dba2913577") (:authors ("Andrew Taylor" . "ataylor@redtoad.ca")) (:maintainer "Andrew Taylor" . "ataylor@redtoad.ca") (:url . "https://github.com/ataylor284/jenkins-watch"))]) +(jenkins . [(20190521 400) ((dash (2 12)) (emacs (24 3)) (json (1 4))) "Minimalistic Jenkins client for Emacs" single ((:commit . "9c7b9d4cb39eff7d6ac4d0cbd5ebc103dc86cac2") (:keywords "jenkins" "convenience") (:authors ("Rustem Muslimov" . "r.muslimov@gmail.com")) (:maintainer "Rustem Muslimov" . "r.muslimov@gmail.com"))]) +(jemdoc-mode . [(20170704 2027) ((emacs (24 3))) "Major mode for editing jemdoc files" single ((:commit . "529b4d4681e1198b9892f340fdd6c3f1592a047a") (:keywords "convenience" "usability") (:authors ("Dimitar Dimitrov" . "mail.mitko@gmail.com")) (:maintainer "Dimitar Dimitrov" . "mail.mitko@gmail.com") (:url . "https://github.com/drdv/jemdoc-mode"))]) +(jekyll-modes . [(20141117 1314) ((polymode (0 2))) "Major modes (markdown and HTML) for authoring Jekyll content" single ((:commit . "7cb10b50fd2883e3f7b10fdfd98f19f2f0b2381c") (:keywords "docs") (:authors ("Fredrik Appelberg" . "fredrik@milgrim.local")) (:maintainer "Fredrik Appelberg" . "fredrik@milgrim.local") (:url . "https://github.com/fred-o/jekyll-modes"))]) +(jeison . [(20190721 1651) ((emacs (25 1)) (dash (2 16 0))) "A library for declarative JSON parsing" single ((:commit . "66e276c1f2f08ca54d2cd60f2c9f974c662aae8b") (:keywords "lisp" "json" "data-types") (:url . "http://github.com/SavchenkoValeriy/jeison"))]) +(jedi-direx . [(20140310 936) ((jedi (0 1 2)) (direx (0 1 -3))) "Tree style source code viewer for Python buffer" single ((:commit . "7a2e677400717ed12b959cb5988e7b3fb1c12117") (:authors ("Takafumi Arakaki ")) (:maintainer "Takafumi Arakaki "))]) +(jedi-core . [(20191011 1750) ((emacs (24)) (epc (0 1 0)) (python-environment (0 0 2)) (cl-lib (0 5))) "Common code of jedi.el and company-jedi.el" tar ((:commit . "9d5f29116c4d42cae561a9d69e6fba2b61e2cf43") (:authors ("Takafumi Arakaki ")) (:maintainer "Takafumi Arakaki "))]) +(jedi . [(20191011 1750) ((emacs (24)) (jedi-core (0 2 2)) (auto-complete (1 4))) "a Python auto-completion for Emacs" single ((:commit . "9d5f29116c4d42cae561a9d69e6fba2b61e2cf43") (:authors ("Takafumi Arakaki ")) (:maintainer "Takafumi Arakaki "))]) +(jdee . [(20191102 1426) ((emacs (24 3)) (flycheck (30)) (memoize (1 0 1)) (dash (2 13 0)) (s (1 12 0))) "Java Development Environment for Emacs" tar ((:commit . "b510a29f1fc1bea218a6230fb219922775687c78") (:keywords "java" "tools") (:authors ("Paul Kinnucan" . "pkinnucan@attbi.com")) (:maintainer "Paul Landes") (:url . "http://github.com/jdee-emacs/jdee"))]) +(jdecomp . [(20170224 2200) ((emacs (24 5))) "Interface to Java decompilers" single ((:commit . "692866abc83deedce62be8d6040cf24dda7fb7a8") (:keywords "decompile" "java" "languages" "tools") (:authors ("Tianxiang Xiong" . "tianxiang.xiong@gmail.com")) (:maintainer "Tianxiang Xiong" . "tianxiang.xiong@gmail.com") (:url . "https://github.com/xiongtx/jdecomp"))]) +(jbeans-theme . [(20180309 1625) ((emacs (24))) "Jbeans theme for GNU Emacs 24 (deftheme)" single ((:commit . "3caa95998d8492a2ca6c17971de499ca15609871") (:authors ("Adam Olsen" . "arolsen@gmail.com")) (:maintainer "Adam Olsen" . "arolsen@gmail.com") (:url . "https://github.com/synic/jbeans-emacs"))]) +(jazz-theme . [(20170411 1411) nil "A warm color theme for Emacs 24+." single ((:commit . "b1cb78a97cc4050f19d88a89e455c3e52d98240e") (:authors ("Roman Parykin" . "donderom@ymail.com")) (:maintainer "Roman Parykin" . "donderom@ymail.com") (:url . "https://github.com/donderom/jazz-theme"))]) +(jaword . [(20170426 627) ((tinysegmenter (0 1))) "Minor-mode for handling Japanese words better" single ((:commit . "ac062b0e5ab4bd3270497e80aa0f3ac033a0493f") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) +(javap-mode . [(20120223 2208) nil "Javap major mode" single ((:commit . "864c1130e204b2072e1d19cd027b6fce8ebe6629") (:url . "http://github.com/hiredman/javap-mode"))]) +(javadoc-lookup . [(20160214 31) ((cl-lib (0 3))) "Javadoc Emacs integration with Maven" tar ((:commit . "507a2dd443d60b537b8f779c1847e2cd0ccd1382") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/javadoc-lookup"))]) +(java-snippets . [(20160627 252) ((yasnippet (0 8 0))) "Yasnippets for Java" tar ((:commit . "6d0e2768823be27dbe07448f4cb244cd657a7136") (:authors ("Takayoshi Kimura")) (:maintainer "Takayoshi Kimura") (:url . "https://github.com/nekop/yasnippet-java-mode"))]) +(java-imports . [(20170913 1410) ((emacs (24 4)) (s (1 10 0)) (pcache (0 3 2))) "Code for dealing with Java imports" single ((:commit . "e96ff44ed48b362ab6227b8b802b84d84f78bcaa") (:keywords "java") (:authors ("Lee Hinman" . "lee@writequit.org")) (:maintainer "Lee Hinman" . "lee@writequit.org") (:url . "http://www.github.com/dakrone/emacs-java-imports"))]) +(jastadd-ast-mode . [(20161219 926) ((emacs (24))) "Major mode for editing JastAdd AST files" single ((:commit . "a29fdb470cbf0a398164950a3b0d2217de48e0c0") (:keywords "languages") (:authors ("Rudi Schlatte" . "rudi@constantly.at")) (:maintainer "Rudi Schlatte" . "rudi@constantly.at") (:url . "https://github.com/rudi/jastadd-ast-mode"))]) +(jasminejs-mode . [(20150527 5) nil "A minor mode for manipulating jasmine test files" tar ((:commit . "9f8044bf81ab5b4841a30b0bd099916e1b7ff54a") (:keywords "javascript" "jasmine") (:authors ("Eric Stolten" . "stoltene2@gmail.com")) (:maintainer "Eric Stolten" . "stoltene2@gmail.com") (:url . "https://github.com/stoltene2/jasminejs-mode"))]) +(jar-manifest-mode . [(20160501 26) nil "Major mode to edit JAR manifest files" single ((:commit . "270dae14c481300f75ed96dad3a5ae42ca928a1d") (:keywords "convenience" "languages") (:authors ("Omair Majid" . "omair.majid@gmail.com")) (:maintainer "Omair Majid" . "omair.majid@gmail.com") (:url . "http://github.com/omajid/jar-manifest-mode"))]) +(jape-mode . [(20140903 1506) nil "An Emacs editing mode mode for GATE's JAPE files" single ((:commit . "85b9182850707b5d107391f6caee5bd401507a7d") (:keywords "languages" "jape" "gate") (:url . "http://github.com/tanzoniteblack/jape-mode"))]) +(japanlaw . [(20160615 643) ((cl-lib (0 5))) "Japan law from law.e-gov.go.jp" single ((:commit . "1bbdef942f28c61a0adb89d1b3c2cca5b10ca2dc") (:keywords "docs" "help") (:authors ("Kazushi NODA (http://www.ne.jp/asahi/alpha/kazu/)")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com"))]) +(japanese-holidays . [(20190317 1220) ((cl-lib (0 3))) "calendar functions for the Japanese calendar" single ((:commit . "45e70a6eaf4a555fadc58ab731d522a037a81997") (:keywords "calendar") (:authors ("Takashi Hattori" . "hattori@sfc.keio.ac.jp") ("Hiroya Murata" . "lapis-lazuli@pop06.odn.ne.jp")) (:maintainer "Takashi Hattori" . "hattori@sfc.keio.ac.jp") (:url . "https://github.com/emacs-jp/japanese-holidays"))]) +(janet-mode . [(20191112 2109) ((emacs (24 3))) "Defines a major mode for Janet" single ((:commit . "c69935556764032e177889e9bfe69c008d370d6e") (:authors ("Adam Schwalm" . "adamschwalm@gmail.com")) (:maintainer "Adam Schwalm" . "adamschwalm@gmail.com") (:url . "https://github.com/ALSchwalm/janet-mode"))]) +(jammer . [(20160310 859) nil "Punish yourself for using Emacs inefficiently" single ((:commit . "48aa795df6df7ae6484518bcd0398293ca49d7c6") (:keywords "games") (:authors ("Vasilij Schneidermann" . "v.schneidermann@gmail.com")) (:maintainer "Vasilij Schneidermann" . "v.schneidermann@gmail.com") (:url . "https://github.com/wasamasa/jammer"))]) +(jade-mode . [(20160525 1441) nil "Major mode for editing .jade files" single ((:commit . "4dbde92542fc7ad61df38776980905a4721d642e") (:authors ("Brian M. Carlson and other contributors")) (:maintainer "Brian M. Carlson and other contributors") (:url . "https://github.com/brianc/jade-mode"))]) +(jack-connect . [(20191122 1017) nil "Manage jack connections within Emacs" single ((:commit . "d0b24d8332e4b0efe317da61bc627d97e34ea28e") (:authors ("Stefano Barbi" . "stefanobarbi@gmail.com")) (:maintainer "Stefano Barbi" . "stefanobarbi@gmail.com"))]) +(jabber-otr . [(20150918 1144) ((emacs (24)) (jabber (0 8 92))) "Off-The-Record messaging for jabber.el" tar ((:commit . "2692b1530234e0ba9a0d6c1eaa1cbe8679f193c0") (:keywords "comm") (:authors ("Magnus Henoch" . "magnus.henoch@gmail.com")) (:maintainer "Magnus Henoch" . "magnus.henoch@gmail.com") (:url . "https://github.com/legoscia/emacs-jabber-otr/"))]) +(jabber . [(20180927 2325) ((fsm (0 2)) (srv (0 2))) "A Jabber client for Emacs." tar ((:commit . "fff33826f42e040dad7ef64ea312d85215d3b0a1"))]) +(j-mode . [(20171224 1856) nil "Major mode for editing J programs" tar ((:commit . "e8725ac8af95498faabb2ca3ab3bd809a8f148e6") (:keywords "j" "languages") (:url . "http://github.com/zellio/j-mode"))]) +(iy-go-to-char . [(20141029 1546) nil "Go to next CHAR which is similar to \"f\" and \"t\" in vim" single ((:commit . "04ab4f5f3a241cbbc9b8c178a22b412a62f632f9") (:keywords "navigation" "search") (:authors ("Ian Yang ")) (:maintainer "Ian Yang ") (:url . "https://github.com/doitian/iy-go-to-char"))]) +(ix . [(20131027 1629) ((grapnel (0 5 3))) "Emacs client for http://ix.io pastebin" single ((:commit . "aea4c54a5cc5a6f26637353c16a3a0e70fc76963") (:authors ("Abhishek L" . "abhishekl.2006@gmail.com")) (:maintainer "Abhishek L" . "abhishekl.2006@gmail.com") (:url . "http://www.github.com/theanalyst/ix.el"))]) +(ivy-youtube . [(20181126 1039) ((request (0 2 0)) (ivy (0 8 0)) (cl-lib (0 5))) "Query YouTube and play videos in your browser" single ((:commit . "849b6db7ef02b080a86c1b887488e2935c31059a") (:keywords "youtube" "multimedia" "mpv" "vlc") (:authors ("Brunno dos Santos")) (:maintainer "Brunno dos Santos") (:url . "https://github.com/squiter/ivy-youtube"))]) +(ivy-ycmd . [(20180909 1225) ((ycmd (1 3)) (emacs (24)) (ivy (0 10 0)) (dash (2 14 1))) "Ivy interface to ycmd" single ((:commit . "25bfee8f676e4ecbb645e4f30b47083410a00c58") (:keywords "tools") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com") (:url . "https://github.com/abingham/emacs-ivy-ycmd"))]) +(ivy-yasnippet . [(20181002 1655) ((emacs (24)) (ivy (0 10 0)) (yasnippet (0 12 2)) (dash (2 14 1)) (cl-lib (0))) "Preview yasnippets with ivy" single ((:commit . "32580b4fd23ebf9ca7dde96704f7d53df6e253cd") (:keywords "convenience") (:authors ("MichaÅ‚ Krzywkowski" . "k.michal@zoho.com")) (:maintainer "MichaÅ‚ Krzywkowski" . "k.michal@zoho.com") (:url . "https://github.com/mkcms/ivy-yasnippet"))]) +(ivy-xref . [(20190611 1305) ((emacs (25 1)) (ivy (0 10 0))) "Ivy interface for xref results" single ((:commit . "1a35fc0f070388701b05b0a455cbe262e924d547") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com") (:url . "https://github.com/alexmurray/ivy-xref"))]) +(ivy-xcdoc . [(20160917 1055) ((ivy (0 8 0)) (emacs (24 4))) "Search Xcode documents with ivy interface." single ((:commit . "5ea22af36c4c2737fb0bec53432c233482d8b314") (:keywords "ivy" "xcode" "xcdoc") (:authors ("C.T.Chen" . "chenct@7adybird.com")) (:maintainer "C.T.Chen" . "chenct@7adybird.com") (:url . "https://github.com/hex2010/emacs-ivy-xcdoc"))]) +(ivy-todo . [(20171208 1609) ((ivy (0 8 0)) (emacs (24 3))) "Manage org-mode TODOs with ivy" single ((:commit . "964e347cea1a6097854d7113f5b07f6c5ef81df0") (:keywords "convenience") (:authors ("Erik Sjöstrand" . "sjostrand.erik@gmail.com")) (:maintainer "Erik Sjöstrand" . "sjostrand.erik@gmail.com") (:url . "http://github.com/Kungsgeten/ivy-todo"))]) +(ivy-rtags . [(20190821 1946) ((ivy (0 7 0)) (rtags (2 10))) "RTags completion back-end for ivy" single ((:commit . "7338aad79d5d0b19bbc0aa59f718605867222a31") (:authors ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainer "Jan Erik Hanssen" . "jhanssen@gmail.com") (:url . "http://rtags.net"))]) +(ivy-rich . [(20191025 432) ((emacs (24 4)) (ivy (0 8 0))) "More friendly display transformer for ivy." single ((:commit . "3f571704fa50e47174c92938d19c945a3bdf09b5") (:keywords "ivy") (:authors ("Yevgnen Koh" . "wherejoystarts@gmail.com")) (:maintainer "Yevgnen Koh" . "wherejoystarts@gmail.com"))]) +(ivy-purpose . [(20160724 1003) ((emacs (24)) (ivy (0 8)) (window-purpose (1 5))) "Ivy Interface for Purpose" single ((:commit . "0495f2f3aed64d7e0028125e76a9a68f8fc4107e") (:authors ("Bar Magal (2016)")) (:maintainer "Bar Magal (2016)") (:url . "https://github.com/bmag/ivy-purpose"))]) +(ivy-prescient . [(20191026 1903) ((emacs (25 1)) (prescient (3 3)) (ivy (0 11 0))) "prescient.el + Ivy" single ((:commit . "c04cce14351c960098a0c8d4647c0d32e9e45669") (:keywords "extensions") (:authors ("Radon Rosborough" . "radon.neon@gmail.com")) (:maintainer "Radon Rosborough" . "radon.neon@gmail.com") (:url . "https://github.com/raxod502/prescient.el"))]) +(ivy-posframe . [(20191103 135) ((emacs (26 0)) (posframe (0 1 0)) (ivy (0 11 0))) "Using posframe to show Ivy" single ((:commit . "ad83ce53a49ea693f7350ea79ef635f3f71743db") (:keywords "abbrev" "convenience" "matching" "ivy") (:authors ("Feng Shu")) (:maintainer "Feng Shu" . "tumashu@163.com") (:url . "https://github.com/tumashu/ivy-posframe"))]) +(ivy-phpunit . [(20180219 915) ((ivy (0 10 0)) (phpunit (0 7 0)) (emacs (25))) "Ivy integration for phpunit.el" single ((:commit . "ffedb0138d36564e8e36a28fd9bc71ea8944681f") (:keywords "convenience" "tools" "ivy" "phpunit" "php") (:authors ("12pt")) (:maintainer "12pt") (:url . "https://github.com/12pt/ivy-phpunit"))]) +(ivy-pass . [(20170812 1955) ((emacs (24)) (ivy (0 8 0)) (password-store (1 6 5))) "ivy interface for pass" single ((:commit . "5b523de1151f2109fdd6a8114d0af12eef83d3c5") (:keywords "pass" "password" "convenience" "data") (:authors ("ecraven")) (:maintainer "ecraven") (:url . "https://github.com/ecraven/ivy-pass/"))]) +(ivy-pages . [(20160728 1920) ((emacs (24 1)) (ivy (0 8 0))) "Complete current buffer's pages with Ivy" single ((:commit . "47b03a1f9384502cf22369ff31a2898c863d3aff") (:keywords "convenience" "matching") (:authors ("Igor Epstein" . "igorepst@gmail.com")) (:maintainer "Igor Epstein" . "igorepst@gmail.com") (:url . "https://github.com/igorepst/ivy-pages"))]) +(ivy-omni-org . [(20191112 2037) ((emacs (25 1)) (ivy (0 10)) (dash (2 12))) "Browse anything in Org mode" single ((:commit . "c93d34da3367fd15116ac24200afa3f653bf1949") (:keywords "outlines") (:authors ("Akira Komamura" . "akira.komamura@gmail.com")) (:maintainer "Akira Komamura" . "akira.komamura@gmail.com") (:url . "https://github.com/akirak/ivy-omni-org"))]) +(ivy-mpdel . [(20190428 920) ((emacs (25 1)) (ivy (0 10 0)) (libmpdel (1 0 0)) (mpdel (1 0 0))) "Ivy interface to navigate MPD" single ((:commit . "a42dcc943914c71975c115195d38c739f25e475c") (:keywords "multimedia") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://gitlab.petton.fr/mpdel/ivy-mpdel"))]) +(ivy-lobsters . [(20171202 2041) ((ivy (0 8 0)) (cl-lib (0 5))) "Browse lobste.rs stories with ivy." single ((:commit . "4364df4b3685fd1b50865ac9360fb948c0288dd1") (:authors ("Julien Blanchard ")) (:maintainer "Julien Blanchard ") (:url . "https://github.com/julienXX/ivy-lobsters"))]) +(ivy-hydra . [(20191018 1251) ((emacs (24 5)) (ivy (0 13 0)) (hydra (0 15 0))) "Additional key bindings for Ivy" single ((:commit . "2fb4c9f8fbcba50c3d24fa49f844100cac5cc651") (:keywords "convenience") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/swiper"))]) +(ivy-historian . [(20190111 313) ((emacs (24 4)) (historian (20170111)) (ivy (0 8 0)) (flx (0 6 1))) "Persistently store selected minibuffer candidates" single ((:commit . "64f4ef8cd4e417dfa090138a2d4ea1e72fd4456a") (:keywords "convenience" "ivy") (:authors ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainer "PythonNut" . "pythonnut@pythonnut.com") (:url . "https://github.com/PythonNut/historian.el"))]) +(ivy-gitlab . [(20181228 826) ((s (1 9 0)) (dash (2 9 0)) (ivy (0 8 0)) (gitlab (0 8))) "Ivy interface to Gitlab" single ((:commit . "8c2324c02119500f094c2f92dfaba4c9977ce1ba") (:keywords "gitlab" "ivy") (:authors ("Nicolas Lamirault" . "nicolas.lamirault@gmail.com")) (:maintainer "Nicolas Lamirault" . "nicolas.lamirault@gmail.com") (:url . "https://github.com/nlamirault/emacs-gitlab"))]) +(ivy-feedwrangler . [(20180618 1522) nil "No description available." single ((:commit . "051eac49cae32b16fab2e06ff0115cd8fb5dc499"))]) +(ivy-explorer . [(20190909 1921) ((emacs (25)) (ivy (0 10 0))) "Dynamic file browsing grid using ivy" single ((:commit . "a413966cfbcecacc082d99297fa1abde0c10d3f3") (:keywords "convenience" "files" "matching") (:authors ("Clemens Radermacher" . "clemera@posteo.net")) (:maintainer "Clemens Radermacher" . "clemera@posteo.net") (:url . "https://github.com/clemera/ivy-explorer"))]) +(ivy-erlang-complete . [(20191112 1137) ((async (1 9)) (counsel (0 11 0)) (ivy (0 11 0)) (erlang (19 2)) (emacs (25 1))) "Erlang context sensitive completion at point using ivy. It also support xref and eldoc." tar ((:commit . "7d60ed111dbfd34ab6ec1b07c06e2d16a5380b9a"))]) +(ivy-dired-history . [(20170626 556) ((ivy (0 9 0)) (counsel (0 9 0)) (cl-lib (0 5))) "use ivy to open recent directories" single ((:commit . "c9c67ea1ee5e68443f0e6006ba162d6c8d868b69") (:authors ("纪秀峰" . "jixiuf@gmail.com")) (:maintainer "纪秀峰" . "jixiuf@gmail.com") (:url . "https://github.com/jixiuf/ivy-dired-history"))]) +(ivy-clojuredocs . [(20190907 2053) ((edn (1 1 2)) (ivy (0 12 0)) (emacs (24 4))) "Search for help in clojuredocs.org" single ((:commit . "dd33a25f1de4339f75f05689ed60fe1b1c97f554") (:keywords "matching") (:authors ("Wanderson Ferreira" . "iagwanderson@gmail.com")) (:maintainer "Wanderson Ferreira" . "iagwanderson@gmail.com") (:url . "https://github.com/wandersoncferreira/ivy-clojuredocs"))]) +(ivy-bibtex . [(20191028 1313) ((swiper (0 7 0)) (parsebib (1 0)) (s (1 9 0)) (dash (2 6 0)) (f (0 16 2)) (cl-lib (0 5)) (biblio (0 2))) "A bibliography manager based on Ivy" tar ((:commit . "d4471232be26793fbf56c0ac3690b5f537c378b9") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de"))]) +(ivy . [(20191119 956) ((emacs (24 5))) "Incremental Vertical completYon" tar ((:commit . "2fb4c9f8fbcba50c3d24fa49f844100cac5cc651") (:keywords "matching") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/swiper"))]) +(ivs-edit . [(20170818 1441) ((emacs (24 3)) (dash (2 6 0)) (cl-lib (1 0))) "IVS (Ideographic Variation Sequence) editing tool" tar ((:commit . "5db39c234aa7393b591168a4fd0a9a4cbbca347d") (:keywords "text") (:authors ("KAWABATA, Taichi ")) (:maintainer "KAWABATA, Taichi ") (:url . "http://github.com/kawabata/ivs-edit"))]) +(ivariants . [(20170823 224) ((emacs (24 3)) (ivs-edit (1 0))) "Ideographic variants editor and browser" tar ((:commit . "ca0b74d32b5d2d77a45cc6ad6edc00be0ee85284") (:keywords "i18n" "languages") (:authors ("KAWABATA, Taichi ")) (:maintainer "KAWABATA, Taichi ") (:url . "http://github.com/kawabata/ivariants"))]) +(iterator . [(20170207 838) ((emacs (24)) (cl-lib (0 5))) "A library to create and use elisp iterators objects." single ((:commit . "9da54f9aed945b46866782cdf962c9e530419297") (:authors ("Thierry Volpiatto ")) (:maintainer "Thierry Volpiatto ") (:url . "https://github.com/thierryvolpiatto/iterator"))]) +(iter2 . [(20190113 1424) ((emacs (25 1))) "Reimplementation of Elisp generators" single ((:commit . "fc1fcea5379bc7728a25dd81546886213e3db6fa") (:keywords "elisp" "extensions") (:authors ("Paul Pogonyshev" . "pogonyshev@gmail.com")) (:maintainer "Paul Pogonyshev" . "pogonyshev@gmail.com") (:url . "https://github.com/doublep/iter2"))]) +(itasca . [(20170601 1622) ((emacs (24 3))) "Major modes for Itasca software data files." tar ((:commit . "3d15dd1b70d6db69b0f4758a3e28b8b506cc84ca") (:keywords "itasca" "flac" "3dec" "udec" "flac3d" "pfc" "pfc2d" "pfc3d" "fish") (:authors ("Jason Furtney" . "jkfurtney@gmail.com")) (:maintainer "Jason Furtney" . "jkfurtney@gmail.com") (:url . "http://github.com/jkfurtney/itasca-emacs/"))]) +(itail . [(20171112 804) nil "An interactive tail mode" single ((:commit . "6e43c20da03be3b9c6ece93b7dc3495975ec1888") (:keywords "tail") (:authors ("atom smith")) (:maintainer "atom smith") (:url . "https://github.com/re5et/itail"))]) +(iss-mode . [(20141001 1913) nil "Mode for InnoSetup install scripts" single ((:commit . "3b517aff31529bab33f8d7b562bd17aff0107fd1") (:authors ("Stefan Reichoer," . "stefan@xsteve.at")) (:maintainer "Stefan Reichoer," . "stefan@xsteve.at"))]) +(isortify . [(20190315 2004) ((emacs (25)) (pythonic (0 1 0))) "(automatically) format python buffers using isort." single ((:commit . "ae7fb7163ce075209543f72953c9f431d103f6a3") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/isortify"))]) +(isolate . [(20190808 731) ((emacs (25))) "Surrounding tool with flexible customizations." single ((:commit . "e93cb652f150705347480a2ee13b63fa625b1edf") (:keywords "convenience") (:authors ("Yuan Fu" . "casouri@gmail.com")) (:maintainer "Yuan Fu" . "casouri@gmail.com") (:url . "https://github.com/casouri/isolate"))]) +(isgd . [(20150414 936) nil "Shorten URLs using the isgd.com shortener service" single ((:commit . "764306dadd5a9213799081a48aba22f7c75cca9a") (:authors ("Chmouel Boudjnah" . "chmouel@chmouel.com")) (:maintainer "Chmouel Boudjnah" . "chmouel@chmouel.com") (:url . "https://github.com/chmouel/isgd.el"))]) +(isend-mode . [(20190201 832) nil "Interactively send parts of an Emacs buffer to an interpreter" single ((:commit . "38ace354d579eb364d4f95b9ea16081c171ea604") (:authors ("François Févotte" . "fevotte@gmail.com")) (:maintainer "François Févotte" . "fevotte@gmail.com") (:url . "https://github.com/ffevotte/isend-mode.el"))]) +(isearch-symbol-at-point . [(20130728 2221) nil "Use isearch to search for the symbol at point" single ((:commit . "51a1029bec1ec414885f9edb7e5947603dffdab2") (:keywords "isearch") (:authors ("atom smith")) (:maintainer "atom smith") (:url . "https://github.com/re5et/isearch-symbol-at-point"))]) +(isearch-project . [(20190505 819) ((emacs (25)) (cl-lib (0 6))) "Incremental search through the whole project." single ((:commit . "462b8100451b947367aed2970c2669ea6d15edbd") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:url . "https://github.com/jcs090218/isearch-project"))]) +(isearch-dabbrev . [(20141224 622) ((cl-lib (0 5))) "Use dabbrev in isearch" single ((:commit . "1efe7abba4923015cbc2462395deaec5446a9cc8") (:keywords "dabbrev" "isearch") (:authors ("Dewdrops" . "v_v_4474@126.com")) (:maintainer "Dewdrops" . "v_v_4474@126.com") (:url . "https://github.com/Dewdrops/isearch-dabbrev"))]) +(irony-eldoc . [(20170502 1908) ((emacs (24)) (cl-lib (0 5)) (irony (0 1))) "irony-mode support for eldoc-mode" single ((:commit . "0df5831eaae264a25422b061eb2792aadde8b3f2") (:keywords "c" "c++" "objc" "convenience" "tools") (:authors ("Kirill Ignatiev ")) (:maintainer "Kirill Ignatiev ") (:url . "https://github.com/ikirill/irony-eldoc"))]) +(irony . [(20191009 2139) ((cl-lib (0 5)) (json (1 2))) "C/C++ minor mode powered by libclang" tar ((:commit . "e630c497f973fa4d1f0fd0e0fd87fb9d18666986") (:keywords "c" "convenience" "tools") (:authors ("Guillaume Papin" . "guillaume.papin@epitech.eu")) (:maintainer "Guillaume Papin" . "guillaume.papin@epitech.eu") (:url . "https://github.com/Sarcasm/irony-mode"))]) +(iregister . [(20150515 2107) nil "Interactive register commands for Emacs." tar ((:commit . "6a48c66187289de5f300492be11c83e98410c018") (:keywords "convenience") (:authors ("Andrey Tykhonov" . "atykhonov@gmail.com")) (:maintainer "Andrey Tykhonov" . "atykhonov@gmail.com") (:url . "https://github.com/atykhonov/iregister.el"))]) +(ir-black-theme . [(20130303 755) nil "Port of ir-black theme" single ((:commit . "36e930d107604b5763c80294a6f92aaa02e6c272") (:keywords "faces") (:authors ("Jon-Michael Deldin" . "dev@jmdeldin.com")) (:maintainer "Jon-Michael Deldin" . "dev@jmdeldin.com"))]) +(iqa . [(20181024 2253) ((emacs (24 3))) "Init file(and directory) Quick Access." single ((:commit . "b45614f5204ed851de0abe93907aa94de5e37379") (:url . "https://github.com/a13/iqa.el"))]) +(ipython-shell-send . [(20190220 2246) ((emacs (24))) "Send code (including magics) to ipython shell" single ((:commit . "0faed86faff02a361f23ce5fc923d0e9b09bb2da") (:keywords "tools" "processes") (:authors ("Jack Kamm" . "jackkamm@gmail.com")) (:maintainer "Jack Kamm" . "jackkamm@gmail.com") (:url . "https://github.com/jackkamm/ipython-shell-send-el"))]) +(ipretty . [(20180606 522) nil "Interactive Emacs Lisp pretty-printing" single ((:commit . "042f5cc4e6f81d59115e8335c582bb5c571c2585") (:keywords "pretty-print" "elisp" "buffer") (:authors ("steckerhalter")) (:maintainer "steckerhalter") (:url . "https://framagit.org/steckerhalter/ipretty"))]) +(iplayer . [(20161120 2120) nil "Browse and download BBC TV/radio shows" single ((:commit . "b788fffa4b36bbd558047ffa6be51b1f0f462f23") (:keywords "multimedia" "bbc") (:authors ("Christophe Rhodes" . "csr21@cantab.net")) (:maintainer "Christophe Rhodes" . "csr21@cantab.net") (:url . "https://github.com/csrhodes/iplayer-el"))]) +(ipcalc . [(20170926 805) ((cl-lib (0 5))) "IP subnet calculator" single ((:commit . "2720f7e3e662e04e195f8338b81a499cf321296a") (:keywords "networking" "tools") (:authors ("\"Aleksandar Simic\"" . "asimic@gmail.com")) (:maintainer "\"Aleksandar Simic\"" . "asimic@gmail.com") (:url . "http://github.com/dotemacs/ipcalc.el"))]) +(iodine-theme . [(20151031 1639) ((emacs (24))) "A light emacs color theme" single ((:commit . "02fb780e1d8d8a6b9c709bfac399abe1665c6999") (:keywords "themes") (:authors ("SrÄ‘an Panić" . "srdja.panic@gmail.com")) (:maintainer "SrÄ‘an Panić" . "srdja.panic@gmail.com") (:url . "https://github.com/srdja/iodine-theme"))]) +(ioccur . [(20130822 548) nil "Incremental occur" single ((:commit . "4c0ef992a6fcd2aed62e3866d56650463108ab5a") (:authors ("Thierry Volpiatto ")) (:maintainer "Thierry Volpiatto ") (:url . "https://github.com/thierryvolpiatto/ioccur"))]) +(io-mode-inf . [(20140128 1934) nil "Interaction with an Io interpreter." single ((:commit . "6dd2bac3fd87484bb7d97e135b06c29d70b444b6") (:keywords "io" "languages") (:url . "https://github.com/slackorama/io-emacs"))]) +(io-mode . [(20161004 756) nil "Major mode to edit Io language files in Emacs" single ((:commit . "fd65ae769093defcf554d6d637eba6e6dfc29f56") (:keywords "languages" "io") (:authors ("Sergei Lebedev" . "superbobry@gmail.com")) (:maintainer "Sergei Lebedev" . "superbobry@gmail.com") (:url . "https://github.com/superbobry/io-mode"))]) +(inverse-acme-theme . [(20170823 254) ((autothemer (0 2)) (cl-lib (0 5))) "A theme that looks like an inverse of Acme's color scheme." single ((:commit . "74d6f3e2f6534371509dd2d77006435156c276d6") (:authors ("Dylan Johnson")) (:maintainer "Dylan Johnson") (:url . "http://github.com/djohnson/inverse-acme-theme"))]) +(interval-tree . [(20130325 1407) ((dash (1 1 0))) "Interval tree data structure for 1D range queries" single ((:commit . "301302f480617091cf3ab6989caac385d52543dc") (:keywords "extensions" "data structure") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:url . "https://github.com/Fuco1/interval-tree"))]) +(interval-list . [(20150327 1718) ((dash (2 4 0)) (cl-lib (0 5)) (emacs (24 4))) "Interval list data structure for 1D selections" single ((:commit . "38af7ecf0a493ad8f487074938a2a115f3531177") (:keywords "extensions" "data structure") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:url . "https://github.com/Fuco1/interval-list"))]) +(intero . [(20191103 1239) ((flycheck (0 25)) (company (0 8)) (emacs (24 4)) (haskell-mode (13 0))) "Complete development mode for Haskell" single ((:commit . "30d8e7330c9b20c2905035bc417fa8645e7b4b85") (:keywords "haskell" "tools") (:authors ("Chris Done" . "chrisdone@fpcomplete.com")) (:maintainer "Chris Done" . "chrisdone@fpcomplete.com") (:url . "https://github.com/commercialhaskell/intero"))]) +(interleave . [(20171004 624) nil "Interleaving text books since 2015" single ((:commit . "87549df30cbc681baf86b238bd14c7cf7ec11fc4") (:authors ("Sebastian Christ" . "rudolfo.christ@gmail.com")) (:maintainer "Sebastian Christ" . "rudolfo.christ@gmail.com") (:url . "https://github.com/rudolfochrist/interleave"))]) +(interaction-log . [(20160305 1301) ((cl-lib (0))) "exhaustive log of interactions with Emacs" single ((:commit . "a49a06746d4df6bcfceec3c48dece065d635f9f9") (:keywords "convenience") (:authors ("Michael Heerdegen" . "michael_heerdegen@web.de")) (:maintainer "Michael Heerdegen" . "michael_heerdegen@web.de") (:url . "https://github.com/michael-heerdegen/interaction-log.el"))]) +(intellij-theme . [(20171017 1415) nil "Inspired by IntelliJ's default theme" single ((:commit . "1bbfff8e6742d18e9b77ed796f44da3b7bd10606") (:keywords "faces") (:authors ("Vladimir Polushin" . "vovapolu@gmail.com")) (:maintainer "Vladimir Polushin" . "vovapolu@gmail.com"))]) +(intel-hex-mode . [(20180423 31) nil "Mode for Intel Hex files." single ((:commit . "e83c94e1c31a8435a88b3ae395f2bc842ef83217") (:keywords "tools" "hex") (:maintainer "Michael Schuldt" . "mbschuldt@gmail.com") (:url . "https://github.com/mschuldt/intel-hex-mode"))]) +(instapaper . [(20130104 1421) nil "add URLs to instapaper from emacs" single ((:commit . "8daa0058ede70025e9f020656abe0e0d01cd8f89") (:authors ("Jason F. McBrayer" . "jmcbray@carcosa.net")) (:maintainer "Jason F. McBrayer" . "jmcbray@carcosa.net") (:url . "htts://bitbucket.org/jfm/emacs-instapaper"))]) +(insfactor . [(20141117 2) nil "Client for a Clojure project with insfactor in it" single ((:commit . "7ef5446cebb08a17d4106d2e6f3c053e49e1e829") (:keywords "clojure") (:authors ("John D. Hume" . "duelin.markers@gmail.com")) (:maintainer "John D. Hume" . "duelin.markers@gmail.com") (:url . "http://github.com/duelinmarkers/insfactor.el"))]) +(insert-shebang . [(20180403 1214) nil "Insert shebang line automatically." single ((:commit . "7bfea92ba1dae9d13d442e2f84f9fb6c05a0a9bd") (:keywords "shebang" "tool" "convenience") (:authors ("Sachin Patil" . "iclcoolster@gmail.com")) (:maintainer "Sachin Patil" . "iclcoolster@gmail.com") (:url . "http://github.com/psachin/insert-shebang"))]) +(insert-kaomoji . [(20190701 1823) ((emacs (24 4))) "Easily insert kaomojis" tar ((:commit . "b144e48f02f29bb25651a63d9691e9de10f0171b") (:keywords "wp") (:authors ("Philip K." . "philip@warpmail.net")) (:maintainer "Philip K." . "philip@warpmail.net") (:url . "https://git.sr.ht/~zge/kaomoji"))]) +(inlineR . [(20120520 1432) nil "insert Tag for inline image of R graphics" single ((:commit . "29357186beca825e3d0451b700ec09b9ed65e37b") (:keywords "convenience" "iimage.el" "cacoo.el") (:authors ("myuhe ")) (:maintainer "myuhe") (:url . "https://github.com/myuhe/inlineR.el"))]) +(inline-docs . [(20170523 450) ((emacs (24 3))) "Show inline contextual docs." single ((:commit . "b57f1681be6147f999cdc12abff414a0442e8897") (:keywords "inline" "docs" "overlay") (:authors ("stardiviner" . "numbchild@gmail.com")) (:maintainer "stardiviner" . "numbchild@gmail.com") (:url . "https://github.com/stardiviner/inline-docs.el"))]) +(inline-crypt . [(20170824 900) nil "Simple inline encryption via openssl" tar ((:commit . "281385b383f850fd2e895926b1cef804dd052633"))]) +(inkpot-theme . [(20190907 1024) nil "port of vim's inkpot theme" single ((:commit . "f6f148eebef72939b90a1822c1c3a257e22f802e") (:keywords "color" "theme") (:authors ("Sarah Iovan" . "sarah@hwaetageek.com") ("Campbell Barton" . "ideasman42@gmail.com")) (:maintainer "Sarah Iovan" . "sarah@hwaetageek.com") (:url . "https://github.com/ideasman42/emacs-inkpot-theme"))]) +(ink-mode . [(20160814 1116) ((emacs (24 3))) "Major mode for writing interactive fiction in Ink" single ((:commit . "e35f26abbaf8ea23c5aa0a0c7ef15334cdfb7b48") (:keywords "languages") (:authors ("Erik Sjöstrand")) (:maintainer "Erik Sjöstrand") (:url . "http://github.com/Kungsgeten/ink-mode"))]) +(initsplit . [(20160919 1818) nil "code to split customizations into different files" single ((:commit . "c941d436eb2b10b01c76a582c5a2b23fb30751aa") (:keywords "lisp") (:authors ("John Wiegley , Dave Abrahams" . "dave@boostpro.com")) (:maintainer "John Wiegley , Dave Abrahams" . "dave@boostpro.com") (:url . "http://www.gci-net.com/users/j/johnw/emacs.html"))]) +(init-open-recentf . [(20161206 1445) ((emacs (24 4))) "Open recentf immediately after Emacs is started" single ((:commit . "7d8fb124806291f7f6ef2ec3a664ea25899b6d68") (:keywords "files" "recentf" "after-init-hook") (:authors ("USAMI Kenta" . "tadsan@zonu.me")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:url . "https://github.com/zonuexe/init-open-recentf.el"))]) +(init-loader . [(20160528 1315) nil "Loader for configuration files" single ((:commit . "5d3cea1004c11ff96b33020e337b03b925c67c42") (:authors ("IMAKADO" . "ken.imakado@gmail.com")) (:maintainer "IMAKADO" . "ken.imakado@gmail.com") (:url . "https://github.com/emacs-jp/init-loader/"))]) +(ini-mode . [(20170424 909) nil "Major mode for Windows-style ini files." single ((:commit . "2194cfa2fd13196a37350ec20b3f00dcf6162b7c") (:keywords "languages" "faces") (:authors ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:url . "https://github.com/Lindydancer/ini-mode"))]) +(inherit-local . [(20170409 1649) ((emacs (24 3))) "Inherited buffer-local variables" single ((:commit . "b1f4ff9c41f9d64e4adaf5adcc280b82f084cdc7") (:authors ("Shea Levy")) (:maintainer "Shea Levy") (:url . "https://github.com/shlevy/inherit-local/tree-master/"))]) +(info-rename-buffer . [(20191005 2346) ((emacs (24 3))) "Rename Info buffers to match manuals" single ((:commit . "c983ae687481f39b8fd0d4ee9d85fd82b6a4ba03") (:keywords "help") (:authors ("Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org")) (:maintainer "Bruno Félix Rezende Ribeiro" . "oitofelix@gnu.org") (:url . "https://github.com/oitofelix/info-rename-buffer"))]) +(info-colors . [(20180205 1150) ((emacs (24)) (cl-lib (0 5))) "Extra colors for Info-mode" single ((:commit . "a8ebb7b8efa314c08ea8110d8b1876afb562bb45") (:keywords "faces") (:authors ("Tuấn-Anh Nguyá»…n" . "ubolonton@gmail.com")) (:maintainer "Tuấn-Anh Nguyá»…n" . "ubolonton@gmail.com") (:url . "https://github.com/ubolonton/info-colors"))]) +(info-buffer . [(20170112 1422) nil "Display info topics in separate buffers" single ((:commit . "d35dad6e766c6e2ddb8dc6acb4ce5b6e10fbcaa7") (:keywords "docs" "info") (:authors ("Lluís Vilanova" . "vilanova@ac.upc.edu")) (:maintainer "Lluís Vilanova" . "vilanova@ac.upc.edu") (:url . "http://www.github.com/llvilanova/info-buffer"))]) +(info-beamer . [(20180604 2122) ((emacs (24 4))) "Utilities for working with info-beamer" single ((:commit . "af443795af20481af91ac54a489b20f6a9d90b0a") (:keywords "tools" "processes" "comm") (:authors ("Daniel Kraus" . "daniel@kraus.my")) (:maintainer "Daniel Kraus" . "daniel@kraus.my") (:url . "https://github.com/dakra/info-beamer.el"))]) +(inflections . [(20170913 916) ((cl-lib (0 5)) (emacs (24))) "convert english words between singular and plural" single ((:commit . "e4f1372cf22e811faca52fc86bdd5d817498a4d8") (:keywords "languages" "tools" "wp") (:authors ("Dmitry Galinsky, Howard Yeh")) (:maintainer "Dmitry Galinsky, Howard Yeh") (:url . "https://github.com/eschulte/jump.el"))]) +(inferior-spim . [(20160826 1346) nil "inferior mode for spim." single ((:commit . "fb9aa091f6058bf320793f1a608c1ed7322c1f47") (:keywords "spim" "inferior" "mips") (:authors ("hiddenlotus" . "kaihaosw@gmail.com")) (:maintainer "hiddenlotus" . "kaihaosw@gmail.com"))]) +(inf-ruby . [(20190927 1649) nil "Run a Ruby process in a buffer" single ((:commit . "fd8d392fefd1d99eb58fc597d537d0d7df29c334") (:keywords "languages" "ruby") (:authors ("Yukihiro Matsumoto") ("Nobuyoshi Nakada") ("Cornelius Mika" . "cornelius.mika@gmail.com") ("Dmitry Gutov" . "dgutov@yandex.ru") ("Kyle Hargraves" . "pd@krh.me")) (:maintainer "Yukihiro Matsumoto") (:url . "http://github.com/nonsequitur/inf-ruby"))]) +(inf-mongo . [(20180408 1338) nil "Run a MongoDB shell process in a buffer" single ((:commit . "2e498d1c88bd1904eeec18ed06b1a0cf8bdc2a92") (:keywords "databases" "mongodb") (:authors ("Tobias Svensson")) (:maintainer "Tobias Svensson") (:url . "http://github.com/endofunky/inf-mongo"))]) +(inf-crystal . [(20180119 211) ((emacs (24 3)) (crystal-mode (0 1 0))) "Run a Inferior-Crystal process in a buffer" single ((:commit . "02007b2a2a3bea44902d7c83c4acba1e39d278e3") (:keywords "languages" "crystal") (:authors ("Brantou" . "brantou89@gmail.com")) (:maintainer "Brantou" . "brantou89@gmail.com") (:url . "https://github.com/brantou/inf-crystal.el"))]) +(inf-clojure . [(20191008 843) ((emacs (24 4)) (clojure-mode (5 6))) "Run an external Clojure process in an Emacs buffer" single ((:commit . "173d0e7f118b0009bf210be115485160abf554b1") (:keywords "processes" "clojure") (:url . "http://github.com/clojure-emacs/inf-clojure"))]) +(indy . [(20190807 625) nil "A minor mode and EDSL to manage your mode's indentation rules." single ((:commit . "abc5bee424780ad2de5520f8fefbf8e120c0d9ed") (:keywords "convenience" "matching" "tools") (:authors ("Kevin W. van Rooijen" . "kevin.van.rooijen@attichacker.com")) (:maintainer "Kevin W. van Rooijen" . "kevin.van.rooijen@attichacker.com"))]) +(indium . [(20191028 2155) ((emacs (25)) (seq (2 16)) (js2-mode (20140114)) (js2-refactor (0 9 0)) (company (0 9 0)) (json-process-client (0 2 0))) "JavaScript Awesome Development Environment" tar ((:commit . "3d918be5e0039e3c2e5e80adc47029b5dd76efb9") (:keywords "tools" "javascript") (:authors ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Nicolas Petton" . "nicolas@petton.fr") (:url . "https://github.com/NicolasPetton/indium"))]) +(indicators . [(20161211 1126) ((dash (2 13 0)) (cl-lib (0 5 0))) "Display the buffer relative location of line in the fringe." single ((:commit . "f62a1201f21453e3aca93f48483e65ae8251432e") (:keywords "fringe" "frames") (:authors ("Matus Goljer" . "matus.goljer@gmail.com")) (:maintainer "Matus Goljer" . "matus.goljer@gmail.com") (:url . "https://github.com/Fuco1/indicators.el"))]) +(indian-ext . [(20190424 1547) ((emacs (24))) "Extension to Indian language utilities" single ((:commit . "c941cde1205642c6b933ae6abbc47d199f609df0") (:keywords "i18n" "tools" "wp" "indian" "devanagari" "encoding") (:authors ("Patrick McAllister" . "pma@rdorte.org")) (:maintainer "Patrick McAllister" . "pma@rdorte.org") (:url . "https://github.com/paddymcall/indian-ext"))]) +(indent-tools . [(20190606 1642) ((s (0)) (hydra (0)) (yafolding (0))) "Indent, navigate (and more) by blocks of indentation: yaml, python etc." tar ((:commit . "c419874e6fb296ecdba94b2f4b73c9eecdd5329d") (:keywords "indentation" "movements" "navigation" "kill" "fold" "yaml" "python") (:authors ("vindarel" . "vindarel@mailz.org")) (:maintainer "vindarel" . "vindarel@mailz.org") (:url . "https://gitlab.com/emacs-stuff/indent-tools/"))]) +(indent-info . [(20180423 1912) nil "show indentation information in status bar" single ((:commit . "d218b4cb3726476caee91db6f6c920856ab992bc") (:keywords "convenience" "tools") (:authors ("Terje Larsen" . "terlar@gmail.com")) (:maintainer "Terje Larsen" . "terlar@gmail.com") (:url . "https://github.com/terlar/indent-info.el"))]) +(indent-guide . [(20191106 240) nil "show vertical lines to guide indentation" single ((:commit . "7fc710748f9e5a086acfe77970f117df89ee9749") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) +(importmagic . [(20180520 303) ((f (0 11 0)) (epc (0 1 0)) (emacs (24 3))) "Fix Python imports using importmagic." tar ((:commit . "bbc131278f8cd62f3e71b6f4a86b0c91792a3524") (:keywords "languages" "convenience") (:authors ("Nicolás Salas V." . "nikosalas@gmail.com")) (:maintainer "Nicolás Salas V." . "nikosalas@gmail.com") (:url . "https://github.com/anachronic/importmagic.el"))]) +(import-popwin . [(20170218 1407) ((emacs (24 3)) (popwin (0 6))) "popwin buffer near by import statements with popwin" single ((:commit . "bb05a9e226f8c63fe7b18a3e92010357049ab5ba") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-import-popwin"))]) +(import-js . [(20180709 1833) ((grizzl (0 1 0)) (emacs (24))) "Import Javascript dependencies" single ((:commit . "fb1f167e33c388b09a2afd32fbda90a67bfb2e40") (:keywords "javascript") (:authors ("Kevin Kehl" . "kevin.kehl@gmail.com")) (:maintainer "Kevin Kehl" . "kevin.kehl@gmail.com") (:url . "http://github.com/Galooshi/emacs-import-js/"))]) +(impatient-mode . [(20181002 1231) ((cl-lib (0 3)) (simple-httpd (1 5 0)) (htmlize (1 40))) "Serve buffers live over HTTP" tar ((:commit . "96f6a05f8de74e19d570217fe83f0734623ddb0c") (:authors ("Brian Taylor" . "el.wubo@gmail.com")) (:maintainer "Brian Taylor" . "el.wubo@gmail.com") (:url . "https://github.com/netguy204/imp.el"))]) +(immutant-server . [(20140311 2208) nil "Run your Immutant server in Emacs" single ((:commit . "2a21e65588acb6a976f2998e30b21fdabdba4dbb") (:authors ("David Leatherman" . "leathekd@gmail.com")) (:maintainer "David Leatherman" . "leathekd@gmail.com") (:url . "http://www.github.com/leathekd/immutant-server.el"))]) +(immortal-scratch . [(20160517 2118) nil "respawn the scratch buffer when it's killed" single ((:commit . "b354aba33d91a16a1878c87a931564505f6a0ee1") (:authors ("Jonathan Kotta" . "jpkotta@gmail.com")) (:maintainer "Jonathan Kotta" . "jpkotta@gmail.com"))]) +(immaterial-theme . [(20190412 1115) ((emacs (25))) "A flexible theme based on material design principles" single ((:commit . "176178a57c5b342b04bebd3107c29c6d12086cf5") (:keywords "themes") (:authors ("Peter Gardfjäll")) (:maintainer "Peter Gardfjäll") (:url . "https://github.com/petergardfjall/emacs-immaterial-theme"))]) +(imgbb . [(20180609 1649) ((emacs (24)) (request (0 3 0))) "Simple image upload client for imgbb.com" single ((:commit . "a524a46263835aa474f908827ebab4e8fa586001") (:keywords "extensions") (:authors ("Peter" . "craven@gmx.net")) (:maintainer "Peter" . "craven@gmx.net") (:url . "https://github.com/ecraven/imgbb.el"))]) +(imenus . [(20180505 1717) ((cl-lib (0 5))) "Imenu for multiple buffers and without subgroups" single ((:commit . "149cfa579ee231014d3341a0e05add69759757a5") (:keywords "tools" "convenience") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:url . "https://github.com/alezost/imenus.el"))]) +(imenu-list . [(20190115 2130) ((cl-lib (0 5))) "Show imenu entries in a separate buffer" single ((:commit . "46008738f8fef578a763c308cf6695e5b4d4aa77") (:authors ("Bar Magal (2015)")) (:maintainer "Bar Magal (2015)") (:url . "https://github.com/bmag/imenu-list"))]) +(imenu-anywhere . [(20190512 1939) ((cl-lib (0 5)) (emacs (25))) "ido/ivy/helm imenu across same mode/project/etc buffers" single ((:commit . "88b0e120284058b32252e4b0ed1a07c9fe44092f") (:keywords "ido" "imenu" "tags") (:authors ("Vitalie Spinu ")) (:maintainer "Vitalie Spinu ") (:url . "https://github.com/vitoshka/imenu-anywhere"))]) +(imapfilter . [(20180318 2027) nil "run the imapfilter executable" single ((:commit . "79bbbe918319bc1e8f42a0bef53dc7c77fe868ea") (:keywords "mail") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/tarsius/imapfilter"))]) +(imake . [(20180318 2259) ((emacs (24 3))) "Simple, opinionated make target runner" single ((:commit . "a61f409c517ec274e1ec81f3f00c178108c226fb") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/tarsius/imake"))]) +(imakado . [(20141024 923) nil "imakado's usefull macros and functions" single ((:commit . "00a1e7eea2cb9e9066343a23927d6c747707902f") (:keywords "convenience") (:authors ("imakado ")) (:maintainer "imakado") (:url . "https://github.com/imakado/emacs-imakado"))]) +(image-dired+ . [(20150430 544) ((cl-lib (0 3))) "Image-dired extensions" single ((:commit . "b68094625d963056ad64e0e44af0e2266b2eadc7") (:keywords "extensions" "multimedia") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:url . "https://github.com/mhayashi1120/Emacs-image-diredx"))]) +(image-archive . [(20150621 132) ((emacs (24)) (cl-lib (0 5))) "Image thumbnails in archive file with non-blocking" single ((:commit . "8d29535bd832329ffeeac780aae7aa8919af1175") (:keywords "multimedia") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:url . "https://github.com/mhayashi1120/Emacs-image-archive"))]) +(image+ . [(20150707 1616) ((cl-lib (0 3))) "Image manipulate extensions for Emacs" single ((:commit . "6834d0c09bb4df9ecc0d7a559bd7827fed48fffc") (:keywords "multimedia" "extensions") (:authors ("Masahiro Hayashi" . "mhayashi1120@gmail.com")) (:maintainer "Masahiro Hayashi" . "mhayashi1120@gmail.com") (:url . "https://github.com/mhayashi1120/Emacs-imagex"))]) +(igv . [(20141210 1227) nil "Control Integrative Genomic Viewer within Emacs" single ((:commit . "47ac6ceede252f451348a2c696398c0cb5279555") (:authors ("Stefano Barbi" . "stefanobarbi@gmail.com")) (:maintainer "Stefano Barbi" . "stefanobarbi@gmail.com"))]) +(ignoramus . [(20160414 1409) nil "Ignore backups, build files, et al." single ((:commit . "b37dc7c07edd9d152436f9019c14df158b599be3") (:keywords "convenience" "tools") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:url . "http://github.com/rolandwalker/ignoramus"))]) +(iflipb . [(20190817 547) nil "Interactively flip between recently visited buffers" single ((:commit . "aeeb85633566ed3c13dbe94a6a4925d8930b7b85") (:authors ("Joel Rosdahl" . "joel@rosdahl.net")) (:maintainer "Joel Rosdahl" . "joel@rosdahl.net") (:url . "https://github.com/jrosdahl/iflipb"))]) +(ietf-docs . [(20190420 851) nil "Fetch, Cache and Load IETF documents" single ((:commit . "ae157549eae5ec78dcbf215c2f48cb662b73abd0") (:keywords "ietf" "rfc") (:authors ("Christian E. Hopps" . "chopps@gmail.com")) (:maintainer "Christian E. Hopps" . "chopps@gmail.com") (:url . "https://github.com/choppsv1/ietf-docs"))]) +(iedit . [(20190419 803) nil "Edit multiple regions in the same way simultaneously." tar ((:commit . "e2c100cdd67b7d82835d281ac2cd1bf4f374bc8f") (:keywords "occurrence" "region" "simultaneous" "refactoring") (:authors ("Victor Ren" . "victorhge@gmail.com")) (:maintainer "Victor Ren" . "victorhge@gmail.com") (:url . "https://www.emacswiki.org/emacs/Iedit"))]) +(ids-edit . [(20170818 1502) ((emacs (24 3))) "IDS (Ideographic Description Sequence) editing tool" tar ((:commit . "8562a6cbfb3f2d44bc6f62ab15081a80f8fee502") (:keywords "i18n" "wp") (:authors ("KAWABATA, Taichi ")) (:maintainer "KAWABATA, Taichi ") (:url . "http://github.com/kawabata/ids-edit"))]) +(idris-mode . [(20190427 1539) ((emacs (24)) (prop-menu (0 1)) (cl-lib (0 5))) "Major mode for editing Idris code" tar ((:commit . "acc8835449475d7cd205aba213fdd3d41c38ba40") (:keywords "languages") (:url . "https://github.com/idris-hackers/idris-mode"))]) +(idomenu . [(20141123 2120) nil "imenu tag selection a la ido" single ((:commit . "4b0152d606360c70204fb4c27f68de79ca885386") (:authors ("Georg Brandl" . "georg@python.org")) (:maintainer "Georg Brandl" . "georg@python.org"))]) +(ido-yes-or-no . [(20161108 2351) ((ido-completing-read+ (0))) "Use Ido to answer yes-or-no questions" single ((:commit . "c55383b1fce5879e87e7ca6809fc60534508e182") (:keywords "convenience" "completion" "ido") (:authors ("Ryan C. Thompson")) (:maintainer "Ryan C. Thompson") (:url . "https://github.com/DarwinAwardWinner/ido-yes-or-no"))]) +(ido-vertical-mode . [(20180618 2101) nil "Makes ido-mode display vertically." single ((:commit . "16c4c1a112796ee0bcf401ea39d3e2643a89feaf") (:keywords "convenience") (:authors ("Steven Degutis")) (:maintainer "Christopher Reichert" . "creichert07@gmail.com") (:url . "https://github.com/creichert/ido-vertical-mode.el"))]) +(ido-springboard . [(20170106 755) nil "Temporarily change default-directory for one command" single ((:commit . "687d1e5898a880878995dc9bffe93b4598366203") (:keywords "ido") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainer "John Wiegley" . "jwiegley@gmail.com") (:url . "https://github.com/jwiegley/springboard"))]) +(ido-sort-mtime . [(20171121 859) nil "Sort Ido's file list by modification time" single ((:commit . "f638ff0c922af862f5211779f2311a27fde428eb") (:keywords "convenience" "files") (:authors ("PaweÅ‚ KraÅ›nicki")) (:maintainer "PaweÅ‚ KraÅ›nicki"))]) +(ido-skk . [(20151111 950) ((emacs (24 4)) (ddskk (20150912 1820))) "ido interface for skk henkan" single ((:commit . "89a2e62799bff2841ff634517c86084c4ce69246") (:keywords "languages") (:authors ("tsukimizake ")) (:maintainer "tsukimizake ") (:url . "https://github.com/tsukimizake/ido-skk"))]) +(ido-select-window . [(20131220 2047) ((emacs (24 1))) "Select a window using ido and buffer names" single ((:commit . "a64707d8d154664d50d12e26417d586e4c3dd78b") (:authors ("Peter Jones" . "pjones@devalot.com")) (:maintainer "Peter Jones" . "pjones@devalot.com") (:url . "https://github.com/pjones/ido-select-window"))]) +(ido-occur . [(20160820 1440) ((dash (2 13 0))) "Yet another `occur' with `ido'." single ((:commit . "522af5d55b3d4cd6885f3b4100913566c202cec4") (:keywords "inner" "buffer" "search") (:authors ("Danil" . "danil@kutkevich.org")) (:maintainer "Danil" . "danil@kutkevich.org") (:url . "https://github.com/danil/ido-occur"))]) +(ido-occasional . [(20150214 1248) ((emacs (24 1))) "Use ido where you choose." single ((:commit . "d405f1795e1e0c63be411ee2825184738d29c33a") (:keywords "completion") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/ido-occasional"))]) +(ido-migemo . [(20150921 2244) ((migemo (1 9 1))) "Migemo plug-in for Ido" single ((:commit . "e71114a92dd69cb46abf3fb71a09ce27506fcf77") (:keywords "files") (:authors ("myuhe ")) (:maintainer "myuhe") (:url . "https://github.com/myuhe/ido-migemo.el"))]) +(ido-load-library . [(20140611 1600) ((persistent-soft (0 8 8)) (pcache (0 2 3))) "Load-library alternative using ido-completing-read" single ((:commit . "e03b55957c93aa1a7dd190e173e16ec59dbb2ba7") (:keywords "maint" "completion") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:url . "http://github.com/rolandwalker/ido-load-library"))]) +(ido-hacks . [(20190206 2153) nil "Put more IDO in your IDO" single ((:commit . "d2153a3e8d23436ee07ecae2a106f434361a10c5") (:keywords "convenience") (:authors ("Andreas Politz")) (:maintainer "Scott Jaderholm" . "jaderholm@gmail.com"))]) +(ido-grid-mode . [(20160122 1139) ((emacs (24 4))) "Display ido-prospects in the minibuffer in a grid." single ((:commit . "7cfca3988a6dc3ad18e28abe114218095ff2366f") (:keywords "convenience") (:authors ("Tom Hinton")) (:maintainer "Tom Hinton" . "t@larkery.com") (:url . "https://github.com/larkery/ido-grid-mode.el"))]) +(ido-gnus . [(20140216 1646) ((gnus (5 13))) "Access gnus groups or servers using ido" single ((:commit . "f5fe3f6aa8086f675ba216abace9e3d5f2e3a089") (:keywords "comm") (:authors ("Joe Bloggs" . "vapniks@yahoo.com")) (:maintainer "Joe Bloggs" . "vapniks@yahoo.com") (:url . "https://github.com/vapniks/ido-gnus"))]) +(ido-flex-with-migemo . [(20190408 350) ((flx-ido (0 6 1)) (migemo (1 9 1)) (emacs (24 4))) "use ido with flex and migemo" single ((:commit . "aa93aa05947eb6c106bb9523ff3163b8574c4eac") (:keywords "matching") (:authors ("ROCKTAKEY " . "rocktakey@gmail.com")) (:maintainer "ROCKTAKEY " . "rocktakey@gmail.com") (:url . "https://github.com/ROCKTAKEY/ido-flex-with-migemo"))]) +(ido-exit-target . [(20170717 1851) ((emacs (24 4))) "Commands and keys for selecting other window and frame targets within ido" single ((:commit . "e56fc6928649c87ccf39d56d84ab53ebaced1f73") (:keywords "convenience" "tools" "extensions") (:authors ("justin talbott" . "justin@waymondo.com")) (:maintainer "justin talbott" . "justin@waymondo.com") (:url . "https://github.com/waymondo/ido-exit-target"))]) +(ido-describe-bindings . [(20161023 1102) ((dash (2 13 0))) "Yet another `describe-bindings' with `ido'." single ((:commit . "a142ff1c33df23ed9665497d0dcae2943b3c706a") (:keywords "help") (:authors ("Danil , Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Danil , Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/danil/ido-describe-bindings"))]) +(ido-completing-read+ . [(20191105 532) ((emacs (24 4)) (cl-lib (0 5)) (s (0 1)) (memoize (1 1))) "A completing-read-function using ido" single ((:commit . "74861eabd0a2619be9efc4c91fe0c5e69db5f263") (:keywords "ido" "completion" "convenience") (:authors ("Ryan Thompson")) (:maintainer "Ryan Thompson") (:url . "https://github.com/DarwinAwardWinner/ido-completing-read-plus"))]) +(ido-complete-space-or-hyphen . [(20180929 150) nil "Complete SPACE or HYPHEN when type SPACE in ido" single ((:commit . "ed60ebed113e4e1552efeab0c416f7c88428268e") (:keywords "ido" "completion") (:authors ("Ian Yang ")) (:maintainer "Ian Yang ") (:url . "https://github.com/doitian/ido-complete-space-or-hyphen"))]) +(ido-clever-match . [(20151011 1726) ((emacs (24 4)) (cl-lib (0 5))) "Alternative matcher for ido." single ((:commit . "f173473e99c8b0756f12e4cc8f67e68fa59eadd3") (:keywords "ido" "flex") (:authors ("Bogdan Paul Popa" . "popa.bogdanp@gmail.com")) (:maintainer "Bogdan Paul Popa" . "popa.bogdanp@gmail.com") (:url . "https://github.com/Bogdanp/ido-clever-match"))]) +(ido-at-point . [(20151021 757) ((emacs (24))) "ido-style completion-at-point" single ((:commit . "e5907bbe8a3d148d07698b76bd994dc3076e16ee") (:keywords "convenience" "abbrev") (:authors ("katspaugh")) (:maintainer "katspaugh") (:url . "https://github.com/katspaugh/ido-at-point"))]) +(idle-require . [(20090715 2203) nil "load elisp libraries while Emacs is idle" single ((:commit . "33592bb098223b4432d7a35a1d65ab83f47c1ec1") (:keywords "internal") (:authors ("Nikolaj Schumacher ")) (:maintainer "Nikolaj Schumacher ") (:url . "http://nschum.de/src/emacs/idle-require/"))]) +(idle-org-agenda . [(20190106 1844) nil "Shows your agenda when editor is idle." single ((:commit . "8e6052fc4923c30132052d67d794b76c92851c20") (:keywords "org" "org-mode" "org-agenda" "calendar") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainer "Enis Özgen" . "mail@enisozgen.com") (:url . "https://github.com/enisozgen/idle-org-agenda"))]) +(idle-highlight-mode . [(20120920 1648) nil "highlight the word the point is on" single ((:commit . "c466f2a9e291f9da1167dc879577b2e1a7880482") (:keywords "convenience") (:authors ("Phil Hagelberg, Cornelius Mika")) (:maintainer "Phil Hagelberg, Cornelius Mika") (:url . "http://www.emacswiki.org/cgi-bin/wiki/IdleHighlight"))]) +(idle-highlight-in-visible-buffers-mode . [(20181027 1531) nil "highlight the word the point is on" single ((:commit . "8d8de309d5bd4b035c01bf7f0cfc6e079c79d898") (:keywords "convenience") (:authors ("Ignacy Moryc")) (:maintainer "Ignacy Moryc") (:url . "https://github.com/ignacy/idle-highlight-in-visible-buffers"))]) +(identica-mode . [(20130204 2253) nil "Major mode API client for status.net open microblogging" tar ((:commit . "cf9183ee11ac922e85c7c908f04e2d00b03111b3") (:keywords "identica" "web") (:authors ("Gabriel Saldana" . "gsaldana@gmail.com")) (:maintainer "Gabriel Saldana" . "gsaldana@gmail.com") (:url . "http://blog.gabrielsaldana.org/identica-mode-for-emacs/"))]) +(idea-darkula-theme . [(20160416 2303) ((emacs (24 1))) "Color theme based on IntelliJ IDEA Darkula color theme" single ((:commit . "52602d9b91883e1f297d000951aeed48bf60176e") (:keywords "themes") (:authors ("Alexey Veretennikov ")) (:maintainer "Alexey Veretennikov ") (:url . "http://github.com/fourier/idea-darkula-theme"))]) +(id-manager . [(20170320 1246) nil "id-password management" single ((:commit . "14ebc35db298aac4dedc8aa188bc46bacab81f3b") (:keywords "password" "convenience") (:authors ("SAKURAI Masashi ")) (:maintainer "SAKURAI Masashi "))]) +(icsql . [(20190815 501) ((emacs (26)) (choice-program (0 8)) (buffer-manage (0 10))) "Interactive iSQL iteraface to ciSQL." single ((:commit . "5e5cd04e3f3ad9963c29759293c1f7a54257866b") (:keywords "isql" "sql" "rdbms" "data") (:authors ("Paul Landes")) (:maintainer "Paul Landes") (:url . "https://github.com/plandes/icsql"))]) +(ibuffer-vc . [(20181225 2227) ((cl-lib (0 2))) "Group ibuffer's list by VC project, or show VC status" single ((:commit . "64cb03887bcae6127e80f0d9342c33206e21d2d2") (:keywords "themes") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "http://github.com/purcell/ibuffer-vc"))]) +(ibuffer-tramp . [(20151118 1739) nil "Group ibuffer's list by TRAMP connection" single ((:commit . "bcad0bda3a67f55d1be936bf8fa9ef735fe1e3f3") (:keywords "convenience") (:authors ("Svend Sorensen" . "svend@ciffer.net")) (:maintainer "Svend Sorensen" . "svend@ciffer.net") (:url . "http://github.com/svend/ibuffer-tramp"))]) +(ibuffer-sidebar . [(20180219 131) ((emacs (25 1))) "Sidebar for `ibuffer'" single ((:commit . "7ddf1b5a158b33e9a7d3fe5dad7ea626a464d2bc") (:keywords "ibuffer" "files" "tools") (:authors ("James Nguyen" . "james@jojojames.com")) (:maintainer "James Nguyen" . "james@jojojames.com") (:url . "https://github.com/jojojames/ibuffer-sidebar"))]) +(ibuffer-rcirc . [(20150215 2118) ((cl-lib (0 2))) "Ibuffer integration for rcirc" single ((:commit . "8a4409b1c679d65c819dee4085faf929840e79f8") (:keywords "buffer" "convenience" "comm") (:authors ("Fabián Ezequiel Gallina" . "fgallina@gnu.org")) (:maintainer "Fabián Ezequiel Gallina" . "fgallina@gnu.org") (:url . "https://github.com/fgallina/ibuffer-rcirc"))]) +(ibuffer-projectile . [(20181202 352) ((projectile (0 11 0)) (emacs (24))) "Group ibuffer's list by projectile root" single ((:commit . "76496214144687cee0b5139be2e61b1e400cac87") (:keywords "convenience") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "http://github.com/purcell/ibuffer-projectile"))]) +(ibuffer-project . [(20191122 1232) ((emacs (25 1))) "Group ibuffer's list by project" single ((:commit . "a83e74952244f46a759a8ccd5e55176c763c7309") (:keywords "tools") (:authors ("Andrii Kolomoiets" . "andreyk.mad@gmail.com")) (:maintainer "Andrii Kolomoiets" . "andreyk.mad@gmail.com") (:url . "https://github.com/muffinmad/emacs-ibuffer-project"))]) +(ibuffer-git . [(20110508 731) nil "show git status in ibuffer column" single ((:commit . "d326319c05ddb8280885b31f9094040c1b365876") (:keywords "convenience") (:authors ("Jonathan Rockway" . "jon@jrock.us")) (:maintainer "Jonathan Rockway" . "jon@jrock.us"))]) +(iasm-mode . [(20171023 1422) nil "interactive assembly major mode." single ((:commit . "abbec7f308f9ce97beeb57e459fff35f559b4c18") (:keywords ":" "tools") (:authors ("Rémi Attab" . "remi.attab@gmail.com")) (:maintainer "Rémi Attab" . "remi.attab@gmail.com") (:url . "https://github.com/RAttab/iasm-mode"))]) +(ialign . [(20181202 1146) ((emacs (24 4))) "visual align-regexp" single ((:commit . "e1308c8f6aea05ad6dbcaa33b9bee4eb7e05ee39") (:keywords "tools" "editing" "align" "interactive") (:authors ("MichaÅ‚ Krzywkowski" . "k.michal@zoho.com")) (:maintainer "MichaÅ‚ Krzywkowski" . "k.michal@zoho.com") (:url . "https://github.com/mkcms/interactive-align"))]) +(i3wm . [(20170822 1438) nil "i3wm integration library" single ((:commit . "71391dc61063fee77ad174f3b2ca25c60b41009e") (:keywords "convenience" "extensions") (:authors ("Samuel W. Flint" . "swflint@flintfam.org")) (:maintainer "Samuel W. Flint" . "swflint@flintfam.org") (:url . "https://git.flintfam.org/swf-projects/emacs-i3"))]) +(i2b2-mode . [(20140710 104) nil "Highlights corresponding PHI data in the text portion of an i2b2 XML Document." single ((:commit . "db10efcfc8bed369a516bbf7526ede41f98cb95a") (:keywords "xml" "phi" "i2b2" "deidi2b2") (:authors ("Dan LaManna" . "dan.lamanna@gmail.com")) (:maintainer "Dan LaManna" . "dan.lamanna@gmail.com"))]) +(hyperspace . [(20190908 550) ((emacs (25)) (s (1 12 0))) "Get there from here" single ((:commit . "825ac47887bf2f63e7dc2ecce264a52d9f0fae70") (:keywords "tools" "convenience") (:authors ("Ian Eure" . "ian@retrospec.tv")) (:maintainer "Ian Eure" . "ian@retrospec.tv") (:url . "https://github.com/ieure/hyperspace-el"))]) +(hydra . [(20191121 936) ((cl-lib (0 5)) (lv (0))) "Make bindings that stick around." tar ((:commit . "d38c63d3d85a06fd34b28626d7ebd97bb05db48c") (:keywords "bindings") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/hydra"))]) +(hyde . [(20160508 308) nil "Major mode to help create and manage Jekyll blogs" tar ((:commit . "a8cd6ed00ecd8d7de0ded2f4867015b412b15b76"))]) +(hydandata-light-theme . [(20190809 1925) nil "A light color theme that is easy on your eyes" single ((:commit . "180c3797fa7ef3e4bb679baaf5b492c33bbb9b8b") (:keywords "color-theme" "theme") (:authors ("David Chkhikvadze" . "david@chkhd.net")) (:maintainer "David Chkhikvadze" . "david@chkhd.net") (:url . "https://github.com/chkhd/hydandata-light-theme"))]) +(hyai . [(20170301 1447) ((cl-lib (0 5)) (emacs (24))) "Haskell Yet Another Indentation" single ((:commit . "9efad2ac6a57059b3be624588f649e276a96fdd4") (:authors ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainer "Iku Iwasa" . "iku.iwasa@gmail.com") (:url . "https://github.com/iquiw/hyai"))]) +(hy-mode . [(20191003 1902) ((dash (2 13 0)) (dash-functional (1 2 0)) (s (1 11 0)) (emacs (24))) "Major mode for Hylang" tar ((:commit . "e2d5fecdaec602788aa7123ed13651c888b8d94b") (:keywords "languages" "lisp" "python") (:url . "http://github.com/hylang/hy-mode"))]) +(hungry-delete . [(20170412 102) nil "hungry delete minor mode" single ((:commit . "0434458d3f6b2b585f332271feaa054bf4ec96d7") (:authors ("Nathaniel Flath" . "flat0103@gmail.com")) (:maintainer "Nathaniel Flath" . "flat0103@gmail.com") (:url . "http://github.com/nflath/hungry-delete"))]) +(hungarian-holidays . [(20161020 1138) nil "Adds a list of Hungarian public holidays to Emacs calendar" single ((:commit . "653108769279499d84a79267c90e640d98823872") (:keywords "calendar") (:authors ("Gergely Polonkai" . "gergely@polonkai.eu")) (:maintainer "Gergely Polonkai" . "gergely@polonkai.eu"))]) +(hugsql-ghosts . [(20180425 1129) ((s (1 9 0)) (dash (2 10 0)) (cider (0 14 0))) "Display hugsql defqueries in clojure code as an overlay." single ((:commit . "f3ebc60c66204ad39058cb84eb4bd5facce091df") (:authors ("Roland Kaercher" . "roland.kaercher@gmail.com")) (:maintainer "Roland Kaercher" . "roland.kaercher@gmail.com") (:url . "https://github.com/rkaercher/hugsql-ghosts"))]) +(httprepl . [(20141101 1734) ((s (1 9 0)) (dash (2 5 0)) (emacs (24))) "An HTTP REPL" single ((:commit . "cfa3693267a8ed1c96a86a126823f37dbfe077d8") (:keywords "http" "repl") (:authors ("Greg Sexton" . "gregsexton@gmail.com")) (:maintainer "Greg Sexton" . "gregsexton@gmail.com") (:url . "https://github.com/gregsexton/httprepl.el"))]) +(httpcode . [(20121002 345) nil "explains the meaning of an HTTP status code" single ((:commit . "a45e735082b09477cd704a99294d336cdbeb12ba") (:authors ("Ruslan Spivak" . "ruslan.spivak@gmail.com")) (:maintainer "Ruslan Spivak" . "ruslan.spivak@gmail.com") (:url . "http://github.com/rspivak/httpcode.el"))]) +(http-twiddle . [(20160801 1911) nil "send & twiddle & resend HTTP requests" single ((:commit . "4d0c73b7dcbde8b483d4f3a75c49c74d2fe3ca45") (:keywords "http" "rest" "soap") (:authors ("Luke Gorrie" . "luke@synap.se")) (:maintainer "Hasan Veldstra" . "h@vidiowiki.com") (:url . "https://github.com/hassy/http-twiddle/blob/master/http-twiddle.el"))]) +(http-post-simple . [(20170715 940) nil "HTTP POST requests using the url library" single ((:commit . "f53697fca278c741051aeb668b00466b5e0fd3fe") (:keywords "comm" "data" "processes" "hypermedia") (:authors ("Tom Schutzer-Weissmann")) (:maintainer "Tom Schutzer-Weissmann"))]) +(http . [(20181008 2121) ((emacs (24 4)) (request (0 2 0)) (edit-indirect (0 1 4))) "Yet another HTTP client" single ((:commit . "1bbfff5994e16ffc185c4ac28d792cb040da3351") (:keywords "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:url . "https://github.com/emacs-pe/http.el"))]) +(htmltagwrap . [(20190517 511) ((emacs (24 4))) "Wraps a chunk of HTML code in tags." single ((:commit . "3260d9267b51019328c30a6317f28e4a2dd7d522") (:authors ("Shen, Jen-Chieh" . "jcs090218@gmail.com")) (:maintainer "Shen, Jen-Chieh" . "jcs090218@gmail.com") (:url . "https://github.com/jcs090218/htmltagwrap"))]) +(htmlize . [(20191111 2130) nil "Convert buffer text and decorations to HTML." single ((:commit . "86f22f211e9230857197c42a9823d3f05381deed") (:keywords "hypermedia" "extensions") (:authors ("Hrvoje Niksic" . "hniksic@gmail.com")) (:maintainer "Hrvoje Niksic" . "hniksic@gmail.com") (:url . "https://github.com/hniksic/emacs-htmlize"))]) +(html2org . [(20170418 501) ((emacs (24 4))) "Convert html to org format text" single ((:commit . "6904aed40259ad8afccff079ebd8a07bff319ebc") (:keywords "convenience" "html" "org") (:authors ("DarkSun" . "lujun9972@gmail.com")) (:maintainer "DarkSun" . "lujun9972@gmail.com") (:url . "http://github.com/lujun9972/html2org.el"))]) +(html-to-markdown . [(20151105 840) ((cl-lib (0 5))) "HTML to Markdown converter written in Emacs-lisp." single ((:commit . "60c5498c801be186478cf7c05be05b4430c4a144") (:keywords "tools" "wp" "languages") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com") (:url . "http://github.com/Bruce-Connor/html-to-markdown"))]) +(html-to-hiccup . [(20190909 1549) ((emacs (25 1)) (dash (2 13 0)) (s (1 10 0))) "Convert HTML to Hiccup syntax" single ((:commit . "50a52e2b0d13d865187acdf775b8203d5003f2f1") (:keywords "html" "hiccup" "clojure") (:authors ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainer "Arne Brasseur" . "arne@arnebrasseur.net") (:url . "https://github.com/plexus/html-to-hiccup"))]) +(html-script-src . [(20120403 1815) nil "Insert ") + ("l/" . "
  • |
  • ") + ("m/" . "
    |
    ") + ("n/" . "") + ("p/" . "

    |

    ") + ("q/" . "|") + ("s/" . "|") + ("t/" . "|") + ("u/" . "
    • |
    ") + ("x/" . "") + ("2/" . "

    |

    ") + ("3/" . "

    |

    ") + ("?/" . ""))) + +(defvar web-mode-engines-auto-pairs + '(("angular" . (("{{ " . " }}"))) + ("artanis" . (("<% " . " %>") + ("<%=" . " | %>") + ("<@css" . " | %>") + ("<@icon" . " | %>") + ("<@include" . " | %>") + ("<@js" . " | %>"))) + ("asp" . (("<% " . " %>"))) + ("aspx" . (("<% " . " %>") + ("<%=" . "%>") + ("<%#" . "%>") + ("<%$" . "%>") + ("<%@" . "%>") + ("<%:" . "%>") + ("<%-" . "- | --%>"))) + ("blade" . (("{{{" . " | }}}") + ("{{ " . " }}") + ("{!!" . " | !!}") + ("@{{" . " | }}") + ("{{-" . "- | --}}"))) + ("cl-emb" . (("<% " . " %>") + ("<%=" . " | %>") + ("<%#" . " | %>"))) + ("ctemplate" . (("{{ " . "| }}") + ("{{{" . " | }}}") + ("{~{" . " | }}") + ("{{~" . "{ | }}}") + ("{{!" . "-- | --}}") + ("{{^" . "}}") + ("{{/" . "}}") + ("{{#" . "}}"))) + ("django" . (("{{ " . " }}") + ("{% " . " %}") + ("{%-" . " | %}") + ("{# " . " #}"))) + ("elixir" . (("<% " . " %>") + ("<%=" . " | %>") + ("<%%" . " | %>") + ("<%#" . " | %>"))) + ("ejs" . (("<% " . " %>") + ("<%=" . "%>") + ("<%#" . "%>") + ("<%-" . "%>"))) + ("erb" . (("<% " . " %>") + ("<%=" . " %>") + ("<%#" . "%>") + ("<%-" . " %>"))) + ("freemarker" . (("<% " . " %>") + ("<#-" . "- | -->") + ("${ " . " }") + ("[% " . " %]") + ("[# " . " #]") + ("[#-" . "- | --]"))) + ("go" . (("{{ " . " }}") + ("{{-" . " | -}}"))) + ("hero" . (("<% " . " %>") + ("<%=" . " | %>") + ("<%!" . " | %>") + ("<%:" . " | %>") + ("<%#" . " | %>") + ("<%@" . " | %>") + ("<%~" . " | %>") + ("<%+" . " | %>"))) + ("jsp" . (("<% " . " %>") + ("<%-" . "- | --%>") + ("<%=" . "%>") + ("<%!" . "%>") + ("<%@" . "%>") + ("${ " . " }"))) + ("lsp" . (("<% " . " %>") + ("<%%" . " | %>") + ("<%#" . " | %>"))) + ("mako" . (("<% " . " %>") + ("<%!" . " | %>") + ("${ " . " }"))) + ("marko" . (("${ " . " }"))) + ("mason" . (("<% " . " %>") + ("<& " . " &>"))) + ("mojolicious" . (("<% " . " %>") + ("<%=" . " | %>") + ("<%%" . " | %>") + ("<%#" . " | %>"))) + ("php" . (("") + ("") + (""))) + ("template-toolkit" . (("[% " . " %]") + ("[%-" . " | %]") + ("[%#" . " | %]"))) + ("riot" . (("={ " . " }"))) + ("underscore" . (("<% " . " %>"))) + ("vue" . (("{{ " . " }}"))) + ("web2py" . (("{{ " . " }}") + ("{{=" . "}}"))) + (nil . ((""))) + )) + +(defvar web-mode-engines-snippets + '(("artanis" . (("if" . "<% (if (|) %>\n\n<% ) %>") + ("when" . "<% (when (|) %>\n\n<% ) %>") + ("unless" . "<% (unless (|) %>\n\n<% ) %>") + ("cond" . "<% (cond %>\n<% [(|) %>\n\n<% ] %>\n<% [else %>\n\n<% ] %>\n<% ) %>") + ("let" . "<% (let ([|]) %>\n\n<% ) %>") + ("let*" . "<% (let* ([|]) %>\n\n<% ) %>") + ("do" . "<% (do ([|]) %>\n<% [()] %>\n\n<% ) %>") + ("for-each" . "<% (for-each %>\n|\n\n<% ) %>") + ("case" . "<% (case | %>\n<% [() %>\n\n<% ] %>\n<% [() %>\n\n<% ] %>\n<% ) %>"))) + ("ejs" . (("for" . "<% for (|) { %>\n\n<% } %>") + ("if" . "<% if (|) { %>\n\n<% } %>"))) + ("erb" . (("each" . "<% |.each do %>\n\n<% end %>") + ("if" . "<% if | %>\n\n<% end %>") + ("when" . "<% when | %>\n\n<% end %>") + ("unless" . "<% unless | %>\n\n<% end %>"))) + ("php" . (("if" . "\n\n") + ("while" . "\n\n") + ("for" . "\n\n") + ("foreach" . "\n\n") + ("each" . "\n\n") + ("switch" . "\n\n\n\n\n\n\n"))) + ("django" . (("block" . "{% block | %}\n\n{% endblock %}") + ("comment" . "{% comment | %}\n\n{% endcomment %}") + ("css" . "{% stylesheet %}\n\n{% endstylesheet %}") + ("cycle" . "{% cycle | as %}\n\n{% endcycle %}") + ("filter" . "{% filter | %}\n\n{% endfilter %}") + ("for" . "{% for | in %}\n\n{% endfor %}") + ("if" . "{% if | %}\n\n{% endif %}") + ("ifequal" . "{% ifequal | %}\n\n{% endifequal %}") + ("ifnotequal" . "{% ifnotequal | %}\n\n{% endifnotequal %}") + ("js" . "{% javascript | %}\n\n{% endjavascript %}") + ("schema" . "{% javascript | %}\n\n{% endschema %}") + ("safe" . "{% safe | %}\n\n{% endsafe %}"))) + ("mako" . (("if" . "% if |:\n% endif") + ("for" . "% for | in :\n% endfor") + ("doc" . "<%doc>\n|\n") + ("inherit" . "<%inherit file=\"|\" />") + ("namespace" . "<%namespace name=\"|\" file=\"\" import=\"\"/>") + ("block" . "<%block name=\"|\">\n"))) + ("template-toolkit" . (("if" . "[% IF | %]\n\n[% END %]"))) + (nil . (("html5" . "\n\n\n\n\n\n\n|\n\n") + ("table" . "\n\n\n\n\n
    |
    ") + ("ul" . "
      \n
    • |
    • \n
    • \n
    "))) + )) + +(defvar web-mode-engine-token-regexps + (list + '("artanis" . "\"\\|#|\\|;") + '("asp" . "//\\|/\\*\\|\"\\|'") + '("ejs" . "//\\|/\\*\\|\"\\|'") + '("erb" . "\"\\|'\\|#\\|<<[-]?['\"]?\\([[:alnum:]_]+\\)['\"]?") + '("lsp" . "\"\\|#|\\|;") + '("mako" . "\"\\|'\\|#") + '("mason" . "\"\\|'\\|#") + '("mojolicious" . "\"\\|'") + '("php" . "//\\|/\\*\\|#\\|\"\\|'\\|<<<['\"]?\\([[:alnum:]]+\\)['\"]?") + '("python" . "\"\\|'\\|#") + '("web2py" . "\"\\|'")) + "Engine regexps used to identify tokens (strings / comments) in blocks.") + +(defvar web-mode-engine-open-delimiter-regexps + (list + '("angular" . "{{") + '("artanis" . "<%\\|<@\\(css\\|icon\\|include\\|js\\)") + '("asp" . "<%\\|" nil 4) + ("\\.svg$" "" nil 0) + ("\\.js$" "" t 0) + ("\\.css$" "" t 0) + ("\\.html?$" "" nil 4)) + "List of elements and extensions for `web-mode-file-link'. It +consists of a string that contains the regular expression that +matches the appropriate files, a format string with element that +contains the link (%s should be put where the path goes,) a bool +that tells if the element belongs in the element, and +number of characters to move back if needed (or 0 if point +shouldn't be moved back.)") + +(defvar web-mode-sql-queries + (regexp-opt + '("SELECT" "INSERT" "UPDATE" "DELETE" "select" "insert" "update" "delete"))) + +(defvar web-mode-sql-keywords + (regexp-opt + (append + (cdr (assoc "sql" web-mode-extra-keywords)) + '("SELECT" "INSERT" "UPDATE" "DELETE" + "FROM" "WHERE" "GROUP BY" "LIKE" "LIMIT" "HAVING" "JOIN" "LEFT" "INNER" + "FULL" "OUTER" "VALUES" "ORDER BY" "SEPARATOR" "ASC" "DESC" + "AND" "OR" "ON" "WHEN" "ELSE" "END" "THEN")))) + +(defvar web-mode-python-constants + (regexp-opt + (append + (cdr (assoc "python" web-mode-extra-constants)) + '("True" "False" "None" "__debug__" "NotImplemented" "Ellipsis")))) + +(defvar web-mode-erlang-constants + (regexp-opt + (append + (cdr (assoc "erlang" web-mode-extra-constants)) + '("true" "false")))) + +(defvar web-mode-erlang-keywords + (regexp-opt + (append + (cdr (assoc "erlang" web-mode-extra-keywords)) + '("else" "if" "do" "end")))) + +(defvar web-mode-cl-emb-constants + (regexp-opt + '("nil" "t" "raw" "escape"))) + +(defvar web-mode-cl-emb-keywords + (regexp-opt + '("if" "else" "endif" "unless" "endunless" "var" "repeat" + "endrepeat" "loop" "endloop" "include" "call" "with" + "endwith" "set" "genloop" "endgenloop" "insert"))) + +(defvar web-mode-artanis-constants + (regexp-opt + '("#f" "#t"))) + +(defvar web-mode-artanis-keywords + (regexp-opt + (append + (cdr (assoc "artanis" web-mode-extra-keywords)) + '("begin" "cut" "cute" "if" "when" "unless" "cond" "case" + "do" "quote" "syntax" "lambda" "lambda*" "and" "and-let*" + "or" "else" "delay" "receive" "use-modules" "match" + "match-lambda" "match-lambda*" "match-let" "match-let*" + "match-letrec" "let" "let*" "letrec" "letrec*" "and-let*" + "let-syntax" "letrec-syntax" "syntax-rules" "syntax-case" + "define" "define-syntax" "define-macro" + "define-condition-type" "define-immutable-record-type" + "define-record-type" "define-values" "parameterize" "for-each" + "require-extension" "set!" "test-approximate" "test-assert" + "test-begin" "test-end" "test-eq" "test-equal" "test-eqv" + "test-error" "test-group" "test-group-with-cleanup" "test-with-runner")))) + +(defvar web-mode-lsp-constants + (regexp-opt + '("nil" "t"))) + +(defvar web-mode-lsp-keywords + (regexp-opt + '("dolist" "let" "while" "cond" "when" "progn" "if" + "dotimes" "unless" "lambda" + "loop" "for" "and" "or" "in" "do" "defun"))) + +(defvar web-mode-php-constants + (regexp-opt + (append + (cdr (assoc "php" web-mode-extra-constants)) + '("TRUE" "FALSE" "NULL" "true" "false" "null" + "STR_PAD_LEFT" "STR_PAD_RIGHT" + "ENT_COMPAT" "ENT_QUOTES" "ENT_NOQUOTES" "ENT_IGNORE" + "ENT_SUBSTITUTE" "ENT_DISALLOWED" "ENT_HTML401" "ENT_XML1" + "ENT_XHTML" "ENT_HTML5" "JSON_PRETTY_PRINT" + "LIBXML_NOBLANKS")))) + +(defvar web-mode-php-keywords + (regexp-opt + (append + (cdr (assoc "php" web-mode-extra-keywords)) + '("abstract" "and" "array" "as" "break" "case" "catch" "class" "clone" + "const" "continue" "declare" "default" "die" "do" "echo" "else" "elseif" + "empty" "enddeclare" "endfor" "endforeach" "endif" "endswitch" "endwhile" + "eval" "exit" "extends" "final" "finally" "fn" "for" "foreach" "function" + "global" "goto" "if" "implements" "include" "include_once" "instanceof" + "insteadof" "interface" "isset" "list" "namespace" "new" "or" "parent" + "print" "private" "protected" "public" "require" "require_once" "return" + "self" "static" "switch" "trait" "try" "throw" "unset" "use" "var" + "while" "xor" "yield" "yield from")))) + +(defvar web-mode-php-types + (eval-when-compile + (regexp-opt + '("array" "bool" "boolean" "callable" "float" "int" "integer" + "iterable" "mixed" "object" "resource" "string" "void")))) + +(defvar web-mode-css-at-rules + (eval-when-compile + (regexp-opt + '("charset" "import" "media" "page" "font-face" + "namespace" "supports" "document" + "keyframes" "-moz-keyframes" "-webkit-keyframes" + "mixin" "viewport")))) + +(defvar web-mode-css-pseudo-classes + (eval-when-compile + (regexp-opt + '("active" "after" "before" "checked" "disabled" "empty" "enabled" + "first" "first-child" "first-letter" "first-line" "first-of-type" "focus" + "hover" "lang" "last-child" "last-of-type" "left" "link" + "not" "nth-child" "nth-last-child" "nth-last-of-type" "nth-of-type" + "only-child" "only-of-type" + "right" "root" "selection" "target" "visited")))) + +(defvar web-mode-python-keywords + (regexp-opt + (append + (cdr (assoc "python" web-mode-extra-keywords)) + '("and" "as" "assert" "break" "class" "continue" "def" "del" + "elif" "else" "except" "finally" "for" "from" "global" + "if" "import" "in" "is" "lambda" "nonlocal" "not" "or" "pass" + "raise" "return" "try" "while" "with" "yield")))) + +(defvar web-mode-jsp-keywords + (regexp-opt + (append + (cdr (assoc "jsp" web-mode-extra-keywords)) + '("case" "catch" "do" "else" "end" "false" "for" "function" + "if" "in" "include" + "new" "package" "page" "private" "protected" "public" + "return" "tag" "taglib" "throw" "throws" "true" "try" "void" "while")))) + +(defvar web-mode-erb-keywords + (regexp-opt + (append + (cdr (assoc "erb" web-mode-extra-keywords)) + '("alias" "and" "begin" "break" "case" "class" "def" "defined?" "do" + "elsif" "else" "end" "ensure" "fail" "for" "if" "in" + "module" "next" "not" "or" "redo" "rescue" "retry" "return" + "then" "super" "unless" "undef" "until" "when" "while" "yield" + "__ENCODING__" "__FILE__" "__LINE__")))) + +(defvar web-mode-mason-keywords + (regexp-opt + (append + (cdr (assoc "mason" web-mode-extra-keywords)) + '("and" "base" "close" "die" "each" "else" "elsif" "eval" "exists" + "foreach" "grep" "if" "length" "local" "my" "next" "open" "or" + "package" "pop" "ref" "return" "stat" "sub" "tie" + "undef" "unless" "use" "while")))) + +(defvar web-mode-erb-builtins + (regexp-opt + (append + (cdr (assoc "erb" web-mode-extra-builtins)) + + '("__callee__" "__dir__" "__method__" + "abort" "at_exit" "autoload" "autoload?" + "binding" "block_given?" "caller" "catch" + "eval" "exec" "exit" "exit!" "fail" "fork" "format" + "lambda" "load" "loop" "open" + "p" "print" "printf" "proc" "putc" "puts" + "raise" "rand" "readline" "readlines" "require" "require_relative" + "sleep" "spawn" "sprintf" "srand" "syscall" "system" + "throw" "trap" "warn" + "alias_method" "attr" "attr_accessor" "attr_reader" "attr_writer" + "define_method" "extend" "include" "module_function" + "prepend" "private" "protected" "public" + "refine" "using" + + "error_message_on" "error_messages_for" "form" "input" + "auto_discovery_link_tag" "image_tag" "javascript_include_tag" + "stylesheet_link_tag" "image_path" "path_to_image"" " + "javascript_path" "path_to_javascript" "register_javascript_expansion" + "register_javascript_include_default" "register_stylesheet_expansion" + "stylesheet_path" "path_to_stylesheet" "atom_feed" "entry" "updated" + "benchmark" "cache" "capture" "content_for" "distance_of_time_in_words" + "distance_of_time_in_words_to_now" "time_ago_in_words" "date_select" + "datetime_select" "time_select" "select_date" "select_datetime" + "select_day" "select_hour" "select_minute" "select_month" "select_second" + "select_time" "select_year" "debug" + "check_box" "fields_for" "file_field" "form_for" "hidden_field" + "label" "password_field" "radio_button" "text_area" "text_field" + "check_box_tag" "field_set_tag" "file_field_tag" "form_tag" + "hidden_field_tag" "image_submit_tag" "label_tag" "password_field_tag" + "radio_button_tag" "select_tag" "submit_tag" "text_area_tag" + "text_field_tag" + "collection_select" "country_options_for_select" "country_select" + "option_groups_from_collection_for_select" "options_for_select" + "options_from_collection_for_select" "select" + "time_zone_options_for_select" + "time_zone_select" "button_to_function" "define_javascript_functions" + "escape_javascript" "javascript_tag" "link_to_function"" " + "number_to_currency" "number_to_human_size" "number_to_percentage" + "number_to_phone" "number_with_delimiter" "number_with_precision" + "evaluate_remote_response" "form_remote_for" "form_remote_tag" + "link_to_remote" "observe_field" "observe_field" + "periodically_call_remote" + "remote_form_for" "remote_function" "submit_to_remote" "update_page" + "update_page_tag" "dom_class" "dom_id" "partial_path" "sanitize" + "sanitize_css" "strip_links" "strip_tags" + "cdata_section" "content_tag" "escape_once" "tag" + "auto_link" "concat" "cycle" "excerpt" "highlight" "markdown" "pluralize" + "reset_cycle" "simple_format" "textilize" "textilize_without_paragraph" + "truncate" "word_wrap" "button_to" "current_page?" "link_to" "link_to_if" + "link_to_unless" "link_to_unless_current" "mail_to" "url_for" + "action_name" "atom_feed" "audio_path" "audio_tag" + "content_tag_for" "controller" "controller_name" "action_name" + "controller_path" "convert_to_model" "cookies" "csrf_meta_tag" + "csrf_meta_tags" "headers" + "current_cycle" "div_for" "email_field" "email_field_tag" + "favicon_link_tag" "flash" "l" "button_tag" + "grouped_collection_select" "grouped_options_for_select" + "image_alt" "j" "javascript_cdata_section" + "localize" "logger" "number_field" + "number_field_tag" "number_to_human" "params" "path_to_audio" + "path_to_video" "phone_field" "phone_field_tag" "provide" + "range_field" "range_field_tag" "raw" "render" "request" + "request_forgery_protection_token" "response" "safe_concat" + "safe_join" "search_field" "search_field_tag" + "session" "t" "telephone_field" "telephone_field_tag" + "time_tag" "translate" "url_field" "url_field_tag" + "url_options" "video_path" "video_tag" "simple_form_for" + + )))) + +(defvar web-mode-asp-constants + (regexp-opt + (append + (cdr (assoc "asp" web-mode-extra-constants)) + '("adAsyncExecute" "adAsyncFetch" "adAsyncFetchNonBlocking" "adCmdFile" + "adCmdStoredProc" "adCmdTable" "adCmdTableDirect" "adCmdText" "adCmdUnknown" + "adCmdUnspecified" "adExecuteNoRecords" "adExecuteRecord" "adExecuteStream" + "adLockBatchOptimistic" "adLockOptimistic" "adLockPessimistic" + "adLockReadOnly" "adLockUnspecified" "adOpenDynamic" "adOpenForwardOnly" + "adOpenKeyset" "adOpenStatic" "adOpenUnspecified" "adOptionUnspecified" + "Empty" "Nothing" "Null" "True" "False" + "vbBack" "vbCr" "vbCrLf" "vbFormFeed" "vbLf" "vbNewLine" "vbNullChar" + "vbNullString" "vbObjectError" "vbScript" "vbTab" "vbVerticalTab")))) + +(defvar web-mode-asp-keywords + (regexp-opt + (append + (cdr (assoc "asp" web-mode-extra-keywords)) + '("Abs" "And" "Array" "Asc" "Atn" + "CBool" "CByte" "CCur" "CDate" "CDbl" "CInt" "CLng" "CSng" "CStr" + "Call" "Case" "Chr" "Class" "Const" "Cos" "CreateObject" + "Date" "DateAdd" "DateDiff" "DatePart" "DateSerial" "DateValue" + "Day" "Dim" "Do" + "Each" "Else" "ElseIf" "End" "Erase" "Err" "Eval" "Exit" "Exp" + "Explicit" + "Filter" "Fix" "For" "FormatCurrency" "FormatDateTime" + "FormatNumber" "FormatPercent" "Function" + "GetLocale" "GetObject" "GetRef" "Hex" "Hour" + "If" "In" "InStr" "InStrRev" "InputBox" "Int" "IsArray" "IsDate" + "IsEmpty" "IsNull" "IsNumeric" "IsObject" "Join" + "LBound" "LCase" "LTrim" "Language" "Left" "Len" "Let" + "LoadPicture" "Log" "Loop" + "Mid" "Minute" "Month" "MonthName" "MsgBox" + "New" "Next" "Not" "Now" + "Oct" "On" "Option" "Or" "Preserve" "Private" "Public" + "RGB" "RTrim" "Redim" "Rem" "Replace" "Right" "Rnd" "Round" + "ScriptEngine" "ScriptEngineBuildVersion" + "ScriptEngineMajorVersion" "ScriptEngineMinorVersion" + "Second" "Select" "Set" "SetLocale" "Sgn" "Sin" "Space" "Split" + "Sqr" "StrComp" "StrReverse" "String" "Sub" + "Tan" "Then" "Time" "TimeSerial" "TimeValue" "Timer" "To" "Trim" + "TypeName" + "UBound" "UCase" "Until" "VarType" + "Weekday" "WeekdayName" "Wend" "With" "While" "Year")))) + +(defvar web-mode-asp-types + (regexp-opt + (append + (cdr (assoc "asp" web-mode-extra-types)) + '("Application" "ASPError" "Request" "Response" "Server" "Session")))) + +(defvar web-mode-aspx-keywords + (regexp-opt + (append + (cdr (assoc "aspx" web-mode-extra-keywords)) + '("case" "catch" "do" "else" "end" "for" "foreach" "function" + "if" "in" "include" "new" "package" "page" "return" + "tag" "throw" "throws" "try" "while")))) + +(defvar web-mode-smarty-keywords + (regexp-opt '("as"))) + +(defvar web-mode-velocity-keywords + (eval-when-compile + (regexp-opt '("in" "true" "false")))) + +(defvar web-mode-freemarker-keywords + (eval-when-compile + (regexp-opt '("as" "list")))) + +(defvar web-mode-go-keywords + (eval-when-compile + (regexp-opt + '("const" "define" "else" "end" + "for" "func" "if" "import" + "pipeline" "range" "return" "struct" + "template" "type" "var" "with")))) + +(defvar web-mode-go-functions + (eval-when-compile + (regexp-opt + '("and" "call" "ge" "html" "index" "js" "len" "not" "or" + "print" "printf" "println" "urlquery" "where")))) + +(defvar web-mode-go-types + (regexp-opt + (append + (cdr (assoc "go" web-mode-extra-types)) + '("int" "string")))) + +(defvar web-mode-closure-keywords + (eval-when-compile + (regexp-opt '("in" "and" "not" "or")))) + +(defvar web-mode-svelte-keywords + (regexp-opt '("as"))) + +(defvar web-mode-django-control-blocks + (append + (cdr (assoc "django" web-mode-extra-control-blocks)) + '( + + "assets" "autoescape" + "block" "blocktrans" + "cache" "call" "capture" "comment" + "draw" + "embed" + "filter" "for" "foreach" "form" + "if" "ifchanged" "ifequal" "ifnotequal" + "macro" + "random" "raw" + "safe" "sandbox" "spaceless" + "tablerow" + "unless" + "verbatim" + "with" + + "endassets" "endautoescape" + "endblock" "endblocktrans" + "endcache" "endcall" "endcapture" "endcomment" + "draw" + "endembed" + "endfilter" "endfor" "endforeach" "endform" + "endif" "endifchanged" "endifequal" "endifnotequal" + "endmacro" + "endrandom" "endraw" + "endsafe" "endsandbox" "endspaceless" + "endtablerow" + "endunless" + "endverbatim" + "endwith" + + ;; "set" "endset" ;#504 + + "csrf_token" "cycle" "debug" + "elif" "else" "elseif" "elsif" "empty" "extends" + "firstof" "include" "load" "lorem" "now" "regroup" "ssi" + "trans" "templatetag" "url" "widthratio" + + ;; #805 + "graph" "endgraph" + "javascript" "endjavascript" + "schema" "endschema" + "stylesheet" "endstylesheet" + + ))) + +(defvar web-mode-django-control-blocks-regexp + (regexp-opt web-mode-django-control-blocks t)) + +(defvar web-mode-django-keywords + (eval-when-compile + (regexp-opt + '("and" "as" "assign" + "break" + "cache" "call" "case" "context" "continue" + "do" + "flush" "from" + "ignore" "import" "in" "is" + "layout" "load" + "missing" + "none" "not" + "or" + "pluralize" + "random" + "set" ;#504 + "unless" "use" + "var" + )))) + +(defvar web-mode-django-types + (eval-when-compile + (regexp-opt '("null" "false" "true")))) + +(defvar web-mode-blade-control-blocks + (append + (cdr (assoc "blade" web-mode-extra-control-blocks)) + '("component" "foreach" "forelse" "for" "if" "section" "slot" "switch" "unless" "while") + )) + +(defvar web-mode-blade-control-blocks-regexp + (regexp-opt web-mode-blade-control-blocks t)) + +(defvar web-mode-directives + (eval-when-compile + (regexp-opt + '("include" "page" "taglib" + "Assembly" "Control" "Implements" "Import" + "Master" "OutputCache" "Page" "Reference" "Register")))) + +(defvar web-mode-template-toolkit-keywords + (regexp-opt + '("block" "call" "case" "catch" "clear" "default" "do" + "else" "elsif" "end" "filter" "final" "for" + "foreach" "get" "if" "in" "include" "insert" "is" "last" + "macro" "meta" "or" "perl" "process" "rawperl" "return" + "set" "stop" "switch" "tags" "throw" "try" + "unless" "use" "while" "wrapper"))) + +(defvar web-mode-perl-keywords + (regexp-opt + '("__DATA__" "__END__" "__FILE__" "__LINE__" "__PACKAGE__" + "and" "cmp" "continue" "CORE" "do" "else" "elsif" "eq" "exp" + "for" "foreach" "ge" "gt" "if" "le" "lock" "lt" "m" "ne" "no" + "or" "package" "q" "qq" "qr" "qw" "qx" "s" "sub" + "tr" "unless" "until" "while" "xor" "y" + "my" "use" "print" "say"))) + +(defvar web-mode-javascript-keywords + (regexp-opt + (append + (cdr (assoc "javascript" web-mode-extra-keywords)) + '("as" "async" "await" "break" "case" "catch" "class" "const" "continue" + "debugger" "default" "delete" "do" "else" "enum" "eval" + "export" "extends" "finally" "for" "from" "function" "get" "if" + "implements" "import" "in" "instanceof" "interface" "let" + "new" "of" "package" "private" "protected" "public" + "return" "set" "static" "super" "switch" + "throw" "try" "typeof" "var" "void" "while" "with" "yield")))) + +(defvar web-mode-javascript-constants + (regexp-opt + '("false" "null" "undefined" "Infinity" "NaN" "true" "arguments" "this"))) + +(defvar web-mode-razor-keywords + (regexp-opt + (append + (cdr (assoc "razor" web-mode-extra-keywords)) + '("false" "true" "foreach" "if" "else" "in" "var" "for" "display" + "match" "case" "to" + "Html")))) + +(defvar web-mode-selector-font-lock-keywords + (list + '("$[[:alnum:]-]+" 0 'web-mode-css-variable-face) + (cons (concat "@\\(" web-mode-css-at-rules "\\)\\_>") + '(0 'web-mode-css-at-rule-face)) + '("\\_<\\(all\|braille\\|embossed\\|handheld\\|print\\|projection\\|screen\\|speech\\|tty\\|tv\\|and\\|or\\)\\_>" + 1 'web-mode-keyword-face) + '("[^,]+" 0 'web-mode-css-selector-face) + (cons (concat ":\\([ ]*[[:alpha:]][^,{]*\\)") '(0 'web-mode-css-pseudo-class-face t t)) + )) + +(defvar web-mode-declaration-font-lock-keywords + (list + '("--[[:alnum:]-]+" 0 'web-mode-css-variable-face) + '("$[[:alnum:]-]+" 0 'web-mode-css-variable-face) + (cons (concat "@\\(" web-mode-css-at-rules "\\)\\_>") '(1 'web-mode-css-at-rule-face)) + '("\\([[:alpha:]-]+\\)[ ]?:" 0 'web-mode-css-property-name-face) + '("\\([[:alpha:]-]+\\)[ ]?(" 1 'web-mode-css-function-face) + '("#[[:alnum:]]\\{1,6\\}" 0 'web-mode-css-color-face t t) + '("![ ]?important" 0 'web-mode-css-priority-face t t) + '("\\([^,]+\\)[ ]+{" 1 'web-mode-css-selector-face) + '("'[^']*'\\|\"[^\"]*\"" 0 'web-mode-string-face t t) + )) + +(defvar web-mode-html-font-lock-keywords + (list + '("]\\|>" 0 'web-mode-html-tag-face t) + '(" \\([[:alnum:]-]+=\\)\\(\"[^\"]+\"\\)" + (1 'web-mode-html-attr-name-face) + (2 'web-mode-html-attr-value-face)) + )) + +;; voir https://www.gnu.org/software/emacs/manual/html_node/elisp/Search_002dbased-Fontification.html +(defvar web-mode-javascript-font-lock-keywords + (list + '("@\\([[:alnum:]_]+\\)\\_>" 0 'web-mode-keyword-face) + (cons (concat "\\_<\\(function\\*\\)\\_>") '(1 'web-mode-keyword-face)) + (cons (concat "\\([ \t}{(]\\|^\\)\\(" web-mode-javascript-keywords "\\)\\_>") '(2 'web-mode-keyword-face)) + (cons (concat "\\_<\\(" web-mode-javascript-constants "\\)\\_>") '(0 'web-mode-constant-face)) + '("\\_<\\([$]\\)(" 1 'web-mode-type-face) + '("\\_<\\(new\\|instanceof\\|class\\|extends\\) \\([[:alnum:]_.]+\\)\\_>" 2 'web-mode-type-face) + '("\\_<\\([[:alnum:]_]+\\):[ ]*function[ ]*(" 1 'web-mode-function-name-face) + '("\\_<\\(function\\|get\\|set\\)[ ]+\\([[:alnum:]_]+\\)" + (1 'web-mode-keyword-face) + (2 'web-mode-function-name-face)) + '("\\([[:alnum:]_]+\\)[ ]*([^)]*)[ \n]*{" 1 'web-mode-function-name-face) + '("([ ]*\\([[:alnum:]_]+\\)[ ]*=>" 1 'web-mode-function-name-face) + '("[ ]*\\([[:alnum:]_]+\\)[ ]*=[ ]*([^)]*)[ ]*=>[ ]*{" 1 'web-mode-function-name-face) + '("\\_<\\(var\\|let\\|const\\)[ ]+\\([[:alnum:]_]+\\)" 2 'web-mode-variable-name-face) + '("({" "\\([[:alnum:]_]+\\)[, }]+" nil nil (1 'web-mode-variable-name-face)) ;#738 + '("\\([[:alnum:]_]+\\)[ ]*=> [{(]" 1 'web-mode-variable-name-face) + ;; #989 + ;; '("\\(function\\|[,=]\\|^\\)[ ]*(" + ;; ("\\([[:alnum:]_]+\\)\\([ ]*=[^,)]*\\)?[,)]" nil nil (1 'web-mode-variable-name-face))) + '("\\([[:alnum:]_]+\\):" 1 'web-mode-variable-name-face) + '("\\_<\\([[:alnum:]_-]+\\)[ ]?(" 1 'web-mode-function-call-face) + '("[a-zA-Z]<\\([a-zA-Z]+\\)[,>]" 1 'web-mode-type-face) + )) + +(defvar web-mode-stylus-font-lock-keywords + (list + '("^[ \t]*\\([[:alnum:]().-]+\\)$" 1 'web-mode-css-selector-face) + '("^[ \t]*\\([[:alnum:]-]+[ ]*:\\)" 1 'web-mode-css-property-name-face) + )) + +(defvar web-mode-pug-font-lock-keywords + (list + '("#[[:alnum:]-]+" 0 'web-mode-css-selector-face) + '(" \\([@:]?\\sw+[ ]?=\\)" 1 'web-mode-param-name-face) + )) + +(defvar web-mode-sql-font-lock-keywords + (list + (cons (concat "\\_<\\(" web-mode-sql-keywords "\\)\\_>") '(0 'web-mode-keyword-face)) + '("\\_<\\([[:alnum:]_-]+\\)[ ]?(" 1 'web-mode-function-call-face) + )) + +(defvar web-mode-markdown-font-lock-keywords + (list + '("^[ ]*[*].*$" 0 'web-mode-variable-name-face) + '("^[ ]*#.*$" 0 'web-mode-comment-face) + )) + +(defvar web-mode-html-tag-font-lock-keywords + (list + '("\\(" 0 'web-mode-html-tag-bracket-face) + )) + +(defvar web-mode-dust-font-lock-keywords + (list + '("{[#:/?@><+^]\\([[:alpha:]_.]+\\)" 1 'web-mode-block-control-face) + '(":\\([[:alpha:]]+\\)" 1 'web-mode-keyword-face) + '("\\_<\\([[:alnum:]_]+=\\)\\(\"[^\"]*\"\\|[[:alnum:]_]*\\)" + (1 'web-mode-block-attr-name-face) + (2 'web-mode-block-attr-value-face)) + '("\\\([[:alnum:]_.]+\\)" 0 'web-mode-variable-name-face) + )) + +(defvar web-mode-svelte-font-lock-keywords + (list + (cons (concat "[ ]\\(" web-mode-svelte-keywords "\\)[ ]") '(1 'web-mode-keyword-face)) + '("{[#:/@]\\([[:alpha:]_.]+\\)" 1 'web-mode-block-control-face) + '("\\_<\\([[:alnum:]_]+=\\)\\(\"[^\"]*\"\\|[[:alnum:]_]*\\)" + (1 'web-mode-block-attr-name-face) + (2 'web-mode-block-attr-value-face)) + '("\\\([[:alnum:]_.]+\\)" 0 'web-mode-variable-name-face) + '("\\_<\\([$]\\)\\([[:alnum:]_]+\\)" (1 'web-mode-constant-face) (2 'web-mode-variable-name-face)) + )) + +(defvar web-mode-template-toolkit-font-lock-keywords + (list + (cons (concat "\\_<\\(" web-mode-template-toolkit-keywords "\\)\\_>") '(1 'web-mode-keyword-face)) + '("\\\([[:alpha:]][[:alnum:]_]+\\)[ ]?(" 1 'web-mode-function-call-face) + '("\\\([[:alpha:]][[:alnum:]_]+\\)" 0 'web-mode-variable-name-face) + )) + +(defvar web-mode-smarty-font-lock-keywords + (list + (cons (concat "[ ]\\(" web-mode-smarty-keywords "\\)[ ]") '(1 'web-mode-keyword-face)) + '("{/?\\([[:alpha:]_]+\\)" 1 'web-mode-block-control-face) + '("\\([}{]\\)" 0 'web-mode-block-delimiter-face) + '("\\_<\\([$]\\)\\([[:alnum:]_]+\\)" (1 nil) (2 'web-mode-variable-name-face)) + '("\\_<\\(\\sw+\\)[ ]?(" 1 'web-mode-function-call-face) + '(" \\(\\sw+[ ]?=\\)" 1 'web-mode-param-name-face) + '(" \\(\\sw+\\)[ }]" 1 'web-mode-param-name-face) + '("|\\([[:alnum:]_]+\\)" 1 'web-mode-function-call-face) + '("\\(->\\)\\(\\sw+\\)" (1 nil) (2 'web-mode-variable-name-face)) + '("[.]\\([[:alnum:]_-]+\\)[ ]?(" 1 'web-mode-function-call-face) + '("[.]\\([[:alnum:]_]+\\)" 1 'web-mode-variable-name-face) + '("#\\([[:alnum:]_]+\\)#" 1 'web-mode-variable-name-face) + )) + +(defvar web-mode-velocity-font-lock-keywords + (list + '("#{?\\([[:alpha:]_]+\\)\\_>" (1 'web-mode-block-control-face)) + (cons (concat "\\_<\\(" web-mode-velocity-keywords "\\)\\_>") '(1 'web-mode-keyword-face t t)) + '("#macro([ ]*\\([[:alpha:]]+\\)[ ]+" 1 'web-mode-function-name-face) + '("\\(def\\|define\\) \\([[:alnum:]_-]+\\)(" 2 'web-mode-function-name-face) + '("[.]\\([[:alnum:]_-]+\\)" 1 'web-mode-variable-name-face) + '("\\_<\\($[!]?[{]?\\)\\([[:alnum:]_-]+\\)[}]?" (1 nil) (2 'web-mode-variable-name-face)) + )) + +(defvar web-mode-mako-tag-font-lock-keywords + (list + '("") '(1 'web-mode-constant-face)) + (cons (concat "\\_<\\(" web-mode-python-keywords "\\)\\_>") '(1 'web-mode-keyword-face)) + (cons (concat "\\_<\\(endfor\\|endif\\|endwhile\\)\\_>") '(1 'web-mode-keyword-face)) + )) + +(defvar web-mode-web2py-font-lock-keywords + (list + '("\\_<\\(\\sw+\\)[ ]?(" 1 'web-mode-function-call-face) + (cons (concat "\\_<\\(" web-mode-python-constants "\\)\\_>") '(1 'web-mode-constant-face)) + (cons (concat "\\_<\\(" web-mode-python-keywords "\\)\\_>") '(1 'web-mode-keyword-face)) + (cons (concat "\\_<\\(block\\|extend\\|super\\|end\\|include\\)\\_>") '(1 'web-mode-keyword-face)) + )) + +(defvar web-mode-django-expr-font-lock-keywords + (list + '("|[ ]?\\([[:alpha:]_]+\\)\\_>" 1 'web-mode-filter-face) + (cons (concat "\\_<\\(" web-mode-django-types "\\)\\_>") '(1 'web-mode-type-face)) + '("\\_<\\([[:alpha:]_]+\\)[ ]?(" 1 'web-mode-function-call-face) + '("[[:alnum:]_]+" 0 'web-mode-variable-name-face) + )) + +(defvar web-mode-django-code-font-lock-keywords + (list + (cons (concat "{%[ ]*\\(" web-mode-django-control-blocks-regexp "\\)[ %]") '(1 'web-mode-block-control-face)) + '("{%[ ]*\\(end[[:alpha:]]+\\)\\_>" 1 'web-mode-block-control-face) ;#504 + (cons (concat "\\_<\\(" web-mode-django-keywords "\\)\\_>") '(1 'web-mode-keyword-face)) + (cons (concat "\\_<\\(" web-mode-django-types "\\)\\_>") '(1 'web-mode-type-face)) + '("|[ ]?\\([[:alpha:]_]+\\)\\_>" 1 'web-mode-function-call-face) + '("\\_<\\([[:alpha:]_]+\\)[ ]?(" 1 'web-mode-function-call-face) + '("[[:alnum:]_.]+" 0 'web-mode-variable-name-face) + '("[[:alnum:]_]+\\([.][[:alnum:]_]+\\)+" 0 'web-mode-variable-name-face t t) + )) + +(defvar web-mode-ctemplate-font-lock-keywords + (list + '("{[~]?{[#/>^]?[ ]*\\([[:alnum:]_.-]+\\)" 1 'web-mode-block-control-face) + '("[ \t]+\\([[:alnum:]_-]+\\)=" + (1 'web-mode-block-attr-name-face)) + '("\"[^\"]+\"" 0 'web-mode-block-string-face) + )) + +(defvar web-mode-razor-font-lock-keywords + (list + '("@\\([[:alnum:]_.]+\\)[ ]*[({]" 1 'web-mode-block-control-face) + (cons (concat "\\_<\\(" web-mode-razor-keywords "\\)\\_>") '(1 'web-mode-keyword-face)) + '("\\_<\\(String\\)\\_>" 1 'web-mode-type-face) + '("\\([[:alnum:]]+:\\)" 1 'web-mode-symbol-face) + '("\\(@[[:alnum:]_.]+\\)" 1 'web-mode-variable-name-face) + )) + +(defvar web-mode-riot-font-lock-keywords + (list + '("\\(parent\\|opts\\|tags\\|this\\)\\.\\([[:alnum:]_.]+\\)" + (1 'web-mode-constant-face) + (2 'web-mode-variable-name-face)) + '("\\([[:alnum:]_.]+\\)" 0 'web-mode-variable-name-face) + )) + +(defvar web-mode-closure-font-lock-keywords + (list + '("{\\([@/]?[[:alpha:]]+[?]?\\)" 1 'web-mode-block-control-face) + '("{[@]?param[?]?[ ]+\\([[:alnum:]]+[:]?\\)" 1 'web-mode-symbol-face) + '("\\_<\\(true\\|false\\|null\\)\\_>" 1 'web-mode-type-face) + '("\\\_<[[:alpha:]]+:[ ]+\\([[:alpha:]]+\\)" 1 'web-mode-type-face) + (cons (concat "\\_<\\(" web-mode-closure-keywords "\\)\\_>") '(1 'web-mode-keyword-face)) + '("{\\(alias\\|call\\|delcall\\|delpackage\\|deltemplate\\|namespace\\|template\\)[ ]+\\([[:alnum:].]+\\)" 2 'web-mode-constant-face) + '("\\(allowemptydefault\\|data\\|desc\\|meaning\\|autoescape\\|private\\|variant\\)=" 0 'web-mode-block-attr-name-face) + '("|\\([[:alpha:]]+\\)" 1 'web-mode-function-call-face) + '("\\_<\\([[:alnum:]]+\\)[ ]?(" 1 'web-mode-function-call-face) + '("$\\([[:alnum:]._]+\\)" 1 'web-mode-variable-name-face) + )) + +(defvar web-mode-go-font-lock-keywords + (list + '("{{[-]?[ ]*\\([[:alpha:]]+\\)" 1 'web-mode-block-control-face) + '("\\_") '(0 'web-mode-type-face)) + (cons (concat "\\_<\\(" web-mode-go-keywords "\\)\\_>") '(1 'web-mode-keyword-face)) + (cons (concat "\\_<\\(" web-mode-go-functions "\\)\\_>") '(1 'web-mode-function-call-face)) + '("[$.]\\([[:alnum:]_]+\\)" 1 'web-mode-variable-name-face t t) + '("|[ ]?\\([[:alpha:]_]+\\)\\_>" 1 'web-mode-filter-face) + )) + +(defvar web-mode-expression-font-lock-keywords + (list + '("[[:alpha:]_]" 0 'web-mode-variable-name-face) + )) + +(defvar web-mode-angular-font-lock-keywords + (list + '("[[:alpha:]_]" 0 'web-mode-variable-name-face) + )) + +(defvar web-mode-underscore-font-lock-keywords + (list + (cons (concat "\\_<\\(" web-mode-javascript-keywords "\\)\\_>") '(0 'web-mode-keyword-face)) + '("\\_<\\(_\.[[:alpha:]]+\\)(" 1 'web-mode-function-call-face) + '("\\_" 1 'web-mode-type-face) + '("\\_<\\([[:alnum:]_]+\\):[ ]*function[ ]*(" 1 'web-mode-function-name-face) + '("\\_<\\(var\\)\\_>[ ]+\\([[:alnum:]_]+\\)" + (1 'web-mode-keyword-face) + (2 'web-mode-variable-name-face)) + )) + +(defvar web-mode-vue-font-lock-keywords + (list + '("\\_<\\([[:alnum:]_-]+\\)[ ]?(" 1 'web-mode-function-call-face) + '("[[:alpha:]_]" 0 'web-mode-variable-name-face) + )) + +(defvar web-mode-engine-tag-font-lock-keywords + (list + '("") '(0 'web-mode-keyword-face)) + '("\\(public\\|private\\)[ ]+\\([[:alpha:]]+\\)[ ]+\\([[:alnum:]._]+\\)[ ]?(" + (2 'web-mode-type-face) + (3 'web-mode-function-name-face)) + '("\\_<\\([[:alnum:]._]+\\)[ ]?(" 1 'web-mode-function-call-face) + '("@\\(\\sw*\\)" 1 'web-mode-variable-name-face) + '("\\_<\\([[:alnum:].]+\\)[ ]+[{[:alpha:]]+" 1 'web-mode-type-face) + )) + +(defvar web-mode-asp-font-lock-keywords + (list + (cons (concat "\\_<\\(" web-mode-asp-keywords "\\)\\_>") '(0 'web-mode-keyword-face)) + (cons (concat "\\_<\\(" web-mode-asp-types "\\)\\_>") '(0 'web-mode-type-face)) + (cons (concat "\\_<\\(" web-mode-asp-constants "\\)\\_>") '(0 'web-mode-constant-face)) + '("\\(Class\\|new\\) \\([[:alnum:]_]+\\)" 2 'web-mode-type-face) + '("Const \\([[:alnum:]_]+\\)" 1 'web-mode-constant-face) + '("\\_" + (0 'web-mode-keyword-face) + ("[[:alnum:]_]+" nil nil (0 'web-mode-variable-name-face))) + '("\\_<\\(public\\|private\\|sub\\|function\\)\\_> \\([[:alnum:]_]+\\)[ ]*(" 2 'web-mode-function-name-face) + '("\\_<\\(public\\|private\\|dim\\)\\_> \\([[:alnum:]_]+\\)" 2 'web-mode-variable-name-face) + )) + +(defvar web-mode-aspx-font-lock-keywords + (list + (cons (concat "\\_<\\(" web-mode-aspx-keywords "\\)\\_>") '(0 'web-mode-keyword-face)) + '("\\_<\\([[:alnum:].]+\\)[ ]+[[:alpha:]]+" 1 'web-mode-type-face) + )) + +(defvar web-mode-uel-font-lock-keywords + (list + '("[$#{]{\\|}" 0 'web-mode-preprocessor-face) + '("\\([[:alpha:]_]+\\)[ ]?(" 1 'web-mode-function-call-face) + '("|[ ]*\\(trim\\|x\\|u\\)" 1 'web-mode-function-call-face) + '("[[:alpha:]_]" 0 'web-mode-variable-name-face) + )) + +(defvar web-mode-php-var-interpolation-font-lock-keywords + (list + '("[[:alpha:]_]" 0 'web-mode-variable-name-face) + '("\".+\"\\|'.*'" 0 'web-mode-string-face) + )) + +(defvar web-mode-marko-font-lock-keywords + (list + '("[[:alnum:]_]+" 0 'web-mode-variable-name-face) + )) + +(defvar web-mode-freemarker-square-font-lock-keywords + (list + '("\\[/?[#@]\\([[:alpha:]_.]*\\)" 1 'web-mode-block-control-face) + '("#\\(macro\\|function\\) \\([[:alpha:]]+\\)" 2 'web-mode-function-name-face) + (cons (concat "\\_<\\(" web-mode-freemarker-keywords "\\)\\_>") '(1 'web-mode-keyword-face)) + '("\\_<\\([[:alnum:]._]+\\)[ ]?(" 1 'web-mode-function-call-face) + '("[[:alpha:]]\\([[:alnum:]_]+\\)?" 0 'web-mode-variable-name-face) + )) + +(defvar web-mode-freemarker-font-lock-keywords + (list + '("") '(1 'web-mode-keyword-face)) + '("\\_<\\([[:alnum:]._]+\\)[ ]?(" 1 'web-mode-function-call-face) + '("[[:alpha:]]\\([[:alnum:]_]+\\)?" 0 'web-mode-variable-name-face) + )) + +(defvar web-mode-directive-font-lock-keywords + (list + '("<%@[ ]*\\([[:alpha:]]+\\)[ ]+" 1 'web-mode-block-control-face) + '("\\_<\\([[:alpha:]]+=\\)\\(\"[^\"]*\"\\)" + (1 'web-mode-block-attr-name-face t t) + (2 'web-mode-block-attr-value-face t t)) + )) + +(defvar web-mode-erb-font-lock-keywords + (list + '("[^:]\\(:[[:alnum:]_]+\\)" 1 'web-mode-symbol-face) + '("\\([[:alnum:]_]+:\\)[ ]+" 1 'web-mode-symbol-face) + (cons (concat "\\_<\\(" web-mode-erb-builtins "\\)\\_>") '(0 'web-mode-builtin-face)) + (cons (concat "\\_<\\(" web-mode-erb-keywords "\\)\\_>") '(0 'web-mode-keyword-face)) + '("\\_<\\(self\\|true\\|false\\|nil\\)\\_>" 0 'web-mode-variable-name-face) + '("[@$]@?\\([[:alnum:]_]+\\)" 0 'web-mode-variable-name-face) + '("class[ ]+\\([[:alnum:]_]+\\)" 1 'web-mode-type-face) + '("def[ ]+\\([[:alnum:]_]+\\)" 1 'web-mode-function-name-face) + '("\\(?:\\_<\\|::\\)\\([A-Z]+[[:alnum:]_]+\\)" 1 (unless (eq (char-after) ?\() 'web-mode-type-face)) + '("/[^/]+/" 0 'web-mode-string-face) + )) + +(defvar web-mode-ejs-font-lock-keywords + web-mode-javascript-font-lock-keywords) + +(defvar web-mode-python-font-lock-keywords + (list + (cons (concat "\\_<\\(" web-mode-python-keywords "\\)\\_>") '(0 'web-mode-keyword-face)) + )) + +(defvar web-mode-erlang-font-lock-keywords + (list + (cons (concat "\\_<\\(" web-mode-erlang-keywords "\\)\\_>") '(0 'web-mode-keyword-face)) + (cons (concat "\\_<\\(" web-mode-erlang-constants "\\)\\_>") '(0 'web-mode-constant-face)) + '("@\\([[:alnum:]_]+\\)" 0 'web-mode-variable-name-face) + '("[ ]\\(:[[:alnum:]-_]+\\)" 1 'web-mode-symbol-face) + )) + +(defvar web-mode-mason-code-font-lock-keywords + (list + (cons (concat "\\_<\\(" web-mode-mason-keywords "\\)\\_>") '(0 'web-mode-keyword-face)) + '("sub[ ]+\\([[:alnum:]_]+\\)" 1 'web-mode-function-name-face) + '("\\_<\\([[:alnum:]_]+\\)[ ]?::" 1 'web-mode-type-face) + '("\\([@]\\)\\([[:alnum:]#_]*\\)" (1 nil) (2 'web-mode-variable-name-face)) + '("\\_<\\([$%]\\)\\([[:alnum:]@#_]*\\)" (1 nil) (2 'web-mode-variable-name-face)) + '("{\\([[:alnum:]_]+\\)}" 1 'web-mode-variable-name-face) + '("\\_<\\(\\sw+\\)[ ]?(" 1 'web-mode-function-call-face) + '("[[:alnum:]_][ ]?::[ ]?\\([[:alnum:]_]+\\)" 1 'web-mode-variable-name-face) + '("->[ ]?\\([[:alnum:]_]+\\)" 1 'web-mode-variable-name-face) + '("\\(?:method\\|def\\) \\([[:alnum:]._]+\\)" 1 'web-mode-function-name-face) + '("|[ ]*\\([[:alnum:],]+\\)[ ]*%>" 1 'web-mode-filter-face) + )) + +(defvar web-mode-mason-block-font-lock-keywords + (list + '("<[/]?%\\([[:alpha:]]+\\)" 1 'web-mode-block-control-face) + '("[[:alpha:]]" 0 'web-mode-block-attr-value-face) + )) + +(defvar web-mode-mojolicious-font-lock-keywords + (list + (cons (concat "\\_<\\(" web-mode-perl-keywords "\\)\\_>") '(0 'web-mode-keyword-face)) + '("\\_<\\(begin\\|end\\)\\_>" 1 'web-mode-constant-face) + '("\\_<\\([$]\\)\\([[:alnum:]_]*\\)" (1 nil) (2 'web-mode-variable-name-face)) + )) + +(defvar web-mode-lsp-font-lock-keywords + (list + (cons (concat "\\_<\\(" web-mode-lsp-keywords "\\)\\_>") '(0 'web-mode-keyword-face)) + (cons (concat "\\_<\\(" web-mode-lsp-constants "\\)\\_>") '(1 'web-mode-constant-face)) + '("[ ]\\(:[[:alnum:]-_]+\\)" 1 'web-mode-symbol-face) + '("(defun \\([[:alnum:]-:]+\\)" 1 'web-mode-function-name-face) + '("(defvar \\([[:alnum:]-:]+\\)" 1 'web-mode-variable-name-face) + )) + +(defvar web-mode-cl-emb-font-lock-keywords + (list + (cons (concat "\\_<\\(" web-mode-cl-emb-keywords "\\)\\_>") '(0 'web-mode-keyword-face)) + (cons (concat "\\_<\\(" web-mode-cl-emb-constants "\\)\\_>") '(0 'web-mode-constant-face)) + '("\\(@\\)" 1 'web-mode-function-call-face) + (list (concat "\\(@" web-mode-cl-emb-keywords "\\)[ ]+\\([[:alnum:]_]+\\)") + '(1 'web-mode-keyword-face) + '(2 'web-mode-variable-name-face)) + )) + +(defvar web-mode-artanis-font-lock-keywords + (list + (cons (concat "\\_<\\(" web-mode-artanis-keywords "\\)\\_>") '(0 'web-mode-keyword-face)) + (cons (concat "\\_<\\(" web-mode-artanis-constants "\\)\\_>") '(0 'web-mode-constant-face)) + '("(define[*]? (\\([[:alnum:]-:_!#$%^&*=+/?<>.]+\\)" 1 'web-mode-function-name-face) + '("\\(#:[[:alnum:]-:_!#$%^&*=+/?<>.]+\\)" 1 'web-mode-builtin-face) + )) + +(defvar web-mode-php-font-lock-keywords + (list + (cons (concat "\\_<\\(" web-mode-php-keywords "\\)\\_>") '(0 'web-mode-keyword-face)) + (cons (concat "(\\_<\\(" web-mode-php-types "\\)\\_>") '(1 'web-mode-type-face)) + (cons (concat "\\_<\\(" web-mode-php-constants "\\)\\_>") '(0 'web-mode-constant-face)) + '("function[ ]+\\([[:alnum:]_]+\\)" 1 'web-mode-function-name-face) + '("\\_<\\([[:alnum:]_]+\\)[ ]?(" 1 'web-mode-function-call-face) + '("[[:alnum:]_][ ]?::[ ]?\\([[:alnum:]_]+\\)" 1 'web-mode-constant-face) + '("->[ ]?\\([[:alnum:]_]+\\)" 1 'web-mode-variable-name-face) + '("\\_<\\([[:alnum:]_]+\\)[ ]?::" 1 'web-mode-type-face) + '("\\_<\\(instanceof\\|class\\|extends\\|new\\)[ ]+\\([[:alnum:]_]+\\)" 2 'web-mode-type-face) + '("\\(\\_<\\|[+-]\\)\\([$]\\)\\([[:alnum:]_]*\\)" (2 nil) (3 'web-mode-variable-name-face)) + )) + +(defvar web-mode-spip-font-lock-keywords + (list + '("<:.+:>" 0 'web-mode-block-string-face) + '("#[A-Z0-9_]+" 0 'web-mode-variable-name-face) + '("|[a-z0-9_=!?<>]+" 0 'web-mode-function-call-face) + '("(\\([[:alnum:]_ ]+\\))" 1 'web-mode-constant-face) + )) + +(defvar web-mode-latex-font-lock-keywords + (list + '("[[:alnum:]_]+" 0 'web-mode-function-name-face t t) + )) + +(defvar web-mode-blade-font-lock-keywords + (append + (list + '("@\\([[:alpha:]_]+\\)" (1 'web-mode-block-control-face))) + web-mode-php-font-lock-keywords)) + +(defvar web-mode-engines-font-lock-keywords + '(("angular" . web-mode-angular-font-lock-keywords) + ("artanis" . web-mode-artanis-font-lock-keywords) + ("blade" . web-mode-blade-font-lock-keywords) + ("cl-emb" . web-mode-cl-emb-font-lock-keywords) + ("closure" . web-mode-closure-font-lock-keywords) + ("ctemplate" . web-mode-ctemplate-font-lock-keywords) + ("dust" . web-mode-dust-font-lock-keywords) + ("elixir" . web-mode-erlang-font-lock-keywords) + ("ejs" . web-mode-ejs-font-lock-keywords) + ("erb" . web-mode-erb-font-lock-keywords) + ("go" . web-mode-go-font-lock-keywords) + ("hero" . web-mode-go-font-lock-keywords) + ("lsp" . web-mode-lsp-font-lock-keywords) + ("marko" . web-mode-marko-font-lock-keywords) + ("mojolicious" . web-mode-mojolicious-font-lock-keywords) + ("php" . web-mode-php-font-lock-keywords) + ("python" . web-mode-python-font-lock-keywords) + ("razor" . web-mode-razor-font-lock-keywords) + ("riot" . web-mode-riot-font-lock-keywords) + ("smarty" . web-mode-smarty-font-lock-keywords) + ("spip" . web-mode-spip-font-lock-keywords) + ("template-toolkit" . web-mode-template-toolkit-font-lock-keywords) + ("underscore" . web-mode-underscore-font-lock-keywords) + ("web2py" . web-mode-web2py-font-lock-keywords) + ("velocity" . web-mode-velocity-font-lock-keywords) + ("vue" . web-mode-vue-font-lock-keywords) + ("xoops" . web-mode-smarty-font-lock-keywords) + ("svelte" . web-mode-svelte-font-lock-keywords) + ) + "Engines font-lock keywords") + +(defvar web-mode-prettify-symbols-alist + '(("=>" . 8658) + (">=" . 8805) + ("<=" . 8804))) + +(defvar web-mode-before-auto-complete-hooks nil + "List of functions to run before triggering the auto-complete library. + +Auto-complete sources will sometimes need some tweaking to work +nicely with web-mode. This hook gives users the chance to adjust +the environment as needed for ac-sources, right before they're used.") + +(defvar web-mode-ignore-ac-start-advice nil + "If not nil 'defadvice' for 'ac-start' will be ignored. + +Can be set inside a hook in 'web-mode-before-auto-complete-hooks' to +non nil to ignore the defadvice which sets ac-sources according to current +language. This is needed if the corresponding auto-completion triggers +another auto-completion with different ac-sources (e.g. ac-php)") + +(defvar web-mode-ac-sources-alist nil + "alist mapping language names to ac-sources for that language.") + +(defvar web-mode-syntax-table + (let ((table (make-syntax-table))) + (modify-syntax-entry ?- "_" table) + (modify-syntax-entry ?_ "_" table) ;#563 + (modify-syntax-entry ?< "." table) + (modify-syntax-entry ?> "." table) + (modify-syntax-entry ?& "." table) + (modify-syntax-entry ?/ "." table) + (modify-syntax-entry ?= "." table) + (modify-syntax-entry ?% "." table) + table) + "Syntax table used to reveal whitespaces.") + +(defvar web-mode-map + (let ((map (make-sparse-keymap))) + + (define-key map [menu-bar wm] (cons "Web-Mode" (make-sparse-keymap))) + (define-key map [menu-bar wm dom] (cons "Dom" (make-sparse-keymap))) + (define-key map [menu-bar wm blk] (cons "Block" (make-sparse-keymap))) + (define-key map [menu-bar wm attr] (cons "Html Attr" (make-sparse-keymap))) + (define-key map [menu-bar wm tag] (cons "Html Tag" (make-sparse-keymap))) + (define-key map [menu-bar wm elt] (cons "Html Element" (make-sparse-keymap))) + + (define-key map [menu-bar wm sep-1] '(menu-item "--")) + + (define-key map [menu-bar wm dom dom-xpa] '(menu-item "XPath" web-mode-dom-xpath)) + (define-key map [menu-bar wm dom dom-tra] '(menu-item "Traverse" web-mode-dom-traverse)) + (define-key map [menu-bar wm dom dom-err] '(menu-item "Show error(s)" web-mode-dom-errors-show)) + (define-key map [menu-bar wm dom dom-ent] '(menu-item "Replace html entities" web-mode-dom-entities-replace)) + (define-key map [menu-bar wm dom dom-quo] '(menu-item "Replace dumb quotes" web-mode-dom-quotes-replace)) + (define-key map [menu-bar wm dom dom-apo] '(menu-item "Replace apostrophes" web-mode-dom-apostrophes-replace)) + (define-key map [menu-bar wm dom dom-nor] '(menu-item "Normalize" web-mode-dom-normalize)) + + (define-key map [menu-bar wm blk blk-sel] '(menu-item "Select" web-mode-block-select)) + (define-key map [menu-bar wm blk blk-pre] '(menu-item "Previous" web-mode-block-previous)) + (define-key map [menu-bar wm blk blk-nex] '(menu-item "Next" web-mode-block-next)) + (define-key map [menu-bar wm blk blk-kil] '(menu-item "Kill" web-mode-block-kill)) + (define-key map [menu-bar wm blk blk-end] '(menu-item "End" web-mode-block-end)) + (define-key map [menu-bar wm blk blk-clo] '(menu-item "Close" web-mode-block-close)) + (define-key map [menu-bar wm blk blk-beg] '(menu-item "Beginning" web-mode-block-beginning)) + + (define-key map [menu-bar wm attr attr-ins] '(menu-item "Insert" web-mode-attribute-insert)) + (define-key map [menu-bar wm attr attr-end] '(menu-item "End" web-mode-attribute-end)) + (define-key map [menu-bar wm attr attr-beg] '(menu-item "Beginning" web-mode-attribute-beginning)) + (define-key map [menu-bar wm attr attr-sel] '(menu-item "Select" web-mode-attribute-select)) + (define-key map [menu-bar wm attr attr-kil] '(menu-item "Kill" web-mode-attribute-kill)) + (define-key map [menu-bar wm attr attr-nex] '(menu-item "Next" web-mode-attribute-next)) + (define-key map [menu-bar wm attr attr-pre] '(menu-item "Previous" web-mode-attribute-previous)) + (define-key map [menu-bar wm attr attr-tra] '(menu-item "Transpose" web-mode-attribute-transpose)) + + (define-key map [menu-bar wm tag tag-beg] '(menu-item "Sort Attributes" web-mode-tag-attributes-sort)) + (define-key map [menu-bar wm tag tag-sel] '(menu-item "Select" web-mode-tag-select)) + (define-key map [menu-bar wm tag tag-pre] '(menu-item "Previous" web-mode-tag-previous)) + (define-key map [menu-bar wm tag tag-nex] '(menu-item "Next" web-mode-tag-next)) + (define-key map [menu-bar wm tag tag-end] '(menu-item "End" web-mode-tag-end)) + (define-key map [menu-bar wm tag tag-beg] '(menu-item "Beginning" web-mode-tag-beginning)) + + (define-key map [menu-bar wm elt elt-con] '(menu-item "Contract" web-mode-element-contract)) + (define-key map [menu-bar wm elt elt-ext] '(menu-item "Extract" web-mode-element-extract)) + (define-key map [menu-bar wm elt elt-van] '(menu-item "Vanish" web-mode-element-vanish)) + (define-key map [menu-bar wm elt elt-exc] '(menu-item "Transpose" web-mode-element-transpose)) + (define-key map [menu-bar wm elt elt-sel] '(menu-item "Select" web-mode-element-select)) + (define-key map [menu-bar wm elt elt-ren] '(menu-item "Rename" web-mode-element-rename)) + (define-key map [menu-bar wm elt elt-pre] '(menu-item "Previous" web-mode-element-previous)) + (define-key map [menu-bar wm elt elt-par] '(menu-item "Parent" web-mode-element-parent)) + (define-key map [menu-bar wm elt elt-nex] '(menu-item "Next" web-mode-element-next)) + (define-key map [menu-bar wm elt elt-mut] '(menu-item "Mute blanks" web-mode-element-mute-blanks)) + (define-key map [menu-bar wm elt elt-del] '(menu-item "Kill" web-mode-element-kill)) + (define-key map [menu-bar wm elt elt-end] '(menu-item "End" web-mode-element-end)) + (define-key map [menu-bar wm elt elt-inn] '(menu-item "Content (select)" web-mode-element-content-select)) + (define-key map [menu-bar wm elt elt-clo] '(menu-item "Close" web-mode-element-close)) + (define-key map [menu-bar wm elt elt-ins] '(menu-item "Insert" web-mode-element-insert)) + (define-key map [menu-bar wm elt elt-ins] '(menu-item "Word to tag" web-mode-element-insert-at-point)) + (define-key map [menu-bar wm elt elt-dup] '(menu-item "Clone" web-mode-element-clone)) + (define-key map [menu-bar wm elt elt-cfo] '(menu-item "Children fold" web-mode-element-children-fold-or-unfold)) + (define-key map [menu-bar wm elt elt-chi] '(menu-item "Child" web-mode-element-child)) + (define-key map [menu-bar wm elt elt-beg] '(menu-item "Beginning" web-mode-element-beginning)) + + (define-key map [menu-bar wm fol] '(menu-item "Fold/Unfold" web-mode-fold-or-unfold)) + (define-key map [menu-bar wm hig] '(menu-item "Highlight buffer" web-mode-buffer-highlight)) + (define-key map [menu-bar wm ind] '(menu-item "Indent buffer" web-mode-buffer-indent)) + (define-key map [menu-bar wm nav] '(menu-item "Tag/Block navigation" web-mode-navigate)) + (define-key map [menu-bar wm exp] '(menu-item "Mark and Expand" web-mode-mark-and-expand)) + (define-key map [menu-bar wm spa] '(menu-item "Toggle whitespaces" web-mode-whitespaces-show)) + (define-key map [menu-bar wm sni] '(menu-item "Insert snippet" web-mode-snippet-insert)) + + ;;-------------------------------------------------------------------------- + ;; "C-c " are reserved for users + + (define-key map (kbd "C-c C-a b") 'web-mode-attribute-beginning) + (define-key map (kbd "C-c C-a e") 'web-mode-attribute-end) + (define-key map (kbd "C-c C-a i") 'web-mode-attribute-insert) + (define-key map (kbd "C-c C-a n") 'web-mode-attribute-next) + (define-key map (kbd "C-c C-a s") 'web-mode-attribute-select) + (define-key map (kbd "C-c C-a k") 'web-mode-attribute-kill) + (define-key map (kbd "C-c C-a p") 'web-mode-attribute-previous) + (define-key map (kbd "C-c C-a t") 'web-mode-attribute-transpose) + + (define-key map (kbd "C-c C-b b") 'web-mode-block-beginning) + (define-key map (kbd "C-c C-b c") 'web-mode-block-close) + (define-key map (kbd "C-c C-b e") 'web-mode-block-end) + (define-key map (kbd "C-c C-b k") 'web-mode-block-kill) + (define-key map (kbd "C-c C-b n") 'web-mode-block-next) + (define-key map (kbd "C-c C-b p") 'web-mode-block-previous) + (define-key map (kbd "C-c C-b s") 'web-mode-block-select) + + (define-key map (kbd "C-c C-d a") 'web-mode-dom-apostrophes-replace) + (define-key map (kbd "C-c C-d d") 'web-mode-dom-errors-show) + (define-key map (kbd "C-c C-d e") 'web-mode-dom-entities-replace) + (define-key map (kbd "C-c C-d n") 'web-mode-dom-normalize) + (define-key map (kbd "C-c C-d q") 'web-mode-dom-quotes-replace) + (define-key map (kbd "C-c C-d t") 'web-mode-dom-traverse) + (define-key map (kbd "C-c C-d x") 'web-mode-dom-xpath) + + (define-key map (kbd "C-c C-e /") 'web-mode-element-close) + (define-key map (kbd "C-c C-e a") 'web-mode-element-content-select) + (define-key map (kbd "C-c C-e b") 'web-mode-element-beginning) + (define-key map (kbd "C-c C-e c") 'web-mode-element-clone) + (define-key map (kbd "C-c C-e d") 'web-mode-element-child) + (define-key map (kbd "C-c C-e e") 'web-mode-element-end) + (define-key map (kbd "C-c C-e f") 'web-mode-element-children-fold-or-unfold) + (define-key map (kbd "C-c C-e i") 'web-mode-element-insert) + (define-key map (kbd "C-c C-e I") 'web-mode-element-insert-at-point) + (define-key map (kbd "C-c C-e k") 'web-mode-element-kill) + (define-key map (kbd "C-c C-e m") 'web-mode-element-mute-blanks) + (define-key map (kbd "C-c C-e n") 'web-mode-element-next) + (define-key map (kbd "C-c C-e p") 'web-mode-element-previous) + (define-key map (kbd "C-c C-e r") 'web-mode-element-rename) + (define-key map (kbd "C-c C-e s") 'web-mode-element-select) + (define-key map (kbd "C-c C-e t") 'web-mode-element-transpose) + (define-key map (kbd "C-c C-e u") 'web-mode-element-parent) + (define-key map (kbd "C-c C-e v") 'web-mode-element-vanish) + (define-key map (kbd "C-c C-e w") 'web-mode-element-wrap) + (define-key map (kbd "C-c C-e +") 'web-mode-element-extract) + (define-key map (kbd "C-c C-e -") 'web-mode-element-contract) + + (define-key map (kbd "C-c C-t a") 'web-mode-tag-attributes-sort) + (define-key map (kbd "C-c C-t b") 'web-mode-tag-beginning) + (define-key map (kbd "C-c C-t e") 'web-mode-tag-end) + (define-key map (kbd "C-c C-t m") 'web-mode-tag-match) + (define-key map (kbd "C-c C-t n") 'web-mode-tag-next) + (define-key map (kbd "C-c C-t p") 'web-mode-tag-previous) + (define-key map (kbd "C-c C-t s") 'web-mode-tag-select) + + ;;-------------------------------------------------------------------------- + + ;;(define-key map (kbd "M-q") 'fill-paragraph) + (define-key map (kbd "M-;") 'web-mode-comment-or-uncomment) + + ;;C-c C-a : attribute + ;;C-c C-b : block + ;;C-c C-d : dom + ;;C-c C-e : element + (define-key map (kbd "C-c C-f") 'web-mode-fold-or-unfold) + (define-key map (kbd "C-c C-h") 'web-mode-buffer-highlight) + (define-key map (kbd "C-c C-i") 'web-mode-buffer-indent) + (define-key map (kbd "C-c C-j") 'web-mode-jshint) + (define-key map (kbd "C-c C-l") 'web-mode-file-link) + (define-key map (kbd "C-c C-m") 'web-mode-mark-and-expand) + (define-key map (kbd "C-c C-n") 'web-mode-navigate) + (define-key map (kbd "C-c C-r") 'web-mode-reload) + (define-key map (kbd "C-c C-s") 'web-mode-snippet-insert) + ;;C-c C-t : tag + (define-key map (kbd "C-c C-w") 'web-mode-whitespaces-show) + + map) + "Keymap for `web-mode'.") + +;;---- COMPATIBILITY ----------------------------------------------------------- + +(eval-and-compile + + ;; compatibility with emacs < 23 + (defun web-mode-string-match-p (regexp string &optional start) + "Same as `string-match' except it does not change the match data." + (let ((inhibit-changing-match-data t)) + (string-match regexp string start))) + + (unless (fboundp 'string-match-p) + (fset 'string-match-p (symbol-function 'web-mode-string-match-p))) + + ;; compatibility with emacs < 23.3 + (if (fboundp 'with-silent-modifications) + (defalias 'web-mode-with-silent-modifications 'with-silent-modifications) + (defmacro web-mode-with-silent-modifications (&rest body) + `(let ((old-modified-p (buffer-modified-p)) + (inhibit-modification-hooks t) + (buffer-undo-list t)) + (unwind-protect + ,@body + (set-buffer-modified-p old-modified-p))))) + + ;; compatibility with emacs < 24.3 + (defun web-mode-buffer-narrowed-p () + (if (fboundp 'buffer-narrowed-p) + (buffer-narrowed-p) + (/= (- (point-max) (point-min)) (buffer-size)))) + + ;; compatibility with emacs < 24 + (defalias 'web-mode-prog-mode + (if (fboundp 'prog-mode) 'prog-mode 'fundamental-mode)) + + ;; compatibility with emacs < 24.3 + (unless (fboundp 'setq-local) + (defmacro setq-local (var val) + `(set (make-local-variable ',var) ,val))) + + ;; compatability with emacs < 24.4 + (defun web-mode-string-suffix-p (suffix string) + "Return t if STRING ends with SUFFIX." + (and (string-match (rx-to-string `(: ,suffix eos) t) + string) + t)) + + (unless (fboundp 'string-suffix-p) + (fset 'string-suffix-p (symbol-function 'web-mode-string-suffix-p))) + + ) ;eval-and-compile + +;;---- MAJOR MODE -------------------------------------------------------------- + +;;;###autoload +(define-derived-mode web-mode web-mode-prog-mode "Web" + "Major mode for editing web templates." + + (make-local-variable 'web-mode-attr-indent-offset) + (make-local-variable 'web-mode-attr-value-indent-offset) + (make-local-variable 'web-mode-auto-pairs) + (make-local-variable 'web-mode-block-regexp) + (make-local-variable 'web-mode-change-beg) + (make-local-variable 'web-mode-change-end) + (make-local-variable 'web-mode-code-indent-offset) + (make-local-variable 'web-mode-column-overlays) + (make-local-variable 'web-mode-comment-formats) + (make-local-variable 'web-mode-comment-style) + (make-local-variable 'web-mode-content-type) + (make-local-variable 'web-mode-css-indent-offset) + (make-local-variable 'web-mode-display-table) + (make-local-variable 'web-mode-django-control-blocks) + (make-local-variable 'web-mode-django-control-blocks-regexp) + (make-local-variable 'web-mode-enable-block-face) + (make-local-variable 'web-mode-enable-inlays) + (make-local-variable 'web-mode-enable-part-face) + (make-local-variable 'web-mode-enable-sexp-functions) + (make-local-variable 'web-mode-engine) + (make-local-variable 'web-mode-engine-attr-regexp) + (make-local-variable 'web-mode-engine-file-regexps) + (make-local-variable 'web-mode-engine-open-delimiter-regexps) + (make-local-variable 'web-mode-engine-token-regexp) + (make-local-variable 'web-mode-expand-initial-pos) + (make-local-variable 'web-mode-expand-initial-scroll) + (make-local-variable 'web-mode-expand-previous-state) + (make-local-variable 'web-mode-indent-style) + (make-local-variable 'web-mode-indentless-attributes) + (make-local-variable 'web-mode-indentless-elements) + (make-local-variable 'web-mode-is-scratch) + (make-local-variable 'web-mode-fontification-off) + (make-local-variable 'web-mode-jshint-errors) + (make-local-variable 'web-mode-last-enabled-feature) + (make-local-variable 'web-mode-markup-indent-offset) + (make-local-variable 'web-mode-minor-engine) + (make-local-variable 'web-mode-overlay-tag-end) + (make-local-variable 'web-mode-overlay-tag-start) + (make-local-variable 'web-mode-part-beg) + (make-local-variable 'web-mode-scan-beg) + (make-local-variable 'web-mode-scan-end) + (make-local-variable 'web-mode-sql-indent-offset) + (make-local-variable 'web-mode-time) + + (make-local-variable 'comment-end) + (make-local-variable 'comment-region-function) + (make-local-variable 'comment-start) + (make-local-variable 'fill-paragraph-function) + (make-local-variable 'font-lock-beg) + (make-local-variable 'font-lock-defaults) + (make-local-variable 'font-lock-extend-region-functions) + (make-local-variable 'font-lock-end) + (make-local-variable 'font-lock-support-mode) + (make-local-variable 'font-lock-unfontify-region-function) + (make-local-variable 'imenu-case-fold-search) + (make-local-variable 'imenu-create-index-function) + (make-local-variable 'imenu-generic-expression) + (make-local-variable 'indent-line-function) + (make-local-variable 'parse-sexp-lookup-properties) + (make-local-variable 'uncomment-region-function) + (make-local-variable 'yank-excluded-properties) + + (setq web-mode-time (current-time)) + + (setq comment-end "-->" + comment-region-function 'web-mode-comment-or-uncomment-region + comment-start "")) + ((string= sub1 "<") + (setq closing-string ">" + delim-open "")) + ((string= sub1 "[") + (setq closing-string "]" + delim-open "\\[/?[#@]" + delim-close "/?\\]")) + (t + (setq closing-string "}" + delim-open "${" + delim-close "}")) + ) + ) ;freemarker + + ((string= web-mode-engine "velocity") + (cond + ((string= sub2 "##") + (setq closing-string "EOL")) + ((string= sub2 "#*") + (setq closing-string "*#")) + (t + (setq closing-string "EOV" + delim-open "#")) + ) + ) ;velocity + + ((string= web-mode-engine "razor") + (cond + ((string= sub2 "@@") + (forward-char 2) + (setq closing-string nil)) + ((string= sub2 "@*") + (setq closing-string "*@")) + ((string= sub1 "@") + (setq closing-string "EOR" + delim-open "@")) + ((and (string= sub1 "}") + (looking-at-p "[ ]*\n")) + ;;(setq closing-string "EOC") + (save-excursion + (let (paren-pos) + (setq paren-pos (web-mode-part-opening-paren-position (1- (point)))) + (if (and paren-pos (get-text-property paren-pos 'block-side)) + (setq closing-string "EOC") + (setq closing-string nil) + ) ;if + ) ;let + ) ;save-excursion + ;;(message "%s %S %S" sub2 (point) (get-text-property (point) 'part-side)) + ) + ((string= sub1 "}") + ;;(message "%s: %s" (point) sub1) + (save-excursion + (let (paren-pos) + (setq paren-pos (web-mode-part-opening-paren-position (1- (point)))) + (if (and paren-pos (get-text-property paren-pos 'block-side)) + (setq closing-string "EOR") + (setq closing-string nil) + ) ;if + ) ;let + ) ;save-excursion + ) ;case } + ) ;cond + ) ;razor + + ((and (string= web-mode-engine "riot") + (not (get-text-property open 'part-side))) + (setq closing-string (if (string= tagopen "{") "}" "/// end script") + delim-open "{" + delim-close "}") + ) ;riot + + ((string= web-mode-engine "spip") + (cond + ((and (string= sub1 "#") + (looking-at "[A-Z0-9_]+")) + (setq closing-string (match-string-no-properties 0))) + ((string= sub1 "(") + (setq closing-string '("(" . ")"))) + ((string= sub1 "{") + (setq closing-string '("{" . "}"))) + ((string= sub2 "<:") + (setq closing-string ":>")) + (t + (setq closing-string "]")) + )) + + ((string= web-mode-engine "marko") + (setq closing-string "}" + delim-open "${" + delim-close "}") + ) ;marko + + ) ;cond + + (when closing-string + (cond + + ((listp closing-string) + (cond + ((web-mode-rsf-balanced (car closing-string) (cdr closing-string) reg-end t) + (setq close (match-end 0) + pos (point)) + ) + ((and (string= web-mode-engine "php") + (string= " (point) reg-end) reg-end (point)) + pos (if (> (point) reg-end) reg-end (point))) + (goto-char pos)) + + ((string= closing-string "EOV") + (web-mode-velocity-skip open) + (setq close (point) + pos (point))) + + ((and (member web-mode-engine '("ctemplate")) + (re-search-forward closing-string reg-end t)) + (setq close (match-end 0) + pos (point))) + + ((search-forward closing-string reg-end t) + (setq close (match-end 0) + pos (point))) + ) ;cond + + (when (and close (>= reg-end pos)) + ;;(message "pos(%S) : open(%S) close(%S)" pos open close) + (put-text-property open (1+ open) 'block-beg 0) + (put-text-property open (1+ open) 'block-controls 0) + (put-text-property open close 'block-side t) + (put-text-property (1- close) close 'block-end t) + (when delim-open + (web-mode-block-delimiters-set open close delim-open delim-close)) + (web-mode-block-scan open close) + (cond + ((and (string= web-mode-engine "erb") + (looking-at-p "<%= javascript_tag do %>")) + (setq tagopen "<%= javascript_tag do %>")) + ((and (string= web-mode-engine "mako") + (looking-at-p "<%block filter=\"collect_js\">")) + (setq tagopen "<%block filter=\"collect_js\">")) + ((and (string= web-mode-engine "mako") + (looking-at-p "<%block filter=\"collect_css\">")) + (setq tagopen "<%block filter=\"collect_css\">")) + ((and (string= web-mode-engine "django") + (looking-at-p "{% javascript %}")) + (setq tagopen "{% javascript %}")) + ((and (string= web-mode-engine "django") + (looking-at-p "{% schema %}")) + (setq tagopen "{% schema %}")) + ((and (string= web-mode-engine "django") + (looking-at-p "{% stylesheet %}")) + (setq tagopen "{% stylesheet %}")) + ) + ;;(message "%S %s" (point) tagopen) + (when (and (member tagopen '("" + "<%block filter=\"collect_js\">" + "<%block filter=\"collect_css\">" + "{% javascript %}" + "{% schema %}" + "{% stylesheet %}")) + (setq part-beg close) + (setq tagclose + (cond + ((string= tagopen "") "<% end %>") + ((member tagopen '("<%block filter=\"collect_js\">" + "<%block filter=\"collect_css\">")) " part-end part-beg)) + ;;(message "end=%S" (point)) + (put-text-property part-beg part-end + 'part-side + (cond + ((member tagopen '("" "{% stylesheet %}")) 'css) + (t 'javascript))) + (setq pos part-beg + part-beg nil + part-end nil) + ) ;when + ) ;when close + + (if pos (goto-char pos)) + + ) ;when closing-string + + ) ;while + + (cond + ((>= i 2000) + (message "scan-blocks ** warning (%S) **" i)) + ((string= web-mode-engine "razor") + (web-mode-process-blocks reg-beg reg-end 'web-mode-block-scan)) + ((string= web-mode-engine "django") + (web-mode-scan-engine-comments reg-beg reg-end + "{% comment %}" "{% endcomment %}")) + ((string= web-mode-engine "mako") + (web-mode-scan-engine-comments reg-beg reg-end + "<%doc>" "")) + ((string= web-mode-engine "mason") + (web-mode-scan-engine-comments reg-beg reg-end + "<%doc>" "")) + ) ;cond + + ))) + +(defun web-mode-closure-skip (reg-beg reg-end) + (let (regexp char pos inc continue found) + (setq regexp "[\"'{}]" + inc 0) + (while (and (not found) (re-search-forward regexp reg-end t)) + (setq char (char-before)) + (cond + ((get-text-property (point) 'block-side) + (setq found t)) + ((eq char ?\{) + (setq inc (1+ inc))) + ((eq char ?\}) + (cond + ((and (not (eobp)) + (< inc 1)) + (setq found t + pos (point))) + ((> inc 0) + (setq inc (1- inc))) + ) + ) + ((eq char ?\') + (setq continue t) + (while (and continue (search-forward "'" reg-end t)) + (setq continue (web-mode-string-continue-p reg-beg)) + ) + ) + ((eq char ?\") + (setq continue t) + (while (and continue (search-forward "\"" reg-end t)) + (setq continue (web-mode-string-continue-p reg-beg)) + ) + ) + ) ;cond + ) ;while + pos)) + +(defun web-mode-django-skip (reg-beg reg-end) + (let (regexp char pos inc continue found) + (setq regexp "[\"'{}]" + inc 0) + (while (and (not found) (re-search-forward regexp reg-end t)) + (setq char (char-before)) + (cond + ((get-text-property (point) 'block-side) + (setq found t)) + ((eq char ?\{) + (setq inc (1+ inc))) + ((eq char ?\}) + (cond + ((and (not (eobp)) + (eq (char-after) ?\}) + (< inc 2)) + (forward-char) + (setq found t + pos (1+ (point)))) + ((> inc 0) + (setq inc (1- inc))) + ) + ) + ((eq char ?\') + (setq continue t) + (while (and continue (search-forward "'" reg-end t)) + (setq continue (web-mode-string-continue-p reg-beg)) + ) + ) + ((eq char ?\") + (setq continue t) + (while (and continue (search-forward "\"" reg-end t)) + (setq continue (web-mode-string-continue-p reg-beg)) + ) + ) + ) ;cond + ) ;while + pos)) + +(defun web-mode-velocity-skip (pos) + (goto-char pos) + (let ((continue t) (i 0)) + (when (eq ?\# (char-after)) + (forward-char)) + (when (member (char-after) '(?\$ ?\@)) + (forward-char)) + (when (member (char-after) '(?\!)) + (forward-char)) + (cond + ((member (char-after) '(?\{)) + (search-forward "}" nil t)) + ((looking-at-p "def \\|define ") + (search-forward ")" (line-end-position) t)) + (t + (setq continue t) + (while continue + (skip-chars-forward "a-zA-Z0-9_-") + (when (> (setq i (1+ i)) 500) + (message "velocity-skip ** warning (%S) **" pos) + (setq continue nil)) + (when (member (char-after) '(?\()) + (search-forward ")" nil t)) + (if (member (char-after) '(?\.)) + (forward-char) + (setq continue nil)) + ) ;while + ) ;t + ) ;cond + )) + +(defun web-mode-razor-skip (pos) + (goto-char pos) + (let ((continue t) (i 0)) + (while continue + (skip-chars-forward " =@a-zA-Z0-9_-") + (cond + ((> (setq i (1+ i)) 500) + (message "razor-skip ** warning **") + (setq continue nil)) + ((and (eq (char-after) ?\*) + (eq (char-before) ?@)) + (when (not (search-forward "*@" nil t)) + (setq continue nil)) + ) + ((looking-at-p "@[({]") + (forward-char) + (when (setq pos (web-mode-closing-paren-position (point))) + (goto-char pos)) + (forward-char) + ) + ((and (not (eobp)) (eq ?\( (char-after))) + (cond + ((looking-at-p "[ \n]*[<@]") + (setq continue nil)) + ((setq pos (web-mode-closing-paren-position)) + (goto-char pos) + (forward-char)) + (t + (forward-char)) + ) ;cond + ) + ((and (not (eobp)) (eq ?\< (char-after)) (looking-back "[a-z]" (point-min))) + (setq pos (point)) + (cond + ;; #988 + ((search-forward ">" (line-end-position) t) + (goto-char pos) + (setq continue nil) + ) + (t + (setq continue nil)) + ) ;cond + ) + ((and (not (eobp)) (eq ?\. (char-after))) + (forward-char)) + ((and (not (eobp)) (looking-at-p "[ \n]*else")) + (re-search-forward "[ \t]*else") + ) + ((looking-at-p "[ \n]*{") + (search-forward "{") + (search-forward "=>" (point-at-eol) 't) + (if (looking-at-p "[ \n]*[<@]") + (setq continue nil) + (backward-char) + (when (setq pos (web-mode-closing-paren-position)) + (goto-char pos)) + (forward-char) + ) ;if + ) + ((looking-at-p "}") + (forward-char)) + (t + (setq continue nil)) + ) ;cond + ) ;while + )) + +(defun web-mode-block-delimiters-set (reg-beg reg-end delim-open delim-close) + "Set text-property 'block-token to 'delimiter-(beg|end) on block delimiters (e.g. )" + ;;(message "reg-beg(%S) reg-end(%S) delim-open(%S) delim-close(%S)" reg-beg reg-end delim-open delim-close) + (when (member web-mode-engine + '("artanis" "asp" "aspx" "cl-emb" "clip" "closure" "ctemplate" "django" "dust" + "elixir" "ejs" "erb" "freemarker" "go" "hero" "jsp" "lsp" "mako" "mason" "mojolicious" + "smarty" "template-toolkit" "web2py" "xoops" "svelte")) + (save-excursion + (when delim-open + (goto-char reg-beg) + (looking-at delim-open) + (setq delim-open (match-string-no-properties 0))) + (when delim-close + (goto-char reg-end) + (looking-back delim-close reg-beg t) + (setq delim-close (match-string-no-properties 0))) + )) + (when delim-open + (put-text-property reg-beg (+ reg-beg (length delim-open)) + 'block-token 'delimiter-beg)) + (when delim-close + (put-text-property (- reg-end (length delim-close)) reg-end + 'block-token 'delimiter-end)) + ) + +(defun web-mode-process-blocks (reg-beg reg-end func) + (let ((i 0) (continue t) (block-beg reg-beg) (block-end nil)) + (while continue + (setq block-end nil) + (unless (get-text-property block-beg 'block-beg) + (setq block-beg (web-mode-block-next-position block-beg))) + (when (and block-beg (< block-beg reg-end)) + (setq block-end (web-mode-block-end-position block-beg))) + (cond + ((> (setq i (1+ i)) 2000) + (message "process-blocks ** warning (%S) **" (point)) + (setq continue nil)) + ((or (null block-end) (> block-end reg-end)) + (setq continue nil)) + (t + (setq block-end (1+ block-end)) + (funcall func block-beg block-end) + (setq block-beg block-end) + ) ;t + ) ;cond + ) ;while + )) + +(defun web-mode-block-scan (block-beg block-end) + (let (sub1 sub2 sub3 regexp token-type) + + ;;(message "block-beg=%S block-end=%S" block-beg block-end) + ;;(remove-text-properties block-beg block-end web-mode-scan-properties) + + (goto-char block-beg) + + (cond + ((>= (point-max) (+ block-beg 3)) + (setq sub3 (buffer-substring-no-properties block-beg (+ block-beg 3)) + sub2 (buffer-substring-no-properties block-beg (+ block-beg 2)) + sub1 (buffer-substring-no-properties block-beg (+ block-beg 1))) + ) + ((>= (point-max) (+ block-beg 2)) + (setq sub3 (buffer-substring-no-properties block-beg (+ block-beg 2)) + sub2 (buffer-substring-no-properties block-beg (+ block-beg 2)) + sub1 (buffer-substring-no-properties block-beg (+ block-beg 1))) + ) + (t + (setq sub1 (buffer-substring-no-properties block-beg (+ block-beg 1))) + (setq sub2 sub1 + sub3 sub1) + ) + ) + + (cond + + ((member web-mode-engine '("php" "lsp" "python" "web2py" "mason")) + (setq regexp web-mode-engine-token-regexp)) + + ((string= web-mode-engine "mako") + (cond + ((string= sub2 "##") + (setq token-type 'comment) + ) + (t + (setq regexp web-mode-engine-token-regexp)) + ) + ) ;mako + + ((string= web-mode-engine "django") + (cond + ((member sub2 '("{{" "{%")) + (setq regexp "\"\\|'")) + ((string= sub2 "{#") + (setq token-type 'comment)) + ) + ) ;django + + ((string= web-mode-engine "ctemplate") + (cond + ((string= sub3 "{{!") + (setq token-type 'comment)) + ((member sub2 '("{{")) + ) + ) + ) ;ctemplate + + ((string= web-mode-engine "go") + (cond + ((string= sub3 "{{/") + (setq token-type 'comment)) + ((string= sub2 "{{") + (setq regexp "\"\\|'")) + ) + ) ;go + + ((string= web-mode-engine "hero") + (cond + ((string= sub3 "<%#") + (setq token-type 'comment)) + (t + (setq regexp "\"\\|'")) + ) + ) ;hero + + ((string= web-mode-engine "razor") + (cond + ((string= sub2 "@*") + (setq token-type 'comment)) + (t + (setq regexp "//\\|@\\*\\|\"\\|'")) + ) + ) ;razor + + ((string= web-mode-engine "blade") + (cond + ((string= sub3 "{{-") + (setq token-type 'comment)) + (t + (setq regexp "\"\\|'")) + ) + ) ;blade + + ((string= web-mode-engine "cl-emb") + (cond + ((string= sub3 "<%#") + (setq token-type 'comment)) + (t + (setq regexp "\"\\|'")) + ) + ) ;cl-emb + + ((string= web-mode-engine "artanis") + (cond + ((string= sub3 "<%;") + (setq token-type 'comment)) + ((string= sub3 "<%#|") + (setq token-type 'comment)) + (t + (setq regexp "\"")) + ) + ) ;artanis + + ((string= web-mode-engine "elixir") + (cond + ((string= sub3 "<%#") + (setq token-type 'comment)) + (t + (setq regexp "\"\\|'")) + ) + ) ;elixir + + ((string= web-mode-engine "mojolicious") + (cond + ((or (string= sub2 "%#") (string= sub3 "<%#")) + (setq token-type 'comment)) + (t + (setq regexp "\"\\|'")) + ) + ) ;mojolicious + + ((string= web-mode-engine "velocity") + (cond + ((member sub2 '("##" "#*")) + (setq token-type 'comment)) + ((member sub1 '("$" "#")) + (setq regexp "\"\\|'")) + ) + ) ;velocity + + ((string= web-mode-engine "jsp") + (cond + ((string= sub3 "<%-") + (setq token-type 'comment)) + ((string= sub3 "<%@") + (setq regexp "/\\*")) + ((member sub2 '("${" "#{")) + (setq regexp "\"\\|'")) + ((string= sub2 "<%") + (setq regexp "//\\|/\\*\\|\"\\|'")) + ) + ) ;jsp + + ((string= web-mode-engine "clip") + (setq regexp nil) + ) ;clip + + ((and (string= web-mode-engine "asp") + (string= sub2 "<%")) + (setq regexp "//\\|/\\*\\|\"\\|'") + ) ;asp + + ((string= web-mode-engine "aspx") + (cond + ((string= sub3 "<%-") + (setq token-type 'comment)) + ((string= sub3 "<%@") + (setq regexp "/\\*")) + ((string= sub3 "<%$") + (setq regexp "\"\\|'")) + (t + (setq regexp "//\\|/\\*\\|\"\\|'")) + ) + ) ;aspx + + ((string= web-mode-engine "freemarker") + (cond + ((member sub3 '("<#-" "[#-")) + (setq token-type 'comment)) + ((member sub2 '("${" "#{")) + (setq regexp "\"\\|'")) + ((or (member sub2 '("<@" "[@" "<#" "[#")) + (member sub3 '(" (- block-end block-beg) 6)) + (web-mode-block-tokenize + (web-mode-block-code-beginning-position block-beg) + (web-mode-block-code-end-position block-beg) + regexp) + ) + ) ;cond + + )) + +(defun web-mode-block-tokenize (reg-beg reg-end &optional regexp) + (unless regexp (setq regexp web-mode-engine-token-regexp)) + ;;(message "tokenize: reg-beg(%S) reg-end(%S) regexp(%S)" reg-beg reg-end regexp) + ;;(message "tokenize: reg-beg(%S) reg-end(%S) command(%S)" reg-beg reg-end this-command) + ;;(message "%S>%S : %S" reg-beg reg-end (buffer-substring-no-properties reg-beg reg-end)) + (save-excursion + (let ((pos reg-beg) beg end char match continue (flags 0) token-type token-end) + + (remove-list-of-text-properties reg-beg reg-end '(block-token)) + + ;; TODO : vérifier la cohérence + (put-text-property reg-beg reg-end 'block-side t) + + (goto-char reg-beg) + + (when (> (point) reg-end) + (message "block-tokenize ** reg-beg(%S) > reg-end(%S) **" reg-beg reg-end)) + + (while (and (< (point) reg-end) (re-search-forward regexp reg-end t)) + (setq beg (match-beginning 0) + match (match-string 0) + continue t + token-type 'comment + token-end (if (< reg-end (line-end-position)) reg-end (line-end-position)) + char (aref match 0)) + (cond + + ((and (string= web-mode-engine "asp") (eq char ?\')) + (goto-char token-end)) + + ((and (string= web-mode-engine "razor") (eq char ?\')) + (cond + ((looking-at-p "\\(.\\|[\\][bfntr]\\|[\\]u....\\)'") + (search-forward "'" reg-end t) + (setq token-type 'string) + ) + (t + (re-search-forward "[[:alnum:]_-]+") + (setq token-type 'symbol) + ))) + + ((eq char ?\') + (setq token-type 'string) + (while (and continue (search-forward "'" reg-end t)) + (setq continue (web-mode-string-continue-p reg-beg)) + )) + + ((eq char ?\") + (setq token-type 'string) + (while (and continue (search-forward "\"" reg-end t)) + (setq continue (web-mode-string-continue-p reg-beg)) + )) + + ((string= match "//") + (goto-char token-end)) + + ((eq char ?\;) + (goto-char token-end)) + + ((string= match "#|") + (unless (search-forward "|#" reg-end t) + (goto-char token-end))) + + ((eq char ?\#) + (goto-char token-end)) + + ((string= match "/*") + (unless (search-forward "*/" reg-end t) + (goto-char token-end)) + ) + + ((string= match "@*") + (unless (search-forward "*@" reg-end t) + (goto-char token-end))) + + ((eq char ?\<) + (setq token-type 'string) + (re-search-forward (concat "^[ ]*" (match-string 1)) reg-end t)) + + (t + (message "block-tokenize ** token end (%S) **" beg) + (setq token-type nil)) + + ) ;cond + + (put-text-property beg (point) 'block-token token-type) + + (when (eq token-type 'comment) + (put-text-property beg (1+ beg) 'syntax-table (string-to-syntax "<")) + (if (or (< (point) (line-end-position)) (= (point) (point-max))) + (put-text-property (1- (point)) (point) 'syntax-table (string-to-syntax ">")) ;#445 #480 + (put-text-property (point) (1+ (point)) 'syntax-table (string-to-syntax ">")) ;#377 + ) + ) + + ) ;while + + (web-mode-block-controls-unset pos) + + ))) + +(defun web-mode-set-php-controls (reg-beg reg-end) + (goto-char reg-beg) + (let (match controls + (continue t) + (regexp "endif\\|endforeach\\|endfor\\|endwhile\\|elseif\\|else\\|if\\|foreach\\|for\\|while")) + (while continue + (if (not (web-mode-block-rsf regexp reg-end)) + (setq continue nil) + (setq match (match-string-no-properties 0)) +;; (message "%S %S" match (point)) + (cond + ((and (member match '("else" "elseif")) + (looking-at-p "[ ]*[:(]")) + (setq controls (append controls (list (cons 'inside "if")))) + ) + ((and (>= (length match) 3) + (string= (substring match 0 3) "end")) + (setq controls (append controls (list (cons 'close (substring match 3))))) + ) + ((and (progn (skip-chars-forward "[ ]") t) + (eq (char-after) ?\() + (web-mode-closing-paren reg-end) + ;;(progn (message "ixi%S" (point))) + (looking-at-p ")[ ]*:")) + (setq controls (append controls (list (cons 'open match)))) + ) + ) ;cond + ) ;if + ) ;while + ;;(message "%S-%S %S" reg-beg reg-end controls) + (when (and controls (> (length controls) 1)) + (setq controls (web-mode-block-controls-reduce controls))) + controls)) + +(defun web-mode-block-controls-reduce (controls) + (when (and (eq (car (car controls)) 'open) + (member (cons 'close (cdr (car controls))) controls)) + (setq controls nil)) + controls) + +(defun web-mode-block-controls-unset (pos) + (cond + ((null (get-text-property pos 'block-side)) + (message "block-controls-unset ** invalid value (%S) **" pos)) + ((or (get-text-property pos 'block-beg) + (setq pos (web-mode-block-beginning-position pos))) + (put-text-property pos (1+ pos) 'block-controls 0)) + (t + (message "block-controls-unset ** failure (%S) **" (point))) + )) + +(defun web-mode-block-controls-get (pos) + (web-mode-with-silent-modifications + (let ((controls nil)) + (cond + ((null (get-text-property pos 'block-side)) + (message "block-controls-get ** invalid value (%S) **" pos)) + ((or (get-text-property pos 'block-beg) + (setq pos (web-mode-block-beginning-position pos))) + (setq controls (get-text-property pos 'block-controls)) + (when (integerp controls) + (web-mode-block-controls-set pos (web-mode-block-end-position pos)) + (setq controls (get-text-property pos 'block-controls)) + ) + ) + (t + (message "block-controls-get ** failure (%S) **" (point))) + ) ;cond + controls))) + +(defun web-mode-block-controls-set (reg-beg reg-end) + (save-excursion + (goto-char reg-beg) + (let (controls pos type control) + + (cond + + ((null web-mode-engine) + (message "block-controls-set ** unknown engine (%S) **" web-mode-engine) + ) + + ((string= web-mode-engine "php") + (setq controls (web-mode-set-php-controls reg-beg reg-end)) + (when (web-mode-block-starts-with "}" reg-beg) + (setq controls (append controls (list (cons 'close "{"))))) + (when (web-mode-block-ends-with (cons "{" "}") reg-beg) + (setq controls (append controls (list (cons 'open "{"))))) + ) ;php + + ((string= web-mode-engine "ejs") + (cond + ((web-mode-block-ends-with "}[ ]*else[ ]*{" reg-beg) + (setq controls (append controls (list (cons 'inside "{"))))) + ((web-mode-block-starts-with "}" reg-beg) + (setq controls (append controls (list (cons 'close "{"))))) + ((web-mode-block-ends-with "{" reg-beg) + (setq controls (append controls (list (cons 'open "{"))))) + ) + ) ;ejs + + ((string= web-mode-engine "erb") + (cond + ((web-mode-block-starts-with "else\\|elsif\\|when" reg-beg) + (setq controls (append controls (list (cons 'inside "ctrl"))))) + ((web-mode-block-starts-with "end" reg-beg) + (setq controls (append controls (list (cons 'close "ctrl"))))) + ((web-mode-block-ends-with " do\\( |.*|\\)?" reg-beg) + (setq controls (append controls (list (cons 'open "ctrl"))))) + ((and (web-mode-block-starts-with "\\(for\\|if\\|unless\\|case\\)\\_>" reg-beg) + (not (web-mode-block-ends-with "end" reg-end))) + (setq controls (append controls (list (cons 'open "ctrl"))))) + ) + ) ;erb + + ((string= web-mode-engine "django") + (cond + ((and (string= web-mode-minor-engine "jinja") ;#504 + (web-mode-block-starts-with "else\\_>" reg-beg)) + (let ((continue t) + (pos reg-beg) + (ctrl nil)) + (while continue + (cond + ((null (setq pos (web-mode-block-control-previous-position 'open pos))) + (setq continue nil)) + ((member (setq ctrl (cdr (car (get-text-property pos 'block-controls)))) '("if" "ifequal" "ifnotequal" "for")) + (setq continue nil) + ) + ) ;cond + ) + (setq controls (append controls (list (cons 'inside (or ctrl "if"))))) + ) + ) + ((web-mode-block-starts-with "form_start[ ]*(" reg-beg) + (setq controls (append controls (list (cons 'open "form_start"))))) + ((web-mode-block-starts-with "form_end[ ]*(" reg-beg) + (setq controls (append controls (list (cons 'close "form_start"))))) + ((not (eq (char-after (1+ reg-beg)) ?\%)) + ) + ((web-mode-block-starts-with "\\(else\\|els?if\\)" reg-beg) + (let ((continue t) + (pos reg-beg) + (ctrl nil)) + (while continue + (cond + ((null (setq pos (web-mode-block-control-previous-position 'open pos))) + (setq continue nil)) + ((member (setq ctrl (cdr (car (get-text-property pos 'block-controls)))) '("if" "ifequal" "ifnotequal")) + (setq continue nil) + ) + ) ;cond + ) ;while + (setq controls (append controls (list (cons 'inside (or ctrl "if"))))) + ) ;let + ) ;case else + ((web-mode-block-starts-with "\\(empty\\)" reg-beg) + (setq controls (append controls (list (cons 'inside "for"))))) + ((web-mode-block-starts-with "end\\([[:alpha:]]+\\)" reg-beg) + (setq controls (append controls (list (cons 'close (match-string-no-properties 1)))))) + ((web-mode-block-starts-with (concat web-mode-django-control-blocks-regexp "[ %]") reg-beg) + (let (control) + (setq control (match-string-no-properties 1)) + ;;(message "%S %S %S" control (concat "end" control) web-mode-django-control-blocks) + (when (member (concat "end" control) web-mode-django-control-blocks) + (setq controls (append controls (list (cons 'open control)))) + ) ;when + ) ;let + ) ;case + ) ;cond + ) ;django + + ((string= web-mode-engine "smarty") + (cond + ((and (eq (char-after (1+ reg-beg)) ?\/) + (web-mode-block-starts-with "\\([[:alpha:]]+\\)" reg-beg)) + (setq controls (append controls (list (cons 'close (match-string-no-properties 1)))))) + ((web-mode-block-starts-with "\\(else\\|elseif\\)" reg-beg) + (setq controls (append controls (list (cons 'inside "if"))))) + ((web-mode-block-starts-with "\\(block\\|foreach\\|for\\|if\\|section\\|while\\)") + (setq controls (append controls (list (cons 'open (match-string-no-properties 1)))))) + ) + ) ;smarty + + ((string= web-mode-engine "xoops") + (cond + ((and (eq (char-after (+ reg-beg 2)) ?\/) + (web-mode-block-starts-with "\\([[:alpha:]]+\\)" reg-beg)) + (setq controls (append controls (list (cons 'close (match-string-no-properties 1)))))) + ((web-mode-block-starts-with "\\(else\\|elseif\\)" reg-beg) + (setq controls (append controls (list (cons 'inside "if"))))) + ((web-mode-block-starts-with "\\(block\\|foreach\\|for\\|if\\|section\\|while\\)") + (setq controls (append controls (list (cons 'open (match-string-no-properties 1)))))) + ) + ) ;xoops + + ((string= web-mode-engine "web2py") + (cond + ((web-mode-block-starts-with "def" reg-beg) + (setq controls (append controls (list (cons 'open "def"))))) + ((web-mode-block-starts-with "return" reg-beg) + (setq controls (append controls (list (cons 'close "def"))))) + ((web-mode-block-starts-with "block" reg-beg) + (setq controls (append controls (list (cons 'open "block"))))) + ((web-mode-block-starts-with "end" reg-beg) + (setq controls (append controls (list (cons 'close "block"))))) + ((web-mode-block-starts-with "pass" reg-beg) + (setq controls (append controls (list (cons 'close "ctrl"))))) + ((web-mode-block-starts-with "\\(except\\|finally\\|els\\)" reg-beg) + (setq controls (append controls (list (cons 'inside "ctrl"))))) + ((web-mode-block-starts-with "\\(if\\|for\\|try\\|while\\)") + (setq controls (append controls (list (cons 'open "ctrl"))))) + ) + ) ;web2py + + ((string= web-mode-engine "dust") + (cond + ((eq (char-after (1- reg-end)) ?\/) + ) + ((eq (char-after (1+ reg-beg)) ?\:) + (setq pos (web-mode-block-control-previous-position 'open reg-beg)) + (when pos + (setq controls (append controls + (list + (cons 'inside + (cdr (car (web-mode-block-controls-get pos)))))))) + ) + ((looking-at "{/\\([[:alpha:].]+\\)") + (setq controls (append controls (list (cons 'close (match-string-no-properties 1)))))) + ((looking-at "{[#?@><+^]\\([[:alpha:].]+\\)") + (setq controls (append controls (list (cons 'open (match-string-no-properties 1)))))) + ) + ) ;dust + + ((member web-mode-engine '("mojolicious")) + (cond + ((web-mode-block-ends-with "begin" reg-beg) + (setq controls (append controls (list (cons 'open "begin"))))) + ((web-mode-block-starts-with "end" reg-beg) + (setq controls (append controls (list (cons 'close "begin"))))) + ((web-mode-block-starts-with "}[ ]*else[ ]*{" reg-beg) + (setq controls (append controls (list (cons 'inside "{"))))) + ((web-mode-block-starts-with "}" reg-beg) + (setq controls (append controls (list (cons 'close "{"))))) + ((web-mode-block-ends-with "{" reg-beg) + (setq controls (append controls (list (cons 'open "{"))))) + ) + ) ;mojolicious + + ((member web-mode-engine '("aspx" "underscore")) + (cond + ((and (web-mode-block-starts-with "}" reg-beg) + (web-mode-block-ends-with "{" reg-beg)) + (setq controls (append controls (list (cons 'inside "{"))))) + ((web-mode-block-starts-with "}" reg-beg) + (setq controls (append controls (list (cons 'close "{"))))) + ((web-mode-block-ends-with "{" reg-beg) + (setq controls (append controls (list (cons 'open "{"))))) + ) + ) ;aspx underscore + + ((member web-mode-engine '("jsp" "asp" "clip")) + (cond + ((eq (char-after (1- reg-end)) ?\/) + ) + ((looking-at "" reg-beg) + (setq controls (append controls (list (cons 'close "ctrl"))))) + ((web-mode-block-starts-with "else\\_>" reg-beg) + (setq controls (append controls (list (cons 'inside "ctrl"))))) + ((web-mode-block-starts-with "\\(range\\|with\\|if\\|define\\|block\\)\\_>" reg-beg) + (setq controls (append controls (list (cons 'open "ctrl"))))) + ) + ) ;go + + ((string= web-mode-engine "template-toolkit") + (cond + ((web-mode-block-starts-with "end" reg-beg) + (setq controls (append controls (list (cons 'close "ctrl"))))) + ((web-mode-block-starts-with "els\\|catch\\|final" reg-beg) + (setq controls (append controls (list (cons 'inside "ctrl"))))) + ((web-mode-block-starts-with "filter\\|foreach\\|if\\|last\\|next\\|perl\\|rawperl\\|try\\|unless\\|while" reg-beg) + (setq controls (append controls (list (cons 'open "ctrl"))))) + ) + ) ;template-toolkit + + ((string= web-mode-engine "cl-emb") + (cond + ((web-mode-block-starts-with "@else" reg-beg) + (setq controls (append controls (list (cons 'inside "if"))))) + ((web-mode-block-starts-with "@\\(?:end\\)?\\(if\\|unless\\|repeat\\|loop\\|with\\|genloop\\)" reg-beg) + (setq control (match-string-no-properties 1) + type (if (eq (aref (match-string-no-properties 0) 1) ?e) 'close 'open)) + (setq controls (append controls (list (cons type control))))) + ) + ) ;cl-emb + + ((string= web-mode-engine "elixir") + (cond + ((web-mode-block-starts-with "end" reg-beg) + (setq controls (append controls (list (cons 'close "ctrl"))))) + ((web-mode-block-starts-with "else" reg-beg) + (setq controls (append controls (list (cons 'inside "ctrl"))))) + ((web-mode-block-ends-with " do" reg-beg) + (setq controls (append controls (list (cons 'open "ctrl"))))) + ((web-mode-block-ends-with " ->" reg-beg) + (setq controls (append controls (list (cons 'open "ctrl"))))) + ) + ) ;elixir + + ((string= web-mode-engine "velocity") + (cond + ((web-mode-block-starts-with "{?end" reg-beg) + (setq controls (append controls (list (cons 'close "ctrl"))))) + ((web-mode-block-starts-with "{?els" reg-beg) + (setq controls (append controls (list (cons 'inside "ctrl"))))) + ((web-mode-block-starts-with "{?\\(def\\|if\\|for\\|foreach\\|macro\\)" reg-beg) + ;;((web-mode-block-starts-with "{?\\(define\\|\\|if\\|for\\|foreach\\|macro\\)" reg-beg) + (setq controls (append controls (list (cons 'open "ctrl"))))) + ) + ) ;velocity + + ((string= web-mode-engine "freemarker") + (cond + ((looking-at "[<[]#\\(import\\|include\\|assign\\|return\\|local\\)") + ) + ((eq (char-after (1- reg-end)) ?\/) + ) + ((looking-at "[<[]#\\(break\\|case\\|default\\)") + (setq controls (append controls (list (cons 'inside "switch")))) + ) + ((looking-at "[<[]#els") + (setq controls (append controls (list (cons 'inside "if")))) + ) + ((looking-at "<+^]\\([[:alpha:].]+\\)") + (setq controls (append controls (list (cons 'open (match-string-no-properties 1)))))) + ) + ) ;svelte + + ) ;cond engine + + (put-text-property reg-beg (1+ reg-beg) 'block-controls controls) + ;; (message "(%S) controls=%S" reg-beg controls) + + ))) + +(defun web-mode-block-is-opened-sexp (reg-beg reg-end) + (let ((n 0)) + (save-excursion + (goto-char reg-beg) + (while (web-mode-block-rsf "[()]" reg-end) + (if (eq (char-before) ?\() (setq n (1+ n)) (setq n (1- n))))) + (> n 0))) + +(defun web-mode-scan-elements (reg-beg reg-end) + (save-excursion + (let (part-beg part-end flags limit close-expr props tname tbeg tend element-content-type (regexp web-mode-dom-regexp) part-close-tag char) + ;;(message "scan-elements: reg-beg(%S) reg-end(%S)" reg-beg reg-end) + (goto-char reg-beg) + + (while (web-mode-dom-rsf regexp reg-end) + + ;;(message "%S: %S (%S %S)" (point) (match-string-no-properties 0) reg-beg reg-end) + + (setq flags 0 + tname (downcase (match-string-no-properties 1)) + char (aref tname 0) + tbeg (match-beginning 0) + tend nil + element-content-type nil + limit reg-end + part-beg nil + part-end nil + props nil + close-expr nil + part-close-tag nil) + + ;;(message "tname[%S] tbeg(%S) point(%S)" tname tbeg (point)) + + (cond + + ((member tname '("/>" ">")) ;;jsx fragment #952 + (setq tname "_fragment_" + tend (point)) + (if (eq char ?\/) + (setq props (list 'tag-name tname 'tag-type 'end) + flags (logior flags 20)) ;; 16 + 4 + (setq props (list 'tag-name tname 'tag-type 'start) + flags (logior flags 16)) + ) ;if + ) + + ((not (member char '(?\! ?\?))) + (cond + ((string-match-p "-" tname) + (setq flags (logior flags 2))) + ((string-match-p ":" tname) + (setq flags (logior flags 32))) + ) + (cond + ((eq char ?\/) + (setq props (list 'tag-name (substring tname 1) 'tag-type 'end) + flags (logior flags 4) + limit (if (> reg-end (line-end-position)) (line-end-position) reg-end)) + ) + ((web-mode-element-is-void tname) + ;;(message "void: tag=%S" tname) + (setq props (list 'tag-name tname 'tag-type 'void))) + (t + (setq props (list 'tag-name tname 'tag-type 'start))) + ) ;cond + ) ; not " + props '(tag-type comment))) + ((string= tname "?xml") + (setq ;;regexp web-mode-tag-regexp2 + close-expr "?>" + props '(tag-type declaration))) + ((string= tname "![cdata[") + (setq close-expr "]]>" + props '(tag-type cdata))) + ((string= tname "!doctype") + (setq ;;regexp web-mode-tag-regexp2 + props '(tag-type doctype))) + ) ;cond - special tags + + (cond + + (tend + ) + + ((and (null close-expr) (eq (char-after) ?\>)) + (setq flags (logior flags 16) + tend (1+ (point))) + ;;(message "end=%S" tend) + ) + + ((and (null close-expr) + (looking-at "[ ]\\(class\\|id\\|href\\|style\\)=\"[[:alnum:]_=:/?;#. -]*\">")) + ;;(message "scan-elements: %S %S" (point) (match-string-no-properties 0)) + (let ((beg (1+ (point))) + (end (+ (point) (length (match-string-no-properties 0))))) + ;;(message "beg=%S end=%S" beg end) + (setq flags (logior flags 17) + tend end) + (put-text-property beg (1+ beg) 'tag-attr-beg 0) + (put-text-property beg (1- end) 'tag-attr t) + (put-text-property (- end 2) (1- end) 'tag-attr-end (length (match-string-no-properties 1))) + ) ;let + ;;(message "tend=%S" tend) + ) + + ((null close-expr) + (setq flags (logior flags (web-mode-attr-skip reg-end))) + (when (> (logand flags 8) 0) + (setq props (plist-put props 'tag-type 'void))) + (setq tend (point))) + ((web-mode-dom-sf close-expr limit t) + (setq tend (point))) + (t + (setq tend (line-end-position))) + + ) ;cond + + (cond + ((string= tname "style") + (let (style) + (setq style (buffer-substring-no-properties tbeg tend) + part-close-tag "") + (cond + ((string-match-p " lang[ ]*=[ ]*[\"']stylus" style) + (setq element-content-type "stylus")) + (t + (setq element-content-type "css")) + ) ;cond + ) ;let + ) ;style + ((string= tname "script") + (let (script) + (setq script (buffer-substring-no-properties tbeg tend) + part-close-tag "") + (cond + ((string-match-p " type[ ]*=[ ]*[\"']text/\\(jsx\\|babel\\)" script) + (setq element-content-type "jsx")) + ((string-match-p " type[ ]*=[ ]*[\"']text/\\(markdown\\|template\\)" script) + (setq element-content-type "markdown")) + ((string-match-p " type[ ]*=[ ]*[\"']text/ruby" script) + (setq element-content-type "ruby")) + ((string-match-p " type[ ]*=[ ]*[\"']text/\\(x-handlebars\\|x-jquery-tmpl\\|x-jsrender\\|html\\|ng-template\\|template\\|x-template\\|mustache\\|x-dust-template\\)" script) + (setq element-content-type "html" + part-close-tag nil)) + ((string-match-p " type[ ]*=[ ]*[\"']application/\\(ld\\+json\\|json\\)" script) + (setq element-content-type "json")) + (t + (setq element-content-type "javascript")) + ) ;cond + ) ;let + ) ;script + ((and (string= tname "template") (string-match-p " lang" (buffer-substring-no-properties tbeg tend))) + (let (template) + (setq template (buffer-substring-no-properties tbeg tend) + part-close-tag "") + (cond + ((string-match-p " lang[ ]*=[ ]*[\"']pug" template) + (setq element-content-type "pug")) + (t + (setq element-content-type "html")) + ) ;cond + ) ;let + ) ;style + ((and (string= web-mode-engine "archibus") + (string= tname "sql")) + (setq element-content-type "sql" + part-close-tag "")) + ) + + (add-text-properties tbeg tend props) + (put-text-property tbeg (1+ tbeg) 'tag-beg flags) + (put-text-property (1- tend) tend 'tag-end t) + + (when (and part-close-tag + (web-mode-dom-sf part-close-tag reg-end t) + (setq part-beg tend) + (setq part-end (match-beginning 0)) + (> part-end part-beg)) + (put-text-property part-beg part-end 'part-side + (intern element-content-type web-mode-obarray)) + (setq tend part-end) + ) ;when + + (goto-char tend) + + ) ;while + + ))) + +;; FLAGS: tag +;; (1)attrs (2)custom (4)slash-beg (8)slash-end (16)bracket-end +;; (32)namespaced + +;; FLAGS: attr +;; (1)custom-attr (2)engine-attr (4)spread-attr[jsx] (8)code-value + +;; STATES: attr +;; (0)nil (1)space (2)name (3)space-before (4)equal (5)space-after +;; (6)value-uq (7)value-sq (8)value-dq (9)value-bq : jsx attr={} + +(defun web-mode-attr-skip (limit) + + (let ((tag-flags 0) (attr-flags 0) (continue t) (attrs 0) (counter 0) (brace-depth 0) + (pos-ori (point)) (state 0) (equal-offset 0) (go-back nil) + (is-jsx (or (string= web-mode-content-type "jsx") (eq (get-text-property (point) 'part-type) 'jsx))) + attr name-beg name-end val-beg char pos escaped spaced quoted) + + (while continue + + (setq pos (point) + char (char-after) + spaced (eq char ?\s)) + + (when quoted (setq quoted (1+ quoted))) + + (cond + + ((>= pos limit) + (setq continue nil) + (setq go-back t) + (setq attrs (+ attrs (web-mode-attr-scan state char name-beg name-end val-beg attr-flags equal-offset))) + ) + + ((or (and (= state 8) (not (member char '(?\" ?\\)))) + (and (= state 7) (not (member char '(?\' ?\\)))) + (and (= state 9) (not (member char '(?} ?\\)))) + ) + (when (and (= state 9) (eq char ?\{)) + (setq brace-depth (1+ brace-depth))) + ) + + ((and (= state 9) (eq char ?\}) (> brace-depth 1)) + (setq brace-depth (1- brace-depth))) + + ((get-text-property pos 'block-side) + (when (= state 2) + (setq name-end pos)) + ) + + ((and (= state 2) is-jsx (eq char ?\}) (eq attr-flags 4)) + (setq name-end pos) + (setq attrs (+ attrs (web-mode-attr-scan state char name-beg name-end val-beg attr-flags equal-offset))) + (setq state 0 + attr-flags 0 + equal-offset 0 + name-beg nil + name-end nil + val-beg nil) + ) + + ((or (and (= state 8) (eq ?\" char) (not escaped)) + (and (= state 7) (eq ?\' char) (not escaped)) + (and (= state 9) (eq ?\} char) (= brace-depth 1)) + ) + + ;;(message "%S %S" (point) attr-flags) + (setq attrs (+ attrs (web-mode-attr-scan state char name-beg name-end val-beg attr-flags equal-offset))) + (setq state 0 + attr-flags 0 + equal-offset 0 + name-beg nil + name-end nil + val-beg nil) + ) + + ((and (member state '(4 5)) (member char '(?\' ?\" ?\{))) + (setq val-beg pos) + (setq quoted 1) + (setq state (cond ((eq ?\' char) 7) + ((eq ?\" char) 8) + (t 9))) + (when (= state 9) + (setq brace-depth 1)) + ) + + ((and (eq ?\= char) (member state '(2 3))) + (setq equal-offset (- pos name-beg)) + (setq state 4) + (setq attr (buffer-substring-no-properties name-beg (1+ name-end))) + (when (and web-mode-indentless-attributes (member (downcase attr) web-mode-indentless-attributes)) + ;;(message "onclick") + (setq attr-flags (logior attr-flags 8))) + ) + + ((and spaced (= state 0)) + (setq state 1) + ) + + ((and (eq char ?\<) (not (member state '(7 8 9)))) + (setq continue nil) + (setq go-back t) + (setq attrs (+ attrs (web-mode-attr-scan state char name-beg name-end val-beg attr-flags equal-offset))) + ) + + ((and (eq char ?\>) (not (member state '(7 8 9)))) + (setq tag-flags (logior tag-flags 16)) + (when (eq (char-before) ?\/) + (setq tag-flags (logior tag-flags 8)) + ) + (setq continue nil) + (when name-beg + (setq attrs (+ attrs (web-mode-attr-scan state char name-beg name-end val-beg attr-flags equal-offset)))) + ) + + ((and spaced (member state '(1 3 5))) + ) + + ((and spaced (= state 2)) + (setq state 3) + ) + + ((and (eq char ?\/) (member state '(4 5))) + (setq attrs (+ attrs (web-mode-attr-scan state char name-beg name-end val-beg attr-flags equal-offset))) + (setq state 1 + attr-flags 0 + equal-offset 0 + name-beg nil + name-end nil + val-beg nil) + ) + + ((and (eq char ?\/) (member state '(0 1))) + ) + + ((and spaced (= state 4)) + (setq state 5) + ) + + ((and (= state 3) + (or (and (>= char 97) (<= char 122)) ;a - z + (and (>= char 65) (<= char 90)) ;A - Z + (eq char ?\-))) + (setq attrs (+ attrs (web-mode-attr-scan state char name-beg name-end val-beg attr-flags equal-offset))) + (setq state 2 + attr-flags 0 + equal-offset 0 + name-beg pos + name-end pos + val-beg nil) + ) + + ((and (eq char ?\n) (not (member state '(7 8 9)))) + (setq attrs (+ attrs (web-mode-attr-scan state char name-beg name-end val-beg attr-flags equal-offset))) + (setq state 1 + attr-flags 0 + equal-offset 0 + name-beg nil + name-end nil + val-beg nil) + ) + + ((and (= state 6) (member char '(?\s ?\n ?\/))) + (setq attrs (+ attrs (web-mode-attr-scan state char name-beg name-end val-beg attr-flags equal-offset))) + (setq state 1 + attr-flags 0 + equal-offset 0 + name-beg nil + name-end nil + val-beg nil) + ) + + ((and quoted (= quoted 2) (member char '(?\s ?\n ?\>))) + (when (eq char ?\>) + (setq tag-flags (logior tag-flags 16)) + (setq continue nil)) + (setq state 6) + (setq attrs (+ attrs (web-mode-attr-scan state char name-beg name-end val-beg attr-flags equal-offset))) + (setq state 1 + attr-flags 0 + equal-offset 0 + name-beg nil + name-end nil + val-beg nil) + ) + + ((and (not spaced) (= state 1)) + (when (and is-jsx (eq char ?\{)) + (setq attr-flags 4)) + (setq state 2) + (setq name-beg pos + name-end pos) + ) + + ((member state '(4 5)) + (setq val-beg pos) + (setq state 6) + ) + + ((= state 1) + (setq state 2) + ) + + ((= state 2) + (setq name-end pos) + (when (and (= attr-flags 0) (member char '(?\- ?\:))) + (let (attr) + (setq attr (buffer-substring-no-properties name-beg (1+ name-end))) + (cond + ((member attr '("http-equiv")) + (setq attr-flags (1- attr-flags)) + ) + ((and web-mode-engine-attr-regexp + (string-match-p web-mode-engine-attr-regexp attr)) + ;;(message "%S: %S" pos web-mode-engine-attr-regexp) + (setq attr-flags (logior attr-flags 2)) + ;;(setq attr-flags (1- attr-flags)) + ) + ((and (eq char ?\-) (not (string= attr "http-"))) + (setq attr-flags (logior attr-flags 1))) + ) ;cond + ) ;let + ) ;when attr-flags = 1 + ) ;state=2 + + ) ;cond + + ;;(message "point(%S) end(%S) state(%S) c(%S) name-beg(%S) name-end(%S) val-beg(%S) attr-flags(%S) equal-offset(%S)" pos end state char name-beg name-end val-beg attr-flags equal-offset) + + (when (and quoted (>= quoted 2)) + (setq quoted nil)) + + (setq escaped (eq ?\\ char)) + (when (null go-back) + (forward-char)) + + ) ;while + + (when (> attrs 0) (setq tag-flags (logior tag-flags 1))) + + tag-flags)) + +(defun web-mode-attr-scan (state char name-beg name-end val-beg flags equal-offset) +;; (message "point(%S) state(%S) c(%c) name-beg(%S) name-end(%S) val-beg(%S) flags(%S) equal-offset(%S)" +;; (point) state char name-beg name-end val-beg flags equal-offset) + (if (null flags) (setq flags 0)) + (cond + ((null name-beg) +;; (message "name-beg is null (%S)" (point)) + 0) + ((or (and (= state 8) (not (eq ?\" char))) + (and (= state 7) (not (eq ?\' char)))) + (put-text-property name-beg (1+ name-beg) 'tag-attr-beg flags) + (put-text-property name-beg val-beg 'tag-attr t) + (put-text-property (1- val-beg) val-beg 'tag-attr-end equal-offset) + 1) + ((and (member state '(4 5)) (null val-beg)) + (put-text-property name-beg (1+ name-beg) 'tag-attr-beg flags) + (put-text-property name-beg (+ name-beg equal-offset 1) 'tag-attr t) + (put-text-property (+ name-beg equal-offset) (+ name-beg equal-offset 1) 'tag-attr-end equal-offset) + 1) + (t + (let (val-end) + (if (null val-beg) + (setq val-end name-end) + (setq val-end (point)) + (when (or (null char) (member char '(?\s ?\n ?\> ?\/))) + (setq val-end (1- val-end)) + ) + ) ;if + (put-text-property name-beg (1+ name-beg) 'tag-attr-beg flags) + (put-text-property name-beg (1+ val-end) 'tag-attr t) + (put-text-property val-end (1+ val-end) 'tag-attr-end equal-offset) + ) ;let + 1) ;t + ) ;cond + ) + +(defun web-mode-process-parts (reg-beg reg-end func) + (let ((i 0) (continue t) (part-beg reg-beg) (part-end nil)) + (while continue + (setq part-end nil) + (unless (get-text-property part-beg 'part-side) + (setq part-beg (web-mode-part-next-position part-beg))) + (when (and part-beg (< part-beg reg-end)) + (setq part-end (web-mode-part-end-position part-beg))) + (cond + ((> (setq i (1+ i)) 100) + (message "process-parts ** warning (%S) **" (point)) + (setq continue nil)) + ((or (null part-end) (> part-end reg-end)) + (setq continue nil)) + (t + (setq part-end (1+ part-end)) + (funcall func part-beg part-end) + (setq part-beg part-end)) + ) ;cond + ) ;while + )) + +(defun web-mode-part-scan (reg-beg reg-end &optional content-type depth) + (save-excursion + (let (token-re ch-before ch-at ch-next token-type beg continue) + ;;(message "%S %S" reg-beg reg-end) + (cond + (content-type + ) + ((member web-mode-content-type web-mode-part-content-types) + (setq content-type web-mode-content-type)) + (t + (setq content-type (symbol-name (get-text-property reg-beg 'part-side)))) + ) ;cond + + (goto-char reg-beg) + + (cond + ((member content-type '("javascript" "json")) + (setq token-re "/\\|\"\\|'\\|`")) + ((member content-type '("jsx")) + (setq token-re "/\\|\"\\|'\\|`\\|]")) + ((string= web-mode-content-type "css") + (setq token-re "\"\\|'\\|/\\*\\|//")) + ((string= content-type "css") + (setq token-re "\"\\|'\\|/\\*")) + (t + (setq token-re "/\\*\\|\"\\|'")) + ) + + (while (and token-re (< (point) reg-end) (web-mode-dom-rsf token-re reg-end t)) + + (setq beg (match-beginning 0) + token-type nil + continue t + ch-at (char-after beg) + ch-next (or (char-after (1+ beg)) ?\d) + ch-before (or (char-before beg) ?\d)) + + ;;(message "[%S>%S|%S] %S %c %c %c" reg-beg reg-end depth beg ch-before ch-at ch-next) + + (cond + + ((eq ?\' ch-at) + (while (and continue (search-forward "'" reg-end t)) + (cond + ((get-text-property (1- (point)) 'block-side) + (setq continue t)) + (t + (setq continue (web-mode-string-continue-p reg-beg))) + ) + ) ;while + (setq token-type 'string)) + + ((eq ?\` ch-at) + (while (and continue (search-forward "`" reg-end t)) + (cond + ((get-text-property (1- (point)) 'block-side) + (setq continue t)) + (t + (setq continue (web-mode-string-continue-p reg-beg))) + ) + ) ;while + (setq token-type 'string)) + + ((eq ?\" ch-at) + (while (and continue (search-forward "\"" reg-end t)) + (cond + ((get-text-property (1- (point)) 'block-side) + (setq continue t)) + (t + (setq continue (web-mode-string-continue-p reg-beg))) + ) ;cond + ) ;while + (cond + ((string= content-type "json") + (if (looking-at-p "[ ]*:") + (cond + ((eq ?\@ (char-after (1+ beg))) + (setq token-type 'context)) + (t + (setq token-type 'key)) + ) + (setq token-type 'string)) + ) ;json + (t + (setq token-type 'string)) + ) ;cond + ) + + ((and (eq ?\< ch-at) + (not (or (and (>= ch-before 97) (<= ch-before 122)) + (and (>= ch-before 65) (<= ch-before 90))))) + ;;(message "before [%S>%S|%S] pt=%S" reg-beg reg-end depth (point)) + (search-backward "<") + (if (web-mode-jsx-skip reg-end) + (web-mode-jsx-scan-element beg (point) depth) + (forward-char)) + ;;(message "after [%S>%S|%S] pt=%S" reg-beg reg-end depth (point)) + ) + + ((and (eq ?\/ ch-at) (member content-type '("javascript" "jsx"))) + (cond + ((eq ?\\ ch-before) + ) + ((eq ?\* ch-next) + ;;(message "--> %S %S" (point) reg-end) + (when (search-forward "*/" reg-end t) + (setq token-type 'comment)) + ) + ((eq ?\/ ch-next) + (setq token-type 'comment) + (goto-char (if (< reg-end (line-end-position)) reg-end (line-end-position))) + ) + ((and (looking-at-p ".*/") + (looking-back "\\(^\\|case\\|[[(,=:!&|?{};]\\)[ ]*/" (point-min))) + ;;(re-search-forward "/[gimyu]*" reg-end t)) + (let ((eol (line-end-position))) + (while (and continue (search-forward "/" eol t)) + (cond + ((get-text-property (1- (point)) 'block-side) + (setq continue t)) + ((looking-back "\\\\+/" reg-beg t) + (setq continue (= (mod (- (point) (match-beginning 0)) 2) 0))) + (t + (re-search-forward "[gimyu]*" eol t) + (setq token-type 'string) + (setq continue nil)) + ) + ) ;while + ) ;let + ) + ) ;cond + ) + + ((eq ?\/ ch-next) + ;;(message "%S" (point)) + (cond + ((and (string= content-type "css") + (eq ?/ ch-at) + (eq ?: ch-before)) + ) + (t + (unless (eq ?\\ ch-before) + (setq token-type 'comment) + (goto-char (if (< reg-end (line-end-position)) reg-end (line-end-position))) + ) + ) + ) + + ) + + ((eq ?\* ch-next) + (cond + ((search-forward "*/" reg-end t) + (setq token-type 'comment)) + ((not (eobp)) + (forward-char)) + ) ;cond + ) + + ) ;cond + + (when (and beg (>= reg-end (point)) token-type) + (put-text-property beg (point) 'part-token token-type) + (cond + ((eq token-type 'comment) + (put-text-property beg (1+ beg) 'syntax-table (string-to-syntax "<")) + (when (< (point) (point-max)) + (if (< (point) (line-end-position)) + (put-text-property (1- (point)) (point) 'syntax-table (string-to-syntax ">")) ;#445 + (put-text-property (point) (1+ (point)) 'syntax-table (string-to-syntax ">")) ;#377 + ) + ) ;when + ) ;comment + ((eq token-type 'string) + (put-text-property beg (1+ beg) 'syntax-table (string-to-syntax "|")) + (when (< (point) (point-max)) + (if (< (point) (line-end-position)) + (put-text-property (1- (point)) (point) 'syntax-table (string-to-syntax "|")) + (put-text-property (point) (1+ (point)) 'syntax-table (string-to-syntax "|")) + ) + ) ;when + ) ;string + ) ;cond + ) ;when + + (when (> (point) reg-end) + (message "reg-beg(%S) reg-end(%S) token-type(%S) point(%S)" reg-beg reg-end token-type (point))) + + ;;(message "#[%S>%S|%S] %S %c %c %c | (%S)" reg-beg reg-end depth beg ch-before ch-at ch-next (point)) + + ) ;while + + ))) + +(defun web-mode-string-continue-p (reg-beg) + "Is `point' preceeded by an odd number of backslashes?" + (let ((p (1- (point)))) + (while (and (< reg-beg p) (eq ?\\ (char-before p))) + (setq p (1- p))) + (= (mod (- (point) p) 2) 0))) + +(defun web-mode-jsx-skip (reg-end) + (let ((continue t) (pos nil) (i 0) tag) + (looking-at "<\\([[:alpha:]][[:alnum:]:-]*\\)") + (setq tag (match-string-no-properties 1)) + ;;(message "point=%S tag=%S" (point) tag) + (save-excursion + (while continue + (cond + ((> (setq i (1+ i)) 1000) + (message "jsx-skip ** warning **") + (setq continue nil)) + ((looking-at "<[[:alpha:]][[:alnum:]:-]*[ ]*/>") + (goto-char (match-end 0)) + (setq pos (point)) + (setq continue nil)) + ((not (web-mode-dom-rsf ">\\([ \t\n]*[\];,)':}|&]\\)\\|{" reg-end)) + (setq continue nil) + ) + ((eq (char-before) ?\{) + (backward-char) + (web-mode-closing-paren reg-end) + (forward-char) + ) + (t + (setq continue nil) + (setq pos (match-beginning 1)) + ) ;t + ) ;cond + ) ;while + ) ;save-excursion + (when pos (goto-char pos)) + ;;(message "jsx-skip: %S" pos) + pos)) + +;; (defun web-mode-jsx-skip2 (reg-end) +;; (let ((continue t) (pos nil) (i 0) (tag nil) (regexp nil) (counter 1)) +;; (looking-at "<\\([[:alpha:]][[:alnum:]:-]*\\)") +;; (setq tag (match-string-no-properties 1)) +;; (setq regexp (concat " (setq i (1+ i)) 100) +;; (message "jsx-skip ** warning **") +;; (setq continue nil)) +;; ((looking-at "<[[:alpha:]][[:alnum:]:-]*[ ]*/>") +;; (goto-char (match-end 0)) +;; (setq pos (point)) +;; (setq continue nil)) +;; ((not (web-mode-dom-rsf ">\\([ \t\n]*[\];,)':}]\\)\\|{" reg-end)) +;; (setq continue nil) +;; ) +;; ((eq (char-before) ?\{) +;; (backward-char) +;; (web-mode-closing-paren reg-end) +;; (forward-char) +;; ) +;; (t +;; (setq continue nil) +;; (setq pos (match-beginning 1)) +;; ) ;t +;; ) ;cond +;; ) ;while +;; ) ;save-excursion +;; (when pos (goto-char pos)) +;; ;;(message "jsx-skip: %S" pos) +;; pos)) + +;; http://facebook.github.io/jsx/ +;; https://github.com/facebook/jsx/blob/master/AST.md +(defun web-mode-jsx-scan-element (reg-beg reg-end depth) + (unless depth (setq depth 1)) + (save-excursion + (let (token-beg token-end regexp) + (goto-char reg-beg) + (put-text-property reg-beg (1+ reg-beg) 'jsx-beg depth) + (put-text-property (1- reg-end) reg-end 'jsx-end depth) + (put-text-property reg-beg reg-end 'jsx-depth depth) + (goto-char reg-beg) + (web-mode-scan-elements reg-beg reg-end) + (web-mode-jsx-scan-expression reg-beg reg-end (1+ depth)) + ))) + +(defun web-mode-jsx-scan-expression (reg-beg reg-end depth) + (let ((continue t) beg end) + (save-excursion + (goto-char reg-beg) + ;;(message "reg-beg=%S reg-end=%S" reg-beg reg-end) + (while (and continue (search-forward "{" reg-end t)) + (backward-char) + (setq beg (point) + end (web-mode-closing-paren reg-end)) + (cond + ((eq (get-text-property beg 'part-token) 'comment) + (forward-char)) + ((not end) + (setq continue nil)) + (t + (setq end (1+ end)) + (put-text-property beg end 'jsx-depth depth) + (put-text-property beg (1+ beg) 'jsx-beg depth) + (put-text-property (1- end) end 'jsx-end depth) + (web-mode-part-scan beg end "jsx" (1+ depth)) + ) ;t + ) ;cond + ) ;while + ) ;save-excursion + )) + +(defun web-mode-jsx-is-html (&optional pos) + (interactive) + (unless pos (setq pos (point))) + (let (ret (depth (get-text-property pos 'jsx-depth))) + (cond + ((or (null depth) (<= pos 2)) + (setq pos nil)) + ((and (= depth 1) (get-text-property pos 'jsx-beg)) + (setq pos nil)) + ((get-text-property pos 'tag-end) + (setq pos nil)) + ((get-text-property pos 'tag-attr-beg) + (setq pos nil)) + ((get-text-property pos 'jsx-beg) + (setq pos (null (get-text-property pos 'tag-beg)))) + ((setq pos (web-mode-jsx-depth-beginning-position pos)) + (setq pos (not (null (get-text-property pos 'tag-beg))))) + (t + (setq pos nil)) + ) ;cond + ;;(message "is-html: %S (depth=%S)" pos depth) + pos)) + +(defun web-mode-jsx-is-expr (&optional pos) + (cond + ((and (get-text-property pos 'jsx-beg) + (not (get-text-property pos 'tag-beg))) + nil) + (t + (setq pos (web-mode-jsx-depth-beginning-position pos)) + (null (get-text-property pos 'tag-beg))) + ) ;cond + ) + +(defun web-mode-jsx-depth-beginning-position (&optional pos target-depth) + (interactive) + (unless pos (setq pos (point))) + (unless target-depth (setq target-depth (get-text-property pos 'jsx-depth))) + (cond + ((or (null target-depth) (bobp)) + (setq pos nil)) + ((and (get-text-property pos 'jsx-beg) (= target-depth (get-text-property pos 'jsx-depth))) + ) + (t + (let ((continue t) depth) + (while continue + (setq pos (previous-single-property-change pos 'jsx-depth)) + (cond + ((or (null pos) + (null (setq depth (get-text-property pos 'jsx-depth)))) + (setq continue nil + pos nil)) + ((and (get-text-property pos 'jsx-beg) (= target-depth depth)) + (setq continue nil)) + ) ;cond + ) ;while + ) ;let + ) ;t + ) ;cond + ;;(message "beg: %S" pos) + pos) + +(defun web-mode-jsx-element-next (reg-end) + (let (continue beg end) + (setq beg (point)) + (unless (get-text-property beg 'jsx-depth) + (setq beg (next-single-property-change beg 'jsx-beg))) + (setq continue (and beg (< beg reg-end)) + end beg) + (while continue + (setq end (next-single-property-change end 'jsx-end)) + (cond + ((or (null end) (> end reg-end)) + (setq continue nil + end nil)) + ((eq (get-text-property end 'jsx-depth) 1) + (setq continue nil)) + (t + (setq end (1+ end))) + ) ;cond + ) ;while + ;;(message "beg=%S end=%S" beg end) + (if (and beg end (< beg end)) (cons beg end) nil))) + +(defun web-mode-jsx-expression-next (reg-end) + (let (beg end depth continue pos) + (setq beg (point)) + ;;(message "pt=%S" beg) + (unless (and (get-text-property beg 'jsx-beg) (null (get-text-property beg 'tag-beg))) + ;;(setq beg (next-single-property-change beg 'jsx-beg)) + (setq continue t + pos (1+ beg)) + (while continue + (setq pos (next-single-property-change pos 'jsx-beg)) + (cond + ((null pos) + (setq continue nil + beg nil)) + ((> pos reg-end) + (setq continue nil + beg nil)) + ((null (get-text-property pos 'jsx-beg)) + ) + ((null (get-text-property pos 'tag-beg)) + (setq continue nil + beg pos)) + ;;(t + ;; (setq pos (1+ pos))) + ) ;cond + ) ;while + ) ;unless + ;;(message "beg=%S" beg) + (when (and beg (< beg reg-end)) + (setq depth (get-text-property beg 'jsx-beg) + continue (not (null depth)) + pos beg) + ;;(message "beg=%S" beg) + (while continue + (setq pos (next-single-property-change pos 'jsx-end)) + ;;(message "pos=%S" pos) + (cond + ((null pos) + (setq continue nil)) + ((> pos reg-end) + (setq continue nil)) + ((eq depth (get-text-property pos 'jsx-end)) + (setq continue nil + end pos)) + (t + ;;(setq pos (1+ pos)) + ) + ) ;cond + ) ;while + ) ;when + ;;(message "%S > %S" beg end) + (if (and beg end) (cons beg end) nil))) + +(defun web-mode-jsx-depth-next (reg-end) + (let (beg end depth continue pos) + (setq beg (point)) + ;;(message "pt=%S" beg) + (unless (get-text-property beg 'jsx-beg) + ;;(setq beg (next-single-property-change beg 'jsx-beg)) + ;;(setq pos (1+ beg)) + (setq pos (next-single-property-change (1+ beg) 'jsx-beg)) + (cond + ((null pos) + (setq beg nil)) + ((>= pos reg-end) + (setq beg nil)) + (t + (setq beg pos)) + ) ;cond + ) ;unless + ;;(message "beg=%S" beg) + (when beg + (setq depth (get-text-property beg 'jsx-beg) + continue (not (null depth)) + pos beg) + ;;(message "beg=%S" beg) + (while continue + (setq pos (next-single-property-change pos 'jsx-end)) + ;;(message "pos=%S" pos) + (cond + ((null pos) + (setq continue nil)) + ((> pos reg-end) + (setq continue nil)) + ((eq depth (get-text-property pos 'jsx-end)) + (setq continue nil + end pos)) + (t + ;;(setq pos (1+ pos)) + ) + ) ;cond + ) ;while + ) ;when + ;;(message "%S > %S" beg end) + (if (and beg end) (cons beg end) nil))) + +(defun web-mode-jsx-beginning () + (interactive) + (let (depth (continue t) (reg-beg (point-min)) (pos (point))) + (setq depth (get-text-property pos 'jsx-depth)) + (cond + ((not depth) + ) + ((get-text-property (1- pos) 'jsx-beg) + (goto-char (1- pos))) + (t + (while continue + (setq pos (previous-single-property-change pos 'jsx-beg)) + ;;(message "pos=%S" pos) + (cond + ((null pos) + (setq continue nil)) + ((<= pos reg-beg) + (setq continue nil)) + ((eq depth (get-text-property pos 'jsx-beg)) + (setq continue nil)) + ) ;cond + ) ;while + (web-mode-go pos) + ) ;t + ) ;cond + )) + +(defun web-mode-jsx-end () + (interactive) + (let (depth (continue t) (reg-end (point-max)) (pos (point))) + (setq depth (get-text-property pos 'jsx-depth)) + (cond + ((not depth) + ) + ((get-text-property pos 'jsx-end) + (goto-char (+ pos 1))) + (t + (while continue + (setq pos (next-single-property-change pos 'jsx-end)) + ;;(message "pos=%S" pos) + (cond + ((null pos) + (setq continue nil)) + ((> pos reg-end) + (setq continue nil)) + ((eq depth (get-text-property pos 'jsx-end)) + (setq continue nil)) + ) ;cond + ) ;while + (web-mode-go pos 1) + ) ;t + ) ;cond + )) + +;; css rule = selector(s) + declaration (properties) +(defun web-mode-css-rule-next (limit) + (let (at-rule var-rule sel-beg sel-end dec-beg dec-end chunk) + (skip-chars-forward "\n\t ") + (setq sel-beg (point)) + (when (and (< (point) limit) + (web-mode-part-rsf "[{;]" limit)) + (setq sel-end (1- (point))) + (cond + ((eq (char-before) ?\{) + (setq dec-beg (point)) + (setq dec-end (web-mode-closing-paren-position (1- dec-beg) limit)) + (if dec-end + (progn + (goto-char dec-end) + (forward-char)) + (setq dec-end limit) + (goto-char limit)) + ) + (t + ) + ) ;cond + (setq chunk (buffer-substring-no-properties sel-beg sel-end)) + (cond + ((string-match "@\\([[:alpha:]-]+\\)" chunk) + (setq at-rule (match-string-no-properties 1 chunk))) + ((string-match "\\$\\([[:alpha:]-]+\\)" chunk) + (setq var-rule (match-string-no-properties 1 chunk))) + ) ;cond + ) ;when + (if (not sel-end) + (progn (goto-char limit) nil) + (list :at-rule at-rule + :var-rule var-rule + :sel-beg sel-beg + :sel-end sel-end + :dec-beg dec-beg + :dec-end dec-end) + ) ;if + )) + +(defun web-mode-css-rule-current (&optional pos part-beg part-end) + "Current CSS rule boundaries." + (unless pos (setq pos (point))) + (unless part-beg (setq part-beg (web-mode-part-beginning-position pos))) + (unless part-end (setq part-end (web-mode-part-end-position pos))) + (save-excursion + (let (beg end) + (goto-char pos) + (if (not (web-mode-part-sb "{" part-beg)) + (progn + (setq beg part-beg) + (if (web-mode-part-sf ";" part-end) + (setq end (1+ (point))) + (setq end part-end)) + ) ;progn + (setq beg (point)) + (setq end (web-mode-closing-paren-position beg part-end)) + (if end + (setq end (1+ end)) + (setq end (line-end-position))) +;; (message "%S >>beg%S >>end%S" pos beg end) + (if (> pos end) + + ;;selectors + (progn + (goto-char pos) + (if (web-mode-part-rsb "[};]" part-beg) + (setq beg (1+ (point))) + (setq beg part-beg) + ) ;if + (goto-char pos) + (if (web-mode-part-rsf "[{;]" part-end) + (cond + ((eq (char-before) ?\;) + (setq end (point)) + ) + (t + (setq end (web-mode-closing-paren-position (1- (point)) part-end)) + (if end + (setq end (1+ end)) + (setq end part-end)) + ) + ) ;cond + (setq end part-end) + ) + ) ;progn selectors + + ;; declaration + (goto-char beg) + (if (web-mode-part-rsb "[}{;]" part-beg) + (setq beg (1+ (point))) + (setq beg part-beg) + ) ;if + ) ;if > pos end + ) +;; (message "beg(%S) end(%S)" beg end) + (when (eq (char-after beg) ?\n) + (setq beg (1+ beg))) + (cons beg end) + ))) + +(defun web-mode-scan-engine-comments (reg-beg reg-end tag-start tag-end) + "Scan engine comments (mako, django)." + (save-excursion + (let (beg end (continue t)) + (goto-char reg-beg) + (while (and continue + (< (point) reg-end) + (re-search-forward tag-start reg-end t)) + (goto-char (match-beginning 0)) + (setq beg (point)) + (if (not (re-search-forward tag-end reg-end t)) + (setq continue nil) + (setq end (point)) + (remove-list-of-text-properties beg end web-mode-scan-properties) + (add-text-properties beg end '(block-side t block-token comment)) + (put-text-property beg (1+ beg) 'block-beg 0) + (put-text-property (1- end) end 'block-end t) + ) ;if + ) ;while + ))) + +(defun web-mode-propertize (&optional beg end) + (unless beg (setq beg web-mode-change-beg)) + (unless end (setq end web-mode-change-end)) + ;;(message "%S %S" web-mode-content-type (get-text-property beg 'part-side)) + ;;(message "propertize: beg(%S) end(%S)" web-mode-change-beg web-mode-change-end) + ;;(message "%S %S" (get-text-property beg 'part-side) (get-text-property end 'part-side)) + (when (and end (> end (point-max))) + (setq end (point-max))) + ;;(message "propertize: reset web-mode-change-beg|end") + (setq web-mode-change-beg nil + web-mode-change-end nil) + (cond + ((or (null beg) (null end)) + nil) + ((and (member web-mode-engine '("php" "asp")) + (get-text-property beg 'block-side) + (get-text-property end 'block-side) + (> beg (point-min)) + (not (eq (get-text-property (1- beg) 'block-token) 'delimiter-beg)) + (not (eq (get-text-property end 'block-token) 'delimiter-end))) + ;;(message "invalidate block") + (web-mode-invalidate-block-region beg end)) + ((and (or (member web-mode-content-type '("css" "jsx" "javascript")) + (and (get-text-property beg 'part-side) + (get-text-property end 'part-side) + (> beg (point-min)) + (get-text-property (1- beg) 'part-side)) + )) + ;;(message "invalidate part (%S > %S)" beg end) + (web-mode-invalidate-part-region beg end)) + (t + ;;(message "invalidate default (%S > %S)" beg end) + (web-mode-invalidate-region beg end)) + ) ;cond + ) + +;; NOTE: il est important d'identifier des caractères en fin de ligne +;; web-mode-block-tokenize travaille en effet sur les fins de lignes pour +;; les commentaires de type // +(defun web-mode-invalidate-block-region (pos-beg pos-end) + ;; (message "pos-beg(%S) pos-end(%S)" pos-beg pos-end) + (save-excursion + (let (beg end code-beg code-end) + ;;(message "invalidate-block-region: pos-beg(%S)=%S" pos-beg (get-text-property pos 'block-side)) + ;;(message "code-beg(%S) code-end(%S) pos-beg(%S) pos-end(%S)" code-beg code-end pos-beg pos-end) + (cond + ((not (and (setq code-beg (web-mode-block-code-beginning-position pos-beg)) + (setq code-end (web-mode-block-code-end-position pos-beg)) + (>= pos-beg code-beg) + (<= pos-end code-end) + (> code-end code-beg))) + (web-mode-invalidate-region pos-beg pos-end)) + ((member web-mode-engine '("asp")) + (goto-char pos-beg) + (forward-line -1) + (setq beg (line-beginning-position)) + (when (> code-beg beg) + (setq beg code-beg)) + (goto-char pos-beg) + (forward-line) + (setq end (line-end-position)) + (when (< code-end end) + (setq end code-end)) + ;; ?? pas de (web-mode-block-tokenize beg end) ? + (cons beg end) + ) ;asp + (t + (goto-char pos-beg) + (when (string= web-mode-engine "php") + (cond + ((and (looking-back "\*" (point-min)) + (looking-at-p "/")) + (search-backward "/*" code-beg)) + ) ;cond + ) + (if (web-mode-block-rsb "[;{}(][ ]*\n" code-beg) + (setq beg (match-end 0)) + (setq beg code-beg)) + (goto-char pos-end) + (if (web-mode-block-rsf "[;{})][ ]*\n" code-end) + (setq end (1- (match-end 0))) + (setq end code-end)) + (web-mode-block-tokenize beg end) + ;;(message "beg(%S) end(%S)" beg end) + (cons beg end) + ) + ) ;cond + ))) + +(defun web-mode-invalidate-part-region (pos-beg pos-end) + (save-excursion + (let (beg end part-beg part-end language) + (if (member web-mode-content-type web-mode-part-content-types) + (setq language web-mode-content-type) + (setq language (symbol-name (get-text-property pos-beg 'part-side)))) + (setq part-beg (web-mode-part-beginning-position pos-beg) + part-end (web-mode-part-end-position pos-beg)) + ;;(message "language(%S) pos-beg(%S) pos-end(%S) part-beg(%S) part-end(%S)" + ;; language pos-beg pos-end part-beg part-end) + (goto-char pos-beg) + (cond + ((not (and part-beg part-end + (>= pos-beg part-beg) + (<= pos-end part-end) + (> part-end part-beg))) + (web-mode-invalidate-region pos-beg pos-end)) + ((member language '("javascript" "json" "jsx")) + (if (web-mode-javascript-rsb "[;{}(][ ]*\n" part-beg) + (setq beg (match-end 0)) + (setq beg part-beg)) + (goto-char pos-end) + (if (web-mode-javascript-rsf "[;{})][ ]*\n" part-end) + (setq end (match-end 0)) + (setq end part-end)) + (web-mode-scan-region beg end language)) + ((string= language "css") + (let (rule1 rule2) + (setq rule1 (web-mode-css-rule-current pos-beg)) + (setq rule2 rule1) + (when (> pos-end (cdr rule1)) + (setq rule2 (web-mode-css-rule-current pos-end))) + (setq beg (car rule1) + end (cdr rule2)) + ) + (web-mode-scan-region beg end language)) + (t + (setq beg part-beg + end part-end) + (web-mode-scan-region beg end language)) + ) ;cond + ))) + +(defun web-mode-invalidate-region (reg-beg reg-end) + ;;(message "%S | reg-beg(%S) reg-end(%S)" (point) reg-beg reg-end) + (setq reg-beg (web-mode-invalidate-region-beginning-position reg-beg) + reg-end (web-mode-invalidate-region-end-position reg-end)) + ;;(message "invalidate-region: reg-beg(%S) reg-end(%S)" reg-beg reg-end) + (web-mode-scan-region reg-beg reg-end)) + +(defun web-mode-invalidate-region-beginning-position (pos) + (save-excursion + (goto-char pos) + (when (and (bolp) (not (bobp))) + (backward-char)) + (beginning-of-line) + ;;(message "pos=%S %S" (point) (text-properties-at (point))) + (setq pos (point-min)) + (let ((continue (not (bobp)))) + (while continue + (cond + ((bobp) + (setq continue nil)) + ;; NOTE: Going back to the previous start tag is necessary + ;; when inserting a part endtag (e.g. ). + ;; Indeed, parts must be identified asap. + ((and (progn (back-to-indentation) t) + (get-text-property (point) 'tag-beg) + (eq (get-text-property (point) 'tag-type) 'start)) + (setq pos (point) + continue nil)) + (t + (forward-line -1)) + ) ;cond + ) ;while + ;;(message "pos=%S" pos) + pos))) + +(defun web-mode-invalidate-region-end-position (pos) + (save-excursion + (goto-char pos) + ;;(message "pos=%S %S" pos (get-text-property pos 'block-token)) + (when (string= web-mode-engine "jsp") + (cond + ((and (looking-back "<%" (point-min)) + (looking-at-p "--")) + (search-forward "--%>")) + ((and (looking-back "-- %" (point-min)) + (looking-at-p ">")) + (search-forward "--%>")) + ) ;cond + ) ;when + (setq pos (point-max)) + (let ((continue (not (eobp)))) + (while continue + (end-of-line) + ;;(message "%S %S" (point) (get-text-property (point) 'block-token)) + (cond + ((eobp) + (setq continue nil)) + ((and (not (get-text-property (point) 'tag-type)) + (not (get-text-property (point) 'part-side)) + (not (get-text-property (point) 'block-side))) + (setq pos (point) + continue nil)) + (t + (forward-line)) + ) ;cond + ) ;while + pos))) + +(defun web-mode-buffer-scan () + "Scan entine buffer." + (interactive) + (web-mode-scan-region (point-min) (point-max))) + +;;---- FONTIFICATION ----------------------------------------------------------- + +(defun web-mode-font-lock-highlight (limit) + ;;(message "font-lock-highlight: point(%S) limit(%S) change-beg(%S) change-end(%S)" (point) limit web-mode-change-beg web-mode-change-end) + (cond + (web-mode-fontification-off + nil) + (t + (web-mode-highlight-region (point) limit) + nil) + )) + +(defun web-mode-buffer-highlight () + (interactive) + (cond + ((and (fboundp 'font-lock-flush) global-font-lock-mode) + (font-lock-flush) + (font-lock-ensure)) + (t ;emacs 24 + ;;(font-lock-fontify-buffer) + (and global-font-lock-mode + (font-lock-fontify-region (point-min) (point-max)))) + ) ;cond + ) + +(defun web-mode-extend-region () + ;;(message "extend-region: flb(%S) fle(%S) wmcb(%S) wmce(%S)" font-lock-beg font-lock-end web-mode-change-beg web-mode-change-end) + (cond + (web-mode-fontification-off + nil) + (t + (when (or (null web-mode-change-beg) (< font-lock-beg web-mode-change-beg)) + ;;(message "font-lock-beg(%S) < web-mode-change-beg(%S)" font-lock-beg web-mode-change-beg) + (setq web-mode-change-beg font-lock-beg)) + (when (or (null web-mode-change-end) (> font-lock-end web-mode-change-end)) + ;;(message "font-lock-end(%S) > web-mode-change-end(%S)" font-lock-end web-mode-change-end) + (setq web-mode-change-end font-lock-end)) + (let ((region (web-mode-propertize web-mode-change-beg web-mode-change-end))) + (when region + ;;(message "region: %S" region) + (setq font-lock-beg (car region) + font-lock-end (cdr region)) + ) ;when + ) ;let + nil) ;t + )) + +(defun web-mode-unfontify-region (beg end) + ;;(message "unfontify: %S %S" beg end) + ) + +(defun web-mode-highlight-region (&optional beg end) + ;;(message "highlight-region: beg(%S) end(%S)" beg end) + (web-mode-with-silent-modifications + (save-excursion + (save-restriction + (save-match-data + (let ((buffer-undo-list t) + (inhibit-point-motion-hooks t) + (inhibit-quit t)) + ;;(message "web-mode-highlight-region=%S" (point)) + (remove-list-of-text-properties beg end '(font-lock-face face)) + (cond + ((and (get-text-property beg 'block-side) + (not (get-text-property beg 'block-beg))) + (web-mode-block-highlight beg end)) + ((or (member web-mode-content-type web-mode-part-content-types) + (get-text-property beg 'part-side)) + (web-mode-part-highlight beg end) + (web-mode-process-blocks beg end 'web-mode-block-highlight)) + ((string= web-mode-engine "none") + (web-mode-highlight-tags beg end) + (web-mode-process-parts beg end 'web-mode-part-highlight)) + (t + (web-mode-highlight-tags beg end) + (web-mode-process-parts beg end 'web-mode-part-highlight) + (web-mode-process-blocks beg end 'web-mode-block-highlight)) + ) ;cond + (when web-mode-enable-element-content-fontification + (web-mode-highlight-elements beg end)) + (when web-mode-enable-whitespace-fontification + (web-mode-highlight-whitespaces beg end)) + ) ;let + ))))) + +(defun web-mode-highlight-tags (reg-beg reg-end &optional depth) + (let ((continue t)) + (goto-char reg-beg) + (when (and (not (get-text-property (point) 'tag-beg)) + (not (web-mode-tag-next))) + (setq continue nil)) + (when (and continue (>= (point) reg-end)) + (setq continue nil)) + (while continue + (cond + (depth + (when (eq depth (get-text-property (point) 'jsx-depth)) + (web-mode-tag-highlight)) + ) + (t + (web-mode-tag-highlight)) + ) ;cond + (when (or (not (web-mode-tag-next)) + (>= (point) reg-end)) + (setq continue nil)) + ) ;while + (when web-mode-enable-inlays + (when (null web-mode-inlay-regexp) + (setq web-mode-inlay-regexp (regexp-opt '("\\[" "\\(" "\\begin{align}")))) + (let (beg end expr) + (goto-char reg-beg) + (while (web-mode-dom-rsf web-mode-inlay-regexp reg-end) + (setq beg (match-beginning 0) + end nil + expr (substring (match-string-no-properties 0) 0 2)) + (setq expr (cond + ((string= expr "\\[") "\\]") + ((string= expr "\\(") "\\)") + (t "\\end{align}"))) + (when (and (web-mode-dom-sf expr reg-end) + (setq end (match-end 0)) + (not (text-property-any beg end 'tag-end t))) + (font-lock-append-text-property beg end 'font-lock-face 'web-mode-inlay-face) + ) ;when + ) ;while + ) ;let + ) ;when + (when web-mode-enable-html-entities-fontification + (let (beg end) + (goto-char reg-beg) + (while (web-mode-dom-rsf "&\\([#]?[[:alnum:]]\\{2,8\\}\\);" reg-end) + (setq beg (match-beginning 0) + end (match-end 0)) + (when (not (text-property-any beg end 'tag-end t)) + (font-lock-append-text-property beg end 'font-lock-face 'web-mode-html-entity-face) + ) ;when + ) ;while + ) ;let + ) ;when + )) + +(defun web-mode-tag-highlight (&optional beg end) + (unless beg (setq beg (point))) + (unless end (setq end (1+ (web-mode-tag-end-position beg)))) + (let (name type face flags slash-beg slash-end bracket-end) + (setq flags (get-text-property beg 'tag-beg) + type (get-text-property beg 'tag-type) + name (get-text-property beg 'tag-name)) + (setq bracket-end (> (logand flags 16) 0)) + (cond + ((eq type 'comment) + (put-text-property beg end 'font-lock-face 'web-mode-comment-face) + (when (and web-mode-enable-comment-interpolation (> (- end beg) 5)) + (web-mode-interpolate-comment beg end nil))) + ((eq type 'cdata) + (put-text-property beg end 'font-lock-face 'web-mode-doctype-face)) + ((eq type 'doctype) + (put-text-property beg end 'font-lock-face 'web-mode-doctype-face)) + ((eq type 'declaration) + (put-text-property beg end 'font-lock-face 'web-mode-doctype-face)) + (name + (setq slash-beg (> (logand flags 4) 0) + slash-end (> (logand flags 8) 0) + bracket-end (> (logand flags 16) 0)) + (setq face (cond + ((not bracket-end) 'web-mode-html-tag-unclosed-face) + ((and web-mode-enable-element-tag-fontification + (setq face (cdr (assoc name web-mode-element-tag-faces)))) + face) + ((> (logand flags 32) 0) 'web-mode-html-tag-namespaced-face) + ((> (logand flags 2) 0) 'web-mode-html-tag-custom-face) + (t 'web-mode-html-tag-face))) + (put-text-property beg (+ beg (if slash-beg 2 1)) + 'font-lock-face 'web-mode-html-tag-bracket-face) + (unless (string= name "_fragment_") + (put-text-property (+ beg (if slash-beg 2 1)) + (+ beg (if slash-beg 2 1) (length name)) + 'font-lock-face face)) + (when (or slash-end bracket-end) + (put-text-property (- end (if slash-end 2 1)) end 'font-lock-face 'web-mode-html-tag-bracket-face) + ) ;when + (when (> (logand flags 1) 0) + ;;(message "%S>%S" beg end) + (web-mode-highlight-attrs beg end)) + ) ;case name + ) ;cond + )) + +(defun web-mode-highlight-attrs (reg-beg reg-end) + (let ((continue t) (pos reg-beg) beg end flags offset face) + ;;(message "highlight-attrs %S>%S" reg-beg reg-end) + (while continue + (setq beg (web-mode-attribute-next-position pos reg-end)) + (cond + ((or (null beg) (>= beg reg-end)) + (setq continue nil)) + (t + (setq flags (or (get-text-property beg 'tag-attr-beg) 0)) + (setq face (cond + ((= (logand flags 1) 1) 'web-mode-html-attr-custom-face) + ((= (logand flags 2) 2) 'web-mode-html-attr-engine-face) + ((= (logand flags 4) 4) nil) + (t 'web-mode-html-attr-name-face))) + ;;(setq end (if (get-text-property beg 'tag-attr-end) beg (web-mode-attribute-end-position beg))) + (setq end (web-mode-attribute-end-position beg)) + ;;(message "beg=%S end=%S" beg end) + (cond + ((or (null end) (>= end reg-end)) + (setq continue nil)) + (t + (setq offset (get-text-property end 'tag-attr-end)) + (if (= offset 0) + (put-text-property beg (1+ end) 'font-lock-face face) + (put-text-property beg (+ beg offset) 'font-lock-face face) + (put-text-property (+ beg offset) (+ beg offset 1) + 'font-lock-face + 'web-mode-html-attr-equal-face) + (when (not (get-text-property (+ beg offset 1) 'jsx-beg)) + (put-text-property (+ beg offset 1) (1+ end) + 'font-lock-face + 'web-mode-html-attr-value-face) + ) + ) ;if offset + (setq pos (1+ end)) + ) ;t + ) ;cond + ) ;t + );cond + ) ;while + )) + +(defun web-mode-block-highlight (reg-beg reg-end) + (let (sub1 sub2 sub3 continue char keywords token-type face beg end (buffer (current-buffer))) + ;;(message "reg-beg=%S reg-end=%S" reg-beg reg-end) + + ;; NOTE: required for blocks inside tag attrs + (remove-list-of-text-properties reg-beg reg-end '(font-lock-face)) + + (goto-char reg-beg) + + (when (null web-mode-engine-font-lock-keywords) + (setq sub1 (buffer-substring-no-properties + reg-beg (+ reg-beg 1)) + sub2 (buffer-substring-no-properties + reg-beg (+ reg-beg 2)) + sub3 (buffer-substring-no-properties + reg-beg (+ reg-beg (if (>= (point-max) (+ reg-beg 3)) 3 2)))) + ) + + (cond + + ((and (get-text-property reg-beg 'block-beg) + (eq (get-text-property reg-beg 'block-token) 'comment)) + (put-text-property reg-beg reg-end 'font-lock-face 'web-mode-comment-face) + ) ;comment block + + (web-mode-engine-font-lock-keywords + (setq keywords web-mode-engine-font-lock-keywords) + ) + + ((string= web-mode-engine "django") + (cond + ((string= sub2 "{{") + (setq keywords web-mode-django-expr-font-lock-keywords)) + ((string= sub2 "{%") + (setq keywords web-mode-django-code-font-lock-keywords)) + )) ;django + + ((string= web-mode-engine "mako") + (cond + ((member sub3 '("<% " "<%\n" "<%!")) + (setq keywords web-mode-mako-block-font-lock-keywords)) + ((eq (aref sub2 0) ?\%) + (setq keywords web-mode-mako-block-font-lock-keywords)) + ((member sub2 '("<%" " %S face(%S)" beg end face) + (remove-list-of-text-properties beg end '(face)) + (put-text-property beg end 'font-lock-face face) + ) + (setq continue nil + end nil) + ) ;if end + ) ;progn beg + (setq continue nil + end nil) + ) ;if beg + (when (and beg end) + (save-match-data + (when (and web-mode-enable-heredoc-fontification + (eq char ?\<) + (> (- end beg) 8) + ;;(progn (message "%S" (buffer-substring-no-properties beg end)) t) + (string-match-p "JS\\|JAVASCRIPT\\|HTM\\|CSS" (buffer-substring-no-properties beg end))) + (setq keywords + (cond + ((string-match-p "H" (buffer-substring-no-properties beg (+ beg 8))) + web-mode-html-font-lock-keywords) + (t + web-mode-javascript-font-lock-keywords) + )) + (web-mode-fontify-region beg end keywords) + )) +;; (message "%S %c %S beg=%S end=%S" web-mode-enable-string-interpolation char web-mode-engine beg end) + (when (and web-mode-enable-string-interpolation + (member char '(?\" ?\<)) + (member web-mode-engine '("php" "erb")) + (> (- end beg) 4)) + (web-mode-interpolate-block-string beg end) + ) ;when + (when (and web-mode-enable-comment-interpolation + (eq token-type 'comment) + (> (- end beg) 3)) + (web-mode-interpolate-comment beg end t) + ) ;when + (when (and web-mode-enable-comment-annotation + (eq token-type 'comment) + (> (- end beg) 3)) + (web-mode-annotate-comment beg end) + ) ;when + (when (and web-mode-enable-sql-detection + (eq token-type 'string) + (> (- end beg) 6) + ;;(eq char ?\<) + ;;(web-mode-looking-at-p (concat "[ \n]*" web-mode-sql-queries) (1+ beg)) + (web-mode-looking-at-p (concat "\\(.\\|<<<[[:alnum:]]+\\)[ \n]*" web-mode-sql-queries) beg) + ) + (web-mode-interpolate-sql-string beg end) + ) ;when + ) ;when beg end + ) ;while continue + ) ;when keywords + + ;;(when (and (member web-mode-engine '("jsp" "mako")) + (when (and (member web-mode-engine '("mako")) + (> (- reg-end reg-beg) 12) + (eq ?\< (char-after reg-beg))) + (web-mode-interpolate-block-tag reg-beg reg-end)) + + (when web-mode-enable-block-face +;; (message "block-face %S %S" reg-beg reg-end) + (font-lock-append-text-property reg-beg reg-end 'face 'web-mode-block-face)) + + )) + +(defun web-mode-part-highlight (reg-beg reg-end &optional depth) + (save-excursion + (let (start continue token-type face pos beg end string-face comment-face content-type) + ;;(message "part-highlight: reg-beg(%S) reg-end(%S)" reg-beg reg-end) + (if (member web-mode-content-type web-mode-part-content-types) + (setq content-type web-mode-content-type) + (setq content-type (symbol-name (get-text-property reg-beg 'part-side)))) + ;;(message "content-type=%S" content-type) + (unless depth + (when (string= content-type "jsx") (setq depth 0)) + ) + (setq string-face 'web-mode-part-string-face + comment-face 'web-mode-part-comment-face) + (cond + ((member content-type '("javascript" "jsx")) + (setq string-face 'web-mode-javascript-string-face + comment-face 'web-mode-javascript-comment-face) + (web-mode-fontify-region reg-beg reg-end web-mode-javascript-font-lock-keywords)) + ((string= content-type "json") + (setq string-face 'web-mode-json-string-face + comment-face 'web-mode-json-comment-face) + (web-mode-fontify-region reg-beg reg-end web-mode-javascript-font-lock-keywords)) + ((string= content-type "css") + (setq string-face 'web-mode-css-string-face + comment-face 'web-mode-css-comment-face) + (web-mode-css-rules-highlight reg-beg reg-end)) + ((string= content-type "sql") + (web-mode-fontify-region reg-beg reg-end web-mode-sql-font-lock-keywords)) + ((string= content-type "stylus") + (web-mode-fontify-region reg-beg reg-end web-mode-stylus-font-lock-keywords)) + ((string= content-type "pug") + (web-mode-fontify-region reg-beg reg-end web-mode-pug-font-lock-keywords)) + ((string= content-type "markdown") + (web-mode-fontify-region reg-beg reg-end web-mode-markdown-font-lock-keywords)) + ((string= content-type "ruby") + (web-mode-fontify-region reg-beg reg-end web-mode-erb-font-lock-keywords)) + ) ;cond + + (goto-char reg-beg) + + ;;(when (string= content-type "jsx") (web-mode-highlight-tags reg-beg reg-end)) + ;;(setq continue (and pos (< pos reg-end))) + (setq continue t + pos reg-beg) + (while continue + (if (get-text-property pos 'part-token) + (setq beg pos) + (setq beg (next-single-property-change pos 'part-token))) + (cond + ((or (null beg) (>= beg reg-end)) + (setq continue nil + end nil)) + ((and (eq depth 0) (get-text-property beg 'jsx-depth)) + (setq pos (or (next-single-property-change beg 'jsx-depth) (point-max)))) + (t + (setq token-type (get-text-property beg 'part-token)) + (setq face (cond + ((eq token-type 'string) string-face) + ((eq token-type 'comment) comment-face) + ((eq token-type 'context) 'web-mode-json-context-face) + ((eq token-type 'key) 'web-mode-json-key-face) + (t nil))) + (setq end (or (next-single-property-change beg 'part-token) (point-max)) + pos end) + (cond + ((or (null end) (> end reg-end)) + (setq continue nil + end nil)) + (t + (when face + (remove-list-of-text-properties beg end '(face)) + (put-text-property beg end 'font-lock-face face)) + (cond + ((< (- end beg) 6) + ) + ((eq token-type 'string) + (when (and web-mode-enable-string-interpolation + (member content-type '("javascript" "jsx"))) + (web-mode-interpolate-javascript-string beg end))) + ((eq token-type 'comment) + (when web-mode-enable-comment-interpolation + (web-mode-interpolate-comment beg end t)) + (when web-mode-enable-comment-annotation + (web-mode-annotate-comment beg end)) + ) + ) ;cond + ) ;t + ) ;cond + ) ;t + ) ;cond + ) ;while + + (when (and (string= web-mode-content-type "html") web-mode-enable-part-face) + (font-lock-append-text-property reg-beg reg-end 'face + (cond + ((string= content-type "javascript") + 'web-mode-script-face) + ((string= content-type "css") + 'web-mode-style-face) + (t + 'web-mode-part-face))) + ) + + (when (and web-mode-enable-css-colorization (string= content-type "stylus")) + (goto-char reg-beg) + (while (and (re-search-forward "#[0-9a-fA-F]\\{6\\}\\|#[0-9a-fA-F]\\{3\\}\\|rgba?([ ]*\\([[:digit:]]\\{1,3\\}\\)[ ]*,[ ]*\\([[:digit:]]\\{1,3\\}\\)[ ]*,[ ]*\\([[:digit:]]\\{1,3\\}\\)\\(.*?\\))" end t) + (<= (point) reg-end)) + (web-mode-colorize (match-beginning 0) (match-end 0)) + ) + ) + + (when (and (eq depth 0) (string= content-type "jsx")) + (let (pair elt-beg elt-end exp-beg exp-end exp-depth) + (goto-char reg-beg) + (while (setq pair (web-mode-jsx-element-next reg-end)) + ;;(message "elt-pair=%S" pair) + (setq elt-beg (car pair) + elt-end (cdr pair)) + (remove-list-of-text-properties elt-beg (1+ elt-end) '(face)) + (web-mode-highlight-tags elt-beg elt-end 1) + (goto-char elt-beg) + (while (setq pair (web-mode-jsx-expression-next elt-end)) + ;;(message "exp-pair=%S elt-end=%S" pair elt-end) + (setq exp-beg (car pair) + exp-end (cdr pair)) + (when (eq (char-after exp-beg) ?\{) + ;;(message "%S : %c %c" exp-beg (char-after (+ exp-beg 1)) (char-after (+ exp-beg 2))) + (cond + ;;((and (eq (char-after (+ exp-beg 1)) ?\/) (eq (char-after (+ exp-beg 2)) ?\*)) + ;; (put-text-property exp-beg (1+ exp-end) 'font-lock-face 'web-mode-part-comment-face) + ;; ) + (t + (setq exp-depth (get-text-property exp-beg 'jsx-depth)) + (remove-list-of-text-properties exp-beg exp-end '(font-lock-face)) + (put-text-property exp-beg (1+ exp-beg) 'font-lock-face 'web-mode-block-delimiter-face) + (when (and (eq (get-text-property exp-beg 'tag-attr-beg) 4) (web-mode-looking-at-p "\.\.\." (1+ exp-beg))) + (put-text-property exp-beg (+ exp-beg 4) 'font-lock-face 'web-mode-block-delimiter-face)) + (put-text-property exp-end (1+ exp-end) 'font-lock-face 'web-mode-block-delimiter-face) + (web-mode-highlight-tags (1+ exp-beg) exp-end (1+ exp-depth)) + (web-mode-part-highlight (1+ exp-beg) exp-end exp-depth) + (web-mode-fontify-region (1+ exp-beg) exp-end web-mode-javascript-font-lock-keywords) + ) ;t + ) ;cond + ) ;when + (goto-char (1+ exp-beg)) + ) ;while exp + + (when (and elt-beg web-mode-jsx-depth-faces) + (let (depth-beg depth-end jsx-face) + (goto-char elt-beg) + (while (setq pair (web-mode-jsx-depth-next reg-end)) + ;;(message "depth-pair=%S" pair) + (setq depth-beg (car pair) + depth-end (cdr pair) + depth (get-text-property depth-beg 'jsx-depth) + jsx-face (elt web-mode-jsx-depth-faces (1- depth))) + ;;(message "%S" jsx-face) + (font-lock-prepend-text-property depth-beg (1+ depth-end) 'face jsx-face) + (goto-char (+ depth-beg 2)) + ) + ) ;let + ) + + (goto-char (1+ elt-end)) + ) ;while elt + ) ;let + ) ;when + + ) ;let + ) ;save-excursion + ) + +(defun web-mode-css-rules-highlight (part-beg part-end) + (save-excursion + (goto-char part-beg) + (let (rule (continue t) (i 0) (at-rule nil) (var-rule nil)) + (while continue + (setq rule (web-mode-css-rule-next part-end)) + ;;(message "rule=%S" rule) + (cond + ((> (setq i (1+ i)) 1000) + (message "css-rules-highlight ** too much rules **") + (setq continue nil)) + ((null rule) + (setq continue nil)) + ((and (setq at-rule (plist-get rule :at-rule)) + (not (member at-rule '("charset" "font-face" "import" "viewport"))) + (plist-get rule :dec-end)) + (web-mode-css-rule-highlight (plist-get rule :sel-beg) + (plist-get rule :sel-end) + nil nil) + (web-mode-css-rules-highlight (plist-get rule :dec-beg) + (plist-get rule :dec-end))) + (t + (web-mode-css-rule-highlight (plist-get rule :sel-beg) + (plist-get rule :sel-end) + (plist-get rule :dec-beg) + (plist-get rule :dec-end))) + ) ;cond + ) ;while + ) ;let + )) + +(defun web-mode-css-rule-highlight (sel-beg sel-end dec-beg dec-end) + (save-excursion + ;;(let ((end sel-end)) + ;;(message "sel-beg=%S sel-end=%S dec-beg=%S dec-end=%S" sel-beg sel-end dec-beg dec-end) + (web-mode-fontify-region sel-beg sel-end web-mode-selector-font-lock-keywords) + (when (and dec-beg dec-end) + ;;(setq end dec-end) + (web-mode-fontify-region dec-beg dec-end web-mode-declaration-font-lock-keywords) + ) ;when + (when (and dec-beg dec-end) + (goto-char dec-beg) + (while (and web-mode-enable-css-colorization + (re-search-forward "#[0-9a-fA-F]\\{6\\}\\|#[0-9a-fA-F]\\{3\\}\\|rgba?([ ]*\\([[:digit:]]\\{1,3\\}\\)[ ]*,[ ]*\\([[:digit:]]\\{1,3\\}\\)[ ]*,[ ]*\\([[:digit:]]\\{1,3\\}\\)\\(.*?\\))" dec-end t) + ;;(progn (message "%S %S" end (point)) t) + (<= (point) dec-end)) + (web-mode-colorize (match-beginning 0) (match-end 0)) + ) ;while + ) ;when + ;;) ;let + )) + +(defun web-mode-fontify-region (beg end keywords) +;; (message "beg=%S end=%S" beg end);; (symbol-name keywords)) + (save-excursion + (let ((font-lock-keywords keywords) + (font-lock-multiline nil) + (font-lock-keywords-case-fold-search + (member web-mode-engine '("archibus" "asp" "template-toolkit"))) + (font-lock-keywords-only t) + (font-lock-extend-region-functions nil)) + ;; (message "%S" keywords) + (when (and (listp font-lock-keywords) global-font-lock-mode) + (font-lock-fontify-region beg end) + ) + ) + )) + +(defun web-mode-colorize-foreground (color) + (let* ((values (x-color-values color)) + (r (car values)) + (g (cadr values)) + (b (car (cdr (cdr values))))) + (if (> 128.0 (floor (+ (* .3 r) (* .59 g) (* .11 b)) 256)) + "white" "black"))) + +(defun web-mode-colorize (beg end) + (let (str plist len) + (setq str (buffer-substring-no-properties beg end)) + (setq len (length str)) + (cond + ((string= (substring str 0 1) "#") + (setq plist (list :background str + :foreground (web-mode-colorize-foreground str))) + (put-text-property beg end 'face plist)) + ((or (string= (substring str 0 4) "rgb(") (string= (substring str 0 5) "rgba(")) + (setq str (format "#%02X%02X%02X" + (string-to-number (match-string-no-properties 1)) + (string-to-number (match-string-no-properties 2)) + (string-to-number (match-string-no-properties 3)))) + (setq plist (list :background str + :foreground (web-mode-colorize-foreground str))) + (put-text-property beg end 'face plist)) + ) ;cond + )) + +(defun web-mode-interpolate-block-tag (beg end) + (save-excursion + (goto-char (+ 4 beg)) + (setq end (1- end)) + (while (re-search-forward "${.*?}" end t) + (remove-list-of-text-properties (match-beginning 0) (match-end 0) '(face)) + (web-mode-fontify-region (match-beginning 0) (match-end 0) + web-mode-uel-font-lock-keywords)) + )) + +(defun web-mode-interpolate-javascript-string (beg end) + (save-excursion + (goto-char (1+ beg)) + (setq end (1- end)) + (while (re-search-forward "${.*?}" end t) + (put-text-property (match-beginning 0) (match-end 0) + 'font-lock-face + 'web-mode-variable-name-face) + ) + )) + +;; todo : parsing plus compliqué: {$obj->values[3]->name} +(defun web-mode-interpolate-block-string (beg end) + (save-excursion + (goto-char (1+ beg)) + (setq end (1- end)) + (cond + ((string= web-mode-engine "php") + (while (re-search-forward "$[[:alnum:]_]+\\(->[[:alnum:]_]+\\)*\\|{[ ]*$.+?}" end t) +;; (message "%S > %S" (match-beginning 0) (match-end 0)) + (remove-list-of-text-properties (match-beginning 0) (match-end 0) '(font-lock-face)) + (web-mode-fontify-region (match-beginning 0) (match-end 0) + web-mode-php-var-interpolation-font-lock-keywords) + )) + ((string= web-mode-engine "erb") + (while (re-search-forward "#{.*?}" end t) + (remove-list-of-text-properties (match-beginning 0) (match-end 0) '(font-lock-face)) + (put-text-property (match-beginning 0) (match-end 0) + 'font-lock-face 'web-mode-variable-name-face) + )) + ) ;cond + )) + +(defun web-mode-interpolate-comment (beg end block-side) + (save-excursion + (let ((regexp (concat "\\_<\\(" web-mode-comment-keywords "\\)\\_>"))) + (goto-char beg) + (while (re-search-forward regexp end t) + (font-lock-prepend-text-property (match-beginning 1) (match-end 1) + 'font-lock-face + 'web-mode-comment-keyword-face) + ) ;while + ))) + +(defun web-mode-annotate-comment (beg end) + (save-excursion + ;;(message "beg=%S end=%S" beg end) + (goto-char beg) + (when (looking-at-p "/\\*\\*") + (while (re-search-forward "\\(.+\\)" end t) + (font-lock-prepend-text-property (match-beginning 1) (match-end 1) + 'font-lock-face + 'web-mode-annotation-face)) + (goto-char beg) + (while (re-search-forward "[ ]+\\({[^}]+}\\)" end t) + (font-lock-prepend-text-property (match-beginning 1) (match-end 1) + 'font-lock-face + 'web-mode-annotation-type-face)) + (goto-char beg) + (while (re-search-forward "\\(@[[:alnum:]]+\\)" end t) + (font-lock-prepend-text-property (match-beginning 1) (match-end 1) + 'font-lock-face + 'web-mode-annotation-tag-face)) + (goto-char beg) + (while (re-search-forward "}[[:blank:]]+\\([[:graph:]]+\\)" end t) + (font-lock-prepend-text-property (match-beginning 1) (match-end 1) + 'font-lock-face + 'web-mode-annotation-value-face)) + (goto-char beg) + (while (re-search-forward "@see[[:blank:]]+\\([[:graph:]]+\\)" end t) + (font-lock-prepend-text-property (match-beginning 1) (match-end 1) + 'font-lock-face + 'web-mode-annotation-value-face)) + (goto-char beg) + (while (re-search-forward "{\\(@\\(?:link\\|code\\)\\)\\s-+\\([^}\n]+\\)\\(#.+\\)?}" end t) + (font-lock-prepend-text-property (match-beginning 2) (match-end 2) + 'font-lock-face + 'web-mode-annotation-value-face)) + (goto-char beg) + (while (re-search-forward "\\(\\)" end t) + (font-lock-prepend-text-property (match-beginning 1) (match-end 1) + 'font-lock-face + 'web-mode-annotation-html-face) + (font-lock-prepend-text-property (match-beginning 2) (match-end 2) + 'font-lock-face + 'web-mode-annotation-html-face) + (font-lock-prepend-text-property (match-beginning 3) (match-end 3) + 'font-lock-face + 'web-mode-annotation-html-face)) + ) ;when + )) + +(defun web-mode-interpolate-sql-string (beg end) + (save-excursion + (let ((case-fold-search t) + (regexp (concat "\\_<\\(" web-mode-sql-keywords "\\)\\_>"))) + (goto-char beg) + (while (re-search-forward regexp end t) + (font-lock-prepend-text-property (match-beginning 1) (match-end 1) + 'font-lock-face + 'web-mode-sql-keyword-face) + ) ;while + ))) + +(defun web-mode-fill-paragraph (&optional justify) + (save-excursion + (let ((pos (point)) fill-coll + prop pair beg end delim-beg delim-end chunk fill-col) + (cond + ((or (eq (get-text-property pos 'part-token) 'comment) + (eq (get-text-property pos 'block-token) 'comment)) + (setq prop + (if (get-text-property pos 'part-token) 'part-token 'block-token)) + (setq pair (web-mode-property-boundaries prop pos)) + (when (and pair (> (- (cdr pair) (car pair)) 6)) + (setq fill-coll (if (< fill-column 10) 70 fill-column)) + (setq beg (car pair) + end (cdr pair)) + (goto-char beg) + (setq chunk (buffer-substring-no-properties beg (+ beg 2))) + (cond + ((string= chunk "//") + (setq delim-beg "//" + delim-end "EOL")) + ((string= chunk "/*") + (setq delim-beg "/*" + delim-end "*/")) + ((string= chunk "{#") + (setq delim-beg "{#" + delim-end "#}")) + ((string= chunk "")) + ) + ) + ) ;comment - case + ((web-mode-is-content) + (setq pair (web-mode-content-boundaries pos)) + (setq beg (car pair) + end (cdr pair)) + ) + ) ;cond + ;;(message "beg(%S) end(%S)" beg end) + (when (and beg end) + (fill-region beg end)) + t))) + +(defun web-mode-property-boundaries (prop &optional pos) + "property boundaries (cdr is 1+)" + (unless pos (setq pos (point))) + (let (beg end val) + (setq val (get-text-property pos prop)) + (if (null val) + val + (if (or (bobp) + (not (eq (get-text-property (1- pos) prop) val))) + (setq beg pos) + (setq beg (previous-single-property-change pos prop)) + (when (null beg) (setq beg (point-min)))) + (if (or (eobp) + (not (eq (get-text-property (1+ pos) prop) val))) + (setq end pos) + (setq end (next-single-property-change pos prop)) + (when (null end) (setq end (point-min)))) + (cons beg end)))) + +(defun web-mode-content-boundaries (&optional pos) + (unless pos (setq pos (point))) + (let (beg end) + (setq beg (or (previous-property-change pos (current-buffer)) + (point-max))) + (setq end (or (next-property-change pos (current-buffer)) + (point-min))) + (while (and (< beg end) (member (char-after beg) '(?\s ?\n))) + (setq beg (1+ beg))) + (while (and (> end beg) (member (char-after (1- end)) '(?\s ?\n))) + (setq end (1- end))) +;; (message "beg(%S) end(%S)" beg end) + (cons beg end) + )) + +(defun web-mode-engine-syntax-check () + (interactive) + (let ((proc nil) (errors nil) + (file (concat temporary-file-directory "emacs-web-mode-tmp"))) + (write-region (point-min) (point-max) file) + (cond + ;; ((null (buffer-file-name)) + ;; ) + ((string= web-mode-engine "php") + (setq proc (start-process "php-proc" nil "php" "-l" file)) + (set-process-filter + proc + (lambda (proc output) + (cond + ((string-match-p "No syntax errors" output) + (message "No syntax errors") + ) + (t + ;; (setq output (replace-regexp-in-string temporary-file-directory "" output)) + ;; (message output) + (message "Syntax error") + (setq errors t)) + ) ;cond + ;; (delete-file file) + ) ;lambda + ) + ) ;php + (t + (message "no syntax checker found") + ) ;t + ) ;cond + errors)) + +(defun web-mode-jshint () + "Run JSHint on all the JavaScript parts." + (interactive) + (let (proc lines) + (when (buffer-file-name) + (setq proc (start-process + "jshint-proc" + nil + (or (executable-find "jshint") "/usr/local/bin/jshint") + "--extract=auto" + (buffer-file-name))) + (setq web-mode-jshint-errors 0) + (set-process-filter proc + (lambda (proc output) + (let ((offset 0) overlay pos (old 0) msg) + (remove-overlays (point-min) (point-max) 'font-lock-face 'web-mode-error-face) + (while (string-match + "line \\([[:digit:]]+\\), col \\([[:digit:]]+\\), \\(.+\\)\\.$" + output offset) + (setq web-mode-jshint-errors (1+ web-mode-jshint-errors)) + (setq offset (match-end 0)) + (setq pos (web-mode-coord-position + (match-string-no-properties 1 output) + (match-string-no-properties 2 output))) + (when (get-text-property pos 'tag-beg) + (setq pos (1- pos))) + (when (not (= pos old)) + (setq old pos) + (setq overlay (make-overlay pos (1+ pos))) + (overlay-put overlay 'font-lock-face 'web-mode-error-face) + ) + (setq msg (or (overlay-get overlay 'help-echo) + (concat "line=" + (match-string-no-properties 1 output) + " column=" + (match-string-no-properties 2 output) + ))) + (overlay-put overlay 'help-echo + (concat msg " ## " (match-string-no-properties 3 output))) + ) ;while + )) + ) + ) ;when + )) + +(defun web-mode-dom-errors-show () + "Show unclosed tags." + (interactive) + (let (beg end tag pos l n tags i cont cell overlay overlays first + (ori (point)) + (errors 0) + (continue t) + ) + (setq overlays (overlays-in (point-min) (point-max))) + (when overlays + (dolist (overlay overlays) + (when (eq (overlay-get overlay 'face) 'web-mode-warning-face) + (delete-overlay overlay) + ) + ) + ) + (goto-char (point-min)) + (when (not (or (get-text-property (point) 'tag-beg) + (web-mode-tag-next))) + (setq continue nil)) + (while continue + (setq pos (point)) + (setq tag (get-text-property pos 'tag-name)) + (cond + ((eq (get-text-property (point) 'tag-type) 'start) + (setq tags (add-to-list 'tags (list tag pos))) +;; (message "(%S) opening %S" pos tag) + ) + ((eq (get-text-property (point) 'tag-type) 'end) + (setq i 0 + l (length tags) + cont t) + (while (and (< i l) cont) + (setq cell (nth i tags)) +;; (message "cell=%S" cell) + (setq i (1+ i)) + (cond + ((string= tag (nth 0 cell)) + (setq cont nil) + ) + (t + (setq errors (1+ errors)) + (setq beg (nth 1 cell)) + (setq end (web-mode-tag-end-position beg)) + (unless first + (setq first beg)) + (setq overlay (make-overlay beg (1+ end))) + (overlay-put overlay 'font-lock-face 'web-mode-warning-face) +;; (message "invalid <%S> at %S" (nth 0 cell) (nth 1 cell)) + ) + ) ;cond + ) ;while + + (dotimes (i i) + (setq tags (cdr tags))) + + ) + ) ;cond + (when (not (web-mode-tag-next)) + (setq continue nil)) + ) ;while + (message "%S error(s) detected" errors) + (if (< errors 1) + (goto-char ori) + (goto-char first) + (recenter)) + ;; (message "%S" tags) + )) + +(defun web-mode-highlight-elements (beg end) + (save-excursion + (goto-char beg) + (let ((continue (or (get-text-property (point) 'tag-beg) (web-mode-tag-next))) + (i 0) (ctx nil) (face nil)) + (while continue + (cond + ((> (setq i (1+ i)) 1000) + (message "highlight-elements ** too much tags **") + (setq continue nil)) + ((> (point) end) + (setq continue nil)) + ((not (get-text-property (point) 'tag-beg)) + (setq continue nil)) + ((eq (get-text-property (point) 'tag-type) 'start) + (when (and (setq ctx (web-mode-element-boundaries (point))) + (<= (car (cdr ctx)) end) + (setq face (cdr (assoc (get-text-property (point) 'tag-name) web-mode-element-content-faces)))) + (font-lock-prepend-text-property (1+ (cdr (car ctx))) (car (cdr ctx)) + 'font-lock-face face)) + ) + ) ;cond + (when (not (web-mode-tag-next)) + (setq continue nil)) + ) ;while + ))) + +(defun web-mode-enable (feature) + "Enable one feature." + (interactive + (list (completing-read + "Feature: " + (let (features) + (dolist (elt web-mode-features) + (setq features (append features (list (car elt))))) + features)))) + (when (and (or (not feature) (< (length feature) 1)) web-mode-last-enabled-feature) + (setq feature web-mode-last-enabled-feature)) + (when feature + (setq web-mode-last-enabled-feature feature) + (setq feature (cdr (assoc feature web-mode-features))) + (cond + ((eq feature 'web-mode-enable-current-column-highlight) + (web-mode-column-show)) + ((eq feature 'web-mode-enable-current-element-highlight) + (when (not web-mode-enable-current-element-highlight) + (web-mode-toggle-current-element-highlight)) + ) + ((eq feature 'web-mode-enable-whitespace-fontification) + (web-mode-whitespaces-on)) + (t + (set feature t) + (web-mode-buffer-highlight)) + ) + ) ;when + ) + +(defun web-mode-disable (feature) + "Disable one feature." + (interactive + (list (completing-read + "Feature: " + (let (features) + (dolist (elt web-mode-features) + (setq features (append features (list (car elt))))) + features)))) + (when (and (or (not feature) (< (length feature) 1)) web-mode-last-enabled-feature) + (setq feature web-mode-last-enabled-feature)) + (when feature + (setq feature (cdr (assoc feature web-mode-features))) + (cond + ((eq feature 'web-mode-enable-current-column-highlight) + (web-mode-column-hide)) + ((eq feature 'web-mode-enable-current-element-highlight) + (when web-mode-enable-current-element-highlight + (web-mode-toggle-current-element-highlight)) + ) + ((eq feature 'web-mode-enable-whitespace-fontification) + (web-mode-whitespaces-off)) + (t + (set feature nil) + (web-mode-buffer-highlight)) + ) + ) ;when + ) + +(defun web-mode-make-tag-overlays () + (unless web-mode-overlay-tag-start + (setq web-mode-overlay-tag-start (make-overlay 1 1) + web-mode-overlay-tag-end (make-overlay 1 1)) + (overlay-put web-mode-overlay-tag-start + 'font-lock-face + 'web-mode-current-element-highlight-face) + (overlay-put web-mode-overlay-tag-end + 'font-lock-face + 'web-mode-current-element-highlight-face))) + +(defun web-mode-delete-tag-overlays () + (when web-mode-overlay-tag-start + (delete-overlay web-mode-overlay-tag-start) + (delete-overlay web-mode-overlay-tag-end))) + +(defun web-mode-column-overlay-factory (index) + (let (overlay) + (when (null web-mode-column-overlays) + (dotimes (i 100) + (setq overlay (make-overlay 1 1)) + (overlay-put overlay 'font-lock-face 'web-mode-current-column-highlight-face) + (setq web-mode-column-overlays (append web-mode-column-overlays (list overlay))) + ) + ) ;when + (setq overlay (nth index web-mode-column-overlays)) + (when (null overlay) + (setq overlay (make-overlay 1 1)) + (overlay-put overlay 'font-lock-face 'web-mode-current-column-highlight-face) + (setq web-mode-column-overlays (append web-mode-column-overlays (list overlay))) + ) ;when + overlay)) + +(defun web-mode-column-hide () + (setq web-mode-enable-current-column-highlight nil) + (remove-overlays (point-min) (point-max) + 'font-lock-face + 'web-mode-current-column-highlight-face)) + +(defun web-mode-column-show () + (let ((index 0) overlay diff column line-to line-from) + (web-mode-column-hide) + (setq web-mode-enable-current-column-highlight t) + (save-excursion + (back-to-indentation) + (setq column (current-column) + line-to (web-mode-line-number)) + (when (and (get-text-property (point) 'tag-beg) + (member (get-text-property (point) 'tag-type) '(start end)) + (web-mode-tag-match) + (setq line-from (web-mode-line-number)) + (not (= line-from line-to))) + (when (> line-from line-to) + (let (tmp) + (setq tmp line-from) + (setq line-from line-to) + (setq line-to tmp)) + ) ;when + ;;(message "column(%S) line-from(%S) line-to(%S)" column line-from line-to) + (goto-char (point-min)) + (when (> line-from 1) + (forward-line (1- line-from))) + (while (<= line-from line-to) + (setq overlay (web-mode-column-overlay-factory index)) + (setq diff (- (line-end-position) (point))) + (cond + ((or (and (= column 0) (= diff 0)) + (> column diff)) + (end-of-line) + (move-overlay overlay (point) (point)) + (overlay-put overlay + 'after-string + (concat + (if (> column diff) (make-string (- column diff) ?\s) "") + (propertize " " + 'font-lock-face + 'web-mode-current-column-highlight-face) + ) ;concat + ) + ) + (t + (move-to-column column) + (overlay-put overlay 'after-string nil) + (move-overlay overlay (point) (1+ (point))) + ) + ) ;cond + (setq line-from (1+ line-from)) + (forward-line) + (setq index (1+ index)) + ) ;while + ) ;when + ) ;save-excursion + ) ;let + ) + +(defun web-mode-highlight-current-element () + (let ((ctx (web-mode-element-boundaries)) len) + (cond + ((null ctx) + (web-mode-delete-tag-overlays)) + ((eq (get-text-property (caar ctx) 'tag-type) 'void) ;; #1046 + (web-mode-make-tag-overlays) + (setq len (length (get-text-property (caar ctx) 'tag-name))) + (move-overlay web-mode-overlay-tag-start (+ (caar ctx) 1) (+ (caar ctx) 1 len)) + ) + (t + (web-mode-make-tag-overlays) + (setq len (length (get-text-property (caar ctx) 'tag-name))) + (move-overlay web-mode-overlay-tag-start (+ (caar ctx) 1) (+ (caar ctx) 1 len)) + (move-overlay web-mode-overlay-tag-end (+ (cadr ctx) 2) (+ (cadr ctx) 2 len)) + ) ;t + ) ;cond + )) + +(defun web-mode-highlight-whitespaces (beg end) + (save-excursion + (goto-char beg) + (while (re-search-forward web-mode-whitespaces-regexp end t) + (add-text-properties (match-beginning 0) (match-end 0) + '(face web-mode-whitespace-face)) + ) ;while + )) + +(defun web-mode-whitespaces-show () + "Toggle whitespaces." + (interactive) + (if web-mode-enable-whitespace-fontification + (web-mode-whitespaces-off) + (web-mode-whitespaces-on))) + +(defun web-mode-whitespaces-on () + "Show whitespaces." + (interactive) + (when web-mode-display-table + (setq buffer-display-table web-mode-display-table)) + (setq web-mode-enable-whitespace-fontification t)) + +(defun web-mode-whitespaces-off () + (setq buffer-display-table nil) + (setq web-mode-enable-whitespace-fontification nil)) + +(defun web-mode-use-tabs () + "Tweaks vars to be compatible with TAB indentation." + (let (offset) + (setq web-mode-block-padding 0) + (setq web-mode-script-padding 0) + (setq web-mode-style-padding 0) + (setq offset + (cond + ((and (boundp 'tab-width) tab-width) tab-width) + ((and (boundp 'standard-indent) standard-indent) standard-indent) + (t 4))) + ;; (message "offset(%S)" offset) + (setq web-mode-attr-indent-offset offset) + (setq web-mode-code-indent-offset offset) + (setq web-mode-css-indent-offset offset) + (setq web-mode-markup-indent-offset offset) + (setq web-mode-sql-indent-offset offset) + (add-to-list 'web-mode-indentation-params '("lineup-args" . nil)) + (add-to-list 'web-mode-indentation-params '("lineup-calls" . nil)) + (add-to-list 'web-mode-indentation-params '("lineup-concats" . nil)) + (add-to-list 'web-mode-indentation-params '("lineup-ternary" . nil)) + )) + +(defun web-mode-buffer-indent () + "Indent all buffer." + (interactive) + (let ((debug t) (ts (current-time)) (sub nil)) + (indent-region (point-min) (point-max)) + (when debug + (setq sub (time-subtract (current-time) ts)) + (message "buffer-indent: time elapsed = %Ss %9Sµs" (nth 1 sub) (nth 2 sub))) + (delete-trailing-whitespace))) + +(defun web-mode-buffer-change-tag-case (&optional type) + "Change html tag case." + (interactive) + (save-excursion + (goto-char (point-min)) + (let ((continue t) f) + (setq f (if (member type '("upper" "uppercase" "upper-case")) 'uppercase 'downcase)) + (when (and (not (get-text-property (point) 'tag-beg)) + (not (web-mode-tag-next))) + (setq continue nil)) + (while continue + (skip-chars-forward " depth 1)) + (when (get-text-property pos 'jsx-beg) + (setq depth (1- depth))) + (setq reg-beg (web-mode-jsx-depth-beginning-position pos depth)) + (setq reg-beg (1+ reg-beg)) + ;;(message "%S" (point)) + (save-excursion + (goto-char reg-beg) + ;;(message "pt=%S" reg-beg) + (cond + ((and (not (looking-at-p "[ ]*$")) + (looking-back "^[[:space:]]*{" (point-min))) + (setq reg-col (+ (current-indentation) ;; #1027 + (cond + ((looking-at "[ ]+") (1+ (length (match-string-no-properties 0)))) + (t 0)) + )) + ) + ((looking-at-p "[ ]*\\[[ ]*$") ;; #0659 + (setq reg-col (current-indentation)) + ) + ((and (looking-back "=[ ]*{" (point-min)) ;; #0739 #1022 + (not (looking-at-p "[[:space:]]*<"))) + (setq reg-col (current-indentation)) + ) + ;;((and (looking-back "=[ ]*{" (point-min)) ;; #0739 + ;; (looking-at-p "{[ ]*")) + ;; (setq reg-col (current-indentation)) + ;; ) + ((get-text-property (1- (point)) 'tag-beg) + ;;(message "point=%S" (point)) + (setq reg-col (current-indentation)) + ) + (t + (message "%S : %S %S" (point) (current-indentation) web-mode-code-indent-offset) + ;;(setq reg-col (+ (current-indentation) web-mode-code-indent-offset web-mode-jsx-expression-padding))) + (setq reg-col (+ (current-indentation) web-mode-code-indent-offset))) + ) + + ;;(message "%S %S %S" (point) (current-indentation) reg-col) + ) ;save-excursion + ) + ((string= web-mode-content-type "jsx") + (setq reg-beg (point-min))) + (t + (setq reg-beg (or (web-mode-part-beginning-position pos) (point-min))) + (save-excursion + (goto-char reg-beg) + (search-backward "<" nil t) + (setq reg-col (current-column)) + ) ;save-excursion + ) + ) ;cond + ;;(message "jsx reg-beg=%S" reg-beg) + ) ;jsx + + ((string= web-mode-content-type "php") + (setq language "php" + curr-indentation web-mode-code-indent-offset)) + + ((or (string= web-mode-content-type "xml")) + (setq language "xml" + curr-indentation web-mode-markup-indent-offset)) + + ;; TODO: est ce util ? + ((and (get-text-property pos 'tag-beg) + (get-text-property pos 'tag-name) + ;;(not (get-text-property pos 'part-side)) + ) + (setq language "html" + curr-indentation web-mode-markup-indent-offset)) + + ((and (get-text-property pos 'block-side) + (not (get-text-property pos 'block-beg))) + + (setq reg-beg (or (web-mode-block-beginning-position pos) (point-min))) + (goto-char reg-beg) + (setq reg-col (current-column)) + (setq language web-mode-engine) + (setq curr-indentation web-mode-code-indent-offset) + + (cond + ((string= web-mode-engine "blade") + (save-excursion + (when (web-mode-rsf "{[{!]+[ ]*") + (setq reg-col (current-column)))) + (setq reg-beg (+ reg-beg 2)) + ) + ((string= web-mode-engine "razor") + (setq reg-beg (+ reg-beg 2)) + ) + ;; tests/demo.chtml + ((string= web-mode-engine "ctemplate") + (save-excursion + (when (web-mode-rsf "{{#?") + (setq reg-col (current-column)))) + ) + ((string= web-mode-engine "dust") + (save-excursion + (when (web-mode-rsf "{@") + (setq reg-col (current-column)))) + ) + ((string= web-mode-engine "svelte") + (save-excursion + (when (web-mode-rsf "{@") + (setq reg-col (current-column)))) + ) + ((string= web-mode-engine "template-toolkit") + (setq reg-beg (+ reg-beg 3) + reg-col (+ reg-col 3)) + ) + ((and (string= web-mode-engine "jsp") + (web-mode-looking-at "<%@" reg-beg)) + (save-excursion + (goto-char reg-beg) + (looking-at "<%@[ ]*[[:alpha:]]+[ ]+\\| pos (point-min)) + (eq (get-text-property pos 'part-token) 'comment) + (eq (get-text-property (1- pos) 'part-token) 'comment) + (progn + (setq reg-beg (previous-single-property-change pos 'part-token)) + t)) + (and (> pos (point-min)) + (eq (get-text-property pos 'block-token) 'comment) + (eq (get-text-property (1- pos) 'block-token) 'comment) + (progn + (setq reg-beg (previous-single-property-change pos 'block-token)) + t)) + (and (> pos (point-min)) + (eq (get-text-property pos 'tag-type) 'comment) + (not (get-text-property pos 'tag-beg)) + (progn + (setq reg-beg (web-mode-tag-beginning-position pos)) + t)) + ) + (setq token "comment")) + ((or (and (> pos (point-min)) + (member (get-text-property pos 'part-token) + '(string context key)) + (member (get-text-property (1- pos) 'part-token) + '(string context key))) + (and (eq (get-text-property pos 'block-token) 'string) + (eq (get-text-property (1- pos) 'block-token) 'string))) + (setq token "string")) + ) + + (goto-char pos) + (setq curr-line (web-mode-trim + (buffer-substring-no-properties + (line-beginning-position) + (line-end-position)))) + (setq curr-char (if (string= curr-line "") 0 (aref curr-line 0))) + + (when (or (member language '("php" "blade" "javascript" "jsx" "razor" "css")) + (and (member language '("html" "xml")) + (not (eq ?\< curr-char)))) + (let (prev) + (cond + ((member language '("html" "xml" "javascript" "jsx" "css")) + (when (setq prev (web-mode-part-previous-live-line reg-beg)) + (setq prev-line (nth 0 prev) + prev-indentation (nth 1 prev) + prev-pos (nth 2 prev)) + ) + ) + ((setq prev (web-mode-block-previous-live-line)) + (setq prev-line (car prev) + prev-indentation (cdr prev)) + (setq prev-line (web-mode-clean-block-line prev-line))) + ) ;cond + ) ;let + (when (>= (length prev-line) 1) + (setq prev-char (aref prev-line (1- (length prev-line)))) + (setq prev-line (substring-no-properties prev-line)) + ) + ) + + (cond + ((not (member web-mode-content-type '("html" "xml"))) + ) + ((member language '("javascript" "jsx" "ruby")) + (setq reg-col (if web-mode-script-padding (+ reg-col web-mode-script-padding) 0))) + ((member language '("css" "sql" "markdown" "pug" "stylus")) + (setq reg-col (if web-mode-style-padding (+ reg-col web-mode-style-padding) 0))) + ((not (member language '("html" "xml" "razor"))) + (setq reg-col + (cond + ((not web-mode-block-padding) reg-col) + ((eq web-mode-block-padding -1) 0) + (t (+ reg-col web-mode-block-padding)) + ) ;cond + ) ;setq + ) + ) + + (list :curr-char curr-char + :curr-indentation curr-indentation + :curr-line curr-line + :language language + :options options + :prev-char prev-char + :prev-indentation prev-indentation + :prev-line prev-line + :prev-pos prev-pos + :reg-beg reg-beg + :reg-col reg-col + :token token) + ))) + +(defun web-mode-indent-line () + + (web-mode-propertize) + + (let ((offset nil) + (char nil) + (debug nil) + (inhibit-modification-hooks nil) + (adjust t)) + + (save-excursion + (back-to-indentation) + (setq char (char-after)) + (let* ((pos (point)) + (ctx (web-mode-point-context pos)) + (curr-char (plist-get ctx :curr-char)) + (curr-indentation (plist-get ctx :curr-indentation)) + (curr-line (plist-get ctx :curr-line)) + (language (plist-get ctx :language)) + (prev-char (plist-get ctx :prev-char)) + (prev-indentation (plist-get ctx :prev-indentation)) + (prev-line (plist-get ctx :prev-line)) + (prev-pos (plist-get ctx :prev-pos)) + (reg-beg (plist-get ctx :reg-beg)) + (reg-col (plist-get ctx :reg-col)) + (token (plist-get ctx :token)) + (options (plist-get ctx :options)) + (chars (list curr-char prev-char)) + (tmp nil) + (is-js (member language '("javascript" "jsx" "ejs")))) + + ;;(message "%S" language) + ;;(message "curr-char=[%c] prev-char=[%c]\n%S" curr-char prev-char ctx) + ;;(message "options=%S" ctx) + + (cond + + ((or (bobp) (= (line-number-at-pos pos) 1)) + (when debug (message "I100")) + (setq offset 0)) + + ((string= token "string") + (when debug (message "I120(%S) string" pos)) + (cond + ((web-mode-is-token-end pos) + (if (get-text-property pos 'block-side) + (web-mode-block-token-beginning) + (web-mode-part-token-beginning)) + (setq offset (current-indentation)) + ) + ((and web-mode-enable-sql-detection + (web-mode-block-token-starts-with (concat "[ \n]*" web-mode-sql-queries))) + (save-excursion + (let (col) + (web-mode-block-string-beginning) + (skip-chars-forward "[ \"'\n]") + (setq col (current-column)) + (goto-char pos) + (if (looking-at-p "\\(SELECT\\|INSERT\\|DELETE\\|UPDATE\\|FROM\\|LEFT\\|JOIN\\|WHERE\\|GROUP BY\\|LIMIT\\|HAVING\\|\)\\)") + (setq offset col) + (setq offset (+ col web-mode-sql-indent-offset))) + ) + ) ;save-excursion + ) + ((and is-js + (web-mode-is-ql-string pos "Relay\.QL")) + (setq offset (web-mode-relayql-indentation pos)) + ) + ((and is-js + (web-mode-is-ql-string pos "gql")) + (setq offset (web-mode-relayql-indentation pos "gql")) + ) + ((and is-js + (web-mode-is-ql-string pos "graphql")) + (setq offset (web-mode-relayql-indentation pos "graphql")) + ) + ((and is-js + (web-mode-is-styled-component-string pos)) + (setq offset (web-mode-styled-component-indentation pos)) + ) + ((and is-js + (web-mode-is-html-string pos)) + (when debug (message "I128(%S) html string" pos)) + (setq offset (web-mode-token-html-indentation pos)) + ) + (t + (setq offset nil)) + ) ;cond + ) ;case string + + ((string= token "comment") + (when debug (message "I130(%S) comment" pos)) + (if (eq (get-text-property pos 'tag-type) 'comment) + (web-mode-tag-beginning) + (goto-char (car + (web-mode-property-boundaries + (if (eq (get-text-property pos 'part-token) 'comment) + 'part-token + 'block-token) + pos)))) + (setq offset (current-column)) + (cond + ((string= web-mode-engine "freemarker") + (setq offset (+ (current-indentation) 2))) + ((member (buffer-substring-no-properties (point) (+ (point) 2)) '("/*" "{*" "@*")) + (cond + ((eq ?\* curr-char) + (setq offset (+ offset 1))) + (t + (setq offset (+ offset 3))) + ) ;cond + ) + ((string= (buffer-substring-no-properties (point) (+ (point) 4)) "" curr-line) + (setq offset offset)) + ((string-match-p "^-" curr-line) + (setq offset (+ offset 3))) + (t + (setq offset (+ offset 5))) + ) ;cond + ) + ((and (string= web-mode-engine "django") (looking-back "{% comment %}" (point-min))) + (setq offset (- offset 12))) + ((and (string= web-mode-engine "mako") (looking-back "<%doc%>" (point-min))) + (setq offset (- offset 6))) + ((and (string= web-mode-engine "mason") (looking-back "<%doc%>" (point-min))) + (setq offset (- offset 6))) + ) ;cond + ) ;case comment + + ((and (string= web-mode-engine "mason") + (string-match-p "^%" curr-line)) + (when debug (message "I140(%S) mason" pos)) + (setq offset 0)) + + ((and (get-text-property pos 'block-beg) + (or (web-mode-block-is-close pos) + (web-mode-block-is-inside pos))) + (when debug (message "I150(%S) block-match" pos)) + (cond + ((not (web-mode-block-match)) + ) + ((and (string= web-mode-engine "closure") + (string-match-p "{\\(case\\|default\\)" curr-line)) + (setq offset (+ (current-indentation) web-mode-markup-indent-offset))) + (t + (setq offset (current-indentation)) + (if (and (string= web-mode-engine "blade") + (string-match-p "@break" curr-line)) + (setq offset (+ (current-indentation) offset))) + ) + ) ;cond + ) + + ((eq (get-text-property pos 'block-token) 'delimiter-end) + (when debug (message "I160(%S) block-beginning" pos)) + (when (web-mode-block-beginning) + (setq reg-col (current-indentation)) + (setq offset (current-column)))) + + ((or (and (get-text-property pos 'tag-beg) + (eq (get-text-property pos 'tag-type) 'end)) + (and (eq (get-text-property pos 'tag-type) 'comment) + (string-match-p "" (point)) + (web-mode-insert-text-at-pos "" (point)) + (web-mode-insert-text-at-pos "") + (search-backward " -->") + ) ;case html + ) ;cond + )) + +(defun web-mode-comment (pos) + (let (ctx language col sel beg end tmp block-side single-line-block pos-after content) + + (setq pos-after pos) + + (setq block-side (get-text-property pos 'block-side)) + (setq single-line-block (web-mode-is-single-line-block pos)) + + (cond + + ((and block-side (string= web-mode-engine "erb")) + (web-mode-comment-erb-block pos) + ) + + ((and block-side (string= web-mode-engine "artanis")) + (web-mode-comment-artanis-block pos) + ) + + ((and single-line-block block-side + (intern-soft (concat "web-mode-comment-" web-mode-engine "-block"))) + (funcall (intern (concat "web-mode-comment-" web-mode-engine "-block")) pos) + ) + + (t + (setq ctx (web-mode-point-context + (if mark-active (region-beginning) (line-beginning-position)))) + (setq language (plist-get ctx :language)) + (setq col (current-column)) + (cond + (mark-active + ;;(message "%S %S" (point) col) + ) + ((and (member language '("html" "xml")) + (get-text-property (progn (back-to-indentation) (point)) 'tag-beg)) + (web-mode-element-select)) + (t + (end-of-line) + (set-mark (line-beginning-position))) + ) ;cond + + (setq beg (region-beginning) + end (region-end)) + + (when (> (point) (mark)) + (exchange-point-and-mark)) + + (if (and (eq (char-before end) ?\n) + (not (eq (char-after end) ?\n))) + (setq end (1- end))) + + (setq sel (buffer-substring-no-properties beg end)) + + (cond + + ((member language '("html" "xml")) + (cond + ((and (= web-mode-comment-style 2) (string= web-mode-engine "django")) + (setq content (concat "{# " sel " #}"))) + ((and (= web-mode-comment-style 2) (member web-mode-engine '("ejs" "erb"))) + (setq content (concat "<%# " sel " %>"))) + ((and (= web-mode-comment-style 2) (string= web-mode-engine "artanis")) + (setq content (concat "<%; " sel " %>"))) + ((and (= web-mode-comment-style 2) (string= web-mode-engine "aspx")) + (setq content (concat "<%-- " sel " --%>"))) + ((and (= web-mode-comment-style 2) (string= web-mode-engine "smarty")) + (setq content (concat "{* " sel " *}"))) + ((and (= web-mode-comment-style 2) (string= web-mode-engine "xoops")) + (setq content (concat "<{* " sel " *}>"))) + ((and (= web-mode-comment-style 2) (string= web-mode-engine "hero")) + (setq content (concat "<%# " sel " %>"))) + ((and (= web-mode-comment-style 2) (string= web-mode-engine "blade")) + (setq content (concat "{{-- " sel " --}}"))) + ((and (= web-mode-comment-style 2) (string= web-mode-engine "ctemplate")) + (setq content (concat "{{!-- " sel " --}}"))) + ((and (= web-mode-comment-style 2) (string= web-mode-engine "razor")) + (setq content (concat "@* " sel " *@"))) + (t + (setq content (concat "")) + (when (< (length sel) 1) + (search-backward " -->") + (setq pos-after nil)) + )) + ) ;case html + + ((member language '("php" "javascript" "java" "jsx")) + (let (alt) + (setq alt (cdr (assoc language web-mode-comment-formats))) + ;;(message "alt=%S sel=%S col=%S" alt sel col) + (cond + ((and alt (string= alt "//")) + (setq content (replace-regexp-in-string (concat "\n[ ]\\{" (number-to-string col) "\\}") "\n" sel)) + (setq content (replace-regexp-in-string (concat "\n") "\n// " content)) + (setq content (concat "// " content))) + ((get-text-property pos 'jsx-depth) + (setq content (concat "{/* " sel " */}"))) + (web-mode-comment-prefixing + (setq content (replace-regexp-in-string (concat "\n[ ]\\{" (number-to-string col) "\\}") "\n* " sel)) + (setq content (concat "/* " content " */"))) + (t + (setq content (concat "/* " sel " */"))) + ) ;cond + ) ;let + ) + + ((member language '("erb")) + (setq content (replace-regexp-in-string "^[ ]*" "#" sel))) + + ((member language '("asp")) + (setq content (replace-regexp-in-string "^[ ]*" "''" sel))) + + (t + (setq content (concat "/* " sel " */"))) + + ) ;cond + + (when content + (delete-region beg end) + (deactivate-mark) + (let (beg end) + (setq beg (point-at-bol)) + (insert content) + (setq end (point-at-eol)) + (indent-region beg end) + ) + ) ;when + + ) ;t + ) ;cond + + (when pos-after (goto-char pos-after)) + + )) + +(defun web-mode-comment-ejs-block (pos) + (let (beg end) + (setq beg (web-mode-block-beginning-position pos) + end (web-mode-block-end-position pos)) + (web-mode-insert-text-at-pos "//" (+ beg 2)))) + +(defun web-mode-comment-erb-block (pos) + (let (beg end) + (setq beg (web-mode-block-beginning-position pos) + end (web-mode-block-end-position pos)) + (web-mode-insert-text-at-pos "#" (+ beg 2)))) + +(defun web-mode-comment-artanis-block (pos) + (let (beg end) + (setq beg (web-mode-block-beginning-position pos) + end (web-mode-block-end-position pos)) + (web-mode-insert-text-at-pos ";" (+ beg 2)))) + +(defun web-mode-comment-django-block (pos) + (let (beg end) + (setq beg (web-mode-block-beginning-position pos) + end (web-mode-block-end-position pos)) + (web-mode-insert-text-at-pos "#" end) + (web-mode-insert-text-at-pos "#" (1+ beg)))) + +(defun web-mode-comment-dust-block (pos) + (let (beg end) + (setq beg (web-mode-block-beginning-position pos) + end (web-mode-block-end-position pos)) + (web-mode-insert-text-at-pos "!" end) + (web-mode-insert-text-at-pos "!" (1+ beg)))) + +(defun web-mode-comment-aspx-block (pos) + (let (beg end) + (setq beg (web-mode-block-beginning-position pos) + end (web-mode-block-end-position pos)) + (web-mode-insert-text-at-pos "#" end) + (web-mode-insert-text-at-pos "#" (1+ beg)))) + +(defun web-mode-comment-jsp-block (pos) + (let (beg end) + (setq beg (web-mode-block-beginning-position pos) + end (web-mode-block-end-position pos)) + (web-mode-insert-text-at-pos "--" (+ beg 2)))) + +(defun web-mode-comment-go-block (pos) + (let (beg end) + (setq beg (web-mode-block-beginning-position pos) + end (web-mode-block-end-position pos)) + (web-mode-insert-text-at-pos "*/" (1- end)) + (web-mode-insert-text-at-pos "/*" (+ beg (if (web-mode-looking-at "{{" beg) 2 0))))) + +(defun web-mode-comment-php-block (pos) + (let (beg end) + (setq beg (web-mode-block-beginning-position pos) + end (web-mode-block-end-position pos)) + (web-mode-insert-text-at-pos "*/" (- end 2)) + (web-mode-insert-text-at-pos "/*" (+ beg 1 (if (web-mode-looking-at "<\\?php" beg) 5 3))))) + +(defun web-mode-comment-svelte-block (pos) + (let (beg end) + (setq beg (web-mode-block-beginning-position pos) + end (web-mode-block-end-position pos)) + (web-mode-insert-text-at-pos "!" end) + (web-mode-insert-text-at-pos "!" (1+ beg)))) + +(defun web-mode-comment-boundaries (&optional pos) + (interactive) + (unless pos (setq pos (point))) + (let ((beg pos) (end pos) prop) + (save-excursion + (goto-char pos) + (setq prop + (cond + ((eq (get-text-property pos 'block-token) 'comment) 'block-token) + ((eq (get-text-property pos 'tag-type) 'comment) 'tag-type) + ((eq (get-text-property pos 'part-token) 'comment) 'part-token) + (t nil) + )) + (if (null prop) + (setq beg nil + end nil) + (when (and (not (bobp)) + (eq (get-text-property pos prop) (get-text-property (1- pos) prop))) + (setq beg (or (previous-single-property-change pos prop) (point-min)))) + (when (and (not (eobp)) + (eq (get-text-property pos prop) (get-text-property (1+ pos) prop))) + (setq end (or (next-single-property-change pos prop) (point-max))))) + (message "beg(%S) end(%S) point-max(%S)" beg end (point-max)) + (when (and beg (string= (buffer-substring-no-properties beg (+ beg 2)) "//")) + (goto-char end) + (while (and (looking-at-p "\n[ ]*//") + (not (eobp))) + (search-forward "//") + (backward-char 2) + ;;(message "%S" (point)) + (setq end (next-single-property-change (point) prop)) + (goto-char end) + ;;(message "%S" (point)) + ) ;while + ) ;when + ;;(when end (setq end (1- end))) ;; #1021 + ) ;save-excursion + ;;(message "beg=%S end=%S" beg end) + (if (and beg end) (cons beg end) nil) + )) + +(defun web-mode-uncomment (pos) + (let ((beg pos) (end pos) (sub2 "") comment boundaries) + (save-excursion + (cond + ((and (get-text-property pos 'block-side) + (intern-soft (concat "web-mode-uncomment-" web-mode-engine "-block"))) + (funcall (intern (concat "web-mode-uncomment-" web-mode-engine "-block")) pos)) + ((and (setq boundaries (web-mode-comment-boundaries pos)) + (setq beg (car boundaries)) + (setq end (1+ (cdr boundaries))) + (> (- end beg) 4)) + (message "%S" boundaries) + ;;(message "beg(%S) end(%S)" beg end) + (setq comment (buffer-substring-no-properties beg end)) + (setq sub2 (substring comment 0 2)) + (cond + ((member sub2 '("$\\)" "" comment))) + ((string= sub2 "{#") + (setq comment (replace-regexp-in-string "\\(^{#[ ]?\\|[ ]?#}$\\)" "" comment))) + ((string= sub2 "{/") ;jsx comments + (setq comment (replace-regexp-in-string "\\(^{/\\*[ ]?\\|[ ]?\\*/}$\\)" "" comment))) + ((string= sub2 "/*") + ;;(message "%S" comment) + ;;(setq comment (replace-regexp-in-string "\\(\\*/\\|^/\\*[ ]?\\|^[ \t]*\\*\\)" "" comment)) + (setq comment (replace-regexp-in-string "\\([ ]?\\*/$\\|^/\\*[ ]?\\)" "" comment)) + (setq comment (replace-regexp-in-string "\\(^[ \t]*\\*\\)" "" comment)) + ;;(message "%S" comment) + ) + ((string= sub2 "//") + (setq comment (replace-regexp-in-string "^ *//" "" comment))) + ) ;cond + (delete-region beg end) + (web-mode-insert-and-indent comment) + (goto-char beg) + ) + ) ;cond + (indent-according-to-mode) + ))) + +(defun web-mode-uncomment-erb-block (pos) + (let (beg end) + (setq beg (web-mode-block-beginning-position pos) + end (web-mode-block-end-position pos)) + (cond + ((string= (buffer-substring-no-properties beg (+ beg 4)) "<%#=") + (web-mode-remove-text-at-pos 1 (+ beg 2))) + ((string-match-p "<[%[:alpha:]]" (buffer-substring-no-properties (+ beg 2) (- end 2))) + (web-mode-remove-text-at-pos 2 (1- end)) + (web-mode-remove-text-at-pos 3 beg)) + (t + (web-mode-remove-text-at-pos 1 (+ beg 2))) + ) ;cond + ) + ) + +(defun web-mode-uncomment-artanis-block (pos) + (let (beg end) + (setq beg (web-mode-block-beginning-position pos) + end (web-mode-block-end-position pos)) + (cond + ((string= (buffer-substring-no-properties beg (+ beg 4)) "<%;=") + (web-mode-remove-text-at-pos 1 (+ beg 2))) + ((string-match-p "<[%[:alpha:]]" (buffer-substring-no-properties (+ beg 2) (- end 2))) + (web-mode-remove-text-at-pos 2 (1- end)) + (web-mode-remove-text-at-pos 3 beg)) + (t + (web-mode-remove-text-at-pos 1 (+ beg 2))) + ) ;cond + ) + ) + +(defun web-mode-uncomment-ejs-block (pos) + (let (beg end) + (setq beg (web-mode-block-beginning-position pos) + end (web-mode-block-end-position pos)) + (web-mode-remove-text-at-pos 1 (+ beg 2)))) + +(defun web-mode-uncomment-django-block (pos) + (let (beg end) + (setq beg (web-mode-block-beginning-position pos) + end (web-mode-block-end-position pos)) + (cond + ((web-mode-looking-at-p "{#[{%]" beg) + (web-mode-remove-text-at-pos 1 (1- end)) + (web-mode-remove-text-at-pos 1 (1+ beg)) + ) + (t + (web-mode-remove-text-at-pos 2 (1- end)) + (web-mode-remove-text-at-pos 2 beg)) + ) ;cond + )) + +(defun web-mode-uncomment-ctemplate-block (pos) + (let (beg end) + (setq beg (web-mode-block-beginning-position pos) + end (web-mode-block-end-position pos)) + (web-mode-remove-text-at-pos 5 (- end 4)) + (web-mode-remove-text-at-pos 5 beg))) + +(defun web-mode-uncomment-dust-block (pos) + (let (beg end) + (setq beg (web-mode-block-beginning-position pos) + end (web-mode-block-end-position pos)) + (web-mode-remove-text-at-pos 1 (1- end)) + (web-mode-remove-text-at-pos 1 (1+ beg)))) + +(defun web-mode-uncomment-aspx-block (pos) + (let (beg end) + (setq beg (web-mode-block-beginning-position pos) + end (web-mode-block-end-position pos)) + (web-mode-remove-text-at-pos 1 (1- end)) + (web-mode-remove-text-at-pos 1 (1+ beg)))) + +(defun web-mode-uncomment-jsp-block (pos) + (let (beg end) + (setq beg (web-mode-block-beginning-position pos) + end (web-mode-block-end-position pos)) + (web-mode-remove-text-at-pos 2 (+ beg 2)))) + +(defun web-mode-uncomment-go-block (pos) + (let (beg end) + (setq beg (web-mode-block-beginning-position pos) + end (web-mode-block-end-position pos)) + (web-mode-remove-text-at-pos 2 (+ beg 2)) + (web-mode-remove-text-at-pos 2 (- end 5)))) + +(defun web-mode-uncomment-svelte-block (pos) + (let (beg end) + (setq beg (web-mode-block-beginning-position pos) + end (web-mode-block-end-position pos)) + (web-mode-remove-text-at-pos 1 (1- end)) + (web-mode-remove-text-at-pos 1 (1+ beg)))) + +(defun web-mode-snippet-names () + (let (codes) + (dolist (snippet web-mode-snippets) + (add-to-list 'codes (car snippet) t)) + codes)) + +(defun web-mode-snippet-insert (code) + "Insert a snippet." + (interactive + (list (completing-read "Snippet: " (web-mode-snippet-names)))) + (let (beg + (continue t) + (counter 0) + end + sel + snippet + (l (length web-mode-snippets)) + pos) + (when mark-active + (setq sel (web-mode-trim (buffer-substring-no-properties + (region-beginning) (region-end)))) + (delete-region (region-beginning) (region-end))) + (while (and continue (< counter l)) + (setq snippet (nth counter web-mode-snippets)) + (when (string= (car snippet) code) + (setq continue nil)) + (setq counter (1+ counter))) + (when snippet + (setq snippet (cdr snippet)) + (setq beg (point-at-bol)) + (insert snippet) + (setq pos (point) + end (point)) + (cond + ((string-match-p "¦" snippet) + (search-backward "¦") + (delete-char 1) + (setq pos (point) + end (1- end))) + ((string-match-p "|" snippet) + (search-backward "|") + (delete-char 1) + (setq pos (point) + end (1- end))) + ) ;cond + (when sel + (insert sel) + (setq pos (point) + end (+ end (length sel)))) + (goto-char end) + (setq end (point-at-eol)) + (unless sel (goto-char pos)) + (indent-region beg end)) + )) + +(defun web-mode-looking-at (regexp pos) + (save-excursion + (goto-char pos) + (looking-at regexp))) + +(defun web-mode-looking-at-p (regexp pos) + (save-excursion + (goto-char pos) + (looking-at-p regexp))) + +(defun web-mode-looking-back (regexp pos &optional limit greedy) + (save-excursion + (goto-char pos) + (if limit + (looking-back regexp limit greedy) + (looking-back regexp (point-min))))) + +(defun web-mode-insert-text-at-pos (text pos) + (let ((mem web-mode-enable-auto-pairing)) + (setq web-mode-enable-auto-pairing nil) + (save-excursion + (goto-char pos) + (insert text) + (setq web-mode-enable-auto-pairing mem) + ))) + +(defun web-mode-remove-text-at-pos (n &optional pos) + (unless pos (setq pos (point))) + (delete-region pos (+ pos n))) + +(defun web-mode-insert-and-indent (text) + (let (beg end) + (setq beg (point-at-bol)) + (insert text) + (setq end (point-at-eol)) + (indent-region beg end) + )) + +(defun web-mode-column-at-pos (pos) + (save-excursion + (goto-char pos) + (current-column))) + +(defun web-mode-indentation-at-pos (pos) + (save-excursion + (goto-char pos) + (current-indentation))) + +(defun web-mode-navigate (&optional pos) + "Move point to the matching opening/closing tag/block." + (interactive) + (unless pos (setq pos (point))) + (let (init) + (goto-char pos) + (setq init (point)) + (when (> (current-indentation) (current-column)) + (back-to-indentation)) + (setq pos (point)) + (cond + ((and (get-text-property pos 'block-side) + (web-mode-block-beginning) + (web-mode-block-controls-get (point))) + (web-mode-block-match)) + ((member (get-text-property pos 'tag-type) '(start end)) + (web-mode-tag-beginning) + (web-mode-tag-match)) + (t + (goto-char init)) + ) + )) + +(defun web-mode-block-match (&optional pos) + (unless pos (setq pos (point))) + (let (pos-ori controls control (counter 1) type (continue t) pair) + (setq pos-ori pos) + (goto-char pos) + (setq controls (web-mode-block-controls-get pos)) + ;;(message "controls=%S" controls) + (cond + (controls + (setq pair (car controls)) + (setq control (cdr pair)) + (setq type (car pair)) + (when (eq type 'inside) (setq type 'close)) + (while continue + (cond + ((and (> pos-ori 1) (bobp)) + (setq continue nil)) + ((or (and (eq type 'open) (not (web-mode-block-next))) + (and (eq type 'close) (not (web-mode-block-previous)))) + (setq continue nil) + ) + ((null (setq controls (web-mode-block-controls-get (point)))) + ) + (t + ;;TODO : est il nécessaire de faire un reverse sur controls si on doit matcher backward + (dolist (pair controls) + (cond + ((not (string= (cdr pair) control)) + ) + ((eq (car pair) 'inside) + ) + ((eq (car pair) type) + (setq counter (1+ counter))) + (t + (setq counter (1- counter))) + ) + ) ;dolist + (when (= counter 0) + (setq continue nil)) + ) ;t + ) ;cond + ) ;while + (if (= counter 0) (point) nil) + ) ;controls + (t + (goto-char pos-ori) + nil + ) ;controls = nul + ) ;conf + )) + +(defun web-mode-tag-match (&optional pos) + "Move point to the matching opening/closing tag." + (interactive) + (unless pos (setq pos (point))) + (let (regexp name) + (cond + ((eq (get-text-property pos 'tag-type) 'void) + (web-mode-tag-beginning)) + ((and (eq (get-text-property pos 'tag-type) 'comment) + (web-mode-looking-at-p " %S %S" pos (get-text-property pos 'jsx-depth)) + ) + ((and blockside + (member (get-text-property pos 'block-token) '(string comment)) + (eq (get-text-property pos 'block-token) (get-text-property (1- pos) 'block-token))) + (setq pos (web-mode-block-token-beginning-position pos))) + ((and (not blockside) + (member (get-text-property pos 'part-token) '(string comment)) + (eq (get-text-property pos 'part-token) (get-text-property (1- pos) 'part-token))) + (setq pos (web-mode-part-token-beginning-position pos))) + ((and (not blockside) + (get-text-property pos 'block-side)) + (when (setq pos (web-mode-block-beginning-position pos)) + (setq pos (1- pos)))) + ((member char '(?\) ?\] ?\})) + (setq pos (web-mode-part-opening-paren-position pos reg-beg)) + (setq pos (1- pos))) + ((and (eq char ?\=) + (web-mode-looking-back "[<>!=]+" pos reg-beg t)) + (setq pos (- pos 1 (length (match-string-no-properties 0))))) + ((member char '(?\( ?\{ ?\[ ?\= ?\< ?\>)) + (web-mode-looking-at ".[ \t\n]*" pos) + (setq continue nil + pos (+ pos (length (match-string-no-properties 0))))) + + ((web-mode-looking-at "\\(return\\)[ \n]" pos) + (setq continue nil + pos (+ pos (length (match-string-no-properties 0))))) + ((and (eq char ?\:) + (web-mode-looking-back "[{,][ \t\n]*[[:alnum:]_]+[ ]*" pos)) + (web-mode-looking-at ".[ \t\n]*" pos) + (setq continue nil + pos (+ pos (length (match-string-no-properties 0))))) + (t + (setq pos (web-mode-rsb-position pos regexp reg-beg)) + (when (not pos) + (cond + (is-jsx + (when (web-mode-looking-at "[ \n]*" reg-beg) + (setq pos (+ reg-beg (length (match-string-no-properties 0))))) + (setq continue nil)) + (t + (message "javascript-statement-beginning-position ** search failure **") + (setq continue nil + pos reg-beg)) + ) ;cond + ) + ) ;t + ) ;cond + ) ;while + ;;(message "%S -------" pos) + pos)) + +(defun web-mode-javascript-args-beginning-position (pos &optional reg-beg) + (unless pos (setq pos (point))) + (setq pos (1- pos)) + (let ((char nil) + (blockside (get-text-property pos 'block-side)) + (i 0) + (continue (not (null pos)))) + (unless reg-beg + (if blockside + (setq reg-beg (web-mode-block-beginning-position pos)) + (setq reg-beg (web-mode-part-beginning-position pos))) + ) + (while continue + (setq char (char-after pos)) + ;;(message "pos(%S) char(%c)" pos char) + (cond + ((> (setq i (1+ i)) 20000) + (message "javascript-args-beginning-position ** warning (%S) **" pos) + (setq continue nil + pos nil)) + ((null pos) + (message "javascript-args-beginning-position ** invalid pos **") + (setq continue nil)) + ((< pos reg-beg) + (message "javascript-args-beginning-position ** failure(position) **") + (setq continue nil + pos reg-beg)) + ((and blockside + (member (get-text-property pos 'block-token) '(string comment)) + (eq (get-text-property pos 'block-token) (get-text-property (1- pos) 'block-token))) + (setq pos (web-mode-block-token-beginning-position pos))) + ((and (not blockside) + (member (get-text-property pos 'part-token) '(string comment)) + (eq (get-text-property pos 'part-token) (get-text-property (1- pos) 'part-token))) + (setq pos (web-mode-part-token-beginning-position pos))) + ((and (not blockside) + (get-text-property pos 'block-side)) + (when (setq pos (web-mode-block-beginning-position pos)) + (setq pos (1- pos))) + ) + ((member char '(?\) ?\] ?\})) + (when (setq pos (web-mode-part-opening-paren-position pos reg-beg)) + (setq pos (1- pos)))) + ((member char '(?\( ?\[ ?\{)) + (web-mode-looking-at ".[ ]*" pos) + (setq pos (+ pos (length (match-string-no-properties 0))) + continue nil) + ) + ((web-mode-looking-at "\\(var\\|let\\|return\\|const\\)[ \n]" pos) + (setq pos (+ pos (length (match-string-no-properties 0))) + continue nil)) + (t + (setq pos (web-mode-rsb-position pos "[\]\[}{)(]\\|\\(var\\|let\\|return\\|const\\)" reg-beg)) + (when (not pos) + (message "javascript-args-beginning-position ** search failure **") + (setq continue nil + pos reg-beg))) + ) ;cond + ) ;while + ;;(message "=%S" pos) + pos)) + +(defun web-mode-javascript-calls-beginning-position (pos &optional reg-beg) + (unless pos (setq pos (point))) + ;;(message "pos=%S" pos) + (let ((char nil) + (dot-pos nil) + (blockside (get-text-property pos 'block-side)) + (i 0) + (continue (not (null pos)))) + (unless reg-beg + (setq reg-beg (if blockside + (web-mode-block-beginning-position pos) + (web-mode-part-beginning-position pos)))) + (while continue + (setq char (char-after pos)) + ;;(message "%S| %S=%c" reg-beg pos char) + (cond + ((> (setq i (1+ i)) 20000) + (message "javascript-calls-beginning-position ** warning (%S) **" pos) + (setq continue nil + pos nil)) + ((null pos) + (message "javascript-calls-beginning-position ** invalid pos **") + (setq continue nil)) + ((< pos reg-beg) + (setq continue nil + pos reg-beg)) + ((and blockside + (member (get-text-property pos 'block-token) '(string comment)) + (eq (get-text-property pos 'block-token) (get-text-property (1- pos) 'block-token))) + (setq pos (web-mode-block-token-beginning-position pos))) + ((and (not blockside) + (member (get-text-property pos 'part-token) '(string comment)) + (eq (get-text-property pos 'part-token) (get-text-property (1- pos) 'part-token))) + (setq pos (web-mode-part-token-beginning-position pos))) + ((and (not blockside) + (get-text-property pos 'block-side)) + (when (setq pos (web-mode-block-beginning-position pos)) + (setq pos (1- pos)))) + ((and (member char '(?\.)) (> i 1)) + (setq dot-pos pos + pos (1- pos))) + ((member char '(?\) ?\])) + (when (setq pos (web-mode-part-opening-paren-position pos reg-beg)) + (setq pos (1- pos))) + ) + ((member char '(?\( ?\{ ?\} ?\[ ?\= ?\? ?\: ?\; ?\, ?\& ?\| ?\>)) + (web-mode-looking-at ".[ \t\n]*" pos) + (setq pos (+ pos (length (match-string-no-properties 0))) + continue nil)) + ((web-mode-looking-at "\\(return\\|else\\)[ \n]" pos) + (setq pos (+ pos (length (match-string-no-properties 0))) + continue nil)) + (t + (setq pos (web-mode-rsb-position pos "[\]\[}{)(=?:;,&|>.]\\|\\(return\\|else\\)" reg-beg)) + (when (not pos) + (message "javascript-calls-beginning-position ** search failure **") + (setq pos reg-beg + continue nil)) + ) ;t + ) ;cond + ) ;while + ;;(message "pos=%S dot-pos=%S" pos dot-pos) + (if (null pos) pos (cons pos dot-pos)) + )) + +(defun web-mode-is-styled-component-string (pos) + (let (beg) + (cond + ((and (setq beg (web-mode-part-token-beginning-position pos)) + (web-mode-looking-at-p "`" beg) + (web-mode-looking-back "styled[[:alnum:].]+" beg)) + beg) + (t + nil) + ) ;cond + )) + +;; Relay.QL , gql, graphql +(defun web-mode-is-ql-string (pos prefix-regexp) + (let (beg) + (cond + ((and (setq beg (web-mode-part-token-beginning-position pos)) + (web-mode-looking-back prefix-regexp beg)) + beg) + (t + nil) + ) ;cond + )) + +(defun web-mode-is-html-string (pos) + (let (beg) + (cond + ((and (setq beg (web-mode-part-token-beginning-position pos)) + (web-mode-looking-at-p "`[ \t\n]*<[a-zA-Z]" beg) + (web-mode-looking-back "\\(template\\|html\\)\\([ ]*[=:][ ]*\\)?" beg)) + beg) + (t + nil) + ) ;cond + )) + +(defun web-mode-part-token-beginning-position (&optional pos) + (unless pos (setq pos (point))) + (cond + ((not (get-text-property pos 'part-token)) + nil) + ((or (= pos (point-min)) + (and (> pos (point-min)) + (not (get-text-property (1- pos) 'part-token)))) + pos) + (t + (setq pos (previous-single-property-change pos 'part-token)) + (if (and pos (> pos (point-min))) pos (point-min))) + )) + +(defun web-mode-part-token-end-position (&optional pos) + (unless pos (setq pos (point))) + (cond + ((not (get-text-property pos 'part-token)) + nil) + ((or (= pos (point-max)) + (not (get-text-property (1+ pos) 'part-token))) + pos) + (t + (1- (next-single-property-change pos 'part-token))) + )) + +(defun web-mode-block-token-beginning-position (&optional pos) + (unless pos (setq pos (point))) + (cond + ((not (get-text-property pos 'block-token)) + nil) + ((or (= pos (point-min)) + (and (> pos (point-min)) + (not (get-text-property (1- pos) 'block-token)))) + pos) + (t + (setq pos (previous-single-property-change pos 'block-token)) + (if (and pos (> pos (point-min))) pos (point-min))) + )) + +(defun web-mode-block-token-end-position (&optional pos) + (unless pos (setq pos (point))) + (cond + ((not (get-text-property pos 'block-token)) + nil) + ((or (= pos (point-max)) + (not (get-text-property (1+ pos) 'block-token))) + pos) + (t + (1- (next-single-property-change pos 'block-token))) + )) + +(defun web-mode-block-code-end-position (&optional pos) + (unless pos (setq pos (point))) + (setq pos (web-mode-block-end-position pos)) + (cond + ((not pos) + nil) + ((and (eq (get-text-property pos 'block-token) 'delimiter-end) + (eq (get-text-property (1- pos) 'block-token) 'delimiter-end)) + (previous-single-property-change pos 'block-token)) + ((= pos (1- (point-max))) ;; TODO: comparer plutot avec line-end-position + (point-max)) + (t + pos) + )) + +(defun web-mode-block-end-position (&optional pos) + (unless pos (setq pos (point))) + (cond + ((get-text-property pos 'block-end) + pos) + ((get-text-property pos 'block-side) + (or (next-single-property-change pos 'block-end) + (point-max))) + (t + nil) + )) + +(defun web-mode-block-previous-position (&optional pos) + (unless pos (setq pos (point))) + (cond + ((= pos (point-min)) + (setq pos nil)) + ((get-text-property pos 'block-side) + (setq pos (web-mode-block-beginning-position pos)) + (cond + ((or (null pos) (= pos (point-min))) + (setq pos nil) + ) + ((and (setq pos (previous-single-property-change pos 'block-beg)) + (> pos (point-min))) + (setq pos (1- pos)) + ) + ) + ) ;block-side + ((get-text-property (1- pos) 'block-side) + (setq pos (web-mode-block-beginning-position (1- pos))) + ) + (t + (setq pos (previous-single-property-change pos 'block-side)) + (cond + ((and (null pos) (get-text-property (point-min) 'block-beg)) + (setq pos (point-min))) + ((and pos (> pos (point-min))) + (setq pos (web-mode-block-beginning-position (1- pos)))) + ) + ) + ) ;conf + pos) + +(defun web-mode-block-next-position (&optional pos limit) + (unless pos (setq pos (point))) + (unless limit (setq limit (point-max))) + (cond + ((and (get-text-property pos 'block-side) + (setq pos (web-mode-block-end-position pos)) + (< pos (point-max)) + (setq pos (1+ pos))) + (unless (get-text-property pos 'block-beg) + (setq pos (next-single-property-change pos 'block-side))) + ) + (t + (setq pos (next-single-property-change pos 'block-side))) + ) ;cond + (if (and pos (<= pos limit)) pos nil)) + +;;---- EXCURSION --------------------------------------------------------------- + +(defun web-mode-backward-sexp (n) + (interactive "p") + (if (< n 0) (web-mode-forward-sexp (- n)) + (let (pos) + (dotimes (_ n) + (skip-chars-backward "[:space:]") + (setq pos (point)) + (cond + ((bobp) nil) + ((get-text-property (1- pos) 'block-end) + (backward-char 1) + (web-mode-block-beginning)) + ((get-text-property (1- pos) 'block-token) + (backward-char 1) + (web-mode-block-token-beginning)) + ((get-text-property (1- pos) 'part-token) + (backward-char 1) + (web-mode-part-token-beginning)) + ((get-text-property (1- pos) 'tag-end) + (backward-char 1) + (web-mode-element-beginning)) + ((get-text-property (1- pos) 'tag-attr) + (backward-char 1) + (web-mode-attribute-beginning)) + ((get-text-property (1- pos) 'tag-type) + (backward-char 1) + (web-mode-tag-beginning)) + ((get-text-property (1- pos) 'jsx-end) + (backward-char 1) + (web-mode-jsx-beginning)) + (t + (let ((forward-sexp-function nil)) + (backward-sexp)) + ) ;case t + ) ;cond + ) ;dotimes + ))) ;let if defun + +(defun web-mode-forward-sexp (n) + (interactive "p") + (if (< n 0) (web-mode-backward-sexp (- n)) + (let (pos) + (dotimes (_ n) + (skip-chars-forward "[:space:]") + (setq pos (point)) + (cond + ((eobp) nil) + ((get-text-property pos 'block-beg) + (web-mode-block-end)) + ((get-text-property pos 'block-token) + (web-mode-block-token-end)) + ((get-text-property pos 'part-token) + (web-mode-part-token-end)) + ((get-text-property pos 'tag-beg) + (web-mode-element-end)) + ((get-text-property pos 'tag-attr) + (web-mode-attribute-end)) + ((get-text-property pos 'tag-type) + (web-mode-tag-end)) + ((get-text-property pos 'jsx-beg) + (web-mode-jsx-end)) + (t + (let ((forward-sexp-function nil)) + (forward-sexp)) + ) ;case t + ) ;cond + ) ;dotimes + ))) ;let if defun + +(defun web-mode-comment-beginning () + "Fetch current comment beg." + (interactive) + (web-mode-go (web-mode-comment-beginning-position (point)))) + +(defun web-mode-comment-end () + "Fetch current comment end." + (interactive) + (web-mode-go (web-mode-comment-end-position (point)) 1)) + +(defun web-mode-tag-beginning () + "Fetch current html tag beg." + (interactive) + (web-mode-go (web-mode-tag-beginning-position (point)))) + +(defun web-mode-tag-end () + "Fetch current html tag end." + (interactive) + (web-mode-go (web-mode-tag-end-position (point)) 1)) + +(defun web-mode-tag-previous () + "Fetch previous tag." + (interactive) + (web-mode-go (web-mode-tag-previous-position (point)))) + +(defun web-mode-tag-next () + "Fetch next tag. Might be html comment or server tag (e.g. jsp)." + (interactive) + (web-mode-go (web-mode-tag-next-position (point)))) + +(defun web-mode-attribute-beginning () + "Fetch html attribute beginning." + (interactive) + (web-mode-go (web-mode-attribute-beginning-position (point)))) + +(defun web-mode-attribute-end () + "Fetch html attribute end." + (interactive) + (web-mode-go (web-mode-attribute-end-position (point)) 1)) + +(defun web-mode-attribute-next (&optional arg) + "Fetch next attribute." + (interactive "p") + (unless arg (setq arg 1)) + (cond + ((= arg 1) (web-mode-go (web-mode-attribute-next-position (point)))) + ((< arg 1) (web-mode-element-previous (* arg -1))) + (t + (while (>= arg 1) + (setq arg (1- arg)) + (web-mode-go (web-mode-attribute-next-position (point))) + ) + ) + ) + ) + +(defun web-mode-attribute-previous (&optional arg) + "Fetch previous attribute." + (interactive "p") + (unless arg (setq arg 1)) + (unless arg (setq arg 1)) + (cond + ((= arg 1) (web-mode-go (web-mode-attribute-previous-position (point)))) + ((< arg 1) (web-mode-element-next (* arg -1))) + (t + (while (>= arg 1) + (setq arg (1- arg)) + (web-mode-go (web-mode-attribute-previous-position (point))) + ) + ) + ) + ) + +(defun web-mode-element-previous (&optional arg) + "Fetch previous element." + (interactive "p") + (unless arg (setq arg 1)) + (cond + ((= arg 1) (web-mode-go (web-mode-element-previous-position (point)))) + ((< arg 1) (web-mode-element-next (* arg -1))) + (t + (while (>= arg 1) + (setq arg (1- arg)) + (web-mode-go (web-mode-element-previous-position (point))) + ) ;while + ) ;t + ) ;cond + ) + +(defun web-mode-element-next (&optional arg) + "Fetch next element." + (interactive "p") + (unless arg (setq arg 1)) + (cond + ((= arg 1) (web-mode-go (web-mode-element-next-position (point)))) + ((< arg 1) (web-mode-element-previous (* arg -1))) + (t + (while (>= arg 1) + (setq arg (1- arg)) + (web-mode-go (web-mode-element-next-position (point))) + ) ;while + ) ;t + ) ;cond + ) + +(defun web-mode-element-sibling-next () + "Fetch next sibling element." + (interactive) + (let ((pos (point))) + (save-excursion + (cond + ((not (get-text-property pos 'tag-type)) + (if (and (web-mode-element-parent) + (web-mode-tag-match) + (web-mode-tag-next) + (member (get-text-property (point) 'tag-type) '(start void comment))) + (setq pos (point)) + (setq pos nil)) + ) + ((member (get-text-property pos 'tag-type) '(start void)) + (if (and (web-mode-tag-match) + (web-mode-tag-next) + (member (get-text-property (point) 'tag-type) '(start void comment))) + (setq pos (point)) + (setq pos nil)) + ) + ((and (web-mode-tag-next) + (member (get-text-property (point) 'tag-type) '(start void comment))) + (setq pos (point))) + (t + (setq pos nil)) + ) ;cond + ) ;save-excursion + (web-mode-go pos))) + +(defun web-mode-element-sibling-previous () + "Fetch previous sibling element." + (interactive) + (let ((pos (point))) + (save-excursion + (cond + ((not (get-text-property pos 'tag-type)) + (if (and (web-mode-element-parent) + (web-mode-tag-previous) + (web-mode-element-beginning)) + (setq pos (point)) + (setq pos nil)) + ) + ((eq (get-text-property pos 'tag-type) 'start) + (if (and (web-mode-tag-beginning) + (web-mode-tag-previous) + (web-mode-element-beginning)) + (setq pos (point)) + (setq pos nil)) + ) + ((and (web-mode-element-beginning) + (web-mode-tag-previous) + (web-mode-element-beginning)) + (setq pos (point))) + (t + (setq pos nil)) + ) ;cond + ) ;save-excursion + (web-mode-go pos))) + +(defun web-mode-element-beginning () + "Move to beginning of element." + (interactive) + (web-mode-go (web-mode-element-beginning-position (point)))) + +(defun web-mode-element-end () + "Move to end of element." + (interactive) + (web-mode-go (web-mode-element-end-position (point)) 1)) + +(defun web-mode-element-parent () + "Fetch parent element." + (interactive) + (web-mode-go (web-mode-element-parent-position (point)))) + +(defun web-mode-element-child () + "Fetch child element." + (interactive) + (web-mode-go (web-mode-element-child-position (point)))) + +(defun web-mode-dom-traverse () + "Traverse html dom tree." + (interactive) + (cond + ((web-mode-element-child) + ) + ((web-mode-element-sibling-next) + ) + ((and (web-mode-element-parent) + (not (web-mode-element-sibling-next))) + (goto-char (point-min))) + (t + (goto-char (point-min))) + ) ;cond + ) + +(defun web-mode-closing-paren (limit) + (let ((pos (web-mode-closing-paren-position (point) limit))) + (if (or (null pos) (> pos limit)) + nil + (goto-char pos) + pos) + )) + +(defun web-mode-part-next () + "Move point to the beginning of the next part." + (interactive) + (web-mode-go (web-mode-part-next-position (point)))) + +(defun web-mode-part-beginning () + "Move point to the beginning of the current part." + (interactive) + (web-mode-go (web-mode-part-beginning-position (point)))) + +(defun web-mode-part-end () + "Move point to the end of the current part." + (interactive) + (web-mode-go (web-mode-part-end-position (point)) 1)) + +(defun web-mode-block-previous () + "Move point to the beginning of the previous block." + (interactive) + (web-mode-go (web-mode-block-previous-position (point)))) + +(defun web-mode-block-next () + "Move point to the beginning of the next block." + (interactive) + (web-mode-go (web-mode-block-next-position (point)))) + +(defun web-mode-block-beginning () + "Move point to the beginning of the current block." + (interactive) + (web-mode-go (web-mode-block-beginning-position (point)))) + +(defun web-mode-block-end () + "Move point to the end of the current block." + (interactive) + (web-mode-go (web-mode-block-end-position (point)) 1)) + +(defun web-mode-block-token-beginning () + (web-mode-go (web-mode-block-token-beginning-position (point)))) + +(defun web-mode-block-token-end () + (web-mode-go (web-mode-block-token-end-position (point)) 1)) + +(defun web-mode-part-token-beginning () + (web-mode-go (web-mode-part-token-beginning-position (point)))) + +(defun web-mode-part-token-end () + (web-mode-go (web-mode-part-token-end-position (point)) 1)) + +(defun web-mode-block-opening-paren (limit) + (web-mode-go (web-mode-block-opening-paren-position (point) limit))) + +(defun web-mode-block-string-beginning (&optional pos block-beg) + (unless pos (setq pos (point))) + (unless block-beg (setq block-beg (web-mode-block-beginning-position pos))) + (web-mode-go (web-mode-block-string-beginning-position pos block-beg))) + +(defun web-mode-block-statement-beginning (pos block-beg is-ternary) + (unless pos (setq pos (point))) + (unless block-beg (setq block-beg (web-mode-block-beginning-position pos))) + (web-mode-go (web-mode-block-statement-beginning-position pos block-beg is-ternary))) + +(defun web-mode-block-args-beginning (&optional pos block-beg) + (unless pos (setq pos (point))) + (unless block-beg (setq block-beg (web-mode-block-beginning-position pos))) + (web-mode-go (web-mode-block-args-beginning-position pos block-beg))) + +(defun web-mode-block-calls-beginning (&optional pos block-beg) + (unless pos (setq pos (point))) + (unless block-beg (setq block-beg (web-mode-block-beginning-position pos))) + (web-mode-go (web-mode-block-calls-beginning-position pos block-beg))) + +(defun web-mode-javascript-string-beginning (&optional pos reg-beg) + (unless pos (setq pos (point))) + (unless reg-beg + (if (get-text-property pos 'block-side) + (setq reg-beg (web-mode-block-beginning-position pos)) + (setq reg-beg (web-mode-part-beginning-position pos)))) + (web-mode-go (web-mode-javascript-string-beginning-position pos reg-beg))) + +(defun web-mode-javascript-statement-beginning (pos reg-beg is-ternary) + (unless pos (setq pos (point))) + (unless reg-beg + (if (get-text-property pos 'block-side) + (setq reg-beg (web-mode-block-beginning-position pos)) + (setq reg-beg (web-mode-part-beginning-position pos)))) + (web-mode-go (web-mode-javascript-statement-beginning-position pos reg-beg is-ternary))) + +(defun web-mode-javascript-args-beginning (&optional pos reg-beg) + (unless pos (setq pos (point))) + (unless reg-beg + (setq reg-beg (if (get-text-property pos 'block-side) + (web-mode-block-beginning-position pos) + (web-mode-part-beginning-position pos)))) + ;;(message "reg-beg%S" reg-beg) + (web-mode-go (web-mode-javascript-args-beginning-position pos reg-beg))) + +(defun web-mode-javascript-calls-beginning (&optional pos reg-beg) + (unless pos (setq pos (point))) + (unless reg-beg + (if (get-text-property pos 'block-side) + (setq reg-beg (web-mode-block-beginning-position pos)) + (setq reg-beg (web-mode-part-beginning-position pos)))) + (let (pair) + (setq pair (web-mode-javascript-calls-beginning-position pos reg-beg)) + (when pair (web-mode-go (car pair))) + )) + +(defun web-mode-go (pos &optional offset) + (unless offset (setq offset 0)) + (when pos + (cond + ((and (> offset 0) (<= (+ pos offset) (point-max))) + (setq pos (+ pos offset))) + ((and (< offset 0) (>= (+ pos offset) (point-min))) + (setq pos (+ pos offset))) + ) ;cond + (goto-char pos)) + pos) + +;;---- SEARCH ------------------------------------------------------------------ + +(defun web-mode-rsf-balanced (regexp-open regexp-close &optional limit noerror) + (unless noerror (setq noerror t)) + (let ((continue t) + (level 1) + (pos (point)) + ret + (regexp (concat regexp-open "\\|" regexp-close))) + (while continue + (setq ret (re-search-forward regexp limit noerror)) + (cond + ((null ret) + (setq continue nil) + ) + (t + (if (string-match-p regexp-open (match-string-no-properties 0)) + (setq level (1+ level)) + (setq level (1- level))) + (when (< level 1) + (setq continue nil) + ) + ) ;t + ) ;cond + ) ;while + (when (not (= level 0)) (goto-char pos)) + ret)) + +(defun web-mode-block-sb (expr &optional limit noerror) + (unless limit (setq limit (web-mode-block-beginning-position (point)))) + (unless noerror (setq noerror t)) + (let ((continue t) ret) + (while continue + (setq ret (search-backward expr limit noerror)) + (when (or (null ret) + (not (get-text-property (point) 'block-token))) + (setq continue nil) + ) ;when + ) ;while + ret)) + +(defun web-mode-block-sf (expr &optional limit noerror) + (unless limit (setq limit (web-mode-block-end-position (point)))) + (unless noerror (setq noerror t)) + (let ((continue t) ret) + (while continue + (setq ret (search-forward expr limit noerror)) + (when (or (null ret) + (not (get-text-property (point) 'block-token))) + (setq continue nil) + ) ;when + ) ;while + ret)) + +(defun web-mode-block-rsb (regexp &optional limit noerror) + (unless limit (setq limit (web-mode-block-beginning-position (point)))) + (unless noerror (setq noerror t)) + (let ((continue t) ret) + (while continue + (setq ret (re-search-backward regexp limit noerror)) + (when (or (null ret) + (not (get-text-property (point) 'block-token))) + (setq continue nil) + ) ;when + ) ;while + ret)) + +(defun web-mode-block-rsf (regexp &optional limit noerror) + (unless limit (setq limit (web-mode-block-end-position (point)))) + (unless noerror (setq noerror t)) + (let ((continue t) ret) + (while continue + (setq ret (re-search-forward regexp limit noerror)) + (when (or (null ret) + (not (get-text-property (point) 'block-token))) + (setq continue nil) + ) ;when + ) ;while + ret)) + +(defun web-mode-part-sb (expr &optional limit noerror) + (unless limit (setq limit (web-mode-part-beginning-position (point)))) + (unless noerror (setq noerror t)) + (let ((continue t) ret) + (while continue + (setq ret (search-backward expr limit noerror)) + (when (or (null ret) + (and (not (get-text-property (point) 'part-token)) + (not (get-text-property (point) 'block-side))) + ) + (setq continue nil) + ) ;when + ) ;while + ret)) + +(defun web-mode-part-sf (expr &optional limit noerror) + (unless limit (setq limit (web-mode-part-end-position (point)))) + (unless noerror (setq noerror t)) + (let ((continue t) ret) + (while continue + (setq ret (search-forward expr limit noerror)) + (when (or (null ret) + (and (not (get-text-property (point) 'part-token)) + (not (get-text-property (point) 'block-side))) + ) + (setq continue nil) + ) ;when + ) ;while + ret)) + +(defun web-mode-part-rsb (regexp &optional limit noerror) + (unless limit (setq limit (web-mode-part-beginning-position (point)))) + (unless noerror (setq noerror t)) + (let ((continue t) ret) + (while continue + (setq ret (re-search-backward regexp limit noerror)) + (when (or (null ret) + (and (not (get-text-property (point) 'part-token)) + (not (get-text-property (point) 'block-side))) + ) + (setq continue nil) + ) ;when + ) ;while + ret)) + +(defun web-mode-part-rsf (regexp &optional limit noerror) + (unless limit (setq limit (web-mode-part-end-position (point)))) + (unless noerror (setq noerror t)) + (let ((continue t) ret) + (while continue + (setq ret (re-search-forward regexp limit t)) + (when (or (null ret) + (and (not (get-text-property (point) 'part-token)) + (not (get-text-property (point) 'block-side))) + ) + (setq continue nil) + ) ;when + ) ;while + ret)) + +(defun web-mode-javascript-rsb (regexp &optional limit noerror) + (unless limit (setq limit (web-mode-part-beginning-position (point)))) + (unless noerror (setq noerror t)) + (let ((continue t) ret) + (while continue + (setq ret (re-search-backward regexp limit noerror)) + (when (or (null ret) + (and (not (get-text-property (point) 'part-token)) + (not (get-text-property (point) 'block-side)) + (not (get-text-property (point) 'jsx-depth))) + ) + (setq continue nil) + ) ;when + ) ;while + ret)) + +(defun web-mode-javascript-rsf (regexp &optional limit noerror) + (unless limit (setq limit (web-mode-part-end-position (point)))) + (unless noerror (setq noerror t)) + (let ((continue t) ret) + (while continue + (setq ret (re-search-forward regexp limit t)) + (when (or (null ret) + (and (not (get-text-property (point) 'part-token)) + (not (get-text-property (point) 'block-side)) + (not (get-text-property (point) 'jsx-depth))) + ) + (setq continue nil) + ) ;when + ) ;while + ret)) + +(defun web-mode-dom-sf (expr &optional limit noerror) + (unless noerror (setq noerror t)) + (let ((continue t) ret) + (while continue + (setq ret (search-forward expr limit noerror)) + (if (or (null ret) + (not (get-text-property (- (point) (length expr)) 'block-side))) + (setq continue nil)) + ) + ret)) + +(defun web-mode-dom-rsf (regexp &optional limit noerror) + (unless noerror (setq noerror t)) + (let ((continue t) (ret nil)) + (while continue + (setq ret (re-search-forward regexp limit noerror)) + ;; (message "ret=%S point=%S limit=%S i=%S" ret (point) limit 0) + (cond + ((null ret) + (setq continue nil)) + ((or (get-text-property (match-beginning 0) 'block-side) + (get-text-property (match-beginning 0) 'part-token)) + ) + (t + (setq continue nil)) + ) ;cond + ) ;while + ret)) + +(defun web-mode-rsb-position (pos regexp &optional limit noerror) + (unless noerror (setq noerror t)) + (save-excursion + (goto-char pos) + (if (re-search-backward regexp limit noerror) (point) nil) + )) + +(defun web-mode-rsb (regexp &optional limit noerror) + (unless noerror (setq noerror t)) + (let ((continue t) ret) + (while continue + (setq ret (re-search-backward regexp limit noerror)) + (if (or (null ret) + (not (web-mode-is-comment-or-string))) + (setq continue nil))) + ret)) + +(defun web-mode-rsf (regexp &optional limit noerror) + (unless noerror (setq noerror t)) + (let ((continue t) ret) + (while continue + (setq ret (re-search-forward regexp limit noerror)) + (if (or (null ret) + (not (web-mode-is-comment-or-string))) + (setq continue nil)) + ) + ret)) + +(defun web-mode-sb (expr &optional limit noerror) + (unless noerror (setq noerror t)) + (let ((continue t) ret) + (while continue + (setq ret (search-backward expr limit noerror)) + (if (or (null ret) + (not (web-mode-is-comment-or-string))) + (setq continue nil))) + ret)) + +(defun web-mode-sf (expr &optional limit noerror) + (unless noerror (setq noerror t)) + (let ((continue t) ret) + (while continue + (setq ret (search-forward expr limit noerror)) + (if (or (null ret) + (not (web-mode-is-comment-or-string))) + (setq continue nil))) + ret)) + +(defun web-mode-content-rsf (regexp &optional limit noerror) + (unless noerror (setq noerror t)) + (let ((continue t) ret beg end) + (while continue + (setq ret (re-search-forward regexp limit noerror) + beg (if (null ret) (point) (match-beginning 0)) + end (if (null ret) (point) (1- (match-end 0)))) + (if (or (null ret) + (and (web-mode-is-content beg) + (web-mode-is-content end))) + (setq continue nil))) + ret)) + +;;---- ADVICES ----------------------------------------------------------------- + +(defadvice ac-start (before web-mode-set-up-ac-sources activate) + "Set `ac-sources' based on current language before running auto-complete." + (when (equal major-mode 'web-mode) + ;; set ignore each time to nil. User has to implement a hook to change it + ;; for each completion + (setq web-mode-ignore-ac-start-advice nil) + (run-hooks 'web-mode-before-auto-complete-hooks) + (unless web-mode-ignore-ac-start-advice + (when web-mode-ac-sources-alist + (let ((new-web-mode-ac-sources + (assoc (web-mode-language-at-pos) + web-mode-ac-sources-alist))) + (setq ac-sources (cdr new-web-mode-ac-sources))))))) + +;;---- MINOR MODE ADDONS ------------------------------------------------------- + +(defun web-mode-yasnippet-exit-hook () + "Yasnippet exit hook" + (when (and (boundp 'yas-snippet-beg) (boundp 'yas-snippet-end)) + (indent-region yas-snippet-beg yas-snippet-end))) + +(defun web-mode-imenu-index () + (interactive) + "Returns imenu items." + (let (toc-index + line) + (save-excursion + (goto-char (point-min)) + (while (not (eobp)) + (setq line (buffer-substring-no-properties + (line-beginning-position) + (line-end-position))) + (let (found + (i 0) + item + regexp + type + type-idx + content + content-idx + content-regexp + close-tag-regexp + concat-str + jumpto + str) + (while (and (not found ) (< i (length web-mode-imenu-regexp-list))) + (setq item (nth i web-mode-imenu-regexp-list)) + (setq regexp (nth 0 item)) + (setq type-idx (nth 1 item)) + (setq content-idx (nth 2 item)) + (setq concat-str (nth 3 item)) + (when (not (numberp content-idx)) + (setq content-regexp (nth 2 item) + close-tag-regexp (nth 4 item) + content-idx nil)) + + (when (string-match regexp line) + + (cond + (content-idx + (setq type (match-string type-idx line)) + (setq content (match-string content-idx line)) + (setq str (concat type concat-str content)) + (setq jumpto (line-beginning-position))) + (t + (let (limit) + (setq type (match-string type-idx line)) + (goto-char (line-beginning-position)) + (save-excursion + (setq limit (re-search-forward close-tag-regexp (point-max) t))) + + (when limit + (when (re-search-forward content-regexp limit t) + (setq content (match-string 1)) + (setq str (concat type concat-str content)) + (setq jumpto (line-beginning-position)) + ) + ))) + ) + (when str (setq toc-index + (cons (cons str jumpto) + toc-index) + ) + (setq found t)) + ) + (setq i (1+ i)))) + (forward-line) + (goto-char (line-end-position)) ;; make sure we are at eobp + )) + (nreverse toc-index))) + +;;---- UNIT TESTING ------------------------------------------------------------ + +(defun web-mode-test () + "Executes web-mode unit tests. See `web-mode-tests-directory'." + (interactive) + (let (files ret regexp) + (setq regexp "^[[:alnum:]][[:alnum:]._]+\\'") + (setq files (directory-files web-mode-tests-directory t regexp)) + (dolist (file files) + (cond + ((eq (string-to-char (file-name-nondirectory file)) ?\_) + (delete-file file)) + (t + (setq ret (web-mode-test-process file))) + ) ;cond + ) ;dolist + )) + +(defun web-mode-test-process (file) + (with-temp-buffer + (let (out sig1 sig2 success err) + (setq-default indent-tabs-mode nil) + (if (string-match-p "sql" file) + (setq web-mode-enable-sql-detection t) + (setq web-mode-enable-sql-detection nil)) + (insert-file-contents file) + (set-visited-file-name file) + (web-mode) + (setq sig1 (md5 (current-buffer))) + (delete-horizontal-space) + (while (not (eobp)) + (forward-line) + (delete-horizontal-space) + (end-of-line)) + (web-mode-buffer-indent) + (setq sig2 (md5 (current-buffer))) + (setq success (string= sig1 sig2)) + (setq out (concat (if success "ok" "ko") " : " (file-name-nondirectory file) "\n")) + (princ out) + (setq err (concat (file-name-directory file) "_err." (file-name-nondirectory file))) + (if success + (when (file-readable-p err) + (delete-file err)) + (write-file err) + (message "[%s]" (buffer-string)) + ) ;if + out))) + +;;---- MISC -------------------------------------------------------------------- + +(defun web-mode-set-engine (engine) + "Set the engine for the current buffer." + (interactive + (list (completing-read + "Engine: " + (let (engines) + (dolist (elt web-mode-engines) + (setq engines (append engines (list (car elt))))) + engines)))) + (setq web-mode-content-type "html" + web-mode-engine (web-mode-engine-canonical-name engine) + web-mode-minor-engine engine) + (web-mode-on-engine-setted) + (web-mode-buffer-highlight)) + +(defun web-mode-set-content-type (content-type) + "Set the content-type for the current buffer" + (interactive (list (completing-read "Content-type: " web-mode-part-content-types))) + (setq web-mode-content-type content-type) + (when (called-interactively-p 'any) + ) + (web-mode-buffer-highlight)) + +(defun web-mode-on-engine-setted () + (let (elt elts engines) + + (when (string= web-mode-engine "razor") (setq web-mode-enable-block-face t)) + (setq web-mode-engine-attr-regexp (cdr (assoc web-mode-engine web-mode-engine-attr-regexps))) + (setq web-mode-engine-token-regexp (cdr (assoc web-mode-engine web-mode-engine-token-regexps))) + + ;;(message "%S %S %S" web-mode-engine web-mode-engine-attr-regexp web-mode-engine-token-regexp) + + (when (null web-mode-minor-engine) + (setq web-mode-minor-engine "none")) + + (setq elt (assoc web-mode-engine web-mode-engine-open-delimiter-regexps)) + (cond + (elt + (setq web-mode-block-regexp (cdr elt))) + ((string= web-mode-engine "archibus") + (setq web-mode-block-regexp nil)) + (t + (setq web-mode-engine "none")) + ) + + (unless (boundp 'web-mode-extra-auto-pairs) + (setq web-mode-extra-auto-pairs nil)) + + (setq web-mode-auto-pairs + (append + (cdr (assoc web-mode-engine web-mode-engines-auto-pairs)) + (cdr (assoc nil web-mode-engines-auto-pairs)) + (cdr (assoc web-mode-engine web-mode-extra-auto-pairs)) + (cdr (assoc nil web-mode-extra-auto-pairs)))) + + (unless (boundp 'web-mode-extra-snippets) + (setq web-mode-extra-snippets nil)) + + (setq elts + (append + (cdr (assoc web-mode-engine web-mode-extra-snippets)) + (cdr (assoc nil web-mode-extra-snippets)) + (cdr (assoc web-mode-engine web-mode-engines-snippets)) + (cdr (assoc nil web-mode-engines-snippets)))) + + ;;(message "%S" elts) + + (dolist (elt elts) + (unless (assoc (car elt) web-mode-snippets) + (setq web-mode-snippets (append (list elt) web-mode-snippets))) + ) + + (setq web-mode-engine-font-lock-keywords + (symbol-value (cdr (assoc web-mode-engine web-mode-engines-font-lock-keywords)))) + + (when (and (string= web-mode-minor-engine "jinja") + (not (member "endtrans" web-mode-django-control-blocks))) + (add-to-list 'web-mode-django-control-blocks "endtrans") + (setq web-mode-django-control-blocks-regexp + (regexp-opt web-mode-django-control-blocks t)) + ) + + (when (string= web-mode-engine "spip") + (modify-syntax-entry ?# "w" (syntax-table))) + +;; (message "%S" (symbol-value (cdr (assoc web-mode-engine web-mode-engines-font-lock-keywords)))) + + )) + +(defun web-mode-detect-engine () + (save-excursion + (goto-char (point-min)) + (when (re-search-forward "-\\*- engine:[ ]*\\([[:alnum:]-]+\\)[ ]*-\\*-" web-mode-chunk-length t) + (setq web-mode-minor-engine (match-string-no-properties 1)) + (setq web-mode-engine (web-mode-engine-canonical-name web-mode-minor-engine))) + web-mode-minor-engine)) + +(defun web-mode-guess-engine-and-content-type () + (let (buff-name elt found) + + (setq buff-name (buffer-file-name)) + (unless buff-name (setq buff-name (buffer-name))) + (setq web-mode-is-scratch (string= buff-name "*scratch*")) + (setq web-mode-content-type nil) + + (when (boundp 'web-mode-content-types-alist) + (setq found nil) + (dolist (elt web-mode-content-types-alist) + (when (and (not found) (string-match-p (cdr elt) buff-name)) + (setq web-mode-content-type (car elt) + found t)) + ) ;dolist + ) ;when + + (unless web-mode-content-type + (setq found nil) + (dolist (elt web-mode-content-types) + (when (and (not found) (string-match-p (cdr elt) buff-name)) + (setq web-mode-content-type (car elt) + found t)) + ) ;dolist + ) ;unless + + (when (boundp 'web-mode-engines-alist) + (setq found nil) + (dolist (elt web-mode-engines-alist) + (cond + ((stringp (cdr elt)) + (when (string-match-p (cdr elt) buff-name) + (setq web-mode-engine (car elt)))) + ((functionp (cdr elt)) + (when (funcall (cdr elt)) + (setq web-mode-engine (car elt)))) + ) ;cond + ) ;dolist + ) ;when + + (unless web-mode-engine + (setq found nil) + (dolist (elt web-mode-engine-file-regexps) + ;;(message "%S %S" (cdr elt) buff-name) + (when (and (not found) (string-match-p (cdr elt) buff-name)) + (setq web-mode-engine (car elt) + found t)) + ) + ) + + (when (and (or (null web-mode-engine) (string= web-mode-engine "none")) + (string-match-p "php" (buffer-substring-no-properties + (line-beginning-position) + (line-end-position)))) + (setq web-mode-engine "php")) + + (when (and (string= web-mode-content-type "javascript") + (string-match-p "@jsx" + (buffer-substring-no-properties + (point-min) + (if (< (point-max) web-mode-chunk-length) + (point-max) + web-mode-chunk-length) + ))) + (setq web-mode-content-type "jsx")) + + (when web-mode-engine + (setq web-mode-minor-engine web-mode-engine + web-mode-engine (web-mode-engine-canonical-name web-mode-engine)) + ) + + (when (and (or (null web-mode-engine) + (string= web-mode-engine "none")) + web-mode-enable-engine-detection) + (web-mode-detect-engine)) + + (web-mode-on-engine-setted) + + )) + +(defun web-mode-engine-canonical-name (name) + (let (engine) + (cond + ((null name) + nil) + ((assoc name web-mode-engines) + name) + (t + (dolist (elt web-mode-engines) + (when (and (null engine) (member name (cdr elt))) + (setq engine (car elt))) + ) ;dolist + engine) + ))) + +(defun web-mode-on-after-save () + (when web-mode-is-scratch + (web-mode-guess-engine-and-content-type) + (web-mode-buffer-highlight)) + nil) + +(defun web-mode-on-exit () + (web-mode-with-silent-modifications + (put-text-property (point-min) (point-max) 'invisible nil) + (remove-overlays) + (remove-hook 'change-major-mode-hook 'web-mode-on-exit t) + )) + +(defun web-mode-file-link (file) + "Insert a link to a file in html document. This function can be +extended to support more filetypes by customizing +`web-mode-links'." + (interactive + (list (file-relative-name (read-file-name "Link file: ")))) + (let ((matched nil) + (point-line (line-number-at-pos)) + (point-column (current-column))) + (dolist (type web-mode-links) + (when (string-match (car type) file) + (setq matched t) + (when (nth 2 type) + (goto-char (point-min)) + (search-forward "") + (backward-char 7) + (open-line 1)) + (insert (format (cadr type) file)) + (indent-for-tab-command) + (when (nth 2 type) + ;; return point where it was and fix indentation + (forward-line) + (indent-for-tab-command) + (if (> point-line (- (line-number-at-pos) 2)) + (forward-line (+ (- point-line (line-number-at-pos)) 1)) + (forward-line (- point-line (line-number-at-pos)))) + (move-to-column point-column)) + ;; move point back if needed + (backward-char (nth 3 type)))) + (when (not matched) + (user-error "Unknown file type")))) + +(defun web-mode-reload () + "Reload web-mode." + (interactive) + (web-mode-with-silent-modifications + (put-text-property (point-min) (point-max) 'invisible nil) + (remove-overlays) + (setq font-lock-unfontify-region-function 'font-lock-default-unfontify-region) + (load "web-mode.el") + (setq web-mode-change-beg nil + web-mode-change-end nil) + (web-mode) + )) + +(defun web-mode-trace (msg) + (let (sub) + (when (null web-mode-time) (setq web-mode-time (current-time))) + (setq sub (time-subtract (current-time) web-mode-time)) + (when nil + (save-excursion + (let ((n 0)) + (goto-char (point-min)) + (while (web-mode-tag-next) + (setq n (1+ n)) + ) + (message "%S tags found" n) + ))) + (message "%18s: time elapsed = %Ss %9Sµs" msg (nth 1 sub) (nth 2 sub)) + )) + +(defun web-mode-reveal () + "Display text properties at point." + (interactive) + (let (symbols out) + (setq out (format + "[point=%S engine=%S minor=%S content-type=%S language-at-pos=%S]\n" + (point) + web-mode-engine + web-mode-minor-engine + web-mode-content-type + (web-mode-language-at-pos (point)))) + (setq symbols (append web-mode-scan-properties '(font-lock-face face))) + (dolist (symbol symbols) + (when symbol + (setq out (concat out (format "%s(%S) " (symbol-name symbol) (get-text-property (point) symbol))))) + ) + (message "%s\n" out) + ;;(message "syntax-class=%S" (syntax-class (syntax-after (point)))) + (message nil))) + +(defun web-mode-debug () + "Display informations useful for debugging." + (interactive) + (let ((modes nil) + (customs '(web-mode-enable-current-column-highlight web-mode-enable-current-element-highlight indent-tabs-mode)) + (ignore '(abbrev-mode auto-composition-mode auto-compression-mode auto-encryption-mode auto-insert-mode blink-cursor-mode column-number-mode delete-selection-mode display-time-mode electric-indent-mode file-name-shadow-mode font-lock-mode global-font-lock-mode global-hl-line-mode line-number-mode menu-bar-mode mouse-wheel-mode recentf-mode show-point-mode tool-bar-mode tooltip-mode transient-mark-mode))) + (message "\n") + (message "--- WEB-MODE DEBUG BEG ---") + (message "versions: emacs(%S.%S) web-mode(%S)" + emacs-major-version emacs-minor-version web-mode-version) + (message "vars: engine(%S) minor(%S) content-type(%S) file(%S)" + web-mode-engine + web-mode-minor-engine + web-mode-content-type + (or (buffer-file-name) (buffer-name))) + (message "system: window(%S) config(%S)" window-system system-configuration) + (message "colors: fg(%S) bg(%S) " + (cdr (assoc 'foreground-color default-frame-alist)) + (cdr (assoc 'background-color default-frame-alist))) + (mapc (lambda (mode) + (condition-case nil + (if (and (symbolp mode) (symbol-value mode) (not (member mode ignore))) + (add-to-list 'modes mode)) + (error nil)) + ) ;lambda + minor-mode-list) + (message "minor modes: %S" modes) + (message "vars:") + (dolist (custom customs) + (message (format "%s=%S " (symbol-name custom) (symbol-value custom)))) + (message "--- WEB-MODE DEBUG END ---") + (switch-to-buffer "*Messages*") + (goto-char (point-max)) + (recenter) + )) + +(provide 'web-mode) + +;;; web-mode.el ends here + +;; Local Variables: +;; coding: utf-8 +;; indent-tabs-mode: nil +;; End: diff --git a/elpa/web-mode-20191104.1859/web-mode.elc b/elpa/web-mode-20191104.1859/web-mode.elc new file mode 100644 index 0000000000000000000000000000000000000000..33c540fbde68eb2726af2a9c2435578ffd0136c5 GIT binary patch literal 322428 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 #YENTnW=Dt% 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" visits the Emacs manual, etc. + + In Emacs, you can click mouse button 2 on a menu item or cross reference + to select it. + +* Menu: + +Emacs +* With-Editor: (with-editor). Using the Emacsclient as $EDITOR. diff --git a/elpa/with-editor-20191105.2250/with-editor-autoloads.el b/elpa/with-editor-20191105.2250/with-editor-autoloads.el new file mode 100644 index 00000000..cdfafa8e --- /dev/null +++ b/elpa/with-editor-20191105.2250/with-editor-autoloads.el @@ -0,0 +1,99 @@ +;;; with-editor-autoloads.el --- automatically extracted autoloads +;; +;;; Code: + +(add-to-list 'load-path (directory-file-name + (or (file-name-directory #$) (car load-path)))) + + +;;;### (autoloads nil "with-editor" "with-editor.el" (0 0 0 0)) +;;; Generated autoloads from with-editor.el + +(autoload 'with-editor-export-editor "with-editor" "\ +Teach subsequent commands to use current Emacs instance as editor. + +Set and export the environment variable ENVVAR, by default +\"EDITOR\". The value is automatically generated to teach +commands to use the current Emacs instance as \"the editor\". + +This works in `shell-mode', `term-mode' and `eshell-mode'. + +\(fn &optional (ENVVAR \"EDITOR\"))" t nil) + +(autoload 'with-editor-export-git-editor "with-editor" "\ +Like `with-editor-export-editor' but always set `$GIT_EDITOR'. + +\(fn)" t nil) + +(autoload 'with-editor-export-hg-editor "with-editor" "\ +Like `with-editor-export-editor' but always set `$HG_EDITOR'. + +\(fn)" t nil) + +(defvar shell-command-with-editor-mode nil "\ +Non-nil if Shell-Command-With-Editor mode is enabled. +See the `shell-command-with-editor-mode' command +for a description of this minor mode.") + +(custom-autoload 'shell-command-with-editor-mode "with-editor" nil) + +(autoload 'shell-command-with-editor-mode "with-editor" "\ +Teach `shell-command' to use current Emacs instance as editor. + +Teach `shell-command', and all commands that ultimately call that +command, to use the current Emacs instance as editor by executing +\"EDITOR=CLIENT COMMAND&\" instead of just \"COMMAND&\". + +CLIENT is automatically generated; EDITOR=CLIENT instructs +COMMAND to use to the current Emacs instance as \"the editor\", +assuming no other variable overrides the effect of \"$EDITOR\". +CLIENT may be the path to an appropriate emacsclient executable +with arguments, or a script which also works over Tramp. + +Alternatively you can use the `with-editor-async-shell-command', +which also allows the use of another variable instead of +\"EDITOR\". + +\(fn &optional ARG)" t nil) + +(autoload 'with-editor-async-shell-command "with-editor" "\ +Like `async-shell-command' but with `$EDITOR' set. + +Execute string \"ENVVAR=CLIENT COMMAND\" in an inferior shell; +display output, if any. With a prefix argument prompt for an +environment variable, otherwise the default \"EDITOR\" variable +is used. With a negative prefix argument additionally insert +the COMMAND's output at point. + +CLIENT is automatically generated; ENVVAR=CLIENT instructs +COMMAND to use to the current Emacs instance as \"the editor\", +assuming it respects ENVVAR as an \"EDITOR\"-like variable. +CLIENT may be the path to an appropriate emacsclient executable +with arguments, or a script which also works over Tramp. + +Also see `async-shell-command' and `shell-command'. + +\(fn COMMAND &optional OUTPUT-BUFFER ERROR-BUFFER ENVVAR)" t nil) + +(autoload 'with-editor-shell-command "with-editor" "\ +Like `shell-command' or `with-editor-async-shell-command'. +If COMMAND ends with \"&\" behave like the latter, +else like the former. + +\(fn COMMAND &optional OUTPUT-BUFFER ERROR-BUFFER ENVVAR)" t nil) + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "with-editor" '("with-editor" "start-file-process--with-editor-process-filter" "server-" "shell-command--shell-command-with-editor-mode"))) + +;;;*** + +;;;### (autoloads nil nil ("with-editor-pkg.el") (0 0 0 0)) + +;;;*** + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; coding: utf-8 +;; End: +;;; with-editor-autoloads.el ends here diff --git a/elpa/with-editor-20191105.2250/with-editor-pkg.el b/elpa/with-editor-20191105.2250/with-editor-pkg.el new file mode 100644 index 00000000..15dc36b4 --- /dev/null +++ b/elpa/with-editor-20191105.2250/with-editor-pkg.el @@ -0,0 +1,13 @@ +(define-package "with-editor" "20191105.2250" "Use the Emacsclient as $EDITOR" + '((emacs "24.4") + (async "1.9")) + :keywords + '("tools") + :authors + '(("Jonas Bernoulli" . "jonas@bernoul.li")) + :maintainer + '("Jonas Bernoulli" . "jonas@bernoul.li") + :url "https://github.com/magit/with-editor") +;; Local Variables: +;; no-byte-compile: t +;; End: diff --git a/elpa/with-editor-20191105.2250/with-editor.el b/elpa/with-editor-20191105.2250/with-editor.el new file mode 100644 index 00000000..a35b6f8c --- /dev/null +++ b/elpa/with-editor-20191105.2250/with-editor.el @@ -0,0 +1,873 @@ +;;; with-editor.el --- Use the Emacsclient as $EDITOR -*- lexical-binding: t -*- + +;; Copyright (C) 2014-2019 The Magit Project Contributors +;; +;; You should have received a copy of the AUTHORS.md file. If not, +;; see https://github.com/magit/with-editor/blob/master/AUTHORS.md. + +;; Author: Jonas Bernoulli +;; Maintainer: Jonas Bernoulli + +;; Package-Requires: ((emacs "24.4") (async "1.9")) +;; Keywords: tools +;; Homepage: https://github.com/magit/with-editor + +;; This file is not part of GNU Emacs. + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3, or (at your option) +;; any later version. + +;; This file 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 Magit. If not, see http://www.gnu.org/licenses. + +;;; Commentary: + +;; This library makes it possible to reliably use the Emacsclient as +;; the `$EDITOR' of child processes. It makes sure that they know how +;; to call home. For remote processes a substitute is provided, which +;; communicates with Emacs on standard output/input instead of using a +;; socket as the Emacsclient does. + +;; It provides the commands `with-editor-async-shell-command' and +;; `with-editor-shell-command', which are intended as replacements +;; for `async-shell-command' and `shell-command'. They automatically +;; export `$EDITOR' making sure the executed command uses the current +;; Emacs instance as "the editor". With a prefix argument these +;; commands prompt for an alternative environment variable such as +;; `$GIT_EDITOR'. To always use these variants add this to your init +;; file: +;; +;; (define-key (current-global-map) +;; [remap async-shell-command] 'with-editor-async-shell-command) +;; (define-key (current-global-map) +;; [remap shell-command] 'with-editor-shell-command) + +;; Alternatively use the global `shell-command-with-editor-mode', +;; which always sets `$EDITOR' for all Emacs commands which ultimately +;; use `shell-command' to asynchronously run some shell command. + +;; The command `with-editor-export-editor' exports `$EDITOR' or +;; another such environment variable in `shell-mode', `term-mode' and +;; `eshell-mode' buffers. Use this Emacs command before executing a +;; shell command which needs the editor set, or always arrange for the +;; current Emacs instance to be used as editor by adding it to the +;; appropriate mode hooks: +;; +;; (add-hook 'shell-mode-hook 'with-editor-export-editor) +;; (add-hook 'term-exec-hook 'with-editor-export-editor) +;; (add-hook 'eshell-mode-hook 'with-editor-export-editor) + +;; Some variants of this function exist, these two forms are +;; equivalent: +;; +;; (add-hook 'shell-mode-hook +;; (apply-partially 'with-editor-export-editor "GIT_EDITOR")) +;; (add-hook 'shell-mode-hook 'with-editor-export-git-editor) + +;; This library can also be used by other packages which need to use +;; the current Emacs instance as editor. In fact this library was +;; written for Magit and its `git-commit-mode' and `git-rebase-mode'. +;; Consult `git-rebase.el' and the related code in `magit-sequence.el' +;; for a simple example. + +;;; Code: + +(require 'cl-lib) +;; `pcase-dolist' is not autoloaded on Emacs 24. +(eval-when-compile (require 'pcase)) +(require 'server) +(require 'shell) + +(and (require 'async-bytecomp nil t) + (let ((pkgs (bound-and-true-p async-bytecomp-allowed-packages))) + (if (consp pkgs) + (cl-intersection '(all magit) pkgs) + (memq pkgs '(all t)))) + (fboundp 'async-bytecomp-package-mode) + (async-bytecomp-package-mode 1)) + +(eval-when-compile + (progn (require 'dired nil t) + (require 'eshell nil t) + (require 'term nil t) + (require 'warnings nil t))) +(declare-function dired-get-filename 'dired) +(declare-function term-emulate-terminal 'term) +(defvar eshell-preoutput-filter-functions) + +;;; Options + +(defgroup with-editor nil + "Use the Emacsclient as $EDITOR." + :group 'external + :group 'server) + +(defun with-editor-locate-emacsclient () + "Search for a suitable Emacsclient executable." + (or (with-editor-locate-emacsclient-1 + (with-editor-emacsclient-path) + (length (split-string emacs-version "\\."))) + (prog1 nil (display-warning 'with-editor "\ +Cannot determine a suitable Emacsclient + +Determining an Emacsclient executable suitable for the +current Emacs instance failed. For more information +please see https://github.com/magit/magit/wiki/Emacsclient.")))) + +(defun with-editor-locate-emacsclient-1 (path depth) + (let* ((version-lst (cl-subseq (split-string emacs-version "\\.") 0 depth)) + (version-reg (concat "^" (mapconcat #'identity version-lst "\\.")))) + (or (locate-file-internal + (if (equal (downcase invocation-name) "remacs") + "remacsclient" + "emacsclient") + path + (cl-mapcan + (lambda (v) (cl-mapcar (lambda (e) (concat v e)) exec-suffixes)) + (nconc (and (boundp 'debian-emacs-flavor) + (list (format ".%s" debian-emacs-flavor))) + (cl-mapcon (lambda (v) + (setq v (mapconcat #'identity (reverse v) ".")) + (list v (concat "-" v) (concat ".emacs" v))) + (reverse version-lst)) + (list "" "-snapshot" ".emacs-snapshot"))) + (lambda (exec) + (ignore-errors + (string-match-p version-reg + (with-editor-emacsclient-version exec))))) + (and (> depth 1) + (with-editor-locate-emacsclient-1 path (1- depth)))))) + +(defun with-editor-emacsclient-version (exec) + (let ((default-directory (file-name-directory exec))) + (ignore-errors + (cadr (split-string (car (process-lines exec "--version"))))))) + +(defun with-editor-emacsclient-path () + (let ((path exec-path)) + (when invocation-directory + (push (directory-file-name invocation-directory) path) + (let* ((linkname (expand-file-name invocation-name invocation-directory)) + (truename (file-chase-links linkname))) + (unless (equal truename linkname) + (push (directory-file-name (file-name-directory truename)) path))) + (when (eq system-type 'darwin) + (let ((dir (expand-file-name "bin" invocation-directory))) + (when (file-directory-p dir) + (push dir path))) + (when (string-match-p "Cellar" invocation-directory) + (let ((dir (expand-file-name "../../../bin" invocation-directory))) + (when (file-directory-p dir) + (push dir path)))))) + (cl-remove-duplicates path :test 'equal))) + +(defcustom with-editor-emacsclient-executable (with-editor-locate-emacsclient) + "The Emacsclient executable used by the `with-editor' macro." + :group 'with-editor + :type '(choice (string :tag "Executable") + (const :tag "Don't use Emacsclient" nil))) + +(defcustom with-editor-sleeping-editor "\ +sh -c '\ +echo \"WITH-EDITOR: $$ OPEN $0 IN $(pwd)\"; \ +sleep 604800 & sleep=$!; \ +trap \"kill $sleep; exit 0\" USR1; \ +trap \"kill $sleep; exit 1\" USR2; \ +wait $sleep'" + "The sleeping editor, used when the Emacsclient cannot be used. + +This fallback is used for asynchronous processes started inside +the macro `with-editor', when the process runs on a remote machine +or for local processes when `with-editor-emacsclient-executable' +is nil (i.e. when no suitable Emacsclient was found, or the user +decided not to use it). + +Where the latter uses a socket to communicate with Emacs' server, +this substitute prints edit requests to its standard output on +which a process filter listens for such requests. As such it is +not a complete substitute for a proper Emacsclient, it can only +be used as $EDITOR of child process of the current Emacs instance. + +Some shells do not execute traps immediately when waiting for a +child process, but by default we do use such a blocking child +process. + +If you use such a shell (e.g. `csh' on FreeBSD, but not Debian), +then you have to edit this option. You can either replace \"sh\" +with \"bash\" (and install that), or you can use the older, less +performant implementation: + + \"sh -c '\\ + echo \\\"WITH-EDITOR: $$ OPEN $0 IN $(pwd)\\\"; \\ + trap \\\"exit 0\\\" USR1; \\ + trap \\\"exit 1\" USR2; \\ + while true; do sleep 1; done'\" + +Note that the unit separator character () right after the file +name ($0) is required. + +Also note that using this alternative implementation leads to a +delay of up to a second. The delay can be shortened by replacing +\"sleep 1\" with \"sleep 0.01\", or if your implementation does +not support floats, then by using \"nanosleep\" instead." + :package-version '(with-editor . "2.8.0") + :group 'with-editor + :type 'string) + +(defcustom with-editor-finish-query-functions nil + "List of functions called to query before finishing session. + +The buffer in question is current while the functions are called. +If any of them returns nil, then the session is not finished and +the buffer is not killed. The user should then fix the issue and +try again. The functions are called with one argument. If it is +non-nil then that indicates that the user used a prefix argument +to force finishing the session despite issues. Functions should +usually honor that and return non-nil." + :group 'with-editor + :type 'hook) +(put 'with-editor-finish-query-functions 'permanent-local t) + +(defcustom with-editor-cancel-query-functions nil + "List of functions called to query before canceling session. + +The buffer in question is current while the functions are called. +If any of them returns nil, then the session is not canceled and +the buffer is not killed. The user should then fix the issue and +try again. The functions are called with one argument. If it is +non-nil then that indicates that the user used a prefix argument +to force canceling the session despite issues. Functions should +usually honor that and return non-nil." + :group 'with-editor + :type 'hook) +(put 'with-editor-cancel-query-functions 'permanent-local t) + +(defcustom with-editor-mode-lighter " WE" + "The mode-line lighter of the With-Editor mode." + :group 'with-editor + :type '(choice (const :tag "No lighter" "") string)) + +(defvar with-editor-server-window-alist nil + "Alist of filename patterns vs corresponding `server-window'. + +Each element looks like (REGEXP . FUNCTION). Files matching +REGEXP are selected using FUNCTION instead of the default in +`server-window'. + +Note that when a package adds an entry here then it probably +has a reason to disrespect `server-window' and it likely is +not a good idea to change such entries.") + +(defvar with-editor-file-name-history-exclude nil + "List of regexps for filenames `server-visit' should not remember. +When a filename matches any of the regexps, then `server-visit' +does not add it to the variable `file-name-history', which is +used when reading a filename in the minibuffer.") + +(defcustom with-editor-shell-command-use-emacsclient t + "Whether to use the emacsclient when running shell commands. + +This affects `with-editor-shell-command-async' and, if the input +ends with \"&\" `with-editor-shell-command' . + +If `shell-command-with-editor-mode' is enabled, then it also +affects `shell-command-async' and, if the input ends with \"&\" +`shell-command'. + +This is a temporary kludge that lets you choose between two +possible defects, the ones described in the issues #23 and #40. + +When t, then use the emacsclient. This has the disadvantage that +`with-editor-mode' won't be enabled because we don't know whether +this package was involved at all in the call to the emacsclient, +and when it is not, then we really should. The problem is that +the emacsclient doesn't pass a long any environment variables to +the server. This will hopefully be fixed in Emacs eventually. + +When nil, then use the sleeping editor. Because in this case we +know that this package is involved, we can enable the mode. But +this makes it necessary that you invoke $EDITOR in shell scripts +like so: + + eval \"$EDITOR\" file + +And some tools that do not handle $EDITOR properly also break." + :package-version '(with-editor . "2.7.1") + :group 'with-editor + :type 'boolean) + +;;; Mode Commands + +(defvar with-editor-pre-finish-hook nil) +(defvar with-editor-pre-cancel-hook nil) +(defvar with-editor-post-finish-hook nil) +(defvar with-editor-post-finish-hook-1 nil) +(defvar with-editor-post-cancel-hook nil) +(defvar with-editor-post-cancel-hook-1 nil) +(defvar with-editor-cancel-alist nil) +(put 'with-editor-pre-finish-hook 'permanent-local t) +(put 'with-editor-pre-cancel-hook 'permanent-local t) +(put 'with-editor-post-finish-hook 'permanent-local t) +(put 'with-editor-post-cancel-hook 'permanent-local t) + +(defvar with-editor-show-usage t) +(defvar with-editor-cancel-message nil) +(defvar with-editor-previous-winconf nil) +(make-variable-buffer-local 'with-editor-show-usage) +(make-variable-buffer-local 'with-editor-cancel-message) +(make-variable-buffer-local 'with-editor-previous-winconf) +(put 'with-editor-cancel-message 'permanent-local t) +(put 'with-editor-previous-winconf 'permanent-local t) + +(defvar-local with-editor--pid nil "For internal use.") +(put 'with-editor--pid 'permanent-local t) + +(defun with-editor-finish (force) + "Finish the current edit session." + (interactive "P") + (when (run-hook-with-args-until-failure + 'with-editor-finish-query-functions force) + (let ((post-finish-hook with-editor-post-finish-hook) + (post-commit-hook (bound-and-true-p git-commit-post-finish-hook)) + (dir default-directory)) + (run-hooks 'with-editor-pre-finish-hook) + (with-editor-return nil) + (accept-process-output nil 0.1) + (with-temp-buffer + (setq default-directory dir) + (setq-local with-editor-post-finish-hook post-finish-hook) + (when (bound-and-true-p git-commit-post-finish-hook) + (setq-local git-commit-post-finish-hook post-commit-hook)) + (run-hooks 'with-editor-post-finish-hook))))) + +(defun with-editor-cancel (force) + "Cancel the current edit session." + (interactive "P") + (when (run-hook-with-args-until-failure + 'with-editor-cancel-query-functions force) + (let ((message with-editor-cancel-message)) + (when (functionp message) + (setq message (funcall message))) + (let ((post-cancel-hook with-editor-post-cancel-hook) + (with-editor-cancel-alist nil) + (dir default-directory)) + (run-hooks 'with-editor-pre-cancel-hook) + (with-editor-return t) + (accept-process-output nil 0.1) + (with-temp-buffer + (setq default-directory dir) + (setq-local with-editor-post-cancel-hook post-cancel-hook) + (run-hooks 'with-editor-post-cancel-hook))) + (message (or message "Canceled by user"))))) + +(defun with-editor-return (cancel) + (let ((winconf with-editor-previous-winconf) + (clients server-buffer-clients) + (dir default-directory) + (pid with-editor--pid)) + (remove-hook 'kill-buffer-query-functions + 'with-editor-kill-buffer-noop t) + (cond (cancel + (save-buffer) + (if clients + (dolist (client clients) + (ignore-errors + (server-send-string client "-error Canceled by user")) + (delete-process client)) + ;; Fallback for when emacs was used as $EDITOR + ;; instead of emacsclient or the sleeping editor. + ;; See https://github.com/magit/magit/issues/2258. + (ignore-errors (delete-file buffer-file-name)) + (kill-buffer))) + (t + (save-buffer) + (if clients + ;; Don't use `server-edit' because we do not want to + ;; show another buffer belonging to another client. + ;; See https://github.com/magit/magit/issues/2197. + (server-done) + (kill-buffer)))) + (when pid + (let ((default-directory dir)) + (process-file "kill" nil nil nil + "-s" (if cancel "USR2" "USR1") pid))) + (when (and winconf (eq (window-configuration-frame winconf) + (selected-frame))) + (set-window-configuration winconf)))) + +;;; Mode + +(defvar with-editor-mode-map + (let ((map (make-sparse-keymap))) + (define-key map "\C-c\C-c" 'with-editor-finish) + (define-key map [remap server-edit] 'with-editor-finish) + (define-key map [remap evil-save-and-close] 'with-editor-finish) + (define-key map [remap evil-save-modified-and-close] 'with-editor-finish) + (define-key map "\C-c\C-k" 'with-editor-cancel) + (define-key map [remap kill-buffer] 'with-editor-cancel) + (define-key map [remap ido-kill-buffer] 'with-editor-cancel) + (define-key map [remap iswitchb-kill-buffer] 'with-editor-cancel) + (define-key map [remap evil-quit] 'with-editor-cancel) + map)) + +(define-minor-mode with-editor-mode + "Edit a file as the $EDITOR of an external process." + :lighter with-editor-mode-lighter + ;; Protect the user from killing the buffer without using + ;; either `with-editor-finish' or `with-editor-cancel', + ;; and from removing the key bindings for these commands. + (unless with-editor-mode + (user-error "With-Editor mode cannot be turned off")) + (add-hook 'kill-buffer-query-functions + 'with-editor-kill-buffer-noop nil t) + ;; `server-execute' displays a message which is not + ;; correct when using this mode. + (when with-editor-show-usage + (with-editor-usage-message))) + +(put 'with-editor-mode 'permanent-local t) + +(defun with-editor-kill-buffer-noop () + ;; We started doing this in response to #64, but it is not safe + ;; to do so, because the client has already been killed, causing + ;; `with-editor-return' (called by `with-editor-cancel') to delete + ;; the file, see #66. The reason we delete the file in the first + ;; place are https://github.com/magit/magit/issues/2258 and + ;; https://github.com/magit/magit/issues/2248. + ;; (if (memq this-command '(save-buffers-kill-terminal + ;; save-buffers-kill-emacs)) + ;; (let ((with-editor-cancel-query-functions nil)) + ;; (with-editor-cancel nil) + ;; t) + ;; ...) + ;; So go back to always doing this instead: + (user-error (substitute-command-keys (format "\ +Don't kill this buffer %S. Instead cancel using \\[with-editor-cancel]" + (current-buffer))))) + +(defvar-local with-editor-usage-message "\ +Type \\[with-editor-finish] to finish, \ +or \\[with-editor-cancel] to cancel") + +(defun with-editor-usage-message () + ;; Run after `server-execute', which is run using + ;; a timer which starts immediately. + (let ((buffer (current-buffer))) + (run-with-timer + 0.05 nil + (lambda () + (with-current-buffer buffer + (message (substitute-command-keys with-editor-usage-message))))))) + +;;; Wrappers + +(defvar with-editor--envvar nil "For internal use.") + +(defmacro with-editor (&rest body) + "Use the Emacsclient as $EDITOR while evaluating BODY. +Modify the `process-environment' for processes started in BODY, +instructing them to use the Emacsclient as $EDITOR. If optional +ENVVAR is a literal string then bind that environment variable +instead. +\n(fn [ENVVAR] BODY...)" + (declare (indent defun) (debug (body))) + `(let ((with-editor--envvar ,(if (stringp (car body)) + (pop body) + '(or with-editor--envvar "EDITOR"))) + (process-environment process-environment)) + (with-editor--setup) + ,@body)) + +(defmacro with-editor* (envvar &rest body) + "Use the Emacsclient as the editor while evaluating BODY. +Modify the `process-environment' for processes started in BODY, +instructing them to use the Emacsclient as editor. ENVVAR is the +environment variable that is exported to do so, it is evaluated +at run-time. +\n(fn [ENVVAR] BODY...)" + (declare (indent defun) (debug (sexp body))) + `(let ((with-editor--envvar ,envvar) + (process-environment process-environment)) + (with-editor--setup) + ,@body)) + +(defun with-editor--setup () + (if (or (not with-editor-emacsclient-executable) + (file-remote-p default-directory)) + (push (concat with-editor--envvar "=" with-editor-sleeping-editor) + process-environment) + ;; Make sure server-use-tcp's value is valid. + (unless (featurep 'make-network-process '(:family local)) + (setq server-use-tcp t)) + ;; Make sure the server is running. + (unless (process-live-p server-process) + (when (server-running-p server-name) + (setq server-name (format "server%s" (emacs-pid))) + (when (server-running-p server-name) + (server-force-delete server-name))) + (server-start)) + ;; Tell $EDITOR to use the Emacsclient. + (push (concat with-editor--envvar "=" + (shell-quote-argument with-editor-emacsclient-executable) + ;; Tell the process where the server file is. + (and (not server-use-tcp) + (concat " --socket-name=" + (shell-quote-argument + (expand-file-name server-name + server-socket-dir))))) + process-environment) + (when server-use-tcp + (push (concat "EMACS_SERVER_FILE=" + (expand-file-name server-name server-auth-dir)) + process-environment)) + ;; As last resort fallback to the sleeping editor. + (push (concat "ALTERNATE_EDITOR=" with-editor-sleeping-editor) + process-environment))) + +(defun with-editor-server-window () + (or (and buffer-file-name + (cdr (cl-find-if (lambda (cons) + (string-match-p (car cons) buffer-file-name)) + with-editor-server-window-alist))) + server-window)) + +(defun server-switch-buffer--with-editor-server-window-alist + (fn &optional next-buffer killed-one filepos) + "Honor `with-editor-server-window-alist' (which see)." + (let ((server-window (with-current-buffer + (or next-buffer (current-buffer)) + (when with-editor-mode + (setq with-editor-previous-winconf + (current-window-configuration))) + (with-editor-server-window)))) + (funcall fn next-buffer killed-one filepos))) + +(advice-add 'server-switch-buffer :around + 'server-switch-buffer--with-editor-server-window-alist) + +(defun start-file-process--with-editor-process-filter + (fn name buffer program &rest program-args) + "When called inside a `with-editor' form and the Emacsclient +cannot be used, then give the process the filter function +`with-editor-process-filter'. To avoid overriding the filter +being added here you should use `with-editor-set-process-filter' +instead of `set-process-filter' inside `with-editor' forms. + +When the `default-directory' is located on a remote machine, +then also manipulate PROGRAM and PROGRAM-ARGS in order to set +the appropriate editor environment variable." + (if (not with-editor--envvar) + (apply fn name buffer program program-args) + (when (file-remote-p default-directory) + (unless (equal program "env") + (push program program-args) + (setq program "env")) + (push (concat with-editor--envvar "=" with-editor-sleeping-editor) + program-args)) + (let ((process (apply fn name buffer program program-args))) + (set-process-filter process 'with-editor-process-filter) + (process-put process 'default-dir default-directory) + process))) + +(advice-add 'start-file-process :around + 'start-file-process--with-editor-process-filter) + +(defun with-editor-set-process-filter (process filter) + "Like `set-process-filter' but keep `with-editor-process-filter'. +Give PROCESS the new FILTER but keep `with-editor-process-filter' +if that was added earlier by the advised `start-file-process'. + +Do so by wrapping the two filter functions using a lambda, which +becomes the actual filter. It calls `with-editor-process-filter' +first, passing t as NO-STANDARD-FILTER. Then it calls FILTER, +which may or may not insert the text into the PROCESS' buffer." + (set-process-filter + process + (if (eq (process-filter process) 'with-editor-process-filter) + `(lambda (proc str) + (,filter proc str) + (with-editor-process-filter proc str t)) + filter))) + +(defvar with-editor-filter-visit-hook nil) + +(defun with-editor-output-filter (string) + (save-match-data + (if (string-match "^WITH-EDITOR: \ +\\([0-9]+\\) OPEN \\([^]+?\\)\ +\\(?: IN \\([^\r]+?\\)\\)?\r?$" string) + (let ((pid (match-string 1 string)) + (file (match-string 2 string)) + (dir (match-string 3 string))) + (unless (file-name-absolute-p file) + (setq file (expand-file-name file dir))) + (when default-directory + (setq file (concat (file-remote-p default-directory) file))) + (with-current-buffer (find-file-noselect file) + (with-editor-mode 1) + (setq with-editor--pid pid) + (run-hooks 'with-editor-filter-visit-hook) + (funcall (or (with-editor-server-window) 'switch-to-buffer) + (current-buffer)) + (kill-local-variable 'server-window)) + nil) + string))) + +(defun with-editor-process-filter + (process string &optional no-default-filter) + "Listen for edit requests by child processes." + (let ((default-directory (process-get process 'default-dir))) + (with-editor-output-filter string)) + (unless no-default-filter + (internal-default-process-filter process string))) + +(advice-add 'server-visit-files :after + 'server-visit-files--with-editor-file-name-history-exclude) + +(defun server-visit-files--with-editor-file-name-history-exclude + (files _proc &optional _nowait) + (pcase-dolist (`(,file . ,_) files) + (when (cl-find-if (lambda (regexp) + (string-match-p regexp file)) + with-editor-file-name-history-exclude) + (setq file-name-history (delete file file-name-history))))) + +;;; Augmentations + +;;;###autoload +(cl-defun with-editor-export-editor (&optional (envvar "EDITOR")) + "Teach subsequent commands to use current Emacs instance as editor. + +Set and export the environment variable ENVVAR, by default +\"EDITOR\". The value is automatically generated to teach +commands to use the current Emacs instance as \"the editor\". + +This works in `shell-mode', `term-mode' and `eshell-mode'." + (interactive (list (with-editor-read-envvar))) + (cond + ((derived-mode-p 'comint-mode 'term-mode) + (let ((process (get-buffer-process (current-buffer)))) + (goto-char (process-mark process)) + (process-send-string + process (format " export %s=%s\n" envvar + (shell-quote-argument with-editor-sleeping-editor))) + (while (accept-process-output process 0.1)) + (if (derived-mode-p 'term-mode) + (with-editor-set-process-filter process 'with-editor-emulate-terminal) + (add-hook 'comint-output-filter-functions 'with-editor-output-filter + nil t)))) + ((derived-mode-p 'eshell-mode) + (add-to-list 'eshell-preoutput-filter-functions + 'with-editor-output-filter) + (setenv envvar with-editor-sleeping-editor)) + (t + (error "Cannot export environment variables in this buffer"))) + (message "Successfully exported %s" envvar)) + +;;;###autoload +(defun with-editor-export-git-editor () + "Like `with-editor-export-editor' but always set `$GIT_EDITOR'." + (interactive) + (with-editor-export-editor "GIT_EDITOR")) + +;;;###autoload +(defun with-editor-export-hg-editor () + "Like `with-editor-export-editor' but always set `$HG_EDITOR'." + (interactive) + (with-editor-export-editor "HG_EDITOR")) + +(defun with-editor-emulate-terminal (process string) + "Like `term-emulate-terminal' but also handle edit requests." + (when (with-editor-output-filter string) + (term-emulate-terminal process string))) + +(defvar with-editor-envvars '("EDITOR" "GIT_EDITOR" "HG_EDITOR")) + +(cl-defun with-editor-read-envvar + (&optional (prompt "Set environment variable") + (default "EDITOR")) + (let ((reply (completing-read (if default + (format "%s (%s): " prompt default) + (concat prompt ": ")) + with-editor-envvars nil nil nil nil default))) + (if (string= reply "") (user-error "Nothing selected") reply))) + +;;;###autoload +(define-minor-mode shell-command-with-editor-mode + "Teach `shell-command' to use current Emacs instance as editor. + +Teach `shell-command', and all commands that ultimately call that +command, to use the current Emacs instance as editor by executing +\"EDITOR=CLIENT COMMAND&\" instead of just \"COMMAND&\". + +CLIENT is automatically generated; EDITOR=CLIENT instructs +COMMAND to use to the current Emacs instance as \"the editor\", +assuming no other variable overrides the effect of \"$EDITOR\". +CLIENT may be the path to an appropriate emacsclient executable +with arguments, or a script which also works over Tramp. + +Alternatively you can use the `with-editor-async-shell-command', +which also allows the use of another variable instead of +\"EDITOR\"." + :global t) + +;;;###autoload +(defun with-editor-async-shell-command + (command &optional output-buffer error-buffer envvar) + "Like `async-shell-command' but with `$EDITOR' set. + +Execute string \"ENVVAR=CLIENT COMMAND\" in an inferior shell; +display output, if any. With a prefix argument prompt for an +environment variable, otherwise the default \"EDITOR\" variable +is used. With a negative prefix argument additionally insert +the COMMAND's output at point. + +CLIENT is automatically generated; ENVVAR=CLIENT instructs +COMMAND to use to the current Emacs instance as \"the editor\", +assuming it respects ENVVAR as an \"EDITOR\"-like variable. +CLIENT may be the path to an appropriate emacsclient executable +with arguments, or a script which also works over Tramp. + +Also see `async-shell-command' and `shell-command'." + (interactive (with-editor-shell-command-read-args "Async shell command: " t)) + (let ((with-editor--envvar envvar)) + (with-editor + (async-shell-command command output-buffer error-buffer)))) + +;;;###autoload +(defun with-editor-shell-command + (command &optional output-buffer error-buffer envvar) + "Like `shell-command' or `with-editor-async-shell-command'. +If COMMAND ends with \"&\" behave like the latter, +else like the former." + (interactive (with-editor-shell-command-read-args "Shell command: ")) + (if (string-match "&[ \t]*\\'" command) + (with-editor-async-shell-command + command output-buffer error-buffer envvar) + (shell-command command output-buffer error-buffer))) + +(defun with-editor-shell-command-read-args (prompt &optional async) + (let ((command (read-shell-command + prompt nil nil + (let ((filename (or buffer-file-name + (and (eq major-mode 'dired-mode) + (dired-get-filename nil t))))) + (and filename (file-relative-name filename)))))) + (list command + (if (or async (setq async (string-match-p "&[ \t]*\\'" command))) + (< (prefix-numeric-value current-prefix-arg) 0) + current-prefix-arg) + shell-command-default-error-buffer + (and async current-prefix-arg (with-editor-read-envvar))))) + +(defun shell-command--shell-command-with-editor-mode + (fn command &optional output-buffer error-buffer) + ;; `shell-mode' and its hook are intended for buffers in which an + ;; interactive shell is running, but `shell-command' also turns on + ;; that mode, even though it only runs the shell to run a single + ;; command. The `with-editor-export-editor' hook function is only + ;; intended to be used in buffers in which an interactive shell is + ;; running, so it has to be remove here. + (let ((shell-mode-hook (remove 'with-editor-export-editor shell-mode-hook))) + (cond ((or (not (or with-editor--envvar shell-command-with-editor-mode)) + (not (string-match-p "&\\'" command))) + (funcall fn command output-buffer error-buffer)) + ((and with-editor-shell-command-use-emacsclient + with-editor-emacsclient-executable + (not (file-remote-p default-directory))) + (with-editor (funcall fn command output-buffer error-buffer))) + (t + (apply fn (format "%s=%s %s" + (or with-editor--envvar "EDITOR") + (shell-quote-argument with-editor-sleeping-editor) + command) + output-buffer error-buffer) + (ignore-errors + (let ((process (get-buffer-process + (or output-buffer + (get-buffer "*Async Shell Command*"))))) + (set-process-filter + process (lambda (proc str) + (comint-output-filter proc str) + (with-editor-process-filter proc str t))) + process)))))) + +(advice-add 'shell-command :around + 'shell-command--shell-command-with-editor-mode) + +;;; _ + +(defun with-editor-debug () + "Debug configuration issues. +See info node `(with-editor)Debugging' for instructions." + (interactive) + (with-current-buffer (get-buffer-create "*with-editor-debug*") + (pop-to-buffer (current-buffer)) + (erase-buffer) + (ignore-errors (with-editor)) + (insert + (format "with-editor: %s\n" (locate-library "with-editor.el")) + (format "emacs: %s (%s)\n" + (expand-file-name invocation-name invocation-directory) + emacs-version) + "system:\n" + (format " system-type: %s\n" system-type) + (format " system-configuration: %s\n" system-configuration) + (format " system-configuration-options: %s\n" system-configuration-options) + "server:\n" + (format " server-running-p: %s\n" (server-running-p)) + (format " server-process: %S\n" server-process) + (format " server-use-tcp: %s\n" server-use-tcp) + (format " server-name: %s\n" server-name) + (format " server-socket-dir: %s\n" server-socket-dir)) + (if (and server-socket-dir (file-accessible-directory-p server-socket-dir)) + (dolist (file (directory-files server-socket-dir nil "^[^.]")) + (insert (format " %s\n" file))) + (insert (format " %s: not an accessible directory\n" + (if server-use-tcp "WARNING" "ERROR")))) + (insert (format " server-auth-dir: %s\n" server-auth-dir)) + (if (file-accessible-directory-p server-auth-dir) + (dolist (file (directory-files server-auth-dir nil "^[^.]")) + (insert (format " %s\n" file))) + (insert (format " %s: not an accessible directory\n" + (if server-use-tcp "ERROR" "WARNING")))) + (let ((val with-editor-emacsclient-executable) + (def (default-value 'with-editor-emacsclient-executable)) + (fun (let ((warning-minimum-level :error) + (warning-minimum-log-level :error)) + (with-editor-locate-emacsclient)))) + (insert "with-editor-emacsclient-executable:\n" + (format " value: %s (%s)\n" val + (and val (with-editor-emacsclient-version val))) + (format " default: %s (%s)\n" def + (and def (with-editor-emacsclient-version def))) + (format " funcall: %s (%s)\n" fun + (and fun (with-editor-emacsclient-version fun))))) + (insert "path:\n" + (format " $PATH: %S\n" (getenv "PATH")) + (format " exec-path: %s\n" exec-path)) + (insert (format " with-editor-emacsclient-path:\n")) + (dolist (dir (with-editor-emacsclient-path)) + (insert (format " %s (%s)\n" dir (car (file-attributes dir)))) + (when (file-directory-p dir) + ;; Don't match emacsclientw.exe, it makes popup windows. + (dolist (exec (directory-files dir t "emacsclient\\(?:[^w]\\|\\'\\)")) + (insert (format " %s (%s)\n" exec + (with-editor-emacsclient-version exec)))))))) + +(defconst with-editor-font-lock-keywords + '(("(\\(with-\\(?:git-\\)?editor\\)\\_>" (1 'font-lock-keyword-face)))) +(font-lock-add-keywords 'emacs-lisp-mode with-editor-font-lock-keywords) + +(provide 'with-editor) +;; Local Variables: +;; indent-tabs-mode: nil +;; End: +;;; with-editor.el ends here diff --git a/elpa/with-editor-20191105.2250/with-editor.elc b/elpa/with-editor-20191105.2250/with-editor.elc new file mode 100644 index 0000000000000000000000000000000000000000..178e9c06e2eb0e91e3cf2cd688e7e64f20700130 GIT binary patch literal 31934 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 Xz02-)DQbi6@3{5Mdq04`R~P>u+cw(a literal 0 HcmV?d00001 diff --git a/elpa/with-editor-20191105.2250/with-editor.info b/elpa/with-editor-20191105.2250/with-editor.info new file mode 100644 index 00000000..ac899e6b --- /dev/null +++ b/elpa/with-editor-20191105.2250/with-editor.info @@ -0,0 +1,343 @@ +This is with-editor.info, produced by makeinfo version 6.5 from +with-editor.texi. + + Copyright (C) 2015-2019 Jonas Bernoulli + + You can redistribute this document 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 document 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. + +INFO-DIR-SECTION Emacs +START-INFO-DIR-ENTRY +* With-Editor: (with-editor). Using the Emacsclient as $EDITOR. +END-INFO-DIR-ENTRY + + +File: with-editor.info, Node: Top, Next: Using the With-Editor package, Up: (dir) + +With-Editor User Manual +*********************** + +The library ‘with-editor’ makes it easy to use the Emacsclient as the +‘$EDITOR’ of child processes, making sure they know how to call home. +For remote processes a substitute is provided, which communicates with +Emacs on standard output instead of using a socket as the Emacsclient +does. + + This library was written because Magit has to be able to do the above +to allow the user to edit commit messages gracefully and to edit rebase +sequences, which wouldn’t be possible at all otherwise. + + Because other packages can benefit from such functionality, this +library is made available as a separate package. It also defines some +additional functionality which makes it useful even for end-users, who +don’t use Magit or another package which uses it internally. + +This manual is for With-Editor version 2.8.3 (v2.8.3-7-gd5c7772+1). + + Copyright (C) 2015-2019 Jonas Bernoulli + + You can redistribute this document 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 document is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + +* Menu: + +* Using the With-Editor package:: +* Using With-Editor as a library:: +* Debugging:: + +— The Detailed Node Listing — + +Using the With-Editor package + +* Configuring With-Editor:: +* Using With-Editor commands:: + + + +File: with-editor.info, Node: Using the With-Editor package, Next: Using With-Editor as a library, Prev: Top, Up: Top + +1 Using the With-Editor package +******************************* + +The ‘With-Editor’ package is used internally by Magit when editing +commit messages and rebase sequences. It also provides some commands +and features which are useful by themselves, even if you don’t use +Magit. + + For information about using this library in you own package, see +*note Using With-Editor as a library::. + +* Menu: + +* Configuring With-Editor:: +* Using With-Editor commands:: + + +File: with-editor.info, Node: Configuring With-Editor, Next: Using With-Editor commands, Up: Using the With-Editor package + +1.1 Configuring With-Editor +=========================== + +With-Editor tries very hard to locate a suitable ‘emacsclient’ +executable, so ideally you should never have to customize the option +‘with-editor-emacsclient-executable’. When it fails to do so, then the +most likely reason is that someone found yet another way to package +Emacs (most likely on macOS) without putting the executable on ‘$PATH’, +and we have to add another kludge to find it anyway. + + -- User Option: with-editor-emacsclient-executable + + The ‘emacsclient’ executable used as the editor by child process of + this Emacs instance. By using this executable, child processes can + call home to their parent process. + + This option is automatically set at startup by looking in + ‘exec-path’, and other places where the executable could be + installed, to find the ‘emacsclient’ executable most suitable for + the current Emacs instance. + + You should *not* customize this option permanently. If you have to + do it, then you should consider that a temporary kludge and inform + the Magit maintainer as described in *note Debugging::. + + If With-Editor fails to find a suitable ‘emacsclient’ on you + system, then this should be fixed for all users at once, by + teaching ‘with-editor-locate-emacsclient’ how to do so on your + system and system like yours. Doing it this way has the advantage, + that you won’t have do it again every time you update Emacs, and + that other users who have installed Emacs the same way as you have, + won’t have to go through the same trouble. + + Note that there also is a nuclear option; setting this variable to + ‘nil’ causes the "sleeping editor" described below to be used even + for local child processes. Obviously we don’t recommend that you + use this except in "emergencies", i.e. before we had a change to + add a kludge appropriate for you setup. + + -- Function: with-editor-locate-emacsclient + + The function used to set the initial value of the option + ‘with-editor-emacsclient-executable’. There’s a lot of voodoo + here. + + The ‘emacsclient’ cannot be used when using Tramp to run a process on +a remote machine. (Theoretically it could, but that would be hard to +setup, very fragile, and rather insecure). + + With-Editor provides an alternative "editor" which can be used by +remote processes in much the same way as local processes use an +‘emacsclient’ executable. This alternative is known as the "sleeping +editor" because it is implemented as a shell script which sleeps until +it receives a signal. + + -- User Option: with-editor-sleeping-editor + + The sleeping editor is a shell script used as the editor of child + processes when the ‘emacsclient’ executable cannot be used. + + This fallback is used for asynchronous process started inside the + macro ‘with-editor’, when the process runs on a remote machine or + for local processes when ‘with-editor-emacsclient-executable’ is + ‘nil’. + + Where the latter uses a socket to communicate with Emacs’ server, + this substitute prints edit requests to its standard output on + which a process filter listens for such requests. As such it is + not a complete substitute for a proper ‘emacsclient’, it can only + be used as ‘$EDITOR’ of child process of the current Emacs + instance. + + Some shells do not execute traps immediately when waiting for a + child process, but by default we do use such a blocking child + process. + + If you use such a shell (e.g. ‘csh’ on FreeBSD, but not Debian), + then you have to edit this option. You can either replace ‘sh’ + with ‘bash’ (and install that), or you can use the older, less + performant implementation: + + "sh -c '\ + echo \"WITH-EDITOR: $$ OPEN $0 IN $(pwd)\"; \ + trap \"exit 0\" USR1; \ + trap \"exit 1\" USR2; \ + while true; do sleep 1; done'" + + Note that the unit separator character () right after the file name + ($0) is required. + + Also note that using this alternative implementation leads to a + delay of up to a second. The delay can be shortened by replacing + ‘sleep 1’ with ‘sleep 0.01’, or if your implementation does not + support floats, then by using ‘nanosleep’ instead. + + +File: with-editor.info, Node: Using With-Editor commands, Prev: Configuring With-Editor, Up: Using the With-Editor package + +1.2 Using With-Editor commands +============================== + +This section describes how to use the ‘with-editor’ library _outside_ of +Magit. You don’t need to know any of this just to create commits using +Magit. + + The commands ‘with-editor-async-shell-command’ and +‘with-editor-shell-command’ are intended as drop in replacements for +‘async-shell-command’ and ‘shell-command’. They automatically export +‘$EDITOR’ making sure the executed command uses the current Emacs +instance as "the editor". With a prefix argument these commands prompt +for an alternative environment variable such as ‘$GIT_EDITOR’. + + -- Command: with-editor-async-shell-command + + This command is like ‘async-shell-command’, but it runs the shell + command with the current Emacs instance exported as ‘$EDITOR’. + + -- Command: with-editor-shell-command + + This command is like ‘shell-command’, but if the shell command ends + with ‘&’ and is therefore run asynchronously, then the current + Emacs instance is exported as ‘$EDITOR’. + + To always use these variants add this to you init file: + + (define-key (current-global-map) + [remap async-shell-command] 'with-editor-async-shell-command) + (define-key (current-global-map) + [remap shell-command] 'with-editor-shell-command) + + Alternatively use the global ‘shell-command-with-editor-mode’. + + -- Variable: shell-command-with-editor-mode + + When this mode is active, then ‘$EDITOR’ is exported whenever + ultimately ‘shell-command’ is called to asynchronously run some + shell command. This affects most variants of that command, whether + they are defined in Emacs or in some third-party package. + + The command ‘with-editor-export-editor’ exports ‘$EDITOR’ or another +such environment variable in ‘shell-mode’, ‘term-mode’ and ‘eshell-mode’ +buffers. Use this Emacs command before executing a shell command which +needs the editor set, or always arrange for the current Emacs instance +to be used as editor by adding it to the appropriate mode hooks: + + (add-hook 'shell-mode-hook 'with-editor-export-editor) + (add-hook 'term-exec-hook 'with-editor-export-editor) + (add-hook 'eshell-mode-hook 'with-editor-export-editor) + + Some variants of this function exist; these two forms are equivalent: + + (add-hook 'shell-mode-hook + (apply-partially 'with-editor-export-editor "GIT_EDITOR")) + (add-hook 'shell-mode-hook 'with-editor-export-git-editor) + + -- Command: with-editor-export-editor + + When invoked in a ‘shell-mode’, ‘term-mode’, or ‘eshell-mode’ + buffer, this command teaches shell commands to use the current + Emacs instance as the editor, by exporting ‘$EDITOR’. + + -- Command: with-editor-export-git-editor + + This command is like ‘with-editor-export-editor’ but exports + ‘$GIT_EDITOR’. + + -- Command: with-editor-export-hg-editor + + This command is like ‘with-editor-export-editor’ but exports + ‘$HG_EDITOR’. + + +File: with-editor.info, Node: Using With-Editor as a library, Next: Debugging, Prev: Using the With-Editor package, Up: Top + +2 Using With-Editor as a library +******************************** + +This section describes how to use the ‘with-editor’ library _outside_ of +Magit to teach another package how to have its child processes call +home, just like Magit does. You don’t need to know any of this just to +create commits using Magit. You can also ignore this if you use +‘with-editor’ outside of Magit, but only as an end-user. + + For information about interactive use and options that affect both +interactive and non-interactive use, see *note Using the With-Editor +package::. + + -- Macro: with-editor &rest body + + This macro arranges for the ‘emacsclient’ or the sleeping editor to + be used as the editor of child processes, effectively teaching them + to call home to the current Emacs instance when they require that + the user edits a file. + + This is done by establishing a local binding for + ‘process-environment’ and changing the value of the ‘EDITOR’ + environment variable in that scope. This affects all + (asynchronous) processes started by forms (dynamically) inside + BODY. + + If BODY begins with a literal string, then that variable is set + instead of ‘EDITOR’. + + -- Macro: with-editor envvar &rest body + + This macro is like ‘with-editor’ instead that the ENVVAR argument + is required and that it is evaluated at run-time. + + -- Function: with-editor-set-process-filter process filter + + This function is like ‘set-process-filter’ but ensures that adding + the new FILTER does not remove the ‘with-editor-process-filter’. + This is done by wrapping the two filter functions using a lambda, + which becomes the actual filter. It calls + ‘with-editor-process-filter’ first, passing ‘t’ as + NO-STANDARD-FILTER. Then it calls FILTER. + + +File: with-editor.info, Node: Debugging, Prev: Using With-Editor as a library, Up: Top + +3 Debugging +*********** + +With-Editor tries very hard to locate a suitable ‘emacsclient’ +executable, and then sets option ‘with-editor-emacsclient-executable’ +accordingly. In very rare cases this fails. When it does fail, then +the most likely reason is that someone found yet another way to package +Emacs (most likely on macOS) without putting the executable on ‘$PATH’, +and we have to add another kludge to find it anyway. + + If you are having problems using ‘with-editor’, e.g. you cannot +commit in Magit, then please open a new issue at + and provide information +about your Emacs installation. Most importantly how did you install +Emacs and what is the output of ‘M-x with-editor-debug RET’. + + + +Tag Table: +Node: Top773 +Node: Using the With-Editor package2535 +Node: Configuring With-Editor3121 +Node: Using With-Editor commands7670 +Node: Using With-Editor as a library10865 +Node: Debugging12828 + +End Tag Table + + +Local Variables: +coding: utf-8 +End: diff --git a/elpa/yaml-mode-20190625.1740/yaml-mode-autoloads.el b/elpa/yaml-mode-20190625.1740/yaml-mode-autoloads.el new file mode 100644 index 00000000..fa9bb779 --- /dev/null +++ b/elpa/yaml-mode-20190625.1740/yaml-mode-autoloads.el @@ -0,0 +1,33 @@ +;;; yaml-mode-autoloads.el --- automatically extracted autoloads +;; +;;; Code: + +(add-to-list 'load-path (directory-file-name + (or (file-name-directory #$) (car load-path)))) + + +;;;### (autoloads nil "yaml-mode" "yaml-mode.el" (0 0 0 0)) +;;; Generated autoloads from yaml-mode.el + +(let ((loads (get 'yaml 'custom-loads))) (if (member '"yaml-mode" loads) nil (put 'yaml 'custom-loads (cons '"yaml-mode" loads)))) + +(autoload 'yaml-mode "yaml-mode" "\ +Simple mode to edit YAML. + +\\{yaml-mode-map} + +\(fn)" t nil) + +(add-to-list 'auto-mode-alist '("\\.\\(e?ya?\\|ra\\)ml\\'" . yaml-mode)) + +(if (fboundp 'register-definition-prefixes) (register-definition-prefixes "yaml-mode" '("yaml-"))) + +;;;*** + +;; Local Variables: +;; version-control: never +;; no-byte-compile: t +;; no-update-autoloads: t +;; coding: utf-8 +;; End: +;;; yaml-mode-autoloads.el ends here diff --git a/elpa/yaml-mode-20190625.1740/yaml-mode-pkg.el b/elpa/yaml-mode-20190625.1740/yaml-mode-pkg.el new file mode 100644 index 00000000..be0e3145 --- /dev/null +++ b/elpa/yaml-mode-20190625.1740/yaml-mode-pkg.el @@ -0,0 +1,2 @@ +;;; -*- no-byte-compile: t -*- +(define-package "yaml-mode" "20190625.1740" "Major mode for editing YAML files" '((emacs "24.1")) :commit "0aceaf3888dc484d1f5246d5a9462a4780844081" :keywords '("data" "yaml") :authors '(("Yoshiki Kurihara" . "clouder@gmail.com") ("Marshall T. Vandegrift" . "llasram@gmail.com")) :maintainer '("Vasilij Schneidermann" . "v.schneidermann@gmail.com")) diff --git a/elpa/yaml-mode-20190625.1740/yaml-mode.el b/elpa/yaml-mode-20190625.1740/yaml-mode.el new file mode 100644 index 00000000..6ec99cca --- /dev/null +++ b/elpa/yaml-mode-20190625.1740/yaml-mode.el @@ -0,0 +1,472 @@ +;;; yaml-mode.el --- Major mode for editing YAML files + +;; Copyright (C) 2010-2014 Yoshiki Kurihara + +;; Author: Yoshiki Kurihara +;; Marshall T. Vandegrift +;; Maintainer: Vasilij Schneidermann +;; Package-Requires: ((emacs "24.1")) +;; Package-Version: 20190625.1740 +;; Keywords: data yaml +;; Version: 0.0.14 + +;; This file is not part of Emacs + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License along +;; with this program; if not, write to the Free Software Foundation, Inc., +;; 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +;;; Commentary: + +;; This is a major mode for editing files in the YAML data +;; serialization format. It was initially developed by Yoshiki +;; Kurihara and many features were added by Marshall Vandegrift. As +;; YAML and Python share the fact that indentation determines +;; structure, this mode provides indentation and indentation command +;; behavior very similar to that of python-mode. + +;;; Installation: + +;; To install, just drop this file into a directory in your +;; `load-path' and (optionally) byte-compile it. To automatically +;; handle files ending in '.yml', add something like: +;; +;; (require 'yaml-mode) +;; (add-to-list 'auto-mode-alist '("\\.yml\\'" . yaml-mode)) +;; +;; to your .emacs file. +;; +;; Unlike python-mode, this mode follows the Emacs convention of not +;; binding the ENTER key to `newline-and-indent'. To get this +;; behavior, add the key definition to `yaml-mode-hook': +;; +;; (add-hook 'yaml-mode-hook +;; '(lambda () +;; (define-key yaml-mode-map "\C-m" 'newline-and-indent))) + +;;; Known Bugs: + +;; YAML is easy to write but complex to parse, and this mode doesn't +;; even really try. Indentation and highlighting will break on +;; abnormally complicated structures. + +;;; Code: + + +;; User definable variables + +;;;###autoload +(defgroup yaml nil + "Support for the YAML serialization format" + :group 'languages + :prefix "yaml-") + +(defcustom yaml-mode-hook nil + "*Hook run by `yaml-mode'." + :type 'hook + :group 'yaml) + +(defcustom yaml-indent-offset 2 + "*Amount of offset per level of indentation." + :type 'integer + :safe 'natnump + :group 'yaml) + +(defcustom yaml-backspace-function 'backward-delete-char-untabify + "*Function called by `yaml-electric-backspace' when deleting backwards. +It will receive one argument, the numeric prefix value." + :type 'function + :group 'yaml) + +(defcustom yaml-block-literal-search-lines 100 + "*Maximum number of lines to search for start of block literals." + :type 'integer + :group 'yaml) + +(defcustom yaml-block-literal-electric-alist + '((?| . "") (?> . "-")) + "*Characters for which to provide electric behavior. +The association list key should be a key code and the associated value +should be a string containing additional characters to insert when +that key is pressed to begin a block literal." + :type 'alist + :group 'yaml) + +(defface yaml-tab-face + '((((class color)) (:background "red" :foreground "red" :bold t)) + (t (:reverse-video t))) + "Face to use for highlighting tabs in YAML files." + :group 'faces + :group 'yaml) + +(defcustom yaml-imenu-generic-expression + '((nil "^\\(:?[a-zA-Z_-]+\\):" 1)) + "The imenu regex to parse an outline of the yaml file." + :type 'string + :group 'yaml) + + +;; Constants + +(defconst yaml-mode-version "0.0.14" "Version of `yaml-mode'.") + +(defconst yaml-blank-line-re "^ *$" + "Regexp matching a line containing only (valid) whitespace.") + +(defconst yaml-directive-re "^\\(?:--- \\)? *%\\(\\w+\\)" + "Regexp matching a line contatining a YAML directive.") + +(defconst yaml-document-delimiter-re "^\\(?:---\\|[.][.][.]\\)" + "Rexexp matching a YAML document delimiter line.") + +(defconst yaml-node-anchor-alias-re "[&*][a-zA-Z0-9_-]+" + "Regexp matching a YAML node anchor or alias.") + +(defconst yaml-tag-re "!!?[^ \n]+" + "Rexexp matching a YAML tag.") + +(defconst yaml-bare-scalar-re + "\\(?:[^-:,#!\n{\\[ ]\\|[^#!\n{\\[ ]\\S-\\)[^#\n]*?" + "Rexexp matching a YAML bare scalar.") + +(defconst yaml-hash-key-re + (concat "\\(?:^\\(?:--- \\)?\\|{\\|\\(?:[-,] +\\)+\\) *" + "\\(?:" yaml-tag-re " +\\)?" + "\\(" yaml-bare-scalar-re "\\) *:" + "\\(?: +\\|$\\)") + "Regexp matching a single YAML hash key.") + +(defconst yaml-scalar-context-re + (concat "\\(?:^\\(?:--- \\)?\\|{\\|\\(?: *[-,] +\\)+\\) *" + "\\(?:" yaml-bare-scalar-re " *: \\)?") + "Regexp indicating the beginning of a scalar context.") + +(defconst yaml-nested-map-re + (concat ".*: *\\(?:&.*\\|{ *\\|" yaml-tag-re " *\\)?$") + "Regexp matching a line beginning a YAML nested structure.") + +(defconst yaml-block-literal-base-re " *[>|][-+0-9]* *\\(?:\n\\|\\'\\)" + "Regexp matching the substring start of a block literal.") + +(defconst yaml-block-literal-re + (concat yaml-scalar-context-re + "\\(?:" yaml-tag-re "\\)?" + yaml-block-literal-base-re) + "Regexp matching a line beginning a YAML block literal.") + +(defconst yaml-nested-sequence-re + (concat "^\\(?:\\(?: *- +\\)+\\|\\(:? *-$\\)\\)" + "\\(?:" yaml-bare-scalar-re " *:\\(?: +.*\\)?\\)?$") + "Regexp matching a line containing one or more nested YAML sequences.") + +(defconst yaml-constant-scalars-re + (concat "\\(?:^\\|\\(?::\\|-\\|,\\|{\\|\\[\\) +\\) *" + (regexp-opt + '("~" "null" "Null" "NULL" + ".nan" ".NaN" ".NAN" + ".inf" ".Inf" ".INF" + "-.inf" "-.Inf" "-.INF" + "y" "Y" "yes" "Yes" "YES" "n" "N" "no" "No" "NO" + "true" "True" "TRUE" "false" "False" "FALSE" + "on" "On" "ON" "off" "Off" "OFF") t) + " *$") + "Regexp matching certain scalar constants in scalar context.") + + +;; Mode setup + +(defvar yaml-mode-map + (let ((map (make-sparse-keymap))) + (define-key map "|" 'yaml-electric-bar-and-angle) + (define-key map ">" 'yaml-electric-bar-and-angle) + (define-key map "-" 'yaml-electric-dash-and-dot) + (define-key map "." 'yaml-electric-dash-and-dot) + (define-key map (kbd "DEL") 'yaml-electric-backspace) + map) + "Keymap used in `yaml-mode' buffers.") + +(defvar yaml-mode-syntax-table + (let ((syntax-table (make-syntax-table))) + (modify-syntax-entry ?\' "\"" syntax-table) + (modify-syntax-entry ?\" "\"" syntax-table) + (modify-syntax-entry ?# "<" syntax-table) + (modify-syntax-entry ?\n ">" syntax-table) + (modify-syntax-entry ?\\ "\\" syntax-table) + (modify-syntax-entry ?- "_" syntax-table) + (modify-syntax-entry ?_ "_" syntax-table) + (modify-syntax-entry ?& "." syntax-table) + (modify-syntax-entry ?* "." syntax-table) + (modify-syntax-entry ?\( "." syntax-table) + (modify-syntax-entry ?\) "." syntax-table) + (modify-syntax-entry ?\{ "(}" syntax-table) + (modify-syntax-entry ?\} "){" syntax-table) + (modify-syntax-entry ?\[ "(]" syntax-table) + (modify-syntax-entry ?\] ")[" syntax-table) + syntax-table) + "Syntax table in use in `yaml-mode' buffers.") + +;;;###autoload +(define-derived-mode yaml-mode text-mode "YAML" + "Simple mode to edit YAML. + +\\{yaml-mode-map}" + :syntax-table yaml-mode-syntax-table + (set (make-local-variable 'comment-start) "# ") + (set (make-local-variable 'comment-start-skip) "#+ *") + (set (make-local-variable 'indent-line-function) 'yaml-indent-line) + (set (make-local-variable 'indent-tabs-mode) nil) + (set (make-local-variable 'fill-paragraph-function) 'yaml-fill-paragraph) + + (set (make-local-variable 'syntax-propertize-function) + 'yaml-mode-syntax-propertize-function) + (setq font-lock-defaults '(yaml-font-lock-keywords))) + + +;; Font-lock support + +(defvar yaml-font-lock-keywords + `((yaml-font-lock-block-literals 0 font-lock-string-face) + (,yaml-constant-scalars-re . (1 font-lock-constant-face)) + (,yaml-tag-re . (0 font-lock-type-face)) + (,yaml-node-anchor-alias-re . (0 font-lock-function-name-face)) + (,yaml-hash-key-re . (1 font-lock-variable-name-face)) + (,yaml-document-delimiter-re . (0 font-lock-comment-face)) + (,yaml-directive-re . (1 font-lock-builtin-face)) + ("^[\t]+" 0 'yaml-tab-face t)) + "Additional expressions to highlight in YAML mode.") + +(defun yaml-mode-syntax-propertize-function (beg end) + "Override buffer's syntax table for special syntactic constructs." + ;; Unhighlight foo#bar tokens between BEG and END. + (save-excursion + (goto-char beg) + (while (search-forward "#" end t) + (save-excursion + (forward-char -1) + ;; both ^# and [ \t]# are comments + (when (and (not (bolp)) + (not (memq (preceding-char) '(?\s ?\t)))) + (put-text-property (point) (1+ (point)) + 'syntax-table (string-to-syntax "_")))))) + + ;; If quote is detected as a syntactic string start but appeared + ;; after a non-whitespace character, then mark it as syntactic word. + (save-excursion + (goto-char beg) + (while (re-search-forward "['\"]" end t) + (when (get-text-property (point) 'yaml-block-literal) + (put-text-property (1- (point)) (point) + 'syntax-table (string-to-syntax "w"))) + (when (nth 8 (syntax-ppss)) + (save-excursion + (forward-char -1) + (cond ((and (char-equal ?' (char-before (point))) + (char-equal ?' (char-after (point))) + (put-text-property (1- (point)) (1+ (point)) + 'syntax-table (string-to-syntax "w")))) + ((and (not (bolp)) + (char-equal ?w (char-syntax (char-before (point))))) + (put-text-property (point) (1+ (point)) + 'syntax-table (string-to-syntax "w"))))))))) + +(defun yaml-font-lock-block-literals (bound) + "Find lines within block literals. +Find the next line of the first (if any) block literal after point and +prior to BOUND. Returns the beginning and end of the block literal +line in the match data, as consumed by `font-lock-keywords' matcher +functions. The function begins by searching backwards to determine +whether or not the current line is within a block literal. This could +be time-consuming in large buffers, so the number of lines searched is +artificially limitted to the value of +`yaml-block-literal-search-lines'." + (if (eolp) (goto-char (1+ (point)))) + (unless (or (eobp) (>= (point) bound)) + (let ((begin (point)) + (end (min (1+ (point-at-eol)) bound))) + (goto-char (point-at-bol)) + (while (and (looking-at yaml-blank-line-re) + (not (bobp))) + (forward-line -1)) + (let ((nlines yaml-block-literal-search-lines) + (min-level (current-indentation))) + (forward-line -1) + (while (and (/= nlines 0) + (/= min-level 0) + (not (looking-at yaml-block-literal-re)) + (not (bobp))) + (setq nlines (1- nlines)) + (unless (looking-at yaml-blank-line-re) + (setq min-level (min min-level (current-indentation)))) + (forward-line -1)) + (cond + ((and (< (current-indentation) min-level) + (looking-at yaml-block-literal-re)) + (goto-char end) + (put-text-property begin end 'yaml-block-literal t) + (set-match-data (list begin end)) + t) + ((progn + (goto-char begin) + (re-search-forward (concat yaml-block-literal-re + " *\\(.*\\)\n") + bound t)) + (let ((range (nthcdr 2 (match-data)))) + (put-text-property (car range) (cadr range) 'yaml-block-literal t) + (set-match-data range)) + t)))))) + + +;; Indentation and electric keys + +(defun yaml-compute-indentation () + "Calculate the maximum sensible indentation for the current line." + (save-excursion + (beginning-of-line) + (if (looking-at yaml-document-delimiter-re) 0 + (forward-line -1) + (while (and (looking-at yaml-blank-line-re) + (> (point) (point-min))) + (forward-line -1)) + (+ (current-indentation) + (if (looking-at yaml-nested-map-re) yaml-indent-offset 0) + (if (looking-at yaml-nested-sequence-re) yaml-indent-offset 0) + (if (looking-at yaml-block-literal-re) yaml-indent-offset 0))))) + +(defun yaml-indent-line () + "Indent the current line. +The first time this command is used, the line will be indented to the +maximum sensible indentation. Each immediately subsequent usage will +back-dent the line by `yaml-indent-offset' spaces. On reaching column +0, it will cycle back to the maximum sensible indentation." + (interactive "*") + (let ((ci (current-indentation)) + (cc (current-column)) + (need (yaml-compute-indentation))) + (save-excursion + (beginning-of-line) + (delete-horizontal-space) + (if (and (equal last-command this-command) (/= ci 0)) + (indent-to (* (/ (- ci 1) yaml-indent-offset) yaml-indent-offset)) + (indent-to need))) + (if (< (current-column) (current-indentation)) + (forward-to-indentation 0)))) + +(defun yaml-electric-backspace (arg) + "Delete characters or back-dent the current line. +If invoked following only whitespace on a line, will back-dent to the +immediately previous multiple of `yaml-indent-offset' spaces." + (interactive "*p") + (if (or (/= (current-indentation) (current-column)) (bolp)) + (funcall yaml-backspace-function arg) + (let ((ci (current-column))) + (beginning-of-line) + (delete-horizontal-space) + (indent-to (* (/ (- ci (* arg yaml-indent-offset)) + yaml-indent-offset) + yaml-indent-offset))))) + +(defun yaml-electric-bar-and-angle (arg) + "Insert the bound key and possibly begin a block literal. +Inserts the bound key. If inserting the bound key causes the current +line to match the initial line of a block literal, then inserts the +matching string from `yaml-block-literal-electric-alist', a newline, +and indents appropriately." + (interactive "*P") + (self-insert-command (prefix-numeric-value arg)) + (let ((extra-chars + (assoc last-command-event + yaml-block-literal-electric-alist))) + (cond + ((and extra-chars (not arg) (eolp) + (save-excursion + (beginning-of-line) + (looking-at yaml-block-literal-re))) + (insert (cdr extra-chars)) + (newline-and-indent))))) + +(defun yaml-electric-dash-and-dot (arg) + "Insert the bound key and possibly de-dent line. +Inserts the bound key. If inserting the bound key causes the current +line to match a document delimiter, de-dent the line to the left +margin." + (interactive "*P") + (self-insert-command (prefix-numeric-value arg)) + (save-excursion + (beginning-of-line) + (when (and (not arg) (looking-at yaml-document-delimiter-re)) + (delete-horizontal-space)))) + +(defun yaml-narrow-to-block-literal () + "Narrow the buffer to block literal if the point is in it, +otherwise do nothing." + (interactive) + (save-excursion + (goto-char (point-at-bol)) + (while (and (looking-at-p yaml-blank-line-re) (not (bobp))) + (forward-line -1)) + (let ((nlines yaml-block-literal-search-lines) + (min-level (current-indentation)) + beg) + (forward-line -1) + (while (and (/= nlines 0) + (/= min-level 0) + (not (looking-at-p yaml-block-literal-re)) + (not (bobp))) + (setq nlines (1- nlines)) + (unless (looking-at-p yaml-blank-line-re) + (setq min-level (min min-level (current-indentation)))) + (forward-line -1)) + (when (and (< (current-indentation) min-level) + (looking-at-p yaml-block-literal-re)) + (setq min-level (current-indentation)) + (forward-line) + (setq beg (point)) + (while (and (not (eobp)) + (or (looking-at-p yaml-blank-line-re) + (> (current-indentation) min-level))) + (forward-line)) + (narrow-to-region beg (point)))))) + +(defun yaml-fill-paragraph (&optional justify region) + "Fill paragraph. +Outside of comments, this behaves as `fill-paragraph' except that +filling does not cross boundaries of block literals. Inside comments, +this will do usual adaptive fill behaviors." + (interactive "*P") + (save-restriction + (yaml-narrow-to-block-literal) + (let ((fill-paragraph-function nil)) + (or (fill-comment-paragraph justify) + (fill-paragraph justify region))))) + +(defun yaml-set-imenu-generic-expression () + (make-local-variable 'imenu-generic-expression) + (make-local-variable 'imenu-create-index-function) + (setq imenu-create-index-function 'imenu-default-create-index-function) + (setq imenu-generic-expression yaml-imenu-generic-expression)) + +(add-hook 'yaml-mode-hook 'yaml-set-imenu-generic-expression) + + +(defun yaml-mode-version () + "Display version of `yaml-mode'." + (interactive) + (message "yaml-mode %s" yaml-mode-version) + yaml-mode-version) + +;;;###autoload +(add-to-list 'auto-mode-alist '("\\.\\(e?ya?\\|ra\\)ml\\'" . yaml-mode)) + +(provide 'yaml-mode) + +;;; yaml-mode.el ends here diff --git a/elpa/yaml-mode-20190625.1740/yaml-mode.elc b/elpa/yaml-mode-20190625.1740/yaml-mode.elc new file mode 100644 index 0000000000000000000000000000000000000000..f03e1efb2fe48466378017690b623d42c94e0172 GIT binary patch literal 14097 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, +;; João Távora , +;; Noam Postavsky +;; Maintainer: Noam Postavsky +;; Version: 0.13.0 +;; Package-Version: 20191030.1331 +;; X-URL: http://github.com/joaotavora/yasnippet +;; Keywords: convenience, emulation +;; URL: http://github.com/joaotavora/yasnippet +;; Package-Requires: ((cl-lib "0.5")) +;; EmacsWiki: YaSnippetMode + +;; 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 . + +;;; Commentary: +;; +;; Basic steps to setup: +;; +;; (add-to-list 'load-path +;; "~/path-to-yasnippet") +;; (require 'yasnippet) +;; (yas-global-mode 1) +;; +;; +;; Interesting variables are: +;; +;; `yas-snippet-dirs' +;; +;; The directory where user-created snippets are to be +;; stored. Can also be a list of directories. In that case, +;; when used for bulk (re)loading of snippets (at startup or +;; via `yas-reload-all'), directories appearing earlier in +;; the list override other dir's snippets. Also, the first +;; directory is taken as the default for storing the user's +;; new snippets. +;; +;; The deprecated `yas/root-directory' aliases this variable +;; for backward-compatibility. +;; +;; +;; Major commands are: +;; +;; M-x yas-expand +;; +;; Try to expand snippets before point. In `yas-minor-mode', +;; this is normally bound to TAB, but you can customize it in +;; `yas-minor-mode-map'. +;; +;; M-x yas-load-directory +;; +;; Prompts you for a directory hierarchy of snippets to load. +;; +;; M-x yas-activate-extra-mode +;; +;; Prompts you for an extra mode to add snippets for in the +;; current buffer. +;; +;; M-x yas-insert-snippet +;; +;; Prompts you for possible snippet expansion if that is +;; possible according to buffer-local and snippet-local +;; expansion conditions. With prefix argument, ignore these +;; conditions. +;; +;; M-x yas-visit-snippet-file +;; +;; Prompts you for possible snippet expansions like +;; `yas-insert-snippet', but instead of expanding it, takes +;; you directly to the snippet definition's file, if it +;; exists. +;; +;; M-x yas-new-snippet +;; +;; Lets you create a new snippet file in the correct +;; subdirectory of `yas-snippet-dirs', according to the +;; active major mode. +;; +;; M-x yas-load-snippet-buffer +;; +;; When editing a snippet, this loads the snippet. This is +;; bound to "C-c C-c" while in the `snippet-mode' editing +;; mode. +;; +;; M-x yas-tryout-snippet +;; +;; When editing a snippet, this opens a new empty buffer, +;; sets it to the appropriate major mode and inserts the +;; snippet there, so you can see what it looks like. This is +;; bound to "C-c C-t" while in `snippet-mode'. +;; +;; M-x yas-describe-tables +;; +;; Lists known snippets in a separate buffer. User is +;; prompted as to whether only the currently active tables +;; are to be displayed, or all the tables for all major +;; modes. +;; +;; If you have `dropdown-list' installed, you can optionally use it +;; as the preferred "prompting method", putting in your .emacs file, +;; for example: +;; +;; (require 'dropdown-list) +;; (setq yas-prompt-functions '(yas-dropdown-prompt +;; yas-ido-prompt +;; yas-completing-prompt)) +;; +;; Also check out the customization group +;; +;; M-x customize-group RET yasnippet RET +;; +;; If you use the customization group to set variables +;; `yas-snippet-dirs' or `yas-global-mode', make sure the path to +;; "yasnippet.el" is present in the `load-path' *before* the +;; `custom-set-variables' is executed in your .emacs file. +;; +;; For more information and detailed usage, refer to the project page: +;; http://github.com/joaotavora/yasnippet + +;;; Code: + +(require 'cl-lib) +(require 'eldoc) ; Needed for 24. +(declare-function cl-progv-after "cl-extra") ; Needed for 23.4. +(require 'easymenu) +(require 'help-mode) + +(defvar yas--editing-template) +(defvar yas--guessed-modes) +(defvar yas--indent-original-column) +(defvar yas--scheduled-jit-loads) +(defvar yas-keymap) +(defvar yas-selected-text) +(defvar yas-verbosity) +(defvar yas--current-template) + + +;;; User customizable variables + +(defgroup yasnippet nil + "Yet Another Snippet extension" + :prefix "yas-" + :group 'editing) + +(defconst yas--loaddir + (file-name-directory (or load-file-name buffer-file-name)) + "Directory that yasnippet was loaded from.") + +(defconst yas-installed-snippets-dir (expand-file-name "snippets" yas--loaddir)) +(make-obsolete-variable 'yas-installed-snippets-dir "\ +Yasnippet no longer comes with installed snippets" "0.13") + +(defconst yas--default-user-snippets-dir + (expand-file-name "snippets" user-emacs-directory)) + +(defcustom yas-snippet-dirs (list yas--default-user-snippets-dir) + "List of top-level snippet directories. + +Each element, a string or a symbol whose value is a string, +designates a top-level directory where per-mode snippet +directories can be found. + +Elements appearing earlier in the list override later elements' +snippets. + +The first directory is taken as the default for storing snippet's +created with `yas-new-snippet'. " + :type '(choice (directory :tag "Single directory") + (repeat :tag "List of directories" + (choice (directory) (variable)))) + :set #'(lambda (symbol new) + (let ((old (and (boundp symbol) + (symbol-value symbol)))) + (set-default symbol new) + (unless (or (not (fboundp 'yas-reload-all)) + (equal old new)) + (yas-reload-all))))) + +(defun yas-snippet-dirs () + "Return variable `yas-snippet-dirs' as list of strings." + (cl-loop for e in (if (listp yas-snippet-dirs) + yas-snippet-dirs + (list yas-snippet-dirs)) + collect + (cond ((stringp e) e) + ((and (symbolp e) + (boundp e) + (stringp (symbol-value e))) + (symbol-value e)) + (t + (error "[yas] invalid element %s in `yas-snippet-dirs'" e))))) + +(defcustom yas-new-snippet-default "\ +# -*- mode: snippet -*- +# name: $1 +# key: ${2:${1:$(yas--key-from-desc yas-text)}} +# -- +$0`(yas-escape-text yas-selected-text)`" + "Default snippet to use when creating a new snippet. +If nil, don't use any snippet." + :type 'string) + +(defcustom yas-prompt-functions '(yas-dropdown-prompt + yas-completing-prompt + yas-maybe-ido-prompt + yas-no-prompt) + "Functions to prompt for keys, templates, etc interactively. + +These functions are called with the following arguments: + +- PROMPT: A string to prompt the user + +- CHOICES: a list of strings or objects. + +- optional DISPLAY-FN : A function that, when applied to each of +the objects in CHOICES will return a string. + +The return value of any function you put here should be one of +the objects in CHOICES, properly formatted with DISPLAY-FN (if +that is passed). + +- To signal that your particular style of prompting is +unavailable at the moment, you can also have the function return +nil. + +- To signal that the user quit the prompting process, you can +signal `quit' with + + (signal \\='quit \"user quit!\")" + :type '(repeat function)) + +(defcustom yas-indent-line 'auto + "Controls indenting applied to a recent snippet expansion. + +The following values are possible: + +- `fixed' Indent the snippet to the current column; + +- `auto' Indent each line of the snippet with `indent-according-to-mode' + +Every other value means don't apply any snippet-side indentation +after expansion (the manual per-line \"$>\" indentation still +applies)." + :type '(choice (const :tag "Nothing" nothing) + (const :tag "Fixed" fixed) + (const :tag "Auto" auto))) + +(defcustom yas-also-auto-indent-first-line nil + "Non-nil means also auto indent first line according to mode. + +Naturally this is only valid when `yas-indent-line' is `auto'." + :type 'boolean) + +(defcustom yas-also-indent-empty-lines nil + "Non-nil means also indent empty lines according to mode." + :type 'boolean) + +(defcustom yas-snippet-revival t + "Non-nil means re-activate snippet fields after undo/redo." + :type 'boolean) + +(defcustom yas-triggers-in-field nil + "If non-nil, allow stacked expansions (snippets inside snippets). + +Otherwise `yas-next-field-or-maybe-expand' just moves on to the +next field" + :type 'boolean) + +(defcustom yas-fallback-behavior 'return-nil + "This option is obsolete. +Now that the conditional keybinding `yas-maybe-expand' is +available, there's no more need for it." + :type '(choice (const :tag "Call previous command" call-other-command) + (const :tag "Do nothing" return-nil))) + +(make-obsolete-variable + 'yas-fallback-behavior + "For `call-other-command' behavior bind to the conditional +command value `yas-maybe-expand', for `return-nil' behavior bind +directly to `yas-expand'." + "0.12") + +(defcustom yas-choose-keys-first nil + "If non-nil, prompt for snippet key first, then for template. + +Otherwise prompts for all possible snippet names. + +This affects `yas-insert-snippet' and `yas-visit-snippet-file'." + :type 'boolean) + +(defcustom yas-choose-tables-first nil + "If non-nil, and multiple eligible snippet tables, prompts user for tables first. + +Otherwise, user chooses between the merging together of all +eligible tables. + +This affects `yas-insert-snippet', `yas-visit-snippet-file'" + :type 'boolean) + +(defcustom yas-use-menu 'abbreviate + "Display a YASnippet menu in the menu bar. + +When non-nil, submenus for each snippet table will be listed +under the menu \"Yasnippet\". + +- If set to `abbreviate', only the current major-mode +menu and the modes set in `yas--extra-modes' are listed. + +- If set to `full', every submenu is listed + +- If set to nil, hide the menu. + +Any other non-nil value, every submenu is listed." + :type '(choice (const :tag "Full" full) + (const :tag "Abbreviate" abbreviate) + (const :tag "No menu" nil))) + +(defcustom yas-trigger-symbol (or (and (eq window-system 'mac) + (ignore-errors + (char-to-string ?\x21E5))) ;; little ->| sign + " =>") + "The text that will be used in menu to represent the trigger." + :type 'string) + +(defcustom yas-wrap-around-region nil + "What to insert for snippet's $0 field. + +If set to a character, insert contents of corresponding register. +If non-nil insert region contents. This can be overridden on a +per-snippet basis. A value of `cua' is considered equivalent to +`?0' for backwards compatibility." + :type '(choice (character :tag "Insert from register") + (const t :tag "Insert region contents") + (const nil :tag "Don't insert anything") + (const cua))) ; backwards compat + +(defcustom yas-good-grace t + "If non-nil, don't raise errors in elisp evaluation. + +This affects both the inline elisp in snippets and the hook +variables such as `yas-after-exit-snippet-hook'. + +If this variable's value is `inline', an error string \"[yas] +error\" is returned instead of raising the error. If this +variable's value is `hooks', a message is output to according to +`yas-verbosity-level'. If this variable's value is t, both are +active." + :type 'boolean) + +(defcustom yas-visit-from-menu nil + "If non-nil visit snippets's files from menu, instead of expanding them. + +This can only work when snippets are loaded from files." + :type 'boolean) + +(defcustom yas-expand-only-for-last-commands nil + "List of `last-command' values to restrict tab-triggering to, or nil. + +Leave this set at nil (the default) to be able to trigger an +expansion simply by placing the cursor after a valid tab trigger, +using whichever commands. + +Optionally, set this to something like (self-insert-command) if +you to wish restrict expansion to only happen when the last +letter of the snippet tab trigger was typed immediately before +the trigger key itself." + :type '(repeat function)) + +(defcustom yas-alias-to-yas/prefix-p t + "If non-nil make aliases for the old style yas/ prefixed symbols. +It must be set to nil before loading yasnippet to take effect." + :type 'boolean) + +;; Only two faces, and one of them shouldn't even be used... +;; +(defface yas-field-highlight-face + '((t (:inherit 'region))) + "The face used to highlight the currently active field of a snippet") + +(defface yas--field-debug-face + '() + "The face used for debugging some overlays normally hidden") + + +;;; User-visible variables + +(defconst yas-maybe-skip-and-clear-field + '(menu-item "" yas-skip-and-clear-field + :filter yas--maybe-clear-field-filter) + "A conditional key definition. +This can be used as a key definition in keymaps to bind a key to +`yas-skip-and-clear-field' only when at the beginning of an +unmodified snippet field.") + +(defconst yas-maybe-clear-field + '(menu-item "" yas-clear-field + :filter yas--maybe-clear-field-filter) + "A conditional key definition. +This can be used as a key definition in keymaps to bind a key to +`yas-clear-field' only when at the beginning of an +unmodified snippet field.") + +(defun yas-filtered-definition (def) + "Return a condition key definition. +The condition will respect the value of `yas-keymap-disable-hook'." + `(menu-item "" ,def + :filter ,(lambda (cmd) (unless (run-hook-with-args-until-success + 'yas-keymap-disable-hook) + cmd)))) + +(defvar yas-keymap + (let ((map (make-sparse-keymap))) + (define-key map [(tab)] (yas-filtered-definition 'yas-next-field-or-maybe-expand)) + (define-key map (kbd "TAB") (yas-filtered-definition 'yas-next-field-or-maybe-expand)) + (define-key map [(shift tab)] (yas-filtered-definition 'yas-prev-field)) + (define-key map [backtab] (yas-filtered-definition 'yas-prev-field)) + (define-key map (kbd "C-g") (yas-filtered-definition 'yas-abort-snippet)) + ;; Yes, filters can be chained! + (define-key map (kbd "C-d") (yas-filtered-definition yas-maybe-skip-and-clear-field)) + (define-key map (kbd "DEL") (yas-filtered-definition yas-maybe-clear-field)) + map) + "The active keymap while a snippet expansion is in progress.") + +(defvar yas-key-syntaxes (list #'yas-try-key-from-whitespace + "w_.()" "w_." "w_" "w") + "Syntaxes and functions to help look for trigger keys before point. + +Each element in this list specifies how to skip buffer positions +backwards and look for the start of a trigger key. + +Each element can be either a string or a function receiving the +original point as an argument. A string element is simply passed +to `skip-syntax-backward' whereas a function element is called +with no arguments and should also place point before the original +position. + +The string between the resulting buffer position and the original +point is matched against the trigger keys in the active snippet +tables. + +If no expandable snippets are found, the next element is the list +is tried, unless a function element returned the symbol `again', +in which case it is called again from the previous position and +may once more reposition point. + +For example, if `yas-key-syntaxes' has the value (\"w\" \"w_\"), +trigger keys composed exclusively of \"word\"-syntax characters +are looked for first. Failing that, longer keys composed of +\"word\" or \"symbol\" syntax are looked for. Therefore, +triggering after + +foo-barbaz + +will, according to the \"w\" element first try \"barbaz\". If +that isn't a trigger key, \"foo-barbaz\" is tried, respecting the +second \"w_\" element. Notice that even if \"baz\" is a trigger +key for an active snippet, it won't be expanded, unless a +function is added to `yas-key-syntaxes' that eventually places +point between \"bar\" and \"baz\". + +See also Info node `(elisp) Syntax Descriptors'.") + +(defvar yas-after-exit-snippet-hook + '() + "Hooks to run after a snippet exited. + +The hooks will be run in an environment where some variables bound to +proper values: + +`yas-snippet-beg' : The beginning of the region of the snippet. + +`yas-snippet-end' : Similar to beg. + +Attention: These hooks are not run when exiting nested/stacked snippet expansion!") + +(defvar yas-before-expand-snippet-hook + '() + "Hooks to run just before expanding a snippet.") + +(defconst yas-not-string-or-comment-condition + '(if (let ((ppss (syntax-ppss))) + (or (nth 3 ppss) (nth 4 ppss))) + '(require-snippet-condition . force-in-comment) + t) + "Disables snippet expansion in strings and comments. +To use, set `yas-buffer-local-condition' to this value.") + +(defcustom yas-buffer-local-condition t + "Snippet expanding condition. + +This variable is a Lisp form which is evaluated every time a +snippet expansion is attempted: + + * If it evaluates to nil, no snippets can be expanded. + + * If it evaluates to the a cons (require-snippet-condition + . REQUIREMENT) + + * Snippets bearing no \"# condition:\" directive are not + considered + + * Snippets bearing conditions that evaluate to nil (or + produce an error) won't be considered. + + * If the snippet has a condition that evaluates to non-nil + RESULT: + + * If REQUIREMENT is t, the snippet is considered + + * If REQUIREMENT is `eq' RESULT, the snippet is + considered + + * Otherwise, the snippet is not considered. + + * If it evaluates to the symbol `always', all snippets are + considered for expansion, regardless of any conditions. + + * If it evaluates to t or some other non-nil value + + * Snippet bearing no conditions, or conditions that + evaluate to non-nil, are considered for expansion. + + * Otherwise, the snippet is not considered. + +Here's an example preventing snippets from being expanded from +inside comments, in `python-mode' only, with the exception of +snippets returning the symbol `force-in-comment' in their +conditions. + + (add-hook \\='python-mode-hook + (lambda () + (setq yas-buffer-local-condition + \\='(if (python-syntax-comment-or-string-p) + \\='(require-snippet-condition . force-in-comment) + t))))" + :type + `(choice + (const :tag "Disable snippet expansion inside strings and comments" + ,yas-not-string-or-comment-condition) + (const :tag "Expand all snippets regardless of conditions" always) + (const :tag "Expand snippets unless their condition is nil" t) + (const :tag "Disable all snippet expansion" nil) + sexp)) + +(defcustom yas-keymap-disable-hook nil + "The `yas-keymap' bindings are disabled if any function in this list returns non-nil. +This is useful to control whether snippet navigation bindings +override bindings from other packages (e.g., `company-mode')." + :type 'hook) + +(defcustom yas-overlay-priority 100 + "Priority to use for yasnippets overlays. +This is useful to control whether snippet navigation bindings +override `keymap' overlay property bindings from other packages." + :type 'integer) + +(defcustom yas-inhibit-overlay-modification-protection nil + "If nil, changing text outside the active field aborts the snippet. +This protection is intended to prevent yasnippet from ending up +in an inconsistent state. However, some packages (e.g., the +company completion package) may trigger this protection when it +is not needed. In that case, setting this variable to non-nil +can be useful." + ;; See also `yas--on-protection-overlay-modification'. + :type 'boolean) + + +;;; Internal variables + +(defconst yas--version "0.13.0") + +(defvar yas--menu-table (make-hash-table) + "A hash table of MAJOR-MODE symbols to menu keymaps.") + +(defvar yas--escaped-characters + '(?\\ ?` ?\" ?' ?$ ?} ?{ ?\( ?\)) + "List of characters which *might* need to be escaped.") + +(defconst yas--field-regexp + "${\\([0-9]+:\\)?\\([^}]*\\)}" + "A regexp to *almost* recognize a field.") + +(defconst yas--multi-dollar-lisp-expression-regexp + "$+[ \t\n]*\\(([^)]*)\\)" + "A regexp to *almost* recognize a \"$(...)\" expression.") + +(defconst yas--backquote-lisp-expression-regexp + "`\\([^`]*\\)`" + "A regexp to recognize a \"\\=`lisp-expression\\=`\" expression." ) + +(defconst yas--transform-mirror-regexp + "${\\(?:\\([0-9]+\\):\\)?$\\([ \t\n]*([^}]*\\)" + "A regexp to *almost* recognize a mirror with a transform.") + +(defconst yas--simple-mirror-regexp + "$\\([0-9]+\\)" + "A regexp to recognize a simple mirror.") + +(defvar yas--snippet-id-seed 0 + "Contains the next id for a snippet.") + +(defvar yas--original-auto-fill-function nil + "The original value of `auto-fill-function'.") +(make-variable-buffer-local 'yas--original-auto-fill-function) + +(defvar yas--watch-auto-fill-backtrace nil) + +(defun yas--watch-auto-fill (sym newval op _where) + (when (and (or (and (eq sym 'yas--original-auto-fill-function) + (null newval) + (eq auto-fill-function 'yas--auto-fill)) + (and (eq sym 'auto-fill-function) + (eq newval 'yas--auto-fill) + (null yas--original-auto-fill-function))) + (null yas--watch-auto-fill-backtrace) + (fboundp 'backtrace-frames) ; Suppress compiler warning. + ;; If we're about to change `auto-fill-function' too, + ;; it's okay (probably). + (not (and (eq op 'makunbound) + (not (eq (default-value 'auto-fill-function) 'yas--auto-fill)) + (cl-member 'kill-all-local-variables + (backtrace-frames 'yas--watch-auto-fill) + :key (lambda (frame) (nth 1 frame)))))) + (setq yas--watch-auto-fill-backtrace + (backtrace-frames 'yas--watch-auto-fill)))) + +;; Try to get more info on #873/919 (this only works for Emacs 26+). +(when (fboundp 'add-variable-watcher) + (add-variable-watcher 'yas--original-auto-fill-function + #'yas--watch-auto-fill) + (add-variable-watcher 'auto-fill-function + #'yas--watch-auto-fill)) + +(defun yas--snippet-next-id () + (let ((id yas--snippet-id-seed)) + (cl-incf yas--snippet-id-seed) + id)) + + +;;; Minor mode stuff + +(defvar yas--minor-mode-menu nil + "Holds the YASnippet menu.") + +(defvar yas--condition-cache-timestamp nil) + +(defun yas-maybe-expand-abbrev-key-filter (cmd) + "Return CMD if there is an expandable snippet at point. +This function is useful as a `:filter' to a conditional key +definition." + (when (let ((yas--condition-cache-timestamp (current-time))) + (yas--templates-for-key-at-point)) + cmd)) + +(define-obsolete-function-alias 'yas--maybe-expand-key-filter + #'yas-maybe-expand-abbrev-key-filter "0.14") + +(defconst yas-maybe-expand + '(menu-item "" yas-expand :filter yas-maybe-expand-abbrev-key-filter) + "A conditional key definition. +This can be used as a key definition in keymaps to bind a key to +`yas-expand' only when there is a snippet available to be +expanded.") + +(defvar yas-minor-mode-map + (let ((map (make-sparse-keymap))) + (define-key map [(tab)] yas-maybe-expand) + (define-key map (kbd "TAB") yas-maybe-expand) + (define-key map "\C-c&\C-s" 'yas-insert-snippet) + (define-key map "\C-c&\C-n" 'yas-new-snippet) + (define-key map "\C-c&\C-v" 'yas-visit-snippet-file) + map) + "The keymap used when `yas-minor-mode' is active.") + +(easy-menu-define yas--minor-mode-menu + yas-minor-mode-map + "Menu used when `yas-minor-mode' is active." + '("YASnippet" :visible yas-use-menu + "----" + ["Expand trigger" yas-expand + :help "Possibly expand tab trigger before point"] + ["Insert at point..." yas-insert-snippet + :help "Prompt for an expandable snippet and expand it at point"] + ["New snippet..." yas-new-snippet + :help "Create a new snippet in an appropriate directory"] + ["Visit snippet file..." yas-visit-snippet-file + :help "Prompt for an expandable snippet and find its file"] + "----" + ("Snippet menu behaviour" + ["Visit snippets" (setq yas-visit-from-menu t) + :help "Visit snippets from the menu" + :active t :style radio :selected yas-visit-from-menu] + ["Expand snippets" (setq yas-visit-from-menu nil) + :help "Expand snippets from the menu" + :active t :style radio :selected (not yas-visit-from-menu)] + "----" + ["Show all known modes" (setq yas-use-menu 'full) + :help "Show one snippet submenu for each loaded table" + :active t :style radio :selected (eq yas-use-menu 'full)] + ["Abbreviate according to current mode" (setq yas-use-menu 'abbreviate) + :help "Show only snippet submenus for the current active modes" + :active t :style radio :selected (eq yas-use-menu 'abbreviate)]) + ("Indenting" + ["Auto" (setq yas-indent-line 'auto) + :help "Indent each line of the snippet with `indent-according-to-mode'" + :active t :style radio :selected (eq yas-indent-line 'auto)] + ["Fixed" (setq yas-indent-line 'fixed) + :help "Indent the snippet to the current column" + :active t :style radio :selected (eq yas-indent-line 'fixed)] + ["None" (setq yas-indent-line 'none) + :help "Don't apply any particular snippet indentation after expansion" + :active t :style radio :selected (not (member yas-indent-line '(fixed auto)))] + "----" + ["Also auto indent first line" (setq yas-also-auto-indent-first-line + (not yas-also-auto-indent-first-line)) + :help "When auto-indenting also, auto indent the first line menu" + :active (eq yas-indent-line 'auto) + :style toggle :selected yas-also-auto-indent-first-line] + ) + ("Prompting method" + ["System X-widget" (setq yas-prompt-functions + (cons #'yas-x-prompt + (remove #'yas-x-prompt + yas-prompt-functions))) + :help "Use your windowing system's (gtk, mac, windows, etc...) default menu" + :active t :style radio :selected (eq (car yas-prompt-functions) + #'yas-x-prompt)] + ["Dropdown-list" (setq yas-prompt-functions + (cons #'yas-dropdown-prompt + (remove #'yas-dropdown-prompt + yas-prompt-functions))) + :help "Use a special dropdown list" + :active t :style radio :selected (eq (car yas-prompt-functions) + #'yas-dropdown-prompt)] + ["Ido" (setq yas-prompt-functions + (cons #'yas-ido-prompt + (remove #'yas-ido-prompt + yas-prompt-functions))) + :help "Use an ido-style minibuffer prompt" + :active t :style radio :selected (eq (car yas-prompt-functions) + #'yas-ido-prompt)] + ["Completing read" (setq yas-prompt-functions + (cons #'yas-completing-prompt + (remove #'yas-completing-prompt + yas-prompt-functions))) + :help "Use a normal minibuffer prompt" + :active t :style radio :selected (eq (car yas-prompt-functions) + #'yas-completing-prompt)] + ) + ("Misc" + ["Wrap region in exit marker" + (setq yas-wrap-around-region + (not yas-wrap-around-region)) + :help "If non-nil automatically wrap the selected text in the $0 snippet exit" + :style toggle :selected yas-wrap-around-region] + ["Allow stacked expansions " + (setq yas-triggers-in-field + (not yas-triggers-in-field)) + :help "If non-nil allow snippets to be triggered inside other snippet fields" + :style toggle :selected yas-triggers-in-field] + ["Revive snippets on undo " + (setq yas-snippet-revival + (not yas-snippet-revival)) + :help "If non-nil allow snippets to become active again after undo" + :style toggle :selected yas-snippet-revival] + ["Good grace " + (setq yas-good-grace + (not yas-good-grace)) + :help "If non-nil don't raise errors in bad embedded elisp in snippets" + :style toggle :selected yas-good-grace] + ) + "----" + ["Load snippets..." yas-load-directory + :help "Load snippets from a specific directory"] + ["Reload everything" yas-reload-all + :help "Cleanup stuff, reload snippets, rebuild menus"] + ["About" yas-about + :help "Display some information about YASnippet"])) + +(define-obsolete-variable-alias 'yas-extra-modes 'yas--extra-modes "0.9.1") +(defvar yas--extra-modes nil + "An internal list of modes for which to also lookup snippets. + +This variable probably makes more sense as buffer-local, so +ensure your use `make-local-variable' when you set it.") + +(defvar yas--tables (make-hash-table) + "A hash table of mode symbols to `yas--table' objects.") + +(defvar yas--parents (make-hash-table) + "A hash table of mode symbols do lists of direct parent mode symbols. + +This list is populated when reading the \".yas-parents\" files +found when traversing snippet directories with +`yas-load-directory'. + +There might be additional parenting information stored in the +`derived-mode-parent' property of some mode symbols, but that is +not recorded here.") + +(defvar yas--direct-keymaps (list) + "Keymap alist supporting direct snippet keybindings. + +This variable is placed in `emulation-mode-map-alists'. + +Its elements looks like (TABLE-NAME . KEYMAP). They're +instantiated on `yas-reload-all' but KEYMAP is added to only when +loading snippets. `yas--direct-TABLE-NAME' is then a variable +set buffer-locally when entering `yas-minor-mode'. KEYMAP binds +all defined direct keybindings to `yas-maybe-expand-from-keymap' +which decides on the snippet to expand.") + +(defun yas-direct-keymaps-reload () + "Force reload the direct keybinding for active snippet tables." + (interactive) + (setq yas--direct-keymaps nil) + (maphash #'(lambda (name table) + (push (cons (intern (format "yas--direct-%s" name)) + (yas--table-direct-keymap table)) + yas--direct-keymaps)) + yas--tables)) + +(defun yas--modes-to-activate (&optional mode) + "Compute list of mode symbols that are active for `yas-expand' and friends." + (defvar yas--dfs) ;We rely on dynbind. We could use `letrec' instead! + (let* ((explored (if mode (list mode) ; Building up list in reverse. + (cons major-mode (reverse yas--extra-modes)))) + (yas--dfs + (lambda (mode) + (cl-loop for neighbour + in (cl-list* (or (get mode 'derived-mode-parent) + ;; Consider `fundamental-mode' + ;; as ultimate ancestor. + 'fundamental-mode) + ;; NOTE: `fboundp' check is redundant + ;; since Emacs 24.4. + (and (fboundp mode) (symbol-function mode)) + (gethash mode yas--parents)) + when (and neighbour + (not (memq neighbour explored)) + (symbolp neighbour)) + do (push neighbour explored) + (funcall yas--dfs neighbour))))) + (mapc yas--dfs explored) + (nreverse explored))) + +(defvar yas-minor-mode-hook nil + "Hook run when `yas-minor-mode' is turned on.") + +(defun yas--auto-fill-wrapper () + (when (and auto-fill-function + (not (eq auto-fill-function #'yas--auto-fill))) + (setq yas--original-auto-fill-function auto-fill-function) + (setq auto-fill-function #'yas--auto-fill))) + +;;;###autoload +(define-minor-mode yas-minor-mode + "Toggle YASnippet mode. + +When YASnippet mode is enabled, `yas-expand', normally bound to +the TAB key, expands snippets of code depending on the major +mode. + +With no argument, this command toggles the mode. +positive prefix argument turns on the mode. +Negative prefix argument turns off the mode. + +Key bindings: +\\{yas-minor-mode-map}" + :lighter " yas" ;; The indicator for the mode line. + (cond ((and yas-minor-mode (featurep 'yasnippet)) + ;; Install the direct keymaps in `emulation-mode-map-alists' + ;; (we use `add-hook' even though it's not technically a hook, + ;; but it works). Then define variables named after modes to + ;; index `yas--direct-keymaps'. + ;; + ;; Also install the post-command-hook. + ;; + (cl-pushnew 'yas--direct-keymaps emulation-mode-map-alists) + (add-hook 'post-command-hook #'yas--post-command-handler nil t) + ;; Set the `yas--direct-%s' vars for direct keymap expansion + ;; + (dolist (mode (yas--modes-to-activate)) + (let ((name (intern (format "yas--direct-%s" mode)))) + (set-default name nil) + (set (make-local-variable name) t))) + ;; Perform JIT loads + (yas--load-pending-jits) + ;; Install auto-fill handler. + (yas--auto-fill-wrapper) ; Now... + (add-hook 'auto-fill-mode-hook #'yas--auto-fill-wrapper)) ; or later. + (t + ;; Uninstall the direct keymaps, post-command hook, and + ;; auto-fill handler. + (remove-hook 'post-command-hook #'yas--post-command-handler t) + (remove-hook 'auto-fill-mode-hook #'yas--auto-fill-wrapper) + (when (local-variable-p 'yas--original-auto-fill-function) + (setq auto-fill-function yas--original-auto-fill-function)) + (setq emulation-mode-map-alists + (remove 'yas--direct-keymaps emulation-mode-map-alists))))) + +(defun yas-activate-extra-mode (mode) + "Activates the snippets for the given `mode' in the buffer. + +The function can be called in the hook of a minor mode to +activate snippets associated with that mode." + (interactive + (let (modes + symbol) + (maphash (lambda (k _) + (setq modes (cons (list k) modes))) + yas--parents) + (setq symbol (completing-read + "Activate mode: " modes nil t)) + (list + (when (not (string= "" symbol)) + (intern symbol))))) + (when mode + (add-to-list (make-local-variable 'yas--extra-modes) mode) + (yas--load-pending-jits))) + +(defun yas-deactivate-extra-mode (mode) + "Deactivates the snippets for the given `mode' in the buffer." + (interactive + (list (intern + (completing-read + "Deactivate mode: " (mapcar #'list yas--extra-modes) nil t)))) + (set (make-local-variable 'yas--extra-modes) + (remove mode + yas--extra-modes))) + +(defun yas-temp-buffer-p (&optional buffer) + (eq (aref (buffer-name buffer) 0) ?\s)) + +(define-obsolete-variable-alias 'yas-dont-activate + 'yas-dont-activate-functions "0.9.2") +(defvar yas-dont-activate-functions (list #'minibufferp #'yas-temp-buffer-p) + "Special hook to control which buffers `yas-global-mode' affects. +Functions are called with no argument, and should return non-nil to prevent +`yas-global-mode' from enabling yasnippet in this buffer. + +In Emacsen < 24, this variable is buffer-local. Because +`yas-minor-mode-on' is called by `yas-global-mode' after +executing the buffer's major mode hook, setting this variable +there is an effective way to define exceptions to the \"global\" +activation behaviour. + +In Emacsen >= 24, only the global value is used. To define +per-mode exceptions to the \"global\" activation behaviour, call +`yas-minor-mode' with a negative argument directily in the major +mode's hook.") +(unless (> emacs-major-version 23) + (with-no-warnings + (make-variable-buffer-local 'yas-dont-activate))) + + +(defun yas-minor-mode-on () + "Turn on YASnippet minor mode. + +Honour `yas-dont-activate-functions', which see." + (interactive) + (unless (or + ;; The old behavior used for Emacs<24 was to set + ;; `yas-dont-activate-functions' to t buffer-locally. + (not (or (listp yas-dont-activate-functions) + (functionp yas-dont-activate-functions))) + (run-hook-with-args-until-success 'yas-dont-activate-functions)) + (yas-minor-mode 1))) + +;;;###autoload +(define-globalized-minor-mode yas-global-mode yas-minor-mode yas-minor-mode-on) + +(defun yas--global-mode-reload-with-jit-maybe () + "Run `yas-reload-all' when `yas-global-mode' is on." + (when yas-global-mode (yas-reload-all))) + +(add-hook 'yas-global-mode-hook #'yas--global-mode-reload-with-jit-maybe) + + +;;; Major mode stuff + +(defvar yas--font-lock-keywords + (append '(("^#.*$" . font-lock-comment-face)) + (with-temp-buffer + (let ((prog-mode-hook nil) + (emacs-lisp-mode-hook nil)) + (ignore-errors (emacs-lisp-mode))) + (font-lock-set-defaults) + (if (eq t (car-safe font-lock-keywords)) + ;; They're "compiled", so extract the source. + (cadr font-lock-keywords) + font-lock-keywords)) + '(("\\$\\([0-9]+\\)" + (0 font-lock-keyword-face) + (1 font-lock-string-face t)) + ("\\${\\([0-9]+\\):?" + (0 font-lock-keyword-face) + (1 font-lock-warning-face t)) + ("\\(\\$(\\)" 1 font-lock-preprocessor-face) + ("}" + (0 font-lock-keyword-face))))) + +(defvar snippet-mode-map + (let ((map (make-sparse-keymap))) + (easy-menu-define nil + map + "Menu used when snippet-mode is active." + (cons "Snippet" + (mapcar #'(lambda (ent) + (when (nth 2 ent) + (define-key map (nth 2 ent) (nth 1 ent))) + (vector (nth 0 ent) (nth 1 ent) t)) + '(("Load this snippet" yas-load-snippet-buffer "\C-c\C-l") + ("Load and quit window" yas-load-snippet-buffer-and-close "\C-c\C-c") + ("Try out this snippet" yas-tryout-snippet "\C-c\C-t"))))) + map) + "The keymap used when `snippet-mode' is active.") + + + +;;;###autoload(autoload 'snippet-mode "yasnippet" "A mode for editing yasnippets" t nil) +(eval-and-compile + (if (fboundp 'prog-mode) + ;; `prog-mode' is new in 24.1. + (define-derived-mode snippet-mode prog-mode "Snippet" + "A mode for editing yasnippets" + (setq font-lock-defaults '(yas--font-lock-keywords)) + (set (make-local-variable 'require-final-newline) nil) + (set (make-local-variable 'comment-start) "#") + (set (make-local-variable 'comment-start-skip) "#+[\t ]*") + (add-hook 'after-save-hook #'yas-maybe-load-snippet-buffer nil t)) + (define-derived-mode snippet-mode fundamental-mode "Snippet" + "A mode for editing yasnippets" + (setq font-lock-defaults '(yas--font-lock-keywords)) + (set (make-local-variable 'require-final-newline) nil) + (set (make-local-variable 'comment-start) "#") + (set (make-local-variable 'comment-start-skip) "#+[\t ]*") + (add-hook 'after-save-hook #'yas-maybe-load-snippet-buffer nil t)))) + +(defun yas-snippet-mode-buffer-p () + "Return non-nil if current buffer should be in `snippet-mode'. +Meaning it's visiting a file under one of the mode directories in +`yas-snippet-dirs'." + (when buffer-file-name + (cl-member buffer-file-name (yas-snippet-dirs) + :test #'file-in-directory-p))) + +;; We're abusing `magic-fallback-mode-alist' here because +;; `auto-mode-alist' doesn't support function matchers. +(add-to-list 'magic-fallback-mode-alist + `(yas-snippet-mode-buffer-p . snippet-mode)) + + +;;; Internal structs for template management + +(cl-defstruct (yas--template + (:constructor yas--make-template) + ;; Handles `yas-define-snippets' format, plus the + ;; initial TABLE argument. + (:constructor + yas--define-snippets-2 + (table + key content + &optional xname condition group + expand-env load-file xkeybinding xuuid save-file + &aux + (name (or xname + ;; A little redundant: we always get a name + ;; from `yas--parse-template' except when + ;; there isn't a file. + (and load-file (file-name-nondirectory load-file)) + (and save-file (file-name-nondirectory save-file)) + key)) + (keybinding (yas--read-keybinding xkeybinding)) + (uuid (or xuuid name)) + (old (gethash uuid (yas--table-uuidhash table))) + (menu-binding-pair + (and old (yas--template-menu-binding-pair old))) + (perm-group + (and old (yas--template-perm-group old)))))) + "A template for a snippet." + key + content + name + condition + expand-env + load-file + save-file + keybinding + uuid + menu-binding-pair + group ;; as dictated by the #group: directive or .yas-make-groups + perm-group ;; as dictated by `yas-define-menu' + table + ) + +(cl-defstruct (yas--table (:constructor yas--make-snippet-table (name))) + "A table to store snippets for a particular mode. + +Has the following fields: + +`yas--table-name' + + A symbol name normally corresponding to a major mode, but can + also be a pseudo major-mode to be used in + `yas-activate-extra-mode', for example. + +`yas--table-hash' + + A hash table (KEY . NAMEHASH), known as the \"keyhash\". KEY is + a string or a vector, where the former is the snippet's trigger + and the latter means it's a direct keybinding. NAMEHASH is yet + another hash of (NAME . TEMPLATE) where NAME is the snippet's + name and TEMPLATE is a `yas--template' object. + +`yas--table-direct-keymap' + + A keymap for the snippets in this table that have direct + keybindings. This is kept in sync with the keyhash, i.e., all + the elements of the keyhash that are vectors appear here as + bindings to `yas-maybe-expand-from-keymap'. + +`yas--table-uuidhash' + + A hash table mapping snippets uuid's to the same `yas--template' + objects. A snippet uuid defaults to the snippet's name." + name + (hash (make-hash-table :test 'equal)) + (uuidhash (make-hash-table :test 'equal)) + (parents nil) + (direct-keymap (make-sparse-keymap))) + +(defun yas--get-template-by-uuid (mode uuid) + "Find the snippet template in MODE by its UUID." + (let* ((table (gethash mode yas--tables mode))) + (when table + (gethash uuid (yas--table-uuidhash table))))) + +;; Apropos storing/updating in TABLE, this works in two steps: +;; +;; 1. `yas--remove-template-by-uuid' removes any +;; keyhash-namehash-template mappings from TABLE, grabbing the +;; snippet by its uuid. Also removes mappings from TABLE's +;; `yas--table-direct-keymap' (FIXME: and should probably take care +;; of potentially stale menu bindings right?.) +;; +;; 2. `yas--add-template' adds this all over again. +;; +;; Create a new or add to an existing keyhash-namehash mapping. +;; +;; For reference on understanding this, consider three snippet +;; definitions: +;; +;; A: # name: The Foo +;; # key: foo +;; # binding: C-c M-l +;; +;; B: # name: Mrs Foo +;; # key: foo +;; +;; C: # name: The Bar +;; # binding: C-c M-l +;; +;; D: # name: Baz +;; # key: baz +;; +;; keyhash namehashes(3) yas--template structs(4) +;; ----------------------------------------------------- +;; __________ +;; / \ +;; "foo" ---> "The Foo" ---> [yas--template A] | +;; "Mrs Foo" ---> [yas--template B] | +;; | +;; [C-c M-l] ---> "The Foo" -------------------------/ +;; "The Bar" ---> [yas--template C] +;; +;; "baz" ---> "Baz" ---> [yas--template D] +;; +;; Additionally, since uuid defaults to the name, we have a +;; `yas--table-uuidhash' for TABLE +;; +;; uuidhash yas--template structs +;; ------------------------------- +;; "The Foo" ---> [yas--template A] +;; "Mrs Foo" ---> [yas--template B] +;; "The Bar" ---> [yas--template C] +;; "Baz" ---> [yas--template D] +;; +;; FIXME: the more I look at this data-structure the more I think I'm +;; stupid. There has to be an easier way (but beware lots of code +;; depends on this). +;; +(defun yas--remove-template-by-uuid (table uuid) + "Remove from TABLE a template identified by UUID." + (let ((template (gethash uuid (yas--table-uuidhash table)))) + (when template + (let* ((name (yas--template-name template)) + (empty-keys nil)) + ;; Remove the name from each of the targeted namehashes + ;; + (maphash #'(lambda (k v) + (let ((template (gethash name v))) + (when (and template + (equal uuid (yas--template-uuid template))) + (remhash name v) + (when (zerop (hash-table-count v)) + (push k empty-keys))))) + (yas--table-hash table)) + ;; Remove the namehash themselves if they've become empty + ;; + (dolist (key empty-keys) + (when (vectorp key) + (define-key (yas--table-direct-keymap table) key nil)) + (remhash key (yas--table-hash table))) + + ;; Finally, remove the uuid from the uuidhash + ;; + (remhash uuid (yas--table-uuidhash table)))))) + +(defconst yas-maybe-expand-from-keymap + '(menu-item "" yas-expand-from-keymap + :filter yas--maybe-expand-from-keymap-filter)) + +(defun yas--add-template (table template) + "Store in TABLE the snippet template TEMPLATE. + +KEY can be a string (trigger key) of a vector (direct +keybinding)." + (let ((name (yas--template-name template)) + (key (yas--template-key template)) + (keybinding (yas--template-keybinding template)) + (_menu-binding-pair (yas--template-menu-binding-pair-get-create template))) + (dolist (k (remove nil (list key keybinding))) + (puthash name + template + (or (gethash k + (yas--table-hash table)) + (puthash k + (make-hash-table :test 'equal) + (yas--table-hash table)))) + (when (vectorp k) + (define-key (yas--table-direct-keymap table) k yas-maybe-expand-from-keymap))) + + ;; Update TABLE's `yas--table-uuidhash' + (puthash (yas--template-uuid template) + template + (yas--table-uuidhash table)))) + +(defun yas--update-template (table template) + "Add or update TEMPLATE in TABLE. + +Also takes care of adding and updating to the associated menu. +Return TEMPLATE." + ;; Remove from table by uuid + ;; + (yas--remove-template-by-uuid table (yas--template-uuid template)) + ;; Add to table again + ;; + (yas--add-template table template) + ;; Take care of the menu + ;; + (yas--update-template-menu table template) + template) + +(defun yas--update-template-menu (table template) + "Update every menu-related for TEMPLATE." + (let ((menu-binding-pair (yas--template-menu-binding-pair-get-create template)) + (key (yas--template-key template)) + (keybinding (yas--template-keybinding template))) + ;; The snippet might have changed name or keys, so update + ;; user-visible strings + ;; + (unless (eq (cdr menu-binding-pair) :none) + ;; the menu item name + ;; + (setf (cl-cadar menu-binding-pair) (yas--template-name template)) + ;; the :keys information (also visible to the user) + (setf (cl-getf (cdr (car menu-binding-pair)) :keys) + (or (and keybinding (key-description keybinding)) + (and key (concat key yas-trigger-symbol)))))) + (unless (yas--template-menu-managed-by-yas-define-menu template) + (let ((menu-keymap + (yas--menu-keymap-get-create (yas--table-mode table) + (mapcar #'yas--table-mode + (yas--table-parents table)))) + (group (yas--template-group template))) + ;; Remove from menu keymap + ;; + (cl-assert menu-keymap) + (yas--delete-from-keymap menu-keymap (yas--template-uuid template)) + + ;; Add necessary subgroups as necessary. + ;; + (dolist (subgroup group) + (let ((subgroup-keymap (lookup-key menu-keymap (vector (make-symbol subgroup))))) + (unless (and subgroup-keymap + (keymapp subgroup-keymap)) + (setq subgroup-keymap (make-sparse-keymap)) + (define-key menu-keymap (vector (make-symbol subgroup)) + `(menu-item ,subgroup ,subgroup-keymap))) + (setq menu-keymap subgroup-keymap))) + + ;; Add this entry to the keymap + ;; + (define-key menu-keymap + (vector (make-symbol (yas--template-uuid template))) + (car (yas--template-menu-binding-pair template)))))) + +(defun yas--namehash-templates-alist (namehash) + "Return NAMEHASH as an alist." + (let (alist) + (maphash #'(lambda (k v) + (push (cons k v) alist)) + namehash) + alist)) + +(defun yas--fetch (table key) + "Fetch templates in TABLE by KEY. + +Return a list of cons (NAME . TEMPLATE) where NAME is a +string and TEMPLATE is a `yas--template' structure." + (let* ((keyhash (yas--table-hash table)) + (namehash (and keyhash (gethash key keyhash)))) + (when namehash + (yas--filter-templates-by-condition (yas--namehash-templates-alist namehash))))) + + +;;; Filtering/condition logic + +(defun yas--eval-condition (condition) + (condition-case err + (save-excursion + (save-restriction + (save-match-data + (eval condition)))) + (error (progn + (yas--message 1 "Error in condition evaluation: %s" (error-message-string err)) + nil)))) + + +(defun yas--filter-templates-by-condition (templates) + "Filter the templates using the applicable condition. + +TEMPLATES is a list of cons (NAME . TEMPLATE) where NAME is a +string and TEMPLATE is a `yas--template' structure. + +This function implements the rules described in +`yas-buffer-local-condition'. See that variables documentation." + (let ((requirement (yas--require-template-specific-condition-p))) + (if (eq requirement 'always) + templates + (cl-remove-if-not (lambda (pair) + (yas--template-can-expand-p + (yas--template-condition (cdr pair)) requirement)) + templates)))) + +(defun yas--require-template-specific-condition-p () + "Decide if this buffer requests/requires snippet-specific +conditions to filter out potential expansions." + (if (eq 'always yas-buffer-local-condition) + 'always + (let ((local-condition (or (and (consp yas-buffer-local-condition) + (yas--eval-condition yas-buffer-local-condition)) + yas-buffer-local-condition))) + (when local-condition + (if (eq local-condition t) + t + (and (consp local-condition) + (eq 'require-snippet-condition (car local-condition)) + (symbolp (cdr local-condition)) + (cdr local-condition))))))) + +(defun yas--template-can-expand-p (condition requirement) + "Evaluate CONDITION and REQUIREMENT and return a boolean." + (let* ((result (or (null condition) + (yas--eval-condition condition)))) + (cond ((eq requirement t) + result) + (t + (eq requirement result))))) + +(defun yas--table-templates (table) + (when table + (let ((acc (list))) + (maphash #'(lambda (_key namehash) + (maphash #'(lambda (name template) + (push (cons name template) acc)) + namehash)) + (yas--table-hash table)) + (maphash #'(lambda (uuid template) + (push (cons uuid template) acc)) + (yas--table-uuidhash table)) + (yas--filter-templates-by-condition acc)))) + +(defun yas--templates-for-key-at-point () + "Find `yas--template' objects for any trigger keys preceding point. +Returns (TEMPLATES START END). This function respects +`yas-key-syntaxes', which see." + (save-excursion + (let ((original (point)) + (methods yas-key-syntaxes) + (templates) + (method)) + (while (and methods + (not templates)) + (unless (eq method (car methods)) + ;; TRICKY: `eq'-ness test means we can only be here if + ;; `method' is a function that returned `again', and hence + ;; don't revert back to original position as per + ;; `yas-key-syntaxes'. + (goto-char original)) + (setq method (car methods)) + (cond ((stringp method) + (skip-syntax-backward method) + (setq methods (cdr methods))) + ((functionp method) + (unless (eq (funcall method original) + 'again) + (setq methods (cdr methods)))) + (t + (setq methods (cdr methods)) + (yas--warning "Invalid element `%s' in `yas-key-syntaxes'" method))) + (let ((possible-key (buffer-substring-no-properties (point) original))) + (save-excursion + (goto-char original) + (setq templates + (cl-mapcan (lambda (table) + (yas--fetch table possible-key)) + (yas--get-snippet-tables)))))) + (when templates + (list templates (point) original))))) + +(defun yas--table-all-keys (table) + "Get trigger keys of all active snippets in TABLE." + (let ((acc)) + (maphash #'(lambda (key namehash) + (when (yas--filter-templates-by-condition (yas--namehash-templates-alist namehash)) + (push key acc))) + (yas--table-hash table)) + acc)) + +(defun yas--table-mode (table) + (intern (yas--table-name table))) + + +;;; Internal functions and macros: + +(defun yas--remove-misc-free-from-undo (old-undo-list) + "Tries to work around Emacs Bug#30931. +Helper function for `yas--save-restriction-and-widen'." + ;; If Bug#30931 is unfixed, we get (# . INTEGER) + ;; entries in the undo list. If we call `type-of' on the + ;; Lisp_Misc_Free object then Emacs aborts, so try to find it by + ;; checking that its type is none of the expected ones. + (when (consp buffer-undo-list) + (let* ((prev buffer-undo-list) + (undo-list prev)) + (while (and (consp undo-list) + ;; Only check new entries. + (not (eq undo-list old-undo-list))) + (let ((entry (pop undo-list))) + (when (consp entry) + (let ((head (car entry))) + (unless (or (stringp head) + (markerp head) + (integerp head) + (symbolp head) + (not (integerp (cdr entry)))) + ;; (message "removing misc free %S" entry) + (setcdr prev undo-list))))) + (setq prev undo-list))))) + +(defmacro yas--save-restriction-and-widen (&rest body) + "Equivalent to (save-restriction (widen) BODY). +Also tries to work around Emacs Bug#30931." + (declare (debug (body)) (indent 0)) + ;; Disable garbage collection, since it could cause an abort. + `(let ((gc-cons-threshold most-positive-fixnum) + (old-undo-list buffer-undo-list)) + (prog1 (save-restriction + (widen) + ,@body) + (yas--remove-misc-free-from-undo old-undo-list)))) + +(defun yas--eval-for-string (form) + "Evaluate FORM and convert the result to string." + (let ((debug-on-error (and (not (memq yas-good-grace '(t inline))) + debug-on-error))) + (condition-case oops + (save-excursion + (yas--save-restriction-and-widen + (save-match-data + (let ((result (eval form))) + (when result + (format "%s" result)))))) + ((debug error) (cdr oops))))) + +(defun yas--eval-for-effect (form) + (yas--safely-call-fun (apply-partially #'eval form))) + +(defun yas--read-lisp (string &optional nil-on-error) + "Read STRING as a elisp expression and return it. + +In case STRING in an invalid expression and NIL-ON-ERROR is nil, +return an expression that when evaluated will issue an error." + (condition-case err + (read string) + (error (and (not nil-on-error) + `(error (error-message-string ,err)))))) + +(defun yas--read-keybinding (keybinding) + "Read KEYBINDING as a snippet keybinding, return a vector." + (when (and keybinding + (not (string-match "keybinding" keybinding))) + (condition-case err + (let ((res (or (and (string-match "^\\[.*\\]$" keybinding) + (read keybinding)) + (read-kbd-macro keybinding 'need-vector)))) + res) + (error + (yas--message 2 "warning: keybinding \"%s\" invalid since %s." + keybinding (error-message-string err)) + nil)))) + +(defun yas--table-get-create (mode) + "Get or create the snippet table corresponding to MODE." + (let ((table (gethash mode + yas--tables))) + (unless table + (setq table (yas--make-snippet-table (symbol-name mode))) + (puthash mode table yas--tables) + (push (cons (intern (format "yas--direct-%s" mode)) + (yas--table-direct-keymap table)) + yas--direct-keymaps)) + table)) + +(defun yas--get-snippet-tables (&optional mode) + "Get snippet tables for MODE. + +MODE defaults to the current buffer's `major-mode'. + +Return a list of `yas--table' objects. The list of modes to +consider is returned by `yas--modes-to-activate'" + (remove nil + (mapcar #'(lambda (name) + (gethash name yas--tables)) + (yas--modes-to-activate mode)))) + +(defun yas--menu-keymap-get-create (mode &optional parents) + "Get or create the menu keymap for MODE and its PARENTS. + +This may very well create a plethora of menu keymaps and arrange +them all in `yas--menu-table'" + (let* ((menu-keymap (or (gethash mode yas--menu-table) + (puthash mode (make-sparse-keymap) yas--menu-table)))) + (mapc #'yas--menu-keymap-get-create parents) + (define-key yas--minor-mode-menu (vector mode) + `(menu-item ,(symbol-name mode) ,menu-keymap + :visible (yas--show-menu-p ',mode))) + menu-keymap)) + + +;;; Template-related and snippet loading functions + +(defun yas--parse-template (&optional file) + "Parse the template in the current buffer. + +Optional FILE is the absolute file name of the file being +parsed. + +Optional GROUP is the group where the template is to go, +otherwise we attempt to calculate it from FILE. + +Return a snippet-definition, i.e. a list + + (KEY TEMPLATE NAME CONDITION GROUP VARS LOAD-FILE KEYBINDING UUID) + +If the buffer contains a line of \"# --\" then the contents above +this line are ignored. Directives can set most of these with the syntax: + +# directive-name : directive-value + +Here's a list of currently recognized directives: + + * type + * name + * contributor + * condition + * group + * key + * expand-env + * binding + * uuid" + (goto-char (point-min)) + (let* ((type 'snippet) + (name (and file + (file-name-nondirectory file))) + (key nil) + template + bound + condition + (group (and file + (yas--calculate-group file))) + expand-env + binding + uuid) + (if (re-search-forward "^# --\\s-*\n" nil t) + (progn (setq template + (buffer-substring-no-properties (point) + (point-max))) + (setq bound (point)) + (goto-char (point-min)) + (while (re-search-forward "^# *\\([^ ]+?\\) *: *\\(.*?\\)[[:space:]]*$" bound t) + (when (string= "uuid" (match-string-no-properties 1)) + (setq uuid (match-string-no-properties 2))) + (when (string= "type" (match-string-no-properties 1)) + (setq type (if (string= "command" (match-string-no-properties 2)) + 'command + 'snippet))) + (when (string= "key" (match-string-no-properties 1)) + (setq key (match-string-no-properties 2))) + (when (string= "name" (match-string-no-properties 1)) + (setq name (match-string-no-properties 2))) + (when (string= "condition" (match-string-no-properties 1)) + (setq condition (yas--read-lisp (match-string-no-properties 2)))) + (when (string= "group" (match-string-no-properties 1)) + (setq group (match-string-no-properties 2))) + (when (string= "expand-env" (match-string-no-properties 1)) + (setq expand-env (yas--read-lisp (match-string-no-properties 2) + 'nil-on-error))) + (when (string= "binding" (match-string-no-properties 1)) + (setq binding (match-string-no-properties 2))))) + (setq template + (buffer-substring-no-properties (point-min) (point-max)))) + (unless (or key binding) + (setq key (and file (file-name-nondirectory file)))) + (when (eq type 'command) + (setq template (yas--read-lisp (concat "(progn" template ")")))) + (when group + (setq group (split-string group "\\."))) + (list key template name condition group expand-env file binding uuid))) + +(defun yas--calculate-group (file) + "Calculate the group for snippet file path FILE." + (let* ((dominating-dir (locate-dominating-file file + ".yas-make-groups")) + (extra-path (and dominating-dir + (file-relative-name file dominating-dir))) + (extra-dir (and extra-path + (file-name-directory extra-path))) + (group (and extra-dir + (replace-regexp-in-string "/" + "." + (directory-file-name extra-dir))))) + group)) + +(defun yas--subdirs (directory &optional filep) + "Return subdirs or files of DIRECTORY according to FILEP." + (cl-remove-if (lambda (file) + (or (string-match "\\`\\." + (file-name-nondirectory file)) + (string-match "\\`#.*#\\'" + (file-name-nondirectory file)) + (string-match "~\\'" + (file-name-nondirectory file)) + (if filep + (file-directory-p file) + (not (file-directory-p file))))) + (directory-files directory t))) + +(defun yas--make-menu-binding (template) + (let ((mode (yas--table-mode (yas--template-table template)))) + `(lambda () (interactive) (yas--expand-or-visit-from-menu ',mode ,(yas--template-uuid template))))) + +(defun yas--expand-or-visit-from-menu (mode uuid) + (let* ((table (yas--table-get-create mode)) + (yas--current-template (and table + (gethash uuid (yas--table-uuidhash table))))) + (when yas--current-template + (if yas-visit-from-menu + (yas--visit-snippet-file-1 yas--current-template) + (let ((where (if (region-active-p) + (cons (region-beginning) (region-end)) + (cons (point) (point))))) + (yas-expand-snippet yas--current-template + (car where) (cdr where))))))) + +(defun yas--key-from-desc (text) + "Return a yasnippet key from a description string TEXT." + (replace-regexp-in-string "\\(\\w+\\).*" "\\1" text)) + + +;;; Popping up for keys and templates + +(defun yas--prompt-for-template (templates &optional prompt) + "Interactively choose a template from the list TEMPLATES. + +TEMPLATES is a list of `yas--template'. + +Optional PROMPT sets the prompt to use." + (when templates + (setq templates + (sort templates #'(lambda (t1 t2) + (< (length (yas--template-name t1)) + (length (yas--template-name t2)))))) + (cl-some (lambda (fn) + (funcall fn (or prompt "Choose a snippet: ") + templates + #'yas--template-name)) + yas-prompt-functions))) + +(defun yas--prompt-for-keys (keys &optional prompt) + "Interactively choose a template key from the list KEYS. + +Optional PROMPT sets the prompt to use." + (when keys + (cl-some (lambda (fn) + (funcall fn (or prompt "Choose a snippet key: ") keys)) + yas-prompt-functions))) + +(defun yas--prompt-for-table (tables &optional prompt) + "Interactively choose a table from the list TABLES. + +Optional PROMPT sets the prompt to use." + (when tables + (cl-some (lambda (fn) + (funcall fn (or prompt "Choose a snippet table: ") + tables + #'yas--table-name)) + yas-prompt-functions))) + +(defun yas-x-prompt (prompt choices &optional display-fn) + "Display choices in a x-window prompt." + (when (and window-system choices) + ;; Let window position be recalculated to ensure that + ;; `posn-at-point' returns non-nil. + (redisplay) + (or + (x-popup-menu + (if (fboundp 'posn-at-point) + (let ((x-y (posn-x-y (posn-at-point (point))))) + (list (list (+ (car x-y) 10) + (+ (cdr x-y) 20)) + (selected-window))) + t) + `(,prompt ("title" + ,@(cl-mapcar (lambda (c d) `(,(concat " " d) . ,c)) + choices + (if display-fn (mapcar display-fn choices) + choices))))) + (keyboard-quit)))) + +(defun yas-maybe-ido-prompt (prompt choices &optional display-fn) + (when (bound-and-true-p ido-mode) + (yas-ido-prompt prompt choices display-fn))) + +(defun yas-ido-prompt (prompt choices &optional display-fn) + (require 'ido) + (yas-completing-prompt prompt choices display-fn #'ido-completing-read)) + +(defun yas-dropdown-prompt (_prompt choices &optional display-fn) + (when (fboundp 'dropdown-list) + (let* ((formatted-choices + (if display-fn (mapcar display-fn choices) choices)) + (n (dropdown-list formatted-choices))) + (if n (nth n choices) + (keyboard-quit))))) + +(defun yas-completing-prompt (prompt choices &optional display-fn completion-fn) + (let* ((formatted-choices + (if display-fn (mapcar display-fn choices) choices)) + (chosen (funcall (or completion-fn #'completing-read) + prompt formatted-choices + nil 'require-match nil nil))) + (if (eq choices formatted-choices) + chosen + (nth (or (cl-position chosen formatted-choices :test #'string=) 0) + choices)))) + +(defun yas-no-prompt (_prompt choices &optional _display-fn) + (cl-first choices)) + + +;;; Defining snippets +;; This consists of creating and registering `yas--template' objects in the +;; correct tables. +;; + +(defvar yas--creating-compiled-snippets nil) + +(defun yas--define-snippets-1 (snippet snippet-table) + "Helper for `yas-define-snippets'." + ;; Update the appropriate table. Also takes care of adding the + ;; key indicators in the templates menu entry, if any. + (yas--update-template + snippet-table (apply #'yas--define-snippets-2 snippet-table snippet))) + +(defun yas-define-snippets (mode snippets) + "Define SNIPPETS for MODE. + +SNIPPETS is a list of snippet definitions, each taking the +following form + + (KEY TEMPLATE NAME CONDITION GROUP EXPAND-ENV LOAD-FILE KEYBINDING UUID SAVE-FILE) + +Within these, only KEY and TEMPLATE are actually mandatory. + +TEMPLATE might be a Lisp form or a string, depending on whether +this is a snippet or a snippet-command. + +CONDITION, EXPAND-ENV and KEYBINDING are Lisp forms, they have +been `yas--read-lisp'-ed and will eventually be +`yas--eval-for-string'-ed. + +The remaining elements are strings. + +FILE is probably of very little use if you're programatically +defining snippets. + +UUID is the snippet's \"unique-id\". Loading a second snippet +file with the same uuid would replace the previous snippet. + +You can use `yas--parse-template' to return such lists based on +the current buffers contents." + (if yas--creating-compiled-snippets + (let ((print-length nil)) + (insert ";;; Snippet definitions:\n;;;\n") + (dolist (snippet snippets) + ;; Fill in missing elements with nil. + (setq snippet (append snippet (make-list (- 10 (length snippet)) nil))) + ;; Move LOAD-FILE to SAVE-FILE because we will load from the + ;; compiled file, not LOAD-FILE. + (let ((load-file (nth 6 snippet))) + (setcar (nthcdr 6 snippet) nil) + (setcar (nthcdr 9 snippet) load-file))) + (insert (pp-to-string + `(yas-define-snippets ',mode ',snippets))) + (insert "\n\n")) + ;; Normal case. + (let ((snippet-table (yas--table-get-create mode)) + (template nil)) + (dolist (snippet snippets) + (setq template (yas--define-snippets-1 snippet + snippet-table))) + template))) + + +;;; Loading snippets from files + +(defun yas--template-get-file (template) + "Return TEMPLATE's LOAD-FILE or SAVE-FILE." + (or (yas--template-load-file template) + (let ((file (yas--template-save-file template))) + (when file + (yas--message 3 "%s has no load file, using save file, %s, instead." + (yas--template-name template) file)) + file))) + +(defun yas--load-yas-setup-file (file) + (if (not yas--creating-compiled-snippets) + ;; Normal case. + (load file 'noerror (<= yas-verbosity 4)) + (let ((elfile (concat file ".el"))) + (when (file-exists-p elfile) + (insert ";;; contents of the .yas-setup.el support file:\n;;;\n") + (insert-file-contents elfile) + (goto-char (point-max)))))) + +(defun yas--define-parents (mode parents) + "Add PARENTS to the list of MODE's parents." + (puthash mode (cl-remove-duplicates + (append parents + (gethash mode yas--parents))) + yas--parents)) + +(defun yas-load-directory (top-level-dir &optional use-jit interactive) + "Load snippets in directory hierarchy TOP-LEVEL-DIR. + +Below TOP-LEVEL-DIR each directory should be a mode name. + +With prefix argument USE-JIT do jit-loading of snippets." + (interactive + (list (read-directory-name "Select the root directory: " nil nil t) + current-prefix-arg t)) + (unless yas-snippet-dirs + (setq yas-snippet-dirs top-level-dir)) + (let ((impatient-buffers)) + (dolist (dir (yas--subdirs top-level-dir)) + (let* ((major-mode-and-parents (yas--compute-major-mode-and-parents + (concat dir "/dummy"))) + (mode-sym (car major-mode-and-parents)) + (parents (cdr major-mode-and-parents))) + ;; Attention: The parents and the menus are already defined + ;; here, even if the snippets are later jit-loaded. + ;; + ;; * We need to know the parents at this point since entering a + ;; given mode should jit load for its parents + ;; immediately. This could be reviewed, the parents could be + ;; discovered just-in-time-as well + ;; + ;; * We need to create the menus here to support the `full' + ;; option to `yas-use-menu' (all known snippet menus are shown to the user) + ;; + (yas--define-parents mode-sym parents) + (yas--menu-keymap-get-create mode-sym) + (let ((fun (apply-partially #'yas--load-directory-1 dir mode-sym))) + (if use-jit + (yas--schedule-jit mode-sym fun) + (funcall fun))) + ;; Look for buffers that are already in `mode-sym', and so + ;; need the new snippets immediately... + ;; + (when use-jit + (cl-loop for buffer in (buffer-list) + do (with-current-buffer buffer + (when (eq major-mode mode-sym) + (yas--message 4 "Discovered there was already %s in %s" buffer mode-sym) + (push buffer impatient-buffers))))))) + ;; ...after TOP-LEVEL-DIR has been completely loaded, call + ;; `yas--load-pending-jits' in these impatient buffers. + ;; + (cl-loop for buffer in impatient-buffers + do (with-current-buffer buffer (yas--load-pending-jits)))) + (when interactive + (yas--message 3 "Loaded snippets from %s." top-level-dir))) + +(defun yas--load-directory-1 (directory mode-sym) + "Recursively load snippet templates from DIRECTORY." + (if yas--creating-compiled-snippets + (let ((output-file (expand-file-name ".yas-compiled-snippets.el" + directory))) + (with-temp-file output-file + (insert (format ";;; Compiled snippets and support files for `%s'\n" + mode-sym)) + (yas--load-directory-2 directory mode-sym) + (insert (format ";;; Do not edit! File generated at %s\n" + (current-time-string))))) + ;; Normal case. + (unless (file-exists-p (expand-file-name ".yas-skip" directory)) + (unless (and (load (expand-file-name ".yas-compiled-snippets" directory) 'noerror (<= yas-verbosity 3)) + (progn (yas--message 4 "Loaded compiled snippets from %s" directory) t)) + (yas--message 4 "Loading snippet files from %s" directory) + (yas--load-directory-2 directory mode-sym))))) + +(defun yas--load-directory-2 (directory mode-sym) + ;; Load .yas-setup.el files wherever we find them + ;; + (yas--load-yas-setup-file (expand-file-name ".yas-setup" directory)) + (let* ((default-directory directory) + (snippet-defs nil)) + ;; load the snippet files + ;; + (with-temp-buffer + (dolist (file (yas--subdirs directory 'no-subdirs-just-files)) + (when (file-readable-p file) + ;; Erase the buffer instead of passing non-nil REPLACE to + ;; `insert-file-contents' (avoids Emacs bug #23659). + (erase-buffer) + (insert-file-contents file) + (push (yas--parse-template file) + snippet-defs)))) + (when snippet-defs + (yas-define-snippets mode-sym + snippet-defs)) + ;; now recurse to a lower level + ;; + (dolist (subdir (yas--subdirs directory)) + (yas--load-directory-2 subdir + mode-sym)))) + +(defun yas--load-snippet-dirs (&optional nojit) + "Reload the directories listed in `yas-snippet-dirs' or +prompt the user to select one." + (let (errors) + (if (null yas-snippet-dirs) + (call-interactively 'yas-load-directory) + (when (member yas--default-user-snippets-dir yas-snippet-dirs) + (make-directory yas--default-user-snippets-dir t)) + (dolist (directory (reverse (yas-snippet-dirs))) + (cond ((file-directory-p directory) + (yas-load-directory directory (not nojit)) + (if nojit + (yas--message 4 "Loaded %s" directory) + (yas--message 4 "Prepared just-in-time loading for %s" directory))) + (t + (push (yas--message 1 "Check your `yas-snippet-dirs': %s is not a directory" directory) errors))))) + errors)) + +(defun yas-reload-all (&optional no-jit interactive) + "Reload all snippets and rebuild the YASnippet menu. + +When NO-JIT is non-nil force immediate reload of all known +snippets under `yas-snippet-dirs', otherwise use just-in-time +loading. + +When called interactively, use just-in-time loading when given a +prefix argument." + (interactive (list (not current-prefix-arg) t)) + (catch 'abort + (let ((errors) + (snippet-editing-buffers + (cl-remove-if-not (lambda (buffer) + (with-current-buffer buffer + yas--editing-template)) + (buffer-list)))) + ;; Warn if there are buffers visiting snippets, since reloading will break + ;; any on-line editing of those buffers. + ;; + (when snippet-editing-buffers + (if interactive + (if (y-or-n-p "Some buffers editing live snippets, close them and proceed with reload? ") + (mapc #'kill-buffer snippet-editing-buffers) + (yas--message 1 "Aborted reload...") + (throw 'abort nil)) + ;; in a non-interactive use, at least set + ;; `yas--editing-template' to nil, make it guess it next time around + (mapc #'(lambda (buffer) + (with-current-buffer buffer + (kill-local-variable 'yas--editing-template))) + (buffer-list)))) + + ;; Empty all snippet tables and parenting info + ;; + (setq yas--tables (make-hash-table)) + (setq yas--parents (make-hash-table)) + + ;; Before killing `yas--menu-table' use its keys to cleanup the + ;; mode menu parts of `yas--minor-mode-menu' (thus also cleaning + ;; up `yas-minor-mode-map', which points to it) + ;; + (maphash #'(lambda (menu-symbol _keymap) + (define-key yas--minor-mode-menu (vector menu-symbol) nil)) + yas--menu-table) + ;; Now empty `yas--menu-table' as well + (setq yas--menu-table (make-hash-table)) + + ;; Cancel all pending 'yas--scheduled-jit-loads' + ;; + (setq yas--scheduled-jit-loads (make-hash-table)) + + ;; Reload the directories listed in `yas-snippet-dirs' or prompt + ;; the user to select one. + ;; + (setq errors (yas--load-snippet-dirs no-jit)) + ;; Reload the direct keybindings + ;; + (yas-direct-keymaps-reload) + + (run-hooks 'yas-after-reload-hook) + (let ((no-snippets + (cl-every (lambda (table) (= (hash-table-count table) 0)) + (list yas--scheduled-jit-loads + yas--parents yas--tables)))) + (yas--message (if (or no-snippets errors) 2 3) + (if no-jit "Snippets loaded %s." + "Prepared just-in-time loading of snippets %s.") + (cond (errors + "with some errors. Check *Messages*") + (no-snippets + "(but no snippets found)") + (t + "successfully"))))))) + +(defvar yas-after-reload-hook nil + "Hooks run after `yas-reload-all'.") + +(defun yas--load-pending-jits () + (dolist (mode (yas--modes-to-activate)) + (let ((funs (reverse (gethash mode yas--scheduled-jit-loads)))) + ;; must reverse to maintain coherence with `yas-snippet-dirs' + (dolist (fun funs) + (yas--message 4 "Loading for `%s', just-in-time: %s!" mode fun) + (funcall fun)) + (remhash mode yas--scheduled-jit-loads)))) + +(defun yas-escape-text (text) + "Escape TEXT for snippet." + (when text + (replace-regexp-in-string "[\\$]" "\\\\\\&" text))) + + +;;; Snippet compilation function + +(defun yas-compile-directory (top-level-dir) + "Create .yas-compiled-snippets.el files under subdirs of TOP-LEVEL-DIR. + +This works by stubbing a few functions, then calling +`yas-load-directory'." + (interactive "DTop level snippet directory?") + (let ((yas--creating-compiled-snippets t)) + (yas-load-directory top-level-dir nil))) + +(defun yas-recompile-all () + "Compile every dir in `yas-snippet-dirs'." + (interactive) + (mapc #'yas-compile-directory (yas-snippet-dirs))) + + +;;; JIT loading +;;; + +(defvar yas--scheduled-jit-loads (make-hash-table) + "Alist of mode-symbols to forms to be evaled when `yas-minor-mode' kicks in.") + +(defun yas--schedule-jit (mode fun) + (push fun (gethash mode yas--scheduled-jit-loads))) + + + +;;; Some user level functions + +(defun yas-about () + (interactive) + (message "yasnippet (version %s) -- pluskid/joaotavora/npostavs" + (or (ignore-errors (car (let ((default-directory yas--loaddir)) + (process-lines "git" "describe" + "--tags" "--dirty")))) + (when (and (featurep 'package) + (fboundp 'package-desc-version) + (fboundp 'package-version-join)) + (defvar package-alist) + (ignore-errors + (let* ((yas-pkg (cdr (assq 'yasnippet package-alist))) + (version (package-version-join + (package-desc-version (car yas-pkg))))) + ;; Special case for MELPA's bogus version numbers. + (if (string-match "\\`20..[01][0-9][0-3][0-9][.][0-9]\\{3,4\\}\\'" + version) + (concat yas--version "-snapshot" version) + version)))) + yas--version))) + + +;;; Apropos snippet menu: +;; +;; The snippet menu keymaps are stored by mode in hash table called +;; `yas--menu-table'. They are linked to the main menu in +;; `yas--menu-keymap-get-create' and are initially created empty, +;; reflecting the table hierarchy. +;; +;; They can be populated in two mutually exclusive ways: (1) by +;; reading `yas--template-group', which in turn is populated by the "# +;; group:" directives of the snippets or the ".yas-make-groups" file +;; or (2) by using a separate `yas-define-menu' call, which declares a +;; menu structure based on snippets uuids. +;; +;; Both situations are handled in `yas--update-template-menu', which +;; uses the predicate `yas--template-menu-managed-by-yas-define-menu' +;; that can tell between the two situations. +;; +;; Note: +;; +;; * if `yas-define-menu' is used it must run before +;; `yas-define-snippets' and the UUIDS must match, otherwise we get +;; duplicate entries. The `yas--template' objects are created in +;; `yas-define-menu', holding nothing but the menu entry, +;; represented by a pair of ((menu-item NAME :keys KEYS) TYPE) and +;; stored in `yas--template-menu-binding-pair'. The (menu-item ...) +;; part is then stored in the menu keymap itself which make the item +;; appear to the user. These limitations could probably be revised. +;; +;; * The `yas--template-perm-group' slot is only used in +;; `yas-describe-tables'. +;; +(defun yas--template-menu-binding-pair-get-create (template &optional type) + "Get TEMPLATE's menu binding or assign it a new one. + +TYPE may be `:stay', signaling this menu binding should be +static in the menu." + (or (yas--template-menu-binding-pair template) + (let (;; (key (yas--template-key template)) + ;; (keybinding (yas--template-keybinding template)) + ) + (setf (yas--template-menu-binding-pair template) + (cons `(menu-item ,(or (yas--template-name template) + (yas--template-uuid template)) + ,(yas--make-menu-binding template) + :keys ,nil) + type))))) +(defun yas--template-menu-managed-by-yas-define-menu (template) + "Non-nil if TEMPLATE's menu entry was included in a `yas-define-menu' call." + (cdr (yas--template-menu-binding-pair template))) + + +(defun yas--show-menu-p (mode) + (cond ((eq yas-use-menu 'abbreviate) + (cl-find mode + (mapcar #'yas--table-mode + (yas--get-snippet-tables)))) + (yas-use-menu t))) + +(defun yas--delete-from-keymap (keymap uuid) + "Recursively delete items with UUID from KEYMAP and its submenus." + + ;; XXX: This used to skip any submenus named \"parent mode\" + ;; + ;; First of all, recursively enter submenus, i.e. the tree is + ;; searched depth first so that stale submenus can be found in the + ;; higher passes. + ;; + (mapc #'(lambda (item) + (when (and (consp (cdr-safe item)) + (keymapp (nth 2 (cdr item)))) + (yas--delete-from-keymap (nth 2 (cdr item)) uuid))) + (cdr keymap)) + ;; Set the uuid entry to nil + ;; + (define-key keymap (vector (make-symbol uuid)) nil) + ;; Destructively modify keymap + ;; + (setcdr keymap (cl-delete-if (lambda (item) + (cond ((not (listp item)) nil) + ((null (cdr item))) + ((and (keymapp (nth 2 (cdr item))) + (null (cdr (nth 2 (cdr item)))))))) + (cdr keymap)))) + +(defun yas-define-menu (mode menu &optional omit-items) + "Define a snippet menu for MODE according to MENU, omitting OMIT-ITEMS. + +MENU is a list, its elements can be: + +- (yas-item UUID) : Creates an entry the snippet identified with + UUID. The menu entry for a snippet thus identified is + permanent, i.e. it will never move (be reordered) in the menu. + +- (yas-separator) : Creates a separator + +- (yas-submenu NAME SUBMENU) : Creates a submenu with NAME, + SUBMENU has the same form as MENU. NAME is also added to the + list of groups of the snippets defined thereafter. + +OMIT-ITEMS is a list of snippet uuids that will always be +omitted from MODE's menu, even if they're manually loaded." + (let* ((table (yas--table-get-create mode)) + (hash (yas--table-uuidhash table))) + (yas--define-menu-1 table + (yas--menu-keymap-get-create mode) + menu + hash) + (dolist (uuid omit-items) + (let ((template (or (gethash uuid hash) + (puthash uuid + (yas--make-template :table table + :uuid uuid) + hash)))) + (setf (yas--template-menu-binding-pair template) (cons nil :none)))))) + +(defun yas--define-menu-1 (table menu-keymap menu uuidhash &optional group-list) + "Helper for `yas-define-menu'." + (cl-loop + for (type name submenu) in (reverse menu) + collect (cond + ((or (eq type 'yas-item) + (and yas-alias-to-yas/prefix-p + (eq type 'yas/item))) + (let ((template (or (gethash name uuidhash) + (puthash name + (yas--make-template + :table table + :perm-group group-list + :uuid name) + uuidhash)))) + (car (yas--template-menu-binding-pair-get-create + template :stay)))) + ((or (eq type 'yas-submenu) + (and yas-alias-to-yas/prefix-p + (eq type 'yas/submenu))) + (let ((subkeymap (make-sparse-keymap))) + (yas--define-menu-1 table subkeymap submenu uuidhash + (append group-list (list name))) + `(menu-item ,name ,subkeymap))) + ((or (eq type 'yas-separator) + (and yas-alias-to-yas/prefix-p + (eq type 'yas/separator))) + '(menu-item "----")) + (t (yas--message 1 "Don't know anything about menu entry %s" type) + nil)) + into menu-entries + finally do (push (apply #'vector menu-entries) (cdr menu-keymap)))) + +(defun yas--define (mode key template &optional name condition group) + "Define a snippet. Expanding KEY into TEMPLATE. + +NAME is a description to this template. Also update the menu if +`yas-use-menu' is t. CONDITION is the condition attached to +this snippet. If you attach a condition to a snippet, then it +will only be expanded when the condition evaluated to non-nil." + (yas-define-snippets mode + (list (list key template name condition group)))) + +(defun yas-hippie-try-expand (first-time?) + "Integrate with hippie expand. + +Just put this function in `hippie-expand-try-functions-list'." + (when yas-minor-mode + (if (not first-time?) + (let ((yas-fallback-behavior 'return-nil)) + (yas-expand)) + (undo 1) + nil))) + + +;;; Apropos condition-cache: +;;; +;;; +;;; +;;; +(defmacro yas-define-condition-cache (func doc &rest body) + "Define a function FUNC with doc DOC and body BODY. +BODY is executed at most once every snippet expansion attempt, to check +expansion conditions. + +It doesn't make any sense to call FUNC programatically." + `(defun ,func () ,(if (and doc + (stringp doc)) + (concat doc +"\n\nFor use in snippets' conditions. Within each +snippet-expansion routine like `yas-expand', computes actual +value for the first time then always returns a cached value.") + (setq body (cons doc body)) + nil) + (let ((timestamp-and-value (get ',func 'yas--condition-cache))) + (if (equal (car timestamp-and-value) yas--condition-cache-timestamp) + (cdr timestamp-and-value) + (let ((new-value (progn + ,@body + ))) + (put ',func 'yas--condition-cache (cons yas--condition-cache-timestamp new-value)) + new-value))))) + +(defalias 'yas-expand 'yas-expand-from-trigger-key) +(defun yas-expand-from-trigger-key (&optional field) + "Expand a snippet before point. + +If no snippet expansion is possible, fall back to the behaviour +defined in `yas-fallback-behavior'. + +Optional argument FIELD is for non-interactive use and is an +object satisfying `yas--field-p' to restrict the expansion to." + (interactive) + (setq yas--condition-cache-timestamp (current-time)) + (let (templates-and-pos) + (unless (and yas-expand-only-for-last-commands + (not (member last-command yas-expand-only-for-last-commands))) + (setq templates-and-pos (if field + (save-restriction + (narrow-to-region (yas--field-start field) + (yas--field-end field)) + (yas--templates-for-key-at-point)) + (yas--templates-for-key-at-point)))) + (if templates-and-pos + (yas--expand-or-prompt-for-template + (nth 0 templates-and-pos) + ;; Delete snippet key and active region when expanding. + (min (if (use-region-p) (region-beginning) most-positive-fixnum) + (nth 1 templates-and-pos)) + (max (if (use-region-p) (region-end) most-negative-fixnum) + (nth 2 templates-and-pos))) + (yas--fallback)))) + +(defun yas--maybe-expand-from-keymap-filter (cmd) + "Check whether a snippet may be expanded. +If there are expandable snippets, return CMD (this is useful for +conditional keybindings) or the list of expandable snippet +template objects if CMD is nil (this is useful as a more general predicate)." + (let* ((yas--condition-cache-timestamp (current-time)) + (vec (cl-subseq (this-command-keys-vector) + (if current-prefix-arg + (length (this-command-keys)) + 0))) + (templates (cl-mapcan (lambda (table) + (yas--fetch table vec)) + (yas--get-snippet-tables)))) + (if templates (or cmd templates)))) + +(defun yas-expand-from-keymap () + "Directly expand some snippets, searching `yas--direct-keymaps'." + (interactive) + (setq yas--condition-cache-timestamp (current-time)) + (let* ((templates (yas--maybe-expand-from-keymap-filter nil))) + (when templates + (yas--expand-or-prompt-for-template templates)))) + +(defun yas--expand-or-prompt-for-template (templates &optional start end) + "Expand one of TEMPLATES from START to END. + +Prompt the user if TEMPLATES has more than one element, else +expand immediately. Common gateway for +`yas-expand-from-trigger-key' and `yas-expand-from-keymap'." + (let ((yas--current-template + (or (and (cl-rest templates) ;; more than one + (yas--prompt-for-template (mapcar #'cdr templates))) + (cdar templates)))) + (when yas--current-template + (yas-expand-snippet yas--current-template start end)))) + +;; Apropos the trigger key and the fallback binding: +;; +;; When `yas-minor-mode-map' binds , that correctly overrides +;; org-mode's , for example and searching for fallbacks correctly +;; returns `org-cycle'. However, most other modes bind "TAB". TODO, +;; improve this explanation. +;; +(defun yas--fallback () + "Fallback after expansion has failed. + +Common gateway for `yas-expand-from-trigger-key' and +`yas-expand-from-keymap'." + (cond ((eq yas-fallback-behavior 'return-nil) + ;; return nil + nil) + ((eq yas-fallback-behavior 'yas--fallback) + (error (concat "yasnippet fallback loop!\n" + "This can happen when you bind `yas-expand' " + "outside of the `yas-minor-mode-map'."))) + ((eq yas-fallback-behavior 'call-other-command) + (let* ((yas-fallback-behavior 'yas--fallback) + ;; Also bind `yas-minor-mode' to prevent fallback + ;; loops when other extensions use mechanisms similar + ;; to `yas--keybinding-beyond-yasnippet'. (github #525 + ;; and #526) + ;; + (yas-minor-mode nil) + (beyond-yasnippet (yas--keybinding-beyond-yasnippet))) + (yas--message 4 "Falling back to %s" beyond-yasnippet) + (cl-assert (or (null beyond-yasnippet) (commandp beyond-yasnippet))) + (setq this-command beyond-yasnippet) + (when beyond-yasnippet + (call-interactively beyond-yasnippet)))) + ((and (listp yas-fallback-behavior) + (cdr yas-fallback-behavior) + (eq 'apply (car yas-fallback-behavior))) + (let ((command-or-fn (cadr yas-fallback-behavior)) + (args (cddr yas-fallback-behavior)) + (yas-fallback-behavior 'yas--fallback) + (yas-minor-mode nil)) + (if args + (apply command-or-fn args) + (when (commandp command-or-fn) + (setq this-command command-or-fn) + (call-interactively command-or-fn))))) + (t + ;; also return nil if all the other fallbacks have failed + nil))) + +(defun yas--keybinding-beyond-yasnippet () + "Get current keys's binding as if YASsnippet didn't exist." + (let* ((yas-minor-mode nil) + (yas--direct-keymaps nil) + (keys (this-single-command-keys))) + (or (key-binding keys t) + (key-binding (yas--fallback-translate-input keys) t)))) + +(defun yas--fallback-translate-input (keys) + "Emulate `read-key-sequence', at least what I think it does. + +Keys should be an untranslated key vector. Returns a translated +vector of keys. FIXME not thoroughly tested." + (let ((retval []) + (i 0)) + (while (< i (length keys)) + (let ((j i) + (translated local-function-key-map)) + (while (and (< j (length keys)) + translated + (keymapp translated)) + (setq translated (cdr (assoc (aref keys j) (remove 'keymap translated))) + j (1+ j))) + (setq retval (vconcat retval (cond ((symbolp translated) + `[,translated]) + ((vectorp translated) + translated) + (t + (substring keys i j))))) + (setq i j))) + retval)) + + +;;; Utils for snippet development: + +(defun yas--all-templates (tables) + "Get `yas--template' objects in TABLES, applicable for buffer and point. + +Honours `yas-choose-tables-first', `yas-choose-keys-first' and +`yas-buffer-local-condition'" + (when yas-choose-tables-first + (setq tables (list (yas--prompt-for-table tables)))) + (mapcar #'cdr + (if yas-choose-keys-first + (let ((key (yas--prompt-for-keys + (cl-mapcan #'yas--table-all-keys tables)))) + (when key + (cl-mapcan (lambda (table) + (yas--fetch table key)) + tables))) + (cl-remove-duplicates (cl-mapcan #'yas--table-templates tables) + :test #'equal)))) + +(defun yas--lookup-snippet-1 (name mode) + "Get the snippet called NAME in MODE's tables." + (let ((yas-choose-tables-first nil) ; avoid prompts + (yas-choose-keys-first nil)) + (cl-find name (yas--all-templates + (yas--get-snippet-tables mode)) + :key #'yas--template-name :test #'string=))) + +(defun yas-lookup-snippet (name &optional mode noerror) + "Get the snippet named NAME in MODE's tables. + +MODE defaults to the current buffer's `major-mode'. If NOERROR +is non-nil, then don't signal an error if there isn't any snippet +called NAME. + +Honours `yas-buffer-local-condition'." + (cond + ((yas--lookup-snippet-1 name mode)) + (noerror nil) + (t (error "No snippet named: %s" name)))) + +(defun yas-insert-snippet (&optional no-condition) + "Choose a snippet to expand, pop-up a list of choices according +to `yas-prompt-functions'. + +With prefix argument NO-CONDITION, bypass filtering of snippets +by condition." + (interactive "P") + (setq yas--condition-cache-timestamp (current-time)) + (let* ((yas-buffer-local-condition (or (and no-condition + 'always) + yas-buffer-local-condition)) + (templates (yas--all-templates (yas--get-snippet-tables))) + (yas--current-template (and templates + (or (and (cl-rest templates) ;; more than one template for same key + (yas--prompt-for-template templates)) + (car templates)))) + (where (if (region-active-p) + (cons (region-beginning) (region-end)) + (cons (point) (point))))) + (if yas--current-template + (yas-expand-snippet yas--current-template (car where) (cdr where)) + (yas--message 1 "No snippets can be inserted here!")))) + +(defun yas-visit-snippet-file () + "Choose a snippet to edit, selection like `yas-insert-snippet'. + +Only success if selected snippet was loaded from a file. Put the +visited file in `snippet-mode'." + (interactive) + (let* ((yas-buffer-local-condition 'always) + (templates (yas--all-templates (yas--get-snippet-tables))) + (template (and templates + (or (yas--prompt-for-template templates + "Choose a snippet template to edit: ") + (car templates))))) + + (if template + (yas--visit-snippet-file-1 template) + (message "No snippets tables active!")))) + +(defun yas--visit-snippet-file-1 (template) + "Helper for `yas-visit-snippet-file'." + (let ((file (yas--template-get-file template))) + (cond ((and file (file-readable-p file)) + (find-file-other-window file) + (snippet-mode) + (set (make-local-variable 'yas--editing-template) template)) + (file + (message "Original file %s no longer exists!" file)) + (t + (switch-to-buffer (format "*%s*"(yas--template-name template))) + (let ((type 'snippet)) + (when (listp (yas--template-content template)) + (insert (format "# type: command\n")) + (setq type 'command)) + (insert (format "# key: %s\n" (yas--template-key template))) + (insert (format "# name: %s\n" (yas--template-name template))) + (when (yas--template-keybinding template) + (insert (format "# binding: %s\n" (yas--template-keybinding template)))) + (when (yas--template-expand-env template) + (insert (format "# expand-env: %s\n" (yas--template-expand-env template)))) + (when (yas--template-condition template) + (insert (format "# condition: %s\n" (yas--template-condition template)))) + (insert "# --\n") + (insert (if (eq type 'command) + (pp-to-string (yas--template-content template)) + (yas--template-content template)))) + (snippet-mode) + (set (make-local-variable 'yas--editing-template) template) + (set (make-local-variable 'default-directory) + (car (cdr (car (yas--guess-snippet-directories (yas--template-table template)))))))))) + +(defun yas--guess-snippet-directories-1 (table) + "Guess possible snippet subdirectories for TABLE." + (cons (file-name-as-directory (yas--table-name table)) + (cl-mapcan #'yas--guess-snippet-directories-1 + (yas--table-parents table)))) + +(defun yas--guess-snippet-directories (&optional table) + "Try to guess suitable directories based on the current active +tables (or optional TABLE). + +Returns a list of elements (TABLE . DIRS) where TABLE is a +`yas--table' object and DIRS is a list of all possible directories +where snippets of table might exist." + (let ((main-dir (car (or (yas-snippet-dirs) + (setq yas-snippet-dirs + (list yas--default-user-snippets-dir))))) + (tables (if table (list table) + (yas--get-snippet-tables)))) + ;; HACK! the snippet table created here is actually registered! + (unless table + ;; The major mode is probably the best guess, put it first. + (let ((major-mode-table (yas--table-get-create major-mode))) + (cl-callf2 delq major-mode-table tables) + (push major-mode-table tables))) + + (mapcar #'(lambda (table) + (cons table + (mapcar #'(lambda (subdir) + (expand-file-name subdir main-dir)) + (yas--guess-snippet-directories-1 table)))) + tables))) + +(defun yas--make-directory-maybe (table-and-dirs &optional main-table-string) + "Return a dir inside TABLE-AND-DIRS, prompts for creation if none exists." + (or (cl-some (lambda (dir) (when (file-directory-p dir) dir)) + (cdr table-and-dirs)) + (let ((candidate (cl-first (cdr table-and-dirs)))) + (unless (file-writable-p (file-name-directory candidate)) + (error (yas--format "%s is not writable." candidate))) + (if (y-or-n-p (format "Guessed directory (%s) for%s%s table \"%s\" does not exist! Create? " + candidate + (if (gethash (yas--table-mode (car table-and-dirs)) + yas--tables) + "" + " brand new") + (or main-table-string + "") + (yas--table-name (car table-and-dirs)))) + (progn + (make-directory candidate 'also-make-parents) + ;; create the .yas-parents file here... + candidate))))) + +;; NOTE: Using the traditional "*new snippet*" stops whitespace mode +;; from activating (it doesn't like the leading "*"). +(defconst yas-new-snippet-buffer-name "+new-snippet+") + +(defun yas-new-snippet (&optional no-template) + "Pops a new buffer for writing a snippet. + +Expands a snippet-writing snippet, unless the optional prefix arg +NO-TEMPLATE is non-nil." + (interactive "P") + (let ((guessed-directories (yas--guess-snippet-directories)) + (yas-selected-text (or yas-selected-text + (and (region-active-p) + (buffer-substring-no-properties + (region-beginning) (region-end)))))) + + (switch-to-buffer yas-new-snippet-buffer-name) + (erase-buffer) + (kill-all-local-variables) + (snippet-mode) + (yas-minor-mode 1) + (set (make-local-variable 'yas--guessed-modes) + (mapcar (lambda (d) (yas--table-mode (car d))) + guessed-directories)) + (set (make-local-variable 'default-directory) + (car (cdr (car guessed-directories)))) + (if (and (not no-template) yas-new-snippet-default) + (yas-expand-snippet yas-new-snippet-default)))) + +(defun yas--compute-major-mode-and-parents (file) + "Given FILE, find the nearest snippet directory for a given mode. + +Returns a list (MODE-SYM PARENTS), the mode's symbol and a list +representing one or more of the mode's parents. + +Note that MODE-SYM need not be the symbol of a real major mode, +neither do the elements of PARENTS." + (let* ((file-dir (and file + (directory-file-name + (or (cl-some (lambda (special) + (locate-dominating-file file special)) + '(".yas-setup.el" + ".yas-make-groups" + ".yas-parents")) + (directory-file-name (file-name-directory file)))))) + (parents-file-name (concat file-dir "/.yas-parents")) + (major-mode-name (and file-dir + (file-name-nondirectory file-dir))) + (major-mode-sym (or (and major-mode-name + (intern major-mode-name)))) + (parents (when (file-readable-p parents-file-name) + (mapcar #'intern + (split-string + (with-temp-buffer + (insert-file-contents parents-file-name) + (buffer-substring-no-properties (point-min) + (point-max)))))))) + (when major-mode-sym + (cons major-mode-sym (remove major-mode-sym parents))))) + +(defvar yas--editing-template nil + "Supporting variable for `yas-load-snippet-buffer' and `yas--visit-snippet'.") + +(defvar yas--current-template nil + "Holds the current template being expanded into a snippet.") + +(defvar yas--guessed-modes nil + "List of guessed modes supporting `yas-load-snippet-buffer'.") + +(defun yas--read-table () + "Ask user for a snippet table, help with some guessing." + (let ((prompt (if (and (featurep 'ido) + ido-mode) + 'ido-completing-read 'completing-read))) + (unless yas--guessed-modes + (set (make-local-variable 'yas--guessed-modes) + (or (yas--compute-major-mode-and-parents buffer-file-name)))) + (intern + (funcall prompt (format "Choose or enter a table (yas guesses %s): " + (if yas--guessed-modes + (cl-first yas--guessed-modes) + "nothing")) + (mapcar #'symbol-name yas--guessed-modes) + nil + nil + nil + nil + (if (cl-first yas--guessed-modes) + (symbol-name (cl-first yas--guessed-modes))))))) + +(defun yas-load-snippet-buffer (table &optional interactive) + "Parse and load current buffer's snippet definition into TABLE. +TABLE is a symbol name passed to `yas--table-get-create'. When +called interactively, prompt for the table name. +Return the `yas--template' object created" + (interactive (list (yas--read-table) t)) + (cond + ;; We have `yas--editing-template', this buffer's content comes from a + ;; template which is already loaded and neatly positioned,... + ;; + (yas--editing-template + (yas--define-snippets-1 (yas--parse-template (yas--template-load-file yas--editing-template)) + (yas--template-table yas--editing-template))) + ;; Try to use `yas--guessed-modes'. If we don't have that use the + ;; value from `yas--compute-major-mode-and-parents' + ;; + (t + (unless yas--guessed-modes + (set (make-local-variable 'yas--guessed-modes) (or (yas--compute-major-mode-and-parents buffer-file-name)))) + (let* ((table (yas--table-get-create table))) + (set (make-local-variable 'yas--editing-template) + (yas--define-snippets-1 (yas--parse-template buffer-file-name) + table))))) + (when interactive + (yas--message 3 "Snippet \"%s\" loaded for %s." + (yas--template-name yas--editing-template) + (yas--table-name (yas--template-table yas--editing-template)))) + yas--editing-template) + +(defun yas-maybe-load-snippet-buffer () + "Added to `after-save-hook' in `snippet-mode'." + (let* ((mode (intern (file-name-sans-extension + (file-name-nondirectory + (directory-file-name default-directory))))) + (current-snippet + (apply #'yas--define-snippets-2 (yas--table-get-create mode) + (yas--parse-template buffer-file-name))) + (uuid (yas--template-uuid current-snippet))) + (unless (equal current-snippet + (if uuid (yas--get-template-by-uuid mode uuid) + (yas--lookup-snippet-1 + (yas--template-name current-snippet) mode))) + (yas-load-snippet-buffer mode t)))) + +(defun yas-load-snippet-buffer-and-close (table &optional kill) + "Load and save the snippet, then `quit-window' if saved. +Loading is performed by `yas-load-snippet-buffer'. If the +snippet is new, ask the user whether (and where) to save it. If +the snippet already has a file, just save it. + +The prefix argument KILL is passed to `quit-window'. + +Don't use this from a Lisp program, call `yas-load-snippet-buffer' +and `kill-buffer' instead." + (interactive (list (yas--read-table) current-prefix-arg)) + (let ((template (yas-load-snippet-buffer table t))) + (when (and (buffer-modified-p) + (y-or-n-p + (format "[yas] Loaded for %s. Also save snippet buffer?" + (yas--table-name (yas--template-table template))))) + (let ((default-directory (car (cdr (car (yas--guess-snippet-directories + (yas--template-table template)))))) + (default-file-name (yas--template-name template))) + (unless (or buffer-file-name (not default-file-name)) + (setq buffer-file-name + (read-file-name "File to save snippet in: " + nil nil nil default-file-name)) + (rename-buffer (file-name-nondirectory buffer-file-name) t)) + (save-buffer))) + (quit-window kill))) + +(declare-function yas-debug-snippets "yasnippet-debug") + +(defun yas-tryout-snippet (&optional debug) + "Test current buffer's snippet template in other buffer. +DEBUG is for debugging the YASnippet engine itself." + (interactive "P") + (let* ((major-mode-and-parent (yas--compute-major-mode-and-parents buffer-file-name)) + (parsed (yas--parse-template)) + (test-mode (or (and (car major-mode-and-parent) + (fboundp (car major-mode-and-parent)) + (car major-mode-and-parent)) + (cl-first yas--guessed-modes) + (intern (read-from-minibuffer (yas--format "Please input a mode: "))))) + (yas--current-template + (and parsed + (fboundp test-mode) + (yas--make-template :table nil ;; no tables for ephemeral snippets + :key (nth 0 parsed) + :content (nth 1 parsed) + :name (nth 2 parsed) + :expand-env (nth 5 parsed))))) + (cond (yas--current-template + (let ((buffer-name + (format "*testing snippet: %s*" + (yas--template-name yas--current-template)))) + (kill-buffer (get-buffer-create buffer-name)) + (switch-to-buffer (get-buffer-create buffer-name)) + (setq buffer-undo-list nil) + (condition-case nil (funcall test-mode) (error nil)) + (yas-minor-mode 1) + (setq buffer-read-only nil) + (yas-expand-snippet yas--current-template + (point-min) (point-max)) + (when (and debug + (require 'yasnippet-debug nil t)) + (yas-debug-snippets "*YASnippet trace*" 'snippet-navigation) + (display-buffer "*YASnippet trace*")))) + (t + (yas--message 1 "Cannot test snippet for unknown major mode"))))) + +(defun yas-active-keys () + "Return all active trigger keys for current buffer and point." + (cl-remove-duplicates + (cl-remove-if-not #'stringp (cl-mapcan #'yas--table-all-keys + (yas--get-snippet-tables))) + :test #'string=)) + +(defun yas--template-fine-group (template) + (car (last (or (yas--template-group template) + (yas--template-perm-group template))))) + +(defun yas-describe-table-by-namehash () + "Display snippet tables by NAMEHASH." + (interactive) + (with-current-buffer (get-buffer-create "*YASnippet Tables by NAMEHASH*") + (let ((inhibit-read-only t)) + (erase-buffer) + (insert "YASnippet tables by NAMEHASH: \n") + (maphash + (lambda (_mode table) + (insert (format "\nSnippet table `%s':\n\n" (yas--table-name table))) + (maphash + (lambda (key _v) + (insert (format " key %s maps snippets: %s\n" key + (let ((names)) + (maphash #'(lambda (k _v) + (push k names)) + (gethash key (yas--table-hash table))) + names)))) + (yas--table-hash table))) + yas--tables)) + (view-mode +1) + (goto-char 1) + (display-buffer (current-buffer)))) + +(defun yas-describe-tables (&optional with-nonactive) + "Display snippets for each table." + (interactive "P") + (let ((original-buffer (current-buffer)) + (tables (yas--get-snippet-tables))) + (with-current-buffer (get-buffer-create "*YASnippet Tables*") + (let ((inhibit-read-only t)) + (when with-nonactive + (maphash #'(lambda (_k v) + (cl-pushnew v tables)) + yas--tables)) + (erase-buffer) + (insert "YASnippet tables:\n") + (dolist (table tables) + (yas--describe-pretty-table table original-buffer)) + (yas--create-snippet-xrefs)) + (help-mode) + (goto-char 1) + (display-buffer (current-buffer))))) + +(defun yas--describe-pretty-table (table &optional original-buffer) + (insert (format "\nSnippet table `%s'" + (yas--table-name table))) + (if (yas--table-parents table) + (insert (format " parents: %s\n" + (mapcar #'yas--table-name + (yas--table-parents table)))) + (insert "\n")) + (insert (make-string 100 ?-) "\n") + (insert "group state name key binding\n") + (let ((groups-hash (make-hash-table :test #'equal))) + (maphash #'(lambda (_k v) + (let ((group (or (yas--template-fine-group v) + "(top level)"))) + (when (yas--template-name v) + (puthash group + (cons v (gethash group groups-hash)) + groups-hash)))) + (yas--table-uuidhash table)) + (maphash + #'(lambda (group templates) + (setq group (truncate-string-to-width group 25 0 ? "...")) + (insert (make-string 100 ?-) "\n") + (dolist (p templates) + (let* ((name (truncate-string-to-width (propertize (format "\\\\snippet `%s'" (yas--template-name p)) + 'yasnippet p) + 50 0 ? "...")) + (group (prog1 group + (setq group (make-string (length group) ? )))) + (condition-string (let ((condition (yas--template-condition p))) + (if (and condition + original-buffer) + (with-current-buffer original-buffer + (if (yas--eval-condition condition) + "(y)" + "(s)")) + "(a)"))) + (key-description-string (key-description (yas--template-keybinding p))) + (template-key-padding (if (string= key-description-string "") nil ? ))) + (insert group " " + condition-string " " + name (if (string-match "\\.\\.\\.$" name) + "'" " ") + " " + (truncate-string-to-width (or (yas--template-key p) "") + 15 0 template-key-padding "...") + (or template-key-padding "") + (truncate-string-to-width key-description-string + 15 0 nil "...") + "\n")))) + groups-hash))) + + + +;;; User convenience functions, for using in `yas-key-syntaxes' + +(defun yas-try-key-from-whitespace (_start-point) + "As `yas-key-syntaxes' element, look for whitespace delimited key. + +A newline will be considered whitespace even if the mode syntax +marks it as something else (typically comment ender)." + (skip-chars-backward "^[:space:]\n")) + +(defun yas-shortest-key-until-whitespace (_start-point) + "Like `yas-longest-key-from-whitespace' but take the shortest key." + (when (/= (skip-chars-backward "^[:space:]\n" (1- (point))) 0) + 'again)) + +(defun yas-longest-key-from-whitespace (start-point) + "As `yas-key-syntaxes' element, look for longest key between point and whitespace. + +A newline will be considered whitespace even if the mode syntax +marks it as something else (typically comment ender)." + (if (= (point) start-point) + (yas-try-key-from-whitespace start-point) + (forward-char)) + (unless (<= start-point (1+ (point))) + 'again)) + + + +;;; User convenience functions, for using in snippet definitions + +(defvar yas-modified-p nil + "Non-nil if field has been modified by user or transformation.") + +(defvar yas-moving-away-p nil + "Non-nil if user is about to exit field.") + +(defvar yas-text nil + "Contains current field text.") + +(defun yas-substr (str pattern &optional subexp) + "Search PATTERN in STR and return SUBEXPth match. + +If found, the content of subexp group SUBEXP (default 0) is + returned, or else the original STR will be returned." + (let ((grp (or subexp 0))) + (save-match-data + (if (string-match pattern str) + (match-string-no-properties grp str) + str)))) + +(defun yas-choose-value (&rest possibilities) + "Prompt for a string in POSSIBILITIES and return it. + +The last element of POSSIBILITIES may be a list of strings." + (unless (or yas-moving-away-p + yas-modified-p) + (let* ((last-link (last possibilities)) + (last-elem (car last-link))) + (when (listp last-elem) + (setcar last-link (car last-elem)) + (setcdr last-link (cdr last-elem)))) + (cl-some (lambda (fn) + (funcall fn "Choose: " possibilities)) + yas-prompt-functions))) + +(defun yas-completing-read (&rest args) + "A snippet-aware version of `completing-read'. +This can be used to query the user for the initial value of a +snippet field. The arguments are the same as `completing-read'. + +\(fn PROMPT COLLECTION &optional PREDICATE REQUIRE-MATCH INITIAL-INPUT HIST DEF INHERIT-INPUT-METHOD)" + (unless (or yas-moving-away-p + yas-modified-p) + (apply #'completing-read args))) + +(defun yas--auto-next () + "Helper for `yas-auto-next'." + (cl-loop + do (progn (remove-hook 'post-command-hook #'yas--auto-next t) + (yas-next-field)) + ;; The transform in the next field may have requested auto-next as + ;; well. Call it ourselves, since the command loop itself won't + ;; recheck the value of post-command-hook while running it. + while (memq #'yas--auto-next post-command-hook))) + +(defmacro yas-auto-next (&rest body) + "Automatically advance to next field after eval'ing BODY." + (declare (indent 0) (debug t)) + `(unless yas-moving-away-p + (prog1 ,@body + (add-hook 'post-command-hook #'yas--auto-next nil t)))) + +(defun yas-key-to-value (alist) + (unless (or yas-moving-away-p + yas-modified-p) + (let ((key (read-key-sequence ""))) + (when (stringp key) + (or (cdr (cl-find key alist :key #'car :test #'string=)) + key))))) + +(defun yas-throw (text) + "Signal `yas-exception' with TEXT as the reason." + (signal 'yas-exception (list text))) +(put 'yas-exception 'error-conditions '(error yas-exception)) +(put 'yas-exception 'error-message "[yas] Exception") + +(defun yas-verify-value (possibilities) + "Verify that the current field value is in POSSIBILITIES. +Otherwise signal `yas-exception'." + (when (and yas-moving-away-p (not (member yas-text possibilities))) + (yas-throw (format "Field only allows %s" possibilities)))) + +(defun yas-field-value (number) + "Get the string for field with NUMBER. + +Use this in primary and mirror transformations to get the text of +other fields." + (let* ((snippet (car (yas-active-snippets))) + (field (and snippet + (yas--snippet-find-field snippet number)))) + (when field + (yas--field-text-for-display field)))) + +(defun yas-text () + "Return `yas-text' if that exists and is non-empty, else nil." + (if (and yas-text + (not (string= "" yas-text))) + yas-text)) + +(defun yas-selected-text () + "Return `yas-selected-text' if that exists and is non-empty, else nil." + (if (and yas-selected-text + (not (string= "" yas-selected-text))) + yas-selected-text)) + +(defun yas--get-field-once (number &optional transform-fn) + (unless yas-modified-p + (if transform-fn + (funcall transform-fn (yas-field-value number)) + (yas-field-value number)))) + +(defun yas-default-from-field (number) + (unless yas-modified-p + (yas-field-value number))) + +(defun yas-inside-string () + "Return non-nil if the point is inside a string according to font-lock." + (equal 'font-lock-string-face (get-char-property (1- (point)) 'face))) + +(defun yas-unimplemented (&optional missing-feature) + (if yas--current-template + (if (y-or-n-p (format "This snippet is unimplemented (missing %s) Visit the snippet definition? " + (or missing-feature + "something"))) + (yas--visit-snippet-file-1 yas--current-template)) + (message "No implementation. Missing %s" (or missing-feature "something")))) + + +;;; Snippet expansion and field management + +(defvar yas--active-field-overlay nil + "Overlays the currently active field.") + +(defvar yas--active-snippets nil + "List of currently active snippets") +(make-variable-buffer-local 'yas--active-snippets) + +(defvar yas--field-protection-overlays nil + "Two overlays protect the current active field.") + +(defvar yas-selected-text nil + "The selected region deleted on the last snippet expansion.") + +(defvar yas--start-column nil + "The column where the snippet expansion started.") + +(make-variable-buffer-local 'yas--active-field-overlay) +(make-variable-buffer-local 'yas--field-protection-overlays) +(put 'yas--active-field-overlay 'permanent-local t) +(put 'yas--field-protection-overlays 'permanent-local t) + +(cl-defstruct (yas--snippet (:constructor yas--make-snippet (expand-env))) + "A snippet. + +..." + expand-env + (fields '()) + (exit nil) + (id (yas--snippet-next-id) :read-only t) + (control-overlay nil) + active-field + ;; stacked expansion: the `previous-active-field' slot saves the + ;; active field where the child expansion took place + previous-active-field + force-exit) + +(cl-defstruct (yas--field (:constructor yas--make-field (number start end parent-field))) + "A field. + +NUMBER is the field number. +START and END are mostly buffer markers, but see \"apropos markers-to-points\". +PARENT-FIELD is a `yas--field' this field is nested under, or nil. +MIRRORS is a list of `yas--mirror's +TRANSFORM is a lisp form. +MODIFIED-P is a boolean set to true once user inputs text. +NEXT is another `yas--field' or `yas--mirror' or `yas--exit'. +" + number + start end + parent-field + (mirrors '()) + (transform nil) + (modified-p nil) + next) + + +(cl-defstruct (yas--mirror (:constructor yas--make-mirror (start end transform))) + "A mirror. + +START and END are mostly buffer markers, but see \"apropos markers-to-points\". +TRANSFORM is a lisp form. +PARENT-FIELD is a `yas--field' this mirror is nested under, or nil. +NEXT is another `yas--field' or `yas--mirror' or `yas--exit' +DEPTH is a count of how many nested mirrors can affect this mirror" + start end + (transform nil) + parent-field + next + depth) + +(cl-defstruct (yas--exit (:constructor yas--make-exit (marker))) + marker + next) + +(defmacro yas--letenv (env &rest body) + "Evaluate BODY with bindings from ENV. +ENV is a lisp expression that evaluates to list of elements with +the form (VAR FORM), where VAR is a symbol and FORM is a lisp +expression that evaluates to its value." + (declare (debug (form body)) (indent 1)) + (let ((envvar (make-symbol "envvar"))) + `(let ((,envvar ,env)) + (cl-progv + (mapcar #'car ,envvar) + (mapcar (lambda (v-f) (eval (cadr v-f))) ,envvar) + ,@body)))) + +(defun yas--snippet-map-markers (fun snippet) + "Apply FUN to all marker (sub)fields in SNIPPET. +Update each field with the result of calling FUN." + (dolist (field (yas--snippet-fields snippet)) + (setf (yas--field-start field) (funcall fun (yas--field-start field))) + (setf (yas--field-end field) (funcall fun (yas--field-end field))) + (dolist (mirror (yas--field-mirrors field)) + (setf (yas--mirror-start mirror) (funcall fun (yas--mirror-start mirror))) + (setf (yas--mirror-end mirror) (funcall fun (yas--mirror-end mirror))))) + (let ((snippet-exit (yas--snippet-exit snippet))) + (when snippet-exit + (setf (yas--exit-marker snippet-exit) + (funcall fun (yas--exit-marker snippet-exit)))))) + +(defun yas--snippet-live-p (snippet) + "Return non-nil if SNIPPET hasn't been committed." + (catch 'live + (yas--snippet-map-markers (lambda (m) + (if (markerp m) m + (throw 'live nil))) + snippet) + t)) + +(defun yas--apply-transform (field-or-mirror field &optional empty-on-nil-p) + "Calculate transformed string for FIELD-OR-MIRROR from FIELD. + +If there is no transform for ht field, return nil. + +If there is a transform but it returns nil, return the empty +string iff EMPTY-ON-NIL-P is true." + (let* ((yas-text (yas--field-text-for-display field)) + (yas-modified-p (yas--field-modified-p field)) + (transform (if (yas--mirror-p field-or-mirror) + (yas--mirror-transform field-or-mirror) + (yas--field-transform field-or-mirror))) + (start-point (if (yas--mirror-p field-or-mirror) + (yas--mirror-start field-or-mirror) + (yas--field-start field-or-mirror))) + (transformed (and transform + (save-excursion + (goto-char start-point) + (let ((ret (yas--eval-for-string transform))) + (or ret (and empty-on-nil-p ""))))))) + transformed)) + +(defsubst yas--replace-all (from to &optional text) + "Replace all occurrences from FROM to TO. + +With optional string TEXT do it in that string." + (if text + (replace-regexp-in-string (regexp-quote from) to text t t) + (goto-char (point-min)) + (while (search-forward from nil t) + (replace-match to t t text)))) + +(defun yas--snippet-find-field (snippet number) + (cl-find-if (lambda (field) + (eq number (yas--field-number field))) + (yas--snippet-fields snippet))) + +(defun yas--snippet-sort-fields (snippet) + "Sort the fields of SNIPPET in navigation order." + (setf (yas--snippet-fields snippet) + (sort (yas--snippet-fields snippet) + #'yas--snippet-field-compare))) + +(defun yas--snippet-field-compare (field1 field2) + "Compare FIELD1 and FIELD2. + +The field with a number is sorted first. If they both have a +number, compare through the number. If neither have, compare +through the field's start point" + (let ((n1 (yas--field-number field1)) + (n2 (yas--field-number field2))) + (if n1 + (if n2 + (or (zerop n2) (and (not (zerop n1)) + (< n1 n2))) + (not (zerop n1))) + (if n2 + (zerop n2) + (< (yas--field-start field1) + (yas--field-start field2)))))) + +(defun yas--field-probably-deleted-p (snippet field) + "Guess if SNIPPET's FIELD should be skipped." + (and + ;; field must be zero length + ;; + (zerop (- (yas--field-start field) (yas--field-end field))) + ;; field must have been modified + ;; + (yas--field-modified-p field) + ;; either: + (or + ;; 1) it's a nested field + ;; + (yas--field-parent-field field) + ;; 2) ends just before the snippet end + ;; + (and (eq field (car (last (yas--snippet-fields snippet)))) + (= (yas--field-start field) (overlay-end (yas--snippet-control-overlay snippet))))) + ;; the field numbered 0, just before the exit marker, should + ;; never be skipped + ;; + (not (and (yas--field-number field) + (zerop (yas--field-number field)))))) + +(defun yas-active-snippets (&optional beg end) + "Return a sorted list of active snippets. +The most recently-inserted snippets are returned first. + +Only snippets overlapping the region BEG ... END are returned. +Overlapping has the same meaning as described in `overlays-in'. +If END is omitted, it defaults to (1+ BEG). If BEG is omitted, +it defaults to point. A non-nil, non-buffer position BEG is +equivalent to a range covering the whole buffer." + (unless beg + (setq beg (point))) + (cond ((not (or (integerp beg) (markerp beg))) + (setq beg (point-min) end (point-max))) + ((not end) + (setq end (1+ beg)))) + (if (and (eq beg (point-min)) + (eq end (point-max))) + yas--active-snippets + ;; Note: don't use `mapcar' here, since it would allocate in + ;; proportion to the amount of overlays, even though the list of + ;; active snippets should be very small. + (let ((snippets nil)) + (dolist (ov (overlays-in beg end)) + (let ((snippet (overlay-get ov 'yas--snippet))) + ;; Snippets have multiple overlays, so check for dups. + (when (and snippet (not (memq snippet snippets))) + (push snippet snippets)))) + (cl-sort snippets #'>= :key #'yas--snippet-id)))) + +(define-obsolete-function-alias 'yas--snippets-at-point + 'yas-active-snippets "0.12") + +(defun yas-next-field-or-maybe-expand () + "Try to expand a snippet at a key before point. + +Otherwise delegate to `yas-next-field'." + (interactive) + (if yas-triggers-in-field + (let ((yas-fallback-behavior 'return-nil) + (active-field (overlay-get yas--active-field-overlay 'yas--field))) + (when active-field + (unless (yas-expand-from-trigger-key active-field) + (yas-next-field)))) + (yas-next-field))) + +(defun yas-next-field-will-exit-p (&optional arg) + "Return non-nil if (yas-next-field ARG) would exit the current snippet." + (let ((snippet (car (yas-active-snippets))) + (active (overlay-get yas--active-field-overlay 'yas--field))) + (when snippet + (not (yas--find-next-field arg snippet active))))) + +(defun yas--find-next-field (n snippet active) + "Return the Nth field after the ACTIVE one in SNIPPET." + (let ((live-fields (cl-remove-if + (lambda (field) + (and (not (eq field active)) + (yas--field-probably-deleted-p snippet field))) + (yas--snippet-fields snippet)))) + (nth (abs n) (memq active (if (>= n 0) live-fields (reverse live-fields)))))) + +(defun yas-next-field (&optional arg) + "Navigate to the ARGth next field. + +If there's none, exit the snippet." + (interactive) + (unless arg (setq arg 1)) + (let* ((active-field (overlay-get yas--active-field-overlay 'yas--field)) + (snippet (car (yas-active-snippets (yas--field-start active-field) + (yas--field-end active-field)))) + (target-field (yas--find-next-field arg snippet active-field))) + (yas--letenv (yas--snippet-expand-env snippet) + ;; Apply transform to active field. + (when active-field + (let ((yas-moving-away-p t)) + (when (yas--field-update-display active-field) + (yas--update-mirrors snippet)))) + ;; Now actually move... + (if target-field + (yas--move-to-field snippet target-field) + (yas-exit-snippet snippet))))) + +(defun yas--place-overlays (snippet field) + "Correctly place overlays for SNIPPET's FIELD." + (yas--make-move-field-protection-overlays snippet field) + ;; Only move active field overlays if this is field is from the + ;; innermost snippet. + (when (eq snippet (car (yas-active-snippets (1- (yas--field-start field)) + (1+ (yas--field-end field))))) + (yas--make-move-active-field-overlay snippet field))) + +(defun yas--move-to-field (snippet field) + "Update SNIPPET to move to field FIELD. + +Also create some protection overlays" + (goto-char (yas--field-start field)) + (yas--place-overlays snippet field) + (overlay-put yas--active-field-overlay 'yas--snippet snippet) + (overlay-put yas--active-field-overlay 'yas--field field) + (let ((number (yas--field-number field))) + ;; check for the special ${0: ...} field + (if (and number (zerop number)) + (progn + (set-mark (yas--field-end field)) + (setf (yas--snippet-force-exit snippet) + (or (yas--field-transform field) + t))) + ;; make this field active + (setf (yas--snippet-active-field snippet) field) + ;; primary field transform: first call to snippet transform + (unless (yas--field-modified-p field) + (if (yas--field-update-display field) + (yas--update-mirrors snippet) + (setf (yas--field-modified-p field) nil)))))) + +(defun yas-prev-field () + "Navigate to prev field. If there's none, exit the snippet." + (interactive) + (yas-next-field -1)) + +(defun yas-abort-snippet (&optional snippet) + (interactive) + (let ((snippet (or snippet + (car (yas-active-snippets))))) + (when snippet + (setf (yas--snippet-force-exit snippet) t)))) + +(defun yas-exit-snippet (snippet) + "Goto exit-marker of SNIPPET." + (interactive (list (cl-first (yas-active-snippets)))) + (when snippet + (setf (yas--snippet-force-exit snippet) t) + (goto-char (if (yas--snippet-exit snippet) + (yas--exit-marker (yas--snippet-exit snippet)) + (overlay-end (yas--snippet-control-overlay snippet)))))) + +(defun yas-exit-all-snippets () + "Exit all snippets." + (interactive) + (mapc #'(lambda (snippet) + (yas-exit-snippet snippet) + (yas--check-commit-snippet)) + (yas-active-snippets 'all))) + + +;;; Some low level snippet-routines: + +(defvar yas--inhibit-overlay-hooks nil + "Bind this temporarily to non-nil to prevent running `yas--on-*-modification'.") + +(defvar yas-snippet-beg nil "Beginning position of the last snippet committed.") +(defvar yas-snippet-end nil "End position of the last snippet committed.") + +(defun yas--commit-snippet (snippet) + "Commit SNIPPET, but leave point as it is. + +This renders the snippet as ordinary text." + + (let ((control-overlay (yas--snippet-control-overlay snippet))) + ;; + ;; Save the end of the moribund snippet in case we need to revive it + ;; its original expansion. + ;; + (when (and control-overlay + (overlay-buffer control-overlay)) + (setq yas-snippet-beg (overlay-start control-overlay)) + (setq yas-snippet-end (overlay-end control-overlay)) + (delete-overlay control-overlay) + (setf (yas--snippet-control-overlay snippet) nil)) + + (let ((yas--inhibit-overlay-hooks t)) + (when yas--active-field-overlay + (delete-overlay yas--active-field-overlay)) + (when yas--field-protection-overlays + (mapc #'delete-overlay yas--field-protection-overlays))) + + ;; stacked expansion: if the original expansion took place from a + ;; field, make sure we advance it here at least to + ;; `yas-snippet-end'... + ;; + (let ((previous-field (yas--snippet-previous-active-field snippet))) + (when (and yas-snippet-end previous-field) + (yas--advance-end-maybe previous-field yas-snippet-end))) + + ;; Convert all markers to points, + ;; + (yas--markers-to-points snippet) + + ;; It's no longer an active snippet. + (cl-callf2 delq snippet yas--active-snippets) + + ;; Take care of snippet revival on undo. + (if (and yas-snippet-revival (listp buffer-undo-list)) + (push `(apply yas--snippet-revive ,yas-snippet-beg ,yas-snippet-end ,snippet) + buffer-undo-list) + ;; Dismember the snippet... this is useful if we get called + ;; again from `yas--take-care-of-redo'.... + (setf (yas--snippet-fields snippet) nil))) + + (yas--message 4 "Snippet %s exited." (yas--snippet-id snippet))) + +(defvar yas--snippets-to-move nil) +(make-variable-buffer-local 'yas--snippets-to-move) + +(defun yas--prepare-snippets-for-move (beg end buf pos) + "Gather snippets in BEG..END for moving to POS in BUF." + (let ((to-move nil) + (snippets (yas-active-snippets beg end)) + (dst-base-line (with-current-buffer buf + (count-lines (point-min) pos)))) + (when snippets + (dolist (snippet snippets) + (yas--snippet-map-markers + (lambda (m) + (prog1 (cons m (yas--snapshot-line-location m)) + (set-marker m nil))) + snippet) + (let ((ctrl-ov (yas--snapshot-overlay-line-location + (yas--snippet-control-overlay snippet)))) + (push (list ctrl-ov dst-base-line snippet) to-move) + (delete-overlay (car ctrl-ov)))) + (with-current-buffer buf + (cl-callf2 nconc to-move yas--snippets-to-move))))) + +(defun yas--on-buffer-kill () + ;; Org mode uses temp buffers for fontification and "native tab", + ;; move all the snippets to the original org-mode buffer when it's + ;; killed. + (let ((org-marker nil) + (org-buffer nil)) + (when (and yas-minor-mode + (or (bound-and-true-p org-edit-src-from-org-mode) + (bound-and-true-p org-src--from-org-mode)) + (markerp + (setq org-marker + (or (bound-and-true-p org-edit-src-beg-marker) + (bound-and-true-p org-src--beg-marker)))) + ;; If the org source buffer is killed before the temp + ;; fontification one, org-marker might point nowhere. + (setq org-buffer (marker-buffer org-marker))) + (yas--prepare-snippets-for-move + (point-min) (point-max) + org-buffer org-marker)))) + +(add-hook 'kill-buffer-hook #'yas--on-buffer-kill) + +(defun yas--finish-moving-snippets () + "Finish job started in `yas--prepare-snippets-for-move'." + (cl-loop for (ctrl-ov base-line snippet) in yas--snippets-to-move + for base-pos = (progn (goto-char (point-min)) + (forward-line base-line) (point)) + do (yas--snippet-map-markers + (lambda (saved-location) + (let ((m (pop saved-location))) + (set-marker m (yas--goto-saved-line-location + base-pos saved-location)) + m)) + snippet) + (goto-char base-pos) + (yas--restore-overlay-line-location base-pos ctrl-ov) + (yas--maybe-move-to-active-field snippet) + (push snippet yas--active-snippets)) + (setq yas--snippets-to-move nil)) + +(defun yas--safely-call-fun (fun) + "Call FUN and catch any errors." + (condition-case error + (funcall fun) + ((debug error) + (yas--message 2 "Error running %s: %s" fun + (error-message-string error))))) + +(defun yas--safely-run-hook (hook) + "Call HOOK's functions. +HOOK should be a symbol, a hook variable, as in `run-hooks'." + (let ((debug-on-error (and (not (memq yas-good-grace '(t hooks))) + debug-on-error))) + (yas--safely-call-fun (apply-partially #'run-hooks hook)))) + +(defun yas--check-commit-snippet () + "Check if point exited the currently active field of the snippet. + +If so cleans up the whole snippet up." + (let* ((snippet-exit-transform nil) + (exited-snippets-p nil) + ;; Record the custom snippet `yas-after-exit-snippet-hook' + ;; set in the expand-env field. + (snippet-exit-hook yas-after-exit-snippet-hook)) + (dolist (snippet yas--active-snippets) + (let ((active-field (yas--snippet-active-field snippet))) + (yas--letenv (yas--snippet-expand-env snippet) + ;; Note: the `force-exit' field could be a transform in case of + ;; ${0: ...}, see `yas--move-to-field'. + (setq snippet-exit-transform (yas--snippet-force-exit snippet)) + (cond ((or snippet-exit-transform + (not (and active-field (yas--field-contains-point-p active-field)))) + (setf (yas--snippet-force-exit snippet) nil) + (setq snippet-exit-hook yas-after-exit-snippet-hook) + (yas--commit-snippet snippet) + (setq exited-snippets-p t)) + ((and active-field + (or (not yas--active-field-overlay) + (not (overlay-buffer yas--active-field-overlay)))) + ;; + ;; stacked expansion: this case is mainly for recent + ;; snippet exits that place us back int the field of + ;; another snippet + ;; + (save-excursion + (yas--move-to-field snippet active-field) + (yas--update-mirrors snippet))) + (t + nil))))) + (unless (or yas--active-snippets (not exited-snippets-p)) + (when snippet-exit-transform + (yas--eval-for-effect snippet-exit-transform)) + (let ((yas-after-exit-snippet-hook snippet-exit-hook)) + (yas--safely-run-hook 'yas-after-exit-snippet-hook))))) + +;; Apropos markers-to-points: +;; +;; This was found useful for performance reasons, so that an excessive +;; number of live markers aren't kept around in the +;; `buffer-undo-list'. We don't reuse the original marker object +;; because that leaves an unreadable object in the history list and +;; undo-tree persistence has trouble with that. +;; +;; This shouldn't bring horrible problems with undo/redo, but you +;; never know. +;; +(defun yas--markers-to-points (snippet) + "Save all markers of SNIPPET as positions." + (yas--snippet-map-markers (lambda (m) + (prog1 (marker-position m) + (set-marker m nil))) + snippet)) + +(defun yas--points-to-markers (snippet) + "Restore SNIPPET's marker positions, saved by `yas--markers-to-points'." + (yas--snippet-map-markers #'copy-marker snippet)) + +(defun yas--maybe-move-to-active-field (snippet) + "Try to move to SNIPPET's active (or first) field and return it if found." + (let ((target-field (or (yas--snippet-active-field snippet) + (car (yas--snippet-fields snippet))))) + (when target-field + (yas--move-to-field snippet target-field) + target-field))) + +(defun yas--field-contains-point-p (field &optional point) + (let ((point (or point + (point)))) + (and (>= point (yas--field-start field)) + (<= point (yas--field-end field))))) + +(defun yas--field-text-for-display (field) + "Return the propertized display text for field FIELD." + (buffer-substring (yas--field-start field) (yas--field-end field))) + +(defun yas--undo-in-progress () + "True if some kind of undo is in progress." + (or undo-in-progress + (eq this-command 'undo) + (eq this-command 'redo))) + +(defun yas--make-control-overlay (snippet start end) + "Create the control overlay that surrounds the snippet and +holds the keymap." + (let ((overlay (make-overlay start + end + nil + nil + t))) + (overlay-put overlay 'keymap yas-keymap) + (overlay-put overlay 'priority yas-overlay-priority) + (overlay-put overlay 'yas--snippet snippet) + overlay)) + +(defun yas-current-field () + "Return the currently active field." + (and yas--active-field-overlay + (overlay-buffer yas--active-field-overlay) + (overlay-get yas--active-field-overlay 'yas--field))) + +(defun yas--maybe-clear-field-filter (cmd) + "Return CMD if at start of unmodified snippet field. +Use as a `:filter' argument for a conditional keybinding." + (let ((field (yas-current-field))) + (when (and field + (not (yas--field-modified-p field)) + (eq (point) (marker-position (yas--field-start field)))) + cmd))) + +(defun yas-skip-and-clear-field (&optional field) + "Clears unmodified FIELD if at field start, skips to next tab." + (interactive) + (yas--skip-and-clear (or field (yas-current-field))) + (yas-next-field 1)) + +(defun yas-clear-field (&optional field) + "Clears unmodified FIELD if at field start." + (interactive) + (yas--skip-and-clear (or field (yas-current-field)))) + +(defun yas-skip-and-clear-or-delete-char (&optional field) + "Clears unmodified field if at field start, skips to next tab. + +Otherwise deletes a character normally by calling `delete-char'." + (interactive) + (declare (obsolete "Bind to `yas-maybe-skip-and-clear-field' instead." "0.13")) + (cond ((yas--maybe-clear-field-filter t) + (yas--skip-and-clear (or field (yas-current-field))) + (yas-next-field 1)) + (t (call-interactively 'delete-char)))) + +(defun yas--skip-and-clear (field &optional from) + "Deletes the region of FIELD and sets it's modified state to t. +If given, FROM indicates position to start at instead of FIELD's beginning." + ;; Just before skipping-and-clearing the field, mark its children + ;; fields as modified, too. If the children have mirrors-in-fields + ;; this prevents them from updating erroneously (we're skipping and + ;; deleting!). + ;; + (yas--mark-this-and-children-modified field) + (unless (= (yas--field-start field) (yas--field-end field)) + (delete-region (or from (yas--field-start field)) (yas--field-end field)))) + +(defun yas--mark-this-and-children-modified (field) + (setf (yas--field-modified-p field) t) + (let ((fom (yas--field-next field))) + (while (and fom + (yas--fom-parent-field fom)) + (when (and (eq (yas--fom-parent-field fom) field) + (yas--field-p fom)) + (yas--mark-this-and-children-modified fom)) + (setq fom (yas--fom-next fom))))) + +(defun yas--make-move-active-field-overlay (snippet field) + "Place the active field overlay in SNIPPET's FIELD. + +Move the overlay, or create it if it does not exit." + (if (and yas--active-field-overlay + (overlay-buffer yas--active-field-overlay)) + (move-overlay yas--active-field-overlay + (yas--field-start field) + (yas--field-end field)) + (setq yas--active-field-overlay + (make-overlay (yas--field-start field) + (yas--field-end field) + nil nil t)) + (overlay-put yas--active-field-overlay 'priority yas-overlay-priority) + (overlay-put yas--active-field-overlay 'face 'yas-field-highlight-face) + (overlay-put yas--active-field-overlay 'yas--snippet snippet) + (overlay-put yas--active-field-overlay 'modification-hooks '(yas--on-field-overlay-modification)) + (overlay-put yas--active-field-overlay 'insert-in-front-hooks + '(yas--on-field-overlay-modification)) + (overlay-put yas--active-field-overlay 'insert-behind-hooks + '(yas--on-field-overlay-modification)))) + +(defun yas--skip-and-clear-field-p (field beg _end length) + "Tell if newly modified FIELD should be cleared and skipped. +BEG, END and LENGTH like overlay modification hooks." + (and (= length 0) ; A 0 pre-change length indicates insertion. + (= beg (yas--field-start field)) ; Insertion at field start? + (not (yas--field-modified-p field)))) + + +(defun yas--merge-and-drop-dups (list1 list2 cmp key) + ;; `delete-consecutive-dups' + `cl-merge'. + (funcall (if (fboundp 'delete-consecutive-dups) + #'delete-consecutive-dups ; 24.4 + #'delete-dups) + (cl-merge 'list list1 list2 cmp :key key))) + +(defvar yas--before-change-modified-snippets nil) +(make-variable-buffer-local 'yas--before-change-modified-snippets) + +(defun yas--gather-active-snippets (overlay beg end then-delete) + ;; Add active snippets in BEG..END into an OVERLAY keyed entry of + ;; `yas--before-change-modified-snippets'. Return accumulated list. + ;; If THEN-DELETE is non-nil, delete the entry. + (let ((new (yas-active-snippets beg end)) + (old (assq overlay yas--before-change-modified-snippets))) + (prog1 (cond ((and new old) + (setf (cdr old) + (yas--merge-and-drop-dups + (cdr old) new + ;; Sort like `yas-active-snippets'. + #'>= #'yas--snippet-id))) + (new (unless then-delete + ;; Don't add new entry if we're about to + ;; remove it anyway. + (push (cons overlay new) + yas--before-change-modified-snippets)) + new) + (old (cdr old)) + (t nil)) + (when then-delete + (cl-callf2 delq old yas--before-change-modified-snippets))))) + +(defvar yas--todo-snippet-indent nil nil) +(make-variable-buffer-local 'yas--todo-snippet-indent) + +(defun yas--on-field-overlay-modification (overlay after? beg end &optional length) + "Clears the field and updates mirrors, conditionally. + +Only clears the field if it hasn't been modified and point is at +field start. This hook does nothing if an undo is in progress." + (unless (or yas--inhibit-overlay-hooks + (not (overlayp yas--active-field-overlay)) ; Avoid Emacs bug #21824. + ;; If a single change hits multiple overlays of the same + ;; snippet, then we delete the snippet the first time, + ;; and then subsequent calls get a deleted overlay. + ;; Don't delete the snippet again! + (not (overlay-buffer overlay)) + (yas--undo-in-progress)) + (let* ((inhibit-modification-hooks nil) + (yas--inhibit-overlay-hooks t) + (field (overlay-get overlay 'yas--field)) + (snippet (overlay-get yas--active-field-overlay 'yas--snippet))) + (if (yas--snippet-live-p snippet) + (if after? + (save-match-data + (yas--letenv (yas--snippet-expand-env snippet) + (when (yas--skip-and-clear-field-p field beg end length) + ;; We delete text starting from the END of insertion. + (yas--skip-and-clear field end)) + (setf (yas--field-modified-p field) t) + ;; Adjust any pending active fields in case of stacked + ;; expansion. + (let ((pfield field) + (psnippets (yas--gather-active-snippets + overlay beg end t))) + (while (and pfield psnippets) + (let ((psnippet (pop psnippets))) + (cl-assert (memq pfield (yas--snippet-fields psnippet))) + (yas--advance-end-maybe pfield (overlay-end overlay)) + (setq pfield (yas--snippet-previous-active-field psnippet))))) + ;; Update fields now, but delay auto indentation until + ;; post-command. We don't want to run indentation on + ;; the intermediate state where field text might be + ;; removed (and hence the field could be deleted along + ;; with leading indentation). + (let ((yas-indent-line nil)) + (save-excursion + (yas--field-update-display field)) + (yas--update-mirrors snippet)) + (unless (or (not (eq yas-indent-line 'auto)) + (memq snippet yas--todo-snippet-indent)) + (push snippet yas--todo-snippet-indent)))) + ;; Remember active snippets to use for after the change. + (yas--gather-active-snippets overlay beg end nil)) + (lwarn '(yasnippet zombie) :warning "Killing zombie snippet!") + (delete-overlay overlay))))) + +(defun yas--do-todo-snippet-indent () + ;; Do pending indentation of snippet fields, called from + ;; `yas--post-command-handler'. + (when yas--todo-snippet-indent + (save-excursion + (cl-loop for snippet in yas--todo-snippet-indent + do (yas--indent-mirrors-of-snippet + snippet (yas--snippet-field-mirrors snippet))) + (setq yas--todo-snippet-indent nil)))) + +(defun yas--auto-fill () + ;; Preserve snippet markers during auto-fill. + (let* ((orig-point (point)) + (end (progn (forward-paragraph) (point))) + (beg (progn (backward-paragraph) (point))) + (snippets (yas-active-snippets beg end)) + (remarkers nil) + (reoverlays nil)) + (dolist (snippet snippets) + (dolist (m (yas--collect-snippet-markers snippet)) + (when (and (<= beg m) (<= m end)) + (push (cons m (yas--snapshot-location m beg end)) remarkers))) + (push (yas--snapshot-overlay-location + (yas--snippet-control-overlay snippet) beg end) + reoverlays)) + (goto-char orig-point) + (let ((yas--inhibit-overlay-hooks t)) + (if yas--original-auto-fill-function + (funcall yas--original-auto-fill-function) + ;; Shouldn't happen, gather more info about it (see #873/919). + (let ((yas--fill-fun-values `((t ,(default-value 'yas--original-auto-fill-function)))) + (fill-fun-values `((t ,(default-value 'auto-fill-function)))) + ;; Listing 2 buffers with the same value is enough + (print-length 3)) + (save-current-buffer + (dolist (buf (let ((bufs (buffer-list))) + ;; List the current buffer first. + (setq bufs (cons (current-buffer) + (remq (current-buffer) bufs))))) + (set-buffer buf) + (let* ((yf-cell (assq yas--original-auto-fill-function + yas--fill-fun-values)) + (af-cell (assq auto-fill-function fill-fun-values))) + (when (local-variable-p 'yas--original-auto-fill-function) + (if yf-cell (setcdr yf-cell (cons buf (cdr yf-cell))) + (push (list yas--original-auto-fill-function buf) yas--fill-fun-values))) + (when (local-variable-p 'auto-fill-function) + (if af-cell (setcdr af-cell (cons buf (cdr af-cell))) + (push (list auto-fill-function buf) fill-fun-values)))))) + (lwarn '(yasnippet auto-fill bug) :error + "`yas--original-auto-fill-function' unexpectedly nil in %S! Disabling auto-fill. + %S + `auto-fill-function': %S\n%s" + (current-buffer) yas--fill-fun-values fill-fun-values + (if (fboundp 'backtrace--print-frame) + (with-output-to-string + (mapc (lambda (frame) + (apply #'backtrace--print-frame frame)) + yas--watch-auto-fill-backtrace)) + "")) + ;; Try to avoid repeated triggering of this bug. + (auto-fill-mode -1) + ;; Don't pop up more than once in a session (still log though). + (defvar warning-suppress-types) ; `warnings' is autoloaded by `lwarn'. + (add-to-list 'warning-suppress-types '(yasnippet auto-fill bug))))) + (save-excursion + (setq end (progn (forward-paragraph) (point))) + (setq beg (progn (backward-paragraph) (point)))) + (save-excursion + (save-restriction + (narrow-to-region beg end) + (dolist (remarker remarkers) + (set-marker (car remarker) + (yas--goto-saved-location (cdr remarker)))) + (mapc #'yas--restore-overlay-location reoverlays)) + (mapc (lambda (snippet) + (yas--letenv (yas--snippet-expand-env snippet) + (yas--update-mirrors snippet))) + snippets)))) + + +;;; Apropos protection overlays: +;; +;; These exist for nasty users who will try to delete parts of the +;; snippet outside the active field. Actual protection happens in +;; `yas--on-protection-overlay-modification'. +;; +;; As of github #537 this no longer inhibits the command by issuing an +;; error: all the snippets at point, including nested snippets, are +;; automatically commited and the current command can proceed. +;; +(defun yas--make-move-field-protection-overlays (snippet field) + "Place protection overlays surrounding SNIPPET's FIELD. + +Move the overlays, or create them if they do not exit." + (let ((start (yas--field-start field)) + (end (yas--field-end field))) + ;; First check if the (1+ end) is contained in the buffer, + ;; otherwise we'll have to do a bit of cheating and silently + ;; insert a newline. the `(1+ (buffer-size))' should prevent this + ;; when using stacked expansion + ;; + (when (< (buffer-size) end) + (save-excursion + (let ((yas--inhibit-overlay-hooks t)) + (goto-char (point-max)) + (newline)))) + ;; go on to normal overlay creation/moving + ;; + (cond ((and yas--field-protection-overlays + (cl-every #'overlay-buffer yas--field-protection-overlays)) + (move-overlay (nth 0 yas--field-protection-overlays) + (1- start) start) + (move-overlay (nth 1 yas--field-protection-overlays) end (1+ end))) + (t + (setq yas--field-protection-overlays + (list (make-overlay (1- start) start nil t nil) + (make-overlay end (1+ end) nil t nil))) + (dolist (ov yas--field-protection-overlays) + (overlay-put ov 'face 'yas--field-debug-face) + (overlay-put ov 'yas--snippet snippet) + ;; (overlay-put ov 'evaporate t) + (overlay-put ov 'modification-hooks '(yas--on-protection-overlay-modification))))))) + +(defun yas--on-protection-overlay-modification (_overlay after? beg end &optional length) + "Commit the snippet if the protection overlay is being killed." + (unless (or yas--inhibit-overlay-hooks + yas-inhibit-overlay-modification-protection + (not after?) + (= length (- end beg)) ; deletion or insertion + (yas--undo-in-progress)) + (let ((snippets (yas-active-snippets))) + (yas--message 2 "Committing snippets. Action would destroy a protection overlay.") + (cl-loop for snippet in snippets + do (yas--commit-snippet snippet))))) + +(add-to-list 'debug-ignored-errors "^Exit the snippet first!$") + + +;;; Snippet expansion and "stacked" expansion: +;; +;; Stacked expansion is when you try to expand a snippet when already +;; inside a snippet expansion. +;; +;; The parent snippet does not run its fields modification hooks +;; (`yas--on-field-overlay-modification' and +;; `yas--on-protection-overlay-modification') while the child snippet +;; is active. This means, among other things, that the mirrors of the +;; parent snippet are not updated, this only happening when one exits +;; the child snippet. +;; +;; Unfortunately, this also puts some ugly (and not fully-tested) +;; bits of code in `yas-expand-snippet' and +;; `yas--commit-snippet'. I've tried to mark them with "stacked +;; expansion:". +;; +;; This was thought to be safer in an undo/redo perspective, but +;; maybe the correct implementation is to make the globals +;; `yas--active-field-overlay' and `yas--field-protection-overlays' be +;; snippet-local and be active even while the child snippet is +;; running. This would mean a lot of overlay modification hooks +;; running, but if managed correctly (including overlay priorities) +;; they should account for all situations... + +(defun yas-expand-snippet (snippet &optional start end expand-env) + "Expand SNIPPET at current point. + +Text between START and END will be deleted before inserting +template. EXPAND-ENV is a list of (SYM VALUE) let-style dynamic +bindings considered when expanding the snippet. If omitted, use +SNIPPET's expand-env field. + +SNIPPET may be a snippet structure (e.g., as returned by +`yas-lookup-snippet'), or just a snippet body (which is a string +for normal snippets, and a list for command snippets)." + (cl-assert (and yas-minor-mode + (memq 'yas--post-command-handler post-command-hook)) + nil + "[yas] `yas-expand-snippet' needs properly setup `yas-minor-mode'") + (run-hooks 'yas-before-expand-snippet-hook) + + (let* ((clear-field + (let ((field (and yas--active-field-overlay + (overlay-buffer yas--active-field-overlay) + (overlay-get yas--active-field-overlay 'yas--field)))) + (and field (yas--skip-and-clear-field-p + field (point) (point) 0) + field))) + (start (cond (start) + ((region-active-p) + (region-beginning)) + (clear-field + (yas--field-start clear-field)) + (t (point)))) + (end (cond (end) + ((region-active-p) + (region-end)) + (clear-field + (yas--field-end clear-field)) + (t (point)))) + (to-delete (and (> end start) + (buffer-substring-no-properties start end))) + (yas-selected-text + (cond (yas-selected-text) + ((and (region-active-p) + (not clear-field)) + to-delete)))) + (goto-char start) + (setq yas--indent-original-column (current-column)) + ;; Delete the region to delete, this *does* get undo-recorded. + (when to-delete + (delete-region start end)) + + (let ((content (if (yas--template-p snippet) + (yas--template-content snippet) + snippet))) + (when (and (not expand-env) (yas--template-p snippet)) + (setq expand-env (yas--template-expand-env snippet))) + (cond ((listp content) + ;; x) This is a snippet-command. + (yas--eval-for-effect content)) + (t + ;; x) This is a snippet-snippet :-) + (setq yas--start-column (current-column)) + ;; Stacked expansion: also shoosh the overlay modification hooks. + (let ((yas--inhibit-overlay-hooks t)) + (setq snippet + (yas--snippet-create content expand-env start (point)))) + + ;; Stacked-expansion: This checks for stacked expansion, save the + ;; `yas--previous-active-field' and advance its boundary. + (let ((existing-field (and yas--active-field-overlay + (overlay-buffer yas--active-field-overlay) + (overlay-get yas--active-field-overlay 'yas--field)))) + (when existing-field + (setf (yas--snippet-previous-active-field snippet) existing-field) + (yas--advance-end-maybe existing-field (overlay-end yas--active-field-overlay)))) + + ;; Exit the snippet immediately if no fields. + (unless (yas--snippet-fields snippet) + (yas-exit-snippet snippet)) + + ;; Now, schedule a move to the first field. + (let ((first-field (car (yas--snippet-fields snippet)))) + (when first-field + (sit-for 0) ;; fix issue 125 + (yas--letenv (yas--snippet-expand-env snippet) + (yas--move-to-field snippet first-field)) + (when (and (eq (yas--field-number first-field) 0) + (> (length (yas--field-text-for-display + first-field)) + 0)) + ;; Keep region for ${0:exit text}. + (setq deactivate-mark nil)))) + (yas--message 4 "snippet %d expanded." (yas--snippet-id snippet)) + t))))) + +(defun yas--take-care-of-redo (snippet) + "Commits SNIPPET, which in turn pushes an undo action for reviving it. + +Meant to exit in the `buffer-undo-list'." + ;; slightly optimize: this action is only needed for snippets with + ;; at least one field + (when (yas--snippet-fields snippet) + (yas--commit-snippet snippet))) + +(defun yas--snippet-revive (beg end snippet) + "Revives SNIPPET and creates a control overlay from BEG to END. + +BEG and END are, we hope, the original snippets boundaries. +All the markers/points exiting existing inside SNIPPET should point +to their correct locations *at the time the snippet is revived*. + +After revival, push the `yas--take-care-of-redo' in the +`buffer-undo-list'" + ;; Reconvert all the points to markers + (yas--points-to-markers snippet) + ;; When at least one editable field existed in the zombie snippet, + ;; try to revive the whole thing... + (when (yas--maybe-move-to-active-field snippet) + (setf (yas--snippet-control-overlay snippet) (yas--make-control-overlay snippet beg end)) + (overlay-put (yas--snippet-control-overlay snippet) 'yas--snippet snippet) + (push snippet yas--active-snippets) + (when (listp buffer-undo-list) + (push `(apply yas--take-care-of-redo ,snippet) + buffer-undo-list)))) + +(defun yas--snippet-create (content expand-env begin end) + "Create a snippet from a template inserted at BEGIN to END. + +Returns the newly created snippet." + (save-restriction + (let ((snippet (yas--make-snippet expand-env))) + (yas--letenv expand-env + ;; Put a single undo action for the expanded snippet's + ;; content. + (let ((buffer-undo-list t) + (inhibit-modification-hooks t)) + ;; Some versions of cc-mode fail when inserting snippet + ;; content in a narrowed buffer, so make sure to insert + ;; before narrowing. Furthermore, call before and after + ;; change functions manually, otherwise cc-mode's cache can + ;; get messed up. + (goto-char begin) + (run-hook-with-args 'before-change-functions begin begin) + (insert content) + (setq end (+ end (length content))) + (narrow-to-region begin end) + (goto-char (point-min)) + (yas--snippet-parse-create snippet) + (run-hook-with-args 'after-change-functions (point-min) (point-max) 0)) + (when (listp buffer-undo-list) + (push (cons (point-min) (point-max)) + buffer-undo-list)) + + ;; Indent, collecting undo information normally. + (yas--indent snippet) + + ;; Follow up with `yas--take-care-of-redo' on the newly + ;; inserted snippet boundaries. + (when (listp buffer-undo-list) + (push `(apply yas--take-care-of-redo ,snippet) + buffer-undo-list)) + + ;; Sort and link each field + (yas--snippet-sort-fields snippet) + + ;; Create keymap overlay for snippet + (setf (yas--snippet-control-overlay snippet) + (yas--make-control-overlay snippet (point-min) (point-max))) + + ;; Move to end + (goto-char (point-max)) + + (push snippet yas--active-snippets) + snippet)))) + + +;;; Apropos adjacencies and "fom's": +;; +;; Once the $-constructs bits like "$n" and "${:n" are deleted in the +;; recently expanded snippet, we might actually have many fields, +;; mirrors (and the snippet exit) in the very same position in the +;; buffer. Therefore we need to single-link the +;; fields-or-mirrors-or-exit (which I have abbreviated to "fom") +;; according to their original positions in the buffer. +;; +;; Then we have operation `yas--advance-end-maybe' and +;; `yas--advance-start-maybe', which conditionally push the starts and +;; ends of these foms down the chain. +;; +;; This allows for like the printf with the magic ",": +;; +;; printf ("${1:%s}\\n"${1:$(if (string-match "%" text) "," "\);")} \ +;; $2${1:$(if (string-match "%" text) "\);" "")}$0 +;; +(defun yas--fom-start (fom) + (cond ((yas--field-p fom) + (yas--field-start fom)) + ((yas--mirror-p fom) + (yas--mirror-start fom)) + (t + (yas--exit-marker fom)))) + +(defun yas--fom-end (fom) + (cond ((yas--field-p fom) + (yas--field-end fom)) + ((yas--mirror-p fom) + (yas--mirror-end fom)) + (t + (yas--exit-marker fom)))) + +(defun yas--fom-next (fom) + (cond ((yas--field-p fom) + (yas--field-next fom)) + ((yas--mirror-p fom) + (yas--mirror-next fom)) + (t + (yas--exit-next fom)))) + +(defun yas--fom-parent-field (fom) + (cond ((yas--field-p fom) + (yas--field-parent-field fom)) + ((yas--mirror-p fom) + (yas--mirror-parent-field fom)) + (t + nil))) + +(defun yas--calculate-adjacencies (snippet) + "Calculate adjacencies for fields or mirrors of SNIPPET. + +This is according to their relative positions in the buffer, and +has to be called before the $-constructs are deleted." + (let* ((fom-set-next-fom + (lambda (fom nextfom) + (cond ((yas--field-p fom) + (setf (yas--field-next fom) nextfom)) + ((yas--mirror-p fom) + (setf (yas--mirror-next fom) nextfom)) + (t + (setf (yas--exit-next fom) nextfom))))) + (compare-fom-begs + (lambda (fom1 fom2) + (if (= (yas--fom-start fom2) (yas--fom-start fom1)) + (yas--mirror-p fom2) + (>= (yas--fom-start fom2) (yas--fom-start fom1))))) + (link-foms fom-set-next-fom)) + ;; make some yas--field, yas--mirror and yas--exit soup + (let ((soup)) + (when (yas--snippet-exit snippet) + (push (yas--snippet-exit snippet) soup)) + (dolist (field (yas--snippet-fields snippet)) + (push field soup) + (dolist (mirror (yas--field-mirrors field)) + (push mirror soup))) + (setq soup + (sort soup compare-fom-begs)) + (when soup + (cl-reduce link-foms soup))))) + +(defun yas--calculate-simple-fom-parentage (snippet fom) + "Discover if FOM is parented by some field in SNIPPET. + +Use the tightest containing field if more than one field contains +the mirror. Intended to be called *before* the dollar-regions are +deleted." + (let ((min (point-min)) + (max (point-max))) + (dolist (field (remq fom (yas--snippet-fields snippet))) + (when (and (<= (yas--field-start field) (yas--fom-start fom)) + (<= (yas--fom-end fom) (yas--field-end field)) + (< min (yas--field-start field)) + (< (yas--field-end field) max)) + (setq min (yas--field-start field) + max (yas--field-end field)) + (cond ((yas--field-p fom) + (setf (yas--field-parent-field fom) field)) + ((yas--mirror-p fom) + (setf (yas--mirror-parent-field fom) field)) + (t ; it's an exit, so noop + nil )))))) + +(defun yas--advance-end-maybe (fom newend) + "Maybe advance FOM's end to NEWEND if it needs it. + +If it does, also: + +* call `yas--advance-start-maybe' on FOM's next fom. + +* in case FOM is field call `yas--advance-end-maybe' on its parent + field + +Also, if FOM is an exit-marker, always call +`yas--advance-start-maybe' on its next fom. This is because +exit-marker have identical start and end markers." + (cond ((and fom (< (yas--fom-end fom) newend)) + (set-marker (yas--fom-end fom) newend) + (yas--advance-start-maybe (yas--fom-next fom) newend) + (yas--advance-end-of-parents-maybe (yas--fom-parent-field fom) newend)) + ((yas--exit-p fom) + (yas--advance-start-maybe (yas--fom-next fom) newend)))) + +(defun yas--advance-start-maybe (fom newstart) + "Maybe advance FOM's start to NEWSTART if it needs it. + +If it does, also call `yas--advance-end-maybe' on FOM." + (when (and fom (< (yas--fom-start fom) newstart)) + (set-marker (yas--fom-start fom) newstart) + (yas--advance-end-maybe fom newstart))) + +(defun yas--advance-end-of-parents-maybe (field newend) + "Like `yas--advance-end-maybe' but for parent fields. + +Only works for fields and doesn't care about the start of the +next FOM. Works its way up recursively for parents of parents." + (when (and field + (< (yas--field-end field) newend)) + (set-marker (yas--field-end field) newend) + (yas--advance-end-of-parents-maybe (yas--field-parent-field field) newend))) + +(defvar yas--dollar-regions nil + "When expanding the snippet the \"parse-create\" functions add +cons cells to this var.") + +(defvar yas--indent-markers nil + "List of markers for manual indentation.") + +(defun yas--snippet-parse-create (snippet) + "Parse a recently inserted snippet template, creating all +necessary fields, mirrors and exit points. + +Meant to be called in a narrowed buffer, does various passes" + (let ((saved-quotes nil) + (parse-start (point))) + ;; Avoid major-mode's syntax propertizing function, since we + ;; change the syntax-table while calling `scan-sexps'. + (let ((syntax-propertize-function nil)) + (setq yas--dollar-regions nil) ; Reset the yas--dollar-regions. + (yas--protect-escapes nil '(?`)) ; Protect just the backquotes. + (goto-char parse-start) + (setq saved-quotes (yas--save-backquotes)) ; `expressions`. + (yas--protect-escapes) ; Protect escaped characters. + (goto-char parse-start) + (yas--indent-parse-create) ; Parse indent markers: `$>'. + (goto-char parse-start) + (yas--field-parse-create snippet) ; Parse fields with {}. + (goto-char parse-start) + (yas--simple-fom-create snippet) ; Parse simple mirrors & fields. + (goto-char parse-start) + (yas--transform-mirror-parse-create snippet) ; Parse mirror transforms. + ;; Invalidate any syntax-propertizing done while + ;; `syntax-propertize-function' was nil. + (syntax-ppss-flush-cache parse-start)) + ;; Set "next" links of fields & mirrors. + (yas--calculate-adjacencies snippet) + (yas--save-restriction-and-widen ; Delete $-constructs. + (yas--delete-regions yas--dollar-regions)) + ;; Make sure to do this insertion *after* deleting the dollar + ;; regions, otherwise we invalidate the calculated positions of + ;; all the fields following $0. + (let ((exit (yas--snippet-exit snippet))) + (goto-char (if exit (yas--exit-marker exit) (point-max)))) + (when (eq yas-wrap-around-region 'cua) + (setq yas-wrap-around-region ?0)) + (cond ((and yas-wrap-around-region yas-selected-text) + (insert yas-selected-text)) + ((and (characterp yas-wrap-around-region) + (get-register yas-wrap-around-region)) + (insert (prog1 (get-register yas-wrap-around-region) + (set-register yas-wrap-around-region nil))))) + (yas--restore-backquotes saved-quotes) ; Restore `expression` values. + (goto-char parse-start) + (yas--restore-escapes) ; Restore escapes. + (yas--update-mirrors snippet) ; Update mirrors for the first time. + (goto-char parse-start))) + +;; HACK: Some implementations of `indent-line-function' (called via +;; `indent-according-to-mode') delete text before they insert (like +;; cc-mode), some make complicated regexp replacements (looking at +;; you, org-mode). To find place where the marker "should" go after +;; indentation, we create a regexp based on what the line looks like +;; before, putting a capture group where the marker is. The regexp +;; matches any whitespace with [[:space:]]* to allow for the +;; indentation changing whitespace. Additionally, we try to preserve +;; the amount of whitespace *following* the marker, because +;; indentation generally affects whitespace at the beginning, not the +;; end. +;; +;; Two other cases where we apply a similar strategy: +;; +;; 1. Handling `auto-fill-mode', in this case we need to use the +;; current paragraph instead of line. +;; +;; 2. Moving snippets from an `org-src' temp buffer into the main org +;; buffer, in this case we need to count the relative line number +;; (because org may add indentation on each line making character +;; positions unreliable). +;; +;; Data formats: +;; (LOCATION) = (REGEXP WS-COUNT) +;; MARKER -> (MARKER . (LOCATION)) +;; OVERLAY -> (OVERLAY LOCATION-BEG LOCATION-END) +;; +;; For `org-src' temp buffer, add a line number to format: +;; (LINE-LOCATION) = (LINE . (LOCATION)) +;; MARKER@LINE -> (MARKER . (LINE-LOCATION)) +;; OVERLAY@LINE -> (OVERLAY LINE-LOCATION-BEG LINE-LOCATION-END) +;; +;; This is all best-effort heuristic stuff, but it should cover 99% of +;; use-cases. + +(defun yas--snapshot-location (position &optional beg end) + "Returns info for restoring POSITIONS's location after indent. +The returned value is a list of the form (REGEXP WS-COUNT). +POSITION may be either a marker or just a buffer position. The +REGEXP matches text between BEG..END which default to the current +line if omitted." + (goto-char position) + (unless beg (setq beg (line-beginning-position))) + (unless end (setq end (line-end-position))) + (let ((before (split-string (buffer-substring-no-properties beg position) + "[[:space:]\n]+" t)) + (after (split-string (buffer-substring-no-properties position end) + "[[:space:]\n]+" t))) + (list (concat "[[:space:]\n]*" + (mapconcat (lambda (s) + (if (eq s position) "\\(\\)" + (regexp-quote s))) + (nconc before (list position) after) + "[[:space:]\n]*")) + (progn (skip-chars-forward "[:space:]\n" end) + (- (point) position))))) + +(defun yas--snapshot-line-location (position &optional beg end) + "Like `yas--snapshot-location', but return also line number. +Returned format is (LINE REGEXP WS-COUNT)." + (goto-char position) + (cons (count-lines (point-min) (line-beginning-position)) + (yas--snapshot-location position beg end))) + +(defun yas--snapshot-overlay-location (overlay beg end) + "Like `yas--snapshot-location' for overlays. +The returned format is (OVERLAY (RE WS) (RE WS)). Either of +the (RE WS) lists may be nil if the start or end, respectively, +of the overlay is outside the range BEG .. END." + (let ((obeg (overlay-start overlay)) + (oend (overlay-end overlay))) + (list overlay + (when (and (<= beg obeg) (< obeg end)) + (yas--snapshot-location obeg beg end)) + (when (and (<= beg oend) (< oend end)) + (yas--snapshot-location oend beg end))))) + +(defun yas--snapshot-overlay-line-location (overlay) + "Return info for restoring OVERLAY's line based location. +The returned format is (OVERLAY (LINE RE WS) (LINE RE WS))." + (list overlay + (yas--snapshot-line-location (overlay-start overlay)) + (yas--snapshot-line-location (overlay-end overlay)))) + +(defun yas--goto-saved-location (re-count) + "Move to and return point saved by `yas--snapshot-location'. +Buffer must be narrowed to BEG..END used to create the snapshot info." + (let ((regexp (pop re-count)) + (ws-count (pop re-count))) + (goto-char (point-min)) + (if (not (looking-at regexp)) + (lwarn '(yasnippet re-marker) :warning + "Couldn't find: %S" regexp) + (goto-char (match-beginning 1)) + (skip-chars-forward "[:space:]\n") + (skip-chars-backward "[:space:]\n" (- (point) ws-count))) + (point))) + +(defun yas--restore-overlay-location (ov-locations) + "Restores marker based on info from `yas--snapshot-overlay-location'. +Buffer must be narrowed to BEG..END used to create the snapshot info." + (cl-destructuring-bind (overlay loc-beg loc-end) ov-locations + (move-overlay overlay + (if (not loc-beg) (overlay-start overlay) + (yas--goto-saved-location loc-beg)) + (if (not loc-end) (overlay-end overlay) + (yas--goto-saved-location loc-end))))) + +(defun yas--goto-saved-line-location (base-pos l-re-count) + "Move to and return point saved by `yas--snapshot-line-location'. +Additionally requires BASE-POS to tell where the line numbers are +relative to." + (goto-char base-pos) + (forward-line (pop l-re-count)) + (save-restriction + (narrow-to-region (line-beginning-position) + (line-end-position)) + (yas--goto-saved-location l-re-count))) + +(defun yas--restore-overlay-line-location (base-pos ov-locations) + "Restores marker based on info from `yas--snapshot-overlay-line-location'." + (cl-destructuring-bind (overlay beg-l-r-w end-l-r-w) + ov-locations + (move-overlay overlay + (yas--goto-saved-line-location base-pos beg-l-r-w) + (yas--goto-saved-line-location base-pos end-l-r-w)))) + +(defun yas--indent-region (from to snippet) + "Indent the lines between FROM and TO with `indent-according-to-mode'. +The SNIPPET's markers are preserved." + (save-excursion + (yas--save-restriction-and-widen + (let* ((snippet-markers (yas--collect-snippet-markers snippet)) + (to (set-marker (make-marker) to))) + (goto-char from) + (cl-loop for bol = (line-beginning-position) + for eol = (line-end-position) + if (or yas-also-indent-empty-lines + (/= bol eol)) + do + ;; Indent each non-empty line. + (let ((remarkers nil)) + (dolist (m snippet-markers) + (when (and (<= bol m) (<= m eol)) + (push (cons m (yas--snapshot-location m bol eol)) + remarkers))) + (unwind-protect + (progn (back-to-indentation) + (indent-according-to-mode)) + (save-restriction + (narrow-to-region bol (line-end-position)) + (dolist (remarker remarkers) + (set-marker (car remarker) + (yas--goto-saved-location (cdr remarker))))))) + while (and (zerop (forward-line 1)) + (< (point) to))))))) + +(defvar yas--indent-original-column nil) +(defun yas--indent (snippet) + ;; Indent lines that had indent markers (`$>') on them. + (save-excursion + (dolist (marker yas--indent-markers) + (unless (eq yas-indent-line 'auto) + (goto-char marker) + (yas--indent-region (line-beginning-position) + (line-end-position) + snippet)) + ;; Finished with this marker. + (set-marker marker nil)) + (setq yas--indent-markers nil)) + ;; Now do stuff for `fixed' and `auto'. + (save-excursion + ;; We need to be at end of line, so that `forward-line' will only + ;; report 0 if it actually moves over a newline. + (end-of-line) + (cond ((eq yas-indent-line 'fixed) + (when (= (forward-line 1) 0) + (let ((indent-line-function + (lambda () + ;; We need to be at beginning of line in order to + ;; indent existing whitespace correctly. + (beginning-of-line) + (indent-to-column yas--indent-original-column)))) + (yas--indent-region (line-beginning-position) + (point-max) + snippet)))) + ((eq yas-indent-line 'auto) + (when (or yas-also-auto-indent-first-line + (= (forward-line 1) 0)) + (yas--indent-region (line-beginning-position) + (point-max) + snippet)))))) + +(defun yas--collect-snippet-markers (snippet) + "Make a list of all the markers used by SNIPPET." + (let (markers) + (yas--snippet-map-markers (lambda (m) (push m markers) m) snippet) + markers)) + +(defun yas--escape-string (escaped) + (concat "YASESCAPE" (format "%d" escaped) "PROTECTGUARD")) + +(defun yas--protect-escapes (&optional text escaped) + "Protect all escaped characters with their numeric ASCII value. + +With optional string TEXT do it in string instead of buffer." + (let ((changed-text text) + (text-provided-p text)) + (mapc #'(lambda (escaped) + (setq changed-text + (yas--replace-all (concat "\\" (char-to-string escaped)) + (yas--escape-string escaped) + (when text-provided-p changed-text)))) + (or escaped yas--escaped-characters)) + changed-text)) + +(defun yas--restore-escapes (&optional text escaped) + "Restore all escaped characters from their numeric ASCII value. + +With optional string TEXT do it in string instead of the buffer." + (let ((changed-text text) + (text-provided-p text)) + (mapc #'(lambda (escaped) + (setq changed-text + (yas--replace-all (yas--escape-string escaped) + (char-to-string escaped) + (when text-provided-p changed-text)))) + (or escaped yas--escaped-characters)) + changed-text)) + +(defun yas--save-backquotes () + "Save all \"\\=`(lisp-expression)\\=`\"-style expressions. +Return a list of (MARKER . STRING) entires for each backquoted +Lisp expression." + (let* ((saved-quotes nil) + (yas--snippet-buffer (current-buffer)) + (yas--change-detected nil) + (detect-change (lambda (_beg _end) + (when (eq (current-buffer) yas--snippet-buffer) + (setq yas--change-detected t))))) + (while (re-search-forward yas--backquote-lisp-expression-regexp nil t) + (let ((current-string (match-string-no-properties 1)) transformed) + (yas--save-restriction-and-widen + (delete-region (match-beginning 0) (match-end 0))) + (let ((before-change-functions + (cons detect-change before-change-functions))) + (setq transformed (yas--eval-for-string (yas--read-lisp + (yas--restore-escapes + current-string '(?`)))))) + (goto-char (match-beginning 0)) + (when transformed + (let ((marker (make-marker))) + (yas--save-restriction-and-widen + (insert "Y") ;; quite horrendous, I love it :) + (set-marker marker (point)) + (insert "Y")) + (push (cons marker transformed) saved-quotes))))) + (when yas--change-detected + (lwarn '(yasnippet backquote-change) :warning + "`%s' modified buffer in a backquote expression. + To hide this warning, add (yasnippet backquote-change) to `warning-suppress-types'." + (if yas--current-template + (yas--template-name yas--current-template) + "Snippet"))) + saved-quotes)) + +(defun yas--restore-backquotes (saved-quotes) + "Replace markers in SAVED-QUOTES with their values. +SAVED-QUOTES is the in format returned by `yas--save-backquotes'." + (cl-loop for (marker . string) in saved-quotes do + (save-excursion + (goto-char marker) + (yas--save-restriction-and-widen + (delete-char -1) + (insert string) + (delete-char 1)) + (set-marker marker nil)))) + +(defun yas--scan-sexps (from count) + (ignore-errors + (save-match-data ; `scan-sexps' may modify match data. + ;; Parse using the syntax table corresponding to the yasnippet syntax. + (with-syntax-table (standard-syntax-table) + ;; And ignore syntax-table properties that may have been placed by the + ;; major mode since these aren't related to the yasnippet syntax. + (let ((parse-sexp-lookup-properties nil)) + (scan-sexps from count)))))) + +(defun yas--make-marker (pos) + "Create a marker at POS with nil `marker-insertion-type'." + (let ((marker (set-marker (make-marker) pos))) + (set-marker-insertion-type marker nil) + marker)) + +(defun yas--indent-parse-create () + "Parse the \"$>\" indentation markers just inserted." + (setq yas--indent-markers ()) + (while (search-forward "$>" nil t) + (delete-region (match-beginning 0) (match-end 0)) + ;; Mark the beginning of the line. + (push (yas--make-marker (line-beginning-position)) + yas--indent-markers)) + (setq yas--indent-markers (nreverse yas--indent-markers))) + +(defun yas--field-parse-create (snippet &optional parent-field) + "Parse most field expressions in SNIPPET, except for the simple one \"$n\". + +The following count as a field: + +* \"${n: text}\", for a numbered field with default text, as long as N is not 0; + +* \"${n: text$(expression)}, the same with a Lisp expression; + this is caught with the curiously named `yas--multi-dollar-lisp-expression-regexp' + +* the same as above but unnumbered, (no N:) and number is calculated automatically. + +When multiple expressions are found, only the last one counts." + ;; + (save-excursion + (while (re-search-forward yas--field-regexp nil t) + (let* ((brace-scan (yas--scan-sexps (1+ (match-beginning 0)) 1)) + ;; if the `brace-scan' didn't reach a brace, we have a + ;; snippet with invalid escaping, probably a closing + ;; brace escaped with two backslashes (github#979). But + ;; be lenient, because we can. + (real-match-end-0 (if (eq ?} (char-before brace-scan)) + brace-scan + (point))) + (number (and (match-string-no-properties 1) + (string-to-number (match-string-no-properties 1)))) + (brand-new-field (and real-match-end-0 + ;; break if on "$(" immediately + ;; after the ":", this will be + ;; caught as a mirror with + ;; transform later. + (not (string-match-p "\\`\\$[ \t\n]*(" + (match-string-no-properties 2))) + ;; allow ${0: some exit text} + ;; (not (and number (zerop number))) + (yas--make-field number + (yas--make-marker (match-beginning 2)) + (yas--make-marker (1- real-match-end-0)) + parent-field)))) + (when brand-new-field + (goto-char real-match-end-0) + (push (cons (1- real-match-end-0) real-match-end-0) + yas--dollar-regions) + (push (cons (match-beginning 0) (match-beginning 2)) + yas--dollar-regions) + (push brand-new-field (yas--snippet-fields snippet)) + (save-excursion + (save-restriction + (narrow-to-region (yas--field-start brand-new-field) (yas--field-end brand-new-field)) + (goto-char (point-min)) + (yas--field-parse-create snippet brand-new-field))))))) + ;; if we entered from a parent field, now search for the + ;; `yas--multi-dollar-lisp-expression-regexp'. This is used for + ;; primary field transformations + ;; + (when parent-field + (save-excursion + (while (re-search-forward yas--multi-dollar-lisp-expression-regexp nil t) + (let* ((real-match-end-1 (yas--scan-sexps (match-beginning 1) 1))) + ;; commit the primary field transformation if: + ;; + ;; 1. we don't find it in yas--dollar-regions (a subnested + ;; field) might have already caught it. + ;; + ;; 2. we really make sure we have either two '$' or some + ;; text and a '$' after the colon ':'. This is a FIXME: work + ;; my regular expressions and end these ugly hacks. + ;; + (when (and real-match-end-1 + (not (member (cons (match-beginning 0) + real-match-end-1) + yas--dollar-regions)) + (not (eq ?: + (char-before (1- (match-beginning 1)))))) + (let ((lisp-expression-string (buffer-substring-no-properties (match-beginning 1) + real-match-end-1))) + (setf (yas--field-transform parent-field) + (yas--read-lisp (yas--restore-escapes lisp-expression-string)))) + (push (cons (match-beginning 0) real-match-end-1) + yas--dollar-regions))))))) + +(defun yas--transform-mirror-parse-create (snippet) + "Parse the \"${n:$(lisp-expression)}\" mirror transformations in SNIPPET." + (while (re-search-forward yas--transform-mirror-regexp nil t) + (let* ((real-match-end-0 (yas--scan-sexps (1+ (match-beginning 0)) 1)) + (number (string-to-number (match-string-no-properties 1))) + (field (and number + (not (zerop number)) + (yas--snippet-find-field snippet number))) + (brand-new-mirror + (and real-match-end-0 + field + (yas--make-mirror (yas--make-marker (match-beginning 0)) + (yas--make-marker (match-beginning 0)) + (yas--read-lisp + (yas--restore-escapes + (buffer-substring-no-properties (match-beginning 2) + (1- real-match-end-0)))))))) + (when brand-new-mirror + (push brand-new-mirror + (yas--field-mirrors field)) + (yas--calculate-simple-fom-parentage snippet brand-new-mirror) + (push (cons (match-beginning 0) real-match-end-0) yas--dollar-regions))))) + +(defun yas--simple-fom-create (snippet) + "Parse the simple \"$n\" fields/mirrors/exitmarkers in SNIPPET." + (while (re-search-forward yas--simple-mirror-regexp nil t) + (let ((number (string-to-number (match-string-no-properties 1)))) + (cond ((zerop number) + (setf (yas--snippet-exit snippet) + (yas--make-exit (yas--make-marker (match-end 0)))) + (push (cons (match-beginning 0) (yas--exit-marker (yas--snippet-exit snippet))) + yas--dollar-regions)) + (t + (let ((field (yas--snippet-find-field snippet number)) + (fom)) + (if field + (push + (setq fom (yas--make-mirror + (yas--make-marker (match-beginning 0)) + (yas--make-marker (match-beginning 0)) + nil)) + (yas--field-mirrors field)) + (push + (setq fom (yas--make-field number + (yas--make-marker (match-beginning 0)) + (yas--make-marker (match-beginning 0)) + nil)) + (yas--snippet-fields snippet))) + (yas--calculate-simple-fom-parentage snippet fom)) + (push (cons (match-beginning 0) (match-end 0)) + yas--dollar-regions)))))) + +(defun yas--delete-regions (regions) + "Sort disjuct REGIONS by start point, then delete from the back." + (mapc #'(lambda (reg) + (delete-region (car reg) (cdr reg))) + (sort regions + #'(lambda (r1 r2) + (>= (car r1) (car r2)))))) + +(defun yas--calculate-mirror-depth (mirror &optional traversed) + (let* ((parent (yas--mirror-parent-field mirror)) + (parents-mirrors (and parent + (yas--field-mirrors parent)))) + (or (yas--mirror-depth mirror) + (setf (yas--mirror-depth mirror) + (cond ((memq mirror traversed) 0) + ((and parent parents-mirrors) + (1+ (cl-reduce + #'max parents-mirrors + :key (lambda (m) + (yas--calculate-mirror-depth + m (cons mirror traversed)))))) + (parent 1) + (t 0)))))) + +(defun yas--snippet-field-mirrors (snippet) + ;; Make a list of (FIELD . MIRROR). + (cl-sort + (cl-mapcan (lambda (field) + (mapcar (lambda (mirror) + (cons field mirror)) + (yas--field-mirrors field))) + (yas--snippet-fields snippet)) + ;; Then sort this list so that entries with mirrors with + ;; parent fields appear before. This was important for + ;; fixing #290, and also handles the case where a mirror in + ;; a field causes another mirror to need reupdating. + #'> :key (lambda (fm) (yas--calculate-mirror-depth (cdr fm))))) + +(defun yas--indent-mirrors-of-snippet (snippet &optional f-ms) + ;; Indent mirrors of SNIPPET. F-MS is the return value of + ;; (yas--snippet-field-mirrors SNIPPET). + (when (eq yas-indent-line 'auto) + (let ((yas--inhibit-overlay-hooks t)) + (cl-loop for (beg . end) in + (cl-sort (mapcar (lambda (f-m) + (let ((mirror (cdr f-m))) + (cons (yas--mirror-start mirror) + (yas--mirror-end mirror)))) + (or f-ms + (yas--snippet-field-mirrors snippet))) + #'< :key #'car) + do (yas--indent-region beg end snippet))))) + +(defun yas--update-mirrors (snippet) + "Update all the mirrors of SNIPPET." + (yas--save-restriction-and-widen + (save-excursion + (let ((f-ms (yas--snippet-field-mirrors snippet))) + (cl-loop + for (field . mirror) in f-ms + ;; Before updating a mirror with a parent-field, maybe advance + ;; its start (#290). + do (let ((parent-field (yas--mirror-parent-field mirror))) + (when parent-field + (yas--advance-start-maybe mirror (yas--fom-start parent-field)))) + ;; Update this mirror. + do (yas--mirror-update-display mirror field) + ;; `yas--place-overlays' is needed since the active field and + ;; protected overlays might have been changed because of insertions + ;; in `yas--mirror-update-display'. + do (let ((active-field (yas--snippet-active-field snippet))) + (when active-field (yas--place-overlays snippet active-field)))) + ;; Delay indenting until we're done all mirrors. We must do + ;; this to avoid losing whitespace between fields that are + ;; still empty (i.e., they will be non-empty after updating). + (yas--indent-mirrors-of-snippet snippet f-ms))))) + +(defun yas--mirror-update-display (mirror field) + "Update MIRROR according to FIELD (and mirror transform)." + + (let* ((mirror-parent-field (yas--mirror-parent-field mirror)) + (reflection (and (not (and mirror-parent-field + (yas--field-modified-p mirror-parent-field))) + (or (yas--apply-transform mirror field 'empty-on-nil) + (yas--field-text-for-display field))))) + (when (and reflection + (not (string= reflection (buffer-substring-no-properties (yas--mirror-start mirror) + (yas--mirror-end mirror))))) + (goto-char (yas--mirror-start mirror)) + (let ((yas--inhibit-overlay-hooks t)) + (insert reflection)) + (if (> (yas--mirror-end mirror) (point)) + (delete-region (point) (yas--mirror-end mirror)) + (set-marker (yas--mirror-end mirror) (point)) + (yas--advance-start-maybe (yas--mirror-next mirror) (point)) + ;; super-special advance + (yas--advance-end-of-parents-maybe mirror-parent-field (point)))))) + +(defun yas--field-update-display (field) + "Much like `yas--mirror-update-display', but for fields." + (when (yas--field-transform field) + (let ((transformed (and (not (eq (yas--field-number field) 0)) + (yas--apply-transform field field)))) + (when (and transformed + (not (string= transformed (buffer-substring-no-properties (yas--field-start field) + (yas--field-end field))))) + (setf (yas--field-modified-p field) t) + (goto-char (yas--field-start field)) + (let ((yas--inhibit-overlay-hooks t)) + (insert transformed) + (if (> (yas--field-end field) (point)) + (delete-region (point) (yas--field-end field)) + (set-marker (yas--field-end field) (point)) + (yas--advance-start-maybe (yas--field-next field) (point))) + t))))) + + +;;; Post-command hook: +;; +(defun yas--post-command-handler () + "Handles various yasnippet conditions after each command." + (when (and yas--watch-auto-fill-backtrace + (fboundp 'backtrace--print-frame) + (null yas--original-auto-fill-function) + (eq auto-fill-function 'yas--auto-fill)) + (lwarn '(yasnippet auto-fill bug) :error + "`yas--original-auto-fill-function' unexpectedly nil! Please report this backtrace\n%S" + (with-output-to-string + (mapc #'backtrace--print-frame + yas--watch-auto-fill-backtrace))) + ;; Don't pop up more than once in a session (still log though). + (defvar warning-suppress-types) ; `warnings' is autoloaded by `lwarn'. + (add-to-list 'warning-suppress-types '(yasnippet auto-fill bug))) + (yas--do-todo-snippet-indent) + (condition-case err + (progn (yas--finish-moving-snippets) + (cond ((eq 'undo this-command) + ;; + ;; After undo revival the correct field is sometimes not + ;; restored correctly, this condition handles that + ;; + (let* ((snippet (car (yas-active-snippets))) + (target-field + (and snippet + (cl-find-if-not + (lambda (field) + (yas--field-probably-deleted-p snippet field)) + (remq nil + (cons (yas--snippet-active-field snippet) + (yas--snippet-fields snippet))))))) + (when target-field + (yas--move-to-field snippet target-field)))) + ((not (yas--undo-in-progress)) + ;; When not in an undo, check if we must commit the snippet + ;; (user exited it). + (yas--check-commit-snippet)))) + ((debug error) (signal (car err) (cdr err))))) + +;;; Fancy docs: +;; +;; The docstrings for some functions are generated dynamically +;; depending on the context. +;; +(put 'yas-expand 'function-documentation + '(yas--expand-from-trigger-key-doc t)) +(defun yas--expand-from-trigger-key-doc (context) + "A doc synthesizer for `yas--expand-from-trigger-key-doc'." + (let* ((yas-fallback-behavior (and context yas-fallback-behavior)) + (fallback-description + (cond ((eq yas-fallback-behavior 'call-other-command) + (let* ((fallback (yas--keybinding-beyond-yasnippet))) + (or (and fallback + (format "call command `%s'." + (pp-to-string fallback))) + "do nothing (`yas-expand' doesn't override\nanything)."))) + ((eq yas-fallback-behavior 'return-nil) + "do nothing.") + (t "defer to `yas-fallback-behavior' (which see).")))) + (concat "Expand a snippet before point. If no snippet +expansion is possible, " + fallback-description + "\n\nOptional argument FIELD is for non-interactive use and is an +object satisfying `yas--field-p' to restrict the expansion to."))) + +(put 'yas-expand-from-keymap 'function-documentation + '(yas--expand-from-keymap-doc t)) +(defun yas--expand-from-keymap-doc (context) + "A doc synthesizer for `yas--expand-from-keymap-doc'." + (add-hook 'temp-buffer-show-hook #'yas--snippet-description-finish-runonce) + (concat "Expand/run snippets from keymaps, possibly falling back to original binding.\n" + (when (and context (eq this-command 'describe-key)) + (let* ((vec (this-single-command-keys)) + (templates (cl-mapcan (lambda (table) + (yas--fetch table vec)) + (yas--get-snippet-tables))) + (yas--direct-keymaps nil) + (fallback (key-binding vec))) + (concat "In this case, " + (when templates + (concat "these snippets are bound to this key:\n" + (yas--template-pretty-list templates) + "\n\nIf none of these expands, ")) + (or (and fallback + (format "fallback `%s' will be called." (pp-to-string fallback))) + "no fallback keybinding is called.")))))) + +(defun yas--template-pretty-list (templates) + (let ((acc) + (yas-buffer-local-condition 'always)) + (dolist (plate templates) + (setq acc (concat acc "\n*) " + (propertize (concat "\\\\snippet `" (car plate) "'") + 'yasnippet (cdr plate))))) + acc)) + +(define-button-type 'help-snippet-def + :supertype 'help-xref + 'help-function (lambda (template) (yas--visit-snippet-file-1 template)) + 'help-echo (purecopy "mouse-2, RET: find snippets's definition")) + +(defun yas--snippet-description-finish-runonce () + "Final adjustments for the help buffer when snippets are concerned." + (yas--create-snippet-xrefs) + (remove-hook 'temp-buffer-show-hook + #'yas--snippet-description-finish-runonce)) + +(defun yas--create-snippet-xrefs () + (save-excursion + (goto-char (point-min)) + (while (search-forward-regexp "\\\\\\\\snippet[ \s\t]+`\\([^']+\\)'" nil t) + (let ((template (get-text-property (match-beginning 1) + 'yasnippet))) + (when template + (help-xref-button 1 'help-snippet-def template) + (delete-region (match-end 1) (match-end 0)) + (delete-region (match-beginning 0) (match-beginning 1))))))) + +;;; Eldoc configuration. +(eldoc-add-command 'yas-next-field-or-maybe-expand + 'yas-next-field 'yas-prev-field + 'yas-expand 'yas-expand-from-keymap + 'yas-expand-from-trigger-key) + +;;; Utils + +(defvar yas-verbosity 3 + "Log level for `yas--message' 4 means trace most anything, 0 means nothing.") + +(defun yas--message (level message &rest args) + "When LEVEL is at or below `yas-verbosity', log MESSAGE and ARGS." + (when (>= yas-verbosity level) + (message "%s" (apply #'yas--format message args)))) + +(defun yas--warning (format-control &rest format-args) + (let ((msg (apply #'format format-control format-args))) + (display-warning 'yasnippet msg :warning) + (yas--message 1 msg))) + +(defun yas--format (format-control &rest format-args) + (apply #'format (concat "[yas] " format-control) format-args)) + + +;;; Unloading + +(defvar unload-function-defs-list) ; loadhist.el + +(defun yasnippet-unload-function () + "Disable minor modes when calling `unload-feature'." + ;; Disable `yas-minor-mode' everywhere it's enabled. + (yas-global-mode -1) + (save-current-buffer + (dolist (buffer (buffer-list)) + (set-buffer buffer) + (when yas-minor-mode + (yas-minor-mode -1)))) + ;; Remove symbol properties of all our functions, this avoids + ;; Bug#25088 in Emacs 25.1, where the compiler macro on + ;; `cl-defstruct' created functions hang around in the symbol plist + ;; and cause errors when loading again (we don't *need* to clean + ;; *all* symbol plists, but it's easier than being precise). + (dolist (def unload-function-defs-list) + (when (eq (car-safe def) 'defun) + (setplist (cdr def) nil))) + ;; Return nil so that `unload-feature' will take of undefining + ;; functions, and changing any buffers using `snippet-mode'. + nil) + + +;;; Backward compatibility to yasnippet <= 0.7 + +(defun yas-initialize () + "For backward compatibility, enable `yas-minor-mode' globally." + (declare (obsolete "Use (yas-global-mode 1) instead." "0.8")) + (yas-global-mode 1)) + +(defvar yas--backported-syms '(;; `defcustom's + ;; + yas-snippet-dirs + yas-prompt-functions + yas-indent-line + yas-also-auto-indent-first-line + yas-snippet-revival + yas-triggers-in-field + yas-fallback-behavior + yas-choose-keys-first + yas-choose-tables-first + yas-use-menu + yas-trigger-symbol + yas-wrap-around-region + yas-good-grace + yas-visit-from-menu + yas-expand-only-for-last-commands + yas-field-highlight-face + + ;; these vars can be customized as well + ;; + yas-keymap + yas-verbosity + yas-extra-modes + yas-key-syntaxes + yas-after-exit-snippet-hook + yas-before-expand-snippet-hook + yas-buffer-local-condition + yas-dont-activate + + ;; prompting functions + ;; + yas-x-prompt + yas-ido-prompt + yas-no-prompt + yas-completing-prompt + yas-dropdown-prompt + + ;; interactive functions + ;; + yas-expand + yas-minor-mode + yas-global-mode + yas-direct-keymaps-reload + yas-minor-mode-on + yas-load-directory + yas-reload-all + yas-compile-directory + yas-recompile-all + yas-about + yas-expand-from-trigger-key + yas-expand-from-keymap + yas-insert-snippet + yas-visit-snippet-file + yas-new-snippet + yas-load-snippet-buffer + yas-tryout-snippet + yas-describe-tables + yas-next-field-or-maybe-expand + yas-next-field + yas-prev-field + yas-abort-snippet + yas-exit-snippet + yas-exit-all-snippets + yas-skip-and-clear-or-delete-char + yas-initialize + + ;; symbols that I "exported" for use + ;; in snippets and hookage + ;; + yas-expand-snippet + yas-define-snippets + yas-define-menu + yas-snippet-beg + yas-snippet-end + yas-modified-p + yas-moving-away-p + yas-substr + yas-choose-value + yas-key-to-value + yas-throw + yas-verify-value + yas-field-value + yas-text + yas-selected-text + yas-default-from-field + yas-inside-string + yas-unimplemented + yas-define-condition-cache + yas-hippie-try-expand + + ;; debug definitions + ;; yas-debug-snippet-vars + ;; yas-exterminate-package + ;; yas-debug-test + + ;; testing definitions + ;; yas-should-expand + ;; yas-should-not-expand + ;; yas-mock-insert + ;; yas-make-file-or-dirs + ;; yas-variables + ;; yas-saving-variables + ;; yas-call-with-snippet-dirs + ;; yas-with-snippet-dirs +) + "Backported yasnippet symbols. + +They are mapped to \"yas/*\" variants.") + +(when yas-alias-to-yas/prefix-p + (dolist (sym yas--backported-syms) + (let ((backported (intern (replace-regexp-in-string "\\`yas-" "yas/" (symbol-name sym))))) + (when (boundp sym) + (make-obsolete-variable backported sym "yasnippet 0.8") + (defvaralias backported sym)) + (when (fboundp sym) + (make-obsolete backported sym "yasnippet 0.8") + (defalias backported sym)))) + (make-obsolete 'yas/root-directory 'yas-snippet-dirs "yasnippet 0.8") + (defvaralias 'yas/root-directory 'yas-snippet-dirs)) + +(defvar yas--exported-syms + (let (exported) + (mapatoms (lambda (atom) + (if (and (or (and (boundp atom) + (not (get atom 'byte-obsolete-variable))) + (and (fboundp atom) + (not (get atom 'byte-obsolete-info)))) + (string-match-p "\\`yas-[^-]" (symbol-name atom))) + (push atom exported)))) + exported) + "Exported yasnippet symbols. + +i.e. the ones with \"yas-\" single dash prefix. I will try to +keep them in future yasnippet versions and other elisp libraries +can more or less safely rely upon them.") + + +(provide 'yasnippet) +;; Local Variables: +;; coding: utf-8 +;; indent-tabs-mode: nil +;; End: +;;; yasnippet.el ends here diff --git a/elpa/yasnippet-20191030.1331/yasnippet.elc b/elpa/yasnippet-20191030.1331/yasnippet.elc new file mode 100644 index 0000000000000000000000000000000000000000..de3824933ca08f5cd67b7a57b4fd606c6d503c75 GIT binary patch literal 234010 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
    p1I<8eqy7onn+fmV%X3M#T2t$V?dVN zF)3kMBxtW1_be8$FH>Feqa#yZcF>bBDAP@t-W!<;g!syBs2tlA0VnRqm$~^8coG`u zSR_f<$gsQIU5TRkW%jGuD&;f0A~V6zE{{%T+;G$}F78psxSmzdUHsMm&#Kc13$SXOrgpqk&mCVUE56$idL6l4 zSiVn`ugoBm!+g`ZSnSN>*=0iF-wu0Dth!h=(!)>yOt0rgfCB*#6>!n_T&%g2S*hcx{JZ;2uq*Rn_&KBWn!4BBRI9;NsCk`e z-Z{^LH@JDf_$vqrHc+a$td5R_w^;T>+iUe#rV35x>s{Il9@fCra0|a)<-G|Hqg=Xc z*c2Ia1YFpaKoGnFP(^M6Ri~a&>&QGA(iOxPee#IwkV+DrpTywYVd=f ztdpS+Kz_$9UL{_mX{cK4upZaVSLtn*@8XgLcsrIEQ$cwFLfsyXEM{ zF9mYY$YY2@FYETF(w~$2N5!vK;gEoEm?lf5J5e4_q-A3Xmz7_v)&enuS% zLwvkqoBz^3`_-q;SzxTr=^&%GNo~SQ#b@psUpH3x`lH9#;=50ZpG7YLD-@!k93K<$ z6r*GMDZX$ia^ult*MZiQhAWa#Rd5uKd)Z3C(VMoxZcLksX-!Fp6yV22tU9DS)kTu- z^i5P)q`OvM;o=&)Yx!WY=uWj5Io%;9oVKfU#}IKBly+fiLMz6C<0Z#70)?-yn!e(o z57z{nLIyXv(`ijrCtR!Mi!^dfWM>*BubUakOo;37peMwtlD8?ffWiqLlAC=nRW)$q zZ*OIAwAaSIHshVW5rP?m!({00fnt)q#MiA1cZW~W@NTSoo>mDC zs#KE2Kd;_PSjoP0IeCsklVQRibno$tryF~_35#-6>K-0=`q&5V;29ji@Jf~Ic87<< z(K9p%e>&Ja*h{XEa`=M@=Z(Fs7g79fo`s>^*;6-f;4hZ9MHSteU2~sOd>UQ9etm7p z5gBguY;b_qyU!Bd30j*y*X<=1?BGIz5pW4nJM{P&&e-3?6&Eh?-^Ja*(~Ye`viPjI z4F$|9VGl=37W4Tgd7nlAXG#bj*Vb*BOVI?lO1~m*xhwhpK5C~v`|36+06W%r z3ubYAw6Ub}8|?TyO77pjb@%StgDa=M+TSA04F{V~Tve1Pk5mH6I@(n%Z4);F9rCs{ zOY64@#+;(ty-KpUx)^ri4%yQ73eAkQq~zS$n`W3nY^2#b{%NC(H%+yD$Luf8TziX? z_i!}-aGOfF^II5rMh`f(gV>)l>qfi?yM&}!qjbf!iC6G}^S5we3-)0AkUvkn1P_^e z8&Bz$pTez~>c@qX>z{(x$&R_Ir^%Q*7iMDyvvK|$N7^_y-*`vU@i6PO<9qZQ=iH1m zbm822mQmYag(^R#itB}Kg*UuA9#wFOF zE6h{4xbFdA~LQm&9ow0GIF5NsKIv8PJtWlFHc4ym5rsT0P5xer;+Q#Fk#F=AZh3Q~4raIA;PYzACUxrM# z`9_s%@tQ$&$p*9&tW!G|x7*nb7g8?_pY9*NIPC_uv%Q_HeR=o6-hS@JjvUbvgG|QYkgW0A#JIY*Gh)7!LI;#>VU6;rz_G0_}j@yq35&U~Y zj1gtpG^F-6H;)d`IeK&G?D5a;-T9JM)`L6XrN7W#4^-=h@PMV%4OZ9flD(>^%Ze8QQ3KERGd6yyHV zr-Q@ICtqWc7B74ZlOOwy_Il-7I)5(T`;u&G&f?RZ|3c}zeRttYi~vR`_x;_6V^U4; zdBMF6>)7r5mn(zBSGm(ml``Pud3%B(L^IMkW3l{btp~a8RYi%;{bQx#aZHbg9`mwI zONPbbLP=P?!G{H?z$qs{v{viCcRcCZOc>3V9%y{`QYjg`54;2bybrOnU=#WAsm%$j z9{{h~4D0?L>VM@xQfh0XLgz@3zDI*+JC6r)NU$~4@Sujs{bY@CBU__!MPs-9s%X!X zFj4ucfY7;_s&gQqjNKk7B=CG<^Yd{kEopR2yY({W+V?iU_;N*C!j_D5jQ$p}Ews|H zw#FB(rORCeWpsim`qbQS?xLGPzB~w>GvuEQ96?jr@_Dcnws#K3hgXusECKY-K>G+- zQLt+Ur;VO2D-*yL8?;Q09zW4q+A+IuG=vxf{B7c~l_w0C_6>#x&*Dx$X5Cr4Cl{ z2X4k!_^Ai|syP2wf22g@w=;jir>yWhzUjhy`Gq_IL-0c#6h;tHTG}oSbzC^HIMnv~ zUwi;q^Mu~)A^sFAOm5zz6JXfm|I?{CSQkM*w$Q90lEEu|zu{n~n|ywR@KI!TV`Xhi z=JAugquni--^uu!o&Eh<)7zF80hNux2JE^m1e!pI1tZ)>ZYv$ctyWqw5lm`X+(u$q z3tf9&y8eIrHRW-6(c$(hS}RW@rPZOiRKDQ$#0xsK%HWQ+TQK-x65>*X9OlnRkjuJr z!$Tq|ibTK|U7x>3VP1XMe@}cEbd8cx(Ia5E5tHt9Q|T%6(@ECVhaf7@kFG0Bat3y? zYvh)PX?vLUWgWXWs$4@JBHQFP<79fBMpsU&h>VOg_)RUu;X29gU|bZh$=uaAU*iSJuJo0zBa{7+m#4dmXtc%8j zr|5}iUF6iSSR1V(B zPk=Q(wdH6DCXBE7nv(>rESQYYq_y@*|Wtl(rhKG9#GY`t|8(w_x zSyB!YSzr~NEMZzhuqi z$qyQPdzkB9<{G`zX&|9(~zt<$!x`PIqlz0a4D=Q14>7o^lPw;7J2ty`7v z^Xr?>cXoH-;StzMdogGK!NFr^MI_fqa!|*d`}fGMZ2Q?|45-yV^Kf+P!XLd|b<(W* zAwiZut|iW6rqdj~eCSaOp`UdPxrz{H*H0Q};x;UDTadx_A=G|z z>g5m1UVeGrE2)0>vvQgWczWj!SZk!H;Dg|TgW*%mXS3uRpZdMnMN!%|V;Me<>L$uA z_s`Xe8iQ2rPQ+Hfhku(4HpVb54u;TEV|Zt|@sKTNE)>*HliTLqN|tEd?tPBcWpaf9fQQ`0plrlUh{Rkrv!@C}9@}^A2=X%QbaT zGh74#?pIpxZqmCgLlkR71!q=<4;-Ec3*>Q+C~%0V$9){?h7jY@#51$?2VilUz+F0s zse7D=sW6)I%-W)gMYNPM*|c_c1k(5ra|8D#e?y-5J-9>nH*yG!l0PmcO#i3|pwaI@ zP7+CU;aYz=ap(pgq=XsBA=4bR`}^$K>h5?i*~DJ+uocI9@VD~U@vJ|ts${)>Al>@) z3^{8BJzUJP40>=8dq{B8f6~?+DP%}t2t?+#^gW$*U-M+ROKCY3ABQ_2&LK;^u}KM%2x0%oD|NM`Wcv$r_VrTEG45(^g=9^PG-`QaXy znG?y(3ga$NIKZ7i`-IW>siKaY@Ish!sY1k2+O1nl-f}X6E6FS4or2;K_16)(kNB2u zQ4o1k=$-<1=}Sp2IRVuS7$q+k7)e9}V_|%tz?NYt9U>x=->^A_%%?1Ok#&bVFo9fP zVb_5a_~4@51+d#QXKnd7_rdTbtSw&e6pi!fxX}17^=gkV6Y1k7f=QXrUiG^OCwYZ{ zVm{~VUg9-_4Q4d_OcgvA_oEA3^nOLMX~T&Dod~A#aDl&sFdR)eAMcA}a5$Z&Iwe7x zQaYW&!Tf>w!?Z=6L&`TzRmI+|!DhT1-!gee9d{6E5e8{h>iAfgb!}EN&>eC6cNW2l{-*=jGu7T%hp~PyQ!z*0CS7Cp53a#yY z(f)qSjXw9lan;7s;BiV$ z;UzxDqERcg=YyL`E4xUCI1Z}dO!MrdG^1oAJ;uK_e`sz#86qNMI3@pZ8Rd0chXKZ6 zmR`TT?8OSKmX+i>EK$S;h@%1gW$$2cumhVDJmz6i_()O4NbAATNP*!;8V0PdPaQ^M zQ<+#F<{~^+XY7og>}-Hjy_A2lxA%=8K0(R>;EJx$nDTC#Tt~p#?jM4^;BC6Uio*LT zu=mdKS^jD6I3iV#B{Lihpx;khD|!SnP-}SCA9QmP7qv>bd4@6sj(?eZKM*+Pg^}$c zfJXc<0WBbjP$drUAmWdZKjs_o4kWH!+}(#65llY-412&ZB;5Tf)s@!0LQTQII?e{9 zEMg$5O+iFUkSfW(Fy-{NB*AE&5ozznfjq;lmnju$Y&YE1ym%Na-ZaWub05;rZneMU zv*2@!+8cBH>96>SjyryyQ_Q<)OmU~Ly63>!Tc7(4q6WCd|D1u3uD`fd8=tqsjWS4R zWwa5l%2?`LNUjJcM z1er!Q9%f(;*y}bmr<($phm0V!Aqv`*CU&=;GMor1m?3d{ChwqG1lh*Sx=E#9v}nMNfz!qUixILm>9Cj3wC9_ zIFh8QwSjfStmfQB^RI+m;5dT4BLv9_P_ajp6pDT<3>YXwo4Y2q0oiLxDVc2=tE@h> zf+|#C_<8x}7Z4HsJ&0YrIwlp!BzdbiX$N`np<9^d?j9l*iLAxSbrQG8#t$G`4}yMU zKp45TD_5A)V~hchP$q3JxqIinj(+u7jX1(A5NMJ=1=rf}U~l;h6keHf*P;%BT`=-+ z@No34@n_l^A~3Y{;YV|Codr*JpU#{mrvTwdh61*{)&9p!C58+a9F;2Z|XOPLN#S!N%LpB*F!PQR|N9A8t3^UTeH{{rp?_l`YmJD3%)MR(Tw_ zcf>-InNR%)8*ib@TGk;}JU##GrQhN(BVwi3OSZ;`&5gl$h-F2D-L1PRJknB`IMhBw z=N6M#;DF zcYK(V#Kg6G_dUy=5m>8yENnB-)?32hbUyUIcKB--CsD)juUsKr(A5Q(K%WRB{LWpF z%BAc6Zl-aHPkGZ{4mw4c48Ob)?$aJ_&7S($=Zy9a9tTm1kIthZtvuZsiI29hcMpyX zw_rw%4>m2M#$N!AwL|>1=I3w)h}7ShQg{PBYqs_SY@D~!9ir207=B=qf)lx%Fh2;P z!PZuj)?IRm)9#nRe$fqz>mm`U!h?j#I9REabWm@vrL>%%}xDmw; z!^VN}d?uBlX{|r9r|#2-FjOF5&YZf6rGaU3Nc|J+-%dtB>~4#y@HVH0%=v@^NnnorMWCD}5DeYzC{g~bi<+87Q}Bp4{C&P56t zB6dROln*o&FHcZKM)3zxZx4M8XT9mpA)Gb{83`l+L^U+jejOsG4!$>NO;H}{6j=yT zE1Z*9TbG_#lCiPtgALDJhOLdgGU?l~a*b(zNIq1gv44{q;MDkfc!}*HkU7i)G*!o< znln>q*qU}`HX%5qZ_~w@@@eB!^8t^+>+}G2XF>^{eOa65=HSthL|krVD=OH9F9LKYUvK@+oj)O9#qv0{|xjFIY&=uiboVIHJLBY=1nNyq;O^ApcyfN>|him(IZ*Qyl z_<+cFD@=r_uvyZO77sNv*bYX4_F|FJ9y<6oHZM8wDQZXZmLGQK)$vxH*}u~ zLo~OH{xt*-{Y(cQz-^3-T;Se$p^k$r_sS4HcUc=JN36XWqN){u60h^|V~wd)=eO5s zs1KlbAQqIIM46j>lvaPH@#|~v;P?L7`Nq3SkrIP!F*^Ls&N@Q}mJ^VnjEP65(qpSX zwX@D@G&7j6AL;_b$@10XmBOW@?#-O~qs7Xz4&jiRgErkT zxN^Gq3?uL~CA0Zpk9irVkV#(oV=J6X)qRnYP!WabifORIO+Xm6v)L>W~2K!CJLumHQaXyRUKR`_L?YuQAPd4hDc2LNaq$_&}*pka#vIk>xCpE+mQ6d8V` z3X6QkQli?wv4~joS5LnME$DTpsxBs^ul0N;wN~@jssWY&tA}Q0Ip6%GvqJPM9;D{n$txbiATM%w^Qid7uwLZZduRdqG>< z9rCxkoXCDkHeUG6ILjN6)~RNxHglZvB6;_cX0*KQ1Z=Y1lMSx$Hl4mxt^JM%Pr?jW z+B-)nICaWyV~W0`&wyekG`53&t1O!~pdamnCJ=^X6CcF#(YX{aHTw-0nZYW@(V^mU;^)`>b9 z$}^-!C7WnMyINK1XVQ5C1@+8`ujVVFDB#!dYuFP~l_$05_1FK0(~hrTZbC1m<#yXk zBuL!{+%6c#v5+a>FgXOV%UC6``-l-@`W~|lObwGNq6w6-KgHX&G~aq>0g%T_6Ak1( zxA~c>zj7VZQOa{rKIqv8!>zq2JHFiRb-dU?;>EBuvfwQc?o}@=a{#x;D5a%bDWzIQ zTc=^OyI%oLhDBEMQVOq@{5Zw3@g)7?$i9?et8u#_)!M4}E(6$EXei$5sL$_J=BLGL8`*a*5~a$PH>>V!an66jCQ@xVzFyCZ$)&8I9l;WQ*Bcrj1H z{RE(aq;D;3pk>ISK4i86ifZ zVIr&P0iHCs0XuEqsG^5$C^%E_u}5KTtYXmC&hDobgqeiWL2x({*A(W5gN^F+^OPoJ zO1uD^`CJ3)jSEqlB%PvOorQ^d0(tWON}S?(+&LoHL0 zanVj^`nRsWVnkX~zuC*aOe~1IEd7As3;^EB0xl?!SP(feWpVx&lFnKI17W zTR`rJQlKBQx3zK_Vo0#i<7&ztlH7W-v%3Y{2(v%7Ixi=BWfbRz zA2y@39>OJ$;iQN9rLnaLGb@Ly=FMRXAG2oS^3{hG8ot}3&jI<`NfD0pSvoXq)o|@gVkHC))7@_!$ zx$%)N?U-ssbrPN{bzuPnrr0cYeODb~Xz4na+8*jny}YOkyk=g^>C<20s6y24tjowK zdi*&7N!u#h-2)eo_Ry>b;qV&fJRTEIX7wJhMg+>B#8kwVtqj8F9__q-C>~HP5m!n{ z{n$NJbA$XuRT9;n*fFFGSG#cQ>m-@lD@wOkxU%*{U?W|W6My@kyrC#2!Z09>e=&>@emTMZJ&ABhKHew}2EJb#f4~{fPx0NK z{E}qOVu=&HjPUer=5{zPjlKC~=kb$W{0FY^2YhVaX&pl%SRTiKn#}9l)&3Ps0@|5N zR5kGFRpNR87w~&riUL=tvzNFqwpr0>$i*$w6k)I-f|g*b(eOERa}d?0W%KNtOf@K2 z>0MX>?0az<5S+_as}F7b#oF!9AFQLs@f)Q2Eje14A*?hWBht4TF zzNJLj!x3Mxi|MkCf8k}}{nOV^&s_Yaw*_l%mux!}hPT_0oE>f+v3Au);eOYMFfC6x zP>o3C^+1XdbAh)(zE+F{&?~FbY0{z%La+`zTM2?R4OHxe+t@>6-~|fa0V4CM2q$JV zi=JM&zN9pqH*%J@%_buy3oHoC+C7vFxkd;Gh6&bbe*ykdE)+fWR+-n7ltwGDPD(wV z{XsAs^x10=j)O$u!_nF6XRg1^Z#Zao`aS-xx*y>5>Qu865P?BT>TM6k@gwykmm)r4 zMiK;&$md!G7q1Ajpc`oIN<@Y>2|DJ^WQPO>X|U?w254qJT@W!5c?h8I&twIX46b7*&cusUR{zc19W>edU4#G}ZAWXV<)?`Tr zE2%-nPdpz3K50Lh`_!OYU1= z-xg_Z%mIoFj{3B5i4XfsQcU z7h42Qk2|t*fM9pQzSpG%gj*#DT@0HRpTvGG<`O%1J) zg&-#rdx!}76V0b*2+<1P{O>HfW?{x5`UOnabKr-e3!uWzaQUq9BdYUrG+PUnymiL@ zh;%BW9e>+-azk>Qy$0B2L_cfawDJt8v+1#(s)lbIMN@{E&uoA zTcR%N{0CApDO>EIlK=oM!Z84Tq4&a%{l;(XGtn*WmYPcd6w&FSCZUlS{t3kbU~hcA z&i6f!&~6lN^D4*LLX$0^2-Q%ElLX_=G)gg=^zyE&?lM8E$2tqyNQ|~Q7}M@%A@(*p zOv9L6d^&vkZL)8Sry8rEr}P^_MNV&F%L(1ES_t6yR4um1Iyy~PPgC?cI6@4{%Le~2 zJl2Nfe>fIr!Uw_`pyM7Rxosdd%99#;Qquqpe!_(AqKWB94vv#h|F!pYV`sROT;&0( zyoEmjPRkE=#Ahbv7ktRizo=JZ6J<(?w!HD6%&H0yUJ|z96=s|-TJHC(r&Gz$hOtsJ zYhExiP|!vC9qctL{N(!v%0){p_2WlHl8kK>DGBl)A!uQTvsXJ6XZnT@?P$hppO*r2 z5}|0_9LRFgMQ+WVnS;iqo_32O-bm4%Hmm%^d1vCtw)09*++|u zjbI5=+G$Il4?kipemY0(pU&YYz8<@mq}R^V{>>V#d7U79uAT5V9fd}1WPjxacV`;e zsqhJBw;MQk>cVwkkk2*JRo?nMZ{3k}GjWakHrkS-Pbn9nw7FXq`qa0)sKw*i&<{5{ zd;OilZGJQJ>8t}lXW3lGa9~6W0}`e;#j~{R13< z5wyHdvAW+_MlqI#jMhM$nw5NNF8l)XqGK!H;!mq_u7TuhyEk{W@lFG>7@z))<_d18 zybbc~JwPdi`hM6(t$yQbW2JF*75DFO`ibI&EyQ!qHCApm`q$4hRKx4d^?UCZjep}5 z|119D%6}_fiKFlEvflOcy-y1>getQB%x`fkT3Q%|tf=mOqmNOx+p>_LOIq!Fm?Sfl z@Hd;EpZj*P36M>mFj3zossdxl zfYpZWCl!Sg?t_cb^X#etuNNNa4UZYXCAeYe@rF4YZXw3SiA3!All${Ya&u>lN;K-M zaC2-Eo!}tA@pYnJ(LK^IF zh+z41e`v&07m`n{gLrfA=n&l{K3(vV7&LCc1JW8i&e0ZW$IeQk>J?Q~6Qzp_(IFi- zwYUXDL5v)C1hT`3jVLKuG{{^^ZosP_r3dS5h6*SnK@^Cj#1UC`|i8%-rv4@e&Xb1o75i5j;iLA zi!b*9y=72eq69NJG;j?&zTp2$!{Y-|Z-zwj;e;6GqC#=MpPU_7o^DZr)v*kV^lNFi zPez%j<91SPv6vQAM5Mv_mcF3-xr$5NI*eoP4GRhWm7R*>k4-F*`#=a9LY#Qbp zw=LHWov0Aq;T^<_YwQJSm`gzw60)2q$B4lvIYyzVQ;RUYEQ832`FvQOJI;#ZVD5$@IPb>Q%xRTj_AcM{u7WHa{a7qA}PI)ATlShX&!-U3s>$@?-n zAwyc}qjsAyj(2jSwL2g142U zxG-1aTW9WPHP;h9Ia90Mn*EtjvGy|)rE4{Z)*92cmn7E15Hrv1bPyc1wzZL2QlTH;ke8gw(52QlMI^|5n{c3% zP{@R3)j3JBaxt5GF2>dCED?_m6m9p!<+9F#L-@{Pg1g8?H4$`JZ~SphC3tdhv($n4 z%MFW?>$IrRV?~;aoDlj6S<{>&cP*&Sib4S&4UV3vvDdx(t9S34w^bz$RQ#8p!j7Wd zl?N>x$?VcOmBUeoEc_8`|NPDBSD!59?J%uX;gx&8|B^*f3Zp+iT z^6beDxv}!nKx0)~{hW$JcpP3D3YV2bXTx2T`dztDx|Bd|aokBA@06ZaN}`zy#;Ll1 zzuW=Xtc8}i54JyJ7K>Mf+65CeT!uGc#Wt>L!m8`QaJ1-7B!6}Bg(^4PL>F+eG~;NN zYuG%$z78ugZ$__u=KSJ&Vzm8-;!kZ9MoXV%}ZDHBd9bxO#K*=2~K=9y;qAN&DOnvq8^qBZ>~9qYp2Q>^O^=eieu z$1P&pDnZj}U*PGDxt=U0S_44pOZxb_oLj!UF%8guw5e+Dfu8t#H}5gzMN~R{$oK9~ z^!wxqJDBo+Rl8}$el9Ys)2rRo$+v&~lbujvlC+bp+`8Iche7$Dv zHc*6F&%U+n+b3La&(Te{)t>vb_OYJEmDVfzC~pscq#5=)HIpn?XZd5Q;itD}Kh-I5 zXNSjQvyy%3Q~t$R#_+Y2M!aO3wwkbQhIdJjKo;t10Mp?ruMSQtH;Z51)>T3JALXpl+wU%S;~Vj*`t)$VlGN& z=)t>P-b)gXOPYB+cP8UjCxX&GB{&+{bAm%gWLUyLwhVXDc&Hn@y2M%r!Ke%k&;YZtBml9>U_R4NhWqVJ4u$4nhi|z zh^fxHdY~lP=pcPZl8Q=mrx5$w=`OLMQtUr|t^-CCEd|i zEr$P1Ub!urYZFH%lc+4^xi;5pro@_7E2(qCWJ6I~b`$hy9jPX{2gk!Ffb&Mg+h|gn z2?@5W?wW*G;)DqsgON$LRto|O^zDn57Z!#b`98LN)gaa zDMf~)86#mE6Ei6hW8OlVPz#D6x(SX>+V4{!z8!3uE6U7ObNqAFhDK+px=cs;rYcTX z?5>H&j^>unGLofe;r?oDgy$OFgl*Lq5pHQJY!Rn3AlUPO58B@Z%!PRERh_W&4=D1o ziejTt;VJp0=Ym^cw~j3VrBofXk^}&$ER2ml$3mE5M}oYSp*L586_Kf5C9^}*(>K$@ z%F`C1BX~`|t*gAjsx=+43mdfb6+GE(>$a_9hrbZ8b8Z}V#`AC!=J?|TH_0pzzZ9l8 zXUG8?y>EaMirt5a`)z%L$IAmY62c-2H}VFxF0dY4O5&QiM2p)c)lRydJCQP&(4>L0 z@|3z)K8EBFuN~~i4_v;4OKJgQ2>#ell$Z~6);3bt_v0o zv}&(OoaI~JyeEZIHDh53Uk#p4x6ar3p2G|9ck(TR|_} zM1P_7*6rE1WHpexFYQotAIE-8VnV@34Sx2_qPfu*1Zp?w-v z_*_sRDF#W!+B0`#1}VQ%l$ft^FI7ged##Xs-0Nu>Yx&qL02A6`&jH$$yf(6XA&INa z>&P!2&J=QQwbZbw7=Kd<4(B@-HI7bV-!z#@;*94KXq%;D{XenERyJQK{eOCsJHD-c ze5po^3FG9LPupfok^leue7ff3ZitDT&e-P=fNYrHD9&s;1Zb>|fdnJN+@bTYD7*0#qeapHP&_rPHjUtnEnW8Nl zPdAU{Um@=0PdGRCHc?(o!L*xI2S4STWQD&_EG#)h{)kNpCDLdLW#w?dgy>yGI=WS? zk+R|nsktf6S+CoDIZaeSKu!^N{b<}}w0g4EEMBdaS6nO*WfPhJzwaHp^s{y4uHQu2#N(X#w`F z^GXL}JuFI&2}L_t2m+yjDNRHiLb(xMNJBvEP3*BM?W*s?5C_!WpY=_R>M=nkiD`t_ zC2`1upN*$u!u;`w8w<_R{7Ri)u!u5L!+1MLC?jvqpINmD_2=&pHEAqfNdlHA(NQ^a z%@BDL#_`h>8QW$G3I5&66t$n3;At(x(>=Wsvvqhs=caz#^g?bF8f3icNfJP`OL{qc zKY>J!KC2WdQb#6=0Xu2g#eU&f^_R!77BOUNkTA4Hq4>k*Y!#e7UWe z#yZ{Sf{sZf3<~isy)FU@i8j)3(v>0JX%cgukzD-PV(}z&dj+6e2*y4fh9akcJ!}50 zm&d?$Ocu0X9__b00-iR=B{5%YnaqltuisCp#y3_JY-v5O71s3W*I&v{>paJNy_U7DSl^ES9i`-?)lTSdw8ftfyL9Z$1szezs0ML zJn8Jz+d5Nk<6&sYm1kIAyJ^pW3_9u5nuj;LgkaJ#c2?}?XcNDS+|;@dwl?$o z*{=E=rhzl<=q0AL8d+&widlHL^E7Skb-bNe-E`m-#$`#}#9DSYegvLn;odzJ z*Kl;ODC?J{5$!UR#%CF!Ld92iI8~*n)02)M_9L_3=gnzGm#Nu{MMj=7B=^x^b3*|;*{pTir4vo095PBIk4u)NJg6%Oqxp=GKiahoi*C2Kl{9-|)QX34ni*H~dQ6$kABxw=zE?9wh5>3qh zElJD1C^p$l5j3yhcUL?7hQvkV${g86~?>l8chU&r>oSZ!smu&u{lt+eW2sJ6)Z*ii&R zJyJX>ikR=eU762*?GFETJ z!=@?T7JWT(gY|rzdV?|J;sE6(DhmxuFDonJmeM@@k<>cJOiA*#<`L>`7hN*+w>heF>f)^p;X(JCla2?H)$31Da}@%_{QMmy&Qhg4XY$>&L}CzRZBPO5cXsRCA}QAN$_ z~RB~$Or(p9fu7%$93#5 zdy%{6z@ox;Udqfcy^T8E{|@(`NrFG7Nc-V6Ln>{Rx{ZMbQ~Qv{ttbXocL>Z4P;Y`98C0sJrg5Bd@4mD^3) z-i3PZ1IQ`V(_BtI#TwZT9jf?A>g4}3?z&l|J_hLt7A?jy zWRK{yXBWJB20>~>LSFIb*hlwG*%a0HocFwGm%V}>~1sCQS&TBZk<&ZuWoC6hjU*tLo;u@Y~KG`goLnJ*oI z4X$RBjrrD9rzrC+KHfAtCxs=MOhvFqrMpB-JikVvJtLgRL|yw;kAFtiEfx_K*$x%o z_P!F1RbeSN+ScEYR=dm1dh*fl>}~HG9rrgBNu~ARo%?sb{^}m8N0DD^j?19(*Rcl= zAkzw3f?|65tgOQxi|!JKCf%)Hxx4lmk^J@V?=5}&^><(0U%Y-UO%E5bDEa~JRL)`} zxJnijA5n;o7yEmNEK%xE=SuwE;|4Q0U74G2W=W{MtI6$!p!tWKE<=PYRmQFNb_ zin6C|USg}rGcMjAi6*Thi&Rp0t`Vgy_jm{A9e zh+?5_Y3K(gg`}(RDkuSJ>+vwONBtPm*CjeZiQKKurEmBbOUN@la{cVTTqS(h1l3}N zu`bVONw#*qwk)PnB$9sRs$Hhf{(t8-Mu2&EWyggqsf^>^=Ob zL0(q%5?R0sPuSlh56XC>c5B8c{8?>{$iFzEtcm^_@Y__Sy7Az_l?M+N8$jD*!YQ20 zTHayixo z#htI#>SI7XDO@TguvdDpoeqq&8w397(m$6!J#>*h>PSpEYNMdJ&<*XeJe6kZsl1zgxTe#p>@x1HgZ}f&1S@@OaH}et+9+nrVQd7S)W! z$b!T~a1`2*6q!S*@z;Qap>p6&UAcBHh)oLM=7>;#EXGcE9;!5-!jtOPuUnMg2?v#8 zpL3K?)0TK{$03U&venz~5URE(qhjwJa^D_on?}h;AvHzzwlAHxf*`$*us8aTAK8yH z`fV)<6X_xQyk31@k4os9mK2&?wCdBaY3JE5|~!M=J4 zQlc_))lYG_fe?Pe*_R2~M+A9|mTwqEj(B6!)lbpHli}$)a|Rl z{Yv{rkPFh=zT_UU3#rvX7ff{+Z3tAnN!qCe%7~igP~TNX7urRkQ7~P>m#|owEidFO zgYMWAJDdrojY$OtAR~%9g7+WUR-svV`$!B`>Eqk)q#!NCVN0m#nrE$0pdCytR*Ov~ zr4p_}6kWS(tc)-0d8=(qMqk!v{^dtwI0A7AOE?f?;&gaN zm<)4Eacl`R{_~H|<*K6OZ`qEMGu;27_^Lk5c6e`-8`JE4$BA@aRbDN}Nx&-UIvkP3 zT%$R<%rNsAs??dp9EWPql zGR)`e%2G`ADoaZ#*i=M9;)MMbP3qJu9y{lvGB75$os~qz#f7LJ`=90tU!WoLBzRB9 z#be6aSMBDFUO)Ai?DqZ!+|8*42)w$L8j4_iI2`=tc!xKx-(J19wxo94;PH`aE|5=Z zPC8YGEu;l^uNA=%NBb|p1>JSXet1bHEV^du5Ka(_4dmGSLRqC8V?Q z1jvsGUFp}cSu{Ba6*?~m22hg)Me&W&Fol6;d!7gl>SHOy+L%*k?zP(Mi9va}wm0T* zV`4m`stx?AK6|l7SWJ`Zs8kcXsKf96Xsm7SO)ESw_m+q%y;`BLduM8I-gHM9+`Xk38Zglc#q|mcHJ7|IAE@dO|tC z7%t>}7j&|uu_JyYC(NFmo{}ZHGgdRQuX>RRX>0cX7ay7y7Gjow{~-+Rf-fx-eR_}d z-Ktt)pyokaJVe~B{fO+0SPp|~Khxxv{6BVg^+sWroqKFk0v-Q5y4iL}F;Xy;=v0CP zgR8=_E0|K1B?qjyEohyMgay3V=z`T3-9QkPFbA#2jsJh*Ek|Eq^qk9QAaUub)OPY- z?*?pE1uB;236DO;+njW75O{!7vb5mI=P&If?UN}kG=K`)KY_+iBP>-QLu^rWCdMs* z!tL*8lh~4;mFQQ2t0f^jDAKE#R$)kI$sIv%cIuf{D+5vHer;hlo7i*5t+~n2#f*L- zTEa=?6s*#RN>-TexAB-5RB!wq$?)FCtKY2QbaM+)4grkDONZG)vKE3wNxTFPlyZAj0$DaA&i=dhg>qcih5?^XhvI*guG- zcVVBqzxL1fRawhZLE|E>v(yI4*~f$f8+9x2{$+(9Gpm-{;i?G%mmaPl{i1(fwKqiH zn-BJqPH4AT(lN9DKqv-$LgshOFp(gf-rJBdzF1o@a!CfXolDjK%4hRX(|OL$%kHUM zK%U;a0Bw3#bz7lRmWpNCDk((t7l3Vx5XmD&t&OAxlYhi7gj--i)eIJDrtGd5e!ftJ zFHv1cJc&_4yR_sJ-^<@TXgy}jhIt*tN#aPd7fzQB2UNSE;9?jzDK8Xbb89CC)gcY} zsB8|9slcW=hSIHO28TCP;e7?#?NCQ0le?}RPlGxa#s1MyC)zO;@{&~V8*5eF{;!2R zi*Y5-*?(94KIOi{_h342>>SI zl7V0XntwFBQBI|Rw_e#pyz$^S>+0-sK*0p7s7X5eBG(##xr#QGSFs|8g|g&8SH4`m z`#;z2)~{1U>h7JdK3hb8Ix>wMJgAd$?b2%T z6$G?ic&xc!!UG)bUuB_E+a+X$1M6Pbo8d*|b!xRRtd(-rX%47>u!zTH^!~5<<9vw=f>Cd z4~7e6!>l+Gi-{@j$`MNih41gzpQwz1g%d^DTtYgxXhpyxBU!n)JI-)X2DJ6bMRpgc zb$8m3-V_9cy|Ho6p9Qb=B6Mlz{xN#=wDjK48SFgLgNs#-`0Uel3m_{igFrQC0vtTr z{4*vABmovZqkeDocWa+4efu4<3$7AXyA=U0lDIwWAM|3iWr`Pn)D*txdsO&`lI}hBxFn3-prAkWa z_G_bx5B7{+iSj}Ly%d&+SG(pxNmr%rRn*GGtQWygRR&T&8yZ&#jfG<8l@Z;W9cOns z01*xGj0uxaRWLd-YERJjUtpa3*KL^} zXSt3d1*>xNQ>%XPwih|@?-o6fy5_ce;%bPx)Tq7w-?)X%me?*yq})1GtJMAm+XTY6 zvTtk~gD6<+I!&Ho-4OsKmwc2pMBY#Jn92oH4pEUqqEKn-T)UNB=0=aoV`eS<*ERJAgnkXWh_ax>#daKG6KGE zeaU5D8l7%h_v`Fy>fIu8Hwg!GS`Poh$|mC|`&8F%!M58SAt1`LzDfRQ&Ljnz!9hXz zL#3ZsjIEj%oVbQuPwscR;S24xA{dhyB>r8z<53VTB(;;aZvA{gX2&rL?$$=IHyVeI%{XU%sM0 z+4~$N(_Ow(Q>-;P&h~r#2rucbq?lDv6OTR3IHl#mhPmV#*Ea_T9@wod^^iMD@@ib( zYoOcT=jt{ITl>!xgXR9z4aHPhOsnN|G%o-9-c1X5`fKBw1z`}kYOyNNc@H)=fGfhD z2#ta*D~d~zvcvjU3Sm(N?&hzQ?NQEm`AR8^FaFgF9t~B}-{#vO9Hb&$|B5^h&+KH1!173g)v*pM{;Jh<=L3)aJ*ZYabV zi=Umqq`-IE=xQt^c$%c1QjZ1dQCK{GLMR-DPhqjSoebECE;Y}r87~C$_aVxT)-5?1 z`WMfv-;=V~H8W{l9$|W z&}N+P%U#qAQUxRNvVEqBC`=@i4RV~Bpk|4dr#g-W7lw`_mbH5!V@y=R;v&YlAQ>3w z)*n2${D(S`bq}vzX^=u3V{A39Yvr6FFURDh_O$v+q6`t4Jb`>5Ke&WN>ygP7F8fLO zJ5d*8n`mLz&zWqpO zv=I40eJKhlxxdm2>(Vk!DlADvl-ju0xl!3(?fn|%vol)#;ZM!9JvYaLxTz_t4s?M;k6#$U ze5~(AcOeFp!3bh$>RW5B&c$|Zu4aD=(u+ChJlz;g7S(HssLkB2&EKB2W~1#hXLwLS zFUEE{NXImKk?<$54#*x#$9*aCFoyq5bK>%ZYO)Cn6p)tVP)-sIsa{~7c>!Ll&TU!d zEx|3C0bx_sXey&NDUiykfp17u#VG`!r7WAn$*I!!Cy|DD+z9?>$Q{@}fp|Qu-zd;? zWjRHe^mFtK30Kms%cjF$`U8i*R31YT&t>TN>drUctlgi0l-a99z~l=M@guQLm!)8Z zW_Lx50tvqhaF;LuI;KABm-JO~6A%wRRnyo_Oyar>zcS7C6pP|AkfGG2MdOo&<<@2f z#f#b1Ie7ByAnxb$wRa8UcJfh9EzHaCxmWN*tzbAhBaF4yLgJjR20JVGKe-#l`U(!*T3GsE@lE2z9DEr^4*6)n$9 zT9Pem#)u!wqSbQ-20si1{uV1zQ^CF3`yuynf5rOmn`{zOmHGup zJ1Qi*bqFPi(v4tbqD5XgNA0$LNLv25CE7)#m!WquPydawOim4RLT1@lZgh-t+hcUp zS+tEwbS#zoEowYv=wDK@k*L?sOqmV&QIiPF1CFE3=HD6=y%Pfqqaw#Apa{--x4 zkla8bano%dZ`b}I#TRylf1-Sq5<`?YC8Mjy>|5}->C<~*N%UYK2{5v&) zpcjx(=&gCv_FZJ_@Ha6Nw00NIF5k~bK4S!A%I{^CJLZu* z?()iHXtAKXmRxr}79YukI+ckA`nwjdSJ+*AA<38s7bR&bAnY|e;sh~y?mr9>#)rHr zC<1h_FBqPjh7RkLghu?e;=6m=4_n>HQqnSB)iThs-HMqn0~18rI^XgU2=I3{0I)|L zmI%hP2!M)Z`^~;LhUcd}cE6EgVEuG5iSu5QTu`h%Y)F#C*7=nS$Pv? zN`8Ot)d$-*8QHlBN}F5jqUg{n|90Ed4wv!i)eF(vZ+lh0y}|JI+?i`WN1^G&JIJQ& zn~*FYDVxEI5Nqv4e4!z1=CzXCZlQ&q3@nH%VSqaY0IR&F>a}@MnXbXRVSs>bCWxcl z1vL4|2TJdRg9KD&16$3{7Ym?TD$scZEd6ZUPH2c!qUprJ$ z(xl9Tj}3K3rzAN+tQ;_%e*L?HEvsvp!WM%7qDD`%0tn^cI$NjTJJ01 z+|8eJvvY6OE*iZ2$C=tigO}M^0~q}QV%`KQnzh;a+FK_70#ykffx{Y|cffrO;Ig79 zkT+%b?R=?mJ-ghmy5`k;`WG+<@W$g-Vx{L}tSH=An9lyHVqNI+?P`Pw*0tB6_TTA_Isu zW+FhCBt|eY7VIb)rMYdwEOV~iUP&EEFgpg;e0k^Y-LLOftGilv*ZLLZg~Zwl!_B1B z&dK{I8NnreTZgkoGH1O2(9eLxLXOMCEm*R_>&wf2W=~r&)H$mdu2x@OmcCty3Mfc& z@CVG;G*1&TX9>lErpbS*1LKJkUo%^!&j2=(UPy0EFw z*cHkrVt$a?Jo)DK=j*@Yr4TCn?KA7u+j=M6CdEJ&eK}mRXW@-K=~+e<%78PIY0{BO zX`gy;|MT@kxG*v9@ui?D4kRP+oWp&5b^&)X_#22h@H-kE4z|^rNKJHJl0j7@;M5lC z;Na==r2+}+p0`1#D-kI}_gKJa%cU3C0AYseWt%3MM7YAnmwu8vWpdrNi4sN@b%ejX z8Q$yOa{bF=Vkn=M#mFY&a1=>U%%#2GbeHG|4Xw(EC+^d7q7Ops_51}X zlXTK;7Q^Z^!lLD~wel8I*UIyFL%9JUNlw%%50wjX$^o>yiAF&Fs8_?or5ZavkC2Bz zH}zF0u#$j-+-f}$A5KjS{HcA*$uR`C);bvpcmZasWA*ZjaC;?3&+c-&?Up5&^XKs1 zr{rm-B4jKfLMthz;+e_>Nm$D#i-wN=uM9%z6n|f**mHn>;sRd4(xs|>xS0ZG8cW14bhf$dl%$tH}f=0*2=ok>pFd1uCpoF z*72s(yYlL-+SSzujRe*PRL?9l&hoRi>5pvXynts4SKH4;o>w`dNIaWxsfb&n42rrz zDNKh{z}>tvaDAH^k$YPQW`VRvEm5(IkU#2fDfY%;oiG~sEc(<~4Ts{fxUI1<-n1CM zdSm@X>s=s_hd3jP?^b-!&eQq&H%|vDI7?=NbXyB5l3mnR^?USGO}Oo0qj~S_$sx>n z=<~=1*}iP;lZe4TNl16qp^izFO{_aQ@zC$@R>Le&SBE}EdJCeLKV5I4eOi*TC z-`OVc+zh)$xLnwt+*uM$+fUhPD6yN525{}sloLlt5ey#QC}t5 zZqo|=(X4Uj-zYaC*~o$agb60adY&*`Ha-=8N0^i~0vgi$ucFE=`7@gy4Q3^Xdm@pZ zuKOPJrxa_HS`Nu-_TT4n%UEgq8dIQM8A1O@m(37uJubQm5$+KI*6M$o#PV2xfeHc2 zPlcJ(kf6-+j>N&ZQhWe>hMR{wmY=AIyr)b1_&E*>@?(3%7vm9uJrUnaugoyZR|a_fs0JyQSm0R zXH)P)gP2K9QW*+bWqP&ZWf$tvlzliDXrjiN160``FB+Pd!{@r%$`hv;@AW`bkFW(P zBE%}fjfXn~QD1{zHQ=y&U#E=D!oTmzH)91_d*~PzkL`$GCl%MCANhHMyZ0ac35rUA zqNAPR_H*rs!(yQJf?i4qcchbg^@nmXR4K_zr%@L$^2$f>#xa7EgEGDh4*4B9`gBi? zKIOeH!klts6=^ES5JE<)WvFzs#Dkt$@=mJd04Yf$^}yll5B3^3Hih<&23oNT97FD*g+!pRt`nl0drB-^f1E>k6u-8_ zXvOw`tN~+1_EiKwy`PQrfca{Eoa zg*_sj1ng;WWMvr$2R0-%jK-4h1?QO3&}fTd!)5k&aZ;93^-RK3QDzvTQ6*u}hhjWy zNN-?kSBoT}X3-^}y?g@_KEY8kal!D8bUm^M%t)g)k01rfAaD#tfOOEUw{N{}z5&1; zA-UB$e~W+H-||oA{OYA|@rD#W4oVH5xjK`WgZ3+gB-Q+Q%4vsIB12*Z(-=r01zf%8nN0~Zw#G>-tE-~lMHWXr@2SjYC%2s9gE8*SP=>_oaq-gH!4Un>AJnl(43dgMlYh$<)GigyqsM)!~kHQ;?UGNreh;Im?!Xwnc zl)mC|kv5ch%(Nmsu>D_(aOwhTs@bI}O2}{`!;3%E>oX5OB8>UUAO5)T@FU8kf+Rw# zBh#5uwE_cU&sz&I%fL=s5GXJX{Y|;&C>w*+PLVh9og|H!G_7U=E_yGKt!mDdkeyxH zE`Rs$5Yrz*RIfx_%BTvmrcMoly>DXHGLkMW-6z!2v(TqO5(tM(8vGFjaR`ZZ!Sgwm$ zS@|>bF<*+j-JiR8&H|ZCht!Mq?Y1)4mI7QKNjq#JI7kVF_A&RrB&Ee6`qa8|NKPP{0 z&(3PSy0nG5Kbb_cvC6^--A6m15YkL}ASR_GDPeTw5(-jSHM`ld;(b>v$a4SDaQ`W# z5uBc8Q#Zat6gBHbz6Y&E(rl~(kaX4N^_7OvuN(E-yq+v=*vWZ%@Ppy=U5b;b$ISgF zNbnL3P&^J8gN)o@+%GYt$qKzuwt`6n)6A7VBMG!bvbZTFF& zeO^S!oKUICjycT=JJ}%(-mV327|N#P)*x+blB^2_-o_$n?IT=C9bxPt(4nz$)isLj zy5um#spI@HdPfy<(|uD4@IT()-&%TH7;s(qlX_K77CcW$hgR=FNr#EU`p&rW{$%Iz zlc)U8z9oAwYnKwP=a-aT-(bmy8-@Ws0|O(Y8M2}Q-g?~PWz#;IGO6F9(m||i{Aa6d zY_)20F<*CX!3EqRDIs51tosFLZC`dU_W9ATNw0-5JqIq;cfNCG0R7YgE&f?R}cZ=#r18KA#`4Rw!|ObWpmU#(C2v zO^}N-nb=~J=f7p==n2$GHnoxC8iQSyy*m!azS|3=(+XOuMI0SI$FyA;TIlGZIBQrb zrj3bl)t~KQnGmO6dF8|EBXZEPJM02mlosM}IQ;VteJim0ZDRUA)RXfP3z|A3Z~9t= zN}CyiE)6bT-RF&K1;!TpLID^}lfEmYPTye`JD`~gl=)XPw{OrBE3SAlp8Xgk!b)%0 z1z{IPQ&$*d1HJPdHv>C?q{1Ttr-fSMqy^J43M2^>>uG0u35eL>&H z#1Y8^!89dJcx?>1tR@$4Q*Now2+phLHSiUPXDpeEDm-r$rVgyYTUAy=Hw04_)0W`E zZ!U)?r(NY%jqsoKsKfpJqY+w_pk9m^yNSer){S0$?Z*?OfSv1u>)6Jyb*W6Sl>pGf zcpu1%_O86*d1;1yLp zawbfsE$U6Cn@mQ8t8P#@z$&ijgPU}`DGA|_6q`Vw`AWF)HbARL2tN0kcD?_V#h{dt zPy86@p%COwCD%UPM#Maj{aS#j9(iJFbg|gvyOs4TiG?KuB`7h3E`GK;_z5om@W-Wx lRiJdELAXvWHBu%vq|uU4;5u)KP{7Pp*3slpKh(u@{~LKP`HcVo literal 0 HcmV?d00001