diff --git a/packages/LICENSE b/packages/LICENSE
deleted file mode 100644
index 9cecc1d..0000000
--- a/packages/LICENSE
+++ /dev/null
@@ -1,674 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc.
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- {one line to give the program's name and a brief idea of what it does.}
- Copyright (C) {year} {name of author}
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see .
-
-Also add information on how to contact you by electronic and paper mail.
-
- If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
- {project} Copyright (C) {year} {fullname}
- This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
- You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-.
-
- The GNU General Public License does not permit incorporating your program
-into proprietary programs. If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. But first, please read
-.
diff --git a/packages/a-20180907.953.el b/packages/a-20180907.953.el
new file mode 100644
index 0000000..b699160
--- /dev/null
+++ b/packages/a-20180907.953.el
@@ -0,0 +1,347 @@
+;;; a.el --- Associative data structure functions -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2017 Arne Brasseur
+
+;; Author: Arne Brasseur
+;; URL: https://github.com/plexus/a.el
+;; Package-Version: 20180907.953
+;; Keywords: lisp
+;; Version: 0.1.1
+;; Package-Requires: ((emacs "25"))
+
+;; 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 GNU Emacs; see the file COPYING. If not, write to
+;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+
+;;; Commentary:
+
+;; Library for dealing with associative data structures: alists, hash-maps, and
+;; vectors (for vectors, the indices are treated as keys).
+;;
+;; This library is largely inspired by Clojure, it has many of the functions
+;; found in clojure.core, prefixed with `a-'. All functions treat their
+;; arguments as immutable, so e.g. `a-assoc' will clone the hash-table or alist
+;; it is given. Keep this in mind when writing performance sensitive code.
+
+;;; Code:
+
+(eval-when-compile (require 'subr-x)) ;; for things like hash-table-keys
+
+(require 'cl-lib)
+(require 'seq)
+
+(defun a-associative-p (obj)
+ (or (not obj)
+ (hash-table-p obj)
+ (and (consp obj) (consp (car obj)))))
+
+(defalias 'a-associative? 'a-associative-p)
+
+(defun a-get (map key &optional not-found)
+ "Return the value MAP mapped to KEY, NOT-FOUND or nil if key not present."
+ (cond
+ ;; own implementation instead of alist-get so keys are checked with equal
+ ;; instead of eq
+ ((listp map)
+ (a--alist-get map key not-found))
+
+ ((vectorp map)
+ (if (a-has-key? map key)
+ (aref map key)
+ not-found))
+
+ ((hash-table-p map)
+ (gethash key map not-found))
+ (t (user-error "Not associative: %S" map))))
+
+(defun a--alist-get (map key &optional not-found)
+ "Like alist-get, but uses equal instead of eq to look up in map MAP key KEY.
+Returns NOT-FOUND if the key is not present, or `nil' if
+NOT-FOUND is not specified."
+ (cl-block nil
+ (seq-doseq (pair map)
+ (when (equal (car pair) key)
+ (cl-return (cdr pair))))
+ not-found))
+
+(defun a-get-in (m ks &optional not-found)
+ "Look up a value in a nested associative structure.
+
+Given a data structure M, and a sequence of keys KS, find the
+value found by using each key in turn to do a lookup in the next
+\"layer\". Return `nil' if the key is not present, or the NOT-FOUND
+value if supplied."
+ (let ((result m))
+ (cl-block nil
+ (seq-doseq (k ks)
+ (if (a-has-key? result k)
+ (setq result (a-get result k))
+ (cl-return not-found)))
+ result)))
+
+(defmacro a-get* (&rest keys)
+ "Look up a value in a nested associative structure.
+
+Like a-get-in, but takes the key sequence KEYS directly as vararg
+arguments, rather than as a single sequence."
+ (cl-labels ((rec (keys)
+ `(a-get ,(if (and (consp (cdr keys))
+ (cddr keys))
+ (rec (cdr keys))
+ (cadr keys))
+ ,(car keys))))
+ (rec (nreverse keys))))
+
+(defun a-has-key (coll k)
+ "Check if the given associative collection COLL has a certain key K."
+ (cond
+ ((listp coll) (not (eq (a--alist-get coll k :not-found) :not-found)))
+ ((vectorp coll) (and (integerp k) (< -1 k (length coll))))
+ ((hash-table-p coll) (not (eq (gethash k coll :not-found) :not-found)))
+ (t (user-error "Not associative: %S" coll))))
+
+(defalias 'a-has-key? 'a-has-key)
+
+(defun a-assoc-1 (coll k v)
+ "Like `a-assoc', (in COLL assoc K with V) but only takes a single k-v pair.
+Internal helper function."
+ (cond
+ ((listp coll)
+ (if (a-has-key? coll k)
+ (mapcar (lambda (entry)
+ (if (equal (car entry) k)
+ (cons k v)
+ entry))
+ coll)
+ (cons (cons k v) coll)))
+
+ ((vectorp coll)
+ (if (and (integerp k) (> k 0))
+ (if (< k (length coll))
+ (let ((copy (copy-sequence coll)))
+ (aset copy k v)
+ copy)
+ (vconcat coll (make-list (- k (length coll)) nil) (list v)))))
+
+ ((hash-table-p coll)
+ (let ((copy (copy-hash-table coll)))
+ (puthash k v copy)
+ copy))))
+
+(defun a-assoc (coll &rest kvs)
+ "Return an updated collection COLL, associating values with keys KVS."
+ (when (not (cl-evenp (a-count kvs)))
+ (user-error "a-assoc requires an even number of arguments!"))
+ (seq-reduce (lambda (coll kv)
+ (seq-let [k v] kv
+ (a-assoc-1 coll k v)))
+ (seq-partition kvs 2)
+ coll))
+
+(defun a-keys (coll)
+ "Return the keys in the collection COLL."
+ (cond
+ ((listp coll)
+ (mapcar #'car coll))
+
+ ((hash-table-p coll)
+ (hash-table-keys coll))))
+
+(defun a-vals (coll)
+ "Return the values in the collection COLL."
+ (cond
+ ((listp coll)
+ (mapcar #'cdr coll))
+
+ ((hash-table-p coll)
+ (hash-table-values coll))))
+
+(defun a-reduce-kv (fn from coll)
+ "Reduce with FN starting from FROM the collection COLL.
+Reduce an associative collection COLL, starting with an initial
+value of FROM. The reducing function FN receives the intermediate
+value, key, and value."
+ (seq-reduce (lambda (acc key)
+ (funcall fn acc key (a-get coll key)))
+ (a-keys coll)
+ from))
+
+(defun a-count (coll)
+ "Count the number of key-value pairs in COLL.
+Like length, but can also return the length of hash tables."
+ (cond
+ ((seqp coll)
+ (length coll))
+
+ ((hash-table-p coll)
+ (hash-table-count coll))))
+
+(defun a-equal (a b)
+ "Compare collections A, B for value equality.
+
+Associative collections (hash tables and a-lists) are considered
+equal if they contain equal key-value pairs, regardless of order.
+
+Sequences (lists or vectors) are considered equal if they contain
+the same elements in the same order.
+
+Collection elements are compared using `a-equal'. In other words,
+the equality check is recursive, resulting in a \"deep\" equality
+check.
+
+Anything that isn't associative or a sequence is compared with
+`equal'."
+ (cond
+ ((and (a-associative? a) (a-associative? b))
+ (or (equal a b)
+ (when (eq (a-count a) (a-count b))
+ (cl-block nil
+ (seq-doseq (k (a-keys a))
+ (when (not (a-equal (a-get a k) (a-get b k)))
+ (cl-return nil)))
+ t))))
+ ((and (sequencep a) (sequencep b))
+ (and (eq (length a) (length b))
+ (or (and (seq-empty-p a) (seq-empty-p b))
+ (and (a-equal (elt a 0) (elt b 0))
+ (a-equal (seq-drop a 1) (seq-drop b 1))))))
+ (t
+ (equal a b))))
+
+(defalias 'a-equal? 'a-equal)
+
+(defun a-merge (&rest colls)
+ "Merge multiple associative collections.
+Return the type of the first collection COLLS."
+ (seq-reduce (lambda (this that)
+ (a-reduce-kv (lambda (coll k v)
+ (a-assoc coll k v))
+ this
+ that))
+ (cdr colls)
+ (car colls)))
+
+(defun a-merge-with (f &rest colls)
+ "Merge multiple associative collections.
+Return the type of the first collection COLLS. If a key exists in
+both, then combine the associated values by calling f on them."
+ (seq-reduce (lambda (this that)
+ (a-reduce-kv (lambda (coll k v)
+ (a-assoc coll k (if (a-has-key coll k)
+ (funcall f v (a-get coll k))
+ v)))
+ this
+ that))
+ (cdr colls)
+ (car colls)))
+
+(defun a-alist (&rest kvs)
+ "Create an association list from the given keys and values KVS.
+Arguments are simply provided in sequence, rather than as lists or cons cells.
+For example: (a-alist :foo 123 :bar 456)"
+ (mapcar (lambda (kv) (cons (car kv) (cadr kv))) (seq-partition kvs 2)))
+
+(defalias 'a-list 'a-alist)
+
+(defun a-hash-table (&rest kvs)
+ "Create a hash table from the given keys and values KVS.
+Arguments are simply provided in sequence, rather than as lists
+or cons cells. As \"test\" for the hash table, equal is used. The
+hash table is created without extra storage space, so with a size
+equal to amount of key-value pairs, since it is assumed to be
+treated as immutable.
+For example: (a-hash-table :foo 123 :bar 456)"
+ (let* ((kv-pairs (seq-partition kvs 2))
+ (hash-map (make-hash-table :test 'equal :size (length kv-pairs))))
+ (seq-do (lambda (pair)
+ (puthash (car pair) (cadr pair) hash-map))
+ kv-pairs)
+ hash-map))
+
+(defun a-assoc-in (coll keys value)
+ "In collection COLL, at location KEYS, associate value VALUE.
+Associates a value in a nested associative collection COLL, where
+KEYS is a sequence of keys and VALUE is the new value and returns
+a new nested structure. If any levels do not exist, association
+lists will be created."
+ (cl-case (length keys)
+ (0 coll)
+ (1 (a-assoc-1 coll (elt keys 0) value))
+ (t (a-assoc-1 coll
+ (elt keys 0)
+ (a-assoc-in (a-get coll (elt keys 0))
+ (seq-drop keys 1)
+ value)))))
+
+(defun a-dissoc--list (list keys)
+ "Return updated LIST with KEYS removed.
+Internal helper. Use `a-dissoc' instead."
+ (a-reduce-kv (lambda (res k v)
+ (if (member k keys)
+ res
+ (cons (cons k v) res)))
+ nil
+ list))
+
+(defun a-dissoc--hash-table (table keys)
+ "Return updated TABLE with KEYS removed.
+Internal helper. Use `a-dissoc' instead."
+ (let ((new-table (make-hash-table :size (hash-table-count table)
+ :test (hash-table-test table)))
+ (rest-keys (seq-remove (lambda (k)
+ (member k keys))
+ (a-keys table))))
+ (seq-doseq (k rest-keys)
+ (puthash k (gethash k table) new-table))
+ new-table))
+
+(defun a-dissoc (coll &rest keys)
+ "Return an updated version of collection COLL with the KEY removed."
+ (cond
+ ((listp coll) (a-dissoc--list coll keys))
+ ((hash-table-p coll) (a-dissoc--hash-table coll keys))))
+
+(defun a-update (coll key fn &rest args)
+ "In collection COLL, at location KEY, apply FN with extra args ARGS.
+'Updates' a value in an associative collection COLL, where KEY is
+a key and FN is a function that will take the old value and any
+supplied args and return the new value, and returns a new
+structure. If the key does not exist, nil is passed as the old
+value."
+ (a-assoc-1 coll
+ key
+ (apply #'funcall fn (a-get coll key) args)))
+
+(defun a-update-in (coll keys fn &rest args)
+ "In collection COLL, at location KEYS, apply FN with extra args ARGS.
+'Updates' a value in a nested associative collection COLL, where
+KEYS is a sequence of keys and FN is a function that will take
+the old value and any supplied ARGS and return the new value, and
+returns a new nested structure. If any levels do not exist,
+association lists will be created."
+ (cl-case (length keys)
+ (0 coll)
+ (1 (apply #'a-update coll (elt keys 0) fn args))
+ (t (a-assoc-1 coll
+ (elt keys 0)
+ (apply #'a-update-in
+ (a-get coll (elt keys 0))
+ (seq-drop keys 1)
+ fn
+ args)))))
+
+(provide 'a)
+;;; a.el ends here
diff --git a/packages/ac-php-core-20181115.1442.tar b/packages/ac-php-core-20181115.1442.tar
deleted file mode 100644
index 45fb293..0000000
Binary files a/packages/ac-php-core-20181115.1442.tar and /dev/null differ
diff --git a/packages/ac-php-core-20190816.548.tar b/packages/ac-php-core-20190816.548.tar
new file mode 100644
index 0000000..ddd0f03
Binary files /dev/null and b/packages/ac-php-core-20190816.548.tar differ
diff --git a/packages/ace-link-20181103.2106.el b/packages/ace-link-20190716.920.el
similarity index 86%
rename from packages/ace-link-20181103.2106.el
rename to packages/ace-link-20190716.920.el
index 1af3e53..1e0d710 100644
--- a/packages/ace-link-20181103.2106.el
+++ b/packages/ace-link-20190716.920.el
@@ -4,7 +4,7 @@
;; Author: Oleh Krehel
;; URL: https://github.com/abo-abo/ace-link
-;; Package-Version: 20181103.2106
+;; Package-Version: 20190716.920
;; Version: 0.5.0
;; Package-Requires: ((avy "0.4.0"))
;; Keywords: convenience, links, avy
@@ -51,7 +51,7 @@
(cond ((eq major-mode 'Info-mode)
(ace-link-info))
((member major-mode '(help-mode package-menu-mode geiser-doc-mode elbank-report-mode
- elbank-overview-mode slime-trace-dialog-mode))
+ elbank-overview-mode slime-trace-dialog-mode helpful-mode))
(ace-link-help))
((eq major-mode 'woman-mode)
(ace-link-woman))
@@ -64,18 +64,24 @@
(ace-link-compilation))
((eq major-mode 'gnus-article-mode)
(ace-link-gnus))
- ((eq major-mode 'org-mode)
+ ((eq major-mode 'mu4e-view-mode)
+ (ace-link-mu4e))
+ ((memq major-mode '(org-mode erc-mode elfeed-show-mode term-mode))
(ace-link-org))
((eq major-mode 'org-agenda-mode)
(ace-link-org-agenda))
((eq major-mode 'Custom-mode)
- (ace-link-org))
+ (ace-link-custom))
((eq major-mode 'sldb-mode)
(ace-link-sldb))
((eq major-mode 'slime-xref-mode)
(ace-link-slime-xref))
((eq major-mode 'slime-inspector-mode)
(ace-link-slime-inspector))
+ ((eq major-mode 'indium-inspector-mode)
+ (ace-link-indium-inspector))
+ ((eq major-mode 'indium-debugger-frames-mode)
+ (ace-link-indium-debugger-frames))
((and ace-link-fallback-function
(funcall ace-link-fallback-function)))
(t
@@ -89,7 +95,7 @@
"Open a visible link in an `Info-mode' buffer."
(interactive)
(let ((pt (avy-with ace-link-info
- (avy--process
+ (avy-process
(mapcar #'cdr
(ace-link--info-collect))
(avy--style-fn avy-style)))))
@@ -141,7 +147,7 @@
"Open a visible link in a `help-mode' buffer."
(interactive)
(let ((pt (avy-with ace-link-help
- (avy--process
+ (avy-process
(mapcar #'cdr (ace-link--help-collect))
(avy--style-fn avy-style)))))
(ace-link--help-action pt)))
@@ -171,7 +177,7 @@
"Open a visible link in a `woman-mode' buffer."
(interactive)
(let ((pt (avy-with ace-link-woman
- (avy--process
+ (avy-process
(mapcar #'cdr (ace-link--woman-collect))
(avy--style-fn avy-style)))))
(ace-link--woman-action pt)))
@@ -200,7 +206,7 @@
"Open a visible link in an `eww-mode' buffer."
(interactive)
(let ((pt (avy-with ace-link-eww
- (avy--process
+ (avy-process
(mapcar #'cdr (ace-link--eww-collect))
(avy--style-fn avy-style)))))
(ace-link--eww-action pt)))
@@ -242,7 +248,7 @@
(interactive)
(require 'w3m)
(let ((pt (avy-with ace-link-w3m
- (avy--process
+ (avy-process
(mapcar #'cdr (ace-link--w3m-collect))
(avy--style-fn avy-style)))))
(ace-link--w3m-action pt)))
@@ -282,7 +288,7 @@
"Open a visible link in a `compilation-mode' buffer."
(interactive)
(let ((pt (avy-with ace-link-compilation
- (avy--process
+ (avy-process
(mapcar #'cdr (ace-link--eww-collect))
(avy--style-fn avy-style)))))
(ace-link--compilation-action pt)))
@@ -302,7 +308,7 @@
(when (eq major-mode 'gnus-summary-mode)
(gnus-summary-widget-forward 1))
(let ((pt (avy-with ace-link-gnus
- (avy--process
+ (avy-process
(ace-link--gnus-collect)
(avy--style-fn avy-style)))))
(ace-link--gnus-action pt)))
@@ -340,11 +346,13 @@
(defun ace-link-mu4e ()
"Open a visible link in an `mu4e-view-mode' buffer."
(interactive)
- (let ((pt (avy-with ace-link-mu4e
- (avy--process
- (mapcar #'cdr (ace-link--mu4e-collect))
- (avy--style-fn avy-style)))))
- (ace-link--mu4e-action pt)))
+ (if (bound-and-true-p mu4e-view-use-gnus)
+ (ace-link-gnus)
+ (let ((pt (avy-with ace-link-mu4e
+ (avy-process
+ (mapcar #'cdr (ace-link--mu4e-collect))
+ (avy--style-fn avy-style)))))
+ (ace-link--mu4e-action pt))))
(declare-function shr-browse-url "shr")
(declare-function mu4e~view-browse-url-from-binding "ext:mu4e-view")
@@ -405,7 +413,7 @@
(interactive)
(require 'org)
(let ((pt (avy-with ace-link-org
- (avy--process
+ (avy-process
(mapcar #'cdr (ace-link--org-collect))
(avy--style-fn avy-style)))))
(ace-link--org-action pt)))
@@ -445,7 +453,7 @@
(interactive)
(require 'org-agenda)
(let ((pt (avy-with ace-link-org-agenda
- (avy--process
+ (avy-process
(mapcar #'cdr (ace-link--org-agenda-collect))
(avy--style-fn avy-style)))))
(ace-link--org-agenda-action pt)))
@@ -476,7 +484,7 @@
"Open a visible link in an `xref--xref-buffer-mode' buffer."
(interactive)
(let ((pt (avy-with ace-link-xref
- (avy--process
+ (avy-process
(ace-link--xref-collect)
(avy--style-fn avy-style)))))
(ace-link--xref-action pt)))
@@ -506,7 +514,7 @@
"Open a visible link in an `Custom-mode' buffer."
(interactive)
(let ((pt (avy-with ace-link-custom
- (avy--process
+ (avy-process
(ace-link--custom-collect)
(avy--style-fn avy-style)))))
(ace-link--custom-action pt)))
@@ -541,7 +549,7 @@
"Open a visible link in a goto-address buffer."
(interactive)
(let ((pt (avy-with ace-link-addr
- (avy--process
+ (avy-process
(ace-link--addr-collect)
(avy--style-fn avy-style)))))
(ace-link--addr-action pt)))
@@ -564,7 +572,7 @@
"Interact with a frame or local variable in a sldb buffer."
(interactive)
(let ((pt (avy-with ace-link-sldb
- (avy--process
+ (avy-process
(ace-link--sldb-collect)
(avy--style-fn avy-style)))))
(ace-link--sldb-action pt)))
@@ -606,7 +614,7 @@
"Open a visible link in an `slime-xref-mode' buffer."
(interactive)
(let ((pt (avy-with ace-link-slime-xref
- (avy--process
+ (avy-process
(ace-link--slime-xref-collect)
(avy--style-fn avy-style)))))
(ace-link--slime-xref-action pt)))
@@ -636,7 +644,7 @@
`slime-inspector-mode' buffer."
(interactive)
(let ((pt (avy-with ace-link-slime-inspector
- (avy--process
+ (avy-process
(ace-link--slime-inspector-collect)
(avy--style-fn avy-style)))))
(ace-link--slime-inspector-action pt)))
@@ -665,10 +673,75 @@
(setq pt (next-property-change pt)))
(nreverse candidates)))
+;;* `ace-link-indium-inspector'
+;;;###autoload
+(defun ace-link-indium-inspector ()
+ "Interact with a value, an action or a range button in a
+`indium-inspector-mode' buffer."
+ (interactive)
+ (let ((pt (avy-with ace-link-indium-inspector
+ (avy-process
+ (ace-link--indium-inspector-collect)
+ (avy--style-fn avy-style)))))
+ (ace-link--indium-inspector-action pt)))
+
+(defun ace-link--indium-inspector-action (pt)
+ (when (numberp pt)
+ (goto-char pt)
+ (indium-follow-link)))
+
+(defun ace-link--indium-inspector-collect ()
+ "Collect the positions of visible links in the current `indium-inspector-mode' buffer."
+ (let ((candidates)
+ (old-position))
+ (save-excursion
+ (goto-char (point-max))
+ (setq old-position (point))
+ (indium-inspector-previous-reference)
+ (while (not (= (point) old-position))
+ (push (point) candidates)
+ (setq old-position (point))
+ (indium-inspector-previous-reference)))
+ candidates))
+
+;;* `ace-link-indium-debugger-frames'
+;;;###autoload
+(defun ace-link-indium-debugger-frames ()
+ "Interact with a value, an action or a range button in a
+`indium-debugger-frames-mode' buffer."
+ (interactive)
+ (let ((pt (avy-with ace-link-indium-debugger-frames
+ (avy-process
+ (ace-link--indium-debugger-frames-collect)
+ (avy--style-fn avy-style)))))
+ (ace-link--indium-debugger-frames-action pt)))
+
+(defun ace-link--indium-debugger-frames-action (pt)
+ (when (numberp pt)
+ (goto-char pt)
+ (indium-follow-link)))
+
+(defun ace-link--indium-debugger-frames-collect ()
+ "Collect the positions of visible links in the current `indium-debugger-frames-mode' buffer."
+ (let ((candidates)
+ (old-position))
+ (save-excursion
+ (goto-char (point-max))
+ (setq old-position (point))
+ (indium-debugger-frames-previous-frame)
+ (while (and (not (= (point) old-position)) (not (= (point) (point-min))))
+ (push (point) candidates)
+ (setq old-position (point))
+ (indium-debugger-frames-previous-frame)))
+ candidates))
+
;;* Bindings
(defvar eww-link-keymap)
(defvar eww-mode-map)
(defvar custom-mode-map)
+(declare-function indium-follow-link "ext:indium")
+(declare-function indium-inspector-previous-reference "ext:indium")
+(declare-function indium-debugger-frames-previous-frame "ext:indium")
;;;###autoload
(defun ace-link-setup-default (&optional key)
@@ -731,7 +804,13 @@
(define-key elbank-overview-mode-map ,key 'ace-link-help)))
(eval-after-load "elbank-report"
`(progn
- (define-key elbank-report-mode-map ,key 'ace-link-help))))
+ (define-key elbank-report-mode-map ,key 'ace-link-help)))
+ (eval-after-load "indium-inspector"
+ `(progn
+ (define-key indium-inspector-mode-map ,key 'ace-link-indium-inspector)))
+ (eval-after-load "indium-debugger"
+ `(progn
+ (define-key indium-debugger-frames-mode-map ,key 'ace-link-indium-debugger-frames))))
(provide 'ace-link)
diff --git a/packages/ace-pinyin-20170501.626.el b/packages/ace-pinyin-20190123.402.el
similarity index 98%
rename from packages/ace-pinyin-20170501.626.el
rename to packages/ace-pinyin-20190123.402.el
index a0a21d5..7f66cf9 100644
--- a/packages/ace-pinyin-20170501.626.el
+++ b/packages/ace-pinyin-20190123.402.el
@@ -4,7 +4,7 @@
;; Author: Junpeng Qiu
;; URL: https://github.com/cute-jumper/ace-pinyin
-;; Package-Version: 20170501.626
+;; Package-Version: 20190123.402
;; Version: 0.2
;; Package-Requires: ((avy "0.2.0") (pinyinlib "0.1.0"))
;; Keywords: extensions
@@ -338,7 +338,7 @@ Default value is only using simplified Chinese characters.")
(let ((regexp (ace-pinyin--build-regexp query-char prefix)))
(if ace-pinyin-use-avy
(avy-with avy-goto-char
- (avy--generic-jump regexp nil avy-style))
+ (avy--generic-jump regexp nil))
(if ace-jump-current-mode (ace-jump-done))
(if (eq (ace-jump-char-category query-char) 'other)
(error "[AceJump] Non-printable character"))
@@ -369,8 +369,7 @@ Default value is only using simplified Chinese characters.")
(pinyinlib-build-regexp-string (string char1 char2)
(not ace-pinyin-enable-punctuation-translation)
(not ace-pinyin-simplified-chinese-only-p))
- arg
- avy-style)))
+ arg)))
(defun ace-pinyin-jump-char-in-line (char)
"Ace-pinyn replacement of `avy-goto-char-in-line'."
@@ -379,7 +378,6 @@ Default value is only using simplified Chinese characters.")
(avy--generic-jump
(ace-pinyin--build-regexp char nil)
avy-all-windows
- avy-style
(line-beginning-position)
(line-end-position))))
@@ -407,7 +405,7 @@ Default value is only using simplified Chinese characters.")
(let ((chinese-regexp (ace-pinyin--build-regexp char t)))
(unless (string= chinese-regexp "")
(concat "\\|" chinese-regexp))))))))
- (avy--generic-jump regex arg avy-style))))
+ (avy--generic-jump regex arg))))
(defun ace-pinyin-goto-subword-0 (&optional arg predicate)
"Ace-pinyin replacement of `avy-goto-subword-0'."
@@ -461,7 +459,7 @@ Default value is only using simplified Chinese characters.")
(not ace-pinyin-simplified-chinese-only-p))))
(if ace-pinyin-use-avy
(avy-with avy-goto-char
- (avy--generic-jump regexp nil avy-style))
+ (avy--generic-jump regexp nil))
(if ace-jump-current-mode (ace-jump-done))
(let ((case-fold-search nil))
diff --git a/packages/ace-window-20181008.1549.el b/packages/ace-window-20190708.933.el
similarity index 79%
rename from packages/ace-window-20181008.1549.el
rename to packages/ace-window-20190708.933.el
index 041b36b..7747b5a 100644
--- a/packages/ace-window-20181008.1549.el
+++ b/packages/ace-window-20190708.933.el
@@ -5,7 +5,7 @@
;; Author: Oleh Krehel
;; Maintainer: Oleh Krehel
;; URL: https://github.com/abo-abo/ace-window
-;; Package-Version: 20181008.1549
+;; Package-Version: 20190708.933
;; Version: 0.9.0
;; Package-Requires: ((avy "0.2.0"))
;; Keywords: window, location
@@ -97,10 +97,9 @@ For example, to make SPC do the same as ?a, use
"When non-nil, also display `ace-window-mode' string in the minibuffer when ace-window is active."
:type 'boolean)
-(defcustom aw-ignored-buffers '("*Calc Trail*" "*LV*")
+(defcustom aw-ignored-buffers '("*Calc Trail*" " *LV*")
"List of buffers and major-modes to ignore when choosing a window from the window list.
-Active only when `aw-ignore-on' is non-nil. Windows displaying these
-buffers can still be chosen by typing their specific labels."
+Active only when `aw-ignore-on' is non-nil."
:type '(repeat string))
(defcustom aw-ignore-on t
@@ -160,13 +159,16 @@ Consider changing this if the overlay tends to overlap with other things."
'((?x aw-delete-window "Delete Window")
(?m aw-swap-window "Swap Windows")
(?M aw-move-window "Move Window")
+ (?c aw-copy-window "Copy Window")
(?j aw-switch-buffer-in-window "Select Buffer")
(?n aw-flip-window)
(?u aw-switch-buffer-other-window "Switch Buffer Other Window")
- (?c aw-split-window-fair "Split Fair Window")
+ (?e aw-execute-command-other-window "Execute Command Other Window")
+ (?F aw-split-window-fair "Split Fair Window")
(?v aw-split-window-vert "Split Vert Window")
(?b aw-split-window-horz "Split Horz Window")
(?o delete-other-windows "Delete Other Windows")
+ (?T aw-transpose-frame "Transpose Frame")
(?? aw-show-dispatch-help))
"List of actions for `aw-dispatch-default'.
Each action is a list of either:
@@ -198,6 +200,10 @@ or
(t (:foreground "gray100" :underline nil)))
"Face for each window's leading char.")
+(defface aw-minibuffer-leading-char-face
+ '((t :inherit aw-leading-char-face))
+ "Face for minibuffer leading char.")
+
(defface aw-background-face
'((t (:foreground "gray40")))
"Face for whole window background during selection.")
@@ -218,6 +224,8 @@ or
(or (memq (buffer-local-value 'major-mode (window-buffer window))
aw-ignored-buffers)
(member (buffer-name (window-buffer window)) aw-ignored-buffers)))
+ ;; ignore child frames
+ (and (fboundp 'frame-parent) (frame-parent (window-frame window)))
;; Ignore selected window if `aw-ignore-current' is non-nil.
(and aw-ignore-current
(equal window (selected-window)))
@@ -266,6 +274,14 @@ or
"Store the read-only empty buffers which had to be modified.
Modify them back eventually.")
+(defvar aw--windows-hscroll nil
+ "List of (window . hscroll-columns) items, each listing a window whose
+ horizontal scroll will be restored upon ace-window action completion.")
+
+(defvar aw--windows-points nil
+ "List of (window . point) items. The point position had to be
+ moved in order to display the overlay.")
+
(defun aw--done ()
"Clean up mode line and overlays."
;; mode line
@@ -279,7 +295,23 @@ Modify them back eventually.")
(when (string= (buffer-string) " ")
(let ((inhibit-read-only t))
(delete-region (point-min) (point-max))))))
- (setq aw-empty-buffers-list nil))
+ (setq aw-empty-buffers-list nil)
+ (aw--restore-windows-hscroll)
+ (let (c)
+ (while (setq c (pop aw--windows-points))
+ (with-selected-window (car c)
+ (goto-char (cdr c))))))
+
+(defun aw--restore-windows-hscroll ()
+ "Restore horizontal scroll of windows from `aw--windows-hscroll' list."
+ (let (wnd hscroll)
+ (mapc (lambda (wnd-and-hscroll)
+ (setq wnd (car wnd-and-hscroll)
+ hscroll (cdr wnd-and-hscroll))
+ (when (window-live-p wnd)
+ (set-window-hscroll wnd hscroll)))
+ aw--windows-hscroll))
+ (setq aw--windows-hscroll nil))
(defun aw--overlay-str (wnd pos path)
"Return the replacement text for an overlay in WND at POS,
@@ -310,39 +342,70 @@ accessible by typing PATH."
(max 0 (1- (string-width old-str)))
?\ ))))))
+(defun aw--point-visible-p ()
+ "Return non-nil if point is visible in the selected window.
+Return nil when horizontal scrolling has moved it off screen."
+ (and (>= (- (current-column) (window-hscroll)) 0)
+ (< (- (current-column) (window-hscroll))
+ (window-width))))
+
(defun aw--lead-overlay (path leaf)
"Create an overlay using PATH at LEAF.
LEAF is (PT . WND)."
- (let ((wnd (cdr leaf)))
+ ;; Properly adds overlay in visible region of most windows except for any one
+ ;; receiving output while this function is executing, since that moves point,
+ ;; potentially shifting the added overlay outside the window's visible region.
+ (let ((wnd (cdr leaf))
+ ;; Prevent temporary movement of point from scrolling any window.
+ (scroll-margin 0))
(with-selected-window wnd
(when (= 0 (buffer-size))
(push (current-buffer) aw-empty-buffers-list)
(let ((inhibit-read-only t))
(insert " ")))
-
- (let* ((pt (car leaf))
+ ;; If point is not visible due to horizontal scrolling of the
+ ;; window, this next expression temporarily scrolls the window
+ ;; right until point is visible, so that the leading-char can be
+ ;; seen when it is inserted. When ace-window's action finishes,
+ ;; the horizontal scroll is restored by (aw--done).
+ (while (and (not (aw--point-visible-p))
+ (not (zerop (window-hscroll)))
+ (progn (push (cons (selected-window) (window-hscroll)) aw--windows-hscroll) t)
+ (not (zerop (scroll-right)))))
+ (let* ((ws (window-start))
+ (prev nil)
+ (vertical-pos (if (eq aw-char-position 'left) -1 0))
+ (horizontal-pos (if (zerop (window-hscroll)) 0 (1+ (window-hscroll))))
+ (old-pt (point))
+ (pt
+ (progn
+ ;; If leading-char is to be displayed at the top-left, move
+ ;; to the first visible line in the window, otherwise, move
+ ;; to the last visible line.
+ (move-to-window-line vertical-pos)
+ (move-to-column horizontal-pos)
+ ;; Find a nearby point that is not at the end-of-line but
+ ;; is visible so have space for the overlay.
+ (setq prev (1- (point)))
+ (while (and (>= prev ws) (/= prev (point)) (eolp))
+ (setq prev (point))
+ (unless (bobp)
+ (line-move -1 t)
+ (move-to-column horizontal-pos)))
+ (recenter vertical-pos)
+ (point)))
(ol (make-overlay pt (1+ pt) (window-buffer wnd))))
+ (if (= (aw--face-rel-height) 1)
+ (goto-char old-pt)
+ (when (/= pt old-pt)
+ (goto-char (+ pt 1))
+ (push (cons wnd old-pt) aw--windows-points)))
(overlay-put ol 'display (aw--overlay-str wnd pt path))
- (overlay-put ol 'face 'aw-leading-char-face)
+ (if (window-minibuffer-p wnd)
+ (overlay-put ol 'face 'aw-minibuffer-leading-char-face)
+ (overlay-put ol 'face 'aw-leading-char-face))
(overlay-put ol 'window wnd)
- (push ol avy--overlays-lead))
-
- (when (eq aw-char-position 'left)
- (let* ((pt
- (save-excursion
- ;; Move to the start of the last visible line in the buffer.
- (move-to-window-line -1)
- (move-beginning-of-line nil)
- ;; If this line is empty, use the previous line so we
- ;; have space for the overlay.
- (when (equal (point) (point-max))
- (forward-line -1))
- (point)))
- (ol (make-overlay pt (1+ pt) (window-buffer wnd))))
- (overlay-put ol 'display (aw--overlay-str wnd pt path))
- (overlay-put ol 'face 'aw-leading-char-face)
- (overlay-put ol 'window wnd)
- (push ol avy--overlays-lead))))))
+ (push ol avy--overlays-lead)))))
(defun aw--make-backgrounds (wnd-list)
"Create a dim background overlay for each window on WND-LIST."
@@ -429,7 +492,7 @@ The new frame is set to the same size as the previous frame, offset by
(avy-mouse-event-window char)))
((= char (aref (kbd "C-g") 0))
(throw 'done 'exit))
- ((= char aw-make-frame-char)
+ ((and aw-make-frame-char (= char aw-make-frame-char))
;; Make a new frame and perform any action on its window.
(let ((start-win (selected-window))
(end-win (frame-selected-window (aw-make-frame))))
@@ -448,13 +511,21 @@ The new frame is set to the same size as the previous frame, offset by
(if (and fn description)
(prog1 (setq aw-action fn)
(aw-set-mode-line (format " Ace - %s" description)))
- (funcall fn)
+ (if (commandp fn)
+ (call-interactively fn)
+ (funcall fn))
(throw 'done 'exit)))
(aw-clean-up-avy-current-path)
;; Prevent any char from triggering an avy dispatch command.
(let ((avy-dispatch-alist))
(avy-handler-default char)))))))
+(defcustom aw-display-mode-overlay t
+ "When nil, don't display overlays. Rely on the mode line instead."
+ :type 'boolean)
+
+(defvar ace-window-display-mode)
+
(defun aw-select (mode-line &optional action)
"Return a selected other window.
Amend MODE-LINE to the mode line for the duration of the selection."
@@ -477,7 +548,8 @@ Amend MODE-LINE to the mode line for the duration of the selection."
(when (eq aw-action 'exit)
(setq aw-action nil)))
(or (car wnd-list) start-window))
- ((and (<= (length wnd-list) aw-dispatch-when-more-than)
+ ((and (<= (+ (length wnd-list) (if (aw-ignored-p start-window) 1 0))
+ aw-dispatch-when-more-than)
(not aw-dispatch-always)
(not aw-ignore-current))
(let ((wnd (next-window nil nil next-window-scope)))
@@ -499,7 +571,10 @@ Amend MODE-LINE to the mode line for the duration of the selection."
(let* ((avy-handler-function aw-dispatch-function)
(avy-translate-char-function aw-translate-char-function)
(res (avy-read (avy-tree candidate-list aw-keys)
- #'aw--lead-overlay
+ (if (and ace-window-display-mode
+ (null aw-display-mode-overlay))
+ (lambda (_path _leaf))
+ #'aw--lead-overlay)
#'avy--remove-leading-chars)))
(if (eq res 'exit)
(setq aw-action nil)
@@ -539,6 +614,11 @@ Amend MODE-LINE to the mode line for the duration of the selection."
(aw-select " Ace - Delete Other Windows"
#'delete-other-windows))
+(declare-function transpose-frame "ext:transpose-frame")
+(defun aw-transpose-frame (w)
+ "Select any window on frame and `tranpose-frame'."
+ (transpose-frame (window-frame w)))
+
(define-obsolete-function-alias
'ace-maximize-window 'ace-delete-other-windows "0.10.0")
@@ -557,11 +637,11 @@ selected window).
Prefixed with two \\[universal-argument]'s, deletes the selected
window."
(interactive "p")
+ (setq avy-current-path "")
(cl-case arg
(0
- (setq aw-ignore-on
- (not aw-ignore-on))
- (ace-select-window))
+ (let ((aw-ignore-on (not aw-ignore-on)))
+ (ace-select-window)))
(4 (ace-swap-window))
(16 (ace-delete-window))
(t (ace-select-window))))
@@ -581,13 +661,16 @@ window."
"Return true if WND1 is less than WND2.
This is determined by their respective window coordinates.
Windows are numbered top down, left to right."
- (let ((f1 (window-frame wnd1))
- (f2 (window-frame wnd2))
- (e1 (window-edges wnd1))
- (e2 (window-edges wnd2)))
- (cond ((< (car (frame-position f1)) (car (frame-position f2)))
+ (let* ((f1 (window-frame wnd1))
+ (f2 (window-frame wnd2))
+ (e1 (window-edges wnd1))
+ (e2 (window-edges wnd2))
+ (p1 (frame-position f1))
+ (p2 (frame-position f2))
+ (nl (or (null (car p1)) (null (car p2)))))
+ (cond ((and (not nl) (< (car p1) (car p2)))
(not aw-reverse-frame-list))
- ((> (car (frame-position f1)) (car (frame-position f2)))
+ ((and (not nl) (> (car p1) (car p2)))
aw-reverse-frame-list)
((< (car e1) (car e2))
t)
@@ -657,8 +740,9 @@ Windows are numbered top down, left to right."
(mapc #'delete-overlay aw-overlays-back)
(call-interactively 'ace-window)))
-(defun aw-delete-window (window)
- "Delete window WINDOW."
+(defun aw-delete-window (window &optional kill-buffer)
+ "Delete window WINDOW.
+When KILL-BUFFER is non-nil, also kill the buffer."
(let ((frame (window-frame window)))
(when (and (frame-live-p frame)
(not (eq frame (selected-frame))))
@@ -666,7 +750,10 @@ Windows are numbered top down, left to right."
(if (= 1 (length (window-list)))
(delete-frame frame)
(if (window-live-p window)
- (delete-window window)
+ (let ((buffer (window-buffer window)))
+ (delete-window window)
+ (when kill-buffer
+ (kill-buffer buffer)))
(error "Got a dead window %S" window)))))
(defun aw-switch-buffer-in-window (window)
@@ -717,6 +804,12 @@ Switch the current window to the previous buffer."
(aw-switch-to-window window)
(switch-to-buffer buffer)))
+(defun aw-copy-window (window)
+ "Copy the current buffer to WINDOW."
+ (let ((buffer (current-buffer)))
+ (aw-switch-to-window window)
+ (switch-to-buffer buffer)))
+
(defun aw-split-window-vert (window)
"Split WINDOW vertically."
(select-window window)
@@ -743,10 +836,33 @@ Modify `aw-fair-aspect-ratio' to tweak behavior."
(aw-split-window-vert window))))
(defun aw-switch-buffer-other-window (window)
- "Switch buffer in WINDOW without selecting WINDOW."
+ "Switch buffer in WINDOW."
(aw-switch-to-window window)
- (aw--switch-buffer)
- (aw-flip-window))
+ (unwind-protect
+ (aw--switch-buffer)
+ (aw-flip-window)))
+
+(defun aw-execute-command-other-window (window)
+ "Execute a command in WINDOW."
+ (aw-switch-to-window window)
+ (unwind-protect
+ (funcall
+ (key-binding
+ (read-key-sequence
+ "Enter key sequence: ")))
+ (aw-flip-window)))
+
+(defun aw--face-rel-height ()
+ (let ((h (face-attribute 'aw-leading-char-face :height)))
+ (cond
+ ((eq h 'unspecified)
+ 1)
+ ((floatp h)
+ (max (floor h) 1))
+ ((integerp h)
+ 1)
+ (t
+ (error "unexpected: %s" h)))))
(defun aw-offset (window)
"Return point in WINDOW that's closest to top left corner.
@@ -755,10 +871,15 @@ The point is writable, i.e. it's not part of space after newline."
(beg (window-start window))
(end (window-end window))
(inhibit-field-text-motion t))
- (with-current-buffer
- (window-buffer window)
+ (with-current-buffer (window-buffer window)
(save-excursion
(goto-char beg)
+ (forward-line (1-
+ (min
+ (count-lines
+ (point)
+ (point-max))
+ (aw--face-rel-height))))
(while (and (< (point) end)
(< (- (line-end-position)
(line-beginning-position))
@@ -766,6 +887,10 @@ The point is writable, i.e. it's not part of space after newline."
(forward-line))
(+ (point) h)))))
+(defun aw--after-make-frame (f)
+ (aw-update)
+ (make-frame-visible f))
+
;;* Mode line
;;;###autoload
(define-minor-mode ace-window-display-mode
@@ -784,14 +909,14 @@ The point is writable, i.e. it's not part of space after newline."
(force-mode-line-update t)
(add-hook 'window-configuration-change-hook 'aw-update)
;; Add at the end so does not precede select-frame call.
- (add-hook 'after-make-frame-functions (lambda (_) (aw-update)) t))
+ (add-hook 'after-make-frame-functions #'aw--after-make-frame t))
(set-default
'mode-line-format
(assq-delete-all
'ace-window-display-mode
(default-value 'mode-line-format)))
(remove-hook 'window-configuration-change-hook 'aw-update)
- (remove-hook 'after-make-frame-functions 'aw-update)))
+ (remove-hook 'after-make-frame-functions 'aw--after-make-frame)))
(defun aw-update ()
"Update ace-window-path window parameter for all windows.
diff --git a/packages/aggressive-indent-20181018.236.el b/packages/aggressive-indent-20190218.2331.el
similarity index 86%
rename from packages/aggressive-indent-20181018.236.el
rename to packages/aggressive-indent-20190218.2331.el
index 3e51115..41a3d22 100644
--- a/packages/aggressive-indent-20181018.236.el
+++ b/packages/aggressive-indent-20190218.2331.el
@@ -4,7 +4,7 @@
;; Author: Artur Malabarba
;; URL: https://github.com/Malabarba/aggressive-indent-mode
-;; Package-Version: 20181018.236
+;; Package-Version: 20190218.2331
;; Version: 1.8.4
;; Package-Requires: ((emacs "24.1") (cl-lib "0.5"))
;; Keywords: indent lisp maint tools
@@ -105,7 +105,7 @@ Please include this in your report!"
(defvar aggressive-indent-mode)
-;;; Configuring indentarion
+;;; Configuring indentation
(defcustom aggressive-indent-dont-electric-modes nil
"List of major-modes where `electric-indent' should be disabled."
:type '(choice
@@ -114,10 +114,13 @@ Please include this in your report!"
:package-version '(aggressive-indent . "0.3.1"))
(defcustom aggressive-indent-excluded-modes
- '(inf-ruby-mode
+ '(elm-mode
+ haskell-mode
+ inf-ruby-mode
makefile-mode
makefile-gmake-mode
python-mode
+ sql-interactive-mode
text-mode
yaml-mode)
"Modes in which `aggressive-indent-mode' should not be activated.
@@ -407,30 +410,76 @@ or messages."
(setq aggressive-indent--changed-list
(cdr aggressive-indent--changed-list))))))
+(defun aggressive-indent--clear-change-list ()
+ "Clear cache of all changed regions. "
+ (setq aggressive-indent--changed-list nil))
+
(defcustom aggressive-indent-sit-for-time 0.05
"Time, in seconds, to wait before indenting.
If you feel aggressive-indent is causing Emacs to hang while
typing, try tweaking this number."
:type 'float)
-(defvar aggressive-indent--idle-timer nil
+(defvar-local aggressive-indent--idle-timer nil
"Idle timer used for indentation")
+;; Ripped from Emacs 27.0 subr.el.
+;; See Github Issue#111 and Emacs bug#31692.
+(defmacro aggressive-indent--while-no-input (&rest body)
+ "Execute BODY only as long as there's no pending input.
+If input arrives, that ends the execution of BODY,
+and `while-no-input' returns t. Quitting makes it return nil.
+If BODY finishes, `while-no-input' returns whatever value BODY produced."
+ (declare (debug t) (indent 0))
+ (let ((catch-sym (make-symbol "input")))
+ `(with-local-quit
+ (catch ',catch-sym
+ (let ((throw-on-input ',catch-sym)
+ val)
+ (setq val (or (input-pending-p)
+ (progn ,@body)))
+ (cond
+ ;; When input arrives while throw-on-input is non-nil,
+ ;; kbd_buffer_store_buffered_event sets quit-flag to the
+ ;; value of throw-on-input. If, when BODY finishes,
+ ;; quit-flag still has the same value as throw-on-input, it
+ ;; means BODY never tested quit-flag, and therefore ran to
+ ;; completion even though input did arrive before it
+ ;; finished. In that case, we must manually simulate what
+ ;; 'throw' in process_quit_flag would do, and we must
+ ;; reset quit-flag, because leaving it set will cause us
+ ;; quit to top-level, which has undesirable consequences,
+ ;; such as discarding input etc. We return t in that case
+ ;; because input did arrive during execution of BODY.
+ ((eq quit-flag throw-on-input)
+ (setq quit-flag nil)
+ t)
+ ;; This is for when the user actually QUITs during
+ ;; execution of BODY.
+ (quit-flag
+ nil)
+ (t val)))))))
+
(defun aggressive-indent--indent-if-changed ()
"Indent any region that changed in the last command loop."
- (when (and aggressive-indent-mode aggressive-indent--changed-list)
- (save-excursion
- (save-selected-window
- (while-no-input
- (aggressive-indent--proccess-changed-list-and-indent))))))
+ (if (not (buffer-live-p (current-buffer)))
+ (cancel-timer aggressive-indent--idle-timer)
+ (when (and aggressive-indent-mode aggressive-indent--changed-list)
+ (save-excursion
+ (save-selected-window
+ (aggressive-indent--while-no-input
+ (aggressive-indent--proccess-changed-list-and-indent))))
+ (when (timerp aggressive-indent--idle-timer)
+ (cancel-timer aggressive-indent--idle-timer)))))
(defun aggressive-indent--keep-track-of-changes (l r &rest _)
"Store the limits (L and R) of each change in the buffer."
(when aggressive-indent-mode
(push (list l r) aggressive-indent--changed-list)
- (unless (timerp aggressive-indent--idle-timer)
- (setq aggressive-indent--idle-timer
- (run-with-idle-timer aggressive-indent-sit-for-time t #'aggressive-indent--indent-if-changed)))))
+ (when (timerp aggressive-indent--idle-timer)
+ (cancel-timer aggressive-indent--idle-timer))
+ (setq aggressive-indent--idle-timer
+ (run-with-idle-timer aggressive-indent-sit-for-time t #'aggressive-indent--indent-if-changed))))
;;; Minor modes
;;;###autoload
@@ -460,12 +509,13 @@ typing, try tweaking this number."
(aggressive-indent--local-electric nil)
(aggressive-indent--local-electric t))
(add-hook 'after-change-functions #'aggressive-indent--keep-track-of-changes nil 'local)
+ (add-hook 'after-revert-hook #'aggressive-indent--clear-change-list nil 'local)
(add-hook 'before-save-hook #'aggressive-indent--proccess-changed-list-and-indent nil 'local))
;; Clean the hooks
(when (timerp aggressive-indent--idle-timer)
- (cancel-timer aggressive-indent--idle-timer)
- (setq aggressive-indent--idle-timer nil))
+ (cancel-timer aggressive-indent--idle-timer))
(remove-hook 'after-change-functions #'aggressive-indent--keep-track-of-changes 'local)
+ (remove-hook 'after-revert-hook #'aggressive-indent--clear-change-list 'local)
(remove-hook 'before-save-hook #'aggressive-indent--proccess-changed-list-and-indent 'local)
(remove-hook 'post-command-hook #'aggressive-indent--softly-indent-defun 'local)))
diff --git a/packages/ahk-mode-20181113.1238.el b/packages/ahk-mode-20190323.623.el
similarity index 99%
rename from packages/ahk-mode-20181113.1238.el
rename to packages/ahk-mode-20190323.623.el
index 9ee62ea..ca96d33 100644
--- a/packages/ahk-mode-20181113.1238.el
+++ b/packages/ahk-mode-20190323.623.el
@@ -4,7 +4,7 @@
;; Author: Rich Alesi
;; URL: https://github.com/ralesi/ahk-mode
-;; Package-Version: 20181113.1238
+;; Package-Version: 20190323.623
;; Version: 1.5.6
;; Keywords: ahk, AutoHotkey, hotkey, keyboard shortcut, automation
;; Package-Requires: ((emacs "24.3"))
@@ -181,9 +181,11 @@
;;; imenu support
(defconst ahk-imenu-generic-expression
- '(("Functions" "^\s*\\(.*\\)(.*)[\n]{" 1)
- ("Labels" "^\s*\\([^:]+\\):\n" 1)
- ("Keybindings" "^\s*\\(.+?\\)::" 1))
+ '(("Functions" "^[ \t]*\\([^ ]+\\)(.*)[\n]{" 1)
+ ("Labels" "^[ \t]*\\([^:;]+\\):\n" 1)
+ ("Keybindings" "^[ \t]*\\([^;: \t\r\n\v\f].*?\\)::" 1)
+ ("Hotstrings" "^[ \t]*\\(:.*?:.*?::\\)" 1)
+ ("Comments" "^;imenu \\(.+\\)" 1))
"imenu index for `ahk-mode'")
(defun ahk-run-script ()
diff --git a/packages/alchemist-20180312.1304.tar b/packages/alchemist-20180312.1304.tar
index 5711c45..6b394e8 100644
Binary files a/packages/alchemist-20180312.1304.tar and b/packages/alchemist-20180312.1304.tar differ
diff --git a/packages/alda-mode-20180608.605.el b/packages/alda-mode-20180608.605.el
new file mode 100644
index 0000000..5e98c60
--- /dev/null
+++ b/packages/alda-mode-20180608.605.el
@@ -0,0 +1,430 @@
+;;; alda-mode.el --- An Alda major mode -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2016-2017 Jay Kamat
+;; Author: Jay Kamat
+;; Version: 0.3.0
+;; Package-Version: 20180608.605
+;; Keywords: alda, highlight
+;; URL: http://gitlab.com/jgkamat/alda-mode
+;; Package-Requires: ((emacs "24.0"))
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see .
+
+;;; Commentary:
+;; This package provides syntax highlighting and basic alda integration.
+;; Activate font-lock-mode to use the syntax features, and run 'alda-play-region' to play song files
+;;
+;; Variables:
+;; alda-binary-location: Set to the location of the binary executable.
+;; If nil, alda-mode will search for your binary executable on your path
+;; If set to a string, alda-mode will use that binary instead of 'alda' on your path.
+;; Ex: (setq alda-binary-location "/usr/local/bin/alda")
+;; Ex: (setq alda-binary-location nil) ;; Use default alda location
+;; alda-ess-keymap: Whether to add the default ess keymap.
+;; If nil, alda-mode will not add the default ess keymaps.
+;; Ex: (setq alda-ess-keymap nil) ;; before (require 'alda)
+
+;;; Constants:
+
+(defconst +alda-output-buffer+ "*alda-output*")
+(defconst +alda-output-name+ "alda-playback")
+(defconst +alda-comment-str+ "#")
+
+(require 'comint)
+
+;;; Code:
+;;;; -- Variables --
+(defvar *alda-history*
+ ""
+ "Holds the history to be sent to the alda server.
+If you are experiencing problems, try clearing your history with 'alda-history-clear'.")
+
+;;;; -- Region playback functions --
+
+(defgroup Alda nil
+ "Alda customization options"
+ :group 'applications)
+
+(defgroup alda-mode-inf
+ nil
+ "Mode to interact with a Alda interpreter."
+ :group 'Alda
+ :tag "Inferior Alda")
+
+(defcustom alda-binary-location nil
+ "Alda binary location for `alda-mode'.
+When set to nil, will attempt to use the binary found on your $PATH.
+This must be a _full_ path to your alda binary."
+ :type 'string
+ :group 'Alda)
+
+;;;; -- Alda inferior process definitions --
+
+(defconst alda-inf-buffer-name "*inferior-alda*")
+
+(define-derived-mode alda-mode-inf comint-mode "Inferior Alda"
+ "Major mode for interacting with a Alda interpreter.
+
+\\{inferior-alda-mode-map\\}"
+ (define-key alda-mode-inf-map [(meta return)] 'comint-accumulate)
+
+ ;; Comint configuration
+ (make-local-variable 'comint-input-sender)
+ (setq comint-input-sender 'alda-input-sender))
+
+(defun alda-input-sender (proc string)
+ (comint-send-string proc string)
+ (comint-send-string proc "\n"))
+
+(defun alda-interpreter-running-p-1 ()
+ ;; True iff a Alda interpreter is currently running in a buffer.
+ (comint-check-proc alda-inf-buffer-name))
+
+(defun alda-check-or-start-interpreter ()
+ (unless (alda-interpreter-running-p-1)
+ (alda-run-alda)))
+
+(defun alda-location ()
+ "Return what 'alda' should be called as in the shell based on 'alda-binary-location' or the path."
+ (if alda-binary-location
+ alda-binary-location
+ (locate-file "alda" exec-path)))
+
+(defun alda-repl ()
+ "Return the 'alda' repl start command"
+ (format "%s repl" (alda-location)))
+
+(defun alda-run-alda ()
+ "Run a Alda interpreter in an Emacs buffer"
+ (interactive)
+ (let* ((cmd-line (alda-repl))
+ (cmd/args (split-string cmd-line)))
+ (unless (alda-interpreter-running-p-1)
+ (set-buffer
+ (apply 'make-comint "inferior-alda" (car cmd/args) nil (cdr cmd/args)))
+ (alda-mode-inf)
+ (pop-to-buffer alda-inf-buffer-name))))
+
+(defun alda-switch-to-interpreter ()
+ "Switch to buffer containing the interpreter"
+ (interactive)
+ (alda-check-or-start-interpreter)
+ (switch-to-buffer-other-window alda-inf-buffer-name))
+
+(defcustom alda-ess-keymap t
+ "Whether to use ess keymap in 'alda-mode'.
+When set to nil, will not set any ess keybindings"
+ :type 'boolean
+ :group 'Alda)
+
+(defcustom alda-play-region-in-repl nil
+ "Whether to send alda code region to repl in 'alda-mode'.
+When set to nil, will not set to repl"
+ :type 'boolean
+ :group 'Alda)
+
+(defun alda-server ()
+ "Start an alda server in an Emacs process."
+ (interactive)
+ (start-process +alda-output-name+ +alda-output-buffer+ (alda-location) "server"))
+
+(defun alda-run-cmd (&rest args)
+ "Run a given alda command with specified args.
+Argument ARGS a list of arguments to pass to alda"
+ (interactive "sEnter alda command: ")
+ (let ((server-down
+ (if (string-match "[Ss]erver [Dd]own" (shell-command-to-string (concat (alda-location) " status")))
+ (progn (message "Alda server down, starting in Emacs.") t)
+ nil)))
+ (if (not (alda-location))
+ (message "Alda was not found on your $PATH and alda-binary-location was nil.")
+ (progn
+ (when server-down
+ (alda-server)
+ (sleep-for 2)) ;; Try to stop a race condition
+ (apply #'start-process +alda-output-name+ +alda-output-buffer+
+ (alda-location) args)))))
+
+(defun alda-play-text (text)
+ "Plays the specified TEXT in the alda server.
+This does include any history you might have added.
+ARGUMENT TEXT The text to play with the current alda server."
+ (alda-run-cmd "play" "--history" *alda-history* "--code" text))
+
+(defun alda-stop ()
+ "Stop current alda playback."
+ (alda-run-cmd "stop"))
+
+(defun alda-play-file ()
+ "Plays the current buffer's file in alda.
+This does not include any history that you may have added"
+ (interactive)
+ (alda-run-cmd "play" "--file" (buffer-file-name)))
+
+;; This is the replacement for the old 'alda append' command
+;; Previously, command history was stored on the server, now it is stored on the client.
+;; 'alda-mode' is your client, so we will take care of history for you!
+;; These commands are in beta, so report an issue if you find any problems!
+(defun alda-history-append-text (text)
+ "Append the specified TEXT to the alda server instance.
+ARGUMENT TEXT The text to append to the current alda server."
+ (setq *alda-history* (concat *alda-history* "\n" text)))
+
+
+(defun alda-history-clear ()
+ "Clears the current alda history.
+This can help resolve problems if you are having problems running your score"
+ (interactive)
+ (setq *alda-history* ""))
+
+(defun alda-history-append-region (start end)
+ "Append the current selection to the alda history.
+Argument START The start of the selection to append from.
+Argument END The end of the selection to append from."
+ (interactive "r")
+ (if (eq start end)
+ (message "no mark was set")
+ (alda-history-append-text (buffer-substring-no-properties start end))))
+
+(defun alda-history-append-buffer ()
+ "Append the current buffer to alda history."
+ (interactive)
+ (alda-history-append-text (buffer-string)))
+
+(defun alda-history-append-block ()
+ "Append the selected block of alda code to history."
+ (interactive)
+ (save-excursion
+ (mark-paragraph)
+ (alda-history-append-region (region-beginning) (region-end))))
+
+(defun alda-history-append-line ()
+ "Append the current line of alda code to history."
+ (interactive)
+ (alda-history-append-region (line-beginning-position) (line-end-position)))
+
+(defun alda-inf-eval-region (start end)
+ "Send current region to Alda interpreter."
+ (interactive "r")
+ (alda-check-or-start-interpreter)
+ (comint-send-region alda-inf-buffer-name start end)
+ (comint-send-string alda-inf-buffer-name "\n"))
+
+(defun alda-play-region (start end)
+ "Plays the current selection in alda.
+Argument START The start of the selection to play from.
+Argument END The end of the selection to play from."
+ (interactive "r")
+ (if (eq start end)
+ (message "No mark was set!")
+ (if alda-play-region-in-repl
+ (alda-inf-eval-region start end)
+ (alda-play-text (buffer-substring-no-properties start end)))))
+
+;; If evil is found, make evil commands as well.
+(eval-when-compile
+ (unless (require 'evil nil 'noerror)
+ ;; Evil must be sourced in order to define this macro
+ (defmacro evil-define-operator (name &rest _)
+ ;; Define a dummy instead if not present.
+ `(defun ,name () (interactive) (message "Evil was not present while compiling alda-mode. Recompile with evil installed!")))))
+
+;; Macro will be expanded based on the above dummy/evil load
+(evil-define-operator alda-evil-play-region (beg end _type _register _yank-hanlder)
+ "Plays the text from BEG to END."
+ :move-point nil
+ :repeat nil
+ (interactive "")
+ (alda-play-region beg end))
+
+(evil-define-operator alda-evil-history-append-region (beg end _type _register _yank-hanlder)
+ "Appends the text from BEG to END to alda history."
+ :move-point nil
+ :repeat nil
+ (interactive "")
+ (alda-history-append-region beg end))
+
+;; Renamed stop -> down for consistency
+(defun alda-down ()
+ "Stops songs from playing, and cleans up idle alda runner processes.
+Because alda runs in the background, the only way to do this is with alda restart as of now."
+ (interactive)
+ (shell-command (concat (alda-location) " down"))
+ (delete-process +alda-output-buffer+))
+
+;;;; -- Font Lock Regexes --
+(let
+ ;; Prevent regexes from taking up memory
+ ((alda-instrument-regexp "\\([a-zA-Z]\\{2\\}[A-Za-z0-9_\-]*\\)\\(\s*\\(\"[A-Za-z0-9_\-]*\"\\)\\)?:")
+ (alda-voice-regexp "\\([Vv][0-9]+\\):")
+ (alda-timing-regexp "[a-gA-GrR][\s+-]*\\([~.0-9\s/]*\\(m?s\\)?\\)")
+ (alda-repeating-regexp "\\(\\*[0-9]+\\)")
+ (alda-cramming-regexp "\\({\\|}\\)")
+ (alda-grouping-regexp "\\(\\[\\|\\]\\)")
+ (alda-accidental-regexp "\\([a-gA-GrR]\s*[-+]+\\)")
+ (alda-bar-regexp "\\(|\\)")
+ (alda-set-octave-regexp "\\(o[0-9]+\\)")
+ (alda-shift-octave-regexp "\\(>\\|<\\)")
+ (alda-variable-regexp "\\(([a-zA-Z-]+!?\s+\\(\\([0-9]+\\)\\|\\(\\[\\(:[a-zA-Z]+\s?\\)+\\]\\)\\))\\)")
+ (alda-markers-regexp "\\([@%][a-zA-Z]\\{2\\}[a-zA-Z0-9()+-]*\\)"))
+
+ (defvar alda-highlights nil
+ "Font lock highlights for 'alda-mode'")
+ (setq alda-highlights
+ `((,alda-bar-regexp . (1 font-lock-comment-face))
+ (,alda-voice-regexp . (1 font-lock-function-name-face))
+ (,alda-instrument-regexp . (1 font-lock-type-face))
+ (,alda-variable-regexp . (1 font-lock-variable-name-face))
+ (,alda-set-octave-regexp . (1 font-lock-constant-face))
+ (,alda-shift-octave-regexp . (1 font-lock-constant-face))
+ (,alda-markers-regexp . (1 font-lock-builtin-face))
+ (,alda-timing-regexp . (1 font-lock-builtin-face))
+ (,alda-repeating-regexp . (1 font-lock-builtin-face))
+ (,alda-cramming-regexp . (1 font-lock-builtin-face))
+ (,alda-grouping-regexp . (1 font-lock-builtin-face))
+ (,alda-accidental-regexp . (1 font-lock-preprocessor-face)))))
+
+;;;; -- Indention code --
+
+;; A duplicate of asm-mode.el with changes
+;; changes were made to the naming convention and to how the labels are calculated.
+(defun alda-indent-line ()
+ "Auto-indent the current line."
+ (interactive)
+ (let* ((savep (point))
+ (indent (condition-case nil
+ (save-excursion
+ (forward-line 0)
+ (skip-chars-forward " \t")
+ (if (>= (point) savep) (setq savep nil))
+ (max (alda-calculate-indentation) 0))
+ (error 0))))
+ (if savep
+ (save-excursion (indent-line-to indent))
+ (indent-line-to indent))))
+
+(defun alda-indent-prev-level ()
+ "Indent this line to the indention level of the previous non-whitespace line."
+ (save-excursion
+ (forward-line -1)
+ (while (and
+ (not (eq (point) (point-min))) ;; Point at start of bufffer
+ ;; Point has a empty line
+ (let ((match-str (buffer-substring-no-properties (line-beginning-position) (line-end-position))))
+ (or (string-match "^\\s-*$" match-str)) (eq 0 (length match-str))))
+ (forward-line -1))
+ (current-indentation)))
+
+
+(defun alda-calculate-indentation ()
+ "Calculates indentation for `alda-mode' code."
+ (or
+ ;; Flush labels to the left margin.
+ (and (looking-at "[A-Za-z0-9\" \\t-]+:\\s-*") 0)
+ ;; All comments indention are the previous line's indention.
+ (and (looking-at +alda-comment-str+) (alda-indent-prev-level))
+ ;; The rest goes at the first tab stop.
+ (or (indent-next-tab-stop 0))))
+
+(defun alda-colon ()
+ "Insert a colon; if it follows a label, delete the label's indentation."
+ (interactive)
+ (let ((labelp nil))
+ (save-excursion
+ (skip-chars-backward "A-Za-z\"\s\t")
+ (if (setq labelp (bolp)) (delete-horizontal-space)))
+ (call-interactively 'self-insert-command)
+ (when labelp
+ (delete-horizontal-space)
+ (tab-to-tab-stop))))
+
+(defun alda-play-block ()
+ "Plays the selected block of alda code."
+ (interactive)
+ (save-excursion
+ (mark-paragraph)
+ (alda-play-region (region-beginning) (region-end))))
+
+(defun alda-play-line ()
+ "Plays the current line of alda code."
+ (interactive)
+ (alda-play-region (line-beginning-position) (line-end-position)))
+
+(defun alda-play-buffer ()
+ "Plays the current buffer of alda code."
+ (interactive)
+ (alda-play-text (buffer-string)))
+
+;;;; -- Alda Keymaps --
+;; TODO determine standard keymap for alda-mode
+
+(defvar alda-mode-map nil "Keymap for `alda-mode'.")
+(when (not alda-mode-map) ; if it is not already defined
+
+ ;; assign command to keys
+ (setq alda-mode-map (make-sparse-keymap))
+ (define-key alda-mode-map (kbd ":") 'alda-colon)
+
+ (define-key alda-mode-map [menu-bar alda-mode] (cons "Alda" (make-sparse-keymap)))
+ (define-key alda-mode-map [menu-bar alda-mode alda-colon]
+ '(menu-item "Insert Colon" alda-colon
+ :help "Insert a colon; if it follows a label, delete the label's indentation"))
+
+ ;; Add alda-ess-keymap if requested
+ (when alda-ess-keymap
+ (define-key alda-mode-map "\C-c\C-i" 'alda-run-alda)
+ (define-key alda-mode-map "\C-c\C-r" 'alda-play-region)
+ (define-key alda-mode-map "\C-c\C-c" 'alda-play-block)
+ (define-key alda-mode-map "\C-c\C-n" 'alda-play-line)
+ (define-key alda-mode-map "\C-c\C-b" 'alda-play-buffer)
+ (define-key alda-mode-map "\C-c\C-z" 'alda-switch-to-interpreter)))
+
+;;;; -- Alda Syntax Table --
+
+(defvar alda-mode-syntax-table
+ (let ((table (make-syntax-table)))
+ (modify-syntax-entry ?# "<" table)
+ (modify-syntax-entry ?\n ">" table)
+ table))
+
+
+;;;; -- Alda Mode Definition --
+
+;;;###autoload
+(define-derived-mode alda-mode prog-mode
+ "Alda"
+ "A major mode for alda-lang, providing syntax highlighting and basic indention."
+
+ ;; Set alda comments
+ (setq comment-start +alda-comment-str+)
+ (setq comment-padding " ")
+ (setq comment-start-skip (concat +alda-comment-str+ "\\s-*"))
+ (setq comment-multi-line (concat +alda-comment-str+ " "))
+ ;; Comments should use the indention of the last line
+ (setq comment-indent-function #'alda-indent-prev-level)
+
+ ;; Set custom mappings
+ (use-local-map alda-mode-map)
+ (setq indent-line-function 'alda-indent-line)
+
+ ;; Set alda highlighting
+ (setq font-lock-defaults '(alda-highlights)))
+
+;; Open alda files in alda-mode
+;;;###autoload
+(add-to-list 'auto-mode-alist '("\\.alda\\'" . alda-mode))
+
+(provide 'alda-mode)
+
+;;; alda-mode.el ends here
diff --git a/packages/alect-themes-20180504.1720.tar b/packages/alect-themes-20190506.1440.tar
similarity index 95%
rename from packages/alect-themes-20180504.1720.tar
rename to packages/alect-themes-20190506.1440.tar
index 9772c28..81b2358 100644
Binary files a/packages/alect-themes-20180504.1720.tar and b/packages/alect-themes-20190506.1440.tar differ
diff --git a/packages/alert-20181022.1742.el b/packages/alert-20190816.2205.el
similarity index 98%
rename from packages/alert-20181022.1742.el
rename to packages/alert-20190816.2205.el
index e4d41c6..3be52c3 100644
--- a/packages/alert-20181022.1742.el
+++ b/packages/alert-20190816.2205.el
@@ -6,7 +6,7 @@
;; Created: 24 Aug 2011
;; Updated: 16 Mar 2015
;; Version: 1.2
-;; Package-Version: 20181022.1742
+;; Package-Version: 20190816.2205
;; Package-Requires: ((gntp "0.1") (log4e "0.3.0") (cl-lib "0.5"))
;; Keywords: notification emacs message
;; X-URL: https://github.com/jwiegley/alert
@@ -135,7 +135,7 @@
;; notifier - Uses terminal-notifier on OS X, if it is on the PATH
;; osx-notifier - Native OSX notifier using AppleScript
;; toaster - Use the toast notification system
-;; x11 - - Changes the urgency property of the window in the X Window System
+;; x11 - Changes the urgency property of the window in the X Window System
;;
;; * Defining new styles
;;
@@ -733,7 +733,7 @@ strings."
(if urgency
(symbol-name urgency)
"normal")))
- alert-libnotify-additional-args))
+ (copy-tree alert-libnotify-additional-args)))
(category (plist-get info :category)))
(nconc args
(list "--expire-time"
@@ -816,7 +816,11 @@ by the `notifications' style.")
:timeout (if (plist-get info :persistent) 0 -1)
:replaces-id (gethash (plist-get info :id) alert-notifications-ids)
:urgency (cdr (assq (plist-get info :severity)
- alert-notifications-priorities)))))
+ alert-notifications-priorities))
+ :actions '("default" "Open corresponding buffer")
+ :on-action (lambda (id action)
+ (when (string= action "default")
+ (switch-to-buffer (plist-get info :buffer)))))))
(when (plist-get info :id)
(puthash (plist-get info :id) id alert-notifications-ids)))
(alert-message-notify info))
@@ -865,6 +869,14 @@ From https://github.com/julienXX/terminal-notifier."
(alert-encode-string (plist-get info :title)))))
(alert-message-notify info))
+(when (fboundp 'mac-do-applescript)
+ ;; Use built-in AppleScript support when possible.
+ (defun alert-osx-notifier-notify (info)
+ (mac-do-applescript (format "display notification %S with title %S"
+ (alert-encode-string (plist-get info :message))
+ (alert-encode-string (plist-get info :title))))
+ (alert-message-notify info)))
+
(alert-define-style 'osx-notifier :title "Notify using native OSX notification" :notifier #'alert-osx-notifier-notify)
(defun alert-frame-notify (info)
diff --git a/packages/all-the-icons-20180125.1557.tar b/packages/all-the-icons-20190320.1809.tar
similarity index 92%
rename from packages/all-the-icons-20180125.1557.tar
rename to packages/all-the-icons-20190320.1809.tar
index 9656a92..119dd67 100644
Binary files a/packages/all-the-icons-20180125.1557.tar and b/packages/all-the-icons-20190320.1809.tar differ
diff --git a/packages/ameba-20190720.1845.el b/packages/ameba-20190720.1845.el
new file mode 100644
index 0000000..78de89d
--- /dev/null
+++ b/packages/ameba-20190720.1845.el
@@ -0,0 +1,174 @@
+;;; ameba.el --- An interface to Crystal Ameba linter. -*- lexical-binding: t; -*-
+
+;; Copyright © 2018-2019 Vitalii Elenhaupt
+;; Author: Vitalii Elenhaupt
+;; URL: https://github.com/crystal-ameba/ameba.el
+;; Package-Version: 20190720.1845
+;; Keywords: convenience
+;; Version: 0
+;; Package-Requires: ((emacs "24.4"))
+
+;; This file is not part of GNU Emacs.
+
+;;; License:
+
+;; This program is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see .
+
+;;; Commentary:
+;;
+;; Ameba is a static code analysis tool for Crystal.
+;; This package allows you to use this tool directly in Emacs.
+;;
+;; Usage:
+;;
+;; Run one of the predefined interactive functions.
+;;
+;; Run Ameba on the currently visited file:
+;;
+;; (ameba-check-current-file)
+;;
+;; Run Ameba on the entire project:
+;;
+;; (ameba-check-project)
+;;
+;; Prompt from a directory on which to run Ameba:
+;;
+;; (ameba-check-directory)
+
+;;; Code:
+
+(require 'tramp)
+
+(defgroup ameba nil
+ "An Emacs interface to Ameba"
+ :prefix "ameba-"
+ :group 'convenience
+ :group 'tools
+ :link '(url-link :tag "GitHub" "https://github.com/crystal-ameba/ameba.el"))
+
+(defcustom ameba-project-root-files
+ '(".projectile" ".git" ".hg" ".ameba.yml" "shard.yml")
+ "A list of files considered to mark the root of a project."
+ :type '(repeat string))
+
+(defcustom ameba-check-command
+ "ameba --format flycheck"
+ "The command used to run Ameba checks."
+ :type 'string)
+
+(defcustom ameba-keymap-prefix (kbd "C-c C-r")
+ "Ameba keymap prefix."
+ :group 'ameba
+ :type 'string)
+
+(cl-defun ameba-local-file-name (file-name)
+ "Retrieve local filename if FILE-NAME is opened via TRAMP."
+ (cond ((tramp-tramp-file-p file-name)
+ (tramp-file-name-localname (tramp-dissect-file-name file-name)))
+ (t
+ file-name)))
+
+(cl-defun ameba-project-root (&optional no-error)
+ "Retrieve the root directory of a project if available.
+When NO-ERROR is non-nil returns nil instead of raise an error."
+ (or
+ (car
+ (mapcar #'expand-file-name
+ (delq nil
+ (mapcar
+ (lambda (f) (locate-dominating-file default-directory f))
+ ameba-project-root-files))))
+ (if no-error
+ nil
+ (error "You're not into a project"))))
+
+(cl-defun ameba-project-lib ()
+ "Returns the path to the lib directory in a project root."
+ (concat "!" (ameba-project-root) "lib"))
+
+(cl-defun ameba-buffer-name (file-or-dir)
+ "Generate a name for the Ameba buffer from FILE-OR-DIR."
+ (concat "*Ameba " file-or-dir "*"))
+
+(cl-defun ameba-build-command (command path)
+ "Build the full command to be run based on COMMAND and PATH."
+ (concat command " " path))
+
+(cl-defun ameba-ensure-installed ()
+ "Check if Ameba is installed."
+ (unless (executable-find "ameba")
+ (error "Ameba is not installed")))
+
+(defun ameba--file-command (command)
+ "Run COMMAND on currently visited file."
+ (ameba-ensure-installed)
+ (let ((file-name (buffer-file-name (current-buffer))))
+ (if file-name
+ (let ((default-directory (or (ameba-project-root 'no-error) default-directory)))
+ (compilation-start
+ (ameba-build-command command (ameba-local-file-name file-name))
+ 'compilation-mode
+ (lambda (_arg) (ameba-buffer-name file-name))))
+ (error "Buffer is not visiting a file"))))
+
+(defun ameba--dir-command (command &optional directory)
+ "Run COMMAND on the DIRECTORY if present, prompt user if not."
+ (ameba-ensure-installed)
+ (let ((directory
+ (or directory
+ (read-directory-name "Select directory: "))))
+ (let ((default-directory (or (ameba-project-root 'no-error) default-directory)))
+ (compilation-start
+ (ameba-build-command command (ameba-local-file-name directory))
+ 'compilation-mode
+ (lambda (arg) (message arg) (ameba-buffer-name directory))))))
+
+;;;###autoload
+(defun ameba-check-current-file ()
+ "Run check on the current file."
+ (interactive)
+ (ameba--file-command ameba-check-command))
+
+;;;###autoload
+(defun ameba-check-project ()
+ "Run check on the current project."
+ (interactive)
+ (ameba-check-directory
+ (concat (ameba-project-root) " " (ameba-project-lib))))
+
+;;;###autoload
+(defun ameba-check-directory (&optional directory)
+ "Run check on the DIRECTORY if present or prompt user if not."
+ (interactive)
+ (ameba--dir-command ameba-check-command directory))
+
+;;; Minor mode
+(defvar ameba-mode-map
+ (let ((map (make-sparse-keymap)))
+ (let ((prefix-map (make-sparse-keymap)))
+ (define-key prefix-map (kbd "f") #'ameba-check-current-file)
+
+ (define-key map ameba-keymap-prefix prefix-map))
+ map)
+ "Keymap for Ameba mode.")
+
+;;;###autoload
+(define-minor-mode ameba-mode
+ "Minor mode to interface with Ameba."
+ :lighter " Ameba"
+ :keymap ameba-mode-map
+ :group 'ameba)
+
+(provide 'ameba)
+;;; ameba.el ends here
diff --git a/packages/ample-theme-20180207.1745.tar b/packages/ample-theme-20180207.1745.tar
index 2c38995..062fa0d 100644
Binary files a/packages/ample-theme-20180207.1745.tar and b/packages/ample-theme-20180207.1745.tar differ
diff --git a/packages/anaconda-mode-20181030.2109.el b/packages/anaconda-mode-20190616.1019.el
similarity index 98%
rename from packages/anaconda-mode-20181030.2109.el
rename to packages/anaconda-mode-20190616.1019.el
index b28733c..7402d37 100644
--- a/packages/anaconda-mode-20181030.2109.el
+++ b/packages/anaconda-mode-20190616.1019.el
@@ -4,7 +4,7 @@
;; Author: Artem Malyshev
;; URL: https://github.com/proofit404/anaconda-mode
-;; Package-Version: 20181030.2109
+;; Package-Version: 20190616.1019
;; Version: 0.1.13
;; Package-Requires: ((emacs "25") (pythonic "0.1.0") (dash "2.6.0") (s "1.9") (f "0.16.2"))
@@ -158,11 +158,16 @@ else:
# Define JSON-RPC application.
import functools
+import threading
def script_method(f):
@functools.wraps(f)
def wrapper(source, line, column, path):
- return f(jedi.Script(source, line, column, path, environment=virtual_environment))
+ timer = threading.Timer(30.0, sys.exit)
+ timer.start()
+ result = f(jedi.Script(source, line, column, path, environment=virtual_environment))
+ timer.cancel()
+ return result
return wrapper
def process_definitions(f):
@@ -715,7 +720,8 @@ Show ERROR-MESSAGE if result is empty."
\\{anaconda-mode-map}"
:lighter anaconda-mode-lighter
- :keymap anaconda-mode-map)
+ :keymap anaconda-mode-map
+ (setq-local url-http-attempt-keepalives nil))
;;;###autoload
(define-minor-mode anaconda-eldoc-mode
diff --git a/packages/ansible-20180813.114.tar b/packages/ansible-20190619.1255.tar
similarity index 72%
rename from packages/ansible-20180813.114.tar
rename to packages/ansible-20190619.1255.tar
index df6829e..eb75545 100644
Binary files a/packages/ansible-20180813.114.tar and b/packages/ansible-20190619.1255.tar differ
diff --git a/packages/anzu-20161017.1607.el b/packages/anzu-20190303.1701.el
similarity index 99%
rename from packages/anzu-20161017.1607.el
rename to packages/anzu-20190303.1701.el
index 18c77db..058545f 100644
--- a/packages/anzu-20161017.1607.el
+++ b/packages/anzu-20190303.1701.el
@@ -4,7 +4,7 @@
;; Author: Syohei YOSHIDA
;; URL: https://github.com/syohex/emacs-anzu
-;; Package-Version: 20161017.1607
+;; Package-Version: 20190303.1701
;; Version: 0.62
;; Package-Requires: ((emacs "24.3"))
@@ -223,11 +223,16 @@
result))))))
(defun anzu--where-is-here (positions here)
- (cl-loop for (start . end) in positions
- for i = 1 then (1+ i)
- when (and (>= here start) (<= here end))
- return i
- finally return 0))
+ ;; don't use loop for emacs 27 bug
+ (let ((poss positions)
+ (index 1)
+ (ret 0))
+ (while poss
+ (let ((pos (car poss)))
+ (if (and (>= here (car pos)) (<= here (cdr pos)))
+ (setq ret index poss nil)
+ (setq poss (cdr poss) index (1+ index)))))
+ ret))
(defun anzu--use-result-cache-p (input)
(and (eq (anzu--isearch-regexp-function) (car anzu--last-search-state))
diff --git a/packages/apiwrap-20180602.2231.el b/packages/apiwrap-20180602.2231.el
deleted file mode 100644
index 9c94adb..0000000
--- a/packages/apiwrap-20180602.2231.el
+++ /dev/null
@@ -1,471 +0,0 @@
-;;; apiwrap.el --- api-wrapping macros -*- lexical-binding: t; -*-
-
-;; Copyright (C) 2017-2018 Sean Allred
-
-;; Author: Sean Allred
-;; Keywords: tools, maint, convenience
-;; Homepage: https://github.com/vermiculus/apiwrap.el
-;; Package-Requires: ((emacs "25"))
-;; Package-Version: 20180602.2231
-;; Package-X-Original-Version: 0.5
-
-;; This file is not part of GNU Emacs.
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see .
-
-;;; Commentary:
-
-;; API-Wrap.el is a tool to interface with the APIs of your favorite
-;; services. These macros make it easy to define efficient and
-;; consistently-documented Elisp functions that use a natural syntax
-;; for application development.
-
-;;; Code:
-
-(require 'cl-lib)
-(require 'apropos)
-
-(defvar apiwrap-backends nil
- "An alist of (BACKEND-NAME . BACKEND-PREFIX) for `apropos-api-endpoint'.
-See also `apiwrap-new-backend'.")
-
-(defun apiwrap-genform-resolve-api-params (object url)
- "Resolve parameters in URL to values in OBJECT.
-
-Example:
-
- \(apiwrap-genform-resolve-api-params
- '\(\(name . \"Hello-World\"\)
- \(owner \(login . \"octocat\"\)\)\)
- \"/repos/:owner.login/:name/issues\"\)
-
- ;; \"/repos/octocat/Hello-World/issues\"
-
-"
- (declare (indent 1))
- ;; Yes I know it's hacky, but it works and it's compile-time
- ;; (which is to say: pull-requests welcome!)
- (save-match-data
- (with-temp-buffer
- (insert url)
- (goto-char 0)
- (let ((param-regexp (rx ":" (group (+? (any alpha "-" "."))) (or (group "/") eos)))
- replacements)
- (while (search-forward-regexp param-regexp nil 'noerror)
- (push (match-string-no-properties 1) replacements)
- (if (null (match-string-no-properties 2))
- (replace-match "%s")
- (replace-match "%s/")))
- (setq replacements
- (mapcar (lambda (s) (list #'apiwrap--encode-url (make-symbol (concat "." s))))
- (nreverse replacements)))
- (let ((object (if (or (symbolp object)
- (and (listp object)
- (not (consp (car object)))))
- object
- `',object))
- (str `(format ,(buffer-string) ,@replacements)))
- (if object
- (macroexpand-all `(let-alist ,object ,str))
- str))))))
-
-(defun apiwrap--encode-url (thing)
- (if (numberp thing)
- (number-to-string thing)
- (url-encode-url thing)))
-
-(defun apiwrap-plist->alist (plist)
- "Convert PLIST to an alist.
-If a PLIST key is a `:keyword', then it is converted into a
-symbol `keyword'."
- (when (= 1 (mod (length plist) 2))
- (error "bad plist"))
- (let (alist)
- (while plist
- (push (cons (apiwrap--kw->sym (car plist))
- (cadr plist))
- alist)
- (setq plist (cddr plist)))
- alist))
-
-(defun apiwrap--kw->sym (kw)
- "Convert a keyword to a symbol."
- (if (keywordp kw)
- (intern (substring (symbol-name kw) 1))
- kw))
-
-(defun apiwrap--docfn (service-name doc object-param-doc method external-resource link)
- "Documentation string for resource-wrapping functions created
-by `apiwrap--defresource'.
-
-SERVICE-NAME is the name of the API being wrapped (e.g., \"ghub\")
-
-DOC is the documentation string for this endpoint.
-
-OBJECT-PARAM-DOC is a string describing the standard parameters
-this endpoint requires (usually provided by
-`apiwrap-new-backend'). If it's not a string, nothing will be
-inserted into the documentation string.
-
-METHOD is one of `get', `post', etc.
-
-EXTERNAL-RESOURCE is the API endpoint as documented in the API.
-It does not usually include any syntax for reference-resolution.
-
-LINK is a link to the official documentation for this API
-endpoint from the service provider."
- (format "%s
-
-%sDATA is a data structure to be sent with this request. If it's
-not required, it can simply be omitted.
-
-PARAMS is a plist of parameters appended to the method call.
-
-%s
-
-This generated function wraps the %s API endpoint
-
- %s %s
-
-which is documented at
-
- URL `%s'"
- doc
- (or (and (stringp object-param-doc)
- (concat object-param-doc "\n\n"))
- "")
- (make-string 20 ?-)
- service-name
- (upcase (symbol-name method))
- external-resource link))
-
-(defun apiwrap--docmacro (service-name method)
- "Documentation string for macros created by
-`apiwrap-new-backend'
-
-SERVICE-NAME is the name of the API being wrapped (e.g., \"ghub\")
-
-METHOD is one of `get', `post', etc."
- (apply #'format "Define a new %s resource wrapper function.
-
-RESOURCE is the API endpoint as written in the %s API
-documentation. Along with the backend prefix (from
-`apiwrap-new-backend') and the method (%s), this string will be
-used to create the symbol for the new function.
-
-DOC is a specific documentation string for the new function.
-Usually, this can be copied from the %s API documentation.
-
-LINK is a link to the %s API documentation.
-
-If non-nil, OBJECTS is a list of symbols that will be used to
-resolve parameters in the resource and will be required arguments
-of the new function. Documentation for these parameters (from
-the standard parameters of the call to `apiwrap-new-backend')
-will be inserted into the docstring of the generated function.
-
-If non-nil, INTERNAL-RESOURCE is the resource-string used to
-resolve OBJECT to the ultimate call instead of RESOURCE. This is
-useful in the likely event that the advertised resource syntax
-does not align with the structure of the object it works with.
-For example, GitHub's endpoint
-
- GET /repos/:owner/:repo/issues
-
-would be written as
-
- \(defapiget- \"/repos/:owner/:repo/issues\"
- \"List issues for a repository.\"
- \"issues/#list-issues-for-a-repository\"
- (repo) \"/repos/:repo.owner.login/:repo.name/issues\"\)
-
-defining a function called `-get-repos-owner-repo-issues'
-and taking an object (a parameter called `repo') with the
-structure
-
- \(\(owner \(login . \"octocat\"\)\)
- \(name . \"hello-world\"\)
-
-See the documentation of `apiwrap-resolve-api-params' for more
-details on that behavior.
-
-CONFIG is a list of override configuration parameters. Values
-set here (notably those explicitly set to nil) will take
-precedence over the defaults provided to `apiwrap-new-backend'."
- (upcase (symbol-name method))
- service-name
- (upcase (symbol-name method))
- (make-list 2 service-name)))
-
-(defun apiwrap-gensym (prefix api-method &optional resource)
- "Generate a symbol for a macro/function."
- (let ((api-method (symbol-name (apiwrap--kw->sym api-method))))
- (intern
- (if resource
- (format "%s-%s%s" prefix api-method
- (replace-regexp-in-string
- ":" ""
- (replace-regexp-in-string "/" "-" resource)))
- (format "defapi%s-%s" api-method prefix)))))
-
-(defun apiwrap-stdgenlink (alist)
- "Standard link generation function."
- (alist-get 'link alist))
-
-(defconst apiwrap-primitives
- '(get put head post patch delete)
- "List of primitive methods.
-The `:request' value given to `apiwrap-new-backend' must
-appropriately handle all of these symbols as a METHOD.")
-
-(defun apiwrap-genmacros (name prefix standard-parameters functions)
- "Validate arguments and generate all macro forms"
- ;; Default to raw link entered in the macro
- (unless (alist-get 'link functions)
- (setcdr (last functions) (list '(link . apiwrap-stdgenlink))))
-
- ;; Verify all extension functions are actually functions
- (dolist (f functions)
- (let ((key (car f)) (fn (cdr f)))
- (unless (or (functionp fn)
- (macrop fn)
- (and (consp fn)
- (eq 'function (car fn))
- (or (functionp (cadr fn))
- (macrop (cadr fn)))))
- (byte-compile-warn "Unknown function for `%S': %S" key fn))))
-
- ;; Build the macros
- (let (super-form)
- (dolist (method (reverse apiwrap-primitives))
- (let ((macrosym (apiwrap-gensym prefix method)))
- (push `(defmacro ,macrosym (resource doc link
- &optional objects internal-resource
- &rest config)
- ,(apiwrap--docmacro name method)
- (declare (indent defun) (doc-string 2))
- (apiwrap-gendefun ,name ,prefix ',standard-parameters ',method
- resource doc link objects internal-resource
- ',functions config))
- super-form)))
- super-form))
-
-(defun apiwrap--maybe-apply (func value)
- "Conditionally apply FUNC to VALUE.
-If FUNC is non-nil, return a form to apply FUNC to VALUE.
-Otherwise, just return VALUE quoted."
- (if func `(funcall ,func ,value) value))
-
-(defun apiwrap-gendefun (name prefix standard-parameters method resource doc link objects internal-resource std-functions override-functions)
- "Generate a single defun form"
- (let ((args '(&optional data &rest params))
- (funsym (apiwrap-gensym prefix method resource))
- resolved-resource-form form functions
- data-massage-func params-massage-func
- condition-case primitive-func link-func around)
-
- ;; Be smart about when configuration starts. Neither `objects' nor
- ;; `internal-resource' can be keywords, so we know that if they
- ;; are, then we need to shift things around.
- (when (keywordp objects)
- (push internal-resource override-functions)
- (push objects override-functions)
- (setq objects nil internal-resource nil))
- (when (keywordp internal-resource)
- (push internal-resource override-functions)
- (setq internal-resource nil))
- (setq functions (append (apiwrap-plist->alist override-functions)
- std-functions))
-
- ;; Now that our arguments have settled, let's use them
- (when objects (setq args (append objects args)))
-
- (setq internal-resource (or internal-resource resource)
- around (alist-get 'around functions)
- condition-case (macroexpand-all (alist-get 'condition-case functions))
- primitive-func (alist-get 'request functions)
- data-massage-func (alist-get 'pre-process-data functions)
- params-massage-func (alist-get 'pre-process-params functions)
- link-func (alist-get 'link functions))
-
- ;; If our functions are already functions (and not quoted), we'll
- ;; have to quote them for the actual defun
- (when (functionp primitive-func)
- (setq primitive-func `(function ,primitive-func)))
- (when (functionp data-massage-func)
- (setq data-massage-func `(function ,data-massage-func)))
- (when (functionp params-massage-func)
- (setq params-massage-func `(function ,params-massage-func)))
-
- ;; Alright, we're ready to build our function
- (setq resolved-resource-form
- (if objects
- (apiwrap-genform-resolve-api-params
- `(list ,@(mapcar (lambda (o) `(cons ',o ,o)) objects))
- internal-resource)
- internal-resource)
- form
- `(apply ,primitive-func ',method ,resolved-resource-form
- (if (keywordp data)
- (list ,(apiwrap--maybe-apply params-massage-func '(cons data params)) nil)
- (list ,(apiwrap--maybe-apply params-massage-func 'params)
- ,(apiwrap--maybe-apply data-massage-func 'data)))))
-
- (when around
- (unless (macrop around)
- (error ":around must be a macro: %S" around))
- (setq form (macroexpand `(,around ,form))))
-
- (when condition-case
- (unless (and (listp condition-case)
- (cl-every #'listp condition-case)
- (cl-every (lambda (h) (get (car h) 'error-conditions)) ;is error
- condition-case))
- (error ":condition-case must be a list of error handlers; see the documentation: %S" condition-case))
- (setq form `(condition-case it ,form ,@condition-case)))
-
- (let ((props `((prefix . ,prefix)
- (method . ,method)
- (endpoint . ,resource)
- (link . ,link)))
- fn-form)
- (push `(put ',funsym 'apiwrap ',props) fn-form)
- (push `(defun ,funsym ,args
- ,(apiwrap--docfn name doc (alist-get objects standard-parameters) method resource
- (funcall link-func props))
- (declare (indent ,(length objects)))
- ,form)
- fn-form)
- (cons 'prog1 fn-form))))
-
-(defmacro apiwrap-new-backend (name prefix standard-parameters &rest config)
- "Define a new API backend.
-
-SERVICE-NAME is the name of the service this backend will wrap.
-It will be used in docstrings of the primitive method macros.
-
-PREFIX is the prefix to use for the macros and for the
-resource-wrapping functions.
-
-STANDARD-PARAMETERS is an alist of standard parameters that can
-be used to resolve resource URLs like `/users/:user/info'. Each
-key of the alist is the parameter name (as a symbol) and its
-value is the documentation to insert in the docstring of
-resource-wrapping functions.
-
-CONFIG is a list of arguments to configure the generated macros.
-
- Required:
-
- :request
-
- API request primitive. This function is expected to take
- the following required arguments:
-
- (METHOD RESOURCE PARAMS DATA)
-
- METHOD is provided as a symbol, one of `apiwrap-primitives',
- that specifies which HTTP method to use for the request.
-
- RESOURCE is the resource being accessed as a string.
- This will be passed through from each method macro after
- being resolved in the context of its parameters. See the
- generated macro documentation (or `apiwrap--docmacro')
- for more details.
-
- PARAMS is provided as a property list of parameters.
- This will be passed in from each method function call.
-
- DATA is provided as an alist of data (e.g., for posting
- data to RESOURCE). This will be passed in from each
- method function call.
-
- Optional:
-
- :around
-
- Macro to wrap around the request form (which is passed as
- the only argument).
-
- :condition-case
-
- List of error handlers of the form
-
- ((CONDITION-NAME BODY...)
- (CONDITION-NAME BODY...))
-
- to appropriately deal with signals in the `:request'
- primitive. Caught signals are bound to the symbol `it'.
- Note that the form will need to mention `it' in some way
- to avoid compile warnings. If this is a problem for you,
- track resolution of this issue in vermiculus/apiwrap#12.
-
- See also `condition-case'.
-
- :link
-
- Function to process an alist and return a link. This
- function should take an alist as its sole parameter and
- return a fully-qualified URL to be considered the
- official documentation of the API endpoint.
-
- This function is passed an alist with the following
- properties:
-
- endpoint string the documented endpoint being wrapped
- link string the link passed as documentation
- method symbol one of `get', `put', etc.
- prefix string the prefix used to generate wrappers
-
- The default is `apiwrap-stdgenlink'.
-
- :pre-process-data
-
- Function to process request data before the request is
- passed to the `:request' function.
-
- :pre-process-params
-
- Function to process request parameters before the request
- is passed to the `:request' function."
- (declare (indent 2))
- (let ((sname (cl-gensym)) (sprefix (cl-gensym))
- (sstdp (cl-gensym)) (sconfig (cl-gensym)))
- `(let ((,sname ,name)
- (,sprefix ,prefix)
- (,sstdp ,standard-parameters)
- (,sconfig ',(mapcar (lambda (f) (cons (car f) (eval (cdr f))))
- (apiwrap-plist->alist config))))
- (add-to-list 'apiwrap-backends (cons ,sname ,sprefix))
- (mapc #'eval (apiwrap-genmacros ,sname ,sprefix ,sstdp ,sconfig)))))
-
-(defun apropos-api-endpoint (backend pattern)
- "Apropos for API endpoints of BACKEND matching PATTERN."
- (interactive (let* ((b (completing-read "Search backend: "
- (mapcar #'car apiwrap-backends)))
- (b (assoc-string b apiwrap-backends))
- (name (car b))
- (prefix (cdr b)))
- (list prefix (apropos-read-pattern (concat name " API endpoints")))))
- (apropos-parse-pattern pattern)
- (apropos-symbols-internal
- (apropos-internal apropos-regexp
- (lambda (sym)
- (let-alist (get sym 'apiwrap)
- (and .prefix
- (string= .prefix backend)))))
- nil))
-
-(provide 'apiwrap)
-;;; apiwrap.el ends here
diff --git a/packages/apropospriate-theme-20181111.2112.tar b/packages/apropospriate-theme-20190724.1729.tar
similarity index 80%
rename from packages/apropospriate-theme-20181111.2112.tar
rename to packages/apropospriate-theme-20190724.1729.tar
index 7123027..1769535 100644
Binary files a/packages/apropospriate-theme-20181111.2112.tar and b/packages/apropospriate-theme-20190724.1729.tar differ
diff --git a/packages/archive-contents b/packages/archive-contents
index fcad10f..e57bf09 100644
--- a/packages/archive-contents
+++ b/packages/archive-contents
@@ -1 +1 @@
-(1 (diminish . [(20170419 1736) nil "Diminished modes are minor modes with no modeline display" single ((:commit . "565a983a39d2e2cffab5df13b34f3b6116723208") (:keywords "extensions" "diminish" "minor" "codeprose") (:authors ("Will Mengarini" . "seldon@eskimo.com")) (:maintainer "Martin Yrjölä" . "martin.yrjola@gmail.com") (:url . "https://github.com/myrjola/diminish.el"))]) (bind-key . [(20180513 430) nil "A simple way to manage personal keybindings" single ((:commit . "d9f229453da31fdf9a55207db09e360c5071d706") (:keywords "keys" "keybinding" "config" "dotemacs") (:authors ("John Wiegley" . "johnw@newartisans.com")) (:maintainer "John Wiegley" . "johnw@newartisans.com") (:url . "https://github.com/jwiegley/use-package"))]) (use-package . [(20181110 1758) ((emacs (24 3)) (bind-key (2 4))) "A configuration macro for simplifying your .emacs" tar ((:commit . "d9f229453da31fdf9a55207db09e360c5071d706") (: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"))]) (which-key . [(20181114 1432) ((emacs (24 4))) "Display available keybindings in popup" single ((:commit . "43e3e3d7641a8e1c298b37e6a277612bf0898708") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainer "Justin Burkett" . "justin@burkett.cc") (:url . "https://github.com/justbur/emacs-which-key"))]) (dotenv-mode . [(20180207 1914) ((emacs (24 3))) "Major mode for .env files" single ((:commit . "f4c52bcd5313379b9f2460db7f7a33119dfa96ea") (:authors ("Preetpal S. Sohal")) (:maintainer "Preetpal S. Sohal") (:url . "https://github.com/preetpalS/emacs-dotenv-mode"))]) (packed . [(20180318 1729) ((emacs (24 3))) "package manager agnostic Emacs Lisp package utilities" single ((:commit . "c41c3dfda86ae33832ffc146923e2a4675cbacfa") (:keywords "compile" "convenience" "lisp" "package" "library") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/emacscollective/packed"))]) (auto-compile . [(20180321 1507) ((emacs (24 3)) (packed (2 0 0))) "automatically compile Emacs Lisp libraries" single ((:commit . "6ce4255ab9a0b010ef8414c5bd9a6d6d9eea012f") (:keywords "compile" "convenience" "lisp") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/emacscollective/auto-compile"))]) (elisp-slime-nav . [(20160128 1909) ((cl-lib (0 2))) "Make M-. and M-, work in elisp like they do in slime" single ((:commit . "34938422929800839e2f935aca890cd4a229ca99") (:keywords "navigation" "slime" "elisp" "emacs-lisp") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/elisp-slime-nav"))]) (evil-cleverparens . [(20170718 413) ((evil (1 0)) (paredit (1)) (smartparens (1 6 1)) (emacs (24 4)) (dash (2 12 0))) "Evil friendly minor-mode for editing lisp." tar ((:commit . "8c45879d49bfa6d4e414b6c1df700a4a51cbb869") (:keywords "cleverparens" "parentheses" "evil" "paredit" "smartparens") (:authors ("Olli Piepponen" . "opieppo@gmail.com")) (:maintainer "Olli Piepponen" . "opieppo@gmail.com") (:url . "https://github.com/luxbock/evil-cleverparens"))]) (ggtags . [(20181031 1803) ((emacs (25))) "emacs frontend to GNU Global source code tagging system" single ((:commit . "669676461c74ffd30b81dce60cf4f081270f2858") (:keywords "tools" "convenience") (:authors ("Leo Liu" . "sdl.web@gmail.com")) (:maintainer "Leo Liu" . "sdl.web@gmail.com") (:url . "https://github.com/leoliu/ggtags"))]) (counsel-gtags . [(20170326 1259) ((emacs (24 3)) (counsel (0 8 0))) "ivy for GNU global" single ((:commit . "220ebb48419ee6891ecbf9ea8fe130b494b17ee2") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-counsel-gtags"))]) (helm-gtags . [(20170116 529) ((emacs (24 4)) (helm (2 0))) "GNU GLOBAL helm interface" single ((:commit . "108e93d0d099ebb7b98847388f368311cf177033") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-helm-gtags"))]) (nameless . [(20180215 2221) ((emacs (24 4))) "Hide package namespace in your emacs-lisp code" single ((:commit . "3cd4ade5433c8e2041dfff9d9624d9e676d9c5ee") (:keywords "convenience" "lisp") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") (:url . "https://github.com/Malabarba/nameless"))]) (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"))]) (parinfer . [(20180904 844) ((dash (2 13 0)) (cl-lib (0 5))) "Simpler Lisp editing" tar ((:commit . "a7c041454e05ec2b88333a73e72debaa671ed596") (:keywords "parinfer") (:authors ("Shi Tianshu")) (:maintainer "Shi Tianshu") (:url . "https://github.com/DogLooksGood/parinfer-mode"))]) (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"))]) (twittering-mode . [(20180917 328) nil "Major mode for Twitter" single ((:commit . "ad7de82cf4b72fc166970d85849e2a9a9ae5a979") (: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/"))]) (engine-mode . [(20180401 1646) ((cl-lib (0 5))) "Define and query search engines from within Emacs." single ((:commit . "fd5a235b2c93b95143d676e6b654e388d7cdd956") (:authors ("Harry R. Schwartz" . "hello@harryrschwartz.com")) (:maintainer "Harry R. Schwartz" . "hello@harryrschwartz.com") (:url . "https://github.com/hrs/engine-mode"))]) (geeknote . [(20160717 1249) ((emacs (24))) "Use Evernote in Emacs through geeknote" single ((:commit . "8ed607c76864afcc9c338972ab093caf4501cbf8") (:keywords "evernote" "geeknote" "note" "emacs-evernote" "evernote-mode") (:authors ("Evan Dale Aromin")) (:maintainer "Evan Dale Aromin") (:url . "http://github.com/avendael/emacs-geeknote"))]) (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"))]) (confluence . [(20151021 128) ((xml-rpc (1 6 4))) "Emacs mode for interacting with confluence wikis" tar ((:commit . "4518d270a07760644c4204985c83d234ece4738b") (:keywords "confluence" "wiki" "xmlrpc") (:authors ("James Ahlborn")) (:maintainer "James Ahlborn") (:url . "http://code.google.com/p/confluence-el/"))]) (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"))]) (feature-mode . [(20170907 1448) nil "Major mode for editing Gherkin (i.e. Cucumber) user stories" tar ((:commit . "722b352c4f0b800a9356dd369c79612782b3b847"))]) (projectile-rails . [(20181009 1317) ((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 . "af0f826f2e1b1aad4e31e089e5fc7b5937e82359") (:keywords "rails" "projectile") (:authors ("Adam Sokolnicki" . "adam.sokolnicki@gmail.com")) (:maintainer "Adam Sokolnicki" . "adam.sokolnicki@gmail.com") (:url . "https://github.com/asok/projectile-rails"))]) (alchemist . [(20180312 1304) ((elixir-mode (2 2 5)) (dash (2 11 0)) (emacs (24 4)) (company (0 8 0)) (pkg-info (0 4)) (s (1 11 0))) "Elixir tooling integration into Emacs" tar ((:commit . "6f99367511ae209f8fe2c990779764bbb4ccb6ed") (:keywords "languages" "elixir" "elixirc" "mix" "hex" "alchemist") (:authors ("Samuel Tonini" . "tonini.samuel@gmail.com")) (:maintainer "Samuel Tonini" . "tonini.samuel@gmail.com") (:url . "http://www.github.com/tonini/alchemist.el"))]) (ember-mode . [(20181001 936) ((cl-lib (0 5))) "Ember navigation mode for emacs" single ((:commit . "88e5ffd33d8664b4d5124d6aa2ea9ed8d50c8c9e") (:keywords "ember" "ember.js" "emberjs") (:authors ("Aad Versteden" . "madnificent@gmail.com")) (:maintainer "Aad Versteden" . "madnificent@gmail.com"))]) (ember-yasnippets . [(20160526 1658) ((yasnippet (0 8 0))) "Snippets for Ember.js development" tar ((:commit . "3b5bd01569646237bf1b540d097e12f9118b67f4") (:keywords "tools" "abbrev" "languages") (:authors ("Ron White" . "ronco@costite.com")) (:maintainer "Ron White" . "ronco@costite.com"))]) (pony-mode . [(20170807 1522) nil "Minor mode for working with Django Projects" tar ((:commit . "760684d30b6c234d1b88c9a4673a808f36f7f341"))]) (add-node-modules-path . [(20180710 2342) nil "Add node_modules to your exec-path" single ((:commit . "f31e69ccb681f882aebb806ce6e9478e3ac39708") (:keywords "javascript" "node" "node_modules" "eslint") (:authors ("Neri Marschik" . "marschik_neri@cyberagent.co.jp")) (:maintainer "Neri Marschik" . "marschik_neri@cyberagent.co.jp") (:url . "https://github.com/codesuki/add-node-modules-path"))]) (emmet-mode . [(20180613 341) nil "Unofficial Emmet's support for emacs" single ((:commit . "1acb821e0142136344ccf40c1e5fb664d7db2e70") (:keywords "convenience") (:authors ("Shin Aoyama" . "smihica@gmail.com")) (:maintainer "Shin Aoyama" . "smihica@gmail.com") (:url . "https://github.com/smihica/emmet-mode"))]) (evil-matchit . [(20181111 604) ((evil (1 2 0)) (emacs (24 4))) "Vim matchit ported to Evil" tar ((:commit . "7d65b4167b1f0086c2b42b3aec805e47a0d355c4") (:keywords "matchit" "vim" "evil") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") (:url . "http://github.com/redguardtoo/evil-matchit"))]) (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"))]) (lsp-javascript-typescript . [(20180614 2011) ((lsp-mode (3 0)) (typescript-mode (0 1)) (emacs (25 1))) "Javascript/Typescript support for lsp-mode" single ((:commit . "ab62826962887e82f0bc968817be4fc89a6953e4") (:keywords "languages" "tools") (:authors ("George Pittarelli" . "g@gjp.cc")) (:maintainer "George Pittarelli" . "g@gjp.cc") (:url . "https://github.com/emacs-lsp/lsp-javascript"))]) (prettier-js . [(20180109 726) nil "Minor mode to format JS code on file save" single ((:commit . "fac9dd29720f8417bd8cd5dd8ab5138c6dd7d701") (:keywords "convenience" "wp" "edit" "js") (:authors ("James Long and contributors")) (:maintainer "James Long and contributors") (:url . "https://github.com/prettier/prettier-emacs"))]) (rjsx-mode . [(20180913 2224) ((emacs (24 4)) (js2-mode (20170504))) "Real support for JSX" single ((:commit . "89358fd230878a19e3232a3e4ce21b7fb608faae") (:keywords "languages") (:authors ("Felipe Ochoa" . "felipe@fov.space")) (:maintainer "Felipe Ochoa" . "felipe@fov.space") (:url . "https://github.com/felipeochoa/rjsx-mode/"))]) (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"))]) (flycheck-ocaml . [(20170730 2153) ((emacs (24 1)) (flycheck (0 22)) (merlin (3 0 1)) (let-alist (1 0 3))) "Flycheck: OCaml support" single ((:commit . "8707a7bf545a8639a6a5c600a98d9a2ea1487dc9") (:keywords "convenience" "tools" "languages") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com") (:url . "https://github.com/flycheck/flycheck-ocaml"))]) (merlin . [(20180816 815) nil "Mode for Merlin, an assistant for OCaml." tar ((:commit . "aac7b39eb5305faa0ddd6b1d6fe2f4b36ac85aed") (:keywords "ocaml" "languages") (:authors ("Frédéric Bour ")) (:maintainer "Frédéric Bour ") (:url . "https://github.com/ocaml/merlin"))]) (ocp-indent . [(20180417 1549) nil "automatic indentation with ocp-indent" single ((:commit . "4830ebf5d1c1b8f47bc152ff13d2c6aa1aad705b") (:keywords "ocaml" "languages") (:url . "http://www.typerex.org/ocp-indent.html"))]) (caml . [(20181011 1328) nil "OCaml code editing commands for Emacs" tar ((:commit . "8145641e8a27b924ab05a7bea05e6ff52f0a217f") (:keywords "ocaml") (:authors ("Jacques Garrigue" . "garrigue@kurims.kyoto-u.ac.jp") ("Ian T Zimmerman" . "itz@rahul.net")) (:maintainer "Damien Doligez" . "damien.doligez@inria.fr") (:url . "https://github.com/ocaml/ocaml/"))]) (tuareg . [(20180918 1913) ((caml (3 12 0 1))) "OCaml mode for Emacs." tar ((:commit . "c030be472c2aea4d4b770705f9099fb00e952618") (: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"))]) (utop . [(20181010 2155) ((emacs (24))) "Universal toplevel for OCaml" single ((:commit . "ea38850e606dd18c94e2ccabc28485fec1c8f91f") (:keywords "ocaml" "languages") (:authors ("Jeremie Dimino" . "jeremie@dimino.org")) (:maintainer "Jeremie Dimino" . "jeremie@dimino.org") (:url . "https://github.com/diml/utop"))]) (geiser . [(20181117 650) nil "GNU Emacs and Scheme talk to each other" tar ((:commit . "dcf754c0b9cdb87ffa5930ef8ffbae9256f2d07d") (:url . "http://www.nongnu.org/geiser/"))]) (plantuml-mode . [(20180816 1012) ((emacs (25 0))) "Major mode for PlantUML" single ((:commit . "b358a53bb0ab195f0193169d0d6869a3ef2c543e") (:keywords "uml" "plantuml" "ascii") (:authors ("Zhang Weize (zwz)")) (:maintainer "Carlo Sciolla (skuro)"))]) (powershell . [(20181011 1951) ((emacs (24))) "Mode for editing PowerShell scripts" single ((:commit . "c9a20e5a8b02dc5d7ccd2b1974eba28a9348ad5e") (:keywords "powershell" "languages") (:authors ("Frédéric Perrin ")) (:maintainer "Frédéric Perrin ") (:url . "http://github.com/jschaf/powershell.el"))]) (vimrc-mode . [(20181116 1919) nil "Major mode for vimrc files" single ((:commit . "13bc150a870d5d4a95f1111e4740e2b22813c30e") (:keywords "languages" "vim") (:url . "https://github.com/mcandre/vimrc-mode"))]) (dactyl-mode . [(20140906 1725) nil "Major mode for editing Pentadactyl config files" single ((:commit . "cc55fe6b987271d9647492b8df4c812d884f661f") (:keywords "languages" "vim") (:url . "https://github.com/luxbock/dactyl-mode"))]) (company-plsense . [(20180118 58) ((company (0 9 3)) (cl-lib (0 5 0)) (dash (2 12 0)) (s (1 12)) (emacs (24))) "Company backend for Perl" single ((:commit . "b48e3181e08ec597269621d621aa06636f02d883") (:authors ("Troy Hinckley" . "troy.hinckley@gmail.com")) (:maintainer "Troy Hinckley" . "troy.hinckley@gmail.com") (:url . "https://github.com/CeleritasCelery/company-plsense"))]) (test-simple . [(20170527 1532) ((cl-lib (0))) "Simple Unit Test Framework for Emacs Lisp" single ((:commit . "b3b69f52207d3a8111421ad7ab9ed82abbe85316") (:keywords "unit-test") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:url . "http://github.com/rocky/emacs-test-simple"))]) (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-relative . [(20170526 1010) nil "relative file load (within a multi-file Emacs package)" tar ((:commit . "738896e3da491b35399178ed2c6bc92cc728d119") (:keywords "internal") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:url . "http://github.com/rocky/emacs-load-relative"))]) (realgud . [(20180925 10) ((load-relative (1 2)) (loc-changes (1 2)) (test-simple (1 2 0)) (cl-lib (0 5)) (emacs (24))) "A modular front-end for interacting with external debuggers" tar ((:commit . "36782d69c806079eb067705ef67fcb3b9299ae01") (:keywords "gdb" "python" "perl" "go" "bash" "nodejs" "zsh" "bashdb" "zshdb" "remake" "make" "trepan" "perldb" "pdb") (:authors ("Rocky Bernstein" . "rocky@gnu.org")) (:maintainer "Rocky Bernstein" . "rocky@gnu.org") (:url . "http://github.com/realgud/realgud/"))]) (company-glsl . [(20171015 1749) ((company (0 9 4)) (glsl-mode (2 0)) (emacs (24 4))) "Support glsl in company-mode" single ((:commit . "a262c12c3bcd0807718c4edcaf2b054e30ef0e26") (:authors ("Guido Schmidt" . "git@guidoschmidt.cc")) (:maintainer "Guido Schmidt" . "git@guidoschmidt.cc") (:url . "https://github.com/guidoschmidt/company-glsl"))]) (cuda-mode . [(20151214 321) nil "NVIDIA CUDA Major Mode" single ((:commit . "9ae9eacfdba3559b5456342d0d03296290df8ff5") (:keywords "c" "languages") (:authors ("Jack Morrison" . "jackmorrison1@gmail.com")) (:maintainer "Jack Morrison" . "jackmorrison1@gmail.com"))]) (glsl-mode . [(20170927 1436) nil "major mode for Open GLSL shader files" single ((:commit . "384968506cf25c5c2df61b32fdfdbd041e3bf651") (:keywords "languages") (:url . "http://artis.inrialpes.fr/~Xavier.Decoret/resources/glsl-mode/"))]) (opencl-mode . [(20170816 1249) nil "Syntax coloring for opencl kernels" single ((:commit . "6e69434d0fa6e11a542acad370611bba18d3bc5c") (: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"))]) (nasm-mode . [(20180711 1909) ((emacs (24 3))) "NASM x86 assembly major mode" single ((:commit . "1d4871ef184fc5da792bccbae1ea189f876706fc") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/nasm-mode"))]) (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"))]) (company-go . [(20180427 1856) ((company (0 8 0)) (go-mode (1 0 0))) "company-mode backend for Go (using gocode)" single ((:commit . "6730ddbe5142ea62dc8fe415bb1909d2966f7d9e") (:keywords "languages") (:authors ("nsf" . "no.smile.face@gmail.com")) (:maintainer "nsf" . "no.smile.face@gmail.com"))]) (flycheck-gometalinter . [(20180424 941) ((emacs (24)) (flycheck (0 22))) "flycheck checker for gometalinter" single ((:commit . "422f6e4b77b27fd7370f0c88437ac5072c9d3413") (:keywords "convenience" "tools" "go") (:authors ("Diep Pham" . "me@favadi.com")) (:maintainer "Diep Pham" . "me@favadi.com") (:url . "https://github.com/favadi/flycheck-gometalinter"))]) (flycheck-golangci-lint . [(20180711 817) ((emacs (24)) (flycheck (0 22))) "Flycheck checker for golangci-lint" single ((:commit . "b4b51aa6fe5335c0f46f2f83c7dc32e4141ff9f1") (:keywords "convenience" "tools" "go") (:authors ("Wei Jian Gan" . "weijiangan@outlook.com")) (:maintainer "Wei Jian Gan" . "weijiangan@outlook.com") (:url . "https://github.com/weijiangan/flycheck-golangci-lint"))]) (go-eldoc . [(20170305 1427) ((emacs (24 3)) (go-mode (1 0 0))) "eldoc for go-mode" single ((:commit . "cbbd2ea1e94a36004432a9ac61414cb5a95a39bd") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-go-eldoc"))]) (go-fill-struct . [(20171225 331) ((emacs (24))) "Fill struct for golang." single ((:commit . "a613d0b378473eef39e8fd5724abe790aea84321") (:keywords "tools") (:authors ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainer "Sergey Kostyaev" . "feo.me@ya.ru") (:url . "https://github.com/s-kostyaev/go-fill-struct"))]) (go-gen-test . [(20171023 358) ((emacs (24 3)) (s (1 12))) "Generate tests for go code with gotests" single ((:commit . "44c202ac97e728e93a35cee028a0ea8dd6e4292c") (:keywords "languages") (:authors ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainer "Sergey Kostyaev" . "feo.me@ya.ru") (:url . "https://github.com/s-kostyaev/go-gen-test"))]) (go-guru . [(20181012 330) ((go-mode (1 3 1)) (cl-lib (0 5))) "Integration of the Go 'guru' analysis tool into Emacs." single ((:commit . "120fb911f1d8038f828da85eed8aaad977dabd8c") (:keywords "tools"))]) (go-impl . [(20170125 1552) ((emacs (24 3)) (go-mode (1 3 0))) "impl integration for go-mode" single ((:commit . "69f0d0ef05771487e15abec500cd06befd171abf") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-go-impl"))]) (go-rename . [(20180627 648) ((go-mode (1 3 1))) "Integration of the 'gorename' tool into Emacs." single ((:commit . "120fb911f1d8038f828da85eed8aaad977dabd8c") (:keywords "tools"))]) (go-mode . [(20181012 329) nil "Major mode for the Go programming language" single ((:commit . "120fb911f1d8038f828da85eed8aaad977dabd8c") (:keywords "languages" "go") (:authors ("The go-mode Authors")) (:maintainer "The go-mode Authors") (:url . "https://github.com/dominikh/go-mode.el"))]) (go-tag . [(20180227 411) ((emacs (24 0)) (go-mode (1 5 0))) "Edit Golang struct field tag" single ((:commit . "59b243f2fa079d9de9d56f6e2d94397e9560310a") (:keywords "tools") (:authors ("Brantou" . "brantou89@gmail.com")) (:maintainer "Brantou" . "brantou89@gmail.com") (:url . "https://github.com/brantou/emacs-go-tag"))]) (godoctor . [(20180710 2152) nil "Frontend for godoctor" single ((:commit . "4b45ff3d0572f0e84056e4c3ba91fcc178199859") (:keywords "go" "golang" "refactoring") (:authors ("Sangho Na" . "microamp@protonmail.com")) (:maintainer "Sangho Na" . "microamp@protonmail.com") (:url . "https://github.com/microamp/godoctor.el"))]) (lsp-go . [(20180914 515) ((lsp-mode (3 0))) "Go support for lsp-mode" single ((:commit . "2327556e78682770a7a434610b08115f20ea5b1a") (:keywords "go" "golang") (:authors ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainer "Vibhav Pant" . "vibhavp@gmail.com") (:url . "https://github.com/emacs-lsp/lsp-go"))]) (faceup . [(20170925 1946) nil "Markup language for faces and font-lock regression testing" single ((:commit . "6c92dad56a133e14e7b27831e1bcf9b3a71ff154") (:keywords "faces" "languages") (:authors ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:url . "https://github.com/Lindydancer/faceup"))]) (racket-mode . [(20181117 229) ((emacs (24 3)) (faceup (0 0 2)) (s (1 9 0))) "Major mode for Racket language." tar ((:commit . "dd51668ad9d5293c5eb57f37bbc4c25a201ba467") (:authors ("Greg Hendershott")) (:maintainer "Greg Hendershott") (:url . "https://github.com/greghendershott/racket-mode"))]) (arduino-mode . [(20180509 36) ((emacs (25)) (cl-lib (0 5)) (spinner (1 7 3))) "Major mode for editing Arduino code." tar ((:commit . "e39cb1c02acb6676aea35f93fbd0d86badce6a38") (:keywords "languages" "arduino") (:maintainer "stardiviner" . "numbchild@gmail.com") (:url . "https://github.com/stardiviner/arduino-mode"))]) (kivy-mode . [(20180702 2029) nil "Emacs major mode for editing Kivy files" single ((:commit . "372b81964f55d2ca74641944ab8c908172306e59") (:authors ("Dean Serenevy" . "dean@serenevy.net")) (:maintainer "Dean Serenevy" . "dean@serenevy.net"))]) (matlab-mode . [(20180928 1526) nil "Major mode for MATLAB(R) dot-m files" tar ((:commit . "3fbca4259b2584bde08df07ba51944d7e3e2b4f4") (:url . "http://sourceforge.net/projects/matlab-emacs/") (:keywords "matlab" "programming" "language" "(X)emacs"))]) (pkgbuild-mode . [(20181116 1331) ((emacs (25 1))) "Interface to the ArchLinux package manager" single ((:commit . "c27b65c3deb116b296cef013f342159d9dec5c11") (:keywords "languages") (:authors ("Juergen Hoetzel" . "juergen@hoetzel.info")) (:maintainer "Juergen Hoetzel" . "juergen@hoetzel.info") (:url . "https://github.com/juergenhoetzel/pkgbuild-mode"))]) (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"))]) (scad-mode . [(20180109 209) nil "A major mode for editing OpenSCAD code" single ((:commit . "d4d3504975f9bd08c09e10db665de3fc83542747") (: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"))]) (stan-mode . [(20180110 2241) nil "Major mode for editing Stan files" tar ((:commit . "a8e88473ef996b455523dc3fbcf2d8520659652f") (:keywords "languanges") (:authors ("Jeffrey Arnold" . "jeffrey.arnold@gmail.com") ("Daniel Lee" . "bearlee@alum.mit.edu")) (:maintainer "Jeffrey Arnold" . "jeffrey.arnold@gmail.com") (:url . "http://github.com/stan-dev/stan-mode"))]) (thrift . [(20180905 1050) ((emacs (24))) "major mode for fbthrift and Apache Thrift files" single ((:commit . "c272a9a7abcea8a07bc4eebc308abaab6b1755d6") (:keywords "languages"))]) (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"))]) (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"))]) (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/"))]) (flycheck-nim . [(20160715 428) ((dash (2 4 0)) (flycheck (0 20))) "Defines a flycheck syntax checker for nim" single ((:commit . "6d27349b66e44578851e6148299709d64d2bde41") (:authors ("Adam Schwalm" . "adamschwalm@gmail.com")) (:maintainer "Adam Schwalm" . "adamschwalm@gmail.com") (:url . "https://github.com/ALSchwalm/flycheck-nim"))]) (flycheck-nimsuggest . [(20171027 2208) ((flycheck (0 23)) (emacs (24 3))) "flycheck backend for Nim using nimsuggest" single ((:commit . "dc9a5de1cb3ee05db5794d824610959a1f603bc9") (:authors ("Yuta Yamada ")) (:maintainer "Yuta Yamada ") (:url . "https://github.com/yuutayamada/flycheck-nimsuggest"))]) (commenter . [(20160219 1627) ((emacs (24 4)) (let-alist (1 0 4))) "multiline-comment support package" single ((:commit . "6d1885419434ba779270c6fda0e30d390bb074bd") (:keywords "comment") (:authors ("Yuta Yamada ")) (:maintainer "Yuta Yamada ") (:url . "https://github.com/yuutayamada/commenter"))]) (nim-mode . [(20181028 1713) ((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 . "2acb601e6b3bf81f2fe29cfa1f3967e81bd12564") (:keywords "nim" "languages") (:authors ("Simon Hafner")) (:maintainer "Simon Hafner" . "hafnersimon@gmail.com"))]) (hy-mode . [(20180702 1940) ((dash (2 13 0)) (dash-functional (1 2 0)) (s (1 11 0)) (emacs (24))) "Major mode for Hylang" single ((:commit . "71a12a9208c4b87859bcbb6978e7915dd518e8dd") (:keywords "languages" "lisp" "python") (:url . "http://github.com/hylang/hy-mode"))]) (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"))]) (pyenv-mode . [(20170801 2348) ((pythonic (0 1 0))) "Integrate pyenv with python-mode" single ((:commit . "eabb1c66f9e0c0500fef4d089508aad246d81dc0") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/pyenv-mode"))]) (pyvenv . [(20180831 847) nil "Python virtual environment interface" single ((:commit . "921ae2356b6a111ac0b7e44fd04cba8e95cbe936") (:keywords "python" "virtualenv" "tools") (:authors ("Jorgen Schaefer" . "contact@jorgenschaefer.de")) (:maintainer "Jorgen Schaefer" . "contact@jorgenschaefer.de") (:url . "http://github.com/jorgenschaefer/pyvenv"))]) (cython-mode . [(20180213 1654) nil "Major mode for editing Cython files" single ((:commit . "97f5e715acf082cb013169b57966f37708a717ee"))]) (helm-cscope . [(20170326 722) ((xcscope (1 0)) (helm (1 6 7)) (cl-lib (0 5)) (emacs (24 1))) "Helm interface for xcscope.el." single ((:commit . "3cc7259ab4989f9f7ca039e703cdac14b907530a") (:keywords "cscope" "helm") (:authors ("alpha22jp" . "alpha22jp@gmail.com")) (:maintainer "alpha22jp" . "alpha22jp@gmail.com") (:url . "https://github.com/alpha22jp/helm-cscope.el"))]) (helm-pydoc . [(20160918 542) ((helm-core (2 0)) (emacs (24 4))) "pydoc with helm interface" tar ((:commit . "85480a29b56dacde425655bc8f5a597c785afdf5") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-helm-pydoc"))]) (epc . [(20140610 534) ((concurrent (0 3 1)) (ctable (0 1 2))) "A RPC stack for the Emacs Lisp" tar ((:commit . "e1bfa5ca163273859336e3cc89b4b6460f7f8cda") (:keywords "lisp" "rpc") (:authors ("SAKURAI Masashi ")) (:maintainer "SAKURAI Masashi ") (:url . "https://github.com/kiwanami/emacs-epc"))]) (concurrent . [(20161229 330) ((emacs (24 3)) (deferred (0 5 0))) "Concurrent utility functions for emacs lisp" single ((:commit . "2239671d94b38d92e9b28d4e12fd79814cfb9c16") (:keywords "deferred" "async" "concurrent") (:authors ("SAKURAI Masashi ")) (:maintainer "SAKURAI Masashi ") (:url . "https://github.com/kiwanami/emacs-deferred/blob/master/README-concurrent.markdown"))]) (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"))]) (live-py-mode . [(20181116 536) ((emacs (24 3))) "Live Coding in Python" tar ((:commit . "e823a86707a5821ad761fd27a9c9e90ac47d2319") (: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/"))]) (nose . [(20140520 1648) nil "Easy Python test running in Emacs" single ((:keywords "nose" "python" "testing"))]) (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"))]) (pipenv . [(20180719 547) ((emacs (25 1)) (f (0 19 0)) (s (1 12 0))) "A Pipenv porcelain." single ((:commit . "5582bf60577de74e6301871c6b77ac86b6ce1970") (:authors ("Paul Walsh" . "paulywalsh@gmail.com")) (:maintainer "Paul Walsh" . "paulywalsh@gmail.com") (:url . "https://github.com/pwalsh/pipenv.el"))]) (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"))]) (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"))]) (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"))]) (python . [(0 26 1) ((emacs (24 1)) (cl-lib (1 0))) "Python's flying circus support for Emacs" single ((:url . "https://github.com/fgallina/python.el") (:keywords "languages"))]) (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"))]) (yapfify . [(20180830 733) nil "(automatically) format python buffers using YAPF." single ((:commit . "b858225e1debe6734ee718e5c3c209152652a8b3") (:authors ("Joris Engbers" . "info@jorisengbers.nl")) (:maintainer "Joris Engbers" . "info@jorisengbers.nl") (:url . "https://github.com/JorisE/yapfify"))]) (anaconda-mode . [(20181030 2109) ((emacs (25)) (pythonic (0 1 0)) (dash (2 6 0)) (s (1 9)) (f (0 16 2))) "Code navigation, documentation lookup and completion for Python" single ((:commit . "21a6218c2299575c82573a5c2c773d72b0f8be0d") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/anaconda-mode"))]) (pythonic . [(20180920 2315) ((emacs (25)) (s (1 9)) (f (0 17 2))) "Utility functions for writing pythonic emacs package." single ((:commit . "6a5a2a365e4ea6fc5adfa96359418c437aa351c8") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/pythonic"))]) (company-anaconda . [(20181025 1305) ((company (0 8 0)) (anaconda-mode (0 1 1)) (cl-lib (0 5 0)) (dash (2 6 0)) (s (1 9))) "Anaconda backend for company-mode" single ((:commit . "0ab70de1740e67cee451abcf3685c7525ff9e95a") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/anaconda-mode"))]) (lsp-python . [(20181108 754) ((lsp-mode (3 0))) "Python support for lsp-mode" single ((:commit . "9b67b63c4c8c53c77eda8b8081b8d458e655ba55") (:keywords "python") (:authors ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainer "Vibhav Pant" . "vibhavp@gmail.com") (:url . "https://github.com/emacs-lsp/lsp-python"))]) (eval-sexp-fu . [(20180510 203) ((cl-lib (0)) (highlight (0))) "Tiny functionality enhancements for evaluating sexps." single ((:commit . "1cfd0f3e167d63080692fad97ffe0091b024ad73") (:keywords "lisp" "highlight" "convenience") (:authors ("Takeshi Banse" . "takebi@laafc.net")) (:maintainer "Takeshi Banse" . "takebi@laafc.net"))]) (cider-eval-sexp-fu . [(20160907 800) ((emacs (24)) (highlight (0)) (eval-sexp-fu (0 4 0))) "Briefly highlights an evaluated sexp." single ((:commit . "5687e7b33e17f2be40b036dac82da4a5bc6705fb") (:keywords "languages" "clojure" "cider") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com"))]) (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"))]) (edn . [(20160215 1219) ((cl-lib (0 3)) (emacs (24 1)) (peg (0 6))) "Support for reading and writing the edn data format from elisp" single ((:commit . "be9e32d1b49e35247b263b0243df7cfdc8d413ab") (:keywords "edn" "clojure") (:authors ("Lars Andersen" . "expez@expez.com")) (:maintainer "Lars Andersen" . "expez@expez.com") (:url . "https://www.github.com/expez/edn.el"))]) (paredit . [(20171127 205) nil "minor mode for editing parentheses" single ((:commit . "acbe10fdd85d2e91831adf70b6a828bc7e900da0") (:keywords "lisp") (:authors ("Taylor R. Campbell" . "campbell+paredit@mumble.net")) (:maintainer "Taylor R. Campbell" . "campbell+paredit@mumble.net"))]) (peg . [(20150708 641) nil "Parsing Expression Grammars in Emacs Lisp" single ((:commit . "081efeca91d790c7fbc90871ac22c40935f4833b"))]) (clj-refactor . [(20180826 2149) ((emacs (25 1)) (seq (2 19)) (yasnippet (0 6 1)) (paredit (24)) (multiple-cursors (1 2 2)) (clojure-mode (5 6 1)) (cider (0 17 0)) (edn (1 1 2)) (inflections (2 3)) (hydra (0 13 2))) "A collection of commands for refactoring Clojure code" tar ((:commit . "ec158357c4f7a375bc47f89de71ea28028a3bfa0") (:keywords "convenience" "clojure" "cider") (:authors ("Magnar Sveen" . "magnars@gmail.com") ("Lars Andersen" . "expez@expez.com") ("Benedek Fazekas" . "benedek.fazekas@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) (clojure-cheatsheet . [(20180201 804) ((helm (1 7 7)) (cider (0 9 0))) "The Clojure Cheatsheet for Emacs" single ((:commit . "85c382317a56bbdfac03ae95999c28fc0cde65d7") (:keywords "clojure" "cider" "cheatsheet" "helm") (:authors ("Kris Jenkins" . "krisajenkins@gmail.com")) (:maintainer "Kris Jenkins" . "krisajenkins@gmail.com") (:url . "https://github.com/clojure-emacs/clojure-cheatsheet"))]) (clojure-snippets . [(20180314 1308) ((yasnippet (0 10 0))) "Yasnippets for clojure" tar ((:commit . "6068dca90467a0f4ebc2cd39338a173d6f5ddc04"))]) (cider . [(20181110 1413) ((emacs (25)) (clojure-mode (5 9)) (pkg-info (0 4)) (queue (0 2)) (spinner (1 7)) (seq (2 16)) (sesman (0 3 2))) "Clojure Interactive Development Environment that Rocks" tar ((:commit . "3a520ec76cdd5509bf231e49809715f20a87d74b") (:keywords "languages" "clojure" "cider") (:authors ("Tim King" . "kingtim@gmail.com") ("Phil Hagelberg" . "technomancy@gmail.com") ("Bozhidar Batsov" . "bozhidar@batsov.com") ("Artur Malabarba" . "bruce.connor.am@gmail.com") ("Hugo Duncan" . "hugo@hugoduncan.org") ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.com") (:url . "http://www.github.com/clojure-emacs/cider"))]) (sesman . [(20181109 1100) ((emacs (25))) "Generic Session Manager" tar ((:commit . "2a1a9a4ccfd88127e13f2655ac130c82fe84f2f7") (:keywords "process") (:authors ("Vitalie Spinu")) (:maintainer "Vitalie Spinu") (:url . "https://github.com/vspinu/sesman"))]) (queue . [(0 2) nil "Queue data structure" single ((:url . "http://www.dr-qubit.org/emacs.php") (:keywords "extensions" "data structures" "queue"))]) (clojure-mode . [(20181024 2224) ((emacs (25 1))) "Major mode for Clojure code" single ((:commit . "71b32ee95e8ec99098e212cd0ec74cb4c002e8c6") (:keywords "languages" "clojure" "clojurescript" "lisp") (:url . "http://github.com/clojure-emacs/clojure-mode"))]) (sayid . [(20181024 1838) ((cider (0 14 0))) "sayid nREPL middleware client" single ((:commit . "078378240277160b00d332065d8325e713c0b526") (:authors ("Bill Piel" . "bill@billpiel.com")) (:maintainer "Bill Piel" . "bill@billpiel.com") (:url . "https://github.com/clojure-emacs/sayid"))]) (elixir-mode . [(20180711 1245) ((emacs (24)) (pkg-info (0 4))) "Major mode for editing Elixir files" tar ((:commit . "bfd09392a0253e4b96c642472e5d5b757a5254f8") (:keywords "languages" "elixir") (:url . "https://github.com/elixir-lang/emacs-elixir"))]) (flycheck-mix . [(20170118 1430) ((flycheck (27)) (elixir-mode (1 8 0))) "Elixir mix flycheck integration" single ((:commit . "76684d4b5987925b98b254aab656f8bf8198ab88") (:keywords "elixir" "flycheck" "mix") (:authors ("Tomasz Kowal" . "tomekowal@gmail.com")) (:maintainer "Tomasz Kowal" . "tomekowal@gmail.com") (:url . "https://github.com/tomekowal/flycheck-mix"))]) (flycheck-credo . [(20170526 1545) ((flycheck (29))) "flycheck checker for elixir credo" single ((:commit . "e88f11ead53805c361ec7706e44c3dfee1daa19f") (:authors ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainer "Aaron Jensen" . "aaronjensen@gmail.com") (:url . "https://github.com/aaronjensen/flycheck-credo"))]) (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"))]) (clang-format . [(20180406 1514) ((cl-lib (0 3))) "Format code using clang-format" single ((:commit . "5556c31528af2661bed3011bd63ffc0ed44e18a0") (:keywords "tools" "c"))]) (company-c-headers . [(20180814 1730) ((emacs (24 1)) (company (0 8))) "Company mode backend for C/C++ header files" single ((:commit . "41331192b3961c8e3a51540678e1d11eaa346f03") (:keywords "development" "company") (:authors ("Alastair Rankine" . "alastair@girtby.net")) (:maintainer "Alastair Rankine" . "alastair@girtby.net"))]) (company-rtags . [(20180730 338) ((emacs (24 3)) (company (0 8 1)) (rtags (2 10))) "RTags back-end for company" single ((:commit . "6aa45cb37524fad6250ac4694b4a96c53eb29d0e") (:authors ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainer "Jan Erik Hanssen" . "jhanssen@gmail.com") (:url . "http://rtags.net"))]) (company-ycmd . [(20180520 1053) ((ycmd (1 3)) (company (0 9 3)) (deferred (0 5 1)) (s (1 11 0)) (dash (2 13 0)) (let-alist (1 0 5)) (f (0 19 0))) "company-mode backend for ycmd" single ((:commit . "ef87d020d3314efbac2e8925c115d0ac5c128c2a") (:url . "https://github.com/abingham/emacs-ycmd"))]) (disaster . [(20171016 2152) nil "Disassemble C/C++ code under cursor in Emacs" single ((:commit . "10a785facc60d89d78e0d5177985ab1af1741bb4") (:keywords "tools") (:authors ("Justine Tunney" . "jtunney@gmail.com")) (:maintainer "Justine Tunney" . "jtunney@gmail.com") (:url . "https://github.com/jart/disaster"))]) (flycheck-rtags . [(20180619 824) ((emacs (24)) (flycheck (0 23)) (rtags (2 10))) "RTags Flycheck integration." single ((:commit . "6aa45cb37524fad6250ac4694b4a96c53eb29d0e") (:authors ("Christian Schwarzgruber" . "c.schwarzgruber.cs@gmail.com")) (:maintainer "Christian Schwarzgruber" . "c.schwarzgruber.cs@gmail.com") (:url . "http://rtags.net"))]) (google-c-style . [(20180130 1736) nil "Google's C/C++ style for c-mode" single ((:commit . "ad22a7536d9cbc552c2d265d5df18be9b1b24faa") (:keywords "c" "tools"))]) (helm-rtags . [(20170813 411) ((helm (2 0)) (rtags (2 10))) "A front-end for rtags" single ((:commit . "6aa45cb37524fad6250ac4694b4a96c53eb29d0e") (:authors ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainer "Jan Erik Hanssen" . "jhanssen@gmail.com") (:url . "http://rtags.net"))]) (ivy-rtags . [(20170523 454) ((ivy (0 7 0)) (rtags (2 10))) "RTags completion back-end for ivy" single ((:commit . "6aa45cb37524fad6250ac4694b4a96c53eb29d0e") (:authors ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainer "Jan Erik Hanssen" . "jhanssen@gmail.com") (:url . "http://rtags.net"))]) (rtags . [(20181117 2108) nil "A front-end for rtags" single ((:commit . "6aa45cb37524fad6250ac4694b4a96c53eb29d0e") (:authors ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainer "Jan Erik Hanssen" . "jhanssen@gmail.com") (:url . "http://rtags.net"))]) (cquery . [(20180811 2131) ((emacs (25 1)) (lsp-mode (3 4)) (dash (0 13))) "cquery client for lsp-mode" tar ((:commit . "a803e92e77e1ffc74c13a753c1eb4f6f47127a97") (:keywords "languages" "lsp" "c++") (:authors ("Tobias Pisani")) (:maintainer "Tobias Pisani") (:url . "https://github.com/jacobdufault/cquery"))]) (ccls . [(20181106 546) ((emacs (25 1)) (lsp-mode (4 2)) (dash (0 14)) (projectile (1 0 0))) "ccls client for lsp-mode" tar ((:commit . "07ad553950e69f862f7c74c9b1f02c00ab450d22") (:keywords "languages" "lsp" "c++") (:authors ("Tobias Pisani, Fangrui Song")) (:maintainer "Tobias Pisani, Fangrui Song") (:url . "https://github.com/MaskRay/emacs-ccls"))]) (company-emoji . [(20180925 2008) ((cl-lib (0 5)) (company (0 8 0))) "company-mode backend for emoji" tar ((:commit . "f0d91d5be0077b20b418a3ba37d36f431fae322f") (:keywords "emoji" "company") (:authors ("Alex Dunn" . "dunn.alex@gmail.com")) (:maintainer "Alex Dunn" . "dunn.alex@gmail.com") (:url . "https://github.com/dunn/company-emoji.git"))]) (emoji-cheat-sheet-plus . [(20150617 1331) ((emacs (24)) (helm (1 6 4))) "emoji-cheat-sheet for emacs" tar ((:commit . "96a003127d646a2683d81ca906a17eace0a6413e") (:keywords "emacs" "emoji") (:authors ("Sylvain Benner (based on the work of Shingo Fukuyama)")) (:maintainer "Sylvain Benner (based on the work of Shingo Fukuyama)") (:url . "https://github.com/syl20bnr/emacs-emoji-cheat-sheet-plus"))]) (gh-md . [(20151207 1740) ((emacs (24))) "Render markdown using the Github api" single ((:commit . "693cb0dcadff70e813e1a9d303d227aff7898557") (:keywords "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:url . "https://github.com/emacs-pe/gh-md.el"))]) (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"))]) (vmd-mode . [(20180223 1356) ((emacs (24 3))) "Fast Github-flavored Markdown preview using a vmd subprocess." single ((:commit . "24e38a20951dfad6e3e985c7cc6286c1e271da5f") (:keywords "markdown" "preview" "live" "vmd") (:authors ("Blake Miller" . "blak3mill3r@gmail.com")) (:maintainer "Blake Miller" . "blak3mill3r@gmail.com") (:url . "https://github.com/blak3mill3r/vmd-mode"))]) (auctex-latexmk . [(20170618 1636) ((auctex (11 87))) "Add LatexMk support to AUCTeX" single ((:commit . "4d353522650d7685acbf1d38f7dbc504f734bd84") (:keywords "tex") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com") (:url . "https://github.com/tom-tan/auctex-latexmk/"))]) (auctex . [(12 1 1) nil "Integrated environment for *TeX*" tar ((:url . "http://www.gnu.org/software/auctex/"))]) (company-auctex . [(20180725 1912) ((yasnippet (0 8 0)) (company (0 8 0)) (auctex (11 87))) "Company-mode auto-completion for AUCTeX" single ((:commit . "48c42c58ce2f0e693301b0cb2d085055410c1b25") (:authors ("Christopher Monsanto , Alexey Romanov" . "alexey.v.romanov@gmail.com")) (:maintainer "Christopher Monsanto , Alexey Romanov" . "alexey.v.romanov@gmail.com") (:url . "https://github.com/alexeyr/company-auctex/"))]) (magic-latex-buffer . [(20170531 5) ((cl-lib (0 5)) (emacs (24 3))) "Magically enhance LaTeX-mode font-locking for semi-WYSIWYG editing" single ((:commit . "c03277d5619d9adcd871f3e6480a1a27985810cb") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) (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"))]) (tide . [(20181025 1201) ((dash (2 10 0)) (s (1 11 0)) (flycheck (27)) (typescript-mode (0 1)) (cl-lib (0 5))) "Typescript Interactive Development Environment" tar ((:commit . "b2af64e5926b9c1493f7e39d5e928d61975816fb") (:keywords "typescript") (:authors ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainer "Anantha kumaran" . "ananthakumaran@gmail.com") (:url . "http://github.com/ananthakumaran/tide"))]) (typescript-mode . [(20181018 553) nil "Major mode for editing typescript" tar ((:commit . "fbaad515c90df0f5c3634c471034e3041a4a8cfc") (:keywords "typescript" "languages") (:url . "http://github.com/ananthakumaran/typescript.el"))]) (web-mode . [(20181104 2004) ((emacs (23 1))) "major mode for editing web templates" single ((:commit . "29ced993bb1a435bd82d3e7395bed13b99e87de4") (:keywords "languages") (:authors ("François-Xavier Bois ")) (:maintainer "François-Xavier Bois") (:url . "http://web-mode.org"))]) (cargo . [(20181112 722) ((emacs (24 3)) (rust-mode (0 2 0)) (markdown-mode (2 4))) "Emacs Minor Mode for Cargo, Rust's Package Manager." tar ((:commit . "f8504cd51021741a3931c28dc5e87cc16687420b") (:keywords "tools") (:authors ("Kevin W. van Rooijen" . "kevin.van.rooijen@attichacker.com")) (:maintainer "Kevin W. van Rooijen" . "kevin.van.rooijen@attichacker.com"))]) (racer . [(20181023 2304) ((emacs (24 3)) (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 . "bf8f76f17c64eff2d6ca6029ee0ab7a466590128") (:keywords "abbrev" "convenience" "matching" "rust" "tools") (:authors ("Phil Dawes")) (:maintainer "Phil Dawes") (:url . "https://github.com/racer-rust/emacs-racer"))]) (flycheck-rust . [(20180904 1117) ((emacs (24 1)) (flycheck (28)) (dash (2 13 0)) (seq (2 3)) (let-alist (1 0 4))) "Flycheck: Rust additions and Cargo support" single ((:commit . "f1220ccd9acbdb2556765f49f2f3dcb00dca2970") (:keywords "tools" "convenience") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com") (:url . "https://github.com/flycheck/flycheck-rust"))]) (toml-mode . [(20161107 1800) ((emacs (24)) (cl-lib (0 5))) "Major mode for editing TOML files" single ((:commit . "f6c61817b00f9c4a3cab1bae9c309e0fc45cdd06") (:keywords "data" "toml") (:authors ("Felix Chern" . "idryman@gmail.com")) (:maintainer "Felix Chern" . "idryman@gmail.com") (:url . "https://github.com/dryman/toml-mode.el"))]) (rust-mode . [(20181008 1628) ((emacs (24 0))) "A major emacs mode for editing Rust source code" single ((:commit . "12cb16964ce01f0e484b082ccc8a3430cc1c4158") (:keywords "languages") (:authors ("Mozilla")) (:maintainer "Mozilla") (:url . "https://github.com/rust-lang/rust-mode"))]) (lsp-rust . [(20180305 1308) ((emacs (25)) (lsp-mode (3 0)) (rust-mode (0 3 0)) (dash (1 0)) (markdown-mode (2 3))) "Rust support for lsp-mode" single ((:commit . "ecc889cc8735b280e0e6e84d2f4526b0048148b3") (:keywords "rust") (:authors ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainer "Vibhav Pant" . "vibhavp@gmail.com") (:url . "https://github.com/emacs-lsp/lsp-rust"))]) (purescript-mode . [(20181028 838) ((cl-lib (0 6))) "A PureScript editing mode" tar ((:commit . "a6c7e4cc5ea29cf96478490a57d495e745d6e054"))]) (psci . [(20180418 1233) ((purescript-mode (13 10)) (dash (2 9 0)) (s (1 9 0)) (f (0 17 1))) "Major mode for purescript repl psci" tar ((:commit . "3f5ef1141a97c4b5507204d48e8aeccd553e4591") (:keywords "purescript" "psci" "repl" "major" "mode") (:authors ("Antoine R. Dumont ")) (:maintainer "Antoine R. Dumont ") (:url . "https://github.com/ardumont/emacs-psci"))]) (psc-ide . [(20181002 1319) ((dash (2 13 0)) (dash-functional (1 2 0)) (company (0 8 7)) (cl-lib (0 5)) (s (1 10 0)) (emacs (24 4)) (flycheck (0 24)) (let-alist (1 0 4)) (seq (1 11))) "Minor mode for PureScript's psc-ide tool." tar ((:commit . "01a158b77210fec9c1bfc0caffaf08fccc0412ac") (: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"))]) (erlang . [(20181011 1236) ((emacs (24 1))) "Erlang major mode" tar ((:commit . "5873f86728d945be654e31d33fd72a9ecd9c6eaa"))]) (company-quickhelp . [(20180525 1003) ((emacs (24 3)) (company (0 8 9)) (pos-tip (0 4 6))) "Popup documentation for completion candidates" single ((:commit . "479676cade80a9f03802ca3d956591820ed5c537") (:keywords "company" "popup" "documentation" "quickhelp") (:authors ("Lars Andersen" . "expez@expez.com")) (:maintainer "Lars Andersen" . "expez@expez.com") (:url . "https://www.github.com/expez/company-quickhelp"))]) (fsharp-mode . [(20180518 1820) ((company (0 8 0)) (company-quickhelp (1 2 0)) (popup (0 5 3)) (pos-tip (0 4 5)) (s (1 3 1)) (dash (1 1 0)) (flycheck (0 25))) "F# mode for Emacs" tar ((:commit . "68d2121a7317d90fe3794c9295d117f4aebd1438"))]) (company-emacs-eclim . [(20180911 1121) ((eclim (0 3)) (company (0 7)) (cl-lib (0 5))) "Eclim company backend" single ((:commit . "23f5b294f833ce58516d7b9ae08a7792d70022a1"))]) (eclim . [(20181108 1134) ((dash (2 11 0)) (json (1 2)) (popup (0 5 2)) (s (1 9 0)) (cl-lib (0 5)) (yasnippet (0 10 0))) "An interface to the Eclipse IDE." tar ((:commit . "23f5b294f833ce58516d7b9ae08a7792d70022a1"))]) (ensime . [(20180615 1330) ((scala-mode (0 23)) (sbt-mode (0 2)) (yasnippet (0 10 0)) (company (0 9 0)) (dash (2 12 1)) (s (1 11 0)) (popup (0 5 3))) "ENhanced Scala Interaction Mode for Emacs" tar ((:commit . "34eb11dac3ec9d1c554c2e55bf056ece6983add7") (:keywords "languages") (:url . "https://github.com/ensime/ensime-emacs"))]) (gradle-mode . [(20150313 1905) ((s (1 8 0))) "Gradle integration with Emacs' compile" single ((:commit . "e4d665d5784ecda7ddfba015f07c69be3cfc45f2") (:keywords "gradle") (:authors ("Daniel Mijares" . "daniel.j.mijares@gmail.com")) (:maintainer "Daniel Mijares" . "daniel.j.mijares@gmail.com") (:url . "http://github.com/jacobono/emacs-gradle-mode"))]) (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"))]) (meghanada . [(20181116 1302) ((emacs (24 3)) (yasnippet (0 6 1)) (company (0 9 0)) (flycheck (0 23))) "A better java development mode" tar ((:commit . "4914ab1496d88251f179dc3b6158fc65e999804a") (:keywords "languages" "java") (:authors ("Yutaka Matsubara" . "yutaka.matsubara@gmail.com")) (:maintainer "Yutaka Matsubara" . "yutaka.matsubara@gmail.com") (:url . "https://github.com/mopemope/meghanada-emacs"))]) (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"))]) (lsp-java . [(20181102 1943) ((emacs (25 1)) (lsp-mode (3 0)) (markdown-mode (2 3)) (dash (2 14 1)) (f (0 20 0)) (ht (2 0)) (dash-functional (1 2 0))) "Java support for lsp-mode" tar ((:commit . "7eebaf5d45763627a5e49180d9f76a82432d62e3") (:keywords "java") (:url . "https://github.com/emacs-lsp/lsp-java"))]) (elm-mode . [(20181114 2235) ((f (0 17)) (let-alist (1 0 5)) (seq (2 2)) (s (1 7 0)) (emacs (24 4)) (dash (2 13 0))) "Major mode for Elm" tar ((:commit . "a52c0c6216145ec1cf39d06541ad74f33f4816cc") (:authors ("Joseph Collard")) (:maintainer "Joseph Collard") (:url . "https://github.com/jcollard/elm-mode"))]) (elm-test-runner . [(20180918 2255) ((emacs (24 4))) "Enhanced support for running elm-test" single ((:commit . "73696add403cee6547fcb6eb4e49798e1583d0e2") (:authors ("Juan Edi")) (:maintainer "Juan Edi") (:url . "https://github.com/juanedi/elm-test-runner"))]) (flycheck-elm . [(20181107 146) ((flycheck (0 29 -4)) (emacs (24 4)) (let-alist (1 0 5)) (seq (2 20))) "Flycheck support for the elm language" single ((:commit . "debd0af563cb6c2944367a691c7fa3021d9378c1") (:authors ("Brian Sermons")) (:maintainer "Brian Sermons") (:url . "https://github.com/bsermons/flycheck-elm"))]) (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"))]) (company-web . [(20180402 1155) ((company (0 8 0)) (dash (2 8 0)) (cl-lib (0 5 0)) (web-completion-data (0 1 0))) "Company version of ac-html, complete for web,html,emmet,jade,slim modes" tar ((:commit . "f0cc9187c9c34f72ad71f5649a69c74f996bae9a") (:keywords "html" "company") (:authors ("Olexandr Sydorchuk" . "olexandr.syd@gmail.com")) (:maintainer "Olexandr Sydorchuk" . "olexandr.syd@gmail.com") (:url . "https://github.com/osv/company-web"))]) (counsel-css . [(20180302 1036) ((emacs (24 4)) (counsel (0 7 0)) (cl-lib (0 5))) "stylesheet-selector-aware swiper" single ((:commit . "0536af00236cdce1ed08b40dd46c917e8b4b8869") (:keywords "convenience" "tools" "counsel" "swiper" "selector" "css" "less" "scss") (:authors ("Henrik Lissner ")) (:maintainer "Henrik Lissner" . "henrik@lissner.net") (:url . "https://github.com/hlissner/emacs-counsel-css"))]) (helm-css-scss . [(20140627 25) ((helm (1 0)) (emacs (24))) "CSS/SCSS/LESS Selectors with helm interface" single ((:commit . "ab8348aa98e0daa2f1b771e35bdb06bfacbe5016") (:keywords "scss" "css" "less" "selector" "helm") (:authors ("Shingo Fukuyama - http://fukuyama.co")) (:maintainer "Shingo Fukuyama - http://fukuyama.co") (:url . "https://github.com/ShingoFukuyama/helm-css-scss"))]) (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"))]) (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"))]) (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"))]) (haml-mode . [(20170924 453) ((emacs (24)) (cl-lib (0 5))) "Major mode for editing Haml files" single ((:commit . "1cbb2de8f0fc25f35448c5cad04642f28078f3bb") (:keywords "markup" "languages" "html") (:authors ("Natalie Weizenbaum")) (:maintainer "Natalie Weizenbaum") (:url . "https://github.com/nex3/haml-mode"))]) (sass-mode . [(20161007 626) ((haml-mode (3 0 15)) (cl-lib (0 5))) "Major mode for editing Sass files" single ((:commit . "37105f46f6ea3592039f2ea7d0463ae7f042616e") (:keywords "markup" "language" "css") (:authors ("Natalie Weizenbaum")) (:maintainer "Natalie Weizenbaum") (:url . "http://github.com/nex3/haml/tree/master"))]) (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"))]) (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"))]) (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"))]) (flycheck-kotlin . [(20170122 1137) ((flycheck (0 18))) "Support kotlin in flycheck" single ((:commit . "cbb9fbf70dbe8efcc3971b3606ee95c97469b1fe") (:authors ("Elric Milon" . "whirm_REMOVETHIS__@gmx.com")) (:maintainer "Elric Milon" . "whirm_REMOVETHIS__@gmx.com"))]) (kotlin-mode . [(20181109 1818) ((emacs (24 3))) "Major mode for kotlin" single ((:commit . "666187a086c042e70b65b13ea83b34a493440d95") (:keywords "languages") (:authors ("Shodai Yokoyama" . "quantumcars@gmail.com")) (:maintainer "Shodai Yokoyama" . "quantumcars@gmail.com"))]) (flycheck-crystal . [(20180627 242) ((flycheck (30))) "Add support for Crystal to Flycheck" single ((:commit . "8649736fea8960a5e54c3ec934484f231a518ea5") (:keywords "tools" "crystal") (:url . "https://github.com/crystal-lang-tools/emacs-crystal-mode"))]) (crystal-mode . [(20180827 329) ((emacs (24 4))) "Major mode for editing Crystal files" single ((:commit . "8649736fea8960a5e54c3ec934484f231a518ea5") (:keywords "languages" "crystal") (:url . "https://github.com/crystal-lang-tools/emacs-crystal-mode"))]) (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"))]) (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"))]) (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"))]) (cmm-mode . [(20150225 746) nil "Major mode for C-- source code" single ((:commit . "c3ad514dff3eb30434f6b20d953276d4c00de1ee"))]) (company-cabal . [(20170917 1317) ((cl-lib (0 5)) (company (0 8 0)) (emacs (24))) "company-mode cabal backend" tar ((:commit . "62112a7259e24bd6c08885629a185afe512b7d3d") (:authors ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainer "Iku Iwasa" . "iku.iwasa@gmail.com") (:url . "https://github.com/iquiw/company-cabal"))]) (company-ghci . [(20160311 200) ((company (0 8 11)) (haskell-mode (13))) "company backend which uses the current ghci process." single ((:commit . "c2d74a41166e76de2e78c87f582ba3a1179b2aa6") (:authors ("Hector Orellana" . "hofm92@gmail.com")) (:maintainer "Hector Orellana" . "hofm92@gmail.com"))]) (company-ghc . [(20170918 833) ((cl-lib (0 5)) (company (0 8 0)) (ghc (5 4 0 0)) (emacs (24))) "company-mode ghc-mod backend" single ((:commit . "8b264b5c3c0e42c0d0c4e9315559896c9b0edfdc") (:keywords "haskell" "completion") (:authors ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainer "Iku Iwasa" . "iku.iwasa@gmail.com") (:url . "https://github.com/iquiw/company-ghc"))]) (ghc . [(20180121 1218) ((haskell-mode (13 0))) "Sub mode for Haskell mode" tar ((:commit . "96c2207f0e9019f958d39582d4bf4af3bc9469d2"))]) (intero . [(20181109 1547) ((flycheck (0 25)) (company (0 8)) (emacs (24 4)) (haskell-mode (13 0))) "Complete development mode for Haskell" single ((:commit . "4be2a4a5de81bae504654a6b3a5d8a340be00e7e") (:keywords "haskell" "tools") (:authors ("Chris Done" . "chrisdone@fpcomplete.com")) (:maintainer "Chris Done" . "chrisdone@fpcomplete.com") (:url . "https://github.com/commercialhaskell/intero"))]) (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"))]) (dante . [(20180916 729) ((dash (2 12 0)) (emacs (25 1)) (f (0 19 0)) (flycheck (0 30)) (haskell-mode (13 14)) (s (1 11 0)) (lcr (1 0))) "Development mode for Haskell" single ((:commit . "f16562abe570f5ca0e7abbf8c7058c81976a921f") (:keywords "haskell" "tools") (:authors ("Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com")) (:maintainer "Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com") (:url . "https://github.com/jyp/dante"))]) (flycheck-haskell . [(20181117 1001) ((emacs (24 3)) (flycheck (0 25)) (haskell-mode (13 7)) (dash (2 4 0)) (seq (1 11)) (let-alist (1 0 1))) "Flycheck: Automatic Haskell configuration" tar ((:commit . "072c854a65a73b441624a90a8aa3b86ec64cdd1e") (:keywords "tools" "convenience") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com") (:url . "https://github.com/flycheck/flycheck-haskell"))]) (haskell-mode . [(20180917 923) ((emacs (24 3))) "A Haskell editing mode" tar ((:commit . "6a70c1858c7d505ba23185e209ef7eacf703ed8f") (:keywords "haskell" "cabal" "ghc" "repl") (:url . "https://github.com/haskell/haskell-mode"))]) (haskell-snippets . [(20160919 22) ((cl-lib (0 5)) (yasnippet (0 8 0))) "Yasnippets for Haskell" tar ((:commit . "07b0f460b946fd1be26c29652cb0468b47782f3a") (:keywords "snippets" "haskell") (:authors ("Luke Hoersten" . "luke@hoersten.org")) (:maintainer "Luke Hoersten" . "luke@hoersten.org") (:url . "https://github.com/haskell/haskell-snippets"))]) (helm-hoogle . [(20161027 534) ((helm (1 6 2)) (emacs (24 4))) "Use helm to navigate query results from Hoogle" single ((:commit . "73969a9d46d2121a849a01a9f7ed3636d01f7bbc") (:keywords "haskell" "programming" "hoogle") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainer "John Wiegley" . "jwiegley@gmail.com") (:url . "https://github.com/jwiegley/haskell-config"))]) (hindent . [(20180518 902) ((cl-lib (0 5))) "Indent haskell code using the \"hindent\" program" single ((:commit . "ffe03701050d159387c06103ecaf8147716d5cb8") (:authors ("Chris Done" . "chrisdone@gmail.com")) (:maintainer "Chris Done" . "chrisdone@gmail.com") (:url . "https://github.com/chrisdone/hindent"))]) (hlint-refactor . [(20170818 448) nil "Apply HLint suggestions" single ((:commit . "92c69aa01c65968e86c15db087bb1ea785e4736c") (:keywords "haskell" "refactor") (:url . "https://github.com/mpickering/hlint-refactor-mode"))]) (drupal-mode . [(20171120 2309) ((php-mode (1 5 0))) "Advanced minor mode for Drupal development" tar ((:commit . "47fda0a38a5b197f4606137d9c3b7d44aaeaa886") (:keywords "programming" "php" "drupal") (:authors ("Arne Jørgensen" . "arne@arnested.dk")) (:maintainer "Arne Jørgensen" . "arne@arnested.dk") (:url . "https://github.com/arnested/drupal-mode"))]) (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"))]) (phpcbf . [(20180519 838) ((s (1 9 0))) "Format PHP code in Emacs using PHP_CodeSniffer's phpcbf" single ((:commit . "a31020fc4c5add7339e009faea66894dc02a77f1") (:keywords "tools" "php") (:authors ("nishimaki10")) (:maintainer "nishimaki10") (:url . "https://github.com/nishimaki10/emacs-phpcbf"))]) (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"))]) (ac-php-core . [(20181115 1442) ((emacs (24)) (dash (1)) (php-mode (1)) (xcscope (1)) (s (1)) (f (0 17 0)) (popup (0 5 0))) "gen tags for php" tar ((:commit . "1883d3178ded71534a7e93189bc789d65e4a000e") (:keywords "completion" "convenience" "intellisense") (:authors (nil . "xcwenn@qq.com [https://github.com/xcwen]")) (:maintainer nil . "xcwenn@qq.com [https://github.com/xcwen]") (:url . "https://github.com/xcwen/ac-php"))]) (xcscope . [(20180426 712) nil "cscope interface for (X)Emacs" single ((:commit . "57bff67460c587acf60f513de622b4c7ab312081") (: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"))]) (php-mode . [(20180829 520) ((emacs (24 3)) (cl-lib (0 5))) "Major mode for editing PHP code" tar ((:commit . "1f04813f46219e626b385d0d96abefad914bfae0") (:keywords "languages" "php") (:authors ("Eric James Michael Ritz")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:url . "https://github.com/emacs-php/php-mode"))]) (company-php . [(20181110 303) ((cl-lib (0 5)) (ac-php-core (1)) (company (0 9))) "company completion source for php" single ((:commit . "1883d3178ded71534a7e93189bc789d65e4a000e") (:keywords "completion" "convenience" "intellisense") (:authors (nil . "xcwenn@qq.com [https://github.com/xcwen]")) (:maintainer nil . "xcwenn@qq.com [https://github.com/xcwen]") (:url . "https://github.com/xcwen/ac-php"))]) (cl-generic . [(0 3) nil "Forward cl-generic compatibility for Emacs<25" single ((:url . "http://elpa.gnu.org/packages/cl-generic.html") (:keywords))]) (ein . [(20181113 2117) ((websocket (1 7)) (auto-complete (1 4 0)) (request (0 3)) (deferred (0 5)) (request-deferred (0 2 0)) (cl-generic (0 3)) (dash (2 13 0)) (s (1 11 0)) (skewer-mode (1 6 2))) "Emacs IPython Notebook" tar ((:commit . "07bc906df91bc60d1f39426ea2e86482aa03370c"))]) (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"))]) (company-lua . [(20171108 2306) ((company (0 8 12)) (s (1 10 0)) (f (0 17 0)) (lua-mode (20151025))) "Company backend for Lua" tar ((:commit . "29f6819de4d691e5fd0b62893a9f4fbc1c6fcb52") (:authors ("Peter Vasil" . "mail@petervasil.net")) (:maintainer "Peter Vasil" . "mail@petervasil.net"))]) (lua-mode . [(20180323 1021) nil "a major-mode for editing Lua scripts" tar ((:commit . "99312b8d6c500ba3067da6d81efcfbbea05a1cbd") (: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"))]) (faust-mode . [(20180205 926) nil "Faust syntax colorizer for Emacs." single ((:commit . "7c31b22bdbfd2f8c16ec117d2975d56dd61ac15c") (:keywords "languages" "faust") (:authors ("rukano" . "rukano@gmail.com")) (:maintainer "Yassin Philip" . "xaccrocheur@gmail.com") (:url . "https://github.com/rukano/emacs-faust-mode"))]) (company-shell . [(20170518 541) ((emacs (24 4)) (company (0 8 12)) (dash (2 12 0)) (cl-lib (0 5))) "Company mode backend for shell functions" single ((:commit . "6ae625f80d90e0779c79de38e8f83a336c1d00fa") (:keywords "company" "shell" "auto-completion") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/company-shell"))]) (fish-mode . [(20180827 303) ((emacs (24))) "Major mode for fish shell scripts" single ((:commit . "35fc7c1e243a7410823088a571ecf378e9f3efa6") (:keywords "fish" "shell") (:authors ("Tony Wang" . "wwwjfy@gmail.com")) (:maintainer "Tony Wang" . "wwwjfy@gmail.com"))]) (flycheck-bashate . [(20160630 440) ((flycheck (0 24)) (emacs (24 4))) "Integrate bashate with flycheck" single ((:commit . "77fa03dbc578c34fe71ca44926bac2aff8f2b021") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com") (:url . "https://github.com/alexmurray/flycheck-bashate"))]) (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"))]) (flycheck-perl6 . [(20180509 2201) ((emacs (24 3)) (flycheck (0 22))) "Perl 6 support in Flycheck" single ((:commit . "b804702305d7a6e26f762ff98cfdeec2e9dd4cb7") (:keywords "tools" "convenience") (:authors ("Hinrik Örn Sigurðsson" . "hinrik.sig@gmail.com")) (:maintainer "Hinrik Örn Sigurðsson" . "hinrik.sig@gmail.com") (:url . "https://github.com/hinrik/flycheck-perl6"))]) (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"))]) (hierarchy . [(20171221 1151) ((emacs (25 1))) "Library to create and display hierarchy structures" single ((:commit . "06f21d3fc16c44c1fa45dc9c91d10100b4db9355") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://github.com/DamienCassou/hierarchy"))]) (json-navigator . [(20171220 819) ((emacs (24 3)) (hierarchy (0 6 0))) "View and navigate JSON structures" single ((:commit . "7a1fec93500c46ccba4086d10115d8188607d0d0") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://github.com/DamienCassou/json-navigator"))]) (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 "))]) (org-ref . [(20181115 51) ((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 . "1b5cf239d2abe203b9c64000c9010bbb6bf18fb4") (: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"))]) (parsebib . [(20181031 1021) ((emacs (24 3))) "A library for parsing bib files" single ((:commit . "27b30f5220b80637ed55f3b062ce2823adb40477") (:keywords "text" "bibtex") (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm"))]) (helm-bibtex . [(20181030 2142) ((helm (1 5 5)) (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 Helm" tar ((:commit . "af05ccb498d89550644cc01c80628053d4d2d73f") (:authors ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de"))]) (biblio . [(20161014 2304) ((emacs (24 3)) (biblio-core (0 2))) "Browse and import bibliographic references from CrossRef, arXiv, DBLP, HAL, Dissemin, and doi.org" tar ((:commit . "a5a68fcf677f286f205f32dc7486f6c9f66aa6af"))]) (biblio-core . [(20160901 1815) ((emacs (24 3)) (let-alist (1 0 4)) (seq (1 11)) (dash (2 12 1))) "A framework for looking up and displaying bibliographic entries" single ((:commit . "a5a68fcf677f286f205f32dc7486f6c9f66aa6af") (:keywords "bib" "tex" "convenience" "hypermedia") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com") (:url . "http://github.com/cpitclaudel/biblio.el"))]) (ahk-mode . [(20181113 1238) ((emacs (24 3))) "Major mode for editing AHK (AutoHotkey and AutoHotkey_L)" single ((:commit . "fde5be2cd4a0a48dc876031fb25be82892f700e0") (:keywords "ahk" "autohotkey" "hotkey" "keyboard shortcut" "automation") (:authors ("Rich Alesi")) (:maintainer "Rich Alesi") (:url . "https://github.com/ralesi/ahk-mode"))]) (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"))]) (adoc-mode . [(20160314 2130) ((markup-faces (1 0 0))) "a major-mode for editing AsciiDoc files in Emacs" single ((:commit . "745884359a1b8826ede2c4cfd2f0b5478953ac40") (:keywords "wp" "asciidoc") (:authors ("Florian Kaufmann" . "sensorflo@gmail.com")) (:maintainer "Florian Kaufmann" . "sensorflo@gmail.com") (:url . "https://github.com/sensorflo/adoc-mode/wiki"))]) (scala-mode . [(20170802 1132) nil "Major mode for editing Scala" tar ((:commit . "56cba2903cf6e12c715dbb5c99b34c97b2679379") (:keywords "languages") (:url . "https://github.com/ensime/emacs-scala-mode"))]) (sbt-mode . [(20180511 1622) ((emacs (24 4))) "Interactive support for sbt projects" tar ((:commit . "e658af140547cbef495c33535c7f694a501d318c") (:keywords "languages") (:url . "https://github.com/ensime/emacs-sbt-mode"))]) (swift-mode . [(20181117 1202) ((emacs (24 4)) (seq (2 3))) "Major-mode for Apple's Swift programming language." tar ((:commit . "55ce4e53f856626938b50f014c5f82947a628d6a") (:keywords "languages" "swift") (:url . "https://github.com/swift-emacs/swift-mode"))]) (csv-mode . [(1 7) nil "Major mode for editing comma/char separated values" single ((:url . "http://elpa.gnu.org/packages/csv-mode.html") (:keywords "convenience"))]) (jsonnet-mode . [(20180822 1619) ((emacs (24))) "Major mode for editing jsonnet files" single ((:commit . "0d68681d501fd57ebde5ed4fe100033a5d3aafa8") (:keywords "languages") (:authors ("Nick Lanham")) (:maintainer "Nick Lanham") (:url . "https://github.com/mgyucht/jsonnet-mode"))]) (ctable . [(20171006 11) nil "Table component for Emacs Lisp" single ((:commit . "b8830d1ca95abb100a81bc32011bd17d5ecba000") (:keywords "table") (:authors ("SAKURAI Masashi ")) (:maintainer "SAKURAI Masashi ") (:url . "https://github.com/kiwanami/emacs-ctable"))]) (ess-R-data-view . [(20130509 1158) ((ctable (20130313 1743)) (popup (20130324 1305)) (ess (20130225 1754))) "Data viewer for GNU R" single ((:commit . "d6e98d3ae1e2a2ea39a56eebcdb73e99d29562e9") (:keywords "convenience") (:authors ("myuhe ")) (:maintainer "myuhe") (:url . "https://github.com/myuhe/ess-R-data-view.el"))]) (ess . [(20181117 1705) ((julia-mode (0 3))) "Emacs Speaks Statistics" tar ((:commit . "58b011d78e6394e29dff173f66da652388eb87a8") (:authors ("David Smith" . "dsmith@stats.adelaide.edu.au") ("A.J. Rossini" . "blindglobe@gmail.com") ("Richard M. Heiberger" . "rmh@temple.edu") ("Kurt Hornik" . "Kurt.Hornik@R-project.org") ("Martin Maechler" . "maechler@stat.math.ethz.ch") ("Rodney A. Sparapani" . "rsparapa@mcw.edu") ("Stephen Eglen" . "stephen@gnu.org") ("Sebastian P. Luque" . "spluque@gmail.com") ("Henning Redestig" . "henning.red@googlemail.com") ("Vitalie Spinu" . "spinuvit@gmail.com") ("Lionel Henry" . "lionel.hry@gmail.com") ("J. Alexander Branham" . "alex.branham@gmail.com")) (:maintainer "ESS Core Team" . "ESS-core@r-project.org"))]) (ess-smart-equals . [(20150202 601) ((emacs (24)) (ess (5 0))) "better smart-assignment with =-key in R and S" single ((:commit . "e0f5f18f01ed252fde50d051adf1fa6254a254c9") (:keywords "r" "s" "ess" "convenience") (:authors ("Christopher R. Genovese" . "genovese@cmu.edu")) (:maintainer "Christopher R. Genovese" . "genovese@cmu.edu") (:url . "https://github.com/genovese/ess-smart-equals"))]) (golden-ratio . [(20150819 1120) nil "Automatic resizing of Emacs windows to the golden ratio" single ((:commit . "72b028808b41d23fa3f7e8c0d23d2c475e7b46ae") (:keywords "window" "resizing") (:authors ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainer "Roman Gonzalez" . "romanandreg@gmail.com"))]) (graphviz-dot-mode . [(20181118 551) nil "Mode for the dot-language used by graphviz (att)." single ((:commit . "243de72e09ddd5cdc4863613af8b749827a5e1cd") (:keywords "mode" "dot" "dot-language" "dotlanguage" "graphviz" "graphs" "att") (:maintainer "Pieter Pareit" . "pieter.pareit@gmail.com") (:url . "http://ppareit.github.com/graphviz-dot-mode/"))]) (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"))]) (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"))]) (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"))]) (csharp-mode . [(20181011 718) nil "C# mode derived mode" single ((:commit . "239527c1f27cf5246505f1faf23269487fdbfdd2") (:keywords "c#" "languages" "oop" "mode") (:authors ("Dylan R. E. Moonfire (original)")) (:maintainer "Jostein Kjønigsen" . "jostein@gmail.com") (:url . "https://github.com/josteink/csharp-mode"))]) (omnisharp . [(20181023 505) ((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)) (shut-up (0 3 2)) (f (0 19 0))) "Omnicompletion (intellisense) and more for C#" tar ((:commit . "260b2423b7b909b12b98d84e5b05b5b4e20040d0") (: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"))]) (ttl-mode . [(20160505 832) nil "mode for Turtle (and Notation 3)" single nil]) (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"))]) (julia-mode . [(20180816 2117) nil "Major mode for editing Julia source code" single ((:commit . "ec01995f60486480cf2240bbd3b9a2ff3fa9e0f0") (:keywords "languages") (:url . "https://github.com/JuliaLang/julia"))]) (julia-repl . [(20180923 1124) ((emacs (25))) "A minor mode for a Julia REPL" single ((:commit . "d8b94c6dbfa47fd51540b9d5b1bb0c2dfce3ebc2") (:keywords "languages") (:authors ("Tamas Papp" . "tkpapp@gmail.com")) (:maintainer "Tamas Papp" . "tkpapp@gmail.com") (:url . "https://github.com/tpapp/julia-repl"))]) (company-lsp . [(20181105 1644) ((emacs (25 1)) (lsp-mode (3 4)) (company (0 9 0)) (s (1 2 0)) (dash (2 11 0))) "Company completion backend for lsp-mode." single ((:commit . "d333e5594f8d5e5cb96309f8a913747ff83ab089") (:url . "https://github.com/tigersoldier/company-lsp"))]) (evil-surround . [(20181020 1248) ((evil (1 2 12))) "emulate surround.vim from Vim" single ((:commit . "63ce01848878ce011eb4fee59c51109dd1e3ddb5") (:keywords "emulation" "vi" "evil") (:authors ("Tim Harper ") ("Vegard Øye ")) (:maintainer "Tim Harper "))]) (groovy-imports . [(20161003 851) ((emacs (24 4)) (s (1 10 0)) (pcache (0 3 2))) "Code for dealing with Groovy imports" single ((:commit . "e56d7dda617555ec6205644d32ffddf2e1fa43d9") (:keywords "groovy") (:authors ("Miro Bezjak")) (:maintainer "Miro Bezjak") (:url . "http://www.github.com/mbezjak/emacs-groovy-imports"))]) (groovy-mode . [(20181111 1057) ((s (1 12 0)) (emacs (24 3)) (dash (2 13 0))) "Major mode for Groovy source files" tar ((:commit . "f80b6795f645aff592ffbdc6b500084955094f5c") (:keywords "languages") (:authors ("Russel Winder" . "russel@winder.org.uk") ("Jim Morris" . "morris@wolfman.com") ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Russel Winder" . "russel@winder.org.uk"))]) (coffee-mode . [(20170324 940) ((emacs (24 3))) "Major mode for CoffeeScript code" single ((:commit . "86ab8aae8662e8eff54d3013010b9c693b16eac5") (:keywords "coffeescript" "major" "mode") (:authors ("Chris Wanstrath" . "chris@ozmm.org")) (:maintainer "Chris Wanstrath" . "chris@ozmm.org") (:url . "http://github.com/defunkt/coffee-mode"))]) (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"))]) (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"))]) (idris-mode . [(20180922 2051) ((emacs (24)) (prop-menu (0 1)) (cl-lib (0 5))) "Major mode for editing Idris code" tar ((:commit . "0e3508aca4d1f46f8c062f84c386d9e5533a21c3") (:keywords "languages") (:url . "https://github.com/idris-hackers/idris-mode"))]) (multiple-cursors . [(20180913 1237) ((cl-lib (0 5))) "Multiple cursors for Emacs." tar ((:commit . "6a7c3c0853e3fe9e4b8e5985dbed8fd4075f33ff"))]) (js2-refactor . [(20180502 1042) ((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 . "79124b3274c43ad1f9ec6205fa362576552db02f"))]) (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"))]) (js2-mode . [(20180724 801) ((emacs (24 1)) (cl-lib (0 5))) "Improved JavaScript editing mode" tar ((:commit . "5165f4dc3805add174e48f0d64c5617d10ac3507") (: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/"))]) (skewer-mode . [(20180706 1807) ((simple-httpd (1 4 0)) (js2-mode (20090723)) (emacs (24))) "live browser JavaScript, CSS, and HTML interaction" tar ((:commit . "a381049acc4fa2087615b4b3b26c0865841386bd"))]) (forth-mode . [(20170527 1930) nil "Programming language mode for Forth" tar ((:commit . "522256d98d1a909983bcfd3ae20c65226d5929b6") (:keywords "languages" "forth") (:authors ("Lars Brinkhoff" . "lars@nocrew.org")) (:maintainer "Lars Brinkhoff" . "lars@nocrew.org") (:url . "http://github.com/larsbrinkhoff/forth-mode"))]) (company-math . [(20171016 1514) ((company (0 8 0)) (math-symbol-lists (1 2))) "Completion backends for unicode math symbols and latex tags" single ((:commit . "3481f03ebb6a613ff85b71ca8edd2d5842c49012") (:keywords "unicode" "symbols" "completion") (:authors ("Vitalie Spinu")) (:maintainer "Vitalie Spinu") (:url . "https://github.com/vspinu/company-math"))]) (math-symbol-lists . [(20170221 1353) nil "Lists of Unicode math symbols and latex commands" tar ((:commit . "1af8fdcab7941a62287c2d04b8876e1538f39c60") (:keywords "unicode" "symbols" "mathematics") (:authors ("Vitalie Spinu")) (:maintainer "Vitalie Spinu") (:url . "https://github.com/vspinu/math-symbol-lists"))]) (company-coq . [(20181107 2136) ((company-math (1 1)) (company (0 8 12)) (yasnippet (0 11 0)) (dash (2 12 1)) (cl-lib (0 5))) "A collection of extensions for Proof General's Coq mode" tar ((:commit . "24f33527c5917cdd4c3c139f966c49c33b21d4d0"))]) (proof-general . [(20181115 1610) ((emacs (24 3))) "A generic front-end for proof assistants (interactive theorem provers)" tar ((:commit . "05df29f7ff065d8da45b81691c602b6cf075e4a0"))]) (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"))]) (flycheck-pact . [(20180920 2052) ((emacs (24 3)) (flycheck (0 25)) (pact-mode (0 0 4))) "Flycheck support for pact-mode" single ((:commit . "0e10045064ef89ec8b6f5a473073d47b976a2ca3") (:keywords "pact" "lisp" "languages" "blockchain" "smartcontracts" "tools" "linting") (:authors ("Stuart Popejoy")) (:maintainer "Stuart Popejoy" . "stuart@kadena.io") (:url . "http://github.com/kadena-io/flycheck-pact"))]) (pact-mode . [(20180905 1647) ((emacs (24 3))) "Mode for Pact, a LISPlike smart contract language." single ((:commit . "e4e4487c1d55b3fb8775abd948be28442efcffec") (: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"))]) (company-dcd . [(20170516 910) ((company (0 9)) (flycheck-dmd-dub (0 7)) (yasnippet (0 8)) (popwin (0 7)) (cl-lib (0 5)) (ivy (20160804 326))) "Company backend for Dlang using DCD." single ((:commit . "4832188a9e42287539a69c372fe1643166a6a7aa") (:keywords "languages") (:authors ("tsukimizake ")) (:maintainer "tsukimizake ") (:url . "http://github.com/tsukimizake/company-dcd"))]) (d-mode . [(20181011 1927) ((emacs (24 3))) "D Programming Language major mode for (X)Emacs" single ((:commit . "385cda4afad79000b4cb7704861faf34009b0fc2") (:keywords "d" "programming" "language" "emacs" "cc-mode") (:authors ("William Baxter")) (:maintainer "Russel Winder" . "russel@winder.org.uk"))]) (flycheck-dmd-dub . [(20180625 1635) ((flycheck (0 24)) (f (0 18 2))) "Sets flycheck-dmd-include-paths from dub package information" single ((:commit . "d7df2895d7d27cc39916816e3c32a60ce0e1d2d9") (:keywords "languages") (:authors ("Atila Neves" . "atila.neves@gmail.com")) (:maintainer "Atila Neves" . "atila.neves@gmail.com") (:url . "http://github.com/atilaneves/flycheck-dmd-dub"))]) (auto-complete-rst . [(20140225 944) ((auto-complete (1 4))) "Auto-complete extension for ReST and Sphinx" tar ((:commit . "4803ce41a96224e6fa54e6741a5b5f40ebed7351") (:authors ("ARAKAKI, Takafumi")) (:maintainer "ARAKAKI, Takafumi") (:url . "https://github.com/tkf/auto-complete-rst"))]) (auto-highlight-symbol . [(20130313 943) nil "Automatic highlighting current symbol minor mode" single ((:commit . "26573de912d760e04321b350897aea70958cee8b") (:keywords "highlight" "face" "match" "convenience") (:authors ("Mitsuo Saito" . "arch320@NOSPAM.gmail.com")) (:maintainer "Mitsuo Saito" . "arch320@NOSPAM.gmail.com") (:url . "http://github.com/gennad/auto-highlight-symbol/raw/master/auto-highlight-symbol.el"))]) (common-lisp-snippets . [(20180226 1523) ((yasnippet (0 8 0))) "Yasnippets for Common Lisp" tar ((:commit . "1ddf808311ba4d9e8444a1cb50bd5ee75e4111f6") (:keywords "snippets") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:url . "https://github.com/mrkkrp/common-lisp-snippets"))]) (slime . [(20181112 1346) ((cl-lib (0 5)) (macrostep (0 9))) "Superior Lisp Interaction Mode for Emacs" tar ((:commit . "b7bf530d884371d6560cad37bd9b9e587ebc5e06") (:keywords "languages" "lisp" "slime") (:url . "https://github.com/slime/slime"))]) (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"))]) (slime-company . [(20180119 1843) ((emacs (24 4)) (slime (2 13)) (company (0 9 0))) "slime completion backend for company mode" single ((:commit . "4c2e2805540dea700130607fa235018a87e4a070") (:keywords "convenience" "lisp" "abbrev") (:authors ("Ole Arndt" . "anwyn@sugarshark.com")) (:maintainer "Ole Arndt" . "anwyn@sugarshark.com"))]) (protobuf-mode . [(20170526 1650) nil "major mode for editing protocol buffers." single ((:commit . "59133296a6e5d5017074e036557ebb658e49d435") (:keywords "google" "protobuf" "languages") (:authors ("Alexandre Vassalotti" . "alexandre@peadrop.com")) (:maintainer "Alexandre Vassalotti" . "alexandre@peadrop.com"))]) (bundler . [(20160815 915) ((inf-ruby (2 1)) (cl-lib (0 5))) "Interact with Bundler from Emacs" single ((:commit . "f981f67c33b42243e57a78c358dffff70022b56b") (:keywords "bundler" "ruby") (:authors ("Tobias Svensson" . "tob@tobiassvensson.co.uk")) (:maintainer "Tobias Svensson" . "tob@tobiassvensson.co.uk") (:url . "http://github.com/endofunky/bundler.el"))]) (chruby . [(20180114 1652) ((cl-lib (0 5))) "Emacs integration for chruby" single ((:commit . "42bc6d521f832eca8e2ba210f30d03ad5529788f") (:keywords "languages") (:authors ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainer "Arne Brasseur" . "arne@arnebrasseur.net") (:url . "https://github.com/plexus/chruby.el"))]) (enh-ruby-mode . [(20180730 2309) ((emacs (24))) "Major mode for editing Ruby files" tar ((:commit . "09e1ed06c1cf323e3b4d45cd86353087e6a12fde") (:keywords "languages" "elisp" "ruby") (:authors ("Geoff Jacobsen")) (:maintainer "Geoff Jacobsen") (:url . "http://github.com/zenspider/Enhanced-Ruby-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"))]) (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"))]) (inf-ruby . [(20180521 1348) nil "Run a Ruby process in a buffer" single ((:commit . "49d59a7897f594e3be74ecbddae83719f9a6c0f0") (: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"))]) (robe . [(20171116 2049) ((inf-ruby (2 5 1)) (emacs (24 4))) "Code navigation, documentation lookup and completion for Ruby" tar ((:commit . "7829f4fdda41eee0add8868646ab86e6b17de4b4") (:keywords "ruby" "convenience" "rails") (:authors ("Dmitry Gutov")) (:maintainer "Dmitry Gutov") (:url . "https://github.com/dgutov/robe"))]) (rspec-mode . [(20180614 1148) ((ruby-mode (1 0)) (cl-lib (0 4))) "Enhance ruby-mode for RSpec" tar ((:commit . "dda1ece81bd2802c4097e5c963fac33a444659cb") (:keywords "rspec" "ruby") (:authors ("Peter Williams, et al.")) (:maintainer "Peter Williams, et al.") (:url . "http://github.com/pezra/rspec-mode"))]) (rubocop . [(20170312 611) ((emacs (24))) "An Emacs interface for RuboCop" single ((:commit . "0ab1329a8634762bec5bdf5f415c05b32f990248") (:keywords "project" "convenience") (:authors ("Bozhidar Batsov")) (:maintainer "Bozhidar Batsov") (:url . "https://github.com/bbatsov/rubocop-emacs"))]) (ruby-hash-syntax . [(20180324 209) nil "Toggle ruby hash syntax between classic and 1.9 styles" single ((:commit . "89fc364a837d7a78ecce34380f09c073a83e30e0") (:keywords "languages") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/ruby-hash-syntax"))]) (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"))]) (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"))]) (ruby-test-mode . [(20171016 1631) ((ruby-mode (1 0)) (pcre2el (1 8))) "Minor mode for Behaviour and Test Driven" single ((:commit . "87f6d770f8d2326c8d36099aeee5d577f3e2af69") (:keywords "ruby" "unit" "test" "rspec") (:authors ("Roman Scherer" . "roman.scherer@gmx.de") ("Caspar Florian Ebeling" . "florian.ebeling@gmail.com")) (:maintainer "Roman Scherer" . "roman.scherer@burningswell.com"))]) (ruby-tools . [(20151209 1615) nil "Collection of handy functions for ruby-mode." tar ((:commit . "6b97066b58a4f82eb2ecea6434a0a7e981aa4c18"))]) (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"))]) (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"))]) (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"))]) (sql-indent . [(1 3) ((cl-lib (0 5))) "Support for indenting code in SQL files." tar ((:keywords "languages" "sql") (:url . "http://elpa.gnu.org/packages/sql-indent.html"))]) (sqlup-mode . [(20170610 1537) nil "Upcase SQL words for you" single ((:commit . "04970977b4abb4d44301651618bbf1cdb0b263dd") (: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"))]) (browse-at-remote . [(20180622 631) ((f (0 17 2)) (s (1 9 0)) (cl-lib (0 5))) "Open github/gitlab/bitbucket/stash page from Emacs" single ((:commit . "99af94ada33badd3e1eceb704e07f62c1eef513a") (:keywords "github" "gitlab" "bitbucket" "convenience") (:authors ("Rustem Muslimov" . "r.muslimov@gmail.com")) (:maintainer "Rustem Muslimov" . "r.muslimov@gmail.com"))]) (diff-hl . [(20180201 1155) ((cl-lib (0 2)) (emacs (24 3))) "Highlight uncommitted changes using VC" tar ((:commit . "154c64affe7bdd16da814d198277d29bd1b6bb2a") (:keywords "vc" "diff") (:authors ("Dmitry Gutov" . "dgutov@yandex.ru")) (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru") (:url . "https://github.com/dgutov/diff-hl"))]) (git-gutter . [(20161105 1356) ((emacs (24 3))) "Port of Sublime Text plugin GitGutter" single ((:commit . "00c05264af046b5ce248e5b0bc42f117d9c27a09") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-git-gutter"))]) (git-gutter-fringe . [(20170113 533) ((git-gutter (0 88)) (fringe-helper (0 1 1)) (cl-lib (0 5)) (emacs (24))) "Fringe version of git-gutter.el" single ((:commit . "16226caab44174301f1659f7bf8cc67a76153445") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-git-gutter-fringe"))]) (fringe-helper . [(20140620 2109) nil "helper functions for fringe bitmaps" single ((:commit . "ef4a9c023bae18ec1ddd7265f1f2d6d2e775efdd") (:keywords "lisp") (:authors ("Nikolaj Schumacher ")) (:maintainer "Nikolaj Schumacher ") (:url . "http://nschum.de/src/emacs/fringe-helper/"))]) (git-gutter+ . [(20151204 1723) ((git-commit (0)) (dash (0))) "Manage Git hunks straight from the buffer" single ((:commit . "b7726997806d9a2da9fe84ff00ecf21d62b6f975") (:keywords "git" "vc") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/nonsequitur/git-gutter-plus"))]) (git-gutter-fringe+ . [(20140729 1103) ((git-gutter+ (0 1)) (fringe-helper (1 0 1))) "Fringe version of git-gutter+.el" single ((:commit . "7a2f49d2455a3a872e90e5f7dd4e6b27f1d96cfc") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/nonsequitur/git-gutter-fringe-plus"))]) (gist . [(20171128 406) ((emacs (24 1)) (gh (0 10 0))) "Emacs integration for gist.github.com" single ((:commit . "314fe6ab80fae35b95f0734eceb82f72813b6f41") (:keywords "tools") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainer "Yann Hodique" . "yann.hodique@gmail.com") (:url . "https://github.com/defunkt/gist.el"))]) (github-clone . [(20160623 310) ((gh (0 7 2)) (magit (2 1 0)) (emacs (24 4))) "Fork and clone github repos" single ((:commit . "467b40ca60a6c26257466ebc43c74414df7f19cc") (:keywords "vc" "tools") (:authors ("Charles L.G. Comstock" . "dgtized@gmail.com")) (:maintainer "Charles L.G. Comstock" . "dgtized@gmail.com") (:url . "https://github.com/dgtized/github-clone.el"))]) (github-search . [(20170824 323) ((magit (0 8 1)) (gh (1 0 0))) "Clone repositories by searching github" single ((:commit . "c5fa1d9f8f9bcf201fa31478a6f5e02ed5ac086b") (:keywords "github" "search" "clone" "api" "gh" "magit" "vc" "tools") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:url . "https://github.com/IvanMalison/github-search"))]) (gh . [(20180308 2138) ((emacs (24 3)) (pcache (0 4 1)) (logito (0 1)) (marshal (0 6 3))) "A GitHub library for Emacs" tar ((:commit . "f029fc11f345ef04ab62ee91c38657e29c462fea"))]) (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"))]) (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"))]) (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"))]) (ghub+ . [(20181113 32) ((emacs (25)) (ghub (2 0)) (apiwrap (0 5))) "a thick GitHub API client built on ghub" single ((:commit . "51ebffe549286b3c0b0565a373f44f4d64fc57af") (:keywords "extensions" "multimedia" "tools") (:authors ("Sean Allred" . "code@seanallred.com")) (:maintainer "Sean Allred" . "code@seanallred.com") (:url . "https://github.com/vermiculus/ghub-plus"))]) (apiwrap . [(20180602 2231) ((emacs (25))) "api-wrapping macros" single ((:commit . "e4c9c57d6620a788ec8a715ff1bb50542edea3a6") (:keywords "tools" "maint" "convenience") (:authors ("Sean Allred" . "code@seanallred.com")) (:maintainer "Sean Allred" . "code@seanallred.com") (:url . "https://github.com/vermiculus/apiwrap.el"))]) (magithub . [(20181116 1355) ((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 . "94e9f9a1a168e324ec7b79e3437afd1c1fb80200") (:keywords "git" "tools" "vc") (:authors ("Sean Allred" . "code@seanallred.com")) (:maintainer "Sean Allred" . "code@seanallred.com") (:url . "https://github.com/vermiculus/magithub"))]) (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"))]) (evil-magit . [(20180702 1553) ((evil (1 2 3)) (magit (2 6 0))) "evil-based key bindings for magit" single ((:commit . "9e2275b14807168451e10b93d69e420e435f21ef") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainer "Justin Burkett" . "justin@burkett.cc") (:url . "https://github.com/justbur/evil-magit"))]) (fill-column-indicator . [(20171209 1924) nil "Graphically indicate the fill column" single ((:commit . "d2536b1c48f78679e15a2b50cd5d8c0ffde4b155") (:keywords "convenience") (:authors ("Alp Aker" . "alp.tekin.aker@gmail.com")) (:maintainer "Alp Aker" . "alp.tekin.aker@gmail.com"))]) (gitattributes-mode . [(20180318 1956) nil "Major mode for editing .gitattributes files" single ((:commit . "55468314a5f6b77d2c96be62c7005ac94545e217") (:keywords "convenience" "vc" "git") (:authors ("Rüdiger Sonderfeld" . "ruediger@c-plusplus.net")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/git-modes"))]) (gitconfig-mode . [(20180318 1956) nil "Major mode for editing .gitconfig files" single ((:commit . "55468314a5f6b77d2c96be62c7005ac94545e217") (:keywords "convenience" "vc" "git") (:authors ("Sebastian Wiesner" . "lunaryorn@gmail.com")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/git-modes"))]) (gitignore-templates . [(20180327 1326) ((emacs (24 3))) "Access GitHub .gitignore templates" single ((:commit . "b0705b8de4cbdd631c64c4e0024d62ba4ad68052") (:keywords "tools") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/gitignore-templates.el"))]) (git-link . [(20181031 259) ((emacs (24 3))) "Get the GitHub/Bitbucket/GitLab URL for a buffer location" single ((:commit . "976723dfdb9ae42e093a3cb32fc41841e94201e6") (:keywords "git" "vc" "github" "bitbucket" "gitlab" "convenience") (:authors ("Skye Shaw" . "skye.shaw@gmail.com")) (:maintainer "Skye Shaw" . "skye.shaw@gmail.com") (:url . "http://github.com/sshaw/git-link"))]) (git-messenger . [(20170102 440) ((emacs (24 3)) (popup (0 5 0))) "Pop up last commit information of current line" single ((:commit . "83815915eb8c1cb47443ff34bca3fecf7d2edf3a") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-git-messenger"))]) (git-timemachine . [(20181114 1342) ((emacs (24 3))) "Walk through git revisions of a file" single ((:commit . "4eb2ee6eabcc437bc3a1addc19ba38eed165743d") (:keywords "git") (:authors ("Peter Stiernström" . "peter@stiernstrom.se")) (:maintainer "Peter Stiernström" . "peter@stiernstrom.se") (:url . "https://github.com/pidu/git-timemachine"))]) (helm-git-grep . [(20170614 1411) ((helm-core (2 2 0))) "helm for git grep, an incremental git-grep(1)" single ((:commit . "744cea07dba6e6a5effbdba83f1b786c78fd86d3") (:authors ("mechairoi")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com") (:url . "https://github.com/yasuyk/helm-git-grep"))]) (gitignore-mode . [(20180318 1956) nil "Major mode for editing .gitignore files" single ((:commit . "55468314a5f6b77d2c96be62c7005ac94545e217") (:keywords "convenience" "vc" "git") (:authors ("Sebastian Wiesner" . "lunaryorn@gmail.com")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/git-modes"))]) (helm-gitignore . [(20170211 8) ((gitignore-mode (1 1 0)) (helm (1 7 0)) (request (0 1 0)) (cl-lib (0 5))) "Generate .gitignore files with gitignore.io." single ((:commit . "2a2e7da7855a6db0ab3bb6a6a087863d7abd4391") (:keywords "helm" "gitignore" "gitignore.io") (:authors ("Juan Placencia")) (:maintainer "Juan Placencia") (:url . "https://github.com/jupl/helm-gitignore"))]) (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-svn . [(20170213 1233) ((emacs (24 4)) (magit (2 1 0))) "Git-Svn extension for Magit" single ((:commit . "c833903732a14478f5c4cfc561bae7c50671b36c") (:keywords "vc" "tools") (:authors ("Phil Jackson" . "phil@shellarchive.co.uk")) (:maintainer "Phil Jackson" . "phil@shellarchive.co.uk"))]) (magit . [(20181116 1412) ((emacs (25 1)) (async (20180527)) (dash (20180910)) (ghub (20181107)) (git-commit (20181104)) (magit-popup (20181003)) (with-editor (20181103))) "A Git porcelain inside Emacs." tar ((:commit . "36d89c88e1337ec2b33c75c3d426289c66f86b10"))]) (git-commit . [(20181116 1408) ((emacs (25 1)) (dash (20180910)) (with-editor (20181103))) "Edit Git commit messages" single ((:commit . "36d89c88e1337ec2b33c75c3d426289c66f86b10") (:keywords "git" "tools" "vc") (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/magit"))]) (ghub . [(20181112 1755) ((emacs (25 1)) (dash (2 14 1)) (graphql (0 1 1)) (let-alist (1 0 5)) (treepy (1 0 0))) "Minuscule client libraries for Git forge APIs." tar ((:commit . "f389fce41cd1bd1805bad18d12e237362af05283"))]) (treepy . [(20180724 656) ((emacs (25 1))) "Generic tree traversal tools" single ((:commit . "b40e6b09eb9be45da67b8c9e4990a5a0d7a2a09d") (:keywords "lisp" "maint" "tools") (:authors ("Daniel Barreto" . "daniel.barreto.n@gmail.com")) (:maintainer "Daniel Barreto" . "daniel.barreto.n@gmail.com") (:url . "https://github.com/volrath/treepy.el"))]) (graphql . [(20180912 31) ((emacs (25))) "GraphQL utilities" single ((:commit . "e2b309689f4faf9225f290080f836e988c5a576d") (:keywords "hypermedia" "tools" "lisp") (:authors ("Sean Allred" . "code@seanallred.com")) (:maintainer "Sean Allred" . "code@seanallred.com") (:url . "https://github.com/vermiculus/graphql.el"))]) (orgit . [(20180318 2001) ((emacs (24 4)) (dash (2 13 0)) (magit (2 10 0)) (org (8 3 3))) "support for Org links to Magit buffers" single ((:commit . "d909f92d3b1b42184143fd5e6d4c6a2762477ab7") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/orgit"))]) (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"))]) (afternoon-theme . [(20140104 1859) ((emacs (24 1))) "Dark color theme with a deep blue background" single ((:commit . "89b1d778a1f8b385775c122f2bd1c62f0fbf931a") (:keywords "themes") (:authors ("Ozan Sener" . "ozan@ozansener.com")) (:maintainer "Ozan Sener" . "ozan@ozansener.com") (:url . "http://github.com/osener/emacs-afternoon-theme"))]) (alect-themes . [(20180504 1720) ((emacs (24 0))) "Configurable light, dark and black themes for Emacs 24 or later" tar ((:commit . "4d90833a7381123a979f73fa97a013071ca7ff00") (:keywords "color" "theme") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:url . "https://github.com/alezost/alect-themes"))]) (ample-theme . [(20180207 1745) nil "Calm Dark Theme for Emacs" tar ((:commit . "366698400c555211c2082962a5d74f3dd79a78c8") (:keywords "theme" "dark") (:authors ("Jordon Biondo" . "jordonbiondo@gmail.com")) (:maintainer "Jordon Biondo" . "jordonbiondo@gmail.com") (:url . "https://github.com/jordonbiondo/ample-theme"))]) (ample-zen-theme . [(20150119 2154) nil "AmpleZen Theme for Emacs 24" single ((:commit . "b277bb7abd4b6624e8d59f02474b79af50a007bd") (:keywords "theme" "dark" "emacs 24") (:authors ("Michael Wall")) (:maintainer "Michael Wall") (:url . "https://github.com/mjwall/ample-zen"))]) (apropospriate-theme . [(20181111 2112) nil "A colorful, low-contrast, light & dark theme set for Emacs with a fun name." tar ((:commit . "88c243ec90c1df7918c463b5a7ec875d057e8999") (:keywords "color" "theme") (:url . "https://github.com/waymondo/apropospriate-theme"))]) (anti-zenburn-theme . [(20180712 1838) nil "Low-contrast Zenburn-inverted theme" single ((:commit . "dbafbaa86be67c1d409873f57a5c0bbe1e7ca158") (:authors ("Andrey Kotlarski" . "m00naticus@gmail.com")) (:maintainer "Andrey Kotlarski" . "m00naticus@gmail.com") (:url . "https://github.com/m00natic/anti-zenburn-theme"))]) (badwolf-theme . [(20161004 715) ((emacs (24))) "Bad Wolf color theme" single ((:commit . "ea01a3d9358e968f75e3ed15dec6a2a96ce3d9a1") (:keywords "themes") (:authors ("bkruczyk" . "bartlomiej.kruczyk@gmail.com")) (:maintainer "bkruczyk" . "bartlomiej.kruczyk@gmail.com") (:url . "https://github.com/bkruczyk/badwolf-emacs"))]) (birds-of-paradise-plus-theme . [(20130419 2129) nil "A brown/orange light-on-dark theme for Emacs 24 (deftheme)." single ((:commit . "bb9f9d4ef7f7872a388ec4eee1253069adcadb6f") (:keywords "themes") (:authors ("Jim Myhrberg" . "contact@jimeh.me")) (:maintainer "Jim Myhrberg" . "contact@jimeh.me") (:url . "https://github.com/jimeh/birds-of-paradise-plus-theme.el"))]) (bubbleberry-theme . [(20141017 944) ((emacs (24 1))) "A theme based on LightTable for Emacs24" single ((:commit . "22e9adf4586414024e4592972022ec297321b320") (:authors ("Jason Milkins" . "jasonm23@gmail.com") ("Gaurav Giri github.com/grvgr")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:url . "https://github.com/jasonm23/emacs-bubbleberry-theme"))]) (busybee-theme . [(20170719 928) nil "port of vim's mustang theme" single ((:commit . "66b2315b030582d0ebee605cf455d386d8c30fcd") (:authors ("martin haesler")) (:maintainer "martin haesler") (:url . "http://github.com/mswift42/busybee-theme"))]) (cherry-blossom-theme . [(20150622 342) ((emacs (24 0))) "a soothing color theme for Emacs24." single ((:commit . "eea7653e00f35973857ee23b27bc2fae5e753e50") (:authors ("Ben Yelsey" . "byelsey1@gmail.com")) (:maintainer "Ben Yelsey" . "byelsey1@gmail.com") (:url . "https://github.com/inlinestyle/emacs-cherry-blossom-theme"))]) (clues-theme . [(20161213 1127) ((emacs (24 0))) "an Emacs 24 theme which may well be fully awesome..." single ((:commit . "abd61f2b7f3e98de58ca26e6d1230e70c6406cc7") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:url . "https://github.com/emacsfodder/emacs-clues-theme"))]) (color-theme-sanityinc-solarized . [(20181021 2055) nil "A version of Ethan Schoonover's Solarized themes" tar ((:commit . "fa2afc66beebdf7936b9f1391878798d6426730c") (:keywords "themes") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "http://github.com/purcell/color-theme-sanityinc-solarized"))]) (color-theme-sanityinc-tomorrow . [(20181024 1728) nil "A version of Chris Kempson's \"tomorrow\" themes" tar ((:commit . "d3c694f4c423bc8cfc74bd80d624b974ebc94e02") (:keywords "faces" "themes") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "http://github.com/purcell/color-theme-sanityinc-tomorrow"))]) (cyberpunk-theme . [(20180609 509) nil "Cyberpunk Color Theme" single ((:commit . "f8967e46b8bdb3eaf7b72474f2d70997dc1152e9") (:keywords "color" "theme" "cyberpunk") (:authors ("Nicholas M. Van Horn" . "nvanhorn@protonmail.com")) (:maintainer "Nicholas M. Van Horn" . "nvanhorn@protonmail.com"))]) (dakrone-theme . [(20170801 1933) nil "dakrone's custom dark theme" single ((:commit . "232ad1be5f3572dcbdf528f1655109aa355a6937") (:keywords "color" "themes") (:authors ("Lee Hinman ")) (:maintainer "Lee Hinman ") (:url . "https://github.com/dakrone/dakrone-theme"))]) (darkburn-theme . [(20170423 1652) nil "A not-so-low contrast color theme for Emacs." single ((:commit . "0af794ff7fac19778ac8a7efb92455c6f6c2158f") (:authors ("Jonas Gorauskas" . "jgorauskas@gmail.com")) (:maintainer "Jonas Gorauskas" . "jgorauskas@gmail.com") (:url . "http://github.com/gorauskas/darkburn-theme"))]) (darkmine-theme . [(20160406 624) nil "Yet another emacs dark color theme." single ((:commit . "7f7e82ca03bcad52911fa41fb3e204e32d6ee63e") (:authors ("Pierre Lecocq" . "pierre.lecocq@gmail.com")) (:maintainer "Pierre Lecocq" . "pierre.lecocq@gmail.com") (:url . "https://github.com/pierre-lecocq/darkmine-theme"))]) (darkokai-theme . [(20181019 1859) nil "A darker variant on Monokai." single ((:commit . "b887fc6080f8e021058bff7f53fad84c82c81a7a") (:url . "http://github.com/sjrmanning/darkokai"))]) (darktooth-theme . [(20181013 906) ((autothemer (0 2))) "From the darkness... it watches" single ((:commit . "780f9e25ae4abccab4e053f2caba7add4bc9d3be") (:url . "http://github.com/emacsfodder/emacs-theme-darktooth"))]) (django-theme . [(20131022 902) nil "Custom face theme for Emacs" single ((:commit . "86c8142b3eb1addd94a43aa6f1d98dab06401af0") (:authors ("Andrzej Sliwa")) (:maintainer "Andrzej Sliwa") (:url . "http://github/anrzejsliwa/django-theme"))]) (doom-themes . [(20181101 218) ((emacs (24 4)) (all-the-icons (1 0 0)) (cl-lib (0 5))) "an opinionated pack of modern color-themes" tar ((:commit . "2aa163b8322a55a69296552bc03b1b84413d5abc") (:keywords "dark" "light" "blue" "atom" "one" "theme" "neotree" "icons" "faces" "nova") (:authors ("Henrik Lissner ")) (:maintainer "Henrik Lissner" . "henrik@lissner.net") (:url . "https://github.com/hlissner/emacs-doom-theme"))]) (dracula-theme . [(20180710 1324) ((emacs (24))) "Dracula Theme" single ((:commit . "a1c9888b7876ace60a536d27fb290e788bffc9cb") (:authors ("film42")) (:maintainer "film42") (:url . "https://github.com/dracula/emacs"))]) (espresso-theme . [(20181025 826) nil "Espresso Tutti Colori port for Emacs" single ((:commit . "d2fa034eb833bf37cc6842017070725e0da9b046") (:authors ("Martin Kühl ")) (:maintainer "Martin Kühl ") (:url . "https://github.com/dgutov/espresso-theme"))]) (exotica-theme . [(20180212 2329) ((emacs (24))) "A dark theme with vibrant colors" single ((:commit . "ff3ef4f6fa38c93b99becad977c7810c990a4d2f") (:keywords "faces" "theme" "dark" "vibrant colors") (:authors ("Bharat Joshi" . "jbharat@outlook.com")) (:maintainer "Bharat Joshi" . "jbharat@outlook.com") (:url . "https://github.com/jbharat/exotica-theme"))]) (eziam-theme . [(20180414 1029) nil "A mostly monochrome theme, inspired by Tao and Leuven, with dark and light versions." tar ((:commit . "96595833110cd64c391e0ccd5230782a8f0a4e08"))]) (farmhouse-theme . [(20160713 2244) nil "Farmhouse Theme, Emacs edition" tar ((:commit . "7ddc1ff13b4a3d5466bd0d33ecb86100352e83a7") (:keywords "color" "theme") (:url . "https://github.com/mattly/emacs-farmhouse-theme"))]) (flatland-theme . [(20171113 1521) nil "A simple theme for Emacs based on the Flatland theme for Sublime Text" single ((:commit . "a98a6f19ad4dff0fa3fad1ea487b7d0ef634a19a") (:authors ("Greg Chapple" . "info@gregchapple.com")) (:maintainer "Greg Chapple" . "info@gregchapple.com") (:url . "http://github.com/gregchapple/flatland-emacs"))]) (flatui-theme . [(20160619 127) nil "A color theme for Emacs based on flatuicolors.com" single ((:commit . "9c15db5526c15c8dba55023f5698372b19c2a780") (:authors ("John Louis Del Rosario" . "john2x@gmail.com")) (:maintainer "John Louis Del Rosario" . "john2x@gmail.com") (:url . "https://github.com/john2x/flatui-theme.el"))]) (gandalf-theme . [(20130809 947) nil "Gandalf color theme" single ((:commit . "4e472fc851431458537d458d09c1f5895e338536") (:keywords "color" "theme") (:authors ("Peter Vasil" . "mail@petervasil.net")) (:maintainer "Peter Vasil" . "mail@petervasil.net"))]) (gotham-theme . [(20171013 1916) nil "A very dark Emacs color theme." single ((:commit . "5e97554d1f9639698faedb0660e63694be33bd84") (:authors ("Vasilij Schneidermann" . "v.schneidermann@gmail.com")) (:maintainer "Vasilij Schneidermann" . "v.schneidermann@gmail.com") (:url . "https://github.com/wasamasa/gotham-theme"))]) (grandshell-theme . [(20180606 517) nil "Dark color theme for Emacs > 24 with intensive colors." tar ((:commit . "0ed8e4273607dd4fcaa742b4097259233b09eda6"))]) (gruber-darker-theme . [(20180529 712) nil "Gruber Darker color theme for Emacs 24." single ((:commit . "c7687ec0511941db1371dcd70b31061d74aa5668") (:authors ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainer "Alexey Kutepov" . "reximkut@gmail.com") (:url . "http://github.com/rexim/gruber-darker-theme"))]) (gruvbox-theme . [(20181013 1144) ((autothemer (0 2))) "A retro-groove colour theme for Emacs" tar ((:commit . "39124183cf47d25780cd02e33e57743484b4c680") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:url . "http://github.com/greduan/emacs-theme-gruvbox"))]) (hc-zenburn-theme . [(20150928 1633) nil "An higher contrast version of the Zenburn theme." single ((:commit . "fd0024a5191cdce204d91c8f1db99ba31640f6e9") (:authors ("Nantas Nardelli" . "nantas.nardelli@gmail.com")) (:maintainer "Nantas Nardelli" . "nantas.nardelli@gmail.com") (:url . "https:github.com/edran/hc-zenburn-emacs"))]) (hemisu-theme . [(20130508 1844) nil "Hemisu for Emacs." tar ((:commit . "5c206561aa2c844ecdf3e3b672c3235e559ddd7f") (:authors ("Andrzej Sliwa")) (:maintainer "Andrzej Sliwa") (:url . "http://github/anrzejsliwa/django-theme"))]) (heroku-theme . [(20150523 219) nil "Heroku color theme" single ((:commit . "8083643fe92ec3a1c3eb82f1b8dc2236c9c9691d") (:authors ("Jonathan Chu" . "me@jonathanchu.is")) (:maintainer "Jonathan Chu" . "me@jonathanchu.is") (:url . "https://github.com/jonathanchu/color-theme-heroku"))]) (inkpot-theme . [(20181026 509) nil "port of vim's inkpot theme" single ((:commit . "52fcb8ffc32a242a86956643ce9b8e8f726947aa") (: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"))]) (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"))]) (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"))]) (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"))]) (autothemer . [(20180920 923) ((dash (2 10 0)) (emacs (24)) (cl-lib (0 5))) "Conveniently define themes." single ((:commit . "69488c71dfc182cf2e7be2d745037f230ade678e") (:authors ("Sebastian Sturm")) (:maintainer "Sebastian Sturm") (:url . "https://github.com/sebastiansturm/autothemer"))]) (kaolin-themes . [(20181117 836) ((emacs (25 1)) (autothemer (0 2 2)) (cl-lib (0 6))) "A set of eye pleasing themes" tar ((:commit . "7ddbe315c85082a6ed9ded576ed8b9e9ed8fe1f2") (: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"))]) (light-soap-theme . [(20150607 1445) ((emacs (24))) "Emacs 24 theme with a light background." single ((:commit . "76a787bd40c6b567ae68ced7f5d9f9f10725e00d"))]) (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"))]) (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"))]) (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"))]) (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"))]) (minimal-theme . [(20160608 1022) nil "A light/dark minimalistic Emacs 24 theme." tar ((:commit . "430e0d3fc2044c16aa9f10961841febbd60df285") (:keywords "color" "theme" "minimal") (:authors ("Anler Hp ")) (:maintainer "Anler Hp ") (:url . "http://github.com/ikame/minimal-theme"))]) (moe-theme . [(20180617 200) nil "A colorful eye-candy theme. Moe, moe, kyun!" tar ((:commit . "ee6d7a1c84ac7a11fcc82dfc3b174eee1c8461fa") (:url . "https://github.com/kuanyui/moe-theme.el"))]) (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"))]) (monokai-theme . [(20180730 1329) nil "A fruity color theme for Emacs." single ((:commit . "f4ef092129f4a35edaee0a9b2219c17e86309730") (:authors ("Kelvin Smith" . "oneKelvinSmith@gmail.com")) (:maintainer "Kelvin Smith" . "oneKelvinSmith@gmail.com") (:url . "http://github.com/oneKelvinSmith/monokai-emacs"))]) (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"))]) (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"))]) (naquadah-theme . [(20180212 1240) nil "A theme based on Tango color set" single ((:commit . "999056526db5095ce600c83672fc80cb744bd93e"))]) (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"))]) (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"))]) (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"))]) (omtose-phellack-theme . [(20161111 2120) nil "A dark theme, with cold bluish touch." tar ((:commit . "66f99633e199e65bd28641626435e8e59246529a"))]) (oldlace-theme . [(20150705 1300) ((emacs (24))) "Emacs 24 theme with an 'oldlace' background." single ((:commit . "5c6f437203b0783b36a7aff4a578de4a0c8c4ee6") (:authors ("martin haesler")) (:maintainer "martin haesler"))]) (organic-green-theme . [(20180522 1620) nil "Low-contrast green color theme." single ((:commit . "200ac4a636eeb6faf1793d1937e62a343debc437"))]) (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"))]) (phoenix-dark-pink-theme . [(20170729 1403) nil "Originally a port of the Sublime Text 2 theme" single ((:commit . "4defbb76b00c1a29f060813898578152d6be623d") (:authors ("J Irving" . "j@lollyshouse.ca")) (:maintainer "J Irving" . "j@lollyshouse.ca") (:url . "http://github.com/j0ni/phoenix-dark-pink"))]) (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"))]) (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"))]) (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"))]) (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"))]) (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"))]) (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"))]) (seti-theme . [(20161208 1636) nil "A dark colored theme, inspired by Seti Atom Theme" single ((:commit . "cbfef2fc15d19ce4c8326e65fafdd61737077132") (:keywords "themes") (:authors ("Vlad Piersec" . "vlad.piersec@gmail.com")) (:maintainer "Vlad Piersec" . "vlad.piersec@gmail.com") (:url . "https://github.com/caisah/seti-theme"))]) (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"))]) (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"))]) (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-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"))]) (solarized-theme . [(20181030 1912) ((emacs (24 1)) (cl-lib (0 5)) (dash (2 6 0))) "The Solarized color theme, ported to Emacs." tar ((:commit . "87d4758e7ecc8ed873f3326e4f8b185fd2b9da0a"))]) (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"))]) (spacegray-theme . [(20150719 1931) ((emacs (24 1))) "A Hyperminimal UI Theme" single ((:commit . "7f70ee36297e5ccf9bc90b1f81472024f5a7a749") (:keywords "themes") (:authors ("Bruce Williams" . "brwcodes@gmail.com")) (:maintainer "Bruce Williams" . "brwcodes@gmail.com") (:url . "http://github.com/bruce/emacs-spacegray-theme"))]) (subatomic-theme . [(20160126 1538) nil "Low contrast bluish color theme" single ((:commit . "6a4086af748b1ecb27f6ba2aa2614988db16d594") (:keywords "color-theme" "blue" "low contrast") (:authors ("John Olsson" . "john@cryon.se")) (:maintainer "John Olsson" . "john@cryon.se") (:url . "https://github.com/cryon/subatomic"))]) (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"))]) (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"))]) (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"))]) (tango-2-theme . [(20120312 2025) nil "Tango 2 color theme for GNU Emacs 24" single ((:commit . "64e44c98e41ebbe3b827d54280e3b9615787daaa") (:authors ("Nick Parker")) (:maintainer "Nick Parker"))]) (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"))]) (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"))]) (tao-theme . [(20181020 1726) nil "This package provides two parametrized uncoloured color themes for Emacs: tao-yin and tao-yang." tar ((:commit . "c10ba53dad8aa3625191184a56c34ed456561771"))]) (toxi-theme . [(20160424 2126) ((emacs (24))) "A dark color theme by toxi" single ((:authors ("Karsten Schmidt" . "info@postspectacular.com")) (:maintainer "Karsten Schmidt" . "info@postspectacular.com") (:url . "http://bitbucket.org/postspectacular/toxi-theme/"))]) (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"))]) (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-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"))]) (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"))]) (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"))]) (white-sand-theme . [(20151117 1648) ((emacs (24))) "Emacs theme with a light background." single ((:commit . "97621edd69267dd143760d94393db2c2558c9ea4") (:authors ("Martin Haesler")) (:maintainer "Martin Haesler"))]) (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"))]) (zenburn-theme . [(20181014 1555) nil "A low contrast color theme for Emacs." single ((:commit . "d71a0f0556c1db785738ab9b0c989df342705a81") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.com")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.com") (:url . "http://github.com/bbatsov/zenburn-emacs"))]) (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/"))]) (color-identifiers-mode . [(20181011 2114) ((dash (2 5 0)) (emacs (24))) "Color identifiers based on their names" single ((:commit . "91296e02dd5f03fe5ee9aa08f95120fb716d2128") (:keywords "faces" "languages") (:authors ("Ankur Dave" . "ankurdave@gmail.com")) (:maintainer "Ankur Dave" . "ankurdave@gmail.com") (:url . "https://github.com/ankurdave/color-identifiers-mode"))]) (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-mode . [(1 0 1) nil "Colorize color names in buffers" single ((:url . "http://elpa.gnu.org/packages/rainbow-mode.html") (:keywords "faces"))]) (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"))]) (font-utils . [(20150806 1751) ((persistent-soft (0 8 8)) (pcache (0 2 3))) "Utility functions for working with fonts" single ((:commit . "9192d3f8ee6a4e75f34c3fed10378674cc2b11d3") (:keywords "extensions") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:url . "http://github.com/rolandwalker/font-utils"))]) (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"))]) (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"))]) (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"))]) (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"))]) (mu4e-alert . [(20180305 646) ((alert (1 2)) (s (1 10 0)) (ht (2 0)) (emacs (24 3))) "Desktop notification for mu4e" single ((:commit . "96a293b28646f4620e257f24748becc4a06843cd") (:keywords "mail" "convenience") (:authors ("Iqbal Ansari" . "iqbalansari02@yahoo.com")) (:maintainer "Iqbal Ansari" . "iqbalansari02@yahoo.com") (:url . "https://github.com/iqbalansari/mu4e-alert"))]) (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"))]) (helm-mu . [(20180513 921) ((helm (1 5 5))) "Helm sources for searching emails and contacts" single ((:commit . "77e6fea24e01481418738421dbcfe28ef1bd63cf") (:authors ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de") (:url . "https://github.com/emacs-helm/helm-mu"))]) (persp-mode . [(20180930 1720) nil "windows/buffers sets shared among frames + save/load." single ((:commit . "689f63e7370cd9424d84b9f7b2eb3d1955443313") (: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"))]) (counsel-notmuch . [(20180714 40) ((emacs (24)) (ivy (0 10 0)) (notmuch (0 21)) (s (1 12 0))) "Search emails in Notmuch asynchronously with Ivy" single ((:commit . "f4c864eca400abe0bb7420bcee80f2f8259ca0ff") (:keywords "mail") (:authors ("Alexander Fu Xi" . "fuxialexander@gmail.com")) (:maintainer "Alexander Fu Xi" . "fuxialexander@gmail.com") (:url . "https://github.com/fuxialexander/counsel-notmuch"))]) (helm-notmuch . [(20180730 1722) ((helm (1 9 3)) (notmuch (0 21))) "Search emails with Notmuch and Helm" single ((:commit . "9988eb0f787c82c779f2417b5613b9142a5b1c9b") (:keywords "mail") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/helm-notmuch"))]) (notmuch . [(20181021 1330) nil "run notmuch within emacs" tar ((:commit . "7f726c6e87517eb9c84119a1c5e3a63bfaaa49f6") (:url . "https://notmuchmail.org/"))]) (company-terraform . [(20180703 1233) ((emacs (24 4)) (company (0 8 12)) (terraform-mode (0 6))) "A company backend for terraform" tar ((:commit . "9c1146bfe23d4c461f4a59577faf4e46fcca7fe9") (:keywords "abbrev" "convenience" "terraform" "company") (:authors ("RafaÅ‚ CieÅ›lak" . "rafalcieslak256@gmail.com")) (:maintainer "RafaÅ‚ CieÅ›lak" . "rafalcieslak256@gmail.com") (:url . "https://github.com/rafalcieslak/emacs-company-terraform"))]) (hcl-mode . [(20170107 827) ((emacs (24 3))) "Major mode for Hashicorp" single ((:commit . "0f2c5ec7e7bcf77c8548e8cac8721ea935ca1b5e") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-hcl-mode"))]) (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"))]) (ranger . [(20170817 1557) ((emacs (24 4))) "Make dired more like ranger" single ((:commit . "6bbff5df2e55f56047fca5058d9ca93ba4963aef") (:keywords "files" "convenience" "dired") (:authors ("Rich Alesi ")) (:maintainer "Rich Alesi ") (:url . "https://github.com/ralesi/ranger"))]) (pandoc-mode . [(20180917 721) ((hydra (0 10 0)) (dash (2 10 0))) "Minor mode for interacting with Pandoc" tar ((:commit . "d594ce399fc75eb553a6d8572713b827f744d95b") (:keywords "text" "pandoc") (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm"))]) (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"))]) (json-mode . [(20180718 809) ((json-reformat (0 0 5)) (json-snatcher (1 0 0))) "Major mode for editing JSON files." single ((:commit . "ffc92b1eefc54963703b43be140f4c8c8ad348f7") (:authors ("Josh Johnston")) (:maintainer "Josh Johnston") (:url . "https://github.com/joshwnj/json-mode"))]) (magit-popup . [(20181003 921) ((emacs (24 4)) (async (1 9 2)) (dash (2 13 0))) "Define prefix-infix-suffix command combos" tar ((:commit . "8436447e3166b797edc596cf220f3bf9b41ff4d0") (:keywords "bindings") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/magit-popup"))]) (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-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"))]) (docker . [(20181101 504) ((emacs (24 5)) (dash (2 14 1)) (docker-tramp (0 1)) (magit-popup (2 12 4)) (s (1 12 0)) (tablist (0 70)) (json-mode (1 7 0))) "Emacs interface to Docker" tar ((:commit . "c36bce1bad03833e0d35e260ed1e402c152606ba") (:keywords "filename" "convenience") (:authors ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainer "Philippe Vaucher" . "philippe.vaucher@gmail.com") (:url . "https://github.com/Silex/docker.el"))]) (docker-tramp . [(20170207 325) ((emacs (24)) (cl-lib (0 5))) "TRAMP integration for docker containers" tar ((:commit . "8e2b671eff7a81af43b76d9dfcf94ddaa8333a23") (:keywords "docker" "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:url . "https://github.com/emacs-pe/docker-tramp.el"))]) (dockerfile-mode . [(20181104 1800) ((emacs (24)) (s (1 12))) "Major mode for editing Docker's Dockerfiles" single ((:commit . "7223d92718f78fa3ab15667cdb2ed90cfeb579e7") (:url . "https://github.com/spotify/dockerfile-mode"))]) (ycmd . [(20180724 1256) ((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 . "ef87d020d3314efbac2e8925c115d0ac5c128c2a") (:url . "https://github.com/abingham/emacs-ycmd"))]) (flycheck-ycmd . [(20181016 618) ((emacs (24)) (dash (2 13 0)) (flycheck (0 22)) (ycmd (1 2)) (let-alist (1 0 5))) "flycheck integration for ycmd" single ((:commit . "ef87d020d3314efbac2e8925c115d0ac5c128c2a") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com") (:url . "https://github.com/abingham/emacs-ycmd"))]) (levenshtein . [(20090830 1040) nil "Edit distance between two strings." single ((:commit . "070925197ebf6b704e6e00c4f2d2ec783f3df38c") (:keywords "lisp") (:authors ("Aaron S. Hawley ,") ("Art Taylor")) (:maintainer "Aaron S. Hawley ,"))]) (cmake-ide . [(20181023 1430) ((emacs (24 4)) (cl-lib (0 5)) (seq (1 11)) (levenshtein (0)) (s (1 11 0))) "Calls CMake to find out include paths and other compiler flags" single ((:commit . "0a90200a74913f07c0ed08d1a1d5ebe314af26a4") (:keywords "languages") (:authors ("Atila Neves" . "atila.neves@gmail.com")) (:maintainer "Atila Neves" . "atila.neves@gmail.com") (:url . "http://github.com/atilaneves/cmake-ide"))]) (cmake-mode . [(20180709 1426) nil "major-mode for editing CMake sources" single ((:commit . "be9ad8279a29893943b342cc5ffdbf9868fb1b4c"))]) (helm-ctest . [(20180821 1005) ((s (1 9 0)) (dash (2 11 0)) (helm-core (1 7 4))) "Run ctest from within emacs" single ((:commit . "0c73689692a290f56080e95325c15362e90d529b") (:keywords "helm" "ctest") (:authors ("Dan LaManna" . "me@danlamanna.com")) (:maintainer "Dan LaManna" . "me@danlamanna.com"))]) (bm . [(20181012 1631) nil "Visible bookmarks in buffer." tar ((:commit . "b85d407b53e1d852c47fcea2a245a4e67e48c38a") (:keywords "bookmark" "highlight" "faces" "persistent") (:authors ("Jo Odland ")) (:maintainer "Jo Odland ") (:url . "https://github.com/joodland/bm"))]) (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/"))]) (auth-source-pass . [(20181106 1348) ((emacs (25))) "Integrate auth-source with password-store" single ((:commit . "63c0631896b2f2ed6b359e026c6a7949932aa0bf") (:authors ("Damien Cassou" . "damien@cassou.me") ("Nicolas Petton" . "nicolas@petton.fr")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://github.com/DamienCassou/auth-password-store"))]) (helm-pass . [(20180607 2348) ((emacs (25)) (helm (0)) (password-store (0)) (auth-source-pass (4 0 0))) "helm interface of pass, the standard Unix password manager" single ((:commit . "fdff8f8f2e2b8a61caed7b6c171624700dbe1346") (:authors ("J. Alexander Branham" . "branham@utexas.edu")) (:maintainer "J. Alexander Branham" . "branham@utexas.edu") (:url . "https://github.com/jabranham/helm-pass"))]) (with-editor . [(20181113 1845) ((emacs (24 4)) (async (1 9))) "Use the Emacsclient as $EDITOR" tar ((:commit . "9dd9f176d96abc60365369de6d08c26c414ef1f3") (:keywords "tools") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/with-editor"))]) (password-store . [(20181031 1440) ((emacs (24)) (f (0 11 0)) (s (1 9 0)) (with-editor (2 5 11))) "Password store (pass) support" single ((:commit . "d29a389a40524c684595f51bb937f66958bc14ea") (:keywords "tools" "pass" "password" "password-store") (:authors ("Svend Sorensen" . "svend@svends.net")) (:maintainer "Svend Sorensen" . "svend@svends.net") (:url . "https://www.passwordstore.org/"))]) (esh-help . [(20170830 411) ((dash (1 4 0))) "Add some help functions and support for Eshell" single ((:commit . "8a8a9d4d9852f8bd96da3b94e95ff57097ac8ec6") (:keywords "eshell" "extensions") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com") (:url . "https://github.com/tom-tan/esh-help/"))]) (eshell-prompt-extras . [(20180110 634) nil "Display extra information for your eshell prompt." single ((:commit . "1d8825dcc005b488c6366d0b3015fc6686194eea") (:keywords "eshell" "prompt") (:authors ("Wei Zhao" . "kaihaosw@gmail.com")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:url . "https://github.com/hiddenlotus/eshell-prompt-extras"))]) (eshell-z . [(20170117 438) ((cl-lib (0 5))) "cd to frequent directory in eshell" single ((:commit . "c9334cbc1552234df3437f35d98e32f4d18446b8") (:keywords "convenience") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/eshell-z"))]) (multi-term . [(20160619 933) nil "Managing multiple terminal buffers in Emacs." single ((:commit . "f954e4e18b0a035151d34852387e724d87a3316f") (: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"))]) (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"))]) (xterm-color . [(20180202 2318) ((cl-lib (0 5))) "ANSI & XTERM 256 color support" single ((:commit . "42374a98f1039e105cad9f16ce585dffc96a3f1c") (:keywords "faces") (:authors (nil . "xristos@sdf.lonestar.org")) (:maintainer nil . "xristos@sdf.lonestar.org") (:url . "https://github.com/atomontage/xterm-color"))]) (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"))]) (vagrant-tramp . [(20160427 2332) ((dash (2 12 0))) "Vagrant method for TRAMP" tar ((:commit . "453ba605b28d2964bb4e10074f1e6891ebb4d2d6") (: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"))]) (systemd . [(20180629 2106) ((emacs (24 4))) "Major mode for editing systemd units" tar ((:commit . "401d71c2dd24e424216ae5e4275c830f2a9c6b0c") (:keywords "tools" "unix") (:authors ("Mark Oteiza" . "mvoteiza@udel.edu")) (:maintainer "Mark Oteiza" . "mvoteiza@udel.edu"))]) (lsp-mode . [(20181115 308) ((emacs (25 1))) "Minor mode for interacting with Language Servers" tar ((:commit . "9e0426cf88190a5c350a5436ab11af6f8d4d412e") (:authors ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainer "Vibhav Pant" . "vibhavp@gmail.com") (:url . "https://github.com/emacs-lsp/lsp-mode"))]) (lsp-ui . [(20181031 2002) ((emacs (25 1)) (dash (2 14)) (dash-functional (1 2 0)) (flycheck (31)) (lsp-mode (5 0)) (markdown-mode (2 3))) "UI modules for lsp-mode" tar ((:commit . "5138e720451dfbcae2f55a8380416340d5706583") (: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"))]) (ansible . [(20180813 114) ((s (1 9 0)) (f (0 16 2))) "Ansible minor mode" tar ((:commit . "8a097176d6772b6667254dbbe19c5fb64527bf5d") (:authors ("k1LoW (Kenichirou Oyama), ")) (:maintainer "k1LoW (Kenichirou Oyama), ") (:url . "http://101000lab.org"))]) (ansible-doc . [(20160924 824) ((emacs (24 3))) "Ansible documentation Minor Mode" single ((:commit . "86083a7bb2ed0468ca64e52076b06441a2f8e9e0") (:keywords "tools" "help") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn") (:url . "https://github.com/lunaryorn/ansible-doc.el"))]) (company-ansible . [(20180701 1813) ((emacs (24 4)) (company (0 8 12))) "A company back-end for ansible" tar ((:commit . "c6dc714e3a15f89671ae5e8fe668858b20ef63e8") (:keywords "ansible") (:authors ("Krzysztof Magosa" . "krzysztof@magosa.pl")) (:maintainer "Krzysztof Magosa" . "krzysztof@magosa.pl") (:url . "https://github.com/krzysztof-magosa/company-ansible"))]) (jinja2-mode . [(20141128 1007) nil "A major mode for jinja2" single ((:commit . "cfaa7bbe7bb290cc500440124ce89686f3e26f86") (:authors ("Florian Mounier aka paradoxxxzero")) (:maintainer "Florian Mounier aka paradoxxxzero"))]) (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"))]) (yaml-mode . [(20180409 607) ((emacs (24 1))) "Major mode for editing YAML files" single ((:commit . "40067a10ac1360f0b9533f0bbbb2eea128e2574d") (:keywords "data" "yaml") (:authors ("Yoshiki Kurihara" . "clouder@gmail.com") ("Marshall T. Vandegrift" . "llasram@gmail.com")) (:maintainer "Vasilij Schneidermann" . "v.schneidermann@gmail.com"))]) (mmm-mode . [(0 5 7) ((cl-lib (0 2))) "Allow Multiple Major Modes in a buffer" tar ((:keywords "convenience" "faces" "languages" "tools") (:url . "https://github.com/purcell/mmm-mode"))]) (salt-mode . [(20181015 1025) ((emacs (24 4)) (yaml-mode (0 0 12)) (mmm-mode (0 5 4)) (mmm-jinja2 (0 1))) "Major mode for Salt States" single ((:commit . "432eaf8a48a79ec5e3b6149dac28370e140155e4") (:keywords "languages") (:authors ("Ben Hayden" . "hayden767@gmail.com")) (:maintainer "Glynn Forrest" . "me@glynnforrest.com") (:url . "https://github.com/glynnforrest/salt-mode"))]) (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"))]) (command-log-mode . [(20160413 447) nil "log keyboard commands to buffer" single ((:commit . "af600e6b4129c8115f464af576505ea8e789db27") (:keywords "help") (:authors ("Michael Weber" . "michaelw@foldr.org")) (:maintainer "Michael Weber" . "michaelw@foldr.org") (:url . "https://github.com/lewang/command-log-mode"))]) (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"))]) (edit-server . [(20181016 1125) nil "server that responds to edit requests from Chrome" single ((:commit . "81eb5211f79cf5a2234b7a932f6006d27d506aa5") (:authors ("Alex Bennée" . "alex@bennee.com")) (:maintainer "Alex Bennée" . "alex@bennee.com") (:url . "https://github.com/stsquad/emacs_chrome"))]) (ham-mode . [(20150811 1306) ((html-to-markdown (1 2)) (markdown-mode (2 0))) "Html As Markdown. Transparently edit an html file using markdown" single ((:commit . "3a141986a21c2aa6eefb428983352abb8b7907d2") (:keywords "convenience" "emulation" "wp") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com") (:url . "http://github.com/Bruce-Connor/ham-mode"))]) (markdown-mode . [(20181112 1529) ((emacs (24 4)) (cl-lib (0 5))) "Major mode for Markdown-formatted text" single ((:commit . "d18a8f856d19dfac8fa6e6e72b2448e262045fcc") (: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/"))]) (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"))]) (gmail-message-mode . [(20160627 1847) ((ham-mode (1 0))) "A major-mode for editing gmail messages using markdown syntax." single ((:commit . "ec36672a9dc93c09ebe2f77597b498d11883d008") (:keywords "mail" "convenience" "emulation") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com") (:url . "http://github.com/Bruce-Connor/gmail-message-mode"))]) (flymd . [(20160617 1214) ((cl-lib (0 5))) "On the fly markdown preview" tar ((:commit . "84d5a68bcfed4a295952c33ffcd11e880978d9d7") (:keywords "markdown" "convenience") (:authors ("Mola-T" . "Mola@molamola.xyz")) (:maintainer "Mola-T" . "Mola@molamola.xyz") (:url . "https://github.com/mola-T/flymd"))]) (osx-location . [(20150613 917) nil "Watch and respond to changes in geographical location on OS X" tar ((:commit . "8bb3a94cc9f04b922d2d730fe08596cc6ee12bf2"))]) (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/"))]) (sunshine . [(20181029 1654) ((cl-lib (0 5))) "Provide weather and forecast information." single ((:commit . "8959dea03377e61aaca0124ac8d2703daaae6b9a") (:keywords "tools" "weather") (:authors ("Aaron Bieber" . "aaron@aaronbieber.com")) (:maintainer "Aaron Bieber" . "aaron@aaronbieber.com") (:url . "https://github.com/aaronbieber/sunshine.el"))]) (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"))]) (transmission . [(20180728 1717) ((emacs (24 4)) (let-alist (1 0 5))) "Interface to a Transmission session" single ((:commit . "bbe4077b89afe732d346eeed1ad0783537f33480") (:keywords "comm" "tools") (:authors ("Mark Oteiza" . "mvoteiza@udel.edu")) (:maintainer "Mark Oteiza" . "mvoteiza@udel.edu"))]) (prodigy . [(20180511 938) ((s (1 8 0)) (dash (2 4 0)) (f (0 14 0)) (emacs (24))) "Manage external services from within Emacs" single ((:commit . "701dccaa56de9e6a330c05bde33bce4f3b3d6a97") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:url . "http://github.com/rejeep/prodigy.el"))]) (flycheck-ledger . [(20180819 321) ((flycheck (0 15))) "Flycheck integration for ledger files" single ((:commit . "8d7f52a4c7f80ca396ef0fc6c7d8e9f005778dfc") (:keywords "convenience" "languages" "tools") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) (ledger-mode . [(20181107 1942) ((emacs (24 3))) "Helper code for use with the \"ledger\" command-line tool" tar ((:commit . "1f5c68fb59d81d2fffe49436ee99a8c291a4fe41"))]) (evil-ledger . [(20180802 1612) ((emacs (24 4)) (evil (1 2 12)) (ledger-mode (0))) "Make `ledger-mode' more `evil'." single ((:commit . "7a9f9f5d39c42fffdba8004f8982642351f2b233") (:keywords "convenience" "evil" "languages" "ledger" "vim-emulation") (:authors ("Aaron Jacobs" . "atheriel@gmail.com")) (:maintainer "Aaron Jacobs" . "atheriel@gmail.com") (:url . "https://github.com/atheriel/evil-ledger"))]) (know-your-http-well . [(20160208 2304) nil "Look up the meaning of HTTP headers, methods, relations, status codes" tar ((:commit . "3cc5ab6d2764ab7aacb1b6e026abaccbeb6c37f2"))]) (company-restclient . [(20151202 1201) ((cl-lib (0 5)) (company (0 8 0)) (emacs (24)) (know-your-http-well (0 2 0)) (restclient (0 0 0))) "company-mode completion back-end for restclient-mode" single ((:commit . "19d819b14b7cd186a840369060963a08377d052e") (:authors ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainer "Iku Iwasa" . "iku.iwasa@gmail.com") (:url . "https://github.com/iquiw/company-restclient"))]) (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-restclient . [(20180904 709) ((restclient (0))) "org-babel functions for restclient-mode" single ((:commit . "00b2c5a6637ab6e504708612357ffb29b5416e4b") (:keywords "literate programming" "reproducible research") (:authors ("Alf LervÃ¥g")) (:maintainer "Alf LervÃ¥g") (:url . "http://orgmode.org"))]) (restclient . [(20180316 1551) nil "An interactive HTTP client for Emacs" single ((:commit . "859d944796ce298b5779d9d256bd8d271d57e221") (:keywords "http") (:authors ("Pavel Kurnosov" . "pashky@gmail.com")) (:maintainer "Pavel Kurnosov" . "pashky@gmail.com"))]) (restclient-helm . [(20170314 1554) ((restclient (0)) (helm (1 9 4))) "helm interface for restclient.el" single ((:commit . "859d944796ce298b5779d9d256bd8d271d57e221") (:keywords "http" "helm") (:authors ("Pavel Kurnosov" . "pashky@gmail.com")) (:maintainer "Pavel Kurnosov" . "pashky@gmail.com"))]) (ob-cfengine3 . [(20180102 1812) nil "Org Babel functions for CFEngine 3" single ((:commit . "93ebcfceec3734f4bd187ae123686187d66fd401") (:keywords "tools" "convenience") (:authors ("Nick Anderson" . "nick@cmdln.org")) (:maintainer "Nick Anderson" . "nick@cmdln.org") (:url . "https://github.com/nickanderson/ob-cfengine3"))]) (tern . [(20181108 722) ((json (1 2)) (cl-lib (0 5)) (emacs (24))) "Tern-powered JavaScript integration" single ((:commit . "e94e20be8510040744fc803c9fda6bbb9625c6d2") (:authors ("Marijn Haverbeke")) (:maintainer "Marijn Haverbeke") (:url . "http://ternjs.net/"))]) (company-tern . [(20161004 1847) ((company (0 8 0)) (tern (0 0 1)) (dash (2 8 0)) (dash-functional (2 8 0)) (s (1 9 0)) (cl-lib (0 5 0))) "Tern backend for company-mode" single ((:commit . "10ac058b065ae73c1f30e9fb7d969dd1a79387be") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/company-tern"))]) (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"))]) (fasd . [(20180606 505) nil "Emacs integration for the command-line productivity booster `fasd'" single ((:commit . "020c6a4b5fd1498a84ae142d2e32c7ff678fb029") (:keywords "cli" "bash" "zsh" "autojump") (:authors ("steckerhalter")) (:maintainer "steckerhalter") (:url . "https://framagit.org/steckerhalter/emacs-fasd"))]) (evil-tutor-ja . [(20160917 132) ((evil (1 0 9)) (evil-tutor (0 1))) "Japanese Vimtutor adapted to Evil and wrapped in a major-mode" tar ((:commit . "99af7d82e02ce3bcdfaff47c5c80b57327a7ea8d") (:keywords "convenience" "editing" "evil" "japanese") (:authors ("Kenji Miyazaki" . "kenjizmyzk@gmail.com")) (:maintainer "Kenji Miyazaki" . "kenjizmyzk@gmail.com") (:url . "https://github.com/kenjimyzk/evil-tutor-ja"))]) (migemo . [(20160924 1441) ((cl-lib (0 5))) "Japanese incremental search through dynamic pattern expansion" single ((:commit . "e4744efae1b2fdea2bbd2ceaff0f6ea0bb739f5a") (: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"))]) (avy-migemo . [(20180716 1455) ((emacs (24 4)) (avy (0 4 0)) (migemo (1 9))) "avy with migemo" tar ((:commit . "922a6dd82c0bfa316b0fbb56a9d4dd4ffa5707e7") (:keywords "avy" "migemo") (:authors ("momomo5717")) (:maintainer "momomo5717") (:url . "https://github.com/momomo5717/avy-migemo"))]) (cdb . [(20151205 1343) nil "constant database (cdb) reader for Emacs Lisp" single ((:commit . "b05c610e27b86e71fb4e8d67292ef6a696dd5992") (:keywords "cdb") (:authors ("Yusuke Shinyama ")) (:maintainer "SKK Development Team" . "skk@ring.gr.jp"))]) (ccc . [(20151205 1343) nil "buffer local cursor color control library" single ((:commit . "b05c610e27b86e71fb4e8d67292ef6a696dd5992") (:keywords "cursor") (:authors ("Masatake YAMATO" . "masata-y@is.aist-nara.ac.jp")) (:maintainer "SKK Development Team" . "skk@ring.gr.jp") (:url . "https://github.com/skk-dev/ddskk/blob/master/READMEs/README.ccc.org"))]) (ddskk . [(20180707 532) ((ccc (1 43)) (cdb (20141201 754))) "Simple Kana to Kanji conversion program." tar ((:commit . "b05c610e27b86e71fb4e8d67292ef6a696dd5992"))]) (japanese-holidays . [(20160928 618) ((cl-lib (0 3))) "calendar functions for the Japanese calendar" single ((:commit . "0bccfac342d6ebda1c1a35c3babca0c800ff0c9b") (: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"))]) (pangu-spacing . [(20170317 857) nil "Minor-mode to add space between Chinese and English characters." single ((:commit . "a4463dbb74abdeddb6c1c132a1f8fcf67ed87498") (:authors ("coldnew" . "coldnew.tw@gmail.com")) (:maintainer "coldnew" . "coldnew.tw@gmail.com") (:url . "http://github.com/coldnew/pangu-spacing"))]) (pyim-basedict . [(20170727 259) nil "The default pinyin dict of pyim" tar ((:commit . "3196cb210e056702c5a4ea1dac1d8e1e27740fab") (: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 . [(20181109 1350) ((emacs (24 4)) (popup (0 1)) (async (1 6)) (pyim-basedict (0 1))) "A Chinese input method support quanpin, shuangpin, wubi and cangjie." tar ((:commit . "8648d467d79b3bf1c3a99623f9329939cacc40da") (:keywords "convenience" "chinese" "pinyin" "input-method") (:authors ("Ye Wenbin , Feng Shu" . "tumashu@163.com")) (:maintainer "Ye Wenbin , Feng Shu" . "tumashu@163.com") (:url . "https://github.com/tumashu/pyim"))]) (chinese-wbim . [(20150624 350) nil "Enable Wubi Input Method in Emacs." tar ((:commit . "57ff61ff3895d77335709d24b40cefc4d10b0095"))]) (fcitx . [(20170914 200) nil "Make fcitx better in Emacs" single ((:commit . "095332fbeb994c908c533fe2ad068c0728211c3d") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:url . "https://github.com/cute-jumper/fcitx.el"))]) (find-by-pinyin-dired . [(20180210 218) ((pinyinlib (0 1 0))) "Find file by first PinYin character of Chinese Hanzi" single ((:commit . "3b4781148dddc84a701ad76c0934ed991ecd59d5") (:keywords "hanzi" "chinese" "dired" "find" "file" "pinyin") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") (:url . "http://github.com/redguardtoo/find-by-pinyin-dired"))]) (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"))]) (ace-pinyin . [(20170501 626) ((avy (0 2 0)) (pinyinlib (0 1 0))) "Jump to Chinese characters using avy or ace-jump-mode" single ((:commit . "a9df88c1e6a32a4f4895acbb8c45383693c494c1") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:url . "https://github.com/cute-jumper/ace-pinyin"))]) (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"))]) (chinese-word-at-point . [(20170811 941) ((cl-lib (0 5))) "Add `chinese-word' thing to `thing-at-point'" single ((:commit . "8223d7439e005555b86995a005b225ae042f0538") (:keywords "convenience" "chinese") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com") (:url . "https://github.com/xuchunyang/chinese-word-at-point.el"))]) (youdao-dictionary . [(20180714 414) ((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 . "9496ea3ba8aa999db3dbde88d6aa37f3579d8dea") (:keywords "convenience" "chinese" "dictionary") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com") (:url . "https://github.com/xuchunyang/youdao-dictionary.el"))]) (chinese-conv . [(20170807 2128) ((cl-lib (0 5))) "Conversion between Chinese Characters with opencc or cconv" single ((:commit . "b56815bbb163d642e97fa73093b5a7e87cc32574") (:authors ("gucong" . "gucong43216@gmail.com")) (:maintainer "gucong" . "gucong43216@gmail.com") (:url . "https://github.com/gucong/emacs-chinese-conv"))]) (evil-escape . [(20180910 1234) nil "No description available." single ((:commit . "f4e9116bfbaac8c9d210c17ad488e0982291245f"))]) (eyebrowse . [(20180514 1919) ((dash (2 7 0)) (emacs (24 3 1))) "Easy window config switching" single ((:commit . "dfeea9e9cd6dcd78ddc9fccdf9a21f7317f754bc") (:keywords "convenience") (:authors ("Vasilij Schneidermann" . "v.schneidermann@gmail.com")) (:maintainer "Vasilij Schneidermann" . "v.schneidermann@gmail.com") (:url . "https://github.com/wasamasa/eyebrowse"))]) (neotree . [(20181113 2125) ((cl-lib (0 5))) "A tree plugin like NerdTree for Vim" tar ((:commit . "6e3ae07b08d4dd218c119e91a101d7e7ed6ef4d9") (:authors ("jaypei" . "jaypei97159@gmail.com")) (:maintainer "jaypei" . "jaypei97159@gmail.com") (:url . "https://github.com/jaypei/emacs-neotree"))]) (exec-path-from-shell . [(20180324 204) nil "Get environment variables such as $PATH from the shell" single ((:commit . "9bc0f4a762f16d488376fb52409c58239a86d75d") (:keywords "unix" "environment") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/exec-path-from-shell"))]) (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"))]) (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-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"))]) (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"))]) (company-nixos-options . [(20160215 857) ((company (0 8 0)) (nixos-options (0 0 1)) (cl-lib (0 5 0))) "Company Backend for 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/"))]) (helm-nixos-options . [(20151013 2309) ((nixos-options (0 0 1)) (helm (1 5 6))) "Helm Interface for 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-mode . [(20181030 346) ((emacs (24 3))) "Major mode for editing .nix files" tar ((:commit . "84ee98019fbb48854ebd57cc74848b7e7327a78c") (:keywords "nix" "languages" "tools" "unix") (:maintainer "Matthew Bauer" . "mjbauer95@gmail.com") (:url . "https://github.com/NixOS/nix-mode"))]) (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/"))]) (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"))]) (2048-game . [(20151026 1933) nil "play 2048 in Emacs" single ((:authors ("Zachary Kanfer" . "zkanfer@gmail.com")) (:maintainer "Zachary Kanfer" . "zkanfer@gmail.com") (:url . "https://bitbucket.org/zck/2048.el"))]) (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"))]) (sudoku . [(20161111 706) ((emacs (24 4))) "Simple sudoku game, can download puzzles" single ((:commit . "77c11b5041b58fc943cf1668b44b40bae039cb5b") (:keywords "games") (:authors ("Zajcev Evgeny" . "zevlg@yandex.ru")) (:maintainer "Zajcev Evgeny" . "zevlg@yandex.ru"))]) (mmt . [(20180101 619) ((emacs (24 1)) (cl-lib (0 3))) "Missing macro tools for Emacs Lisp" single ((:commit . "e860009ce531ee05d2902309db5f804326596b45") (:keywords "macro" "emacs-lisp") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:url . "https://github.com/mrkkrp/mmt"))]) (typit . [(20180317 807) ((emacs (24 4)) (f (0 18)) (mmt (0 1 1))) "Typing game similar to tests on 10 fast fingers" tar ((:commit . "4fe50d616fc60e77eb9b5a824c0a1ca4010b0746") (:keywords "games") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:url . "https://github.com/mrkkrp/typit"))]) (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"))]) (rcirc-color . [(0 4 1) ((emacs (24 4))) "color nicks" single ((:url . "http://elpa.gnu.org/packages/rcirc-color.html") (:keywords "comm"))]) (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"))]) (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"))]) (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"))]) (jabber . [(20180927 2325) ((fsm (0 2)) (srv (0 2))) "A Jabber client for Emacs." tar ((:commit . "fff33826f42e040dad7ef64ea312d85215d3b0a1"))]) (emojify . [(20180611 1538) ((seq (1 11)) (ht (2 0)) (emacs (24 3))) "Display emojis in Emacs" tar ((:commit . "38ae28d95b58e9fb86a3495a2dda3e5de254c4fc") (:keywords "multimedia" "convenience") (:authors ("Iqbal Ansari" . "iqbalansari02@yahoo.com")) (:maintainer "Iqbal Ansari" . "iqbalansari02@yahoo.com") (:url . "https://github.com/iqbalansari/emacs-emojify"))]) (circe . [(20180525 1231) ((cl-lib (0 5))) "Client for IRC in Emacs" tar ((:commit . "fedfa7eb8516a53fa70b6a1f4fce4b5ab66ea91f") (:url . "https://github.com/jorgenschaefer/circe"))]) (oauth2 . [(0 11) nil "OAuth 2.0 Authorization Protocol" single ((:url . "http://elpa.gnu.org/packages/oauth2.html") (:keywords "comm"))]) (websocket . [(20180423 16) ((cl-lib (0 5))) "Emacs WebSocket client and server" single ((:commit . "0d96ba2ff5a25c6cd6c66f417cc9b5f38a4308ba") (:keywords "communication" "websocket" "server") (:authors ("Andrew Hyatt" . "ahyatt@gmail.com")) (:maintainer "Andrew Hyatt" . "ahyatt@gmail.com"))]) (slack . [(20181113 336) ((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 . "19af9a367b55ca79377058f4d9b5776dd98a9f99") (:url . "https://github.com/yuya373/emacs-slack"))]) (erc-hl-nicks . [(20180415 1946) nil "ERC nick highlighter that ignores uniquifying chars when colorizing" single ((:commit . "756c4438a8245ccd3e389bf6c9850ee8453783ec") (:authors ("David Leatherman" . "leathekd@gmail.com")) (:maintainer "David Leatherman" . "leathekd@gmail.com") (:url . "http://www.github.com/leathekd/erc-hl-nicks"))]) (erc-image . [(20180522 1424) nil "Show received image urls in the ERC buffer" single ((:commit . "82fb3871f02e24b1e880770b9a3d187aab43d0f0") (:keywords "multimedia") (:authors ("Jon de Andrés FrÃas" . "jondeandres@gmail.com") ("Raimon Grau Cuscó" . "raimonster@gmail.com")) (:maintainer "Jon de Andrés FrÃas" . "jondeandres@gmail.com"))]) (erc-social-graph . [(20150508 1204) nil "A social network graph module for ERC." single ((:commit . "e6ef3416a1c5064054bf054d9f0c1c7bf54a9cd0") (:keywords "erc" "graph") (:authors ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainer "Vibhav Pant" . "vibhavp@gmail.com") (:url . "https://github.com/vibhavp/erc-social-graph"))]) (erc-terminal-notifier . [(20140115 1024) nil "OSX notifications via the terminal-notifier gem for Emacs ERC." single ((:commit . "a3dacb935845e4a20031212bbd82b2170f68d2a8") (:keywords "erc" "terminal-notifier" "nick") (:authors ("Julien Blanchard" . "julien@sideburns.eu")) (:maintainer "Julien Blanchard" . "julien@sideburns.eu") (:url . "http://github.com/julienXX/"))]) (erc-view-log . [(20140227 2039) nil "Major mode for viewing ERC logs" single ((:commit . "c5a25f0cbca84ed2e4f72068c02b66bd0ea3b266") (:keywords "erc" "viewer" "logs" "colors") (:authors ("Antoine Levitt") ("Thomas Riccardi" . "riccardi.thomas@gmail.com")) (:maintainer "Antoine Levitt") (:url . "http://github.com/Niluge-KiWi/erc-view-log/raw/master/erc-view-log.el"))]) (erc-yt . [(20150426 1249) ((dash (2 10 0))) "An erc module to display youtube links nicely" single ((:commit . "43e7d49325b17a3217a6ffb4a9daf75c5ff4e6f8") (:keywords "multimedia") (:authors ("William Stevenson" . "yhvh2000@gmail.com")) (:maintainer "William Stevenson" . "yhvh2000@gmail.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"))]) (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"))]) (helm-spotify-plus . [(20180107 1138) ((emacs (24 4)) (helm (2 0 0)) (multi (2 0 1))) "Control Spotify search and select music with Helm." single ((:commit . "895f241f1259891d5c89cd42023f119f9fa121d6") (:authors ("Wanderson Ferreira and Luis Moneda ")) (:maintainer "Wanderson Ferreira and Luis Moneda "))]) (counsel-spotify . [(20180320 322) ((emacs (25)) (ivy (0 9 0))) "Control Spotify search and select music with Ivy." single ((:commit . "9033e207dccdfea7fe590d2e102d50fcd2bd22e3") (:authors ("Lautaro GarcÃa ")) (:maintainer "Lautaro GarcÃa "))]) (copy-as-format . [(20171216 16) ((cl-lib (0 5))) "Copy buffer locations as GitHub/Slack/JIRA/HipChat/... formatted code" single ((:commit . "971957166fe64d914ec4be209b4f80efeeabbb19") (:keywords "github" "slack" "jira" "hipchat" "gitlab" "bitbucket" "org-mode" "pod" "rst" "asciidoc" "tools" "convenience") (:authors ("Skye Shaw" . "skye.shaw@gmail.com")) (:maintainer "Skye Shaw" . "skye.shaw@gmail.com") (:url . "https://github.com/sshaw/copy-as-format"))]) (evil-mc . [(20180921 1727) ((emacs (24 3)) (evil (1 2 13)) (cl-lib (0 5))) "Multiple cursors for evil-mode" tar ((:commit . "2af29ecd2fbed1571c4cc2501dfb2e38ffd4bfa2") (:keywords "evil" "editing" "multiple-cursors" "vim" "evil-multiple-cursors" "evil-mc" "evil-mc") (:authors ("Gabriel Adomnicai" . "gabesoft@gmail.com")) (:maintainer "Gabriel Adomnicai" . "gabesoft@gmail.com") (:url . "https://github.com/gabesoft/evil-mc"))]) (auto-yasnippet . [(20180503 1908) ((yasnippet (0 8 0))) "Quickly create disposable yasnippets" single ((:commit . "623734aa418b18ff52cb65a0adb9e359aed31615") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/auto-yasnippet"))]) (auto-complete . [(20170125 245) ((popup (0 5 0)) (cl-lib (0 5))) "Auto Completion for GNU Emacs" tar ((:commit . "2e83566ddfa758c69afe50b8a1c62a66f47471e3"))]) (ac-ispell . [(20151101 226) ((auto-complete (1 4)) (cl-lib (0 5))) "ispell completion source for auto-complete" single ((:commit . "22bace7387e9012002a6a444922f75f9913077b0") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-ac-ispell"))]) (company-statistics . [(20170210 1933) ((emacs (24 3)) (company (0 8 5))) "Sort candidates using completion history" single ((:commit . "e62157d43b2c874d2edbd547c3bdfb05d0a7ae5c") (:keywords "abbrev" "convenience" "matching") (:authors ("Ingo Lohmar" . "i.lohmar@gmail.com")) (:maintainer "Ingo Lohmar" . "i.lohmar@gmail.com") (:url . "https://github.com/company-mode/company-statistics"))]) (fuzzy . [(20150730 337) nil "Fuzzy Matching" single ((:commit . "534d723ad2e06322ff8d9bd0ba4863d243f698e7") (:keywords "convenience") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainer "Tomohiro Matsuyama" . "m2ym.pub@gmail.com"))]) (company . [(20181105 2312) ((emacs (24 3))) "Modular text completion framework" tar ((:commit . "c95a6b41d621de4253b77e512aa61fc0e75acddc") (:keywords "abbrev" "convenience" "matching") (:authors ("Nikolaj Schumacher")) (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru") (:url . "http://company-mode.github.io/"))]) (helm-company . [(20180828 1612) ((helm (1 5 9)) (company (0 6 13))) "Helm interface for company-mode" single ((:commit . "d3fc093a0e833b4dee6561c00d6df3d62aa50f3f") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Daniel Ralston" . "Sodel-the-Vociferous@users.noreply.github.com") (:url . "https://github.com/Sodel-the-Vociferous/helm-company"))]) (helm-c-yasnippet . [(20170128 1542) ((helm (1 7 7)) (yasnippet (0 8 0)) (cl-lib (0 3))) "helm source for yasnippet.el" single ((:commit . "65ca732b510bfc31636708aebcfe4d2d845b59b0") (:keywords "convenience" "emulation") (:authors ("Kenji.I (Kenji Imakado)" . "ken.imakaado@gmail.com")) (:maintainer "Kenji.I (Kenji Imakado)" . "ken.imakaado@gmail.com"))]) (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"))]) (yasnippet-snippets . [(20181107 2203) ((yasnippet (0 8 0))) "Collection of yasnippet snippets" tar ((:commit . "7d4e06dbd6e517d27e4f1407b6f5180f29048588") (:keywords "snippets") (:authors ("Andrea Crotti" . "andrea.crotti.0@gmail.com")) (:maintainer "Andrea Crotti" . "andrea.crotti.0@gmail.com"))]) (counsel-projectile . [(20181020 1906) ((counsel (0 10 0)) (projectile (1 0 0))) "Ivy integration for Projectile" single ((:commit . "7607fb8bb4eb7fbe0ec20f9644b6bbaa5c363330") (:keywords "project" "convenience") (:authors ("Eric Danan")) (:maintainer "Eric Danan") (:url . "https://github.com/ericdanan/counsel-projectile"))]) (helm-make . [(20181107 2126) ((helm (1 5 3)) (projectile (0 11 0))) "Select a Makefile target with helm" single ((:commit . "f86c3973af760df6d7d0ecc61c3d9d14e1d93e2b") (:keywords "makefile") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/helm-make"))]) (ivy-hydra . [(20180614 2200) ((emacs (24 1)) (ivy (0 9 0)) (hydra (0 13 4))) "Additional key bindings for Ivy" single ((:commit . "d76968a85f9dc5dcebdc25eb8e3af2cd2775319e") (:keywords "convenience") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/swiper"))]) (ivy-rich . [(20181001 1147) ((emacs (24 4)) (ivy (0 8 0))) "More friendly display transformer for ivy." single ((:commit . "dee5d60f655c93f4f9f0e40507244112bd90dab5") (:keywords "ivy") (:authors ("Yevgnen Koh" . "wherejoystarts@gmail.com")) (:maintainer "Yevgnen Koh" . "wherejoystarts@gmail.com"))]) (ivy-xref . [(20180821 1211) ((emacs (25 1)) (ivy (0 10 0))) "Ivy interface for xref results" single ((:commit . "61864f82e554121be0a26ba0a1d8f48b669dd5f0") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com") (:url . "https://github.com/alexmurray/ivy-xref"))]) (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/"))]) (wgrep . [(20180711 626) nil "Writable grep buffer and apply the changes to files" single ((:commit . "414be70bd313e482cd9f0b70fd2daad4ee23497c") (: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"))]) (yasnippet . [(20181015 1212) ((cl-lib (0 5))) "Yet another snippet extension for Emacs." single ((:commit . "1d96da2e08664c31ff7f6f7441da1f4fa5680b1f") (:keywords "convenience" "emulation") (:maintainer "Noam Postavsky" . "npostavs@gmail.com") (:url . "http://github.com/joaotavora/yasnippet"))]) (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"))]) (ace-jump-helm-line . [(20160918 1836) ((avy (0 4 0)) (helm (1 6 3))) "Ace-jump to a candidate in helm window" single ((:commit . "1483055255df3f8ae349f7520f05b1e43ea3ed37") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:url . "https://github.com/cute-jumper/ace-jump-helm-line"))]) (helm-ag . [(20170209 1545) ((emacs (24 4)) (helm (2 0))) "the silver searcher with helm interface" single ((:commit . "2fc02c4ead29bf0db06fd70740cc7c364cb650ac") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-helm-ag"))]) (helm-descbinds . [(20180429 1456) ((helm (1 5))) "A convenient `describe-bindings' with `helm'" single ((:commit . "033be73f21778633813264ce1634a6e1ad873d8e") (:keywords "helm" "help") (:authors ("Taiki SUGAWARA" . "buzz.taiki@gmail.com")) (:maintainer "Taiki SUGAWARA" . "buzz.taiki@gmail.com") (:url . "https://github.com/emacs-helm/helm-descbinds"))]) (helm-flx . [(20180103 516) ((emacs (24 4)) (helm (1 7 9)) (flx (0 5))) "Sort helm candidates by flx score" single ((:commit . "6640fac5cb16bee73c95b8ed1248a4e5e113690e") (:keywords "convenience" "helm" "fuzzy" "flx") (:authors ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainer "PythonNut" . "pythonnut@pythonnut.com") (:url . "https://github.com/PythonNut/helm-flx"))]) (helm-mode-manager . [(20151124 938) ((helm (1 5 3))) "Select and toggle major and minor modes with helm" single ((:commit . "5d9c3ca4f8205d07ff4e03c4c3e88f596751c1fc") (:authors ("istib")) (:maintainer "istib") (:url . "https://github.com/istib/helm-mode-manager"))]) (helm-projectile . [(20180815 1514) ((helm (1 9 9)) (projectile (0 14 0)) (cl-lib (0 3))) "Helm integration for Projectile" single ((:commit . "8a2dbc973548fac89356c11d70f7f474ea1367a5") (:keywords "project" "convenience") (:authors ("Bozhidar Batsov")) (:maintainer "Bozhidar Batsov") (:url . "https://github.com/bbatsov/helm-projectile"))]) (helm-swoop . [(20180215 1154) ((helm (1 0)) (emacs (24 3))) "Efficiently hopping squeezed lines powered by helm interface" single ((:commit . "c66336b8245ddc51c4206f19c119f1081920985c") (:keywords "helm" "swoop" "inner" "buffer" "search") (:authors ("Shingo Fukuyama - http://fukuyama.co")) (:maintainer "Shingo Fukuyama - http://fukuyama.co") (:url . "https://github.com/ShingoFukuyama/helm-swoop"))]) (helm-themes . [(20160918 545) ((helm-core (2 0)) (emacs (24 4))) "Color theme selection with helm interface" single ((:commit . "1160af42590b0d845a55e65e1e782d9e4027fd6e") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-helm-themes"))]) (helm-xref . [(20180528 1516) ((emacs (25 1)) (helm (1 9 4))) "Helm interface for xref results" single ((:commit . "6f7e8eeec5cc4db64a76ba242c0f2f61e7ee1e46") (:authors ("Fritz Stelzer" . "brotzeitmacher@gmail.com")) (:maintainer "Fritz Stelzer" . "brotzeitmacher@gmail.com") (:url . "https://github.com/brotzeitmacher/helm-xref"))]) (winum . [(20181107 47) ((cl-lib (0 5)) (dash (2 13 0))) "Navigate windows and frames using numbers." single ((:commit . "8bafa66f800e43a2e5d596e000047a80b0e62cd7") (: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"))]) (treemacs-evil . [(20180803 1017) ((evil (1 2 12)) (treemacs (0))) "Evil mode integration for treemacs" single ((:commit . "cb8b01dcd6fd19ea59e9277ea24c9786c83a5cd0") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/treemacs"))]) (treemacs . [(20181117 1604) ((emacs (25 2)) (cl-lib (0 5)) (dash (2 11 0)) (s (1 10 0)) (f (0 11 0)) (ace-window (0 9 0)) (pfuture (1 2)) (hydra (0 13 2)) (ht (2 2))) "A tree style file explorer package" tar ((:commit . "cb8b01dcd6fd19ea59e9277ea24c9786c83a5cd0") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/treemacs"))]) (ht . [(20180129 2234) ((dash (2 12 0))) "The missing hash table library for Emacs" single ((:commit . "5a665d00dc8fda77bad2a43277d8809c23e46ab8") (:keywords "hash table" "hash map" "hash") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) (pfuture . [(20180922 1315) ((emacs (25 2))) "a simple wrapper around asynchronous processes" single ((:commit . "c06e78b37ac3fba72ea446f11da38a6a5cba428c") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/pfuture"))]) (ace-window . [(20181008 1549) ((avy (0 2 0))) "Quickly switch windows." single ((:commit . "5b88de026cea5fc57e62bb490034392815be5f0f") (:keywords "window" "location") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/ace-window"))]) (treemacs-projectile . [(20181029 624) ((projectile (0 14 0)) (treemacs (0))) "Projectile integration for treemacs" single ((:commit . "cb8b01dcd6fd19ea59e9277ea24c9786c83a5cd0") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/treemacs"))]) (pos-tip . [(20150318 1513) nil "Show tooltip at point" single ((:commit . "051e08fec5cf30b7574bdf439f79fef7d42d689d") (:keywords "tooltip") (:authors ("S. Irie")) (:maintainer "S. Irie"))]) (flycheck . [(20181018 1021) ((dash (2 12 1)) (pkg-info (0 4)) (let-alist (1 0 4)) (seq (1 11)) (emacs (24 3))) "On-the-fly syntax checking" tar ((:commit . "1702d2db3d8ba9bcb9b2bf810e791e907fcc3adc") (:keywords "convenience" "languages" "tools") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com") (:url . "http://www.flycheck.org"))]) (flycheck-pos-tip . [(20180610 1615) ((emacs (24 1)) (flycheck (0 22)) (pos-tip (0 4 6))) "Display Flycheck errors in GUI tooltips" single ((:commit . "909113977d37739387c7f099d74a724cfe6efcec") (:keywords "tools" "convenience") (:authors ("Akiha Senda" . "senda.akiha@gmail.com") ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com") (:url . "https://github.com/flycheck/flycheck-pos-tip"))]) (auto-dictionary . [(20150410 1610) nil "automatic dictionary switcher for flyspell" single ((:commit . "b364e08009fe0062cf0927d8a0582fad5a12b8e7") (:keywords "wp") (:authors ("Nikolaj Schumacher ")) (:maintainer "Nikolaj Schumacher ") (:url . "http://nschum.de/src/emacs/auto-dictionary/"))]) (flyspell-correct-ivy . [(20180929 1331) ((flyspell-correct (0 5 0)) (ivy (0 8 0))) "correcting words with flyspell via ivy interface" single ((:commit . "204f145678df5e34a48ea3beae888a1bd6809974") (:authors ("Boris Buliga" . "boris@d12frosted.io")) (:maintainer "Boris Buliga" . "boris@d12frosted.io") (:url . "https://github.com/d12frosted/flyspell-correct"))]) (flyspell-correct-helm . [(20180928 504) ((flyspell-correct (0 5 0)) (helm (1 9 0))) "correcting words with flyspell via helm interface" single ((:commit . "204f145678df5e34a48ea3beae888a1bd6809974") (:authors ("Boris Buliga" . "boris@d12frosted.io")) (:maintainer "Boris Buliga" . "boris@d12frosted.io") (:url . "https://github.com/d12frosted/flyspell-correct"))]) (flyspell-correct . [(20181106 801) nil "correcting words with flyspell via custom interface" tar ((:commit . "204f145678df5e34a48ea3beae888a1bd6809974") (:authors ("Boris Buliga" . "boris@d12frosted.io")) (:maintainer "Boris Buliga" . "boris@d12frosted.io") (:url . "https://github.com/d12frosted/flyspell-correct"))]) (flyspell-correct-popup . [(20180928 504) ((flyspell-correct (0 5 0)) (popup (0 5 3))) "correcting words with flyspell via popup interface" single ((:commit . "204f145678df5e34a48ea3beae888a1bd6809974") (:authors ("Boris Buliga" . "boris@d12frosted.io")) (:maintainer "Boris Buliga" . "boris@d12frosted.io") (:url . "https://github.com/d12frosted/flyspell-correct"))]) (flyspell-popup . [(20170529 815) ((popup (0 5 0))) "Correcting words with Flyspell in popup menus" single ((:commit . "29311849bfd253b9b689bf331860b4c4d3bd4dde") (:keywords "convenience") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/flyspell-popup"))]) (highlight . [(20181002 1151) nil "Highlighting commands." single ((:commit . "ea733e17884aeae19172407e20559fc693fdd3a7") (:keywords "faces" "help" "local") (:authors ("Drew Adams")) (:maintainer nil . "Drew Adams (concat \"drew.adams\" \"@\" \"oracle\" \".com\")") (:url . "https://www.emacswiki.org/emacs/download/highlight.el"))]) (floobits . [(20180801 524) ((json (1 2)) (highlight (0))) "Floobits plugin for real-time collaborative editing" tar ((:commit . "489b294a7f30ecd2af2edc0823dead8102f27af6") (:keywords "comm" "tools") (:authors ("Matt Kaniaris") ("Geoff Greer")) (:maintainer "Matt Kaniaris") (:url . "http://github.com/Floobits/floobits-emacs"))]) (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"))]) (unfill . [(20170723 146) nil "Unfill paragraphs or regions, and toggle between filled & unfilled" single ((:commit . "df0c4dee19a3874b11c7c7f04e8a2fba629fda9b") (:keywords "utilities") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/unfill"))]) (evil-org . [(20180323 2306) ((emacs (24 4)) (evil (1 0))) "evil keybindings for org-mode" tar ((:commit . "b6d652a9163d3430a9e0933a554bdbee5244bbf6") (:keywords "evil" "vim-emulation" "org-mode" "key-bindings" "presets") (:maintainer "Somelauw") (:url . "https://github.com/Somelauw/evil-org-mode.git"))]) (gnuplot . [(20141231 2137) nil "drive gnuplot from within emacs" tar ((:commit . "21f9046e3f5caad41b750b5c9cee02fa4fd20fb9") (:keywords "gnuplot" "plotting") (:authors ("Bruce Ravel" . "bruceravel1@gmail.com")) (:maintainer "Bruce Ravel" . "bruceravel1@gmail.com"))]) (helm-org-rifle . [(20180923 2209) ((emacs (24 4)) (dash (2 12)) (f (0 18 1)) (helm (1 9 4)) (s (1 10 0))) "Rifle through your Org files" single ((:commit . "e272fc43b964ef06a2673afd7c341dba87ae9ac4") (:keywords "hypermedia" "outlines") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "http://github.com/alphapapa/helm-org-rifle"))]) (htmlize . [(20180923 1829) nil "Convert buffer text and decorations to HTML." single ((:commit . "8db0aa6aab77475a732b7363f0d57bd3933c18fd") (:keywords "hypermedia" "extensions") (:authors ("Hrvoje Niksic" . "hniksic@gmail.com")) (:maintainer "Hrvoje Niksic" . "hniksic@gmail.com"))]) (org-brain . [(20181114 2246) ((emacs (25)) (org (9))) "Org-mode concept mapping" single ((:commit . "d2bd1461e69189a39bbe40ae0d0be080b13d0ba0") (: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-journal . [(20181115 714) ((emacs (25 1))) "a simple org-mode based journaling mode" single ((:commit . "3ae2e7d7e372dee08143282a9137bf4dfc946645") (:authors ("Bastian Bechtold")) (:maintainer "Bastian Bechtold") (:url . "http://github.com/bastibe/org-journal"))]) (org-download . [(20180925 1528) ((async (1 2))) "Image drag-and-drop for Emacs org-mode" single ((:commit . "07b98eb4f7252e3f64a306c09dfb618be6ac181d") (:keywords "images" "screenshots" "download") (:authors ("Oleh Krehel")) (:maintainer "Oleh Krehel") (:url . "https://github.com/abo-abo/org-download"))]) (org-mime . [(20181023 2314) ((emacs (24 4)) (cl-lib (0 5))) "org html export for text/html MIME emails" single ((:commit . "1e792ef0616069b3ec74a4b7d96fced8c9c6eb8a") (:keywords "mime" "mail" "email" "html") (:authors ("Eric Schulte")) (:maintainer "Chen Bin (redguardtoo)") (:url . "http://github.com/org-mime/org-mime"))]) (alert . [(20181022 1742) ((gntp (0 1)) (log4e (0 3 0)) (cl-lib (0 5))) "Growl-style notification system for Emacs" single ((:commit . "9f329be87820474925f29b52a1131084c8ea95b9") (:keywords "notification" "emacs" "message") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainer "John Wiegley" . "jwiegley@gmail.com") (:url . "https://github.com/jwiegley/alert"))]) (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"))]) (gntp . [(20141025 250) nil "Growl Notification Protocol for Emacs" single ((:commit . "767571135e2c0985944017dc59b0be79af222ef5") (:authors ("Engelke Eschner" . "tekai@gmx.li")) (:maintainer "Engelke Eschner" . "tekai@gmx.li"))]) (org-pomodoro . [(20171108 2114) ((alert (0 5 10)) (cl-lib (0 5))) "Pomodoro implementation for org-mode." tar ((:commit . "3deed1c26dcbda4d5231b9085ddf68e302b0f9dc") (:authors ("Arthur Leonard Andersen" . "leoc.git@gmail.com")) (:maintainer "Arthur Leonard Andersen" . "leoc.git@gmail.com") (:url . "https://github.com/lolownia/org-pomodoro"))]) (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-category-capture . [(20180601 242) ((org (9 0 0)) (emacs (24))) "Contextualy capture of org-mode TODOs." single ((:commit . "c798b1dff1d94304fa3621a905cbb572c7cb1d33") (: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-projectile . [(20180601 242) ((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 . "c798b1dff1d94304fa3621a905cbb572c7cb1d33") (: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"))]) (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-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-reveal . [(20161027 926) ((org (20150330))) "reveal.js Presentation Back-End for Org Export Engine" single ((:commit . "001567cc12d50ba07612edd1718b86a12e8c2547") (:keywords "outlines" "hypermedia" "slideshow" "presentation") (:authors ("Yujie Wen ")) (:maintainer "Yujie Wen "))]) (ox-hugo . [(20181106 2350) ((emacs (24 4)) (org (9 0))) "Hugo Markdown Back-End for Org Export Engine" tar ((:commit . "7fb284ec4b7f47ff1286598220650c5b24b56b45") (:keywords "org" "markdown" "docs") (:url . "https://ox-hugo.scripter.co"))]) (request-deferred . [(20160419 2305) ((deferred (0 3 1)) (request (0 2 0))) "Wrap request.el by deferred" single ((:commit . "a3d080e57eb8be606fbf39d1baff94e1b16e1fb8") (:authors ("Takafumi Arakaki ")) (:maintainer "Takafumi Arakaki "))]) (deferred . [(20170901 1330) ((emacs (24 4))) "Simple asynchronous functions for emacs lisp" single ((:commit . "2239671d94b38d92e9b28d4e12fd79814cfb9c16") (:keywords "deferred" "async") (:authors ("SAKURAI Masashi ")) (:maintainer "SAKURAI Masashi ") (:url . "https://github.com/kiwanami/emacs-deferred"))]) (org-trello . [(20180331 631) ((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 . "e2e8a3d45057645e4caae7d46a79d2d9be2894bd"))]) (projectile . [(20181106 1631) ((emacs (25 1)) (pkg-info (0 4))) "Manage and navigate projects in Emacs easily" single ((:commit . "9482d69e5ca6549ec7baea58f86c1445b544563b") (:keywords "project" "convenience") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.com")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.com") (:url . "https://github.com/bbatsov/projectile"))]) (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"))]) (epl . [(20180205 2049) ((cl-lib (0 3))) "Emacs Package Library" single ((:commit . "78ab7a85c08222cd15582a298a364774e3282ce6") (:keywords "convenience") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:url . "http://github.com/cask/epl"))]) (ibuffer-projectile . [(20180325 325) ((projectile (0 11 0))) "Group ibuffer's list by projectile root" single ((:commit . "1e89bfa7cae0629d29f24af3d81774b88b3cede0") (:keywords "themes") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "http://github.com/purcell/ibuffer-projectile"))]) (tablist . [(20170220 335) ((emacs (24 3))) "Extended tabulated-list-mode" tar ((:commit . "c834a84efb6efa32497efe1e73160fade741b836") (:keywords "extensions" "lisp") (:authors ("Andreas Politz" . "politza@fh-trier.de")) (:maintainer "Andreas Politz" . "politza@fh-trier.de"))]) (pdf-tools . [(20181117 1939) ((emacs (24 3)) (tablist (0 70)) (let-alist (1 0 4))) "Support library for PDF documents." tar ((:commit . "105dd014fea424c5556f8e0a3e3d652722c46084") (:keywords "files" "multimedia") (:authors ("Andreas Politz" . "politza@fh-trier.de")) (:maintainer "Andreas Politz" . "politza@fh-trier.de"))]) (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"))]) (ace-jump-mode . [(20140616 815) nil "a quick cursor location minor mode for emacs" single ((:commit . "8351e2df4fbbeb2a4003f2fb39f46d33803f3dac") (:keywords "motion" "location" "cursor") (:authors ("winterTTr" . "winterTTr@gmail.com")) (:maintainer "winterTTr" . "winterTTr@gmail.com") (:url . "https://github.com/winterTTr/ace-jump-mode/"))]) (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"))]) (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"))]) (elfeed-goodies . [(20171127 651) ((popwin (1 0 0)) (powerline (2 2)) (elfeed (2 0 0)) (cl-lib (0 5)) (noflet (0 0 10)) (ace-jump-mode (2 0))) "Elfeed goodies" tar ((:commit . "fc0c3e72f9fcd7bbf5237f6f2323bc666e8240b4") (:authors ("Gergely Nagy")) (:maintainer "Gergely Nagy") (:url . "https://github.com/algernon/elfeed-goodies"))]) (org . [(20181112) nil "Outline-based notes management and organizer" tar nil]) (elfeed-org . [(20181015 1100) ((elfeed (1 1 1)) (org (8 2 7)) (dash (2 10 0)) (s (1 9 0)) (cl-lib (0 5))) "Configure elfeed with one or more org-mode files" single ((:commit . "607b8bf4923a995260a072559b77bee188614a06") (:keywords "news") (:authors ("Remy Honig" . "remyhonig@gmail.com")) (:maintainer "Remy Honig" . "remyhonig@gmail.com") (:url . "https://github.com/remyhonig/elfeed-org"))]) (elfeed . [(20180916 1338) ((emacs (24 3))) "an Emacs Atom/RSS feed reader" tar ((:commit . "afafa1f7d9e29de55ce5b1709074738a7e185f2a"))]) (simple-httpd . [(20180528 1603) ((cl-lib (0 3))) "pure elisp HTTP server" single ((:commit . "49721d5b791bee0fc25b1fdd69696371d546093a") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/emacs-http-server"))]) (elfeed-web . [(20180829 1716) ((simple-httpd (1 4 3)) (elfeed (1 4 0)) (emacs (24 1))) "web interface to Elfeed" tar ((:commit . "afafa1f7d9e29de55ce5b1709074738a7e185f2a"))]) (dash-at-point . [(20180710 1356) nil "Search the word at point with Dash" single ((:commit . "4d795a23a8428c421d5107f1b005c9d8e0d1816c") (:authors ("Shinji Tanaka" . "shinji.tanaka@gmail.com")) (:maintainer "Shinji Tanaka" . "shinji.tanaka@gmail.com") (:url . "https://github.com/stanaka/dash-at-point"))]) (counsel . [(20181111 1805) ((emacs (24 3)) (swiper (0 9 0))) "Various completion functions using Ivy" single ((:commit . "d76968a85f9dc5dcebdc25eb8e3af2cd2775319e") (:keywords "convenience" "matching" "tools") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/swiper"))]) (helm-dash . [(20180503 918) ((helm (1 9 2)) (cl-lib (0 5))) "Offline documentation browser for +150 APIs using Dash docsets." single ((:commit . "0ac2db529577fa63f2ed32310062873c585b91de") (:keywords "docs") (:authors ("Raimon Grau" . "raimonster@gmail.com") ("Toni Reina " . "areina0@gmail.com")) (:maintainer "Raimon Grau" . "raimonster@gmail.com") (:url . "http://github.com/areina/helm-dash"))]) (dash-functional . [(20180107 1618) ((dash (2 0 0)) (emacs (24))) "Collection of useful combinators for Emacs Lisp" single ((:commit . "6514359b8606a6a9a94068ccd601fcd6379d6584") (:keywords "lisp" "functions" "combinators"))]) (swiper . [(20181008 1731) ((emacs (24 1)) (ivy (0 9 0))) "Isearch with an overview. Oh, man!" single ((:commit . "d76968a85f9dc5dcebdc25eb8e3af2cd2775319e") (:keywords "matching") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/swiper"))]) (counsel-dash . [(20160729 1529) ((emacs (24 4)) (dash (2 12 1)) (dash-functional (1 2 0)) (helm-dash (1 3 0)) (counsel (0 8 0))) "Browse dash docsets using Ivy" single ((:commit . "07fa74a94ff4da5b6c8c4810f5e143e701b480d2") (:keywords "dash" "ivy" "counsel") (:authors ("Nathan Kot" . "nk@nathankot.com")) (:maintainer "Nathan Kot" . "nk@nathankot.com") (:url . "https://github.com/nathankot/counsel-dash"))]) (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"))]) (esxml . [(20171129 807) nil "Library for working with xml via esxml and sxml" tar ((:commit . "5548ceba17deae0c3c6d0092672edc4de3c75ce3"))]) (nov . [(20181118 750) ((dash (2 12 0)) (esxml (0 3 3)) (emacs (24 4))) "Featureful EPUB reader mode" single ((:commit . "3bb7a4038f0c2100df671c9f1f33b785ed4ae296") (:keywords "hypermedia" "multimedia" "epub") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") (:url . "https://github.com/wasamasa/nov.el"))]) (deft . [(20181029 213) nil "quickly browse, filter, and edit plain text notes" single ((:commit . "47d268355b0d988804e19896770b29da7f01c7aa") (:keywords "plain text" "notes" "simplenote" "notational velocity") (:authors ("Jason R. Blevins" . "jrblevin@xbeta.org")) (:maintainer "Jason R. Blevins" . "jrblevin@xbeta.org") (:url . "https://jblevins.org/projects/deft/"))]) (aggressive-indent . [(20181018 236) ((emacs (24 1)) (cl-lib (0 5))) "Minor mode to aggressively keep your code always indented" single ((:commit . "cc8da01e32684e1b75d2901400e6723b2c2d42f8") (: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"))]) (bracketed-paste . [(20160407 2348) ((emacs (24 3))) "bracketed paste mode support within emacs -nw" single ((:commit . "843ce3bbb63d560face889e13a57a2f7543957d5") (:keywords "terminals") (:authors ("Takeshi Banse" . "takebi@laafc.net")) (:maintainer "Takeshi Banse" . "takebi@laafc.net"))]) (clean-aindent-mode . [(20171017 2043) nil "Simple indent and unindent, trims indent white-space" single ((:commit . "a97bcae8f43a9ff64e95473e4ef0d8bafe829211") (:keywords "indentation" "whitespace" "backspace") (:authors ("peter marinov" . "efravia@gmail.com")) (:maintainer "peter marinov" . "efravia@gmail.com") (:url . "https://github.com/pmarinov/clean-aindent-mode"))]) (editorconfig . [(20181115 709) ((cl-lib (0 5))) "EditorConfig Emacs Plugin" tar ((:commit . "d6e48c863ed246be8894c6ee3c3c088ab4db4711") (:authors ("EditorConfig Team" . "editorconfig@googlegroups.com")) (:maintainer "EditorConfig Team" . "editorconfig@googlegroups.com") (:url . "https://github.com/editorconfig/editorconfig-emacs#readme"))]) (expand-region . [(20180817 1134) nil "Increase selected region by semantic units." tar ((:commit . "ed3292473035dc8f3d2f321e82974ef87327808f"))]) (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"))]) (link-hint . [(20180519 2130) ((avy (0 4 0)) (emacs (24 1)) (cl-lib (0 5))) "Use avy to open, copy, etc. visible links." single ((:commit . "23df5fa36ab182452be6b772475eab67b846dd92") (:keywords "convenience" "url" "avy" "link" "links" "hyperlink") (:authors ("Fox Kiester" . "noct@openmailbox.org")) (:maintainer "Fox Kiester" . "noct@openmailbox.org") (:url . "https://github.com/noctuid/link-hint.el"))]) (lorem-ipsum . [(20140911 2108) nil "Insert dummy pseudo Latin text." single ((:commit . "4b39f6fed455d67f635b3837cf5668bf74d0f6cd") (:keywords "tools" "language" "convenience") (:authors ("Jean-Philippe Theberge" . "jphil21@sourceforge.net")) (:maintainer "Joe Schafer" . "joe@jschaf.com"))]) (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"))]) (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"))]) (password-generator . [(20150222 2040) nil "Password generator for humans. Good, Bad, Phonetic passwords included." single ((:commit . "c8193d5e963bda0a2f8e51fd4a94dcf37c76f282") (:authors ("Zargener" . "zargener@gmail.com")) (:maintainer "Zargener" . "zargener@gmail.com") (:url . "http://github.com/zargener/emacs-password-genarator"))]) (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"))]) (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"))]) (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"))]) (flx . [(20151030 1812) ((cl-lib (0 3))) "fuzzy matching with good sorting" single ((:commit . "46040d0b096a0340d91235561f27a959a61d0fef") (:authors ("Le Wang")) (:maintainer "Le Wang") (:url . "https://github.com/lewang/flx"))]) (flx-ido . [(20180117 1519) ((flx (0 1)) (cl-lib (0 3))) "flx integration for ido" single ((:commit . "46040d0b096a0340d91235561f27a959a61d0fef") (:authors ("Le Wang")) (:maintainer "Le Wang") (:url . "https://github.com/lewang/flx"))]) (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"))]) (avy . [(20181009 1648) ((emacs (24 1)) (cl-lib (0 5))) "Jump to arbitrary positions in visible text and select text quickly." single ((:commit . "df4c4ac488ee59bc44f8658d9fcca0c86fb32c5c") (:keywords "point" "location") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/avy"))]) (ace-link . [(20181103 2106) ((avy (0 4 0))) "Quickly follow links" single ((:commit . "dfd0fdf649703790a9a5ee027f2f86d6f1269d55") (:keywords "convenience" "links" "avy") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/ace-link"))]) (centered-cursor-mode . [(20180112 1555) nil "cursor stays vertically centered" single ((:commit . "00fb47d227f9e211ec1c58161a501a1550c3a60d") (:keywords "convenience") (:authors ("André Riemann" . "andre.riemann@web.de")) (:maintainer "André Riemann" . "andre.riemann@web.de") (:url . "https://github.com/andre-r/centered-cursor-mode.el"))]) (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"))]) (hydra . [(20181110 1740) ((cl-lib (0 5))) "Make bindings that stick around." tar ((:commit . "5c5b9ca3262594c92f8f73c98db5ed0f1efd0319") (:keywords "bindings") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/hydra"))]) (spinner . [(1 7 3) nil "Add spinners and progress-bars to the mode-line for ongoing operations" single ((:url . "https://github.com/Malabarba/spinner.el") (:keywords "processes" "mode-line"))]) (seq . [(2 20) nil "Sequence manipulation functions" tar ((:keywords "sequences") (:url . "http://elpa.gnu.org/packages/seq.html"))]) (paradox . [(20181027 2234) ((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 . "798bdabdca6575d677631b1c482e975c9372d536") (:keywords "package" "packages") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") (:url . "https://github.com/Malabarba/paradox"))]) (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"))]) (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/"))]) (helm . [(20181117 731) ((emacs (24 4)) (async (1 9 3)) (popup (0 5 3)) (helm-core (3 0))) "Helm is an Emacs incremental and narrowing framework" tar ((:commit . "84a59b1e47528221dcb746058f95a6faffe4a5ae") (:url . "https://emacs-helm.github.io/helm/"))]) (helm-core . [(20181117 1055) ((emacs (24 4)) (async (1 9 3))) "Development files for Helm" tar ((:commit . "84a59b1e47528221dcb746058f95a6faffe4a5ae") (:url . "https://emacs-helm.github.io/helm/"))]) (async . [(20180527 1730) nil "Asynchronous processing in Emacs" tar ((:commit . "d17c11e6082aa51f421bb037b828bdb15f405618") (:keywords "async") (:url . "https://github.com/jwiegley/emacs-async"))]) (helm-purpose . [(20170114 1636) ((emacs (24)) (helm (1 9 2)) (window-purpose (1 4))) "Helm Interface for Purpose" single ((:commit . "9ff4c21c1e9ebc7afb851b738f815df7343bb287") (:authors ("Bar Magal (2016)")) (:maintainer "Bar Magal (2016)") (:url . "https://github.com/bmag/helm-purpose"))]) (ivy . [(20181111 1757) ((emacs (24 1))) "Incremental Vertical completYon" tar ((:commit . "d76968a85f9dc5dcebdc25eb8e3af2cd2775319e") (:keywords "matching") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/swiper"))]) (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"))]) (imenu-list . [(20180601 1402) ((cl-lib (0 5))) "Show imenu entries in a separate buffer" single ((:commit . "04f0632f7b8c81be8747617768c57b66e5d60994") (:authors ("Bar Magal (2015)")) (:maintainer "Bar Magal (2015)") (:url . "https://github.com/bmag/imenu-list"))]) (let-alist . [(1 0 5) ((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"))]) (window-purpose . [(20180926 1047) ((emacs (24 4)) (let-alist (1 0 3)) (imenu-list (0 1))) "Purpose-based window management for Emacs" tar ((:commit . "2b640955235d0a50dd1e3128612f41d595bc6dc8") (:keywords "frames") (:authors ("Bar Magal")) (:maintainer "Bar Magal") (:url . "https://github.com/bmag/emacs-purpose"))]) (define-word . [(20180706 2029) ((emacs (24 3))) "display the definition of word at point." single ((:commit . "637cd29837d4bd5567e17a11a479fd2edfb0e2c1") (:keywords "dictionary" "convenience") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/define-word"))]) (google-translate . [(20180926 1925) nil "Emacs interface to Google Translate." tar ((:commit . "eb1c4f51d522d2252dadfb4cd7ea045ccd344b98"))]) (org-plus-contrib . [(20181112) nil "Outline-based notes management and organizer" tar nil]) (org-bullets . [(20180208 2343) nil "Show bullets in org-mode as UTF-8 characters" single ((:commit . "b56f2e3812626f2c4ac1686073d102c71f4a8513") (:authors ("sabof")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/emacsorphanage/org-bullets"))]) (toc-org . [(20181108 1621) nil "add table of contents to org-mode files (formerly, org-toc)" single ((:commit . "4315afd2a408c0d432ba3d8d040c2326c222fdbf") (:keywords "org-mode" "org-toc" "toc-org" "org" "toc" "table" "of" "contents") (:authors ("Sergei Nosov ")) (:maintainer "Sergei Nosov ") (:url . "https://github.com/snosov1/toc-org"))]) (column-enforce-mode . [(20171030 1900) nil "Highlight text that extends beyond a column" single ((:commit . "2341a2b6a33d4b8b74c35062ec9cfe1bffd61944") (:authors ("Jordon Biondo")) (:maintainer "Jordon Biondo") (:url . "www.github.com/jordonbiondo/column-enforce-mode"))]) (highlight-indentation . [(20171218 937) nil "Minor modes for highlighting indentation" single ((:commit . "35e2c1d4f8f368685893128f77f90454cb9c2708") (:authors ("Anton Johansson" . "anton.johansson@gmail.com")) (:maintainer "Anton Johansson" . "anton.johansson@gmail.com") (:url . "https://github.com/antonj/Highlight-Indentation-for-Emacs"))]) (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"))]) (highlight-numbers . [(20181013 1744) ((emacs (24)) (parent-mode (2 0))) "Highlight numbers in source code" single ((:commit . "8b4744c7f46c72b1d3d599d4fb75ef8183dee307") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:url . "https://github.com/Fanael/highlight-numbers"))]) (highlight-parentheses . [(20180704 1102) nil "highlight surrounding parentheses" single ((:commit . "f0bd58c8dadd2db703b7bfd09e911b5fda05b3df") (:keywords "faces" "matching") (:authors ("Nikolaj Schumacher ")) (:maintainer "Tassilo Horn" . "tsdh@gnu.org") (:url . "https://github.com/tsdh/highlight-parentheses.el"))]) (hl-anything . [(20160422 1708) ((emacs (24 3))) "Highlight symbols, selections, enclosing parens and more." tar ((:commit . "8696bc55a8cba408f0fc83a907a9ec529d79e558") (:authors ("boyw165")) (:maintainer "boyw165"))]) (indent-guide . [(20170221 1127) nil "show vertical lines to guide indentation" single ((:commit . "d64f43011c72068e008621e620009ec592b35913") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) (rainbow-delimiters . [(20170929 1132) nil "Highlight brackets according to their depth" single ((:commit . "19b93892afa0494ba749c2ca9c154e04447ad778") (: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"))]) (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"))]) (hl-todo . [(20181031 1909) nil "highlight TODO and similar keywords" single ((:commit . "24b9925b1b2c7ad6bf7b66800395f74abf035c5f") (:keywords "convenience") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/tarsius/hl-todo"))]) (page-break-lines . [(20171210 831) ((emacs (24 4))) "Display ^L page breaks as tidy horizontal lines" single ((:commit . "fd3b7e38ad8747cd009ead7ef1bb150849ccc693") (:keywords "convenience" "faces") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/page-break-lines"))]) (evil-anzu . [(20170124 718) ((evil (1 0 0)) (anzu (0 46))) "anzu for evil-mode" single ((:commit . "9bca6ca14d865e7e005bc02a28a09b4ae74facc9") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com") ("Fredrik Bergroth" . "fbergroth@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-evil-anzu"))]) (evil-args . [(20180908 2157) ((evil (1 0 8))) "Motions and text objects for delimited arguments in Evil." single ((:commit . "758ad5ae54ad34202064fec192c88151c08cb387") (:keywords "evil" "vim-emulation") (:authors ("Connor Smith" . "wconnorsmith@gmail.com")) (:maintainer "Connor Smith" . "wconnorsmith@gmail.com") (:url . "http://github.com/wcsmith/evil-args"))]) (evil-ediff . [(20170724 1923) ((evil (1 2 3))) "Make ediff a little evil" single ((:commit . "50d26cb0654fca8f8fd7227410e5cbf0b8f681cf") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainer "Justin Burkett" . "justin@burkett.cc") (:url . "https://github.com/justbur/evil-ediff"))]) (evil-exchange . [(20170511 259) ((evil (1 2 8)) (cl-lib (0 3))) "Exchange text more easily within Evil" single ((:commit . "47691537815150715e64e6f6ec79be7746c96120") (:keywords "evil" "plugin") (:authors ("Dewdrops" . "v_v_4474@126.com")) (:maintainer "Dewdrops" . "v_v_4474@126.com") (:url . "http://github.com/Dewdrops/evil-exchange"))]) (evil-goggles . [(20180725 952) ((emacs (24 4)) (evil (1 0 0))) "Add a visual hint to evil operations" single ((:commit . "d7876e6566ac82b7c3251a59651e7db6ab756589") (:keywords "emulations" "evil" "vim" "visual") (:authors ("edkolev" . "evgenysw@gmail.com")) (:maintainer "edkolev" . "evgenysw@gmail.com") (:url . "http://github.com/edkolev/evil-goggles"))]) (iedit . [(20181114 950) nil "Edit multiple regions in the same way simultaneously." tar ((:commit . "35505ad860be27feaee71e8caf646706bf8ee31d") (:keywords "occurrence" "region" "simultaneous" "refactoring") (:authors ("Victor Ren" . "victorhge@gmail.com")) (:maintainer "Victor Ren" . "victorhge@gmail.com") (:url . "https://www.emacswiki.org/emacs/Iedit"))]) (evil-iedit-state . [(20180607 558) ((evil (1 0 9)) (iedit (0 97))) "Evil states to interface iedit mode." single ((:commit . "f75cff4ecbd5beaa9ca64a6c157c4105f078daec") (:keywords "convenience" "editing" "evil" "iedit" "mnemonic") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com") (:url . "https://github.com/syl20bnr/evil-iedit-state"))]) (evil-indent-plus . [(20151109 1906) ((evil (0)) (cl-lib (0 5))) "Evil textobjects based on indentation" single ((:commit . "0c7501e6efed661242c3a20e0a6c79a6455c2c40") (:keywords "convenience" "evil") (:authors ("Eivind Fonn" . "evfonn@gmail.com")) (:maintainer "Eivind Fonn" . "evfonn@gmail.com") (:url . "http://github.com/TheBB/evil-indent-plus"))]) (evil-lion . [(20170811 614) ((emacs (24 3)) (evil (1 0 0))) "Evil align operator, port of vim-lion" single ((:commit . "aaa3874ad54c31b4322ac5bbc63e331498b11d61") (:keywords "emulations" "evil" "vim") (:authors ("edkolev" . "evgenysw@gmail.com")) (:maintainer "edkolev" . "evgenysw@gmail.com") (:url . "http://github.com/edkolev/evil-lion"))]) (smartparens . [(20181028 1005) ((dash (2 13 0)) (cl-lib (0 3))) "Automatic insertion, wrapping and paredit-like navigation with user defined pairs." tar ((:commit . "d65f3c0f47413c1a67ced979dc2062a073d907af"))]) (bind-map . [(20161207 1511) ((emacs (24 3))) "Bind personal keymaps in multiple locations" single ((:commit . "bf4181e3a41463684adfffc6c5c305b30480e30f") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainer "Justin Burkett" . "justin@burkett.cc") (:url . "https://github.com/justbur/emacs-bind-map"))]) (evil-lisp-state . [(20160404 248) ((evil (1 0 9)) (bind-map (0)) (smartparens (1 6 1))) "An evil state to edit Lisp code" single ((:commit . "3c65fecd9917a41eaf6460f22187e2323821f3ce") (:keywords "convenience" "editing" "evil" "smartparens" "lisp" "mnemonic") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com") (:url . "https://github.com/syl20bnr/evil-lisp-state"))]) (evil-nerd-commenter . [(20180722 2325) ((emacs (24 4))) "Comment/uncomment lines efficiently. Like Nerd Commenter in Vim" tar ((:commit . "275c95c89cc09c7096bd6fd0deabd49f29634f5d") (:keywords "commenter" "vim" "line" "evil") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") (:url . "http://github.com/redguardtoo/evil-nerd-commenter"))]) (evil-numbers . [(20140606 1251) nil "increment/decrement numbers like in vim" single ((:commit . "6ea1c8c3a9b37bed63d48f1128e9a4910e68187e") (:keywords "numbers" "increment" "decrement" "octal" "hex" "binary") (:authors ("Michael Markert" . "markert.michael@googlemail.com")) (:maintainer "Michael Markert" . "markert.michael@googlemail.com") (:url . "http://github.com/cofi/evil-numbers"))]) (evil-tutor . [(20150103 650) ((evil (1 0 9))) "Vimtutor adapted to Evil and wrapped in a major-mode" tar ((:commit . "4e124cd3911dc0d1b6817ad2c9e59b4753638f28") (:keywords "convenience" "editing" "evil") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com") (:url . "https://github.com/syl20bnr/evil-tutor"))]) (evil-visual-mark-mode . [(20150202 1800) ((evil (1 0 9)) (dash (2 10))) "Display evil marks on buffer" single ((:commit . "094ee37599492885ff3144918fcdd9b74dadaaa0") (:keywords "evil") (:authors ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainer "Roman Gonzalez" . "romanandreg@gmail.com"))]) (evil-visualstar . [(20160223 48) ((evil (0))) "Starts a * or # search from the visual selection" single ((:commit . "06c053d8f7381f91c53311b1234872ca96ced752") (:keywords "evil" "vim" "visualstar") (:authors ("Bailey Ling")) (:maintainer "Bailey Ling") (:url . "https://github.com/bling/evil-visualstar"))]) (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"))]) (anzu . [(20161017 1607) ((emacs (24 3))) "Show number of matches in mode-line while searching" single ((:commit . "e6c56ca8b23ac433f7be58b6f3f50801dd4164e4") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-anzu"))]) (eldoc-eval . [(20180607 1157) nil "Enable eldoc support when minibuffer is in use." single ((:commit . "f59a1ae7ecfa97ef659c7adb93e0673419acc485") (:authors ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com"))]) (shrink-path . [(20170813 247) ((emacs (24)) (s (1 6 1)) (dash (1 8 0)) (f (0 10 0))) "fish-style path" single ((:commit . "9d06c453d1537df46a4b703a29213cc7f7857aa0") (:authors ("Benjamin Andresen")) (:maintainer "Benjamin Andresen") (:url . "https://gitlab.com/bennya/shrink-path.el"))]) (doom-modeline . [(20181117 2008) ((emacs (25 1)) (all-the-icons (1 0 0)) (shrink-path (0 2 0)) (eldoc-eval (0 1)) (dash (2 11 0))) "A minimal and modern modeline" single ((:commit . "700a0107f28a5f321485fa1e2f03a067be122594") (:keywords "faces" "mode-line") (:authors ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainer "Vincent Zhang" . "seagle0128@gmail.com") (:url . "https://github.com/seagle0128/doom-modeline"))]) (fancy-battery . [(20150101 1204) ((emacs (24 1))) "Fancy battery display" single ((:commit . "9b88ae77a01aa3edc529840338bcb2db7f445822") (:keywords "convenience" "tools" "hardware") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com") (:url . "https://github.com/lunaryorn/fancy-battery.el"))]) (spaceline . [(20180628 746) ((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 . "29ced71ed0097cd5eba15d6bfdbafd9d18f5bd82") (:keywords "mode-line" "powerline" "spacemacs") (:authors ("Eivind Fonn" . "evfonn@gmail.com")) (:maintainer "Eivind Fonn" . "evfonn@gmail.com") (:url . "https://github.com/TheBB/spaceline"))]) (all-the-icons . [(20180125 1557) ((emacs (24 3)) (memoize (1 0 1))) "A library for inserting Developer icons" tar ((:commit . "52d1f2d36468146c93aaf11399f581401a233306") (:keywords "convenient" "lisp") (:authors ("Dominic Charlesworth" . "dgc336@gmail.com")) (:maintainer "Dominic Charlesworth" . "dgc336@gmail.com") (:url . "https://github.com/domtronn/all-the-icons.el"))]) (memoize . [(20180614 1930) nil "Memoization functions" single ((:commit . "9a561268ffb550b257a08710489a95cd087998b6") (:authors ("Christopher Wellons" . "mosquitopsu@gmail.com")) (:maintainer "Christopher Wellons" . "mosquitopsu@gmail.com") (:url . "https://github.com/skeeto/emacs-memoize"))]) (powerline . [(20180322 248) ((cl-lib (0 2))) "Rewrite of Powerline" tar ((:commit . "af5ef31a33c3589a9be0b2a55a2741582e605efd") (:keywords "mode-line") (:authors ("Donald Ephraim Curtis" . "dcurtis@milkbox.net")) (:maintainer "Donald Ephraim Curtis" . "dcurtis@milkbox.net") (:url . "http://github.com/milkypostman/powerline/"))]) (spaceline-all-the-icons . [(20170829 820) ((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 . "e2e195f64a541d72b6d0ba0451f1e3072234b820") (: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"))]) (symon . [(20170224 833) nil "tiny graphical system monitor" single ((:commit . "8dd8b6df49b03cd7d31b85aedbe9dd08fb922335") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) (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"))]) (f . [(20180106 922) ((s (1 7 0)) (dash (2 2 0))) "Modern API for working with files and directories" single ((:commit . "de6d4d40ddc844eee643e92d47b9d6a63fbebb48") (:keywords "files" "directories") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:url . "http://github.com/rejeep/f.el"))]) (dash . [(20180910 1856) nil "A modern list library for Emacs" single ((:commit . "6514359b8606a6a9a94068ccd601fcd6379d6584") (:keywords "lists") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) (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"))]) (dumb-jump . [(20181022 2224) ((emacs (24 3)) (f (0 20 0)) (s (1 11 0)) (dash (2 9 0)) (popup (0 5 3))) "jump to definition for multiple languages without configuration." single ((:commit . "0c893392f6f5e797fc4dcda67cdc44c7ceed31ca") (:keywords "programming") (:authors ("jack angers")) (:maintainer "jack angers"))]) (request . [(20170201 147) ((emacs (24 4))) "Compatible layer for URL request in Emacs" single ((:commit . "a3d080e57eb8be606fbf39d1baff94e1b16e1fb8") (:authors ("Takafumi Arakaki ")) (:maintainer "Takafumi Arakaki "))]) (evil-snipe . [(20180731 1731) ((emacs (24 4)) (evil (1 2 12)) (cl-lib (0 5))) "emulate vim-sneak & vim-seek" single ((:commit . "8dd076cc56eb9b04494e4e303b86a959b048350b") (:keywords "emulation" "vim" "evil" "sneak" "seek") (:authors ("Henrik Lissner ")) (:maintainer "Henrik Lissner" . "henrik@lissner.net") (:url . "https://github.com/hlissner/evil-snipe"))]) (evil . [(20181107 1016) ((emacs (24 1)) (undo-tree (0 6 3)) (goto-chg (1 6)) (cl-lib (0 5))) "Extensible Vi layer for Emacs." tar ((:commit . "99bcf8c31ee72a3a571e013f40d105618fb92d19"))]) (cl-lib . [(0 6 1) nil "Properly prefixed CL functions and macros" single ((:url . "http://elpa.gnu.org/packages/cl-lib.html") (:keywords))]) (goto-chg . [(20180105 1833) nil "goto last change" single ((:commit . "e5b38e4e1378f6ea48fa9e8439f49c2998654aa4") (:keywords "convenience" "matching") (:authors ("David Andersson ")) (:maintainer "Vasilij Schneidermann" . "v.schneidermann@github.com") (:url . "https://github.com/emacs-evil/goto-chg"))]) (undo-tree . [(0 6 5) nil "Treat undo history as a tree" single ((:url . "http://www.dr-qubit.org/emacs.php") (:keywords "convenience" "files" "undo" "redo" "history" "tree"))]) (evil-commentary . [(20170413 1451) ((evil (1 0 0))) "Comment stuff out. A port of vim-commentary." tar ((:commit . "395f91014b69844b81660c155f42eb9b1b3d199d") (:keywords "evil" "comment" "commentary" "evil-commentary") (:authors ("Quang Linh LE" . "linktohack@gmail.com")) (:maintainer "Quang Linh LE" . "linktohack@gmail.com") (:url . "http://github.com/linktohack/evil-commentary"))]) (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"))]))
\ No newline at end of file
+(1 (diminish . [(20170419 1736) nil "Diminished modes are minor modes with no modeline display" single ((:commit . "565a983a39d2e2cffab5df13b34f3b6116723208") (:keywords "extensions" "diminish" "minor" "codeprose") (:authors ("Will Mengarini" . "seldon@eskimo.com")) (:maintainer "Martin Yrjölä" . "martin.yrjola@gmail.com") (:url . "https://github.com/myrjola/diminish.el"))]) (bind-key . [(20180513 430) nil "A simple way to manage personal keybindings" single ((:commit . "1d5ffb2e0d1427066ced58febbba68c1328bf001") (:keywords "keys" "keybinding" "config" "dotemacs") (:authors ("John Wiegley" . "johnw@newartisans.com")) (:maintainer "John Wiegley" . "johnw@newartisans.com") (:url . "https://github.com/jwiegley/use-package"))]) (use-package . [(20190716 1829) ((emacs (24 3)) (bind-key (2 4))) "A configuration macro for simplifying your .emacs" tar ((:commit . "1d5ffb2e0d1427066ced58febbba68c1328bf001") (: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"))]) (which-key . [(20190802 240) ((emacs (24 4))) "Display available keybindings in popup" single ((:commit . "42a25055163141165aa0269dbca69735e704825c") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainer "Justin Burkett" . "justin@burkett.cc") (:url . "https://github.com/justbur/emacs-which-key"))]) (dotenv-mode . [(20180207 1914) ((emacs (24 3))) "Major mode for .env files" single ((:commit . "f4c52bcd5313379b9f2460db7f7a33119dfa96ea") (:authors ("Preetpal S. Sohal")) (:maintainer "Preetpal S. Sohal") (:url . "https://github.com/preetpalS/emacs-dotenv-mode"))]) (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"))]) (auto-compile . [(20181230 2216) ((emacs (25 1)) (packed (3 0 0))) "automatically compile Emacs Lisp libraries" single ((:commit . "f043133f37fe6d707fa03a1ec4ba619da24c2f35") (:keywords "compile" "convenience" "lisp") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/emacscollective/auto-compile"))]) (elisp-slime-nav . [(20160128 1909) ((cl-lib (0 2))) "Make M-. and M-, work in elisp like they do in slime" single ((:commit . "34938422929800839e2f935aca890cd4a229ca99") (:keywords "navigation" "slime" "elisp" "emacs-lisp") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/elisp-slime-nav"))]) (evil-cleverparens . [(20170718 413) ((evil (1 0)) (paredit (1)) (smartparens (1 6 1)) (emacs (24 4)) (dash (2 12 0))) "Evil friendly minor-mode for editing lisp." tar ((:commit . "8c45879d49bfa6d4e414b6c1df700a4a51cbb869") (:keywords "cleverparens" "parentheses" "evil" "paredit" "smartparens") (:authors ("Olli Piepponen" . "opieppo@gmail.com")) (:maintainer "Olli Piepponen" . "opieppo@gmail.com") (:url . "https://github.com/luxbock/evil-cleverparens"))]) (package-lint . [(20190807 1837) ((cl-lib (0 5)) (emacs (24))) "A linting library for elisp package authors" single ((:commit . "c5ba20dead0df743a699f502f5d034d03b367f65") (: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"))]) (flycheck-package . [(20161111 2251) ((flycheck (0 22)) (package-lint (0 2))) "A Flycheck checker for elisp package authors" single ((:commit . "6d99248b45eea1e5236062f38e524230efdb1a84") (:keywords "lisp") (:authors ("Steve Purcell" . "steve@sanityinc.com") ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) (ggtags . [(20190320 2208) ((emacs (25))) "emacs frontend to GNU Global source code tagging system" single ((:commit . "4d9000034d352cd983ae6626f560e434d0b3e9ca") (:keywords "tools" "convenience") (:authors ("Leo Liu" . "sdl.web@gmail.com")) (:maintainer "Leo Liu" . "sdl.web@gmail.com") (:url . "https://github.com/leoliu/ggtags"))]) (counsel-gtags . [(20190422 1501) ((emacs (25 1)) (counsel (0 8 0)) (seq (1 0))) "ivy for GNU global" single ((:commit . "3ebfd4159856e9dbd9531b2a43410f72175a90bb") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-counsel-gtags"))]) (helm-gtags . [(20170116 529) ((emacs (24 4)) (helm (2 0))) "GNU GLOBAL helm interface" single ((:commit . "108e93d0d099ebb7b98847388f368311cf177033") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-helm-gtags"))]) (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"))]) (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"))]) (parinfer . [(20180904 844) ((dash (2 13 0)) (cl-lib (0 5))) "Simpler Lisp editing" tar ((:commit . "a7c041454e05ec2b88333a73e72debaa671ed596") (:keywords "parinfer") (:authors ("Shi Tianshu")) (:maintainer "Shi Tianshu") (:url . "https://github.com/DogLooksGood/parinfer-mode"))]) (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"))]) (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/"))]) (engine-mode . [(20181222 2027) ((cl-lib (0 5))) "Define and query search engines from within Emacs." single ((:commit . "117a9c0cbc1ff8ade7f17cd40d1d2f5eb24f51a3") (:authors ("Harry R. Schwartz" . "hello@harryrschwartz.com")) (:maintainer "Harry R. Schwartz" . "hello@harryrschwartz.com") (:url . "https://github.com/hrs/engine-mode"))]) (geeknote . [(20160717 1249) ((emacs (24))) "Use Evernote in Emacs through geeknote" single ((:commit . "8ed607c76864afcc9c338972ab093caf4501cbf8") (:keywords "evernote" "geeknote" "note" "emacs-evernote" "evernote-mode") (:authors ("Evan Dale Aromin")) (:maintainer "Evan Dale Aromin") (:url . "http://github.com/avendael/emacs-geeknote"))]) (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"))]) (confluence . [(20151021 128) ((xml-rpc (1 6 4))) "Emacs mode for interacting with confluence wikis" tar ((:commit . "4518d270a07760644c4204985c83d234ece4738b") (:keywords "confluence" "wiki" "xmlrpc") (:authors ("James Ahlborn")) (:maintainer "James Ahlborn") (:url . "http://code.google.com/p/confluence-el/"))]) (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"))]) (feature-mode . [(20190801 1137) nil "Major mode for editing Gherkin (i.e. Cucumber) user stories" tar ((:commit . "11ae1671629bfedaa553c7b819676d64eb320992"))]) (projectile-rails . [(20190706 1231) ((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 . "b0c88a381cc15b0aaba2629949e10ae6373d209a") (:keywords "rails" "projectile") (:authors ("Adam Sokolnicki" . "adam.sokolnicki@gmail.com")) (:maintainer "Adam Sokolnicki" . "adam.sokolnicki@gmail.com") (:url . "https://github.com/asok/projectile-rails"))]) (alchemist . [(20180312 1304) ((elixir-mode (2 2 5)) (dash (2 11 0)) (emacs (24 4)) (company (0 8 0)) (pkg-info (0 4)) (s (1 11 0))) "Elixir tooling integration into Emacs" tar ((:commit . "6f99367511ae209f8fe2c990779764bbb4ccb6ed") (:keywords "languages" "elixir" "elixirc" "mix" "hex" "alchemist") (:authors ("Samuel Tonini" . "tonini.samuel@gmail.com")) (:maintainer "Samuel Tonini" . "tonini.samuel@gmail.com") (:url . "http://www.github.com/tonini/alchemist.el"))]) (ember-mode . [(20190403 1652) ((cl-lib (0 5))) "Ember navigation mode for emacs" single ((:commit . "3510afc5023d760a66aef260ba601c15a31dc878") (:keywords "ember" "ember.js" "emberjs") (:authors ("Aad Versteden" . "madnificent@gmail.com")) (:maintainer "Aad Versteden" . "madnificent@gmail.com"))]) (ember-yasnippets . [(20160526 1658) ((yasnippet (0 8 0))) "Snippets for Ember.js development" tar ((:commit . "3b5bd01569646237bf1b540d097e12f9118b67f4") (:keywords "tools" "abbrev" "languages") (:authors ("Ron White" . "ronco@costite.com")) (:maintainer "Ron White" . "ronco@costite.com"))]) (pony-mode . [(20170807 1522) nil "Minor mode for working with Django Projects" tar ((:commit . "760684d30b6c234d1b88c9a4673a808f36f7f341"))]) (add-node-modules-path . [(20180710 2342) nil "Add node_modules to your exec-path" single ((:commit . "f31e69ccb681f882aebb806ce6e9478e3ac39708") (:keywords "javascript" "node" "node_modules" "eslint") (:authors ("Neri Marschik" . "marschik_neri@cyberagent.co.jp")) (:maintainer "Neri Marschik" . "marschik_neri@cyberagent.co.jp") (:url . "https://github.com/codesuki/add-node-modules-path"))]) (emmet-mode . [(20180613 341) nil "Unofficial Emmet's support for emacs" single ((:commit . "1acb821e0142136344ccf40c1e5fb664d7db2e70") (:keywords "convenience") (:authors ("Shin Aoyama" . "smihica@gmail.com")) (:maintainer "Shin Aoyama" . "smihica@gmail.com") (:url . "https://github.com/smihica/emmet-mode"))]) (evil-matchit . [(20190808 1056) ((evil (1 2 0)) (emacs (24 4))) "Vim matchit ported to Evil" tar ((:commit . "43be86d8c41841a20733718d177e8299d5379218") (:keywords "matchit" "vim" "evil") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") (:url . "http://github.com/redguardtoo/evil-matchit"))]) (grizzl . [(20160818 737) ((cl-lib (0 5)) (emacs (24 3))) "Fast fuzzy search index for Emacs." single ((:commit . "1e917253ce2b846f0272b8356fad3dbff9cd513a") (:keywords "convenience" "usability") (:authors ("Chris Corbyn" . "chris@w3style.co.uk")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.com") (:url . "https://github.com/grizzl/grizzl"))]) (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/"))]) (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"))]) (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"))]) (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/"))]) (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"))]) (dune . [(20190808 345) nil "Integration with the dune build system" tar ((:commit . "888a64db60b973da5685f8e4f2d9f2b2e1a4f264") (:url . "https://github.com/ocaml/dune"))]) (flycheck-ocaml . [(20170730 2153) ((emacs (24 1)) (flycheck (0 22)) (merlin (3 0 1)) (let-alist (1 0 3))) "Flycheck: OCaml support" single ((:commit . "8707a7bf545a8639a6a5c600a98d9a2ea1487dc9") (:keywords "convenience" "tools" "languages") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com") (:url . "https://github.com/flycheck/flycheck-ocaml"))]) (merlin . [(20190718 1023) nil "Mode for Merlin, an assistant for OCaml." tar ((:commit . "bd94d345bf19e612c11737de2d7d401bcc4348a6") (:keywords "ocaml" "languages") (:authors ("Frédéric Bour ")) (:maintainer "Frédéric Bour ") (:url . "https://github.com/ocaml/merlin"))]) (ocp-indent . [(20190726 1452) nil "automatic indentation with ocp-indent" single ((:commit . "bdd84a71da8eac87447e35b55782ec07f0d2aead") (:keywords "ocaml" "languages") (:url . "http://www.typerex.org/ocp-indent.html"))]) (caml . [(20190413 1205) nil "OCaml code editing commands for Emacs" tar ((:commit . "38ebde12d3d529e6ef8078967997d32226e69e82") (:keywords "ocaml") (:authors ("Jacques Garrigue" . "garrigue@kurims.kyoto-u.ac.jp") ("Ian T Zimmerman" . "itz@rahul.net")) (:maintainer "Damien Doligez" . "damien.doligez@inria.fr") (:url . "https://github.com/ocaml/ocaml/"))]) (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"))]) (utop . [(20190715 1836) ((emacs (24))) "Universal toplevel for OCaml" single ((:commit . "2405c8dd8f1cb995baeffb90324dc9c0e1966edc") (:keywords "ocaml" "languages") (:authors ("Jeremie Dimino" . "jeremie@dimino.org")) (:maintainer "Jeremie Dimino" . "jeremie@dimino.org") (:url . "https://github.com/diml/utop"))]) (geiser . [(20190820 1931) nil "GNU Emacs and Scheme talk to each other" tar ((:commit . "56e3149aa1158743f96a5a0bdf5940eaf510a35f") (:url . "http://www.nongnu.org/geiser/"))]) (plantuml-mode . [(20190821 1234) ((dash (2 0 0)) (emacs (25 0))) "Major mode for PlantUML" single ((:commit . "ae8593d66205ac8808f91658ea205f4f4e898089") (:keywords "uml" "plantuml" "ascii") (:authors ("Zhang Weize (zwz)")) (:maintainer "Carlo Sciolla (skuro)"))]) (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"))]) (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/"))]) (zig-mode . [(20190109 217) ((emacs (24))) "A major mode for the Zig programming language" single ((:commit . "c2deea85dd65c3e73c2771c56a998cbdeb9ff717") (: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"))]) (vimrc-mode . [(20181116 1919) nil "Major mode for vimrc files" single ((:commit . "13bc150a870d5d4a95f1111e4740e2b22813c30e") (:keywords "languages" "vim") (:url . "https://github.com/mcandre/vimrc-mode"))]) (dactyl-mode . [(20140906 1725) nil "Major mode for editing Pentadactyl config files" single ((:commit . "cc55fe6b987271d9647492b8df4c812d884f661f") (:keywords "languages" "vim") (:url . "https://github.com/luxbock/dactyl-mode"))]) (company-plsense . [(20180118 58) ((company (0 9 3)) (cl-lib (0 5 0)) (dash (2 12 0)) (s (1 12)) (emacs (24))) "Company backend for Perl" single ((:commit . "b48e3181e08ec597269621d621aa06636f02d883") (:authors ("Troy Hinckley" . "troy.hinckley@gmail.com")) (:maintainer "Troy Hinckley" . "troy.hinckley@gmail.com") (:url . "https://github.com/CeleritasCelery/company-plsense"))]) (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"))]) (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-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"))]) (realgud . [(20190724 2001) ((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 . "11c57cd2ea898c2167ad6c7f80eb1807109d8260") (: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/"))]) (company-glsl . [(20171015 1749) ((company (0 9 4)) (glsl-mode (2 0)) (emacs (24 4))) "Support glsl in company-mode" single ((:commit . "a262c12c3bcd0807718c4edcaf2b054e30ef0e26") (:authors ("Guido Schmidt" . "git@guidoschmidt.cc")) (:maintainer "Guido Schmidt" . "git@guidoschmidt.cc") (:url . "https://github.com/guidoschmidt/company-glsl"))]) (cuda-mode . [(20151214 321) nil "NVIDIA CUDA Major Mode" single ((:commit . "9ae9eacfdba3559b5456342d0d03296290df8ff5") (:keywords "c" "languages") (:authors ("Jack Morrison" . "jackmorrison1@gmail.com")) (:maintainer "Jack Morrison" . "jackmorrison1@gmail.com"))]) (glsl-mode . [(20190514 145) nil "major mode for Open GLSL shader files" single ((:commit . "eaea63a45d0dcb04ddbf069b4bcfd99f10919e44") (:keywords "languages" "opengl" "gpu" "spir-v" "vulkan") (:url . "https://github.com/jimhourihan/glsl-mode"))]) (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"))]) (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"))]) (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"))]) (company-go . [(20190203 19) ((company (0 8 0)) (go-mode (1 0 0))) "company-mode backend for Go (using gocode)" single ((:commit . "7fb65232883f19a8305706b4b4ff32916ffbcaf5") (:keywords "languages") (:authors ("nsf" . "no.smile.face@gmail.com")) (:maintainer "nsf" . "no.smile.face@gmail.com"))]) (flycheck-gometalinter . [(20180424 941) ((emacs (24)) (flycheck (0 22))) "flycheck checker for gometalinter" single ((:commit . "422f6e4b77b27fd7370f0c88437ac5072c9d3413") (:keywords "convenience" "tools" "go") (:authors ("Diep Pham" . "me@favadi.com")) (:maintainer "Diep Pham" . "me@favadi.com") (:url . "https://github.com/favadi/flycheck-gometalinter"))]) (flycheck-golangci-lint . [(20190330 1412) ((emacs (24)) (flycheck (0 22))) "Flycheck checker for golangci-lint" single ((:commit . "8e446c68311048f0b87febf8ef0379e29d358851") (:keywords "convenience" "tools" "go") (:authors ("Wei Jian Gan" . "weijiangan@outlook.com")) (:maintainer "Wei Jian Gan" . "weijiangan@outlook.com") (:url . "https://github.com/weijiangan/flycheck-golangci-lint"))]) (go-eldoc . [(20170305 1427) ((emacs (24 3)) (go-mode (1 0 0))) "eldoc for go-mode" single ((:commit . "cbbd2ea1e94a36004432a9ac61414cb5a95a39bd") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-go-eldoc"))]) (go-fill-struct . [(20171225 331) ((emacs (24))) "Fill struct for golang." single ((:commit . "a613d0b378473eef39e8fd5724abe790aea84321") (:keywords "tools") (:authors ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainer "Sergey Kostyaev" . "feo.me@ya.ru") (:url . "https://github.com/s-kostyaev/go-fill-struct"))]) (go-gen-test . [(20171023 358) ((emacs (24 3)) (s (1 12))) "Generate tests for go code with gotests" single ((:commit . "44c202ac97e728e93a35cee028a0ea8dd6e4292c") (:keywords "languages") (:authors ("Sergey Kostyaev" . "feo.me@ya.ru")) (:maintainer "Sergey Kostyaev" . "feo.me@ya.ru") (:url . "https://github.com/s-kostyaev/go-gen-test"))]) (go-guru . [(20181012 330) ((go-mode (1 3 1)) (cl-lib (0 5))) "Integration of the Go 'guru' analysis tool into Emacs." single ((:commit . "9ab06b3deb1cbf00802d7824bf7107c31865f9fb") (:keywords "tools"))]) (go-impl . [(20170125 1552) ((emacs (24 3)) (go-mode (1 3 0))) "impl integration for go-mode" single ((:commit . "69f0d0ef05771487e15abec500cd06befd171abf") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-go-impl"))]) (go-rename . [(20190805 2101) ((go-mode (1 3 1))) "Integration of the 'gorename' tool into Emacs." single ((:commit . "9ab06b3deb1cbf00802d7824bf7107c31865f9fb") (:keywords "tools"))]) (go-mode . [(20190819 2109) nil "Major mode for the Go programming language" single ((:commit . "9ab06b3deb1cbf00802d7824bf7107c31865f9fb") (:keywords "languages" "go") (:authors ("The go-mode Authors")) (:maintainer "The go-mode Authors") (:url . "https://github.com/dominikh/go-mode.el"))]) (go-tag . [(20180227 411) ((emacs (24 0)) (go-mode (1 5 0))) "Edit Golang struct field tag" single ((:commit . "59b243f2fa079d9de9d56f6e2d94397e9560310a") (:keywords "tools") (:authors ("Brantou" . "brantou89@gmail.com")) (:maintainer "Brantou" . "brantou89@gmail.com") (:url . "https://github.com/brantou/emacs-go-tag"))]) (godoctor . [(20180710 2152) nil "Frontend for godoctor" single ((:commit . "4b45ff3d0572f0e84056e4c3ba91fcc178199859") (:keywords "go" "golang" "refactoring") (:authors ("Sangho Na" . "microamp@protonmail.com")) (:maintainer "Sangho Na" . "microamp@protonmail.com") (:url . "https://github.com/microamp/godoctor.el"))]) (faceup . [(20170925 1946) nil "Markup language for faces and font-lock regression testing" single ((:commit . "6c92dad56a133e14e7b27831e1bcf9b3a71ff154") (:keywords "faces" "languages") (:authors ("Anders Lindgren")) (:maintainer "Anders Lindgren") (:url . "https://github.com/Lindydancer/faceup"))]) (racket-mode . [(20190803 1820) ((emacs (24 3)) (faceup (0 0 2))) "Major mode for Racket language." tar ((:commit . "5300aa004f08535c3fac99f1af78462f129aca81") (:authors ("Greg Hendershott")) (:maintainer "Greg Hendershott") (:url . "https://www.racket-mode.com/"))]) (arduino-mode . [(20180509 36) ((emacs (25)) (cl-lib (0 5)) (spinner (1 7 3))) "Major mode for editing Arduino code." tar ((:commit . "23ae47c9f28f559e70b790b471f20310e163a39b") (:keywords "languages" "arduino") (:maintainer "stardiviner" . "numbchild@gmail.com") (:url . "https://github.com/stardiviner/arduino-mode"))]) (kivy-mode . [(20180702 2029) nil "Emacs major mode for editing Kivy files" single ((:commit . "3d87584b963a79465ed52e09f4de17395c6aae60") (:authors ("Dean Serenevy" . "dean@serenevy.net")) (:maintainer "Dean Serenevy" . "dean@serenevy.net"))]) (matlab-mode . [(20180928 1526) nil "Major mode for MATLAB(R) dot-m files" tar ((:commit . "3fbca4259b2584bde08df07ba51944d7e3e2b4f4") (:url . "http://sourceforge.net/projects/matlab-emacs/") (:keywords "matlab" "programming" "language" "(X)emacs"))]) (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"))]) (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"))]) (scad-mode . [(20190413 1246) nil "A major mode for editing OpenSCAD code" single ((:commit . "c060053d3b4818bf6d0620b0711be845795c4157") (: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"))]) (stan-mode . [(20190805 1427) nil "Major mode for editing Stan files" tar ((:commit . "e60fe0caecb8e84d0b8fc160a0cdf8343e33d905") (:keywords "languanges") (:authors ("Jeffrey Arnold" . "jeffrey.arnold@gmail.com") ("Daniel Lee" . "bearlee@alum.mit.edu")) (:maintainer "Jeffrey Arnold" . "jeffrey.arnold@gmail.com") (:url . "http://github.com/stan-dev/stan-mode"))]) (thrift . [(20180905 1050) ((emacs (24))) "major mode for fbthrift and Apache Thrift files" single ((:commit . "dbb639ee4da40e8a1fe424c234af7af8a7042aa0") (:keywords "languages"))]) (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"))]) (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"))]) (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/"))]) (flycheck-nim . [(20160715 428) ((dash (2 4 0)) (flycheck (0 20))) "Defines a flycheck syntax checker for nim" single ((:commit . "6d27349b66e44578851e6148299709d64d2bde41") (:authors ("Adam Schwalm" . "adamschwalm@gmail.com")) (:maintainer "Adam Schwalm" . "adamschwalm@gmail.com") (:url . "https://github.com/ALSchwalm/flycheck-nim"))]) (flycheck-nimsuggest . [(20171027 2208) ((flycheck (0 23)) (emacs (24 3))) "flycheck backend for Nim using nimsuggest" single ((:commit . "dc9a5de1cb3ee05db5794d824610959a1f603bc9") (:authors ("Yuta Yamada ")) (:maintainer "Yuta Yamada ") (:url . "https://github.com/yuutayamada/flycheck-nimsuggest"))]) (commenter . [(20160219 1627) ((emacs (24 4)) (let-alist (1 0 4))) "multiline-comment support package" single ((:commit . "6d1885419434ba779270c6fda0e30d390bb074bd") (:keywords "comment") (:authors ("Yuta Yamada ")) (:maintainer "Yuta Yamada ") (:url . "https://github.com/yuutayamada/commenter"))]) (nim-mode . [(20190710 2254) ((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 . "0d46c05cdfa65d37f8cb5da860ff3052782f6bbd") (:keywords "nim" "languages") (:authors ("Simon Hafner")) (:maintainer "Simon Hafner" . "hafnersimon@gmail.com"))]) (hy-mode . [(20190620 1804) ((dash (2 13 0)) (dash-functional (1 2 0)) (s (1 11 0)) (emacs (24))) "Major mode for Hylang" tar ((:commit . "8699b744c03e0399c049757b7819d69768cac3bc") (:keywords "languages" "lisp" "python") (:url . "http://github.com/hylang/hy-mode"))]) (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"))]) (pyenv-mode . [(20170801 2348) ((pythonic (0 1 0))) "Integrate pyenv with python-mode" single ((:commit . "eabb1c66f9e0c0500fef4d089508aad246d81dc0") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/pyenv-mode"))]) (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"))]) (blacken . [(20190521 841) ((emacs (25 2))) "Reformat python buffers using the \"black\" formatter" single ((:commit . "1874018ae242176d0780cdcd0109e8f9a123a914") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/blacken"))]) (cython-mode . [(20190111 2150) nil "Major mode for editing Cython files" single ((:commit . "0ab70ccae4dbdc20aabf718db63440e4dc874915"))]) (helm-cscope . [(20190615 41) ((xcscope (1 0)) (helm (1 6 7)) (cl-lib (0 5)) (emacs (24 1))) "Helm interface for xcscope.el." single ((:commit . "af1d9e7f4460a88d7400b5a74d5da68084089ac1") (:keywords "cscope" "helm") (:authors ("alpha22jp" . "alpha22jp@gmail.com")) (:maintainer "alpha22jp" . "alpha22jp@gmail.com") (:url . "https://github.com/alpha22jp/helm-cscope.el"))]) (helm-pydoc . [(20160918 542) ((helm-core (2 0)) (emacs (24 4))) "pydoc with helm interface" tar ((:commit . "85480a29b56dacde425655bc8f5a597c785afdf5") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-helm-pydoc"))]) (epc . [(20140610 534) ((concurrent (0 3 1)) (ctable (0 1 2))) "A RPC stack for the Emacs Lisp" tar ((:commit . "e1bfa5ca163273859336e3cc89b4b6460f7f8cda") (:keywords "lisp" "rpc") (:authors ("SAKURAI Masashi ")) (:maintainer "SAKURAI Masashi ") (:url . "https://github.com/kiwanami/emacs-epc"))]) (concurrent . [(20161229 330) ((emacs (24 3)) (deferred (0 5 0))) "Concurrent utility functions for emacs lisp" single ((:commit . "2239671d94b38d92e9b28d4e12fd79814cfb9c16") (:keywords "deferred" "async" "concurrent") (:authors ("SAKURAI Masashi ")) (:maintainer "SAKURAI Masashi ") (:url . "https://github.com/kiwanami/emacs-deferred/blob/master/README-concurrent.markdown"))]) (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"))]) (live-py-mode . [(20190614 433) ((emacs (24 3))) "Live Coding in Python" tar ((:commit . "4c378e4afdffb09ab3ca338d3b37d9a2b69d9584") (: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/"))]) (nose . [(20140520 1648) nil "Easy Python test running in Emacs" single ((:commit . "194d7789bf797f31ea0adc45f08beb66ae9ea98e") (:keywords "nose" "python" "testing"))]) (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"))]) (pyvenv . [(20181228 1722) nil "Python virtual environment interface" single ((:commit . "fa6a028349733b0ecb407c4cfb3a715b71931eec") (:keywords "python" "virtualenv" "tools") (:authors ("Jorgen Schaefer" . "contact@jorgenschaefer.de")) (:maintainer "Jorgen Schaefer" . "contact@jorgenschaefer.de") (:url . "http://github.com/jorgenschaefer/pyvenv"))]) (pipenv . [(20190522 803) ((emacs (25 1)) (f (0 19 0)) (s (1 12 0)) (pyvenv (1 20))) "A Pipenv porcelain." single ((:commit . "03edaaa44a5a4212d2e5a14e3ae6303189d76703") (:authors ("Paul Walsh" . "paulywalsh@gmail.com")) (:maintainer "Paul Walsh" . "paulywalsh@gmail.com") (:url . "https://github.com/pwalsh/pipenv.el"))]) (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"))]) (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"))]) (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"))]) (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"))]) (yapfify . [(20180830 733) nil "(automatically) format python buffers using YAPF." single ((:commit . "b858225e1debe6734ee718e5c3c209152652a8b3") (:authors ("Joris Engbers" . "info@jorisengbers.nl")) (:maintainer "Joris Engbers" . "info@jorisengbers.nl") (:url . "https://github.com/JorisE/yapfify"))]) (anaconda-mode . [(20190616 1019) ((emacs (25)) (pythonic (0 1 0)) (dash (2 6 0)) (s (1 9)) (f (0 16 2))) "Code navigation, documentation lookup and completion for Python" single ((:commit . "24aa81ba62f13d7bb505a03fe244181c461fec68") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/anaconda-mode"))]) (pythonic . [(20190725 1258) ((emacs (25)) (s (1 9)) (f (0 17 2))) "Utility functions for writing pythonic emacs package." single ((:commit . "1ba07048cffa0f95d7d1c75eab2d2be175e67cb6") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/pythonic"))]) (company-anaconda . [(20181025 1305) ((company (0 8 0)) (anaconda-mode (0 1 1)) (cl-lib (0 5 0)) (dash (2 6 0)) (s (1 9))) "Anaconda backend for company-mode" single ((:commit . "0ab70de1740e67cee451abcf3685c7525ff9e95a") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/anaconda-mode"))]) (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"))]) (lsp-python-ms . [(20190809 640) ((cl-lib (0 6 1)) (lsp-mode (6 0)) (python (0 26 1)) (json (1 4)) (emacs (24 4))) "lsp-mode client for Microsoft python-language-server" single ((:commit . "8b18a98ad68373aa4d7ef24ec728a250ca570a2a") (:keywords "languages" "tools") (:authors ("Charl Botha")) (:maintainer "Andrew Christianson") (:url . "https://github.com/andrew-christianson/lsp-python-ms"))]) (eval-sexp-fu . [(20190109 809) ((cl-lib (0))) "Tiny functionality enhancements for evaluating sexps." single ((:commit . "e1d7165383c941b3f11c2715707adc3d91d129a0") (:keywords "lisp" "highlight" "convenience") (:authors ("Takeshi Banse" . "takebi@laafc.net")) (:maintainer "Takeshi Banse" . "takebi@laafc.net"))]) (cider-eval-sexp-fu . [(20190311 2152) ((emacs (24)) (eval-sexp-fu (0 5 0))) "Briefly highlights an evaluated sexp." single ((:commit . "7fd229f1441356866aedba611fd0cf4e89b50921") (:keywords "languages" "clojure" "cider") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com"))]) (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"))]) (edn . [(20160215 1219) ((cl-lib (0 3)) (emacs (24 1)) (peg (0 6))) "Support for reading and writing the edn data format from elisp" single ((:commit . "be9e32d1b49e35247b263b0243df7cfdc8d413ab") (:keywords "edn" "clojure") (:authors ("Lars Andersen" . "expez@expez.com")) (:maintainer "Lars Andersen" . "expez@expez.com") (:url . "https://www.github.com/expez/edn.el"))]) (paredit . [(20171127 205) nil "minor mode for editing parentheses" single ((:commit . "acbe10fdd85d2e91831adf70b6a828bc7e900da0") (:keywords "lisp") (:authors ("Taylor R. Campbell" . "campbell+paredit@mumble.net")) (:maintainer "Taylor R. Campbell" . "campbell+paredit@mumble.net"))]) (peg . [(20150708 641) nil "Parsing Expression Grammars in Emacs Lisp" single ((:commit . "081efeca91d790c7fbc90871ac22c40935f4833b"))]) (clj-refactor . [(20190618 716) ((emacs (25 1)) (seq (2 19)) (yasnippet (0 6 1)) (paredit (24)) (multiple-cursors (1 2 2)) (clojure-mode (5 6 1)) (cider (0 17 0)) (edn (1 1 2)) (inflections (2 3)) (hydra (0 13 2))) "A collection of commands for refactoring Clojure code" tar ((:commit . "50d2d8aad5e0bd8002173b300f8419d72ceab7af") (:keywords "convenience" "clojure" "cider") (:authors ("Magnar Sveen" . "magnars@gmail.com") ("Lars Andersen" . "expez@expez.com") ("Benedek Fazekas" . "benedek.fazekas@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) (clojure-snippets . [(20180314 1308) ((yasnippet (0 10 0))) "Yasnippets for clojure" tar ((:commit . "6068dca90467a0f4ebc2cd39338a173d6f5ddc04"))]) (flycheck-clojure . [(20190611 2351) ((cider (0 22 0)) (flycheck (32 -4)) (let-alist (1 0 1)) (emacs (25))) "Flycheck: Clojure support" single ((:commit . "4c5d0c723bd564d632a4b93046679ed19d0e49d9") (:authors ("Peter Fraenkel" . "pnf@podsnap.com") ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Peter Fraenkel" . "pnf@podsnap.com") (:url . "https://github.com/clojure-emacs/squiggly-clojure"))]) (cider . [(20190821 1002) ((emacs (25)) (clojure-mode (5 9)) (parseedn (0 1)) (pkg-info (0 4)) (queue (0 2)) (spinner (1 7)) (seq (2 16)) (sesman (0 3 2))) "Clojure Interactive Development Environment that Rocks" tar ((:commit . "bad9995772c07467c945161552a035f32de66008") (:keywords "languages" "clojure" "cider") (:authors ("Tim King" . "kingtim@gmail.com") ("Phil Hagelberg" . "technomancy@gmail.com") ("Bozhidar Batsov" . "bozhidar@batsov.com") ("Artur Malabarba" . "bruce.connor.am@gmail.com") ("Hugo Duncan" . "hugo@hugoduncan.org") ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.com") (:url . "http://www.github.com/clojure-emacs/cider"))]) (sesman . [(20190623 1123) ((emacs (25))) "Generic Session Manager" tar ((:commit . "e8bfb0e37940bf5f370ae300b896dd04afbc63c8") (:keywords "process") (:authors ("Vitalie Spinu")) (:maintainer "Vitalie Spinu") (:url . "https://github.com/vspinu/sesman"))]) (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"))]) (parseedn . [(20190331 1058) ((emacs (25)) (a (0 1 0 -3 4)) (parseclj (0 1 0))) "Clojure/EDN parser" single ((:commit . "ddf824bc1df1585867cb7f27f2dd8ca8df760569") (:keywords "lisp" "clojure" "edn" "parser") (:authors ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainer "Arne Brasseur" . "arne@arnebrasseur.net"))]) (clojure-mode . [(20190725 654) ((emacs (25 1))) "Major mode for Clojure code" single ((:commit . "f23eb209a8bedec95e0ad0542762bd13998ba048") (:keywords "languages" "clojure" "clojurescript" "lisp") (:url . "http://github.com/clojure-emacs/clojure-mode"))]) (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"))]) (a . [(20180907 953) ((emacs (25))) "Associative data structure functions" single ((:commit . "18966975db7110d0aac726be95b593e2fc3d44ed") (:keywords "lisp") (:authors ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainer "Arne Brasseur" . "arne@arnebrasseur.net") (:url . "https://github.com/plexus/a.el"))]) (sayid . [(20181223 835) ((cider (0 14 0))) "sayid nREPL middleware client" single ((:commit . "a0a4c73574af7ebb116b39cd8c30f95c169d7d60") (:authors ("Bill Piel" . "bill@billpiel.com")) (:maintainer "Bill Piel" . "bill@billpiel.com") (:url . "https://github.com/clojure-emacs/sayid"))]) (elixir-mode . [(20190422 155) ((emacs (24)) (pkg-info (0 4))) "Major mode for editing Elixir files" tar ((:commit . "694d133e847e9a6db6abd1c19850cec6d867ccce") (:keywords "languages" "elixir") (:url . "https://github.com/elixir-lang/emacs-elixir"))]) (flycheck-mix . [(20190714 958) ((flycheck (27)) (elixir-mode (1 8 0))) "Elixir mix flycheck integration" single ((:commit . "04681608e52ac660f74989a045579da75bc489f2") (:keywords "elixir" "flycheck" "mix") (:authors ("Tomasz Kowal" . "tomekowal@gmail.com")) (:maintainer "Tomasz Kowal" . "tomekowal@gmail.com") (:url . "https://github.com/tomekowal/flycheck-mix"))]) (flycheck-credo . [(20170526 1545) ((flycheck (29))) "flycheck checker for elixir credo" single ((:commit . "e88f11ead53805c361ec7706e44c3dfee1daa19f") (:authors ("Aaron Jensen" . "aaronjensen@gmail.com")) (:maintainer "Aaron Jensen" . "aaronjensen@gmail.com") (:url . "https://github.com/aaronjensen/flycheck-credo"))]) (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"))]) (dart-mode . [(20190808 2226) ((emacs (24 3))) "Major mode for editing Dart files" single ((:commit . "9b65aae8c79132275733ee4324948446c88a6b93") (:keywords "languages") (:authors ("Brady Trainor" . "mail@bradyt.net")) (:maintainer "Brady Trainor" . "mail@bradyt.net") (:url . "https://github.com/bradyt/dart-mode"))]) (clang-format . [(20180406 1514) ((cl-lib (0 3))) "Format code using clang-format" single ((:commit . "1469728c61dcba8fa09c456e841f97e9eb75fa85") (:keywords "tools" "c"))]) (company-c-headers . [(20180814 1730) ((emacs (24 1)) (company (0 8))) "Company mode backend for C/C++ header files" single ((:commit . "41331192b3961c8e3a51540678e1d11eaa346f03") (:keywords "development" "company") (:authors ("Alastair Rankine" . "alastair@girtby.net")) (:maintainer "Alastair Rankine" . "alastair@girtby.net"))]) (company-rtags . [(20190821 449) ((emacs (24 3)) (company (0 8 1)) (rtags (2 10))) "RTags back-end for company" single ((:commit . "9048a6f1e5bb6ef1e3f9eb3ccfc4368f52825bea") (:authors ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainer "Jan Erik Hanssen" . "jhanssen@gmail.com") (:url . "http://rtags.net"))]) (company-ycmd . [(20180520 1053) ((ycmd (1 3)) (company (0 9 3)) (deferred (0 5 1)) (s (1 11 0)) (dash (2 13 0)) (let-alist (1 0 5)) (f (0 19 0))) "company-mode backend for ycmd" single ((:commit . "6f4f7384b82203cccf208e3ec09252eb079439f9") (:url . "https://github.com/abingham/emacs-ycmd"))]) (cpp-auto-include . [(20160426 412) ((cl-lib (0 5))) "auto include header file for C++" single ((:commit . "f3b9bfa668fcd38da8a9dbef0e33a536be239468") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-cpp-auto-include"))]) (disaster . [(20171016 2152) nil "Disassemble C/C++ code under cursor in Emacs" single ((:commit . "10a785facc60d89d78e0d5177985ab1af1741bb4") (:keywords "tools") (:authors ("Justine Tunney" . "jtunney@gmail.com")) (:maintainer "Justine Tunney" . "jtunney@gmail.com") (:url . "https://github.com/jart/disaster"))]) (flycheck-rtags . [(20180619 824) ((emacs (24)) (flycheck (0 23)) (rtags (2 10))) "RTags Flycheck integration." single ((:commit . "9048a6f1e5bb6ef1e3f9eb3ccfc4368f52825bea") (:authors ("Christian Schwarzgruber" . "c.schwarzgruber.cs@gmail.com")) (:maintainer "Christian Schwarzgruber" . "c.schwarzgruber.cs@gmail.com") (:url . "http://rtags.net"))]) (google-c-style . [(20180130 1736) nil "Google's C/C++ style for c-mode" single ((:commit . "5beae3f4dacad9b0b86a8a4ab308459475feda0e") (:keywords "c" "tools"))]) (helm-rtags . [(20170813 411) ((helm (2 0)) (rtags (2 10))) "A front-end for rtags" single ((:commit . "9048a6f1e5bb6ef1e3f9eb3ccfc4368f52825bea") (:authors ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainer "Jan Erik Hanssen" . "jhanssen@gmail.com") (:url . "http://rtags.net"))]) (ivy-rtags . [(20170523 454) ((ivy (0 7 0)) (rtags (2 10))) "RTags completion back-end for ivy" single ((:commit . "9048a6f1e5bb6ef1e3f9eb3ccfc4368f52825bea") (:authors ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainer "Jan Erik Hanssen" . "jhanssen@gmail.com") (:url . "http://rtags.net"))]) (rtags . [(20190820 502) nil "A front-end for rtags" single ((:commit . "9048a6f1e5bb6ef1e3f9eb3ccfc4368f52825bea") (:authors ("Jan Erik Hanssen" . "jhanssen@gmail.com") ("Anders Bakken" . "agbakken@gmail.com")) (:maintainer "Jan Erik Hanssen" . "jhanssen@gmail.com") (:url . "http://rtags.net"))]) (cquery . [(20190118 542) ((emacs (25 1)) (lsp-mode (3 4)) (dash (0 13))) "cquery client for lsp-mode" tar ((:commit . "555e50984ebda177421fdcdc8c76cb29235d9694") (:keywords "languages" "lsp" "c++") (:authors ("Tobias Pisani")) (:maintainer "Tobias Pisani") (:url . "https://github.com/jacobdufault/cquery"))]) (ccls . [(20190720 935) ((emacs (25 1)) (lsp-mode (4 2)) (dash (0 14)) (projectile (1 0 0))) "ccls client for lsp-mode" tar ((:commit . "9061ebbf9d5ec3ee7e88dbd226c77017cf0447b1") (:keywords "languages" "lsp" "c++") (:authors ("Tobias Pisani, Fangrui Song")) (:maintainer "Tobias Pisani, Fangrui Song") (:url . "https://github.com/MaskRay/emacs-ccls"))]) (company-emoji . [(20180925 2008) ((cl-lib (0 5)) (company (0 8 0))) "company-mode backend for emoji" tar ((:commit . "f0d91d5be0077b20b418a3ba37d36f431fae322f") (:keywords "emoji" "company") (:authors ("Alex Dunn" . "dunn.alex@gmail.com")) (:maintainer "Alex Dunn" . "dunn.alex@gmail.com") (:url . "https://github.com/dunn/company-emoji.git"))]) (emoji-cheat-sheet-plus . [(20150617 1331) ((emacs (24)) (helm (1 6 4))) "emoji-cheat-sheet for emacs" tar ((:commit . "96a003127d646a2683d81ca906a17eace0a6413e") (:keywords "emacs" "emoji") (:authors ("Sylvain Benner (based on the work of Shingo Fukuyama)")) (:maintainer "Sylvain Benner (based on the work of Shingo Fukuyama)") (:url . "https://github.com/syl20bnr/emacs-emoji-cheat-sheet-plus"))]) (gh-md . [(20151207 1740) ((emacs (24))) "Render markdown using the Github api" single ((:commit . "693cb0dcadff70e813e1a9d303d227aff7898557") (:keywords "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:url . "https://github.com/emacs-pe/gh-md.el"))]) (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"))]) (vmd-mode . [(20180223 1356) ((emacs (24 3))) "Fast Github-flavored Markdown preview using a vmd subprocess." single ((:commit . "24e38a20951dfad6e3e985c7cc6286c1e271da5f") (:keywords "markdown" "preview" "live" "vmd") (:authors ("Blake Miller" . "blak3mill3r@gmail.com")) (:maintainer "Blake Miller" . "blak3mill3r@gmail.com") (:url . "https://github.com/blak3mill3r/vmd-mode"))]) (auctex-latexmk . [(20170618 1636) ((auctex (11 87))) "Add LatexMk support to AUCTeX" single ((:commit . "4d353522650d7685acbf1d38f7dbc504f734bd84") (:keywords "tex") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com") (:url . "https://github.com/tom-tan/auctex-latexmk/"))]) (auctex . [(12 1 2) ((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"))]) (company-auctex . [(20180725 1912) ((yasnippet (0 8 0)) (company (0 8 0)) (auctex (11 87))) "Company-mode auto-completion for AUCTeX" single ((:commit . "48c42c58ce2f0e693301b0cb2d085055410c1b25") (:authors ("Christopher Monsanto , Alexey Romanov" . "alexey.v.romanov@gmail.com")) (:maintainer "Christopher Monsanto , Alexey Romanov" . "alexey.v.romanov@gmail.com") (:url . "https://github.com/alexeyr/company-auctex/"))]) (company-reftex . [(20181222 906) ((emacs (25 1)) (s (1 12)) (company (0 8))) "Company backend based on RefTeX." single ((:commit . "33935e96540201adab43f3a765d62289eba9e286") (:keywords "bib" "tex" "company" "latex" "reftex" "references" "labels" "citations") (:authors ("Eivind Fonn" . "evfonn@gmail.com")) (:maintainer "Eivind Fonn" . "evfonn@gmail.com") (:url . "https://github.com/TheBB/company-reftex"))]) (magic-latex-buffer . [(20170531 5) ((cl-lib (0 5)) (emacs (24 3))) "Magically enhance LaTeX-mode font-locking for semi-WYSIWYG editing" single ((:commit . "c03277d5619d9adcd871f3e6480a1a27985810cb") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) (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"))]) (tide . [(20190706 2322) ((dash (2 10 0)) (s (1 11 0)) (flycheck (27)) (typescript-mode (0 1)) (cl-lib (0 5))) "Typescript Interactive Development Environment" tar ((:commit . "dd90f5ad6c537d38b5f56599687c3bc9b21072a6") (:keywords "typescript") (:authors ("Anantha kumaran" . "ananthakumaran@gmail.com")) (:maintainer "Anantha kumaran" . "ananthakumaran@gmail.com") (:url . "http://github.com/ananthakumaran/tide"))]) (typescript-mode . [(20190710 2011) ((emacs (24 3))) "Major mode for editing typescript" tar ((:commit . "32146510b8ebb031e468c6c0898a9b253c73617e") (:keywords "typescript" "languages") (:url . "http://github.com/ananthakumaran/typescript.el"))]) (web-mode . [(20190625 1951) ((emacs (23 1))) "major mode for editing web templates" single ((:commit . "a723d3ecd3606d1c1948871f46fc8c8d7f879fe4") (:keywords "languages") (:authors ("François-Xavier Bois ")) (:maintainer "François-Xavier Bois") (:url . "http://web-mode.org"))]) (cargo . [(20190816 1046) ((emacs (24 3)) (rust-mode (0 2 0)) (markdown-mode (2 4))) "Emacs Minor Mode for Cargo, Rust's Package Manager." tar ((:commit . "f70b060c97f0df6ec6487968dfdfae8ec97a080f") (:keywords "tools") (:authors ("Kevin W. van Rooijen" . "kevin.van.rooijen@attichacker.com")) (:maintainer "Kevin W. van Rooijen" . "kevin.van.rooijen@attichacker.com"))]) (racer . [(20190610 800) ((emacs (24 3)) (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 . "ea6a09c16f8ec646195f942c12fe3ed7d65cc971") (:keywords "abbrev" "convenience" "matching" "rust" "tools") (:authors ("Phil Dawes")) (:maintainer "Phil Dawes") (:url . "https://github.com/racer-rust/emacs-racer"))]) (flycheck-rust . [(20190319 1546) ((emacs (24 1)) (flycheck (28)) (dash (2 13 0)) (seq (2 3)) (let-alist (1 0 4))) "Flycheck: Rust additions and Cargo support" single ((:commit . "a139cd53c5062697e9ed94ad80b803c37d999600") (:keywords "tools" "convenience") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com") (:url . "https://github.com/flycheck/flycheck-rust"))]) (rust-mode . [(20190517 2037) ((emacs (24 0))) "A major emacs mode for editing Rust source code" single ((:commit . "c62185ae1c6edf0335261f169241eb8ee9713ad5") (:keywords "languages") (:authors ("Mozilla")) (:maintainer "Mozilla") (:url . "https://github.com/rust-lang/rust-mode"))]) (toml-mode . [(20161107 1800) ((emacs (24)) (cl-lib (0 5))) "Major mode for editing TOML files" single ((:commit . "f6c61817b00f9c4a3cab1bae9c309e0fc45cdd06") (:keywords "data" "toml") (:authors ("Felix Chern" . "idryman@gmail.com")) (:maintainer "Felix Chern" . "idryman@gmail.com") (:url . "https://github.com/dryman/toml-mode.el"))]) (dhall-mode . [(20190526 2113) ((emacs (24 4)) (reformatter (0 3))) "a major mode for dhall configuration language" single ((:commit . "1b71e8e7123647761d8f35916c06b7280b2929ea") (:keywords "languages") (:authors ("Sibi Prabakaran" . "sibi@psibi.in")) (:maintainer "Sibi Prabakaran" . "sibi@psibi.in") (:url . "https://github.com/psibi/dhall-mode"))]) (purescript-mode . [(20190522 2230) ((emacs (24)) (cl-lib (0 6))) "A PureScript editing mode" tar ((:commit . "8db1d0243c03da31adac4d7c5287407a4df6aff2"))]) (psci . [(20190308 24) ((emacs (24 4)) (purescript-mode (13 10)) (dash (2 9 0))) "Major mode for purescript repl psci" tar ((:commit . "3c10918a3a1d1dc613c222801deb465d4fbb2143") (: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"))]) (erlang . [(20190404 928) ((emacs (24 1))) "Erlang major mode" tar ((:commit . "9f220c8ed81719b3fec4f3032b1140df20ffe046"))]) (company-quickhelp . [(20180525 1003) ((emacs (24 3)) (company (0 8 9)) (pos-tip (0 4 6))) "Popup documentation for completion candidates" single ((:commit . "479676cade80a9f03802ca3d956591820ed5c537") (:keywords "company" "popup" "documentation" "quickhelp") (:authors ("Lars Andersen" . "expez@expez.com")) (:maintainer "Lars Andersen" . "expez@expez.com") (:url . "https://www.github.com/expez/company-quickhelp"))]) (fsharp-mode . [(20190609 1317) ((company (0 8 0)) (company-quickhelp (1 2 0)) (popup (0 5 3)) (pos-tip (0 4 5)) (s (1 3 1)) (dash (1 1 0)) (flycheck (0 25))) "F# mode for Emacs" tar ((:commit . "e2a63296681d65969d9c21144a22c6fd2f9dd57d"))]) (company-emacs-eclim . [(20180911 1121) ((eclim (0 3)) (company (0 7)) (cl-lib (0 5))) "Eclim company backend" single ((:commit . "23f5b294f833ce58516d7b9ae08a7792d70022a1"))]) (eclim . [(20181108 1134) ((dash (2 11 0)) (json (1 2)) (popup (0 5 2)) (s (1 9 0)) (cl-lib (0 5)) (yasnippet (0 10 0))) "An interface to the Eclipse IDE." tar ((:commit . "23f5b294f833ce58516d7b9ae08a7792d70022a1"))]) (ensime . [(20180615 1330) ((scala-mode (0 23)) (sbt-mode (0 2)) (yasnippet (0 10 0)) (company (0 9 0)) (dash (2 12 1)) (s (1 11 0)) (popup (0 5 3))) "ENhanced Scala Interaction Mode for Emacs" tar ((:commit . "34eb11dac3ec9d1c554c2e55bf056ece6983add7") (:keywords "languages") (:url . "https://github.com/ensime/ensime-emacs"))]) (gradle-mode . [(20150313 1905) ((s (1 8 0))) "Gradle integration with Emacs' compile" single ((:commit . "e4d665d5784ecda7ddfba015f07c69be3cfc45f2") (:keywords "gradle") (:authors ("Daniel Mijares" . "daniel.j.mijares@gmail.com")) (:maintainer "Daniel Mijares" . "daniel.j.mijares@gmail.com") (:url . "http://github.com/jacobono/emacs-gradle-mode"))]) (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"))]) (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"))]) (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"))]) (lsp-java . [(20190817 1436) ((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))) "Java support for lsp-mode" tar ((:commit . "ccc40d3249c031e34fec13d4b82da694addb0274") (:keywords "java") (:url . "https://github.com/emacs-lsp/lsp-java"))]) (reformatter . [(20190529 2238) ((emacs (24 3))) "Define commands which run reformatters on the current buffer" single ((:commit . "c6919a6549b12f624a97e3535409737096e6532e") (:keywords "convenience" "tools") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/reformatter.el"))]) (elm-mode . [(20190815 555) ((f (0 17)) (let-alist (1 0 4)) (seq (2 2)) (s (1 7 0)) (emacs (24 4)) (dash (2 13 0)) (reformatter (0 3))) "Major mode for Elm" tar ((:commit . "834fb5037424c47155518ed27537ef7ad6addcc5") (:authors ("Joseph Collard")) (:maintainer "Joseph Collard") (:url . "https://github.com/jcollard/elm-mode"))]) (elm-test-runner . [(20190105 1923) ((emacs (24 4))) "Enhanced support for running elm-test" single ((:commit . "a31d567a64d86d36e3675347abd696824a731e0c") (:authors ("Juan Edi")) (:maintainer "Juan Edi") (:url . "https://github.com/juanedi/elm-test-runner"))]) (flycheck-elm . [(20181107 146) ((flycheck (0 29 -4)) (emacs (24 4)) (let-alist (1 0 5)) (seq (2 20))) "Flycheck support for the elm language" single ((:commit . "debd0af563cb6c2944367a691c7fa3021d9378c1") (:authors ("Brian Sermons")) (:maintainer "Brian Sermons") (:url . "https://github.com/bsermons/flycheck-elm"))]) (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"))]) (company-web . [(20180402 1155) ((company (0 8 0)) (dash (2 8 0)) (cl-lib (0 5 0)) (web-completion-data (0 1 0))) "Company version of ac-html, complete for web,html,emmet,jade,slim modes" tar ((:commit . "f0cc9187c9c34f72ad71f5649a69c74f996bae9a") (:keywords "html" "company") (:authors ("Olexandr Sydorchuk" . "olexandr.syd@gmail.com")) (:maintainer "Olexandr Sydorchuk" . "olexandr.syd@gmail.com") (:url . "https://github.com/osv/company-web"))]) (counsel-css . [(20180302 1036) ((emacs (24 4)) (counsel (0 7 0)) (cl-lib (0 5))) "stylesheet-selector-aware swiper" single ((:commit . "0536af00236cdce1ed08b40dd46c917e8b4b8869") (:keywords "convenience" "tools" "counsel" "swiper" "selector" "css" "less" "scss") (:authors ("Henrik Lissner ")) (:maintainer "Henrik Lissner" . "henrik@lissner.net") (:url . "https://github.com/hlissner/emacs-counsel-css"))]) (helm-css-scss . [(20140627 25) ((helm (1 0)) (emacs (24))) "CSS/SCSS/LESS Selectors with helm interface" single ((:commit . "ab8348aa98e0daa2f1b771e35bdb06bfacbe5016") (:keywords "scss" "css" "less" "selector" "helm") (:authors ("Shingo Fukuyama - http://fukuyama.co")) (:maintainer "Shingo Fukuyama - http://fukuyama.co") (:url . "https://github.com/ShingoFukuyama/helm-css-scss"))]) (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"))]) (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"))]) (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"))]) (haml-mode . [(20190219 2102) ((emacs (24)) (cl-lib (0 5))) "Major mode for editing Haml files" single ((:commit . "bf5b6c11b1206759d2b28af48765e04882dd1fc4") (:keywords "markup" "languages" "html") (:authors ("Natalie Weizenbaum")) (:maintainer "Natalie Weizenbaum") (:url . "https://github.com/nex3/haml-mode"))]) (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"))]) (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"))]) (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"))]) (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"))]) (flycheck-kotlin . [(20190808 630) ((flycheck (0 20))) "Support kotlin in flycheck" single ((:commit . "5104ee9a3fdb7f0a0a3d3bcfd8dd3c45a9929310") (:authors ("Elric Milon" . "whirm_REMOVETHIS__@gmx.com")) (:maintainer "Elric Milon" . "whirm_REMOVETHIS__@gmx.com"))]) (kotlin-mode . [(20190116 2055) ((emacs (24 3))) "Major mode for kotlin" single ((:commit . "0e542ae2f78420618df8b0123dfe168a37dce333") (:keywords "languages") (:authors ("Shodai Yokoyama" . "quantumcars@gmail.com")) (:maintainer "Shodai Yokoyama" . "quantumcars@gmail.com"))]) (ameba . [(20190720 1845) ((emacs (24 4))) "An interface to Crystal Ameba linter." single ((:commit . "8383f07d760a31a0737be9b7bdaff2f1cff67bfd") (:keywords "convenience") (:authors ("Vitalii Elenhaupt")) (:maintainer "Vitalii Elenhaupt") (:url . "https://github.com/crystal-ameba/ameba.el"))]) (flycheck-crystal . [(20180627 242) ((flycheck (30))) "Add support for Crystal to Flycheck" single ((:commit . "34124f546ff5c1136aed95bf0059015f9f6a1d60") (:keywords "tools" "crystal") (:url . "https://github.com/crystal-lang-tools/emacs-crystal-mode"))]) (crystal-mode . [(20190604 1254) ((emacs (24 4))) "Major mode for editing Crystal files" single ((:commit . "34124f546ff5c1136aed95bf0059015f9f6a1d60") (:keywords "languages" "crystal") (:url . "https://github.com/crystal-lang-tools/emacs-crystal-mode"))]) (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"))]) (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"))]) (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"))]) (alda-mode . [(20180608 605) ((emacs (24 0))) "An Alda major mode" single ((:commit . "1692b9003d2c3de403251ec452c6ce43ec819c84") (:keywords "alda" "highlight") (:authors ("Jay Kamat" . "jaygkamat@gmail.com")) (:maintainer "Jay Kamat" . "jaygkamat@gmail.com") (:url . "http://gitlab.com/jgkamat/alda-mode"))]) (cmm-mode . [(20150225 746) nil "Major mode for C-- source code" single ((:commit . "c3ad514dff3eb30434f6b20d953276d4c00de1ee"))]) (company-cabal . [(20170917 1317) ((cl-lib (0 5)) (company (0 8 0)) (emacs (24))) "company-mode cabal backend" tar ((:commit . "62112a7259e24bd6c08885629a185afe512b7d3d") (:authors ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainer "Iku Iwasa" . "iku.iwasa@gmail.com") (:url . "https://github.com/iquiw/company-cabal"))]) (company-ghci . [(20190707 311) ((company (0 8 11)) (haskell-mode (13))) "company backend which uses the current ghci process." single ((:commit . "a1d25652583ab4666c5a78cac18cd8039776b50d") (:authors ("Hector Orellana" . "hofm92@gmail.com")) (:maintainer "Hector Orellana" . "hofm92@gmail.com"))]) (company-ghc . [(20170918 833) ((cl-lib (0 5)) (company (0 8 0)) (ghc (5 4 0 0)) (emacs (24))) "company-mode ghc-mod backend" single ((:commit . "8b264b5c3c0e42c0d0c4e9315559896c9b0edfdc") (:keywords "haskell" "completion") (:authors ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainer "Iku Iwasa" . "iku.iwasa@gmail.com") (:url . "https://github.com/iquiw/company-ghc"))]) (ghc . [(20180121 1218) ((haskell-mode (13 0))) "Sub mode for Haskell mode" tar ((:commit . "391e187a5dfef4421aab2508fa6ff7875cc8259d"))]) (intero . [(20190530 1308) ((flycheck (0 25)) (company (0 8)) (emacs (24 4)) (haskell-mode (13 0))) "Complete development mode for Haskell" single ((:commit . "61caa798bd385acf918b3639cf03f336b618e78b") (:keywords "haskell" "tools") (:authors ("Chris Done" . "chrisdone@fpcomplete.com")) (:maintainer "Chris Done" . "chrisdone@fpcomplete.com") (:url . "https://github.com/commercialhaskell/intero"))]) (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"))]) (dante . [(20190818 847) ((dash (2 12 0)) (emacs (25 1)) (f (0 19 0)) (flycheck (0 30)) (company (0 9)) (haskell-mode (13 14)) (s (1 11 0)) (lcr (1 0))) "Development mode for Haskell" single ((:commit . "ebffc84c6ae60495b54dc2532216c1f28f737a21") (:keywords "haskell" "tools") (:authors ("Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com")) (:maintainer "Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com") (:url . "https://github.com/jyp/dante"))]) (attrap . [(20190805 1829) ((dash (2 12 0)) (emacs (25 1)) (f (0 19 0)) (flycheck (0 30)) (s (1 11 0))) "ATtempt To Repair At Point" single ((:commit . "25d34a6c5f13ee6de5da60f3dae25d7e4961d991") (:keywords "programming" "tools") (:authors ("Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com")) (:maintainer "Jean-Philippe Bernardy" . "jeanphilippe.bernardy@gmail.com") (:url . "https://github.com/jyp/attrap"))]) (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"))]) (flycheck-haskell . [(20181207 1646) ((emacs (24 3)) (flycheck (0 25)) (haskell-mode (13 7)) (dash (2 4 0)) (seq (1 11)) (let-alist (1 0 1))) "Flycheck: Automatic Haskell configuration" tar ((:commit . "32ddff87165a7d3a35e7318bee997b5b4bd41278") (:keywords "tools" "convenience") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com") (:url . "https://github.com/flycheck/flycheck-haskell"))]) (haskell-mode . [(20190801 50) ((emacs (24 3))) "A Haskell editing mode" tar ((:commit . "56d67ee282294c786a92e2d83c5bebf1a6d919c1") (:keywords "haskell" "cabal" "ghc" "repl") (:url . "https://github.com/haskell/haskell-mode"))]) (haskell-snippets . [(20160919 22) ((cl-lib (0 5)) (yasnippet (0 8 0))) "Yasnippets for Haskell" tar ((:commit . "07b0f460b946fd1be26c29652cb0468b47782f3a") (:keywords "snippets" "haskell") (:authors ("Luke Hoersten" . "luke@hoersten.org")) (:maintainer "Luke Hoersten" . "luke@hoersten.org") (:url . "https://github.com/haskell/haskell-snippets"))]) (helm-hoogle . [(20161027 534) ((helm (1 6 2)) (emacs (24 4))) "Use helm to navigate query results from Hoogle" single ((:commit . "73969a9d46d2121a849a01a9f7ed3636d01f7bbc") (:keywords "haskell" "programming" "hoogle") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainer "John Wiegley" . "jwiegley@gmail.com") (:url . "https://github.com/jwiegley/haskell-config"))]) (hindent . [(20180518 902) ((cl-lib (0 5))) "Indent haskell code using the \"hindent\" program" single ((:commit . "1583be4a8a01b765841f7306284528ae713abb7b") (:authors ("Chris Done" . "chrisdone@gmail.com")) (:maintainer "Chris Done" . "chrisdone@gmail.com") (:url . "https://github.com/chrisdone/hindent"))]) (hlint-refactor . [(20190115 900) nil "Apply HLint suggestions" single ((:commit . "c4307f86aad6d02e32e9b30cb6edc115584c791c") (:keywords "haskell" "refactor") (:url . "https://github.com/mpickering/hlint-refactor-mode"))]) (fuel . [(20190611 1350) ((cl-lib (0 2)) (emacs (24 2))) "Major mode for the Factor programming language." tar ((:commit . "e6eb7be61c35d4a7b7d5eeb528b582639c57f08f"))]) (drupal-mode . [(20171120 2309) ((php-mode (1 5 0))) "Advanced minor mode for Drupal development" tar ((:commit . "47fda0a38a5b197f4606137d9c3b7d44aaeaa886") (:keywords "programming" "php" "drupal") (:authors ("Arne Jørgensen" . "arne@arnested.dk")) (:maintainer "Arne Jørgensen" . "arne@arnested.dk") (:url . "https://github.com/arnested/drupal-mode"))]) (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"))]) (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"))]) (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"))]) (ac-php-core . [(20190816 548) ((dash (1)) (php-mode (1)) (s (1)) (f (0 17 0)) (popup (0 5 0)) (xcscope (1 0))) "The core library of the ac-php." tar ((:commit . "4490d168778a61a4ee8623defe760164cd9745b8") (:keywords "completion" "convenience" "intellisense") (:authors ("jim" . "xcwenn@qq.com") ("Serghei Iakovlev" . "sadhooklay@gmail.com")) (:maintainer "jim") (:url . "https://github.com/xcwen/ac-php"))]) (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"))]) (php-mode . [(20190818 932) ((emacs (24 3)) (cl-lib (0 5))) "Major mode for editing PHP code" tar ((:commit . "7e630bffd5f75c29aa98aed71e5b775651a13611") (:keywords "languages" "php") (:authors ("Eric James Michael Ritz")) (:maintainer "USAMI Kenta" . "tadsan@zonu.me") (:url . "https://github.com/emacs-php/php-mode"))]) (company-php . [(20190424 222) ((cl-lib (0 5)) (ac-php-core (2 0)) (company (0 9))) "A company back-end for PHP." single ((:commit . "4490d168778a61a4ee8623defe760164cd9745b8") (:keywords "completion" "convenience" "intellisense") (:authors ("jim" . "xcwenn@qq.com")) (:maintainer "jim") (:url . "https://github.com/xcwen/ac-php"))]) (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"))]) (ein . [(20190813 2156) ((emacs (25)) (websocket (20190620 338)) (auto-complete (1 4 0)) (request (20190621 1622)) (deferred (0 5)) (polymode (20190426 1729)) (markdown-mode (20171116 756)) (dash (2 13 0)) (s (1 11 0)) (skewer-mode (1 6 2))) "Emacs IPython Notebook" tar ((:commit . "a2872eff6c18a0706c531e9316c792a9fb99826f"))]) (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"))]) (company-lua . [(20171108 2306) ((company (0 8 12)) (s (1 10 0)) (f (0 17 0)) (lua-mode (20151025))) "Company backend for Lua" tar ((:commit . "29f6819de4d691e5fd0b62893a9f4fbc1c6fcb52") (:authors ("Peter Vasil" . "mail@petervasil.net")) (:maintainer "Peter Vasil" . "mail@petervasil.net"))]) (lua-mode . [(20190113 1050) nil "a major-mode for editing Lua scripts" tar ((:commit . "95c64bb5634035630e8c59d10d4a1d1003265743") (: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"))]) (faust-mode . [(20180205 926) nil "Faust syntax colorizer for Emacs." single ((:commit . "7c31b22bdbfd2f8c16ec117d2975d56dd61ac15c") (:keywords "languages" "faust") (:authors ("rukano" . "rukano@gmail.com")) (:maintainer "Yassin Philip" . "xaccrocheur@gmail.com") (:url . "https://github.com/rukano/emacs-faust-mode"))]) (company-shell . [(20170518 541) ((emacs (24 4)) (company (0 8 12)) (dash (2 12 0)) (cl-lib (0 5))) "Company mode backend for shell functions" single ((:commit . "6ae625f80d90e0779c79de38e8f83a336c1d00fa") (:keywords "company" "shell" "auto-completion") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/company-shell"))]) (fish-mode . [(20180827 303) ((emacs (24))) "Major mode for fish shell scripts" single ((:commit . "35fc7c1e243a7410823088a571ecf378e9f3efa6") (:keywords "fish" "shell") (:authors ("Tony Wang" . "wwwjfy@gmail.com")) (:maintainer "Tony Wang" . "wwwjfy@gmail.com"))]) (flycheck-bashate . [(20160630 440) ((flycheck (0 24)) (emacs (24 4))) "Integrate bashate with flycheck" single ((:commit . "77fa03dbc578c34fe71ca44926bac2aff8f2b021") (:authors ("Alex Murray" . "murray.alex@gmail.com")) (:maintainer "Alex Murray" . "murray.alex@gmail.com") (:url . "https://github.com/alexmurray/flycheck-bashate"))]) (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"))]) (flycheck-perl6 . [(20180509 2201) ((emacs (24 3)) (flycheck (0 22))) "Perl 6 support in Flycheck" single ((:commit . "b804702305d7a6e26f762ff98cfdeec2e9dd4cb7") (:keywords "tools" "convenience") (:authors ("Hinrik Örn Sigurðsson" . "hinrik.sig@gmail.com")) (:maintainer "Hinrik Örn Sigurðsson" . "hinrik.sig@gmail.com") (:url . "https://github.com/hinrik/flycheck-perl6"))]) (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"))]) (hierarchy . [(20190425 842) ((emacs (25 1))) "Library to create and display hierarchy structures" single ((:commit . "a1d13c40102e833192c3bd6acf930013bdcbc819") (:authors ("Damien Cassou" . "damien@cassou.me")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://github.com/DamienCassou/hierarchy"))]) (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"))]) (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 "))]) (org-ref . [(20190802 1327) ((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 . "9ab74270c1543e4743ca0436de567d8205403b43") (: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"))]) (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"))]) (helm-bibtex . [(20190814 1056) ((helm (1 5 5)) (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 Helm" tar ((:commit . "7e87161463c9c5ade3ed0e65aa3cde48c51b57de") (:authors ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de"))]) (biblio . [(20190624 1408) ((emacs (24 3)) (biblio-core (0 2))) "Browse and import bibliographic references from CrossRef, arXiv, DBLP, HAL, Dissemin, and doi.org" tar ((:commit . "efeeab720cb8e3f95ddb4298d0cc62393cf237e9"))]) (biblio-core . [(20190624 1408) ((emacs (24 3)) (let-alist (1 0 4)) (seq (1 11)) (dash (2 12 1))) "A framework for looking up and displaying bibliographic entries" single ((:commit . "efeeab720cb8e3f95ddb4298d0cc62393cf237e9") (:keywords "bib" "tex" "convenience" "hypermedia") (:authors ("Clément Pit-Claudel" . "clement.pitclaudel@live.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com") (:url . "http://github.com/cpitclaudel/biblio.el"))]) (ahk-mode . [(20190323 623) ((emacs (24 3))) "Major mode for editing AHK (AutoHotkey and AutoHotkey_L)" single ((:commit . "66e02a3b44d672787b1f13a30008801a9efca65b") (:keywords "ahk" "autohotkey" "hotkey" "keyboard shortcut" "automation") (:authors ("Rich Alesi")) (:maintainer "Rich Alesi") (:url . "https://github.com/ralesi/ahk-mode"))]) (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"))]) (adoc-mode . [(20160314 2130) ((markup-faces (1 0 0))) "a major-mode for editing AsciiDoc files in Emacs" single ((:commit . "745884359a1b8826ede2c4cfd2f0b5478953ac40") (:keywords "wp" "asciidoc") (:authors ("Florian Kaufmann" . "sensorflo@gmail.com")) (:maintainer "Florian Kaufmann" . "sensorflo@gmail.com") (:url . "https://github.com/sensorflo/adoc-mode/wiki"))]) (scala-mode . [(20170802 1132) nil "Major mode for editing Scala" tar ((:commit . "56cba2903cf6e12c715dbb5c99b34c97b2679379") (:keywords "languages") (:url . "https://github.com/ensime/emacs-scala-mode"))]) (sbt-mode . [(20180511 1622) ((emacs (24 4))) "Interactive support for sbt projects" tar ((:commit . "e658af140547cbef495c33535c7f694a501d318c") (:keywords "languages") (:url . "https://github.com/ensime/emacs-sbt-mode"))]) (swift-mode . [(20190609 507) ((emacs (24 4)) (seq (2 3))) "Major-mode for Apple's Swift programming language." tar ((:commit . "be8d7700cdbf47576d7c4e0a7e0855cce0fe9ad8") (:keywords "languages" "swift") (:url . "https://github.com/swift-emacs/swift-mode"))]) (csv-mode . [(1 7) nil "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 "\"Francis J. Wright\"" . "F.J.Wright@qmul.ac.uk"))]) (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"))]) (ess . [(20190814 1054) ((emacs (25 1)) (julia-mode (0 3))) "Emacs Speaks Statistics" tar ((:commit . "0f725b7f0cd92b968cf980ec6159b52fbe5793fa") (:authors ("David Smith" . "dsmith@stats.adelaide.edu.au") ("A.J. Rossini" . "blindglobe@gmail.com") ("Richard M. Heiberger" . "rmh@temple.edu") ("Kurt Hornik" . "Kurt.Hornik@R-project.org") ("Martin Maechler" . "maechler@stat.math.ethz.ch") ("Rodney A. Sparapani" . "rsparapa@mcw.edu") ("Stephen Eglen" . "stephen@gnu.org") ("Sebastian P. Luque" . "spluque@gmail.com") ("Henning Redestig" . "henning.red@googlemail.com") ("Vitalie Spinu" . "spinuvit@gmail.com") ("Lionel Henry" . "lionel.hry@gmail.com") ("J. Alexander Branham" . "alex.branham@gmail.com")) (:maintainer "ESS Core Team" . "ESS-core@r-project.org") (:url . "https://ess.r-project.org/"))]) (ctable . [(20171006 11) nil "Table component for Emacs Lisp" single ((:commit . "b8830d1ca95abb100a81bc32011bd17d5ecba000") (:keywords "table") (:authors ("SAKURAI Masashi ")) (:maintainer "SAKURAI Masashi ") (:url . "https://github.com/kiwanami/emacs-ctable"))]) (ess-R-data-view . [(20130509 1158) ((ctable (20130313 1743)) (popup (20130324 1305)) (ess (20130225 1754))) "Data viewer for GNU R" single ((:commit . "d6e98d3ae1e2a2ea39a56eebcdb73e99d29562e9") (:keywords "convenience") (:authors ("myuhe ")) (:maintainer "myuhe") (:url . "https://github.com/myuhe/ess-R-data-view.el"))]) (golden-ratio . [(20150819 1120) nil "Automatic resizing of Emacs windows to the golden ratio" single ((:commit . "72b028808b41d23fa3f7e8c0d23d2c475e7b46ae") (:keywords "window" "resizing") (:authors ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainer "Roman Gonzalez" . "romanandreg@gmail.com"))]) (graphviz-dot-mode . [(20181118 551) nil "Mode for the dot-language used by graphviz (att)." single ((:commit . "243de72e09ddd5cdc4863613af8b749827a5e1cd") (:keywords "mode" "dot" "dot-language" "dotlanguage" "graphviz" "graphs" "att") (:maintainer "Pieter Pareit" . "pieter.pareit@gmail.com") (:url . "http://ppareit.github.com/graphviz-dot-mode/"))]) (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"))]) (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"))]) (csharp-mode . [(20190717 1024) nil "C# mode derived mode" single ((:commit . "e7e96e3b0cb69d98b4e12eda269719c9b23453ed") (:keywords "c#" "languages" "oop" "mode") (:authors ("Dylan R. E. Moonfire (original)")) (:maintainer "Jostein Kjønigsen" . "jostein@gmail.com") (:url . "https://github.com/josteink/csharp-mode"))]) (omnisharp . [(20190809 341) ((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 . "b5afa053c8d3771d5567538bae89a03cc66e826c") (: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"))]) (ttl-mode . [(20160505 832) nil "mode for Turtle (and Notation 3)" single nil]) (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"))]) (julia-mode . [(20190813 1326) nil "Major mode for editing Julia source code" tar ((:commit . "db84928742b3e4189dcc81997e4a3cad3eac7b68") (:keywords "languages") (:url . "https://github.com/JuliaLang/julia"))]) (julia-repl . [(20190420 1455) ((emacs (25))) "A minor mode for a Julia REPL" single ((:commit . "71380e8139e28ea527a85ddb9146f2980d62c1f8") (:keywords "languages") (:authors ("Tamas Papp" . "tkpapp@gmail.com")) (:maintainer "Tamas Papp" . "tkpapp@gmail.com") (:url . "https://github.com/tpapp/julia-repl"))]) (company-lsp . [(20190612 1553) ((emacs (25 1)) (lsp-mode (6 0)) (company (0 9 0)) (s (1 2 0)) (dash (2 11 0))) "Company completion backend for lsp-mode." single ((:commit . "f921ffa0cdc542c21dc3dd85f2c93df4288e83bd") (:url . "https://github.com/tigersoldier/company-lsp"))]) (evil-surround . [(20190403 418) ((evil (1 2 12))) "emulate surround.vim from Vim" single ((:commit . "5ad01dfa86424c4b22cd1dfa375f13bd8c656f43") (:keywords "emulation" "vi" "evil") (:authors ("Tim Harper ") ("Vegard Øye ")) (:maintainer "Tim Harper "))]) (groovy-imports . [(20161003 851) ((emacs (24 4)) (s (1 10 0)) (pcache (0 3 2))) "Code for dealing with Groovy imports" single ((:commit . "e56d7dda617555ec6205644d32ffddf2e1fa43d9") (:keywords "groovy") (:authors ("Miro Bezjak")) (:maintainer "Miro Bezjak") (:url . "http://www.github.com/mbezjak/emacs-groovy-imports"))]) (groovy-mode . [(20190407 2314) ((s (1 12 0)) (emacs (24 3)) (dash (2 13 0))) "Major mode for Groovy source files" tar ((:commit . "aa531c659758b896ff8fbd307080ce0d1d04ebfb") (:keywords "languages") (:authors ("Russel Winder" . "russel@winder.org.uk") ("Jim Morris" . "morris@wolfman.com") ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Russel Winder" . "russel@winder.org.uk"))]) (coffee-mode . [(20170324 940) ((emacs (24 3))) "Major mode for CoffeeScript code" single ((:commit . "86ab8aae8662e8eff54d3013010b9c693b16eac5") (:keywords "coffeescript" "major" "mode") (:authors ("Chris Wanstrath" . "chris@ozmm.org")) (:maintainer "Chris Wanstrath" . "chris@ozmm.org") (:url . "http://github.com/defunkt/coffee-mode"))]) (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"))]) (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"))]) (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"))]) (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"))]) (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"))]) (nodejs-repl . [(20190616 1753) nil "Run Node.js REPL" single ((:commit . "d43b8b276a90ccf980150a7d6fbb1f4d2a7cbe20") (:authors ("Takeshi Arabiki")) (:maintainer "Takeshi Arabiki"))]) (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/"))]) (skewer-mode . [(20180706 1807) ((simple-httpd (1 4 0)) (js2-mode (20090723)) (emacs (24))) "live browser JavaScript, CSS, and HTML interaction" tar ((:commit . "a381049acc4fa2087615b4b3b26c0865841386bd"))]) (forth-mode . [(20170527 1930) nil "Programming language mode for Forth" tar ((:commit . "522256d98d1a909983bcfd3ae20c65226d5929b6") (:keywords "languages" "forth") (:authors ("Lars Brinkhoff" . "lars@nocrew.org")) (:maintainer "Lars Brinkhoff" . "lars@nocrew.org") (:url . "http://github.com/larsbrinkhoff/forth-mode"))]) (company-math . [(20190507 2006) ((company (0 8 0)) (math-symbol-lists (1 2))) "Completion backends for unicode math symbols and latex tags" single ((:commit . "600e49449644f6835f9dc3501bc58461999e8ab9") (:keywords "unicode" "symbols" "completion") (:authors ("Vitalie Spinu" . "spinuvit@gmail.com")) (:maintainer "Vitalie Spinu" . "spinuvit@gmail.com") (:url . "https://github.com/vspinu/company-math"))]) (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"))]) (company-coq . [(20190425 1851) ((company-math (1 1)) (company (0 8 12)) (yasnippet (0 11 0)) (dash (2 12 1)) (cl-lib (0 5))) "A collection of extensions for Proof General's Coq mode" tar ((:commit . "779dabd2925fc786dc278270a20f2ff05a3c673c"))]) (proof-general . [(20190821 848) ((emacs (24 3))) "A generic front-end for proof assistants (interactive theorem provers)" tar ((:commit . "d53ded580e30d49e7a783280fd9ba96bc9c1c39c"))]) (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"))]) (flycheck-pact . [(20180920 2052) ((emacs (24 3)) (flycheck (0 25)) (pact-mode (0 0 4))) "Flycheck support for pact-mode" single ((:commit . "0e10045064ef89ec8b6f5a473073d47b976a2ca3") (:keywords "pact" "lisp" "languages" "blockchain" "smartcontracts" "tools" "linting") (:authors ("Stuart Popejoy")) (:maintainer "Stuart Popejoy" . "stuart@kadena.io") (:url . "http://github.com/kadena-io/flycheck-pact"))]) (pact-mode . [(20190710 1817) ((emacs (24 3))) "Mode for Pact, a LISPlike smart contract language." single ((:commit . "5df7032cf9b61ae5aff36ac7d2a23b2ab0e00904") (: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"))]) (company-dcd . [(20190116 256) ((company (0 9)) (flycheck-dmd-dub (0 7)) (yasnippet (0 8)) (popwin (0 7)) (cl-lib (0 5)) (ivy (20160804 326))) "Company backend for Dlang using DCD." single ((:commit . "11e90949e546fcff1b1cd40887ad7b6701aa1653") (:keywords "languages") (:authors ("tsukimizake ")) (:maintainer "tsukimizake ") (:url . "http://github.com/tsukimizake/company-dcd"))]) (d-mode . [(20181205 607) ((emacs (24 3))) "D Programming Language major mode for (X)Emacs" single ((:commit . "b5d936dfd4c1d0b68a0d911aadd4ba25df7af0e4") (:keywords "d" "programming" "language" "emacs" "cc-mode") (:authors ("William Baxter")) (:maintainer "Russel Winder" . "russel@winder.org.uk"))]) (flycheck-dmd-dub . [(20180625 1635) ((flycheck (0 24)) (f (0 18 2))) "Sets flycheck-dmd-include-paths from dub package information" single ((:commit . "d7df2895d7d27cc39916816e3c32a60ce0e1d2d9") (:keywords "languages") (:authors ("Atila Neves" . "atila.neves@gmail.com")) (:maintainer "Atila Neves" . "atila.neves@gmail.com") (:url . "http://github.com/atilaneves/flycheck-dmd-dub"))]) (auto-complete-rst . [(20140225 944) ((auto-complete (1 4))) "Auto-complete extension for ReST and Sphinx" tar ((:commit . "4803ce41a96224e6fa54e6741a5b5f40ebed7351") (:authors ("ARAKAKI, Takafumi")) (:maintainer "ARAKAKI, Takafumi") (:url . "https://github.com/tkf/auto-complete-rst"))]) (auto-highlight-symbol . [(20130313 943) nil "Automatic highlighting current symbol minor mode" single ((:commit . "26573de912d760e04321b350897aea70958cee8b") (:keywords "highlight" "face" "match" "convenience") (:authors ("Mitsuo Saito" . "arch320@NOSPAM.gmail.com")) (:maintainer "Mitsuo Saito" . "arch320@NOSPAM.gmail.com") (:url . "http://github.com/gennad/auto-highlight-symbol/raw/master/auto-highlight-symbol.el"))]) (common-lisp-snippets . [(20180226 1523) ((yasnippet (0 8 0))) "Yasnippets for Common Lisp" tar ((:commit . "c82ebf18f4ad49f390dd96ffcc59f8683c1a868b") (:keywords "snippets") (:authors ("Mark Karpov" . "markkarpov92@gmail.com")) (:maintainer "Mark Karpov" . "markkarpov92@gmail.com") (:url . "https://github.com/mrkkrp/common-lisp-snippets"))]) (slime . [(20190818 1634) ((cl-lib (0 5)) (macrostep (0 9))) "Superior Lisp Interaction Mode for Emacs" tar ((:commit . "cbab3e9a1bc4f1a03ee21f392a499f01333af816") (:keywords "languages" "lisp" "slime") (:url . "https://github.com/slime/slime"))]) (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"))]) (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"))]) (protobuf-mode . [(20170526 1650) nil "major mode for editing protocol buffers." single ((:commit . "63e4a3ecc956cbab6714b25e8b868765ea7e6fe5") (:keywords "google" "protobuf" "languages") (:authors ("Alexandre Vassalotti" . "alexandre@peadrop.com")) (:maintainer "Alexandre Vassalotti" . "alexandre@peadrop.com"))]) (bundler . [(20190701 1013) ((inf-ruby (2 1)) (cl-lib (0 5))) "Interact with Bundler from Emacs" single ((:commit . "05a91d68e21e129b6c4d5462c888ea249c2ea001") (:keywords "bundler" "ruby") (:authors ("Tobias Svensson" . "tob@tobiassvensson.co.uk")) (:maintainer "Tobias Svensson" . "tob@tobiassvensson.co.uk") (:url . "http://github.com/endofunky/bundler.el"))]) (chruby . [(20180114 1652) ((cl-lib (0 5))) "Emacs integration for chruby" single ((:commit . "42bc6d521f832eca8e2ba210f30d03ad5529788f") (:keywords "languages") (:authors ("Arne Brasseur" . "arne@arnebrasseur.net")) (:maintainer "Arne Brasseur" . "arne@arnebrasseur.net") (:url . "https://github.com/plexus/chruby.el"))]) (enh-ruby-mode . [(20190513 254) ((emacs (24 3))) "Major mode for editing Ruby files" tar ((:commit . "f334c42986e93c60fba144d732becfcbdb13bb7d") (:keywords "languages" "elisp" "ruby") (:authors ("Geoff Jacobsen")) (:maintainer "Ryan Davis") (:url . "http://github.com/zenspider/Enhanced-Ruby-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"))]) (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"))]) (inf-ruby . [(20190609 1126) nil "Run a Ruby process in a buffer" single ((:commit . "928b1dd2c24c62be1900476cb4b7219eb2350856") (: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"))]) (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"))]) (rspec-mode . [(20190609 1123) ((ruby-mode (1 0)) (cl-lib (0 4))) "Enhance ruby-mode for RSpec" tar ((:commit . "bc2618a71e0bbef60258cf59bad0796f469a2685") (:keywords "rspec" "ruby") (:authors ("Peter Williams, et al.")) (:maintainer "Peter Williams, et al.") (:url . "http://github.com/pezra/rspec-mode"))]) (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"))]) (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"))]) (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-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"))]) (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"))]) (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-tools . [(20151209 1615) nil "Collection of handy functions for ruby-mode." tar ((:commit . "6b97066b58a4f82eb2ecea6434a0a7e981aa4c18"))]) (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"))]) (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"))]) (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"))]) (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"))]) (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"))]) (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"))]) (browse-at-remote . [(20190213 1929) ((f (0 17 2)) (s (1 9 0)) (cl-lib (0 5))) "Open github/gitlab/bitbucket/stash/gist/phab/sourcehut page from Emacs" single ((:commit . "1a9392e9d1fad4e1aafb25b68b4e6857fde8f564") (:keywords "github" "gitlab" "bitbucket" "gist" "stash" "phabricator" "sourcehut") (:authors ("Rustem Muslimov" . "r.muslimov@gmail.com")) (:maintainer "Rustem Muslimov" . "r.muslimov@gmail.com"))]) (diff-hl . [(20190707 2243) ((cl-lib (0 2)) (emacs (24 3))) "Highlight uncommitted changes using VC" tar ((:commit . "374b1d4b34876219218da7a539e7301259b56958") (:keywords "vc" "diff") (:authors ("Dmitry Gutov" . "dgutov@yandex.ru")) (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru") (:url . "https://github.com/dgutov/diff-hl"))]) (git-gutter . [(20161105 1356) ((emacs (24 3))) "Port of Sublime Text plugin GitGutter" single ((:commit . "00c05264af046b5ce248e5b0bc42f117d9c27a09") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-git-gutter"))]) (git-gutter-fringe . [(20170113 533) ((git-gutter (0 88)) (fringe-helper (0 1 1)) (cl-lib (0 5)) (emacs (24))) "Fringe version of git-gutter.el" single ((:commit . "16226caab44174301f1659f7bf8cc67a76153445") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-git-gutter-fringe"))]) (fringe-helper . [(20140620 2109) nil "helper functions for fringe bitmaps" single ((:commit . "ef4a9c023bae18ec1ddd7265f1f2d6d2e775efdd") (:keywords "lisp") (:authors ("Nikolaj Schumacher ")) (:maintainer "Nikolaj Schumacher ") (:url . "http://nschum.de/src/emacs/fringe-helper/"))]) (git-gutter+ . [(20151204 1723) ((git-commit (0)) (dash (0))) "Manage Git hunks straight from the buffer" single ((:commit . "b7726997806d9a2da9fe84ff00ecf21d62b6f975") (:keywords "git" "vc") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/nonsequitur/git-gutter-plus"))]) (git-gutter-fringe+ . [(20140729 1103) ((git-gutter+ (0 1)) (fringe-helper (1 0 1))) "Fringe version of git-gutter+.el" single ((:commit . "7a2f49d2455a3a872e90e5f7dd4e6b27f1d96cfc") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/nonsequitur/git-gutter-fringe-plus"))]) (ghub . [(20190806 959) ((emacs (25 1)) (dash (2 14 1)) (let-alist (1 0 5)) (treepy (0 1 1))) "Minuscule client libraries for Git forge APIs." tar ((:commit . "7d59937d7782d0062216130a4d059b45e8396f82"))]) (closql . [(20190731 1450) ((emacs (25 1)) (emacsql-sqlite (3 0 0))) "store EIEIO objects using EmacSQL" single ((:commit . "70b98dbae53611d10a461d9b4a6f71086910dcef") (:keywords "extensions") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/emacscollective/closql"))]) (emacsql-sqlite . [(20190727 1710) ((emacs (25 1)) (emacsql (2 0 0))) "EmacSQL back-end for SQLite" tar ((:commit . "a118b6c95af1306f0288a383d274b5dd93efbbda") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/emacsql"))]) (emacsql . [(20190625 1859) ((emacs (25 1))) "high-level SQL database front-end" tar ((:commit . "a118b6c95af1306f0288a383d274b5dd93efbbda") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/emacsql"))]) (treepy . [(20180724 656) ((emacs (25 1))) "Generic tree traversal tools" single ((:commit . "b40e6b09eb9be45da67b8c9e4990a5a0d7a2a09d") (:keywords "lisp" "maint" "tools") (:authors ("Daniel Barreto" . "daniel.barreto.n@gmail.com")) (:maintainer "Daniel Barreto" . "daniel.barreto.n@gmail.com") (:url . "https://github.com/volrath/treepy.el"))]) (forge . [(20190820 826) ((emacs (25 1)) (closql (1 0 0)) (dash (2 14 1)) (emacsql-sqlite (3 0 0)) (ghub (20190319)) (let-alist (1 0 5)) (magit (20190408)) (markdown-mode (2 3)) (transient (0 1 0))) "Access Git forges from Magit." tar ((:commit . "6c43971a78a08954c20992cb6b0e98a7e7295908"))]) (gist . [(20171128 406) ((emacs (24 1)) (gh (0 10 0))) "Emacs integration for gist.github.com" single ((:commit . "314fe6ab80fae35b95f0734eceb82f72813b6f41") (:keywords "tools") (:authors ("Yann Hodique" . "yann.hodique@gmail.com")) (:maintainer "Yann Hodique" . "yann.hodique@gmail.com") (:url . "https://github.com/defunkt/gist.el"))]) (github-clone . [(20160623 310) ((gh (0 7 2)) (magit (2 1 0)) (emacs (24 4))) "Fork and clone github repos" single ((:commit . "467b40ca60a6c26257466ebc43c74414df7f19cc") (:keywords "vc" "tools") (:authors ("Charles L.G. Comstock" . "dgtized@gmail.com")) (:maintainer "Charles L.G. Comstock" . "dgtized@gmail.com") (:url . "https://github.com/dgtized/github-clone.el"))]) (gh . [(20180308 2138) ((emacs (24 3)) (pcache (0 4 1)) (logito (0 1)) (marshal (0 6 3))) "A GitHub library for Emacs" tar ((:commit . "f029fc11f345ef04ab62ee91c38657e29c462fea"))]) (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"))]) (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"))]) (github-search . [(20190624 436) ((magit (0 8 1)) (gh (1 0 0))) "Clone repositories by searching github" single ((:commit . "b73efaf19491010522b09db35bb0f1bad1620e63") (:keywords "github" "search" "clone" "api" "gh" "magit" "vc" "tools") (:authors ("Ivan Malison" . "IvanMalison@gmail.com")) (:maintainer "Ivan Malison" . "IvanMalison@gmail.com") (:url . "https://github.com/IvanMalison/github-search"))]) (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"))]) (evil-magit . [(20190620 153) ((evil (1 2 3)) (magit (2 6 0))) "evil-based key bindings for magit" single ((:commit . "6a32e4359cbd2803bafb7134cb6df312644ac986") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainer "Justin Burkett" . "justin@burkett.cc") (:url . "https://github.com/justbur/evil-magit"))]) (fill-column-indicator . [(20171209 1924) nil "Graphically indicate the fill column" single ((:commit . "a284bb50789c97d7ef9021214260b3ce7cc220e3") (:keywords "convenience") (:authors ("Alp Aker" . "alp.tekin.aker@gmail.com")) (:maintainer "Alp Aker" . "alp.tekin.aker@gmail.com"))]) (gitattributes-mode . [(20180318 1956) nil "Major mode for editing .gitattributes files" single ((:commit . "33c6a116a5b298e20eb39ebb154a51c4dd37c06d") (:keywords "convenience" "vc" "git") (:authors ("Rüdiger Sonderfeld" . "ruediger@c-plusplus.net")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/git-modes"))]) (gitconfig-mode . [(20180318 1956) nil "Major mode for editing .gitconfig files" single ((:commit . "33c6a116a5b298e20eb39ebb154a51c4dd37c06d") (:keywords "convenience" "vc" "git") (:authors ("Sebastian Wiesner" . "lunaryorn@gmail.com")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/git-modes"))]) (gitignore-templates . [(20180327 1326) ((emacs (24 3))) "Access GitHub .gitignore templates" single ((:commit . "b0705b8de4cbdd631c64c4e0024d62ba4ad68052") (:keywords "tools") (:authors ("Xu Chunyang" . "mail@xuchunyang.me")) (:maintainer "Xu Chunyang" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/gitignore-templates.el"))]) (git-link . [(20190817 302) ((emacs (24 3))) "Get the GitHub/Bitbucket/GitLab URL for a buffer location" single ((:commit . "b5ff7671dbb912e723503984c70402fe3a773a62") (:keywords "git" "vc" "github" "bitbucket" "gitlab" "sourcehut" "convenience") (:authors ("Skye Shaw" . "skye.shaw@gmail.com")) (:maintainer "Skye Shaw" . "skye.shaw@gmail.com") (:url . "http://github.com/sshaw/git-link"))]) (git-messenger . [(20170102 440) ((emacs (24 3)) (popup (0 5 0))) "Pop up last commit information of current line" single ((:commit . "83815915eb8c1cb47443ff34bca3fecf7d2edf3a") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-git-messenger"))]) (git-timemachine . [(20190730 849) ((emacs (24 3)) (transient (0 1 0))) "Walk through git revisions of a file" single ((:commit . "391eb61050de321101e631fcf373fc70ec6e7700") (:keywords "vc") (:authors ("Peter Stiernström" . "peter@stiernstrom.se")) (:maintainer "Peter Stiernström" . "peter@stiernstrom.se") (:url . "https://gitlab.com/pidu/git-timemachine"))]) (helm-git-grep . [(20170614 1411) ((helm-core (2 2 0))) "helm for git grep, an incremental git-grep(1)" single ((:commit . "744cea07dba6e6a5effbdba83f1b786c78fd86d3") (:authors ("mechairoi")) (:maintainer "Yasuyuki Oka" . "yasuyk@gmail.com") (:url . "https://github.com/yasuyk/helm-git-grep"))]) (gitignore-mode . [(20180318 1956) nil "Major mode for editing .gitignore files" single ((:commit . "33c6a116a5b298e20eb39ebb154a51c4dd37c06d") (:keywords "convenience" "vc" "git") (:authors ("Sebastian Wiesner" . "lunaryorn@gmail.com")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/git-modes"))]) (helm-gitignore . [(20170211 8) ((gitignore-mode (1 1 0)) (helm (1 7 0)) (request (0 1 0)) (cl-lib (0 5))) "Generate .gitignore files with gitignore.io." single ((:commit . "2a2e7da7855a6db0ab3bb6a6a087863d7abd4391") (:keywords "helm" "gitignore" "gitignore.io") (:authors ("Juan Placencia")) (:maintainer "Juan Placencia") (:url . "https://github.com/jupl/helm-gitignore"))]) (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-svn . [(20190324 1459) ((emacs (24 4)) (magit (2 1 0))) "Git-Svn extension for Magit" single ((:commit . "f7dad9b0f6b81b23550ea5cca0f3219f184b746c") (:keywords "vc" "tools") (:authors ("Phil Jackson" . "phil@shellarchive.co.uk")) (:maintainer "Phil Jackson" . "phil@shellarchive.co.uk"))]) (magit . [(20190819 1414) ((emacs (25 1)) (async (20180527)) (dash (20180910)) (git-commit (20181104)) (transient (20190528)) (with-editor (20181103))) "A Git porcelain inside Emacs." tar ((:commit . "546a9c33715f12a9b1101eca22b070004c9c6392") (:keywords "git" "tools" "vc"))]) (git-commit . [(20190717 29) ((emacs (25 1)) (dash (20180910)) (with-editor (20181103))) "Edit Git commit messages" single ((:commit . "546a9c33715f12a9b1101eca22b070004c9c6392") (:keywords "git" "tools" "vc") (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/magit"))]) (orgit . [(20190717 1526) ((emacs (25 1)) (dash (2 14 1)) (magit (2 90 0)) (org (9 3))) "support for Org links to Magit buffers" single ((:commit . "1e578f8cf97b07835f02858f05a094ae9a5e99bb") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/orgit"))]) (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"))]) (transient . [(20190812 1336) ((emacs (25 1)) (dash (2 15 0))) "Transient commands" tar ((:commit . "9fb3f797f10fd069c2bffa7a3ead746aa53d1a25") (:keywords "bindings") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/transient"))]) (afternoon-theme . [(20140104 1859) ((emacs (24 1))) "Dark color theme with a deep blue background" single ((:commit . "89b1d778a1f8b385775c122f2bd1c62f0fbf931a") (:keywords "themes") (:authors ("Ozan Sener" . "ozan@ozansener.com")) (:maintainer "Ozan Sener" . "ozan@ozansener.com") (:url . "http://github.com/osener/emacs-afternoon-theme"))]) (alect-themes . [(20190506 1440) ((emacs (24 0))) "Configurable light, dark and black themes for Emacs 24 or later" tar ((:commit . "da7305075d292cc1909bf26dc5634bc3cc8d2603") (:keywords "color" "theme") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:url . "https://github.com/alezost/alect-themes"))]) (ample-theme . [(20180207 1745) nil "Calm Dark Theme for Emacs" tar ((:commit . "536966adf882446165a1f756830028faa792c7a9") (:keywords "theme" "dark") (:authors ("Jordon Biondo" . "jordonbiondo@gmail.com")) (:maintainer "Jordon Biondo" . "jordonbiondo@gmail.com") (:url . "https://github.com/jordonbiondo/ample-theme"))]) (ample-zen-theme . [(20150119 2154) nil "AmpleZen Theme for Emacs 24" single ((:commit . "b277bb7abd4b6624e8d59f02474b79af50a007bd") (:keywords "theme" "dark" "emacs 24") (:authors ("Michael Wall")) (:maintainer "Michael Wall") (:url . "https://github.com/mjwall/ample-zen"))]) (apropospriate-theme . [(20190724 1729) nil "A colorful, low-contrast, light & dark theme set for Emacs with a fun name." tar ((:commit . "c46432a5559630380abee9ead387eba2db28ad15") (:keywords "color" "theme") (:url . "https://github.com/waymondo/apropospriate-theme"))]) (anti-zenburn-theme . [(20180712 1838) nil "Low-contrast Zenburn-inverted theme" single ((:commit . "dbafbaa86be67c1d409873f57a5c0bbe1e7ca158") (:authors ("Andrey Kotlarski" . "m00naticus@gmail.com")) (:maintainer "Andrey Kotlarski" . "m00naticus@gmail.com") (:url . "https://github.com/m00natic/anti-zenburn-theme"))]) (badwolf-theme . [(20161004 715) ((emacs (24))) "Bad Wolf color theme" single ((:commit . "ea01a3d9358e968f75e3ed15dec6a2a96ce3d9a1") (:keywords "themes") (:authors ("bkruczyk" . "bartlomiej.kruczyk@gmail.com")) (:maintainer "bkruczyk" . "bartlomiej.kruczyk@gmail.com") (:url . "https://github.com/bkruczyk/badwolf-emacs"))]) (birds-of-paradise-plus-theme . [(20130419 2129) nil "A brown/orange light-on-dark theme for Emacs 24 (deftheme)." single ((:commit . "bb9f9d4ef7f7872a388ec4eee1253069adcadb6f") (:keywords "themes") (:authors ("Jim Myhrberg" . "contact@jimeh.me")) (:maintainer "Jim Myhrberg" . "contact@jimeh.me") (:url . "https://github.com/jimeh/birds-of-paradise-plus-theme.el"))]) (bubbleberry-theme . [(20141017 944) ((emacs (24 1))) "A theme based on LightTable for Emacs24" single ((:commit . "22e9adf4586414024e4592972022ec297321b320") (:authors ("Jason Milkins" . "jasonm23@gmail.com") ("Gaurav Giri github.com/grvgr")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:url . "https://github.com/jasonm23/emacs-bubbleberry-theme"))]) (busybee-theme . [(20170719 928) nil "port of vim's mustang theme" single ((:commit . "66b2315b030582d0ebee605cf455d386d8c30fcd") (:authors ("martin haesler")) (:maintainer "martin haesler") (:url . "http://github.com/mswift42/busybee-theme"))]) (cherry-blossom-theme . [(20150622 342) ((emacs (24 0))) "a soothing color theme for Emacs24." single ((:commit . "eea7653e00f35973857ee23b27bc2fae5e753e50") (:authors ("Ben Yelsey" . "byelsey1@gmail.com")) (:maintainer "Ben Yelsey" . "byelsey1@gmail.com") (:url . "https://github.com/inlinestyle/emacs-cherry-blossom-theme"))]) (chocolate-theme . [(20190818 756) ((emacs (24 1)) (autothemer (0 2))) "A dark chocolaty theme" single ((:commit . "7de46341adcc7a5eaafcddc0d3a9d63274f5e9c7") (:url . "http://github.com/SavchenkoValeriy/emacs-chocolate-theme"))]) (clues-theme . [(20161213 1127) ((emacs (24 0))) "an Emacs 24 theme which may well be fully awesome..." single ((:commit . "abd61f2b7f3e98de58ca26e6d1230e70c6406cc7") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:url . "https://github.com/emacsfodder/emacs-clues-theme"))]) (color-theme-sanityinc-solarized . [(20190206 59) ((cl-lib (0 6))) "A version of Ethan Schoonover's Solarized themes" tar ((:commit . "54daf1e5a0fbee6682cade1f59171daf185239e3") (:keywords "faces" "themes") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "http://github.com/purcell/color-theme-sanityinc-solarized"))]) (color-theme-sanityinc-tomorrow . [(20190819 2324) nil "A version of Chris Kempson's \"tomorrow\" themes" tar ((:commit . "596c3fdc422cb2886b93e65596a478475475b0be") (:keywords "faces" "themes") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "http://github.com/purcell/color-theme-sanityinc-tomorrow"))]) (cyberpunk-theme . [(20190717 1509) nil "Cyberpunk Color Theme" single ((:commit . "9779fc4c9f89b14c8c8bb238dd4ed6428ed30ba9") (:keywords "color" "theme" "cyberpunk") (:authors ("Nicholas M. Van Horn" . "nvanhorn@protonmail.com")) (:maintainer "Nicholas M. Van Horn" . "nvanhorn@protonmail.com") (:url . "https://github.com/n3mo/cyberpunk-theme.el"))]) (dakrone-theme . [(20170801 1933) nil "dakrone's custom dark theme" single ((:commit . "232ad1be5f3572dcbdf528f1655109aa355a6937") (:keywords "color" "themes") (:authors ("Lee Hinman ")) (:maintainer "Lee Hinman ") (:url . "https://github.com/dakrone/dakrone-theme"))]) (darkburn-theme . [(20170423 1652) nil "A not-so-low contrast color theme for Emacs." single ((:commit . "0af794ff7fac19778ac8a7efb92455c6f6c2158f") (:authors ("Jonas Gorauskas" . "jgorauskas@gmail.com")) (:maintainer "Jonas Gorauskas" . "jgorauskas@gmail.com") (:url . "http://github.com/gorauskas/darkburn-theme"))]) (darkmine-theme . [(20160406 624) nil "Yet another emacs dark color theme." single ((:commit . "7f7e82ca03bcad52911fa41fb3e204e32d6ee63e") (:authors ("Pierre Lecocq" . "pierre.lecocq@gmail.com")) (:maintainer "Pierre Lecocq" . "pierre.lecocq@gmail.com") (:url . "https://github.com/pierre-lecocq/darkmine-theme"))]) (darkokai-theme . [(20190603 1919) nil "A darker variant on Monokai." single ((:commit . "a53815fbfb06604d7f51519c62cc11e507204a70") (:url . "http://github.com/sjrmanning/darkokai"))]) (darktooth-theme . [(20190412 142) ((autothemer (0 2))) "From the darkness... it watches" single ((:commit . "5cc7fbfb08d2f1a33b85eac92b6450407b915119") (:url . "http://github.com/emacsfodder/emacs-theme-darktooth"))]) (django-theme . [(20131022 902) nil "Custom face theme for Emacs" single ((:commit . "86c8142b3eb1addd94a43aa6f1d98dab06401af0") (:authors ("Andrzej Sliwa")) (:maintainer "Andrzej Sliwa") (:url . "http://github/anrzejsliwa/django-theme"))]) (doom-themes . [(20190819 1549) ((emacs (25 1)) (cl-lib (0 5))) "an opinionated pack of modern color-themes" tar ((:commit . "9dddab2091a5e087dc5de725142463abae1ab5ff") (:keywords "dark" "light" "blue" "atom" "one" "theme" "neotree" "icons" "faces" "nova") (:authors ("Henrik Lissner ")) (:maintainer "Henrik Lissner" . "henrik@lissner.net") (:url . "https://github.com/hlissner/emacs-doom-theme"))]) (dracula-theme . [(20190107 2016) ((emacs (24))) "Dracula Theme" single ((:commit . "66e429f4d576346661ae3a111bafaa06febc1d94") (:authors ("film42")) (:maintainer "film42") (:url . "https://github.com/dracula/emacs"))]) (spacemacs-theme . [(20190820 816) nil "Color theme with a dark and light versions" tar ((:commit . "32ddc1a9b9f4f58ebe8410abc1124b7acf0f36b1") (:keywords "color" "theme") (:url . "https://github.com/nashamri/spacemacs-theme"))]) (ewal . [(20190820 1702) ((emacs (25))) "A pywal-based theme generator" tar ((:commit . "3ddb2be48892185dfdbf2753ee97572ddc5a83d7") (:keywords "faces") (:authors ("Uros Perisic")) (:maintainer "Uros Perisic") (:url . "https://gitlab.com/jjzmajic/ewal"))]) (ewal-spacemacs-themes . [(20190821 451) ((emacs (25)) (ewal (0 1)) (spacemacs-theme (0 1))) "An `ewal'-based theme" tar ((:commit . "5a34be048759549937f7c701ec529b0e2d1b5798") (:keywords "faces") (:authors ("Uros Perisic")) (:maintainer "Uros Perisic") (:url . "https://gitlab.com/jjzmajic/ewal"))]) (espresso-theme . [(20181025 826) nil "Espresso Tutti Colori port for Emacs" single ((:commit . "d2fa034eb833bf37cc6842017070725e0da9b046") (:authors ("Martin Kühl ")) (:maintainer "Martin Kühl ") (:url . "https://github.com/dgutov/espresso-theme"))]) (exotica-theme . [(20180212 2329) ((emacs (24))) "A dark theme with vibrant colors" single ((:commit . "ff3ef4f6fa38c93b99becad977c7810c990a4d2f") (:keywords "faces" "theme" "dark" "vibrant colors") (:authors ("Bharat Joshi" . "jbharat@outlook.com")) (:maintainer "Bharat Joshi" . "jbharat@outlook.com") (:url . "https://github.com/jbharat/exotica-theme"))]) (eziam-theme . [(20190720 1720) nil "A mostly monochrome theme, inspired by Tao and Leuven, with dark and light versions." tar ((:commit . "a0cafce1c49f3830fe96dacd49f4732b53166603"))]) (farmhouse-theme . [(20160713 2244) nil "Farmhouse Theme, Emacs edition" tar ((:commit . "7ddc1ff13b4a3d5466bd0d33ecb86100352e83a7") (:keywords "color" "theme") (:url . "https://github.com/mattly/emacs-farmhouse-theme"))]) (flatland-theme . [(20171113 1521) nil "A simple theme for Emacs based on the Flatland theme for Sublime Text" single ((:commit . "a98a6f19ad4dff0fa3fad1ea487b7d0ef634a19a") (:authors ("Greg Chapple" . "info@gregchapple.com")) (:maintainer "Greg Chapple" . "info@gregchapple.com") (:url . "http://github.com/gregchapple/flatland-emacs"))]) (flatui-theme . [(20160619 127) nil "A color theme for Emacs based on flatuicolors.com" single ((:commit . "9c15db5526c15c8dba55023f5698372b19c2a780") (:authors ("John Louis Del Rosario" . "john2x@gmail.com")) (:maintainer "John Louis Del Rosario" . "john2x@gmail.com") (:url . "https://github.com/john2x/flatui-theme.el"))]) (gandalf-theme . [(20130809 947) nil "Gandalf color theme" single ((:commit . "4e472fc851431458537d458d09c1f5895e338536") (:keywords "color" "theme") (:authors ("Peter Vasil" . "mail@petervasil.net")) (:maintainer "Peter Vasil" . "mail@petervasil.net"))]) (gotham-theme . [(20171013 1916) nil "A very dark Emacs color theme." single ((:commit . "5e97554d1f9639698faedb0660e63694be33bd84") (:authors ("Vasilij Schneidermann" . "v.schneidermann@gmail.com")) (:maintainer "Vasilij Schneidermann" . "v.schneidermann@gmail.com") (:url . "https://github.com/wasamasa/gotham-theme"))]) (grandshell-theme . [(20180606 517) nil "Dark color theme for Emacs > 24 with intensive colors." tar ((:commit . "0ed8e4273607dd4fcaa742b4097259233b09eda6"))]) (gruber-darker-theme . [(20180529 712) nil "Gruber Darker color theme for Emacs 24." single ((:commit . "c7687ec0511941db1371dcd70b31061d74aa5668") (:authors ("Alexey Kutepov" . "reximkut@gmail.com")) (:maintainer "Alexey Kutepov" . "reximkut@gmail.com") (:url . "http://github.com/rexim/gruber-darker-theme"))]) (gruvbox-theme . [(20190720 337) ((autothemer (0 2))) "A retro-groove colour theme for Emacs" tar ((:commit . "37548041b6c541b69ab6d18b53f7513781a1f2b3") (:authors ("Jason Milkins" . "jasonm23@gmail.com")) (:maintainer "Jason Milkins" . "jasonm23@gmail.com") (:url . "http://github.com/greduan/emacs-theme-gruvbox"))]) (hc-zenburn-theme . [(20150928 1633) nil "An higher contrast version of the Zenburn theme." single ((:commit . "fd0024a5191cdce204d91c8f1db99ba31640f6e9") (:authors ("Nantas Nardelli" . "nantas.nardelli@gmail.com")) (:maintainer "Nantas Nardelli" . "nantas.nardelli@gmail.com") (:url . "https:github.com/edran/hc-zenburn-emacs"))]) (hemisu-theme . [(20130508 1844) nil "Hemisu for Emacs." tar ((:commit . "5c206561aa2c844ecdf3e3b672c3235e559ddd7f") (:authors ("Andrzej Sliwa")) (:maintainer "Andrzej Sliwa") (:url . "http://github/anrzejsliwa/django-theme"))]) (heroku-theme . [(20150523 219) nil "Heroku color theme" single ((:commit . "8083643fe92ec3a1c3eb82f1b8dc2236c9c9691d") (:authors ("Jonathan Chu" . "me@jonathanchu.is")) (:maintainer "Jonathan Chu" . "me@jonathanchu.is") (:url . "https://github.com/jonathanchu/color-theme-heroku"))]) (inkpot-theme . [(20190816 715) nil "port of vim's inkpot theme" single ((:commit . "54adc447d30e60b6e6c39220e8b36d93d63fecac") (: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"))]) (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"))]) (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"))]) (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"))]) (autothemer . [(20180920 923) ((dash (2 10 0)) (emacs (24)) (cl-lib (0 5))) "Conveniently define themes." single ((:commit . "69488c71dfc182cf2e7be2d745037f230ade678e") (:authors ("Sebastian Sturm")) (:maintainer "Sebastian Sturm") (:url . "https://github.com/sebastiansturm/autothemer"))]) (kaolin-themes . [(20190812 1835) ((emacs (25 1)) (autothemer (0 2 2)) (cl-lib (0 6))) "A set of eye pleasing themes" tar ((:commit . "9bc8dc1b69e6d858a523b98603201f60a51825fa") (: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"))]) (light-soap-theme . [(20150607 1445) ((emacs (24))) "Emacs 24 theme with a light background." single ((:commit . "76a787bd40c6b567ae68ced7f5d9f9f10725e00d"))]) (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"))]) (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"))]) (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"))]) (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"))]) (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"))]) (moe-theme . [(20180617 200) nil "A colorful eye-candy theme. Moe, moe, kyun!" tar ((:commit . "6e086d855d6bb446bbd1090742815589a81a915f") (:url . "https://github.com/kuanyui/moe-theme.el"))]) (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"))]) (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"))]) (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"))]) (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"))]) (naquadah-theme . [(20190225 1427) nil "A theme based on Tango color set" single ((:commit . "430c3b7bd51922cb616b3f60301f4e2604816ed8"))]) (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"))]) (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"))]) (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"))]) (omtose-phellack-theme . [(20161111 2120) nil "A dark theme, with cold bluish touch." tar ((:commit . "66f99633e199e65bd28641626435e8e59246529a"))]) (oldlace-theme . [(20150705 1300) ((emacs (24))) "Emacs 24 theme with an 'oldlace' background." single ((:commit . "5c6f437203b0783b36a7aff4a578de4a0c8c4ee6") (:authors ("martin haesler")) (:maintainer "martin haesler"))]) (organic-green-theme . [(20180522 1620) nil "Low-contrast green color theme." single ((:commit . "200ac4a636eeb6faf1793d1937e62a343debc437"))]) (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"))]) (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"))]) (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"))]) (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"))]) (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"))]) (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"))]) (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"))]) (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"))]) (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"))]) (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"))]) (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"))]) (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-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"))]) (solarized-theme . [(20190809 1202) ((emacs (24 1)) (cl-lib (0 5)) (dash (2 6 0))) "The Solarized color theme, ported to Emacs." tar ((:commit . "55cd77b61b6968048c61e13358ba487d217f24c0"))]) (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"))]) (spacegray-theme . [(20150719 1931) ((emacs (24 1))) "A Hyperminimal UI Theme" single ((:commit . "7f70ee36297e5ccf9bc90b1f81472024f5a7a749") (:keywords "themes") (:authors ("Bruce Williams" . "brwcodes@gmail.com")) (:maintainer "Bruce Williams" . "brwcodes@gmail.com") (:url . "http://github.com/bruce/emacs-spacegray-theme"))]) (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"))]) (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"))]) (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"))]) (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"))]) (tango-2-theme . [(20120312 2025) nil "Tango 2 color theme for GNU Emacs 24" single ((:commit . "64e44c98e41ebbe3b827d54280e3b9615787daaa") (:authors ("Nick Parker")) (:maintainer "Nick Parker"))]) (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"))]) (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"))]) (tao-theme . [(20190204 1104) nil "This package provides two parametrized uncoloured color themes for Emacs: tao-yin and tao-yang." tar ((:commit . "c5107fbe7e752f4e58c2d2147ff18a1ebb12937c"))]) (toxi-theme . [(20160424 2126) ((emacs (24))) "A dark color theme by toxi" single ((:commit . "b322fc7497a53f102e74f7994da96f2974171c9b") (:authors ("Karsten Schmidt" . "info@postspectacular.com")) (:maintainer "Karsten Schmidt" . "info@postspectacular.com") (:url . "http://bitbucket.org/postspectacular/toxi-theme/"))]) (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"))]) (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-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"))]) (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"))]) (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"))]) (white-sand-theme . [(20151117 1648) ((emacs (24))) "Emacs theme with a light background." single ((:commit . "97621edd69267dd143760d94393db2c2558c9ea4") (:authors ("Martin Haesler")) (:maintainer "Martin Haesler"))]) (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"))]) (zenburn-theme . [(20190809 1324) nil "A low contrast color theme for Emacs." single ((:commit . "4db36d32207613340dfc6a48fcf8e57a60d97ba3") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.com")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.com") (:url . "http://github.com/bbatsov/zenburn-emacs"))]) (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/"))]) (color-identifiers-mode . [(20190805 1455) ((dash (2 5 0)) (emacs (24))) "Color identifiers based on their names" single ((:commit . "58fc8706a8f44e8df4678eec8ce15636fd4db758") (:keywords "faces" "languages") (:authors ("Ankur Dave" . "ankurdave@gmail.com")) (:maintainer "Ankur Dave" . "ankurdave@gmail.com") (:url . "https://github.com/ankurdave/color-identifiers-mode"))]) (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-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"))]) (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"))]) (font-utils . [(20150806 1751) ((persistent-soft (0 8 8)) (pcache (0 2 3))) "Utility functions for working with fonts" single ((:commit . "9192d3f8ee6a4e75f34c3fed10378674cc2b11d3") (:keywords "extensions") (:authors ("Roland Walker" . "walker@pobox.com")) (:maintainer "Roland Walker" . "walker@pobox.com") (:url . "http://github.com/rolandwalker/font-utils"))]) (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"))]) (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"))]) (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"))]) (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"))]) (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"))]) (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"))]) (helm-mu . [(20190819 1311) ((helm (1 5 5))) "Helm sources for searching emails and contacts" single ((:commit . "481964fb26c59ea280a1ec7bce192d724ddf7d12") (:authors ("Titus von der Malsburg" . "malsburg@posteo.de")) (:maintainer "Titus von der Malsburg" . "malsburg@posteo.de") (:url . "https://github.com/emacs-helm/helm-mu"))]) (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"))]) (counsel-notmuch . [(20181203 935) ((emacs (24)) (ivy (0 10 0)) (notmuch (0 21)) (s (1 12 0))) "Search emails in Notmuch asynchronously with Ivy" single ((:commit . "a4a1562935e4180c42524c51609d1283e9be0688") (:keywords "mail") (:authors ("Alexander Fu Xi" . "fuxialexander@gmail.com")) (:maintainer "Alexander Fu Xi" . "fuxialexander@gmail.com") (:url . "https://github.com/fuxialexander/counsel-notmuch"))]) (helm-notmuch . [(20190320 1048) ((helm (1 9 3)) (notmuch (0 21))) "Search emails with Notmuch and Helm" single ((:commit . "97a01497e079a7b6505987e9feba6b603bbec288") (:keywords "mail") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:url . "https://github.com/emacs-helm/helm-notmuch"))]) (notmuch . [(20190525 1602) nil "run notmuch within emacs" tar ((:commit . "17806ecc955ce0375146ea1df51eae061a72bef8") (:url . "https://notmuchmail.org/"))]) (company-terraform . [(20190607 1037) ((emacs (24 4)) (company (0 8 12)) (terraform-mode (0 6))) "A company backend for terraform" tar ((:commit . "2d11a21fee2f298e48968e479ddcaeda4d736e12") (:keywords "abbrev" "convenience" "terraform" "company") (:authors ("RafaÅ‚ CieÅ›lak" . "rafalcieslak256@gmail.com")) (:maintainer "RafaÅ‚ CieÅ›lak" . "rafalcieslak256@gmail.com") (:url . "https://github.com/rafalcieslak/emacs-company-terraform"))]) (hcl-mode . [(20170107 827) ((emacs (24 3))) "Major mode for Hashicorp" single ((:commit . "0f2c5ec7e7bcf77c8548e8cac8721ea935ca1b5e") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-hcl-mode"))]) (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"))]) (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"))]) (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"))]) (pandoc-mode . [(20190711 2122) ((hydra (0 10 0)) (dash (2 10 0))) "Minor mode for interacting with Pandoc" tar ((:commit . "7b9a19d8777a21431a819281a14201bfdf1dfdc1") (:keywords "text" "pandoc") (:authors ("Joost Kremers" . "joostkremers@fastmail.fm")) (:maintainer "Joost Kremers" . "joostkremers@fastmail.fm"))]) (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"))]) (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"))]) (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"))]) (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-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"))]) (docker . [(20190813 1431) ((emacs (24 5)) (dash (2 14 1)) (docker-tramp (0 1)) (magit-popup (2 12 4)) (s (1 12 0)) (tablist (0 70)) (json-mode (1 7 0))) "Emacs interface to Docker" tar ((:commit . "fe74a499ce3246fb9a7d72e6931864b94ce5261d") (:keywords "filename" "convenience") (:authors ("Philippe Vaucher" . "philippe.vaucher@gmail.com")) (:maintainer "Philippe Vaucher" . "philippe.vaucher@gmail.com") (:url . "https://github.com/Silex/docker.el"))]) (docker-tramp . [(20170207 325) ((emacs (24)) (cl-lib (0 5))) "TRAMP integration for docker containers" tar ((:commit . "8e2b671eff7a81af43b76d9dfcf94ddaa8333a23") (:keywords "docker" "convenience") (:authors ("Mario Rodas" . "marsam@users.noreply.github.com")) (:maintainer "Mario Rodas" . "marsam@users.noreply.github.com") (:url . "https://github.com/emacs-pe/docker-tramp.el"))]) (dockerfile-mode . [(20190505 1807) ((emacs (24)) (s (1 12))) "Major mode for editing Docker's Dockerfiles" single ((:commit . "ed73e82dcc636dad00d1a8c3b32a49136d25ee60") (:url . "https://github.com/spotify/dockerfile-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"))]) (flycheck-ycmd . [(20181016 618) ((emacs (24)) (dash (2 13 0)) (flycheck (0 22)) (ycmd (1 2)) (let-alist (1 0 5))) "flycheck integration for ycmd" single ((:commit . "6f4f7384b82203cccf208e3ec09252eb079439f9") (:authors ("Austin Bingham" . "austin.bingham@gmail.com")) (:maintainer "Austin Bingham" . "austin.bingham@gmail.com") (:url . "https://github.com/abingham/emacs-ycmd"))]) (cliphist . [(20181229 1411) ((emacs (24 3)) (ivy (0 9 0))) "Read data from clipboard managers at Linux and Mac" tar ((:commit . "232ab0b3f6d502de61ebe76681a6a04d4223b877") (:keywords "clipboard" "manager" "history") (:authors ("Chen Bin ")) (:maintainer "Chen Bin ") (:url . "http://github.com/redguardtoo/cliphist"))]) (levenshtein . [(20090830 1040) nil "Edit distance between two strings." single ((:commit . "070925197ebf6b704e6e00c4f2d2ec783f3df38c") (:keywords "lisp") (:authors ("Aaron S. Hawley ,") ("Art Taylor")) (:maintainer "Aaron S. Hawley ,"))]) (cmake-ide . [(20190731 1009) ((emacs (24 4)) (cl-lib (0 5)) (seq (1 11)) (levenshtein (0)) (s (1 11 0))) "Calls CMake to find out include paths and other compiler flags" single ((:commit . "e3aa1ded10c079337826b40586111df7114f6379") (:keywords "languages") (:authors ("Atila Neves" . "atila.neves@gmail.com")) (:maintainer "Atila Neves" . "atila.neves@gmail.com") (:url . "http://github.com/atilaneves/cmake-ide"))]) (cmake-mode . [(20190710 1319) ((emacs (24 1))) "major-mode for editing CMake sources" single ((:commit . "a04b852a7b1c8590ad35db5d09c99e73ebd5e464"))]) (helm-ctest . [(20180821 1005) ((s (1 9 0)) (dash (2 11 0)) (helm-core (1 7 4))) "Run ctest from within emacs" single ((:commit . "0c73689692a290f56080e95325c15362e90d529b") (:keywords "helm" "ctest") (:authors ("Dan LaManna" . "me@danlamanna.com")) (:maintainer "Dan LaManna" . "me@danlamanna.com"))]) (bm . [(20190807 1217) nil "Visible bookmarks in buffer." tar ((:commit . "8129428182e1b8a647d16fceb2d08cc0a2a5f3c7") (:keywords "bookmark" "highlight" "faces" "persistent") (:authors ("Jo Odland ")) (:maintainer "Jo Odland ") (:url . "https://github.com/joodland/bm"))]) (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/"))]) (auth-source-pass . [(20190813 1026) ((emacs (25))) "Integrate auth-source with password-store" single ((:commit . "847a1f54ed48856b4dfaaa184583ef2c84173edf") (:authors ("Damien Cassou" . "damien@cassou.me") ("Nicolas Petton" . "nicolas@petton.fr") ("Keith Amidon" . "camalot@picnicpark.org")) (:maintainer "Damien Cassou" . "damien@cassou.me") (:url . "https://github.com/DamienCassou/auth-password-store"))]) (helm-pass . [(20190315 1335) ((emacs (25)) (helm (0)) (password-store (0)) (auth-source-pass (4 0 0))) "helm interface of pass, the standard Unix password manager" single ((:commit . "ed5798f2d83937575e8f23fde33323bca9e85131") (:authors ("J. Alexander Branham" . "branham@utexas.edu")) (:maintainer "Pierre Neidhardt" . "mail@ambrevar.xyz") (:url . "https://github.com/emacs-helm/helm-pass"))]) (with-editor . [(20190715 2007) ((emacs (24 4)) (async (1 9))) "Use the Emacsclient as $EDITOR" tar ((:commit . "45c29f9bfb7f2df93426ce1571e2f4f41ed4e492") (:keywords "tools") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/magit/with-editor"))]) (password-store . [(20190804 2004) ((emacs (25)) (f (0 11 0)) (s (1 9 0)) (with-editor (2 5 11))) "Password store (pass) support" single ((:commit . "e93e03705fb5b81f3af85f04c07ad0ee2190b6aa") (:keywords "tools" "pass" "password" "password-store") (:authors ("Svend Sorensen" . "svend@svends.net")) (:maintainer "Svend Sorensen" . "svend@svends.net") (:url . "https://www.passwordstore.org/"))]) (esh-help . [(20170830 411) ((dash (1 4 0))) "Add some help functions and support for Eshell" single ((:commit . "8a8a9d4d9852f8bd96da3b94e95ff57097ac8ec6") (:keywords "eshell" "extensions") (:authors ("Tomoya Tanjo" . "ttanjo@gmail.com")) (:maintainer "Tomoya Tanjo" . "ttanjo@gmail.com") (:url . "https://github.com/tom-tan/esh-help/"))]) (eshell-prompt-extras . [(20181229 1418) nil "Display extra information for your eshell prompt." single ((:commit . "5a328e1b9112c7f31ce2da7cde340f96626546b6") (:keywords "eshell" "prompt") (:authors ("zwild" . "judezhao@outlook.com")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:url . "https://github.com/zwild/eshell-prompt-extras"))]) (eshell-z . [(20170117 438) ((cl-lib (0 5))) "cd to frequent directory in eshell" single ((:commit . "c9334cbc1552234df3437f35d98e32f4d18446b8") (:keywords "convenience") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/eshell-z"))]) (multi-term . [(20190624 1147) nil "Managing multiple terminal buffers in Emacs." single ((:commit . "0804b11e52b960c80f5cd0712ee1e53ae70d83a4") (: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"))]) (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"))]) (xterm-color . [(20190816 941) ((cl-lib (0 5))) "ANSI & XTERM 256 color support" single ((:commit . "44e6df835bd4173ee4ccc7e29842e9dae76f2668") (:keywords "faces") (:authors ("xristos" . "xristos@sdf.lonestar.org")) (:maintainer "xristos" . "xristos@sdf.lonestar.org") (:url . "https://github.com/atomontage/xterm-color"))]) (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"))]) (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"))]) (systemd . [(20180629 2106) ((emacs (24 4))) "Major mode for editing systemd units" tar ((:commit . "401d71c2dd24e424216ae5e4275c830f2a9c6b0c") (:keywords "tools" "unix") (:authors ("Mark Oteiza" . "mvoteiza@udel.edu")) (:maintainer "Mark Oteiza" . "mvoteiza@udel.edu"))]) (lsp-ui . [(20190809 1907) ((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 . "1cfff2135ffbf7ac52d9c2ece3f2bd157ac51167") (: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"))]) (helm-lsp . [(20190423 548) ((emacs (25 1)) (dash (2 14 1)) (lsp-mode (5 0)) (helm (2 0))) "LSP helm integration" single ((:commit . "3a58ca4cfd94b9ab1e15e819d3b16ef568e8889b") (:keywords "languages" "debug") (:authors ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainer "Ivan Yonchovski" . "yyoncho@gmail.com") (:url . "https://github.com/yyoncho/helm-lsp"))]) (lsp-treemacs . [(20190817 1904) ((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 . "a64fabbc7566a9043ac8a66006f61ff906cbcff5") (:keywords "languages") (:authors ("Ivan Yonchovski")) (:maintainer "Ivan Yonchovski") (:url . "https://github.com/emacs-lsp/lsp-treemacs"))]) (dotnet . [(20190415 1237) nil "Interact with dotnet CLI tool" single ((:commit . "932d776ed739d20d57dbd6ba49f61d1b450571fc") (:keywords ".net" "tools") (:authors ("Julien BLANCHARD" . "julien@sideburns.eu")) (:maintainer "Julien BLANCHARD" . "julien@sideburns.eu") (:url . "https://github.com/julienXX/dotnet.el"))]) (ansible . [(20190619 1255) ((s (1 9 0)) (f (0 16 2))) "Ansible minor mode" tar ((:commit . "2d35aa1280ace3cae404ea9e1231a8b26c7b9eb4") (:authors ("k1LoW (Kenichirou Oyama), ")) (:maintainer "k1LoW (Kenichirou Oyama), ") (:url . "http://101000lab.org"))]) (ansible-doc . [(20160924 824) ((emacs (24 3))) "Ansible documentation Minor Mode" single ((:commit . "86083a7bb2ed0468ca64e52076b06441a2f8e9e0") (:keywords "tools" "help") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn") (:url . "https://github.com/lunaryorn/ansible-doc.el"))]) (company-ansible . [(20190301 2111) ((emacs (24 4)) (company (0 8 12))) "A company back-end for ansible" tar ((:commit . "c31efced8a9b461de5982ed94c234fda3df96f10") (:keywords "ansible") (:authors ("Krzysztof Magosa" . "krzysztof@magosa.pl")) (:maintainer "Krzysztof Magosa" . "krzysztof@magosa.pl") (:url . "https://github.com/krzysztof-magosa/company-ansible"))]) (jinja2-mode . [(20141128 1007) nil "A major mode for jinja2" single ((:commit . "cfaa7bbe7bb290cc500440124ce89686f3e26f86") (:authors ("Florian Mounier aka paradoxxxzero")) (:maintainer "Florian Mounier aka paradoxxxzero"))]) (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"))]) (yaml-mode . [(20190625 1740) ((emacs (24 1))) "Major mode for editing YAML files" single ((:commit . "5b4a0db384f996554454b5642e4531c502421de8") (:keywords "data" "yaml") (:authors ("Yoshiki Kurihara" . "clouder@gmail.com") ("Marshall T. Vandegrift" . "llasram@gmail.com")) (:maintainer "Vasilij Schneidermann" . "v.schneidermann@gmail.com"))]) (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"))]) (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"))]) (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"))]) (command-log-mode . [(20160413 447) nil "log keyboard commands to buffer" single ((:commit . "af600e6b4129c8115f464af576505ea8e789db27") (:keywords "help") (:authors ("Michael Weber" . "michaelw@foldr.org")) (:maintainer "Michael Weber" . "michaelw@foldr.org") (:url . "https://github.com/lewang/command-log-mode"))]) (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"))]) (edit-server . [(20181016 1125) nil "server that responds to edit requests from Chrome" single ((:commit . "af46de40e2991b046f04856c18a6483badce38aa") (:authors ("Alex Bennée" . "alex@bennee.com")) (:maintainer "Alex Bennée" . "alex@bennee.com") (:url . "https://github.com/stsquad/emacs_chrome"))]) (ham-mode . [(20150811 1306) ((html-to-markdown (1 2)) (markdown-mode (2 0))) "Html As Markdown. Transparently edit an html file using markdown" single ((:commit . "3a141986a21c2aa6eefb428983352abb8b7907d2") (:keywords "convenience" "emulation" "wp") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com") (:url . "http://github.com/Bruce-Connor/ham-mode"))]) (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"))]) (gmail-message-mode . [(20160627 1847) ((ham-mode (1 0))) "A major-mode for editing gmail messages using markdown syntax." single ((:commit . "ec36672a9dc93c09ebe2f77597b498d11883d008") (:keywords "mail" "convenience" "emulation") (:authors ("Artur Malabarba" . "bruce.connor.am@gmail.com")) (:maintainer "Artur Malabarba" . "bruce.connor.am@gmail.com") (:url . "http://github.com/Bruce-Connor/gmail-message-mode"))]) (flymd . [(20160617 1214) ((cl-lib (0 5))) "On the fly markdown preview" tar ((:commit . "84d5a68bcfed4a295952c33ffcd11e880978d9d7") (:keywords "markdown" "convenience") (:authors ("Mola-T" . "Mola@molamola.xyz")) (:maintainer "Mola-T" . "Mola@molamola.xyz") (:url . "https://github.com/mola-T/flymd"))]) (osx-location . [(20150613 917) nil "Watch and respond to changes in geographical location on OS X" tar ((:commit . "8bb3a94cc9f04b922d2d730fe08596cc6ee12bf2"))]) (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/"))]) (sunshine . [(20181029 1654) ((cl-lib (0 5))) "Provide weather and forecast information." single ((:commit . "8959dea03377e61aaca0124ac8d2703daaae6b9a") (:keywords "tools" "weather") (:authors ("Aaron Bieber" . "aaron@aaronbieber.com")) (:maintainer "Aaron Bieber" . "aaron@aaronbieber.com") (:url . "https://github.com/aaronbieber/sunshine.el"))]) (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"))]) (transmission . [(20190211 246) ((emacs (24 4)) (let-alist (1 0 5))) "Interface to a Transmission session" single ((:commit . "7293beeb8a49cf6822abd16a9f4b9e4bef0a9296") (:keywords "comm" "tools") (:authors ("Mark Oteiza" . "mvoteiza@udel.edu")) (:maintainer "Mark Oteiza" . "mvoteiza@udel.edu"))]) (prodigy . [(20190714 1102) ((s (1 8 0)) (dash (2 4 0)) (f (0 14 0)) (emacs (24))) "Manage external services from within Emacs" single ((:commit . "0a12eec1f001a4eef16b2c0c524f02f2647a4ff1") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:url . "http://github.com/rejeep/prodigy.el"))]) (flycheck-ledger . [(20180819 321) ((flycheck (0 15))) "Flycheck integration for ledger files" single ((:commit . "8d7f52a4c7f80ca396ef0fc6c7d8e9f005778dfc") (:keywords "convenience" "languages" "tools") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com"))]) (ledger-mode . [(20190811 2340) ((emacs (24 3))) "Helper code for use with the \"ledger\" command-line tool" tar ((:commit . "0114525803860b18a34624339825219bb6b8943e"))]) (evil-ledger . [(20180802 1612) ((emacs (24 4)) (evil (1 2 12)) (ledger-mode (0))) "Make `ledger-mode' more `evil'." single ((:commit . "7a9f9f5d39c42fffdba8004f8982642351f2b233") (:keywords "convenience" "evil" "languages" "ledger" "vim-emulation") (:authors ("Aaron Jacobs" . "atheriel@gmail.com")) (:maintainer "Aaron Jacobs" . "atheriel@gmail.com") (:url . "https://github.com/atheriel/evil-ledger"))]) (know-your-http-well . [(20160208 2304) nil "Look up the meaning of HTTP headers, methods, relations, status codes" tar ((:commit . "3cc5ab6d2764ab7aacb1b6e026abaccbeb6c37f2"))]) (company-restclient . [(20190426 1312) ((cl-lib (0 5)) (company (0 8 0)) (emacs (24)) (know-your-http-well (0 2 0)) (restclient (0 0 0))) "company-mode completion back-end for restclient-mode" single ((:commit . "e5a3ec54edb44776738c13e13e34c85b3085277b") (:authors ("Iku Iwasa" . "iku.iwasa@gmail.com")) (:maintainer "Iku Iwasa" . "iku.iwasa@gmail.com") (:url . "https://github.com/iquiw/company-restclient"))]) (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-restclient . [(20190626 1824) ((restclient (0))) "org-babel functions for restclient-mode" single ((:commit . "53376667eeddb1388fd6c6976f3222e7c8adcd46") (:keywords "literate programming" "reproducible research") (:authors ("Alf LervÃ¥g")) (:maintainer "Alf LervÃ¥g") (:url . "https://github.com/alf/ob-restclient.el"))]) (restclient . [(20190502 2214) nil "An interactive HTTP client for Emacs" single ((:commit . "422ee8d8b077dffe65706a0f027ed700b84746bc") (:keywords "http") (:authors ("Pavel Kurnosov" . "pashky@gmail.com")) (:maintainer "Pavel Kurnosov" . "pashky@gmail.com"))]) (restclient-helm . [(20170314 1554) ((restclient (0)) (helm (1 9 4))) "helm interface for restclient.el" single ((:commit . "422ee8d8b077dffe65706a0f027ed700b84746bc") (:keywords "http" "helm") (:authors ("Pavel Kurnosov" . "pashky@gmail.com")) (:maintainer "Pavel Kurnosov" . "pashky@gmail.com"))]) (ob-cfengine3 . [(20190520 1929) nil "Org Babel functions for CFEngine 3" single ((:commit . "4d4cd53ceaf8a756f48c02cb2e10476f3cda37c4") (:keywords "tools" "convenience") (:authors ("Nick Anderson" . "nick@cmdln.org")) (:maintainer "Nick Anderson" . "nick@cmdln.org") (:url . "https://github.com/nickanderson/ob-cfengine3"))]) (tern . [(20181108 722) ((json (1 2)) (cl-lib (0 5)) (emacs (24))) "Tern-powered JavaScript integration" single ((:commit . "9ddff4ca9bce7f46694b15c51799904ff41131b6") (:authors ("Marijn Haverbeke")) (:maintainer "Marijn Haverbeke") (:url . "http://ternjs.net/"))]) (company-tern . [(20161004 1847) ((company (0 8 0)) (tern (0 0 1)) (dash (2 8 0)) (dash-functional (2 8 0)) (s (1 9 0)) (cl-lib (0 5 0))) "Tern backend for company-mode" single ((:commit . "10ac058b065ae73c1f30e9fb7d969dd1a79387be") (:authors ("Artem Malyshev" . "proofit404@gmail.com")) (:maintainer "Artem Malyshev" . "proofit404@gmail.com") (:url . "https://github.com/proofit404/company-tern"))]) (bui . [(20181218 1830) ((emacs (24 3)) (dash (2 11 0))) "Buffer interface library" tar ((:commit . "508577a7225b3d07eaefa9444064410af2518675") (:keywords "tools") (:authors ("Alex Kost" . "alezost@gmail.com")) (:maintainer "Alex Kost" . "alezost@gmail.com") (:url . "https://github.com/alezost/bui.el"))]) (tree-mode . [(20151104 1331) nil "A mode to manage tree widgets" single ((:commit . "b06078826d5875d74b0e7b7ac47b0d0917610534") (:keywords "help" "convenience" "widget") (:authors (nil . "wenbinye@163.com")) (:maintainer nil . "wenbinye@163.com"))]) (lsp-mode . [(20190821 848) ((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 . "91cf8d770ed222e2fc7f2c419ec45a24584887d7") (:keywords "languages") (:authors ("Vibhav Pant, Fangrui Song, Ivan Yonchovski")) (:maintainer "Vibhav Pant, Fangrui Song, Ivan Yonchovski") (:url . "https://github.com/emacs-lsp/lsp-mode"))]) (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/"))]) (dap-mode . [(20190819 902) ((emacs (25 1)) (dash (2 14 1)) (lsp-mode (6 0)) (dash-functional (1 2 0)) (tree-mode (1 1 1 1)) (bui (1 1 0)) (f (0 20 0)) (s (1 12 0))) "Debug Adapter Protocol mode" tar ((:commit . "7ce4df18c25decff70b48e42337c57994b97fb64") (:keywords "languages" "debug") (:authors ("Ivan Yonchovski" . "yyoncho@gmail.com")) (:maintainer "Ivan Yonchovski" . "yyoncho@gmail.com") (:url . "https://github.com/yyoncho/dap-mode"))]) (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"))]) (fasd . [(20180606 505) nil "Emacs integration for the command-line productivity booster `fasd'" single ((:commit . "020c6a4b5fd1498a84ae142d2e32c7ff678fb029") (:keywords "cli" "bash" "zsh" "autojump") (:authors ("steckerhalter")) (:maintainer "steckerhalter") (:url . "https://framagit.org/steckerhalter/emacs-fasd"))]) (evil-tutor-ja . [(20160917 132) ((evil (1 0 9)) (evil-tutor (0 1))) "Japanese Vimtutor adapted to Evil and wrapped in a major-mode" tar ((:commit . "99af7d82e02ce3bcdfaff47c5c80b57327a7ea8d") (:keywords "convenience" "editing" "evil" "japanese") (:authors ("Kenji Miyazaki" . "kenjizmyzk@gmail.com")) (:maintainer "Kenji Miyazaki" . "kenjizmyzk@gmail.com") (:url . "https://github.com/kenjimyzk/evil-tutor-ja"))]) (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"))]) (avy-migemo . [(20180716 1455) ((emacs (24 4)) (avy (0 4 0)) (migemo (1 9))) "avy with migemo" tar ((:commit . "922a6dd82c0bfa316b0fbb56a9d4dd4ffa5707e7") (:keywords "avy" "migemo") (:authors ("momomo5717")) (:maintainer "momomo5717") (:url . "https://github.com/momomo5717/avy-migemo"))]) (cdb . [(20151205 1343) nil "constant database (cdb) reader for Emacs Lisp" single ((:commit . "ad61579af269291b4446f4bab0a58522cc454f1c") (:keywords "cdb") (:authors ("Yusuke Shinyama ")) (:maintainer "SKK Development Team" . "skk@ring.gr.jp"))]) (ccc . [(20151205 1343) nil "buffer local cursor color control library" single ((:commit . "ad61579af269291b4446f4bab0a58522cc454f1c") (:keywords "cursor") (:authors ("Masatake YAMATO" . "masata-y@is.aist-nara.ac.jp")) (:maintainer "SKK Development Team" . "skk@ring.gr.jp") (:url . "https://github.com/skk-dev/ddskk/blob/master/READMEs/README.ccc.org"))]) (ddskk . [(20190423 1234) ((ccc (1 43)) (cdb (20141201 754))) "Simple Kana to Kanji conversion program." tar ((:commit . "ad61579af269291b4446f4bab0a58522cc454f1c"))]) (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"))]) (pangu-spacing . [(20190422 514) nil "Minor-mode to add space between Chinese and English characters." single ((:commit . "3a741c1b669c7194fb766b784c10d52a8de9b87f") (:authors ("coldnew" . "coldnew.tw@gmail.com")) (:maintainer "coldnew" . "coldnew.tw@gmail.com") (:url . "http://github.com/coldnew/pangu-spacing"))]) (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 . [(20190820 835) ((emacs (24 4)) (popup (0 1)) (async (1 6)) (pyim-basedict (0 1))) "A Chinese input method support quanpin, shuangpin, wubi and cangjie." tar ((:commit . "101413d54aa19713f15a5fa031c937df0714497d") (:keywords "convenience" "chinese" "pinyin" "input-method") (:authors ("Ye Wenbin , Feng Shu" . "tumashu@163.com")) (:maintainer "Ye Wenbin , Feng Shu" . "tumashu@163.com") (:url . "https://github.com/tumashu/pyim"))]) (chinese-wbim . [(20190727 854) nil "Enable Wubi Input Method in Emacs." tar ((:commit . "5d496364b0b6bbaaf0f9b37e5a6d260d4994f260"))]) (fcitx . [(20190806 1923) nil "Make fcitx better in Emacs" single ((:commit . "12dc2638ddd15c8f6cfaecb20e1f428ab2bb5624") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:url . "https://github.com/cute-jumper/fcitx.el"))]) (find-by-pinyin-dired . [(20180210 218) ((pinyinlib (0 1 0))) "Find file by first PinYin character of Chinese Hanzi" single ((:commit . "3b4781148dddc84a701ad76c0934ed991ecd59d5") (:keywords "hanzi" "chinese" "dired" "find" "file" "pinyin") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") (:url . "http://github.com/redguardtoo/find-by-pinyin-dired"))]) (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"))]) (ace-pinyin . [(20190123 402) ((avy (0 2 0)) (pinyinlib (0 1 0))) "Jump to Chinese characters using avy or ace-jump-mode" single ((:commit . "4915b2413359d85002918e322dbc90c4984b4277") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:url . "https://github.com/cute-jumper/ace-pinyin"))]) (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"))]) (chinese-word-at-point . [(20170811 941) ((cl-lib (0 5))) "Add `chinese-word' thing to `thing-at-point'" single ((:commit . "8223d7439e005555b86995a005b225ae042f0538") (:keywords "convenience" "chinese") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com") (:url . "https://github.com/xuchunyang/chinese-word-at-point.el"))]) (youdao-dictionary . [(20180714 414) ((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 . "9496ea3ba8aa999db3dbde88d6aa37f3579d8dea") (:keywords "convenience" "chinese" "dictionary") (:authors ("Chunyang Xu" . "xuchunyang56@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang56@gmail.com") (:url . "https://github.com/xuchunyang/youdao-dictionary.el"))]) (chinese-conv . [(20170807 2128) ((cl-lib (0 5))) "Conversion between Chinese Characters with opencc or cconv" single ((:commit . "b56815bbb163d642e97fa73093b5a7e87cc32574") (:authors ("gucong" . "gucong43216@gmail.com")) (:maintainer "gucong" . "gucong43216@gmail.com") (:url . "https://github.com/gucong/emacs-chinese-conv"))]) (evil-escape . [(20180910 1234) nil "No description available." single ((:commit . "f4e9116bfbaac8c9d210c17ad488e0982291245f"))]) (eyebrowse . [(20190322 933) ((dash (2 7 0)) (emacs (24 3 1))) "Easy window config switching" single ((:commit . "52e160997a1c4b1d463e8b9cc2ba3e27408c2a89") (:keywords "convenience") (:authors ("Vasilij Schneidermann" . "v.schneidermann@gmail.com")) (:maintainer "Vasilij Schneidermann" . "v.schneidermann@gmail.com") (:url . "https://github.com/wasamasa/eyebrowse"))]) (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"))]) (exec-path-from-shell . [(20190426 2227) nil "Get environment variables such as $PATH from the shell" single ((:commit . "3cfedb8791397ed50ee66bc0a7cbee5b9d78245c") (:keywords "unix" "environment") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/exec-path-from-shell"))]) (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"))]) (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-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-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"))]) (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"))]) (company-nixos-options . [(20160215 857) ((company (0 8 0)) (nixos-options (0 0 1)) (cl-lib (0 5 0))) "Company Backend for 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/"))]) (helm-nixos-options . [(20151013 2309) ((nixos-options (0 0 1)) (helm (1 5 6))) "Helm Interface for 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-mode . [(20190703 526) ((emacs (24 3))) "Major mode for editing .nix files" tar ((:commit . "ddf091708b9069f1fe0979a7be4e719445eed918") (:keywords "nix" "languages" "tools" "unix") (:maintainer "Matthew Bauer" . "mjbauer95@gmail.com") (:url . "https://github.com/NixOS/nix-mode"))]) (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/"))]) (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"))]) (2048-game . [(20151026 1933) nil "play 2048 in Emacs" single ((:commit . "ea6c3bce8ac1c17dae5ac711ae4e931c0495e455") (:authors ("Zachary Kanfer" . "zkanfer@gmail.com")) (:maintainer "Zachary Kanfer" . "zkanfer@gmail.com") (:url . "https://bitbucket.org/zck/2048.el"))]) (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"))]) (sudoku . [(20161111 706) ((emacs (24 4))) "Simple sudoku game, can download puzzles" single ((:commit . "77c11b5041b58fc943cf1668b44b40bae039cb5b") (:keywords "games") (:authors ("Zajcev Evgeny" . "zevlg@yandex.ru")) (:maintainer "Zajcev Evgeny" . "zevlg@yandex.ru"))]) (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"))]) (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"))]) (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"))]) (erc-image . [(20180522 1424) nil "Show received image urls in the ERC buffer" single ((:commit . "82fb3871f02e24b1e880770b9a3d187aab43d0f0") (:keywords "multimedia") (:authors ("Jon de Andrés FrÃas" . "jondeandres@gmail.com") ("Raimon Grau Cuscó" . "raimonster@gmail.com")) (:maintainer "Jon de Andrés FrÃas" . "jondeandres@gmail.com"))]) (erc-tweet . [(20150920 1258) nil "shows text of a tweet when an url is posted in erc buffers" single ((:commit . "91fed61e139fa788d66a7358f0d50acc896414b8") (:keywords "extensions") (:authors ("Raimon Grau" . "raimonster@gmail.com")) (:maintainer "Raimon Grau" . "raimonster@gmail.com"))]) (erc-yt . [(20150426 1249) ((dash (2 10 0))) "An erc module to display youtube links nicely" single ((:commit . "43e7d49325b17a3217a6ffb4a9daf75c5ff4e6f8") (:keywords "multimedia") (:authors ("William Stevenson" . "yhvh2000@gmail.com")) (:maintainer "William Stevenson" . "yhvh2000@gmail.com"))]) (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-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-styles . [(20160207 250) ((cl-lib (0 5))) "support mIRC-style color and attribute codes" single ((:commit . "f313bf6a7470bed314b27c7a40558cb787d7bc67"))]) (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"))]) (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"))]) (jabber . [(20180927 2325) ((fsm (0 2)) (srv (0 2))) "A Jabber client for Emacs." tar ((:commit . "fff33826f42e040dad7ef64ea312d85215d3b0a1"))]) (emojify . [(20190809 959) ((seq (1 11)) (ht (2 0)) (emacs (24 3))) "Display emojis in Emacs" tar ((:commit . "782ac307f37239e90c56810323db4263a6469219") (:keywords "multimedia" "convenience") (:authors ("Iqbal Ansari" . "iqbalansari02@yahoo.com")) (:maintainer "Iqbal Ansari" . "iqbalansari02@yahoo.com") (:url . "https://github.com/iqbalansari/emacs-emojify"))]) (circe . [(20190322 1242) ((cl-lib (0 5))) "Client for IRC in Emacs" tar ((:commit . "6ccd4b494cbae9d28091217654f052eaea321007") (:url . "https://github.com/jorgenschaefer/circe"))]) (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"))]) (websocket . [(20190621 54) ((cl-lib (0 5))) "Emacs WebSocket client and server" single ((:commit . "d91a9aef5a3ec5af985e5185c3b237fdd24605e0") (:keywords "communication" "websocket" "server") (:authors ("Andrew Hyatt" . "ahyatt@gmail.com")) (:maintainer "Andrew Hyatt" . "ahyatt@gmail.com"))]) (slack . [(20190803 1406) ((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 . "ea89ac4291532a136d02bb8852b5dc641622ab73") (:url . "https://github.com/yuya373/emacs-slack"))]) (erc-hl-nicks . [(20180415 1946) nil "ERC nick highlighter that ignores uniquifying chars when colorizing" single ((:commit . "756c4438a8245ccd3e389bf6c9850ee8453783ec") (:authors ("David Leatherman" . "leathekd@gmail.com")) (:maintainer "David Leatherman" . "leathekd@gmail.com") (:url . "http://www.github.com/leathekd/erc-hl-nicks"))]) (erc-social-graph . [(20150508 1204) nil "A social network graph module for ERC." single ((:commit . "e6ef3416a1c5064054bf054d9f0c1c7bf54a9cd0") (:keywords "erc" "graph") (:authors ("Vibhav Pant" . "vibhavp@gmail.com")) (:maintainer "Vibhav Pant" . "vibhavp@gmail.com") (:url . "https://github.com/vibhavp/erc-social-graph"))]) (erc-terminal-notifier . [(20140115 1024) nil "OSX notifications via the terminal-notifier gem for Emacs ERC." single ((:commit . "a3dacb935845e4a20031212bbd82b2170f68d2a8") (:keywords "erc" "terminal-notifier" "nick") (:authors ("Julien Blanchard" . "julien@sideburns.eu")) (:maintainer "Julien Blanchard" . "julien@sideburns.eu") (:url . "http://github.com/julienXX/"))]) (erc-view-log . [(20140227 2039) nil "Major mode for viewing ERC logs" single ((:commit . "c5a25f0cbca84ed2e4f72068c02b66bd0ea3b266") (:keywords "erc" "viewer" "logs" "colors") (:authors ("Antoine Levitt") ("Thomas Riccardi" . "riccardi.thomas@gmail.com")) (:maintainer "Antoine Levitt") (:url . "http://github.com/Niluge-KiWi/erc-view-log/raw/master/erc-view-log.el"))]) (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"))]) (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"))]) (helm-spotify-plus . [(20190807 2115) ((emacs (24 4)) (helm (2 0 0)) (multi (2 0 1))) "Control Spotify search and select music with Helm." single ((:commit . "e52233523917596dd3862e1151a027ce89a80a38") (:authors ("Wanderson Ferreira and Luis Moneda ")) (:maintainer "Wanderson Ferreira and Luis Moneda ") (:url . "https://github.com/wandersoncferreira/helm-spotify-plus"))]) (counsel-spotify . [(20190406 2025) ((emacs (25)) (ivy (0 9 0))) "Control Spotify search and select music with Ivy." single ((:commit . "f484e6efd3994704cfd16c87c298fbfa12d442cc") (:authors ("Lautaro GarcÃa ")) (:maintainer "Lautaro GarcÃa "))]) (copy-as-format . [(20190523 258) ((cl-lib (0 5))) "Copy buffer locations as GitHub/Slack/JIRA etc... formatted code" single ((:commit . "a0962b670e26b723ce304b14e3397da453aef84e") (:keywords "github" "slack" "jira" "hipchat" "gitlab" "bitbucket" "org-mode" "pod" "rst" "asciidoc" "tools" "convenience") (:authors ("Skye Shaw" . "skye.shaw@gmail.com")) (:maintainer "Skye Shaw" . "skye.shaw@gmail.com") (:url . "https://github.com/sshaw/copy-as-format"))]) (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"))]) (ox-rfc . [(20190429 1133) ((emacs (24 3)) (org (8 3))) "RFC Back-End for Org Export Engine" tar ((:commit . "4cac33c387bc10e32f18940298aa5095d060ed3e") (: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"))]) (evil-mc . [(20190321 1606) ((emacs (24 3)) (evil (1 2 13)) (cl-lib (0 5))) "Multiple cursors for evil-mode" tar ((:commit . "5205fe671803465149e578849bbbe803c23a8e4e") (:keywords "evil" "editing" "multiple-cursors" "vim" "evil-multiple-cursors" "evil-mc" "evil-mc") (:authors ("Gabriel Adomnicai" . "gabesoft@gmail.com")) (:maintainer "Gabriel Adomnicai" . "gabesoft@gmail.com") (:url . "https://github.com/gabesoft/evil-mc"))]) (multiple-cursors . [(20190820 749) ((cl-lib (0 5))) "Multiple cursors for Emacs." tar ((:commit . "b9b851a7670f4348f3a08b11ef12ed99676c8b84"))]) (auto-yasnippet . [(20190326 958) ((yasnippet (0 13 0))) "Quickly create disposable yasnippets" single ((:commit . "624b0d9711222073a2a3f2186e2605eb99fc83c9") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/auto-yasnippet"))]) (auto-complete . [(20170125 245) ((popup (0 5 0)) (cl-lib (0 5))) "Auto Completion for GNU Emacs" tar ((:commit . "2e83566ddfa758c69afe50b8a1c62a66f47471e3"))]) (ac-ispell . [(20151101 226) ((auto-complete (1 4)) (cl-lib (0 5))) "ispell completion source for auto-complete" single ((:commit . "22bace7387e9012002a6a444922f75f9913077b0") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-ac-ispell"))]) (company-statistics . [(20170210 1933) ((emacs (24 3)) (company (0 8 5))) "Sort candidates using completion history" single ((:commit . "e62157d43b2c874d2edbd547c3bdfb05d0a7ae5c") (:keywords "abbrev" "convenience" "matching") (:authors ("Ingo Lohmar" . "i.lohmar@gmail.com")) (:maintainer "Ingo Lohmar" . "i.lohmar@gmail.com") (:url . "https://github.com/company-mode/company-statistics"))]) (fuzzy . [(20150730 337) nil "Fuzzy Matching" single ((:commit . "534d723ad2e06322ff8d9bd0ba4863d243f698e7") (:keywords "convenience") (:authors ("Tomohiro Matsuyama" . "m2ym.pub@gmail.com")) (:maintainer "Tomohiro Matsuyama" . "m2ym.pub@gmail.com"))]) (company . [(20190821 658) ((emacs (24 3))) "Modular text completion framework" tar ((:commit . "1120b56bd1154a17e4c0b950cbdba4c85be28e2a") (:keywords "abbrev" "convenience" "matching") (:authors ("Nikolaj Schumacher")) (:maintainer "Dmitry Gutov" . "dgutov@yandex.ru") (:url . "http://company-mode.github.io/"))]) (helm-company . [(20190812 1429) ((helm (1 5 9)) (company (0 6 13))) "Helm interface for company-mode" single ((:commit . "6eb5c2d730a60e394e005b47c1db018697094dde") (:authors ("Yasuyuki Oka" . "yasuyk@gmail.com")) (:maintainer "Daniel Ralston" . "Sodel-the-Vociferous@users.noreply.github.com") (:url . "https://github.com/Sodel-the-Vociferous/helm-company"))]) (helm-c-yasnippet . [(20170128 1542) ((helm (1 7 7)) (yasnippet (0 8 0)) (cl-lib (0 3))) "helm source for yasnippet.el" single ((:commit . "65ca732b510bfc31636708aebcfe4d2d845b59b0") (:keywords "convenience" "emulation") (:authors ("Kenji.I (Kenji Imakado)" . "ken.imakaado@gmail.com")) (:maintainer "Kenji.I (Kenji Imakado)" . "ken.imakaado@gmail.com"))]) (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"))]) (yasnippet-snippets . [(20190821 901) ((yasnippet (0 8 0))) "Collection of yasnippet snippets" tar ((:commit . "71ae4a665f0db13165f14687cf5828d4510ef557") (:keywords "snippets") (:authors ("Andrea Crotti" . "andrea.crotti.0@gmail.com")) (:maintainer "Andrea Crotti" . "andrea.crotti.0@gmail.com"))]) (counsel-projectile . [(20190817 102) ((counsel (0 12 0)) (projectile (2 0 0))) "Ivy integration for Projectile" single ((:commit . "fda7f0bad93a471fddf5fa01d6fdee5684e7f880") (:keywords "project" "convenience") (:authors ("Eric Danan")) (:maintainer "Eric Danan") (:url . "https://github.com/ericdanan/counsel-projectile"))]) (helm-make . [(20190729 1221) nil "Select a Makefile target with helm" single ((:commit . "6f3d9a0feed47c1d6a9b82baef2e2663ac496514") (:keywords "makefile") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/helm-make"))]) (ivy-hydra . [(20190731 1602) ((emacs (24 1)) (ivy (0 12 0)) (hydra (0 13 4))) "Additional key bindings for Ivy" single ((:commit . "824f8d767094ad48c047c811cbe764a0de96892c") (:keywords "convenience") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/swiper"))]) (ivy-rich . [(20190707 107) ((emacs (24 4)) (ivy (0 8 0))) "More friendly display transformer for ivy." single ((:commit . "e78fc4b9d467da338471f234393a1c791a6b0e6b") (:keywords "ivy") (:authors ("Yevgnen Koh" . "wherejoystarts@gmail.com")) (:maintainer "Yevgnen Koh" . "wherejoystarts@gmail.com"))]) (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"))]) (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/"))]) (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"))]) (yasnippet . [(20190724 1204) ((cl-lib (0 5))) "Yet another snippet extension for Emacs" single ((:commit . "d91dd66f2aed9bbaef32813a68b105ea77e83890") (:keywords "convenience" "emulation") (:maintainer "Noam Postavsky" . "npostavs@gmail.com") (:url . "http://github.com/joaotavora/yasnippet"))]) (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"))]) (ace-jump-helm-line . [(20160918 1836) ((avy (0 4 0)) (helm (1 6 3))) "Ace-jump to a candidate in helm window" single ((:commit . "1483055255df3f8ae349f7520f05b1e43ea3ed37") (:keywords "extensions") (:authors ("Junpeng Qiu" . "qjpchmail@gmail.com")) (:maintainer "Junpeng Qiu" . "qjpchmail@gmail.com") (:url . "https://github.com/cute-jumper/ace-jump-helm-line"))]) (helm-ag . [(20170209 1545) ((emacs (24 4)) (helm (2 0))) "the silver searcher with helm interface" single ((:commit . "2fc02c4ead29bf0db06fd70740cc7c364cb650ac") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-helm-ag"))]) (helm-descbinds . [(20190501 935) ((helm (1 5))) "A convenient `describe-bindings' with `helm'" single ((:commit . "b72515982396b6e336ad7beb6767e95a80fca192") (:keywords "helm" "help") (:authors ("Taiki SUGAWARA" . "buzz.taiki@gmail.com")) (:maintainer "Taiki SUGAWARA" . "buzz.taiki@gmail.com") (:url . "https://github.com/emacs-helm/helm-descbinds"))]) (helm-flx . [(20180103 516) ((emacs (24 4)) (helm (1 7 9)) (flx (0 5))) "Sort helm candidates by flx score" single ((:commit . "6640fac5cb16bee73c95b8ed1248a4e5e113690e") (:keywords "convenience" "helm" "fuzzy" "flx") (:authors ("PythonNut" . "pythonnut@pythonnut.com")) (:maintainer "PythonNut" . "pythonnut@pythonnut.com") (:url . "https://github.com/PythonNut/helm-flx"))]) (helm-mode-manager . [(20151124 938) ((helm (1 5 3))) "Select and toggle major and minor modes with helm" single ((:commit . "5d9c3ca4f8205d07ff4e03c4c3e88f596751c1fc") (:authors ("istib")) (:maintainer "istib") (:url . "https://github.com/istib/helm-mode-manager"))]) (helm-projectile . [(20190731 1538) ((helm (1 9 9)) (projectile (0 14 0)) (cl-lib (0 3))) "Helm integration for Projectile" single ((:commit . "5328b74dddcee8d1913803ca8167868831a07463") (:keywords "project" "convenience") (:authors ("Bozhidar Batsov")) (:maintainer "Bozhidar Batsov") (:url . "https://github.com/bbatsov/helm-projectile"))]) (helm-swoop . [(20190814 1234) ((helm (3 2)) (emacs (24 4))) "Efficiently hopping squeezed lines powered by helm interface" single ((:commit . "2f6ed31fafa741bb845a58536c178b02aeb27cfd") (:keywords "helm" "swoop" "inner" "buffer" "search") (:authors ("Shingo Fukuyama - http://fukuyama.co")) (:maintainer "Shingo Fukuyama - http://fukuyama.co") (:url . "https://github.com/ShingoFukuyama/helm-swoop"))]) (helm-themes . [(20160918 545) ((helm-core (2 0)) (emacs (24 4))) "Color theme selection with helm interface" single ((:commit . "1160af42590b0d845a55e65e1e782d9e4027fd6e") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-helm-themes"))]) (helm-xref . [(20190821 1252) ((emacs (25 1)) (helm (1 9 4))) "Helm interface for xref results" single ((:commit . "5290e2a05209b742d7efcd3e03b5f51ac1eab6ad") (:authors ("Fritz Stelzer" . "brotzeitmacher@gmail.com")) (:maintainer "Fritz Stelzer" . "brotzeitmacher@gmail.com") (:url . "https://github.com/brotzeit/helm-xref"))]) (winum . [(20181119 1705) ((cl-lib (0 5)) (dash (2 13 0))) "Navigate windows and frames using numbers." single ((:commit . "247df36c03d70b453e9b912d6e1b7065644f639d") (: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"))]) (treemacs-evil . [(20190619 1516) ((evil (1 2 12)) (treemacs (0 0))) "Evil mode integration for treemacs" single ((:commit . "748b2a584e13b03e8adc51ab901d036d75038408") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/treemacs"))]) (treemacs . [(20190814 459) ((emacs (25 2)) (cl-lib (0 5)) (dash (2 11 0)) (s (1 10 0)) (f (0 11 0)) (ace-window (0 9 0)) (pfuture (1 7)) (hydra (0 13 2)) (ht (2 2))) "A tree style file explorer package" tar ((:commit . "748b2a584e13b03e8adc51ab901d036d75038408") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/treemacs"))]) (ht . [(20190611 2131) ((dash (2 12 0))) "The missing hash table library for Emacs" single ((:commit . "5650a8cd190badb49d28d21e72a2f55c9380de7b") (:keywords "hash table" "hash map" "hash") (:authors ("Wilfred Hughes" . "me@wilfred.me.uk")) (:maintainer "Wilfred Hughes" . "me@wilfred.me.uk"))]) (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"))]) (ace-window . [(20190708 933) ((avy (0 2 0))) "Quickly switch windows." single ((:commit . "a5344925e399e1f015721cda6cf5db03c90ab87a") (:keywords "window" "location") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/ace-window"))]) (treemacs-projectile . [(20190619 1516) ((projectile (0 14 0)) (treemacs (0 0))) "Projectile integration for treemacs" single ((:commit . "748b2a584e13b03e8adc51ab901d036d75038408") (:authors ("Alexander Miller" . "alexanderm@web.de")) (:maintainer "Alexander Miller" . "alexanderm@web.de") (:url . "https://github.com/Alexander-Miller/treemacs"))]) (pos-tip . [(20150318 1513) nil "Show tooltip at point" single ((:commit . "051e08fec5cf30b7574bdf439f79fef7d42d689d") (:keywords "tooltip") (:authors ("S. Irie")) (:maintainer "S. Irie"))]) (flycheck . [(20190821 926) ((dash (2 12 1)) (pkg-info (0 4)) (let-alist (1 0 4)) (seq (1 11)) (emacs (24 3))) "On-the-fly syntax checking" tar ((:commit . "52ddbfc9429fdd8ae583672a1e4ebe3bff0bace6") (:keywords "convenience" "languages" "tools") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Clément Pit-Claudel" . "clement.pitclaudel@live.com") (:url . "http://www.flycheck.org"))]) (flycheck-pos-tip . [(20180610 1615) ((emacs (24 1)) (flycheck (0 22)) (pos-tip (0 4 6))) "Display Flycheck errors in GUI tooltips" single ((:commit . "909113977d37739387c7f099d74a724cfe6efcec") (:keywords "tools" "convenience") (:authors ("Akiha Senda" . "senda.akiha@gmail.com") ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com") (:url . "https://github.com/flycheck/flycheck-pos-tip"))]) (auto-dictionary . [(20150410 1610) nil "automatic dictionary switcher for flyspell" single ((:commit . "b364e08009fe0062cf0927d8a0582fad5a12b8e7") (:keywords "wp") (:authors ("Nikolaj Schumacher ")) (:maintainer "Nikolaj Schumacher ") (:url . "http://nschum.de/src/emacs/auto-dictionary/"))]) (flyspell-correct-ivy . [(20181205 1932) ((flyspell-correct (0 5 0)) (ivy (0 8 0))) "correcting words with flyspell via ivy interface" single ((:commit . "a0852074bab130a711ba6b4696a7cb8059dac8db") (:authors ("Boris Buliga" . "boris@d12frosted.io")) (:maintainer "Boris Buliga" . "boris@d12frosted.io") (:url . "https://github.com/d12frosted/flyspell-correct"))]) (flyspell-correct-helm . [(20181205 1932) ((flyspell-correct (0 5 0)) (helm (1 9 0))) "correcting words with flyspell via helm interface" single ((:commit . "a0852074bab130a711ba6b4696a7cb8059dac8db") (:authors ("Boris Buliga" . "boris@d12frosted.io")) (:maintainer "Boris Buliga" . "boris@d12frosted.io") (:url . "https://github.com/d12frosted/flyspell-correct"))]) (flyspell-correct . [(20190408 1010) nil "correcting words with flyspell via custom interface" tar ((:commit . "a0852074bab130a711ba6b4696a7cb8059dac8db") (:authors ("Boris Buliga" . "boris@d12frosted.io")) (:maintainer "Boris Buliga" . "boris@d12frosted.io") (:url . "https://github.com/d12frosted/flyspell-correct"))]) (flyspell-correct-popup . [(20181205 1932) ((flyspell-correct (0 5 0)) (popup (0 5 3))) "correcting words with flyspell via popup interface" single ((:commit . "a0852074bab130a711ba6b4696a7cb8059dac8db") (:authors ("Boris Buliga" . "boris@d12frosted.io")) (:maintainer "Boris Buliga" . "boris@d12frosted.io") (:url . "https://github.com/d12frosted/flyspell-correct"))]) (flyspell-popup . [(20170529 815) ((popup (0 5 0))) "Correcting words with Flyspell in popup menus" single ((:commit . "29311849bfd253b9b689bf331860b4c4d3bd4dde") (:keywords "convenience") (:authors ("Chunyang Xu" . "mail@xuchunyang.me")) (:maintainer "Chunyang Xu" . "mail@xuchunyang.me") (:url . "https://github.com/xuchunyang/flyspell-popup"))]) (highlight . [(20181002 1151) nil "Highlighting commands." single ((:commit . "ea733e17884aeae19172407e20559fc693fdd3a7") (:keywords "faces" "help" "local") (:authors ("Drew Adams")) (:maintainer nil . "Drew Adams (concat \"drew.adams\" \"@\" \"oracle\" \".com\")") (:url . "https://www.emacswiki.org/emacs/download/highlight.el"))]) (floobits . [(20180801 524) ((json (1 2)) (highlight (0))) "Floobits plugin for real-time collaborative editing" tar ((:commit . "489b294a7f30ecd2af2edc0823dead8102f27af6") (:keywords "comm" "tools") (:authors ("Matt Kaniaris") ("Geoff Greer")) (:maintainer "Matt Kaniaris") (:url . "http://github.com/Floobits/floobits-emacs"))]) (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"))]) (unfill . [(20170723 146) nil "Unfill paragraphs or regions, and toggle between filled & unfilled" single ((:commit . "df0c4dee19a3874b11c7c7f04e8a2fba629fda9b") (:keywords "utilities") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/unfill"))]) (evil-org . [(20180323 2306) ((emacs (24 4)) (evil (1 0))) "evil keybindings for org-mode" tar ((:commit . "b6d652a9163d3430a9e0933a554bdbee5244bbf6") (:keywords "evil" "vim-emulation" "org-mode" "key-bindings" "presets") (:maintainer "Somelauw") (:url . "https://github.com/Somelauw/evil-org-mode.git"))]) (gnuplot . [(20141231 2137) nil "drive gnuplot from within emacs" tar ((:commit . "21f9046e3f5caad41b750b5c9cee02fa4fd20fb9") (:keywords "gnuplot" "plotting") (:authors ("Bruce Ravel" . "bruceravel1@gmail.com")) (:maintainer "Bruce Ravel" . "bruceravel1@gmail.com"))]) (helm-org . [(20190819 617) ((helm (3 3)) (emacs (24 4))) "Helm for org headlines and keywords completion" single ((:commit . "542dda7bc9a3b9dfb439e4f8a1e5f60cfb6cc256") (:authors ("Thierry Volpiatto" . "thierry.volpiatto@gmail.com")) (:maintainer "Thierry Volpiatto" . "thierry.volpiatto@gmail.com") (:url . "https://github.com/emacs-helm/helm-org"))]) (helm-org-rifle . [(20190809 1831) ((emacs (24 4)) (dash (2 12)) (f (0 18 1)) (helm (1 9 4)) (s (1 10 0))) "Rifle through your Org files" single ((:commit . "dbda48031bad6fec1e130ee6e0d1a3bfea8ad8b8") (:keywords "hypermedia" "outlines") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "http://github.com/alphapapa/helm-org-rifle"))]) (org-brain . [(20190813 1155) ((emacs (25)) (org (9 2))) "Org-mode concept mapping" single ((:commit . "d54eb4373968c6392523117a9114d661d12d39ae") (: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-journal . [(20190816 2036) ((emacs (25 1))) "a simple org-mode based journaling mode" single ((:commit . "eb5e6cc56bfef96997b3477403bbc30f320f59fa") (:authors ("Bastian Bechtold")) (:maintainer "Bastian Bechtold") (:url . "http://github.com/bastibe/org-journal"))]) (org-download . [(20190821 501) ((async (1 2))) "Image drag-and-drop for Emacs org-mode" single ((:commit . "8bc54b6c1a7ac70c4d871ba9e2313035465e18b1") (:keywords "images" "screenshots" "download") (:authors ("Oleh Krehel")) (:maintainer "Oleh Krehel") (:url . "https://github.com/abo-abo/org-download"))]) (org-jira . [(20190712 443) ((emacs (24 5)) (cl-lib (0 5)) (request (0 2 0)) (dash (2 14 1))) "Syncing between Jira and Org-mode." tar ((:commit . "d1d2ff6155c6259a066110ed13d1850143618f7b") (:keywords "ahungry" "jira" "org" "bug" "tracker") (:maintainer "Matthew Carter" . "m@ahungry.com") (:url . "https://github.com/ahungry/org-jira"))]) (org-mime . [(20190805 57) ((emacs (24 4)) (cl-lib (0 5))) "org html export for text/html MIME emails" single ((:commit . "4bd5d55ba9bca84ffd938b477c72d701cf3736df") (:keywords "mime" "mail" "email" "html") (:authors ("Eric Schulte")) (:maintainer "Chen Bin (redguardtoo)") (:url . "http://github.com/org-mime/org-mime"))]) (alert . [(20190816 2205) ((gntp (0 1)) (log4e (0 3 0)) (cl-lib (0 5))) "Growl-style notification system for Emacs" single ((:commit . "95a735e6947b0d09dbf9b9a944a21e5f5c1e6ee1") (:keywords "notification" "emacs" "message") (:authors ("John Wiegley" . "jwiegley@gmail.com")) (:maintainer "John Wiegley" . "jwiegley@gmail.com") (:url . "https://github.com/jwiegley/alert"))]) (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"))]) (gntp . [(20141025 250) nil "Growl Notification Protocol for Emacs" single ((:commit . "767571135e2c0985944017dc59b0be79af222ef5") (:authors ("Engelke Eschner" . "tekai@gmx.li")) (:maintainer "Engelke Eschner" . "tekai@gmx.li"))]) (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-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-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-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-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"))]) (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-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-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"))]) (htmlize . [(20180923 1829) nil "Convert buffer text and decorations to HTML." single ((:commit . "8db0aa6aab77475a732b7363f0d57bd3933c18fd") (:keywords "hypermedia" "extensions") (:authors ("Hrvoje Niksic" . "hniksic@gmail.com")) (:maintainer "Hrvoje Niksic" . "hniksic@gmail.com"))]) (org-re-reveal . [(20190821 919) ((emacs (24 4)) (org (8 3)) (htmlize (1 34))) "Org export to reveal.js presentations" tar ((:commit . "5c5b087449eb47c5b98aca64def88a1857f0d48d") (:keywords "tools" "outlines" "hypermedia" "slideshow" "presentation" "oer") (:url . "https://gitlab.com/oer/org-re-reveal"))]) (ox-hugo . [(20190802 1755) ((emacs (24 4)) (org (9 0))) "Hugo Markdown Back-End for Org Export Engine" tar ((:commit . "470a708152c4a17eca80c49e042d4eeb57645539") (:keywords "org" "markdown" "docs") (:url . "https://ox-hugo.scripter.co"))]) (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"))]) (dash-functional . [(20180107 1618) ((dash (2 0 0)) (emacs (24))) "Collection of useful combinators for Emacs Lisp" single ((:commit . "11907f4592ff1813536366d54245d3ecf6b99198") (:keywords "lisp" "functions" "combinators"))]) (request-deferred . [(20181129 317) ((deferred (0 3 1)) (request (0 2 0))) "Wrap request.el by deferred" single ((:commit . "000719521e7a1f065f78ea5ffe787d949a5abc5e") (:authors ("Takafumi Arakaki ")) (:maintainer "Takafumi Arakaki ") (:url . "https://github.com/tkf/emacs-request"))]) (deferred . [(20170901 1330) ((emacs (24 4))) "Simple asynchronous functions for emacs lisp" single ((:commit . "2239671d94b38d92e9b28d4e12fd79814cfb9c16") (:keywords "deferred" "async") (:authors ("SAKURAI Masashi ")) (:maintainer "SAKURAI Masashi ") (:url . "https://github.com/kiwanami/emacs-deferred"))]) (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-sticky-header . [(20190406 2313) ((emacs (24 4)) (org (8 3 5))) "Show off-screen Org heading at top of window" single ((:commit . "32c13a56a78a4de239010031fea4b9583bac2512") (:keywords "hypermedia" "outlines" "org") (:authors ("Adam Porter" . "adam@alphapapa.net")) (:maintainer "Adam Porter" . "adam@alphapapa.net") (:url . "http://github.com/alphapapa/org-sticky-header"))]) (projectile . [(20190626 1315) ((emacs (25 1)) (pkg-info (0 4))) "Manage and navigate projects in Emacs easily" single ((:commit . "71a01f409a319d57eb3832e93e8a412fbc9d7a65") (:keywords "project" "convenience") (:authors ("Bozhidar Batsov" . "bozhidar@batsov.com")) (:maintainer "Bozhidar Batsov" . "bozhidar@batsov.com") (:url . "https://github.com/bbatsov/projectile"))]) (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"))]) (epl . [(20180205 2049) ((cl-lib (0 3))) "Emacs Package Library" single ((:commit . "78ab7a85c08222cd15582a298a364774e3282ce6") (:keywords "convenience") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:url . "http://github.com/cask/epl"))]) (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"))]) (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"))]) (pdf-tools . [(20190701 202) ((emacs (24 3)) (tablist (1 0)) (let-alist (1 0 4))) "Support library for PDF documents." tar ((:commit . "db7de3901ae0e55f6ab8cf9baec257f706c3d16e") (:keywords "files" "multimedia") (:authors ("Andreas Politz" . "politza@fh-trier.de")) (:maintainer "Andreas Politz" . "politza@fh-trier.de"))]) (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"))]) (ace-jump-mode . [(20140616 815) nil "a quick cursor location minor mode for emacs" single ((:commit . "8351e2df4fbbeb2a4003f2fb39f46d33803f3dac") (:keywords "motion" "location" "cursor") (:authors ("winterTTr" . "winterTTr@gmail.com")) (:maintainer "winterTTr" . "winterTTr@gmail.com") (:url . "https://github.com/winterTTr/ace-jump-mode/"))]) (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"))]) (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"))]) (elfeed-goodies . [(20190128 1631) ((popwin (1 0 0)) (powerline (2 2)) (elfeed (2 0 0)) (cl-lib (0 5)) (noflet (0 0 10)) (ace-jump-mode (2 0))) "Elfeed goodies" tar ((:commit . "95b4ea632fbd5960927952ec8f3394eb88da4752") (:authors ("Gergely Nagy")) (:maintainer "Gergely Nagy") (:url . "https://github.com/algernon/elfeed-goodies"))]) (org . [(20190819) nil "Outline-based notes management and organizer" tar nil]) (elfeed-org . [(20181015 1100) ((elfeed (1 1 1)) (org (8 2 7)) (dash (2 10 0)) (s (1 9 0)) (cl-lib (0 5))) "Configure elfeed with one or more org-mode files" single ((:commit . "77b6bbf222487809813de260447d31c4c59902c9") (:keywords "news") (:authors ("Remy Honig" . "remyhonig@gmail.com")) (:maintainer "Remy Honig" . "remyhonig@gmail.com") (:url . "https://github.com/remyhonig/elfeed-org"))]) (elfeed . [(20190809 1358) ((emacs (24 3))) "an Emacs Atom/RSS feed reader" tar ((:commit . "87433438e10d851d57d76bea4403cbde936647e9"))]) (simple-httpd . [(20190110 1505) ((cl-lib (0 3))) "pure elisp HTTP server" single ((:commit . "08535d0fad6a32fdc03d725ec74e10a754bb9c7a") (:authors ("Christopher Wellons" . "wellons@nullprogram.com")) (:maintainer "Christopher Wellons" . "wellons@nullprogram.com") (:url . "https://github.com/skeeto/emacs-http-server"))]) (elfeed-web . [(20180829 1716) ((simple-httpd (1 4 3)) (elfeed (1 4 0)) (emacs (24 1))) "web interface to Elfeed" tar ((:commit . "87433438e10d851d57d76bea4403cbde936647e9"))]) (dash-at-point . [(20180710 1356) nil "Search the word at point with Dash" single ((:commit . "4d795a23a8428c421d5107f1b005c9d8e0d1816c") (:authors ("Shinji Tanaka" . "shinji.tanaka@gmail.com")) (:maintainer "Shinji Tanaka" . "shinji.tanaka@gmail.com") (:url . "https://github.com/stanaka/dash-at-point"))]) (helm-dash . [(20190527 1118) ((emacs (24 4)) (dash-docs (1 4 0)) (helm (1 9 2)) (cl-lib (0 5))) "Offline documentation browser for +150 APIs using Dash docsets." single ((:commit . "6c76c794fec95586028633f24773451812af5df4") (:keywords "docs") (:authors ("Raimon Grau" . "raimonster@gmail.com") ("Toni Reina " . "areina0@gmail.com") ("Bryan Gilbert" . "bryan@bryan.sh")) (:maintainer "Raimon Grau" . "raimonster@gmail.com") (:url . "https://github.com/dash-docs-el/helm-dash"))]) (counsel . [(20190821 1027) ((emacs (24 3)) (swiper (0 12 0))) "Various completion functions using Ivy" single ((:commit . "824f8d767094ad48c047c811cbe764a0de96892c") (:keywords "convenience" "matching" "tools") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/swiper"))]) (dash-docs . [(20190516 1702) ((emacs (24 4)) (cl-lib (0 5)) (async (1 9 3))) "Offline documentation browser using Dash docsets." single ((:commit . "111fd9b97001f1ad887b45e5308a14ddd68ce70a") (:keywords "docs") (:authors ("Raimon Grau" . "raimonster@gmail.com") ("Toni Reina " . "areina0@gmail.com") ("Bryan Gilbert" . "bryan@bryan.sh")) (:maintainer "Raimon Grau" . "raimonster@gmail.com") (:url . "http://github.com/areina/helm-dash"))]) (swiper . [(20190801 1110) ((emacs (24 1)) (ivy (0 12 0))) "Isearch with an overview. Oh, man!" single ((:commit . "824f8d767094ad48c047c811cbe764a0de96892c") (:keywords "matching") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/swiper"))]) (counsel-dash . [(20190510 708) ((emacs (24 4)) (dash-docs (1 4 0)) (counsel (0 8 0)) (cl-lib (0 5))) "Browse dash docsets using Ivy" single ((:commit . "5856b8766956428c183a2df911a05f845d014041") (:keywords "dash" "ivy" "counsel") (:authors ("Nathan Kot" . "nk@nathankot.com")) (:maintainer "Nathan Kot" . "nk@nathankot.com") (:url . "https://github.com/nathankot/counsel-dash"))]) (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"))]) (esxml . [(20171129 807) nil "Library for working with xml via esxml and sxml" tar ((:commit . "5548ceba17deae0c3c6d0092672edc4de3c75ce3"))]) (nov . [(20190818 2002) ((dash (2 12 0)) (esxml (0 3 3)) (emacs (24 4))) "Featureful EPUB reader mode" single ((:commit . "5184fbb1f3b3540be58a28f6dd469ff212ccc9bd") (:keywords "hypermedia" "multimedia" "epub") (:authors ("Vasilij Schneidermann" . "mail@vasilij.de")) (:maintainer "Vasilij Schneidermann" . "mail@vasilij.de") (:url . "https://github.com/wasamasa/nov.el"))]) (deft . [(20181226 1534) nil "quickly browse, filter, and edit plain text notes" single ((:commit . "f54e8a65a7e75a029657364055420374df45656d") (:keywords "plain text" "notes" "simplenote" "notational velocity") (:authors ("Jason R. Blevins" . "jrblevin@xbeta.org")) (:maintainer "Jason R. Blevins" . "jrblevin@xbeta.org") (:url . "https://jblevins.org/projects/deft/"))]) (aggressive-indent . [(20190218 2331) ((emacs (24 1)) (cl-lib (0 5))) "Minor mode to aggressively keep your code always indented" single ((:commit . "3803f24020ef0a656dc5345713c4964073aec9a8") (: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"))]) (bracketed-paste . [(20160407 2348) ((emacs (24 3))) "bracketed paste mode support within emacs -nw" single ((:commit . "843ce3bbb63d560face889e13a57a2f7543957d5") (:keywords "terminals") (:authors ("Takeshi Banse" . "takebi@laafc.net")) (:maintainer "Takeshi Banse" . "takebi@laafc.net"))]) (clean-aindent-mode . [(20171017 2043) nil "Simple indent and unindent, trims indent white-space" single ((:commit . "a97bcae8f43a9ff64e95473e4ef0d8bafe829211") (:keywords "indentation" "whitespace" "backspace") (:authors ("peter marinov" . "efravia@gmail.com")) (:maintainer "peter marinov" . "efravia@gmail.com") (:url . "https://github.com/pmarinov/clean-aindent-mode"))]) (editorconfig . [(20190703 336) ((cl-lib (0 5)) (emacs (24))) "EditorConfig Emacs Plugin" tar ((:commit . "f24f651245344f5f97c348246ce035843419b322") (:authors ("EditorConfig Team" . "editorconfig@googlegroups.com")) (:maintainer "EditorConfig Team" . "editorconfig@googlegroups.com") (:url . "https://github.com/editorconfig/editorconfig-emacs#readme"))]) (expand-region . [(20190416 538) nil "Increase selected region by semantic units." tar ((:commit . "1c31447730443d98f90f65dfcb752f347d46ad1b"))]) (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"))]) (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"))]) (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"))]) (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"))]) (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"))]) (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"))]) (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"))]) (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"))]) (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"))]) (flx . [(20151030 1812) ((cl-lib (0 3))) "fuzzy matching with good sorting" single ((:commit . "46040d0b096a0340d91235561f27a959a61d0fef") (:authors ("Le Wang")) (:maintainer "Le Wang") (:url . "https://github.com/lewang/flx"))]) (flx-ido . [(20180117 1519) ((flx (0 1)) (cl-lib (0 3))) "flx integration for ido" single ((:commit . "46040d0b096a0340d91235561f27a959a61d0fef") (:authors ("Le Wang")) (:maintainer "Le Wang") (:url . "https://github.com/lewang/flx"))]) (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"))]) (avy . [(20190630 1538) ((emacs (24 1)) (cl-lib (0 5))) "Jump to arbitrary positions in visible text and select text quickly." single ((:commit . "66886e265cf41c6061dc70440eb5b61fad8f48e0") (:keywords "point" "location") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/avy"))]) (ace-link . [(20190716 920) ((avy (0 4 0))) "Quickly follow links" single ((:commit . "9b6d02564650e963ce05d124f83ced17e0027d7f") (:keywords "convenience" "links" "avy") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/ace-link"))]) (centered-cursor-mode . [(20190306 1006) nil "cursor stays vertically centered" single ((:commit . "90e6d68a74d134f67c32d0621d64db90703c46eb") (:keywords "convenience") (:authors ("André Riemann" . "andre.riemann@web.de")) (:maintainer "André Riemann" . "andre.riemann@web.de") (:url . "https://github.com/andre-r/centered-cursor-mode.el"))]) (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"))]) (hydra . [(20190821 939) ((cl-lib (0 5)) (lv (0))) "Make bindings that stick around." tar ((:commit . "435c55e9f75a8cf3ae6a4ba0c7725e3dc4e5963f") (:keywords "bindings") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/hydra"))]) (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"))]) (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"))]) (lv . [(20190821 947) nil "Other echo area" single ((:commit . "435c55e9f75a8cf3ae6a4ba0c7725e3dc4e5963f") (:authors ("Oleh Krehel")) (:maintainer "Oleh Krehel"))]) (paradox . [(20190624 41) ((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 . "1b9e4b198e0a02773b52f6fe4fd03a82340c6cbc") (:keywords "package" "packages") (:authors ("Artur Malabarba" . "emacs@endlessparentheses.com")) (:maintainer "Artur Malabarba" . "emacs@endlessparentheses.com") (:url . "https://github.com/Malabarba/paradox"))]) (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"))]) (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/"))]) (symbol-overlay . [(20190608 442) ((emacs (24 3))) "Highlight symbols with keymap-enabled overlays" single ((:commit . "e40a7c407f24158c45eaa5f54ed41f5e416a51dc") (:keywords "faces" "matching") (:authors ("wolray" . "wolray@foxmail.com")) (:maintainer "wolray" . "wolray@foxmail.com") (:url . "https://github.com/wolray/symbol-overlay/"))]) (helm . [(20190821 735) ((emacs (24 4)) (async (1 9 3)) (popup (0 5 3)) (helm-core (3 0))) "Helm is an Emacs incremental and narrowing framework" tar ((:commit . "a38316808f4f5c2b4c4b6b909ce6e6544a9c4ffb") (:url . "https://emacs-helm.github.io/helm/"))]) (helm-core . [(20190820 1142) ((emacs (24 4)) (async (1 9 3))) "Development files for Helm" tar ((:commit . "a38316808f4f5c2b4c4b6b909ce6e6544a9c4ffb") (:url . "https://emacs-helm.github.io/helm/"))]) (async . [(20190503 656) nil "Asynchronous processing in Emacs" tar ((:commit . "bd68cc1ab1ac6af890e250bdaa12ffb1cb9649be") (:keywords "async") (:url . "https://github.com/jwiegley/emacs-async"))]) (helm-purpose . [(20170114 1636) ((emacs (24)) (helm (1 9 2)) (window-purpose (1 4))) "Helm Interface for Purpose" single ((:commit . "9ff4c21c1e9ebc7afb851b738f815df7343bb287") (:authors ("Bar Magal (2016)")) (:maintainer "Bar Magal (2016)") (:url . "https://github.com/bmag/helm-purpose"))]) (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"))]) (ivy . [(20190821 1017) ((emacs (24 1))) "Incremental Vertical completYon" tar ((:commit . "824f8d767094ad48c047c811cbe764a0de96892c") (:keywords "matching") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/swiper"))]) (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"))]) (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"))]) (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"))]) (define-word . [(20190506 1525) ((emacs (24 3))) "display the definition of word at point." single ((:commit . "11bfee628aee082a9a3a2fd5f083cbdb05d5d00a") (:keywords "dictionary" "convenience") (:authors ("Oleh Krehel" . "ohwoeowho@gmail.com")) (:maintainer "Oleh Krehel" . "ohwoeowho@gmail.com") (:url . "https://github.com/abo-abo/define-word"))]) (google-translate . [(20190620 1416) nil "Emacs interface to Google Translate." tar ((:commit . "dc118de511c433750d4c98b9dd67350118c04fd6"))]) (org-plus-contrib . [(20190819) nil "Outline-based notes management and organizer" tar nil]) (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"))]) (toc-org . [(20190603 803) nil "add table of contents to org-mode files (formerly, org-toc)" single ((:commit . "2539b4be401d006e2752f6ad3b88e696889a7fc8") (:keywords "org-mode" "org-toc" "toc-org" "org" "toc" "table" "of" "contents") (:authors ("Sergei Nosov ")) (:maintainer "Sergei Nosov ") (:url . "https://github.com/snosov1/toc-org"))]) (hl-anything . [(20160422 1708) ((emacs (24 3))) "Highlight symbols, selections, enclosing parens and more." tar ((:commit . "8696bc55a8cba408f0fc83a907a9ec529d79e558") (:authors ("boyw165")) (:maintainer "boyw165"))]) (column-enforce-mode . [(20171030 1900) nil "Highlight text that extends beyond a column" single ((:commit . "2341a2b6a33d4b8b74c35062ec9cfe1bffd61944") (:authors ("Jordon Biondo")) (:maintainer "Jordon Biondo") (:url . "www.github.com/jordonbiondo/column-enforce-mode"))]) (highlight-indentation . [(20181204 839) nil "Minor modes for highlighting indentation" single ((:commit . "d03803f2c06749c430443a3d24e039cbafc9c58f") (:authors ("Anton Johansson" . "anton.johansson@gmail.com")) (:maintainer "Anton Johansson" . "anton.johansson@gmail.com") (:url . "https://github.com/antonj/Highlight-Indentation-for-Emacs"))]) (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"))]) (highlight-numbers . [(20181013 1744) ((emacs (24)) (parent-mode (2 0))) "Highlight numbers in source code" single ((:commit . "8b4744c7f46c72b1d3d599d4fb75ef8183dee307") (:authors ("Fanael Linithien" . "fanael4@gmail.com")) (:maintainer "Fanael Linithien" . "fanael4@gmail.com") (:url . "https://github.com/Fanael/highlight-numbers"))]) (highlight-parentheses . [(20180704 1102) nil "highlight surrounding parentheses" single ((:commit . "f0bd58c8dadd2db703b7bfd09e911b5fda05b3df") (:keywords "faces" "matching") (:authors ("Nikolaj Schumacher ")) (:maintainer "Tassilo Horn" . "tsdh@gnu.org") (:url . "https://github.com/tsdh/highlight-parentheses.el"))]) (indent-guide . [(20170221 1127) nil "show vertical lines to guide indentation" single ((:commit . "d64f43011c72068e008621e620009ec592b35913") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) (rainbow-delimiters . [(20170929 1132) nil "Highlight brackets according to their depth" single ((:commit . "e561cff4abf97d00d9b2b5f10256d417182e2772") (: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"))]) (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"))]) (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"))]) (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"))]) (hl-todo . [(20190807 1831) ((emacs (25))) "highlight TODO and similar keywords" single ((:commit . "be57dbc5a4667e4a60b8249b53fa176db1019c8e") (:keywords "convenience") (:authors ("Jonas Bernoulli" . "jonas@bernoul.li")) (:maintainer "Jonas Bernoulli" . "jonas@bernoul.li") (:url . "https://github.com/tarsius/hl-todo"))]) (page-break-lines . [(20190519 2238) ((emacs (24 4))) "Display ^L page breaks as tidy horizontal lines" single ((:commit . "6f19d894bda6a981c10a58df5e23419f4d2ba353") (:keywords "convenience" "faces") (:authors ("Steve Purcell" . "steve@sanityinc.com")) (:maintainer "Steve Purcell" . "steve@sanityinc.com") (:url . "https://github.com/purcell/page-break-lines"))]) (evil-anzu . [(20170124 718) ((evil (1 0 0)) (anzu (0 46))) "anzu for evil-mode" single ((:commit . "9bca6ca14d865e7e005bc02a28a09b4ae74facc9") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com") ("Fredrik Bergroth" . "fbergroth@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-evil-anzu"))]) (evil-args . [(20180908 2157) ((evil (1 0 8))) "Motions and text objects for delimited arguments in Evil." single ((:commit . "758ad5ae54ad34202064fec192c88151c08cb387") (:keywords "evil" "vim-emulation") (:authors ("Connor Smith" . "wconnorsmith@gmail.com")) (:maintainer "Connor Smith" . "wconnorsmith@gmail.com") (:url . "http://github.com/wcsmith/evil-args"))]) (evil-ediff . [(20170724 1923) ((evil (1 2 3))) "Make ediff a little evil" single ((:commit . "50d26cb0654fca8f8fd7227410e5cbf0b8f681cf") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainer "Justin Burkett" . "justin@burkett.cc") (:url . "https://github.com/justbur/evil-ediff"))]) (evil-exchange . [(20170511 259) ((evil (1 2 8)) (cl-lib (0 3))) "Exchange text more easily within Evil" single ((:commit . "47691537815150715e64e6f6ec79be7746c96120") (:keywords "evil" "plugin") (:authors ("Dewdrops" . "v_v_4474@126.com")) (:maintainer "Dewdrops" . "v_v_4474@126.com") (:url . "http://github.com/Dewdrops/evil-exchange"))]) (evil-goggles . [(20181123 1946) ((emacs (24 4)) (evil (1 0 0))) "Add a visual hint to evil operations" single ((:commit . "78454a7e8bd609edf0d93cb0a7f9ed576dd33546") (:keywords "emulations" "evil" "vim" "visual") (:authors ("edkolev" . "evgenysw@gmail.com")) (:maintainer "edkolev" . "evgenysw@gmail.com") (:url . "http://github.com/edkolev/evil-goggles"))]) (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"))]) (evil-iedit-state . [(20180607 558) ((evil (1 0 9)) (iedit (0 97))) "Evil states to interface iedit mode." single ((:commit . "f75cff4ecbd5beaa9ca64a6c157c4105f078daec") (:keywords "convenience" "editing" "evil" "iedit" "mnemonic") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com") (:url . "https://github.com/syl20bnr/evil-iedit-state"))]) (evil-indent-plus . [(20151109 1906) ((evil (0)) (cl-lib (0 5))) "Evil textobjects based on indentation" single ((:commit . "0c7501e6efed661242c3a20e0a6c79a6455c2c40") (:keywords "convenience" "evil") (:authors ("Eivind Fonn" . "evfonn@gmail.com")) (:maintainer "Eivind Fonn" . "evfonn@gmail.com") (:url . "http://github.com/TheBB/evil-indent-plus"))]) (evil-lion . [(20170811 614) ((emacs (24 3)) (evil (1 0 0))) "Evil align operator, port of vim-lion" single ((:commit . "6b03593f5dd6e7c9ca02207f9a73615cf94c93ab") (:keywords "emulations" "evil" "vim") (:authors ("edkolev" . "evgenysw@gmail.com")) (:maintainer "edkolev" . "evgenysw@gmail.com") (:url . "http://github.com/edkolev/evil-lion"))]) (smartparens . [(20190728 2037) ((dash (2 13 0)) (cl-lib (0 3))) "Automatic insertion, wrapping and paredit-like navigation with user defined pairs." tar ((:commit . "7080e7fba9f478c2e5d4c18a325c3a5d60f6be76"))]) (bind-map . [(20161207 1511) ((emacs (24 3))) "Bind personal keymaps in multiple locations" single ((:commit . "bf4181e3a41463684adfffc6c5c305b30480e30f") (:authors ("Justin Burkett" . "justin@burkett.cc")) (:maintainer "Justin Burkett" . "justin@burkett.cc") (:url . "https://github.com/justbur/emacs-bind-map"))]) (evil-lisp-state . [(20160404 248) ((evil (1 0 9)) (bind-map (0)) (smartparens (1 6 1))) "An evil state to edit Lisp code" single ((:commit . "3c65fecd9917a41eaf6460f22187e2323821f3ce") (:keywords "convenience" "editing" "evil" "smartparens" "lisp" "mnemonic") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com") (:url . "https://github.com/syl20bnr/evil-lisp-state"))]) (evil-nerd-commenter . [(20190801 148) ((emacs (24 4))) "Comment/uncomment lines efficiently. Like Nerd Commenter in Vim" tar ((:commit . "7132693a4cc684dff232839fed45a8a54d832646") (:keywords "commenter" "vim" "line" "evil") (:authors ("Chen Bin" . "chenbin.sh@gmail.com")) (:maintainer "Chen Bin" . "chenbin.sh@gmail.com") (:url . "http://github.com/redguardtoo/evil-nerd-commenter"))]) (evil-numbers . [(20140606 1251) nil "increment/decrement numbers like in vim" single ((:commit . "6ea1c8c3a9b37bed63d48f1128e9a4910e68187e") (:keywords "numbers" "increment" "decrement" "octal" "hex" "binary") (:authors ("Michael Markert" . "markert.michael@googlemail.com")) (:maintainer "Michael Markert" . "markert.michael@googlemail.com") (:url . "http://github.com/cofi/evil-numbers"))]) (evil-textobj-line . [(20150729 1522) ((evil (1 0 0))) "evil textobj line" single ((:commit . "3d401b6831bdbeec967ec8e64177a8950251e812") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-evil-textobj-line"))]) (evil-tutor . [(20150103 650) ((evil (1 0 9))) "Vimtutor adapted to Evil and wrapped in a major-mode" tar ((:commit . "4e124cd3911dc0d1b6817ad2c9e59b4753638f28") (:keywords "convenience" "editing" "evil") (:authors ("Sylvain Benner" . "sylvain.benner@gmail.com")) (:maintainer "Sylvain Benner" . "sylvain.benner@gmail.com") (:url . "https://github.com/syl20bnr/evil-tutor"))]) (evil-visual-mark-mode . [(20190116 1557) ((evil (1 0 9)) (dash (2 10))) "Display evil marks on buffer" single ((:commit . "ac5997971972a9251f140b5542d82790ca4a43b4") (:keywords "evil") (:authors ("Roman Gonzalez" . "romanandreg@gmail.com")) (:maintainer "Roman Gonzalez" . "romanandreg@gmail.com"))]) (evil-visualstar . [(20160223 48) ((evil (0))) "Starts a * or # search from the visual selection" single ((:commit . "06c053d8f7381f91c53311b1234872ca96ced752") (:keywords "evil" "vim" "visualstar") (:authors ("Bailey Ling")) (:maintainer "Bailey Ling") (:url . "https://github.com/bling/evil-visualstar"))]) (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"))]) (anzu . [(20190303 1701) ((emacs (24 3))) "Show number of matches in mode-line while searching" single ((:commit . "592f8ee6d0b1bc543943b36a30063c2d1aac4b22") (:authors ("Syohei YOSHIDA" . "syohex@gmail.com")) (:maintainer "Syohei YOSHIDA" . "syohex@gmail.com") (:url . "https://github.com/syohex/emacs-anzu"))]) (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"))]) (doom-modeline . [(20190820 1749) ((emacs (25 1)) (all-the-icons (1 0 0)) (shrink-path (0 2 0)) (dash (2 11 0))) "A minimal and modern mode-line" tar ((:commit . "442e1ada1832928679fb3e5eb09b63c842853575") (:keywords "faces" "mode-line") (:authors ("Vincent Zhang" . "seagle0128@gmail.com")) (:maintainer "Vincent Zhang" . "seagle0128@gmail.com") (:url . "https://github.com/seagle0128/doom-modeline"))]) (fancy-battery . [(20150101 1204) ((emacs (24 1))) "Fancy battery display" single ((:commit . "9b88ae77a01aa3edc529840338bcb2db7f445822") (:keywords "convenience" "tools" "hardware") (:authors ("Sebastian Wiesner" . "swiesner@lunaryorn.com")) (:maintainer "Sebastian Wiesner" . "swiesner@lunaryorn.com") (:url . "https://github.com/lunaryorn/fancy-battery.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"))]) (all-the-icons . [(20190320 1809) ((emacs (24 3)) (memoize (1 0 1))) "A library for inserting Developer icons" tar ((:commit . "f996fafa5b2ea072d0ad1df9cd98acc75820f530") (:keywords "convenient" "lisp") (:authors ("Dominic Charlesworth" . "dgc336@gmail.com")) (:maintainer "Dominic Charlesworth" . "dgc336@gmail.com") (:url . "https://github.com/domtronn/all-the-icons.el"))]) (memoize . [(20180614 1930) nil "Memoization functions" single ((:commit . "9a561268ffb550b257a08710489a95cd087998b6") (:authors ("Christopher Wellons" . "mosquitopsu@gmail.com")) (:maintainer "Christopher Wellons" . "mosquitopsu@gmail.com") (:url . "https://github.com/skeeto/emacs-memoize"))]) (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/"))]) (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"))]) (symon . [(20170224 833) nil "tiny graphical system monitor" single ((:commit . "8dd8b6df49b03cd7d31b85aedbe9dd08fb922335") (:authors ("zk_phi")) (:maintainer "zk_phi") (:url . "http://hins11.yu-yake.com/"))]) (devdocs . [(20170731 850) nil "Launch DevDocs search" single ((:commit . "a2d51e824f0cc48a9dd611cc740bc8b86143e611") (:authors ("Chunyang Xu" . "xuchunyang.me@gmail.com")) (:maintainer "Chunyang Xu" . "xuchunyang.me@gmail.com") (:url . "https://github.com/xuchunyang/DevDocs.el"))]) (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"))]) (f . [(20190109 906) ((s (1 7 0)) (dash (2 2 0))) "Modern API for working with files and directories" single ((:commit . "8191672377816a1975414cc1f116fd3b94b30bd0") (:keywords "files" "directories") (:authors ("Johan Andersson" . "johan.rejeep@gmail.com")) (:maintainer "Johan Andersson" . "johan.rejeep@gmail.com") (:url . "http://github.com/rejeep/f.el"))]) (dash . [(20190814 2006) nil "A modern list library for Emacs" single ((:commit . "11907f4592ff1813536366d54245d3ecf6b99198") (:keywords "lists") (:authors ("Magnar Sveen" . "magnars@gmail.com")) (:maintainer "Magnar Sveen" . "magnars@gmail.com"))]) (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"))]) (dumb-jump . [(20190804 533) ((emacs (24 3)) (f (0 20 0)) (s (1 11 0)) (dash (2 9 0)) (popup (0 5 3))) "jump to definition for multiple languages without configuration." single ((:commit . "7ffa63cdc8481158a2dbfe4acc6719ebe7fff056") (:keywords "programming") (:authors ("jack angers")) (:maintainer "jack angers"))]) (request . [(20190819 1735) ((emacs (24 4))) "Compatible layer for URL request in Emacs" single ((:commit . "000719521e7a1f065f78ea5ffe787d949a5abc5e") (:authors ("Takafumi Arakaki ")) (:maintainer "Takafumi Arakaki ") (:url . "https://github.com/tkf/emacs-request"))]) (evil-snipe . [(20180731 1731) ((emacs (24 4)) (evil (1 2 12)) (cl-lib (0 5))) "emulate vim-sneak & vim-seek" single ((:commit . "8dd076cc56eb9b04494e4e303b86a959b048350b") (:keywords "emulation" "vim" "evil" "sneak" "seek") (:authors ("Henrik Lissner ")) (:maintainer "Henrik Lissner" . "henrik@lissner.net") (:url . "https://github.com/hlissner/evil-snipe"))]) (evil . [(20190729 704) ((emacs (24 1)) (undo-tree (0 6 3)) (goto-chg (1 6)) (cl-lib (0 5))) "Extensible Vi layer for Emacs." tar ((:commit . "874beba2cb243c325eca08fb7badff567f3c9494"))]) (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"))]) (goto-chg . [(20190110 2114) ((undo-tree (0 1 3))) "goto last change" single ((:commit . "1829a13026c597e358f716d2c7793202458120b5") (:keywords "convenience" "matching") (:authors ("David Andersson ")) (:maintainer "Vasilij Schneidermann" . "v.schneidermann@gmail.com") (:url . "https://github.com/emacs-evil/goto-chg"))]) (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"))]) (evil-commentary . [(20170413 1451) ((evil (1 0 0))) "Comment stuff out. A port of vim-commentary." tar ((:commit . "395f91014b69844b81660c155f42eb9b1b3d199d") (:keywords "evil" "comment" "commentary" "evil-commentary") (:authors ("Quang Linh LE" . "linktohack@gmail.com")) (:maintainer "Quang Linh LE" . "linktohack@gmail.com") (:url . "http://github.com/linktohack/evil-commentary"))]) (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"))]))
\ No newline at end of file
diff --git a/packages/arduino-mode-20180509.36.tar b/packages/arduino-mode-20180509.36.tar
index 4b59456..1ebe301 100644
Binary files a/packages/arduino-mode-20180509.36.tar and b/packages/arduino-mode-20180509.36.tar differ
diff --git a/packages/async-20180527.1730.tar b/packages/async-20190503.656.tar
similarity index 93%
rename from packages/async-20180527.1730.tar
rename to packages/async-20190503.656.tar
index d4e8681..6347fef 100644
Binary files a/packages/async-20180527.1730.tar and b/packages/async-20190503.656.tar differ
diff --git a/packages/attrap-20190805.1829.el b/packages/attrap-20190805.1829.el
new file mode 100644
index 0000000..653dc51
--- /dev/null
+++ b/packages/attrap-20190805.1829.el
@@ -0,0 +1,398 @@
+;;; attrap.el --- ATtempt To Repair At Point -*- lexical-binding: t -*-
+
+;; Copyright (c) 2018 Jean-Philippe Bernardy
+
+
+;; Author: Jean-Philippe Bernardy
+;; Maintainer: Jean-Philippe Bernardy
+;; URL: https://github.com/jyp/attrap
+;; Package-Version: 20190805.1829
+;; Created: February 2018
+;; Keywords: programming, tools
+;; Package-Requires: ((dash "2.12.0") (emacs "25.1") (f "0.19.0") (flycheck "0.30") (s "1.11.0"))
+;; Version: 0.1
+
+;; 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 GNU Emacs; see the file COPYING. If not, write to
+;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+;; Boston, MA 02110-1301, USA.
+
+;;; Commentary:
+
+;; Attrap! provides a command to attempt to fix the flycheck error at point.
+;;
+;; Users: Invoke the command `attrap-attrap' when point is on a
+;; flycheck or flymake error, and check the results. (If several
+;; fixes apply you will be asked which one to apply.) Attrap!
+;; currently comes with builtin fixers for haskell (GHC messages) and
+;; elisp.
+;;
+;; Configuration: `attrap-flymake-backends-alist' is an alist from
+;; flymake backend to attrap fixer. `attrap-flycheck-checkers-alist'
+;; is an alist from flycheck checker symbol to attrap fixer. All the
+;; See below for the definition of a fixer.
+;;
+;; A fixer is a element is a side-effect-free function mapping an
+;; error message MSG to a list of options. An option is a cons of a
+;; description and a repair. (Thus a list of options is an alist.)
+;; The repair is a function of no argument which is meant to apply one
+;; fix suggested by MSG in the current buffer, at point. The
+;; description is meant to be a summarized user-facing s-expr which
+;; describes the repair. This description can be used for example for
+;; selecting the best repair. An option can be conveniently defined
+;; using `attrap-option'. A singleton option list can be conveniently
+;; defined using `attrap-one-option'.
+
+
+;;; Code:
+(require 'dash)
+(require 's)
+(require 'flycheck)
+
+(defcustom attrap-flycheck-checkers-alist '((haskell-dante . attrap-ghc-fixer)
+ (emacs-lisp . attrap-elisp-fixer))
+ "An alist from flycheck checker symbol to attrap fixer."
+ :type '(alist :key-type symbol :value-type function)
+ :group 'attrap)
+
+(defcustom attrap-flymake-backends-alist
+ '((dante-flymake . attrap-ghc-fixer)
+ (elisp-flymake-byte-compile . attrap-elisp-fixer)
+ (elisp-flymake-checkdoc . attrap-elisp-fixer))
+ "An alist from flymake backend to attrap fixer."
+ :type '(alist :key-type symbol :value-type function)
+ :group 'attrap)
+
+(defun attrap-select-and-apply-option (options)
+ "Ask the user which of OPTIONS is best, then apply it."
+ (when (not options) (error "No fixer applies to the issue at point"))
+ (let* ((named-options (--map (cons (format "%s" (car it)) (cdr it)) options))
+ (selected-fix (if (eq 1 (length options))
+ (car options)
+ (assoc (completing-read "repair using: "
+ named-options
+ nil
+ t)
+ named-options))))
+ (message "Applied %s" (car selected-fix))
+ (save-excursion
+ (funcall (cdr selected-fix)))))
+
+;;;###autoload
+(defun attrap-flymake (pos)
+ "Attempt to repair the flymake error at POS."
+ (interactive "d")
+ (let ((diags (flymake-diagnostics pos)))
+ (when (not diags) (error "No flymake diagnostic at point"))
+ (attrap-select-and-apply-option
+ (-non-nil (--mapcat (let ((fixer (alist-get (flymake-diagnostic-backend it)
+ attrap-flymake-backends-alist)))
+ (when fixer (funcall fixer
+ (flymake-diagnostic-text it)
+ (flymake-diagnostic-beg it)
+ (flymake-diagnostic-end it))))
+ diags)))))
+
+
+;;;###autoload
+(defun attrap-flycheck (pos)
+ "Attempt to repair the flycheck error at POS."
+ (interactive "d")
+ (let ((messages (-filter
+ #'car
+ (--map (list (flycheck-error-message
+ (overlay-get it 'flycheck-error))
+ (overlay-start it)
+ (overlay-end it))
+ (flycheck-overlays-at pos))))
+ (checker (flycheck-get-checker-for-buffer)))
+ (when (not messages) (error "No flycheck message at point"))
+ (when (not checker) (error "No flycheck-checker for current buffer"))
+ (let ((fixers (-map #'cdr (--filter (eq (car it) checker) attrap-flycheck-checkers-alist))))
+ (when (not fixers) (error "No fixers for flycheck-checker %s" checker))
+ (attrap-select-and-apply-option
+ (-non-nil (-mapcat
+ (lambda (msg) (-mapcat
+ (lambda (fixer) (apply fixer msg))
+ fixers))
+ messages))))))
+
+;;;###autoload
+(defun attrap-attrap (pos)
+ "Attempt to repair the error at POS."
+ (interactive "d")
+ (cond
+ ((bound-and-true-p flymake-mode) (attrap-flymake pos))
+ ((bound-and-true-p flycheck-mode) (attrap-flycheck pos))
+ (t (error "Expecting flymake or flycheck to be active"))))
+
+(defcustom attrap-haskell-extensions
+ '("AllowAmbiguousTypes"
+ "BangPatterns"
+ "ConstraintKinds"
+ "DataKinds"
+ "DefaultSignatures"
+ "DeriveAnyClass"
+ "DeriveFoldable"
+ "DeriveFunctor"
+ "DeriveGeneric"
+ "DeriveTraversable"
+ "EmptyCase"
+ "EmptyDataDecls"
+ "EmptyDataDeriving"
+ "ExplicitNamespaces"
+ "FlexibleContexts"
+ "FlexibleInstances"
+ "FunctionalDependencies"
+ "GADTs"
+ "GeneralizedNewtypeDeriving"
+ "InstanceSigs"
+ "KindSignatures"
+ "MultiParamTypeClasses"
+ "NamedFieldPuns"
+ "ParallelListComp"
+ "PartialTypeSignatures"
+ "PatternSynonyms"
+ "PolyKinds"
+ "RankNTypes"
+ "RecordWildCards"
+ "ScopedTypeVariables"
+ "StandaloneDeriving"
+ "TemplateHaskell"
+ "TransformListComp"
+ "TupleSections"
+ "TypeApplications"
+ "TypeFamilies"
+ "TypeInType"
+ "TypeOperators"
+ "TypeSynonymInstances"
+ "UndecidableSuperClasses"
+ "UndecidableInstances"
+ "ViewPatterns")
+ "Language extensions that Attrap can use to fix errors."
+ :type '(repeat string)
+ :group 'attrap)
+
+(defmacro attrap-option (description &rest body)
+ "Create an attrap option with DESCRIPTION and BODY."
+ (declare (indent 1))
+ `(let ((saved-match-data (match-data)))
+ (cons ,description
+ (lambda ()
+ (set-match-data saved-match-data 'evaporate)
+ ,@body))))
+
+(defmacro attrap-one-option (description &rest body)
+ "Create an attrap option list with a single element of DESCRIPTION and BODY."
+ (declare (indent 1))
+ `(list (attrap-option ,description ,@body)))
+
+(defmacro attrap-alternatives (&rest clauses)
+ "Append all succeeding clauses.
+Each clause looks like (CONDITION BODY...). CONDITION is evaluated
+and, if the value is non-nil, this clause succeeds:
+then the expressions in BODY are evaluated and the last one's
+value is a list which is appended to the result of `attrap-alternatives'.
+usage: (attrap-alternatives CLAUSES...)"
+ `(append ,@(mapcar (lambda (c) `(when ,(car c) ,@(cdr c))) clauses)))
+
+(defun attrap-elisp-fixer (msg _beg _end)
+ "An `attrap' fixer for any elisp warning given as MSG."
+ (attrap-alternatives
+ ((string-match "Name emacs should appear capitalized as Emacs" msg)
+ (attrap-one-option 'capitalize-emacs
+ (let ((case-fold-search nil))
+ (re-search-forward "emacs" (line-end-position))
+ (replace-match "Emacs" nil t nil 0))))
+ ((string-match "White space found at end of line" msg)
+ (attrap-one-option 'delete-trailing-space
+ (end-of-line)
+ (delete-region (point) (progn (skip-chars-backward "\t ") (point)))))
+ ((string-match "There should be two spaces after a period" msg)
+ (attrap-one-option 'add-space
+ (beginning-of-line)
+ (re-search-forward "\\(\\.\\) [^ ]" (line-end-position))
+ (replace-match ". " nil t nil 1)))
+ ((string-match "might as well have a documentation" msg)
+ (attrap-one-option 'add-empty-doc
+ (beginning-of-line)
+ (insert " \"\"\n")))
+ ((string-match "The footer should be: " msg)
+ (let ((footer (s-replace "\\n" "\n" (substring msg (match-end 0)))))
+ (attrap-one-option 'add-footer
+ (end-of-line)
+ (insert (concat "\n" footer)))))
+ ((string-match "First line is not a complete sentence" msg)
+ (attrap-one-option 'merge-lines
+ (end-of-line)
+ (delete-char 1)))
+ ((string-match "First sentence should end with punctuation" msg)
+ (attrap-one-option 'add-punctuation
+ (end-of-line)
+ (backward-char)
+ (insert ".")))))
+
+(defun attrap-ghc-fixer (msg pos _end)
+ "An `attrap' fixer for any GHC error or warning given as MSG and reported between POS and END."
+ (let ((normalized-msg (s-collapse-whitespace msg)))
+ (cond
+ ((string-match "Redundant constraints?: (?\\([^,)\n]*\\)" msg)
+ (attrap-one-option 'delete-reduntant-constraint
+ (let ((constraint (match-string 1 msg)))
+ (search-forward constraint) ; find type sig
+ (delete-region (match-beginning 0) (match-end 0))
+ (when (looking-at "[ \t]*,")
+ (delete-region (point) (search-forward ",")))
+ (when (looking-at "[ \t]*=>")
+ (delete-region (point) (search-forward "=>"))))))
+ ((string-match "The type signature for ‘\\(.*\\)’[ \t\n]*lacks an accompanying binding" msg)
+ (attrap-one-option 'add-binding
+ (beginning-of-line)
+ (forward-line)
+ (insert (concat (match-string 1 msg) " = _\n"))))
+ ((string-match "add (\\(.*\\)) to the context of[\n ]*the type signature for:[ \n]*\\([^ ]*\\) ::" msg)
+ (attrap-one-option 'add-constraint-to-context
+ (let ((missing-constraint (match-string 1 msg))
+ (function-name (match-string 2 msg)))
+ (search-backward-regexp (concat (regexp-quote function-name) "[ \t]*::[ \t]*" )) ; find type sig
+ (goto-char (match-end 0))
+ (when (looking-at "forall\\|∀") ; skip quantifiers
+ (search-forward "."))
+ (skip-chars-forward "\n\t ") ; skip spaces
+ (insert (concat missing-constraint " => ")))))
+ ((string-match "Unticked promoted constructor: ‘\\(.*\\)’" msg)
+ (let ((constructor (match-string 1 msg)))
+ (attrap-one-option 'tick-promoted-constructor
+ (goto-char pos)
+ ;; when the constructor is infix, flycheck reports the wrong position.
+ (search-forward constructor)
+ (backward-char (length constructor))
+ (insert "'"))))
+ ((string-match "Patterns not matched:" msg)
+ (attrap-one-option 'add-missing-patterns
+ (let ((patterns (mapcar #'string-trim (split-string (substring msg (match-end 0)) "\n" t " ")))) ;; patterns to match
+ (if (string-match "In an equation for ‘\\(.*\\)’:" msg)
+ (let ((function-name (match-string 1 msg)))
+ (end-of-line)
+ (dolist (pattern patterns)
+ (insert (concat "\n" function-name " " pattern " = _"))))
+ (end-of-line) ;; assuming that the case expression is on multiple lines and that "of" is at the end of the line
+ (dolist (pattern patterns)
+ (insert "\n ") ;; fixme: guess how much indent is needed.
+ (insert (concat pattern " -> _")))))))
+ ((string-match "A do-notation statement discarded a result of type" msg)
+ (attrap-one-option 'explicitly-discard-result
+ (goto-char pos)
+ (insert "_ <- ")))
+ ((string-match "\\(Failed to load interface for\\|Could not find module\\) ‘\\(.*\\)’\n[ ]*Perhaps you meant[ \n]*\\([^ ]*\\)" msg)
+ (attrap-one-option 'rename-module-import
+ (let ((replacement (match-string 3 msg)))
+ ;; ^^ delete-region may garble the matches
+ (search-forward (match-string 2 msg))
+ (delete-region (match-beginning 0) (point))
+ (insert replacement))))
+ ((string-match "Unsupported extension: \\(.*\\)\n[ ]*Perhaps you meant ‘\\([^‘]*\\)’" msg)
+ (attrap-one-option 'rename-extension
+ (let ((replacement (match-string 2 msg)))
+ ;; ^^ delete-region may garble the matches
+ (goto-char pos)
+ (search-forward (match-string 1 msg))
+ (delete-region (match-beginning 0) (point))
+ (insert replacement))))
+ ((string-match "Perhaps you want to add ‘\\(.*\\)’ to the import list[\n\t ]+in the import of[ \n\t]*‘.*’[\n\t ]+([^:]*:\\([0-9]*\\):[0-9]*-\\([0-9]*\\))" msg)
+ (attrap-one-option 'add-to-import-list
+ (let ((missing (match-string 1 msg))
+ (line (string-to-number (match-string 2 msg)))
+ (end-col (string-to-number (match-string 3 msg))))
+ (goto-char (point-min))
+ (forward-line (1- line))
+ (move-to-column (1- end-col))
+ (skip-chars-backward " \t")
+ (unless (looking-back "(" (- (point) 2)) (insert ","))
+ (insert missing))))
+ ;; Not in scope: data constructor ‘SimpleBroadcast’
+ ;; Perhaps you meant ‘SimpleBroadCast’ (imported from TypedFlow.Types)
+ ;; Not in scope: ‘BackCore.argmax’
+ ;; Perhaps you meant one of these:
+ ;; ‘BackCore.argMax’ (imported from TensorFlow.GenOps.Core),
+ ;; ‘BackCore.argMax'’ (imported from TensorFlow.GenOps.Core),
+ ;; ‘BackCore.max’ (imported from TensorFlow.GenOps.Core)
+ ((string-match (s-join "\\|"
+ '("Data constructor not in scope:[ \n\t]*\\(?1:[^ \n]*\\)"
+ "Variable not in scope:[ \n\t]*\\(?1:[^ \n]*\\)"
+ "not in scope: data constructor ‘\\(?1:[^’]*\\)’"
+ "not in scope: type constructor or class ‘\\(?1:[^’]*\\)’"
+ "Not in scope: ‘\\(?1:[^’]*\\)’"
+ )) ; in patterns
+ msg)
+ (let* ((delete (match-string 1 msg))
+ (delete-has-paren (eq ?\( (elt delete 0)))
+ (delete-no-paren (if delete-has-paren (substring delete 1 (1- (length delete))) delete))
+ (replacements (s-match-strings-all "‘\\([^’]*\\)’ (\\([^)]*\\))" msg)))
+ (--map (attrap-option (list 'replace delete-no-paren (nth 1 it) (nth 2 it))
+ (goto-char pos)
+ (let ((case-fold-search nil))
+ (search-forward delete-no-paren (+ (length delete) pos))
+ (replace-match (nth 1 it) t)))
+ replacements)))
+ ((string-match "It could refer to either" msg) ;; ambiguous identifier
+ (let ((replacements (--map (nth 1 it) (s-match-strings-all "‘\\([^‘]*\\)’," msg))))
+ (--map (attrap-option (list 'rename it)
+ (apply #'delete-region (dante-ident-pos-at-point))
+ (insert it))
+ replacements)))
+ ((string-match "\\(Top-level binding\\|Pattern synonym\\) with no type signature:[\n ]*" msg)
+ (attrap-one-option 'add-signature
+ (beginning-of-line)
+ (insert (concat (substring msg (match-end 0)) "\n"))))
+ ((string-match "Defined but not used" msg)
+ (attrap-one-option 'add-underscore
+ (goto-char pos)
+ (insert "_")))
+ ((string-match "Unused quantified type variable ‘\\(.*\\)’" msg)
+ (attrap-one-option 'delete-type-variable
+ ;; note there can be a kind annotation, not just a variable.
+ (delete-region (point) (+ (point) (- (match-end 1) (match-beginning 1))))))
+ ;; Module ‘TensorFlow.GenOps.Core’ does not export ‘argmax’.
+
+ ((string-match "The import of ‘\\(.*\\)’ from module ‘[^’]*’ is redundant\\|Module ‘.*’ does not export ‘\\(.*\\)’" normalized-msg)
+ (attrap-one-option 'delete-import
+ (let ((redundant (or (match-string 1 normalized-msg) (match-string 2 normalized-msg))))
+ (dolist (r (s-split ", " redundant t))
+ (save-excursion
+ ;; todo check for operators
+ ;; toto search for full words
+ (search-forward r)
+ (replace-match "")
+ (when (looking-at "(..)") (delete-char 4))
+ (when (looking-at ",") (delete-char 1)))))))
+ ((string-match "The import of ‘[^’]*’ is redundant" msg)
+ (attrap-one-option 'delete-module-import
+ (beginning-of-line)
+ (delete-region (point) (progn (next-logical-line) (point)))))
+ ((string-match "Found type wildcard ‘\\(.*\\)’[ \t\n]*standing for ‘\\([^’]*\\)’" msg)
+ (attrap-one-option 'explicit-type-wildcard
+ (let ((wildcard (match-string 1 msg))
+ (type-expr (match-string 2 msg)))
+ (goto-char pos)
+ (search-forward wildcard)
+ (replace-match (concat "(" type-expr ")") t))))
+ ((--any? (s-matches? it msg) attrap-haskell-extensions)
+ (--map (attrap-option (list 'use-extension it)
+ (goto-char 1)
+ (insert (concat "{-# LANGUAGE " it " #-}\n")))
+ (--filter (s-matches? it msg) attrap-haskell-extensions))))))
+
+(provide 'attrap)
+;;; attrap.el ends here
+
diff --git a/packages/auctex-12.1.1.tar b/packages/auctex-12.1.2.tar
similarity index 95%
rename from packages/auctex-12.1.1.tar
rename to packages/auctex-12.1.2.tar
index def0eb6..1ac4bc6 100644
Binary files a/packages/auctex-12.1.1.tar and b/packages/auctex-12.1.2.tar differ
diff --git a/packages/auth-source-pass-20181106.1348.el b/packages/auth-source-pass-20181106.1348.el
deleted file mode 100644
index ac6c337..0000000
--- a/packages/auth-source-pass-20181106.1348.el
+++ /dev/null
@@ -1,261 +0,0 @@
-;;; auth-source-pass.el --- Integrate auth-source with password-store -*- lexical-binding: t -*-
-
-;; Copyright (C) 2015, 2017-2018 Free Software Foundation, Inc.
-
-;; Author: Damien Cassou ,
-;; Nicolas Petton
-;; Version: 4.0.2
-;; Package-Version: 20181106.1348
-;; Package-Requires: ((emacs "25"))
-;; Url: https://github.com/DamienCassou/auth-password-store
-;; Created: 07 Jun 2015
-
-;; This file is part of GNU Emacs.
-
-;; GNU Emacs is free software: you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; GNU Emacs is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs. If not, see .
-
-;;; Commentary:
-
-;; Integrates password-store (http://passwordstore.org/) within
-;; auth-source.
-
-;;; Code:
-
-(require 'seq)
-(eval-when-compile (require 'subr-x))
-(eval-when-compile
- (require 'cl-lib))
-(require 'auth-source)
-(require 'url-parse)
-
-(cl-defun auth-source-pass-search (&rest spec
- &key backend type host user port
- &allow-other-keys)
- "Given a property list SPEC, return search matches from the :backend.
-See `auth-source-search' for details on SPEC."
- (cl-assert (or (null type) (eq type (oref backend type)))
- t "Invalid password-store search: %s %s")
- (when (consp host)
- (warn "auth-source-pass ignores all but first host in spec.")
- ;; Take the first non-nil item of the list of hosts
- (setq host (seq-find #'identity host)))
- (cond ((eq host t)
- (warn "auth-source-pass does not handle host wildcards.")
- nil)
- ((null host)
- ;; Do not build a result, as none will match when HOST is nil
- nil)
- (t
- (when-let ((result (auth-source-pass--build-result host port user)))
- (list result)))))
-
-(defun auth-source-pass--build-result (host port user)
- "Build auth-source-pass entry matching HOST, PORT and USER."
- (let ((entry (auth-source-pass--find-match host user port)))
- (when entry
- (let ((retval (list
- :host host
- :port (or (auth-source-pass-get "port" entry) port)
- :user (or (auth-source-pass-get "user" entry) user)
- :secret (lambda () (auth-source-pass-get 'secret entry)))))
- (auth-source-pass--do-debug "return %s as final result (plus hidden password)"
- (seq-subseq retval 0 -2)) ;; remove password
- retval))))
-
-;;;###autoload
-(defun auth-source-pass-enable ()
- "Enable auth-source-password-store."
- ;; To add password-store to the list of sources, evaluate the following:
- (add-to-list 'auth-sources 'password-store)
- ;; clear the cache (required after each change to #'auth-source-pass-search)
- (auth-source-forget-all-cached))
-
-(defvar auth-source-pass-backend
- (auth-source-backend
- (when (<= emacs-major-version 25) "password-store")
- :source "." ;; not used
- :type 'password-store
- :search-function #'auth-source-pass-search)
- "Auth-source backend for password-store.")
-
-(defun auth-source-pass-backend-parse (entry)
- "Create a password-store auth-source backend from ENTRY."
- (when (eq entry 'password-store)
- (auth-source-backend-parse-parameters entry auth-source-pass-backend)))
-
-(if (boundp 'auth-source-backend-parser-functions)
- (add-hook 'auth-source-backend-parser-functions #'auth-source-pass-backend-parse)
- (advice-add 'auth-source-backend-parse :before-until #'auth-source-pass-backend-parse))
-
-
-;;;###autoload
-(defun auth-source-pass-get (key entry)
- "Return the value associated to KEY in the password-store entry ENTRY.
-
-ENTRY is the name of a password-store entry.
-The key used to retrieve the password is the symbol `secret'.
-
-The convention used as the format for a password-store file is
-the following (see http://www.passwordstore.org/#organization):
-
-secret
-key1: value1
-key2: value2"
- (let ((data (auth-source-pass-parse-entry entry)))
- (or (cdr (assoc key data))
- (and (string= key "user")
- (cdr (assoc "username" data))))))
-
-(defun auth-source-pass--read-entry (entry)
- "Return a string with the file content of ENTRY."
- (with-temp-buffer
- (insert-file-contents (expand-file-name
- (format "%s.gpg" entry)
- "~/.password-store"))
- (buffer-substring-no-properties (point-min) (point-max))))
-
-(defun auth-source-pass-parse-entry (entry)
- "Return an alist of the data associated with ENTRY.
-
-ENTRY is the name of a password-store entry."
- (let ((file-contents (ignore-errors (auth-source-pass--read-entry entry))))
- (and file-contents
- (cons `(secret . ,(auth-source-pass--parse-secret file-contents))
- (auth-source-pass--parse-data file-contents)))))
-
-(defun auth-source-pass--parse-secret (contents)
- "Parse the password-store data in the string CONTENTS and return its secret.
-The secret is the first line of CONTENTS."
- (car (split-string contents "\\\n" t)))
-
-(defun auth-source-pass--parse-data (contents)
- "Parse the password-store data in the string CONTENTS and return an alist.
-CONTENTS is the contents of a password-store formatted file."
- (let ((lines (split-string contents "\\\n" t "\\\s")))
- (seq-remove #'null
- (mapcar (lambda (line)
- (let ((pair (mapcar (lambda (s) (string-trim s))
- (split-string line ":"))))
- (when (> (length pair) 1)
- (cons (car pair)
- (mapconcat #'identity (cdr pair) ":")))))
- (cdr lines)))))
-
-(defun auth-source-pass--do-debug (&rest msg)
- "Call `auth-source-do-debug` with MSG and a prefix."
- (apply #'auth-source-do-debug
- (cons (concat "auth-source-pass: " (car msg))
- (cdr msg))))
-
-(defun auth-source-pass--select-one-entry (entries user)
- "Select one entry from ENTRIES by searching for a field matching USER."
- (let ((number (length entries))
- (entry-with-user
- (and user
- (seq-find (lambda (entry)
- (string-equal (auth-source-pass-get "user" entry) user))
- entries))))
- (auth-source-pass--do-debug "found %s matches: %s" number
- (mapconcat #'identity entries ", "))
- (if entry-with-user
- (progn
- (auth-source-pass--do-debug "return %s as it contains matching user field"
- entry-with-user)
- entry-with-user)
- (auth-source-pass--do-debug "return %s as it is the first one" (car entries))
- (car entries))))
-
-(defun auth-source-pass--entry-valid-p (entry)
- "Return t iff ENTRY can be opened.
-Also displays a warning if not. This function is slow, don't call it too
-often."
- (if (auth-source-pass-parse-entry entry)
- t
- (auth-source-pass--do-debug "entry '%s' is not valid" entry)
- nil))
-
-;; TODO: add tests for that when `assess-with-filesystem' is included
-;; in Emacs
-(defun auth-source-pass-entries ()
- "Return a list of all password store entries."
- (let ((store-dir (expand-file-name "~/.password-store/")))
- (mapcar
- (lambda (file) (file-name-sans-extension (file-relative-name file store-dir)))
- (directory-files-recursively store-dir "\.gpg$"))))
-
-(defun auth-source-pass--find-all-by-entry-name (entryname user)
- "Search the store for all entries either matching ENTRYNAME/USER or ENTRYNAME.
-Only return valid entries as of `auth-source-pass--entry-valid-p'."
- (seq-filter (lambda (entry)
- (and
- (or
- (let ((components-host-user
- (member entryname (split-string entry "/"))))
- (and (= (length components-host-user) 2)
- (string-equal user (cadr components-host-user))))
- (string-equal entryname (file-name-nondirectory entry)))
- (auth-source-pass--entry-valid-p entry)))
- (auth-source-pass-entries)))
-
-(defun auth-source-pass--find-one-by-entry-name (entryname user)
- "Search the store for an entry matching ENTRYNAME.
-If USER is non nil, give precedence to entries containing a user field
-matching USER."
- (auth-source-pass--do-debug "searching for '%s' in entry names (user: %s)"
- entryname
- user)
- (let ((matching-entries (auth-source-pass--find-all-by-entry-name entryname user)))
- (pcase (length matching-entries)
- (0 (auth-source-pass--do-debug "no match found")
- nil)
- (1 (auth-source-pass--do-debug "found 1 match: %s" (car matching-entries))
- (car matching-entries))
- (_ (auth-source-pass--select-one-entry matching-entries user)))))
-
-(defun auth-source-pass--find-match (host user port)
- "Return a password-store entry name matching HOST, USER and PORT.
-
-Disambiguate between user provided inside HOST (e.g., user@server.com) and
-inside USER by giving priority to USER. Same for PORT."
- (let* ((url (url-generic-parse-url (if (string-match-p ".*://" host)
- host
- (format "https://%s" host)))))
- (auth-source-pass--find-match-unambiguous
- (or (url-host url) host)
- (or user (url-user url))
- ;; url-port returns 443 (because of the https:// above) by default
- (or port (number-to-string (url-port url))))))
-
-(defun auth-source-pass--find-match-unambiguous (hostname user port)
- "Return a password-store entry name matching HOSTNAME, USER and PORT.
-If many matches are found, return the first one. If no match is found,
-return nil.
-
-HOSTNAME should not contain any username or port number."
- (or
- (and user port (auth-source-pass--find-one-by-entry-name (format "%s@%s:%s" user hostname port) user))
- (and user (auth-source-pass--find-one-by-entry-name (format "%s@%s" user hostname) user))
- (and port (auth-source-pass--find-one-by-entry-name (format "%s:%s" hostname port) nil))
- (auth-source-pass--find-one-by-entry-name hostname user)
- ;; if that didn't work, remove subdomain: foo.bar.com -> bar.com
- (let ((components (split-string hostname "\\.")))
- (when (= (length components) 3)
- ;; start from scratch
- (auth-source-pass--find-match-unambiguous
- (mapconcat 'identity (cdr components) ".")
- user
- port)))))
-
-(provide 'auth-source-pass)
-;;; auth-source-pass.el ends here
diff --git a/packages/auth-source-pass-20190813.1026.el b/packages/auth-source-pass-20190813.1026.el
new file mode 100644
index 0000000..e4da433
--- /dev/null
+++ b/packages/auth-source-pass-20190813.1026.el
@@ -0,0 +1,322 @@
+;;; auth-source-pass.el --- Integrate auth-source with password-store -*- lexical-binding: t -*-
+
+;; Copyright (C) 2015, 2017-2019 Free Software Foundation, Inc.
+
+;; Author: Damien Cassou ,
+;; Nicolas Petton
+;; Keith Amidon
+;; Version: 5.0.0
+;; Package-Version: 20190813.1026
+;; Package-Requires: ((emacs "25"))
+;; Url: https://github.com/DamienCassou/auth-password-store
+;; Created: 07 Jun 2015
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see .
+
+;;; Commentary:
+
+;; Integrates password-store (http://passwordstore.org/) within
+;; auth-source.
+
+;;; Code:
+
+(require 'seq)
+(eval-when-compile (require 'subr-x))
+(eval-when-compile
+ (require 'cl-lib))
+(require 'auth-source)
+(require 'url-parse)
+
+(defgroup auth-source-pass nil
+ "password-store integration within auth-source."
+ :prefix "auth-source-pass-"
+ :group 'auth-source
+ :version "27.1")
+
+(defcustom auth-source-pass-filename (or (getenv "PASSWORD_STORE_DIR") "~/.password-store")
+ "Filename of the password-store folder."
+ :type 'directory
+ :version "27.1")
+
+(defcustom auth-source-pass-port-separator ":"
+ "Separator string between host and port in entry filename."
+ :type 'string
+ :version "27.1")
+
+(cl-defun auth-source-pass-search (&rest spec
+ &key backend type host user port
+ &allow-other-keys)
+ "Given a property list SPEC, return search matches from the :backend.
+See `auth-source-search' for details on SPEC.
+
+HOST can be a string or a list of strings, but USER and PORT are expected
+to be a string only."
+ (cl-assert (or (null type) (eq type (oref backend type)))
+ t "Invalid password-store search: %s %s")
+ (cond ((eq host t)
+ (warn "auth-source-pass does not handle host wildcards.")
+ nil)
+ ((null host)
+ ;; Do not build a result, as none will match when HOST is nil
+ nil)
+ (t
+ (when-let ((result (auth-source-pass--build-result host port user)))
+ (list result)))))
+
+(defun auth-source-pass--build-result (hosts port user)
+ "Build auth-source-pass entry matching HOSTS, PORT and USER.
+
+HOSTS can be a string or a list of strings."
+ (let ((entry-data (auth-source-pass--find-match hosts user port)))
+ (when entry-data
+ (let ((retval (list
+ :host (auth-source-pass--get-attr "host" entry-data)
+ :port (or (auth-source-pass--get-attr "port" entry-data) port)
+ :user (or (auth-source-pass--get-attr "user" entry-data) user)
+ :secret (lambda () (auth-source-pass--get-attr 'secret entry-data)))))
+ (auth-source-pass--do-debug "return %s as final result (plus hidden password)"
+ (seq-subseq retval 0 -2)) ;; remove password
+ retval))))
+
+;;;###autoload
+(defun auth-source-pass-enable ()
+ "Enable auth-source-password-store."
+ ;; To add password-store to the list of sources, evaluate the following:
+ (add-to-list 'auth-sources 'password-store)
+ ;; clear the cache (required after each change to #'auth-source-pass-search)
+ (auth-source-forget-all-cached))
+
+(defvar auth-source-pass-backend
+ (auth-source-backend
+ (when (<= emacs-major-version 25) "password-store")
+ :source "." ;; not used
+ :type 'password-store
+ :search-function #'auth-source-pass-search)
+ "Auth-source backend for password-store.")
+
+(defun auth-source-pass-backend-parse (entry)
+ "Create a password-store auth-source backend from ENTRY."
+ (when (eq entry 'password-store)
+ (auth-source-backend-parse-parameters entry auth-source-pass-backend)))
+
+(if (boundp 'auth-source-backend-parser-functions)
+ (add-hook 'auth-source-backend-parser-functions #'auth-source-pass-backend-parse)
+ (advice-add 'auth-source-backend-parse :before-until #'auth-source-pass-backend-parse))
+
+
+;;;###autoload
+(defun auth-source-pass-get (key entry)
+ "Return the value associated to KEY in the password-store entry ENTRY.
+
+ENTRY is the name of a password-store entry.
+The key used to retrieve the password is the symbol `secret'.
+
+The convention used as the format for a password-store file is
+the following (see http://www.passwordstore.org/#organization):
+
+secret
+key1: value1
+key2: value2"
+ (let ((data (auth-source-pass-parse-entry entry)))
+ (auth-source-pass--get-attr key data)))
+
+(defun auth-source-pass--get-attr (key entry-data)
+ "Return value associated with KEY in an ENTRY-DATA.
+
+ENTRY-DATA is the data from a parsed password-store entry.
+The key used to retrieve the password is the symbol `secret'.
+
+See `auth-source-pass-get'."
+ (or (cdr (assoc key entry-data))
+ (and (string= key "user")
+ (cdr (assoc "username" entry-data)))))
+
+(defun auth-source-pass--read-entry (entry)
+ "Return a string with the file content of ENTRY."
+ (with-temp-buffer
+ (insert-file-contents (expand-file-name
+ (format "%s.gpg" entry)
+ auth-source-pass-filename))
+ (buffer-substring-no-properties (point-min) (point-max))))
+
+(defun auth-source-pass-parse-entry (entry)
+ "Return an alist of the data associated with ENTRY.
+
+ENTRY is the name of a password-store entry."
+ (let ((file-contents (ignore-errors (auth-source-pass--read-entry entry))))
+ (and file-contents
+ (cons `(secret . ,(auth-source-pass--parse-secret file-contents))
+ (auth-source-pass--parse-data file-contents)))))
+
+(defun auth-source-pass--parse-secret (contents)
+ "Parse the password-store data in the string CONTENTS and return its secret.
+The secret is the first line of CONTENTS."
+ (car (split-string contents "\n" t)))
+
+(defun auth-source-pass--parse-data (contents)
+ "Parse the password-store data in the string CONTENTS and return an alist.
+CONTENTS is the contents of a password-store formatted file."
+ (let ((lines (split-string contents "\n" t "[ \t]+")))
+ (seq-remove #'null
+ (mapcar (lambda (line)
+ (let ((pair (mapcar (lambda (s) (string-trim s))
+ (split-string line ":"))))
+ (when (> (length pair) 1)
+ (cons (car pair)
+ (mapconcat #'identity (cdr pair) ":")))))
+ (cdr lines)))))
+
+(defun auth-source-pass--do-debug (&rest msg)
+ "Call `auth-source-do-debug` with MSG and a prefix."
+ (apply #'auth-source-do-debug
+ (cons (concat "auth-source-pass: " (car msg))
+ (cdr msg))))
+
+;; TODO: add tests for that when `assess-with-filesystem' is included
+;; in Emacs
+(defun auth-source-pass-entries ()
+ "Return a list of all password store entries."
+ (let ((store-dir (expand-file-name auth-source-pass-filename)))
+ (mapcar
+ (lambda (file) (file-name-sans-extension (file-relative-name file store-dir)))
+ (directory-files-recursively store-dir "\\.gpg$"))))
+
+(defun auth-source-pass--find-match (hosts user port)
+ "Return password-store entry data matching HOSTS, USER and PORT.
+
+Disambiguate between user provided inside HOSTS (e.g., user@server.com) and
+inside USER by giving priority to USER. Same for PORT.
+HOSTS can be a string or a list of strings."
+ (seq-some (lambda (host)
+ (let ((entry (apply #'auth-source-pass--find-match-unambiguous
+ (auth-source-pass--disambiguate host user port))))
+ (if (or (null entry) (assoc "host" entry))
+ entry
+ (cons (cons "host" host) entry))))
+ (if (listp hosts)
+ hosts
+ (list hosts))))
+
+(defun auth-source-pass--disambiguate (host &optional user port)
+ "Return (HOST USER PORT) after disambiguation.
+Disambiguate between having user provided inside HOST (e.g.,
+user@server.com) and inside USER by giving priority to USER.
+Same for PORT."
+ (let* ((url (url-generic-parse-url (if (string-match-p ".*://" host)
+ host
+ (format "https://%s" host)))))
+ (list
+ (or (url-host url) host)
+ (or user (url-user url))
+ ;; url-port returns 443 (because of the https:// above) by default
+ (or port (number-to-string (url-port url))))))
+
+(defun auth-source-pass--find-match-unambiguous (hostname user port)
+ "Return password-store entry data matching HOSTNAME, USER and PORT.
+If many matches are found, return the first one. If no match is found,
+return nil.
+
+HOSTNAME should not contain any username or port number."
+ (let ((all-entries (auth-source-pass-entries))
+ (suffixes (auth-source-pass--generate-entry-suffixes hostname user port)))
+ (auth-source-pass--do-debug "searching for entries matching hostname=%S, user=%S, port=%S"
+ hostname (or user "") (or port ""))
+ (auth-source-pass--do-debug "corresponding suffixes to search for: %S" suffixes)
+ (catch 'auth-source-pass-break
+ (dolist (suffix suffixes)
+ (let* ((matching-entries (auth-source-pass--entries-matching-suffix suffix all-entries))
+ (best-entry-data (auth-source-pass--select-from-entries matching-entries user)))
+ (pcase (length matching-entries)
+ (0 (auth-source-pass--do-debug "found no entries matching %S" suffix))
+ (1 (auth-source-pass--do-debug "found 1 entry matching %S: %S"
+ suffix
+ (car matching-entries)))
+ (_ (auth-source-pass--do-debug "found %s entries matching %S: %S"
+ (length matching-entries)
+ suffix
+ matching-entries)))
+ (when best-entry-data
+ (throw 'auth-source-pass-break best-entry-data)))))))
+
+(defun auth-source-pass--select-from-entries (entries user)
+ "Return best matching password-store entry data from ENTRIES.
+
+If USER is non nil, give precedence to entries containing a user field
+matching USER."
+ (let (fallback)
+ (catch 'auth-source-pass-break
+ (dolist (entry entries fallback)
+ (let ((entry-data (auth-source-pass-parse-entry entry)))
+ (when (and entry-data (not fallback))
+ (setq fallback entry-data)
+ (when (or (not user) (equal (auth-source-pass--get-attr "user" entry-data) user))
+ (throw 'auth-source-pass-break entry-data))))))))
+
+(defun auth-source-pass--entries-matching-suffix (suffix entries)
+ "Return entries matching SUFFIX.
+If ENTRIES is nil, use the result of calling `auth-source-pass-entries' instead."
+ (cl-remove-if-not
+ (lambda (entry) (string-match-p
+ (format "\\(^\\|/\\)%s$" (regexp-quote suffix))
+ entry))
+ (or entries (auth-source-pass-entries))))
+
+(defun auth-source-pass--generate-entry-suffixes (hostname user port)
+ "Return a list of possible entry path suffixes in the password-store.
+
+Based on the supported pathname patterns for HOSTNAME, USER, &
+PORT, return a list of possible suffixes for matching entries in
+the password-store."
+ (let ((domains (auth-source-pass--domains (split-string hostname "\\."))))
+ (seq-mapcat (lambda (n)
+ (auth-source-pass--name-port-user-suffixes n user port))
+ domains)))
+
+(defun auth-source-pass--domains (name-components)
+ "Return a list of possible domain names matching the hostname.
+
+This function takes a list of NAME-COMPONENTS, the strings
+separated by periods in the hostname, and returns a list of full
+domain names containing the trailing sequences of those
+components, from longest to shortest."
+ (cl-maplist (lambda (components) (mapconcat #'identity components "."))
+ name-components))
+
+(defun auth-source-pass--name-port-user-suffixes (name user port)
+ "Return a list of possible path suffixes for NAME, USER, & PORT.
+
+The resulting list is ordered from most specifc to least
+specific, with paths matching all of NAME, USER, & PORT first,
+then NAME & USER, then NAME & PORT, then just NAME."
+ (seq-mapcat
+ #'identity
+ (list
+ (when (and user port)
+ (list
+ (format "%s@%s%s%s" user name auth-source-pass-port-separator port)
+ (format "%s%s%s/%s" name auth-source-pass-port-separator port user)))
+ (when user
+ (list
+ (format "%s@%s" user name)
+ (format "%s/%s" name user)))
+ (when port
+ (list
+ (format "%s%s%s" name auth-source-pass-port-separator port)))
+ (list
+ (format "%s" name)))))
+
+(provide 'auth-source-pass)
+;;; auth-source-pass.el ends here
diff --git a/packages/auto-compile-20180321.1507.el b/packages/auto-compile-20181230.2216.el
similarity index 94%
rename from packages/auto-compile-20180321.1507.el
rename to packages/auto-compile-20181230.2216.el
index 9f481f4..bdee9fd 100644
--- a/packages/auto-compile-20180321.1507.el
+++ b/packages/auto-compile-20181230.2216.el
@@ -5,9 +5,9 @@
;; Author: Jonas Bernoulli
;; Homepage: https://github.com/emacscollective/auto-compile
;; Keywords: compile, convenience, lisp
-;; Package-Version: 20180321.1507
+;; Package-Version: 20181230.2216
-;; Package-Requires: ((emacs "24.3") (packed "2.0.0"))
+;; Package-Requires: ((emacs "25.1") (packed "3.0.0"))
;; This file is not part of GNU Emacs.
@@ -466,9 +466,9 @@ pretend the byte code file exists.")
(defvar auto-compile-file-buffer nil)
(defvar-local auto-compile-warnings 0)
-(defadvice byte-compile-log-warning
- (before auto-compile-count-warnings activate)
- ;; (STRING &optional FILL LEVEL)
+(define-advice byte-compile-log-warning
+ (:before (_string &optional _fill _level) auto-compile)
+ "Increment local value of `auto-compile-warnings'."
(when auto-compile-file-buffer
(with-current-buffer auto-compile-file-buffer
(cl-incf auto-compile-warnings))))
@@ -584,25 +584,25 @@ pretend the byte code file exists.")
(when auto-compile-ding
(ding)))
-(defadvice save-buffers-kill-emacs
- (around auto-compile-dont-mark-failed-modified disable)
- "Set `auto-compile-mark-failed-modified' to nil when killing Emacs.
+(define-advice save-buffers-kill-emacs
+ (:around (fn &optional arg) auto-compile)
+ "Bind `auto-compile-mark-failed-modified' to nil when killing Emacs.
If the regular value of this variable is non-nil the user might
still be asked whether she wants to save modified buffers, which
she actually did already safe. This advice ensures she at least
is only asked once about each such file."
(let ((auto-compile-mark-failed-modified nil))
- ad-do-it))
+ (funcall fn arg)))
-(defadvice save-buffers-kill-terminal
- (around auto-compile-dont-mark-failed-modified disable)
- "Set `auto-compile-mark-failed-modified' to nil when killing Emacs.
+(define-advice save-buffers-kill-terminal
+ (:around (fn &optional arg) auto-compile)
+ "Bind `auto-compile-mark-failed-modified' to nil when killing Emacs.
If the regular value of this variable is non-nil the user might
still be asked whether she wants to save modified buffers, which
she actually did already safe. This advice ensures she at least
is only asked once about each such file."
(let ((auto-compile-mark-failed-modified nil))
- ad-do-it))
+ (funcall fn arg)))
;; REDEFINE autoload-save-buffers defined in autoload.el
;; - verify buffers are still live before killing them
@@ -731,35 +731,30 @@ byte code file would be loaded instead.
Also see the related `auto-compile-on-save-mode'."
:lighter auto-compile-on-load-mode-lighter
:group 'auto-compile
- :global t
- (cond (auto-compile-on-load-mode
- (ad-enable-advice 'load 'before 'auto-compile-on-load)
- (ad-enable-advice 'require 'before 'auto-compile-on-load)
- (ad-activate 'load)
- (ad-activate 'require))
- (t
- (ad-disable-advice 'load 'before 'auto-compile-on-load)
- (ad-disable-advice 'require 'before 'auto-compile-on-load))))
+ :global t)
(defvar auto-compile-on-load-mode-lighter ""
"Mode lighter for Auto-Compile-On-Load Mode.")
-(defadvice load (before auto-compile-on-load disable)
- ;; (file &optional noerror nomessage nosuffix must-suffix)
+(define-advice load
+ (:before (file &optional _noerror _nomessage nosuffix _must-suffix)
+ auto-compile)
"Before loading the library recompile it if it needs recompilation.
-It needs recompilation if it is newer than the byte-compile
-destination. Without this advice the outdated byte-compiled
-file would get loaded."
- (auto-compile-on-load file nosuffix))
-
-(defadvice require (before auto-compile-on-load disable)
- ;; (feature &optional FILENAME NOERROR)
+If `auto-compile-on-load-mode' isn't enabled, then do nothing.
+It needs recompilation if it is newer than the byte-code file.
+Without this advice the outdated source file would get loaded."
+ (when auto-compile-on-load-mode
+ (auto-compile-on-load file nosuffix)))
+
+(define-advice require
+ (:before (feature &optional filename _noerror) auto-compile)
"Before loading the library recompile it if it needs recompilation.
-It needs recompilation if it is newer than the byte-compile
-destination. Without this advice the outdated byte-compiled
-file would get loaded."
- (unless (featurep feature)
- (auto-compile-on-load (or filename (symbol-name feature)))))
+If `auto-compile-on-load-mode' isn't enabled, then do nothing.
+It needs recompilation if it is newer than the byte-code file.
+Without this advice the outdated source file would get loaded."
+ (when auto-compile-on-load-mode
+ (unless (featurep feature)
+ (auto-compile-on-load (or filename (symbol-name feature))))))
(defvar auto-compile--loading nil)
diff --git a/packages/auto-complete-20170125.245.tar b/packages/auto-complete-20170125.245.tar
index 1fb22ef..188315a 100644
Binary files a/packages/auto-complete-20170125.245.tar and b/packages/auto-complete-20170125.245.tar differ
diff --git a/packages/auto-complete-rst-20140225.944.tar b/packages/auto-complete-rst-20140225.944.tar
index 49216d2..1f71c1a 100644
Binary files a/packages/auto-complete-rst-20140225.944.tar and b/packages/auto-complete-rst-20140225.944.tar differ
diff --git a/packages/auto-yasnippet-20180503.1908.el b/packages/auto-yasnippet-20190326.958.el
similarity index 93%
rename from packages/auto-yasnippet-20180503.1908.el
rename to packages/auto-yasnippet-20190326.958.el
index ebef8ea..aee1030 100644
--- a/packages/auto-yasnippet-20180503.1908.el
+++ b/packages/auto-yasnippet-20190326.958.el
@@ -2,9 +2,9 @@
;; Author: Oleh Krehel
;; URL: https://github.com/abo-abo/auto-yasnippet
-;; Package-Version: 20180503.1908
+;; Package-Version: 20190326.958
;; Version: 0.3
-;; Package-Requires: ((yasnippet "0.8.0"))
+;; Package-Requires: ((yasnippet "0.13.0"))
;; This file is not part of GNU Emacs
@@ -202,6 +202,7 @@ menu.add_item(spamspamspam, \"spamspamspam\")"
(delete-region beg end)
(when aya-create-with-newline (delete-char 1))
(setq aya-current line)
+ (yas-minor-mode 1)
(yas-expand-snippet line)))))
(defun aya--parse (str)
@@ -233,19 +234,25 @@ menu.add_item(spamspamspam, \"spamspamspam\")"
(nreverse res)))
;;;###autoload
-(defun aya-create ()
- "Works on either the current line, or, if `mark-active', the current region.
-Removes `aya-marker' prefixes,
-writes the corresponding snippet to `aya-current',
-with words prefixed by `aya-marker' as fields, and mirrors properly set up."
+(defun aya-create (&optional beg end)
+ "Create a snippet from the text between BEG and END.
+When the bounds are not given, use either the current region or line.
+
+Remove `aya-marker' prefixes, write the corresponding snippet to
+`aya-current', with words prefixed by `aya-marker' as fields, and
+mirrors properly set up."
(interactive)
(unless (aya-create-one-line)
- (let* ((beg (if (region-active-p)
- (region-beginning)
- (line-beginning-position)))
- (end (if (region-active-p)
- (region-end)
- (line-end-position)))
+ (let* ((beg (cond (beg)
+ ((region-active-p)
+ (region-beginning))
+ (t
+ (line-beginning-position))))
+ (end (cond (end)
+ ((region-active-p)
+ (region-end))
+ (t
+ (line-end-position))))
(str (buffer-substring-no-properties beg end))
(case-fold-search nil)
(res (aya--parse str)))
@@ -326,14 +333,13 @@ move to the next field. Call `open-line' if nothing else applies."
((progn
(unless yas-global-mode
(yas-global-mode 1))
- (yas--snippets-at-point))
+ (yas-active-snippets))
(yas-next-field-or-maybe-expand))
((ignore-errors
(setq aya-invokation-point (point))
(setq aya-invokation-buffer (current-buffer))
(setq aya-tab-position (- (point) (line-beginning-position)))
- (let ((yas-fallback-behavior 'return-nil))
- (yas-expand))))
+ (yas-expand)))
((and (fboundp 'tiny-expand)
(funcall 'tiny-expand)))
(t
diff --git a/packages/avy-20181009.1648.el b/packages/avy-20190630.1538.el
similarity index 90%
rename from packages/avy-20181009.1648.el
rename to packages/avy-20190630.1538.el
index be6a9b5..4267393 100644
--- a/packages/avy-20181009.1648.el
+++ b/packages/avy-20190630.1538.el
@@ -1,11 +1,11 @@
;;; avy.el --- Jump to arbitrary positions in visible text and select text quickly. -*- lexical-binding: t -*-
-;; Copyright (C) 2015 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2019 Free Software Foundation, Inc.
;; Author: Oleh Krehel
;; URL: https://github.com/abo-abo/avy
-;; Package-Version: 20181009.1648
-;; Version: 0.4.0
+;; Package-Version: 20190630.1538
+;; Version: 0.5.0
;; Package-Requires: ((emacs "24.1") (cl-lib "0.5"))
;; Keywords: point, location
@@ -456,13 +456,28 @@ KEYS is the path from the root of `avy-tree' to LEAF."
(throw 'done 'restart))
((memq char '(27 ?\C-g))
;; exit silently
- (throw 'done 'exit))
+ (throw 'done 'abort))
+ ((eq char ??)
+ (avy-show-dispatch-help)
+ (throw 'done 'restart))
((mouse-event-p char)
(signal 'user-error (list "Mouse event not handled" char)))
(t
- (signal 'user-error (list "No such candidate"
- (if (characterp char) (string char) char)))
- (throw 'done nil)))))
+ (message "No such candidate: %s, hit `C-g' to quit."
+ (if (characterp char) (string char) char))))))
+
+(defun avy-show-dispatch-help ()
+ "Display action shortucts in echo area."
+ (let ((len (length "avy-action-")))
+ (message "%s" (mapconcat
+ (lambda (x)
+ (format "%s: %s"
+ (propertize
+ (char-to-string (car x))
+ 'face 'aw-key-face)
+ (substring (symbol-name (cdr x)) len)))
+ avy-dispatch-alist
+ " "))))
(defvar avy-handler-function 'avy-handler-default
"A function to call for a bad `read-key' in `avy-read'.")
@@ -481,7 +496,7 @@ Return nil if not a mouse event."
(t (selected-window)))))
(defun avy-read (tree display-fn cleanup-fn)
- "Select a leaf from TREE using consecutive `read-char'.
+ "Select a leaf from TREE using consecutive `read-key'.
DISPLAY-FN should take CHAR and LEAF and signify that LEAFs
associated with CHAR will be selected if CHAR is pressed. This is
@@ -504,13 +519,14 @@ multiple DISPLAY-FN invocations."
(funcall cleanup-fn)
(if (setq window (avy-mouse-event-window char))
(throw 'done (cons char window))
- ;; Ensure avy-current-path stores the full path prior to
- ;; exit so other packages can utilize its value.
- (setq avy-current-path
- (concat avy-current-path (string (avy--key-to-char char))))
(if (setq branch (assoc char tree))
- (if (eq (car (setq tree (cdr branch))) 'leaf)
- (throw 'done (cdr tree)))
+ (progn
+ ;; Ensure avy-current-path stores the full path prior to
+ ;; exit so other packages can utilize its value.
+ (setq avy-current-path
+ (concat avy-current-path (string (avy--key-to-char char))))
+ (if (eq (car (setq tree (cdr branch))) 'leaf)
+ (throw 'done (cdr tree))))
(funcall avy-handler-function char)))))))
(defun avy-read-de-bruijn (lst keys)
@@ -651,7 +667,9 @@ Set `avy-style' according to COMMMAND as well."
(setf (symbol-function 'avy-resume)
(lambda ()
(interactive)
- ,@body))
+ ,@(if (eq command 'avy-goto-char-timer)
+ (cdr body)
+ body)))
,@body))
(defun avy-action-goto (pt)
@@ -734,6 +752,11 @@ Set `avy-style' according to COMMMAND as well."
(declare-function flyspell-correct-word-before-point "flyspell")
+(defcustom avy-flyspell-correct-function #'flyspell-correct-word-before-point
+ "Function called to correct word by `avy-action-ispell' when
+`flyspell-mode' is enabled."
+ :type 'function)
+
(defun avy-action-ispell (pt)
"Auto correct word at PT."
(save-excursion
@@ -744,7 +767,7 @@ Set `avy-style' according to COMMMAND as well."
(line-beginning-position)
(line-end-position)))
((bound-and-true-p flyspell-mode)
- (flyspell-correct-word-before-point))
+ (funcall avy-flyspell-correct-function))
((looking-at-p "\\b")
(ispell-word))
(t
@@ -753,7 +776,20 @@ Set `avy-style' according to COMMMAND as well."
(when (looking-at-p "\\b")
(ispell-word)))))))
-(defun avy--process-1 (candidates overlay-fn)
+(defvar avy-pre-action #'avy-pre-action-default
+ "Function to call before `avy-action' is called.")
+
+(defun avy-pre-action-default (res)
+ (avy-push-mark)
+ (when (and (consp res)
+ (windowp (cdr res)))
+ (let* ((window (cdr res))
+ (frame (window-frame window)))
+ (unless (equal frame (selected-frame))
+ (select-frame-set-input-focus frame))
+ (select-window window))))
+
+(defun avy--process-1 (candidates overlay-fn &optional cleanup-fn)
(let ((len (length candidates)))
(cond ((= len 0)
nil)
@@ -773,42 +809,79 @@ Set `avy-style' according to COMMMAND as well."
(t
(avy-read (avy-tree candidates avy-keys)
overlay-fn
- #'avy--remove-leading-chars))))
+ (or cleanup-fn #'avy--remove-leading-chars)))))
(avy--done))))))
-(defun avy--process (candidates overlay-fn)
+(defvar avy-last-candidates nil
+ "Store the last candidate list.")
+
+(defun avy--last-candidates-cycle (advancer)
+ (let* ((avy-last-candidates
+ (cl-remove-if-not
+ (lambda (x) (equal (cdr x) (selected-window)))
+ avy-last-candidates))
+ (min-dist
+ (apply #'min
+ (mapcar (lambda (x) (abs (- (caar x) (point)))) avy-last-candidates)))
+ (pos
+ (cl-position-if
+ (lambda (x)
+ (= (- (caar x) (point)) min-dist))
+ avy-last-candidates)))
+ (funcall advancer pos avy-last-candidates)))
+
+(defun avy-prev ()
+ "Go to the previous candidate of the last `avy-read'."
+ (interactive)
+ (avy--last-candidates-cycle
+ (lambda (pos lst)
+ (when (> pos 0)
+ (goto-char (caar (nth (1- pos) lst)))))))
+
+(defun avy-next ()
+ "Go to the next candidate of the last `avy-read'."
+ (interactive)
+ (avy--last-candidates-cycle
+ (lambda (pos lst)
+ (when (< pos (1- (length lst)))
+ (goto-char (caar (nth (1+ pos) lst)))))))
+
+(defun avy-process (candidates &optional overlay-fn cleanup-fn)
"Select one of CANDIDATES using `avy-read'.
-Use OVERLAY-FN to visualize the decision overlay."
+Use OVERLAY-FN to visualize the decision overlay.
+CLEANUP-FN should take no arguments and remove the effects of
+multiple OVERLAY-FN invocations."
+ (setq overlay-fn (or overlay-fn (avy--style-fn avy-style)))
+ (setq cleanup-fn (or cleanup-fn #'avy--remove-leading-chars))
(unless (and (consp (car candidates))
(windowp (cdar candidates)))
(setq candidates
(mapcar (lambda (x) (cons x (selected-window)))
candidates)))
+ (setq avy-last-candidates (copy-sequence candidates))
(let ((original-cands (copy-sequence candidates))
- (res (avy--process-1 candidates overlay-fn)))
+ (res (avy--process-1 candidates overlay-fn cleanup-fn)))
(cond
((null res)
(message "zero candidates")
t)
((eq res 'restart)
- (avy--process original-cands overlay-fn))
+ (avy-process original-cands overlay-fn cleanup-fn))
;; ignore exit from `avy-handler-function'
((eq res 'exit))
+ ((eq res 'abort)
+ nil)
(t
- (avy-push-mark)
- (when (and (consp res)
- (windowp (cdr res)))
- (let* ((window (cdr res))
- (frame (window-frame window)))
- (unless (equal frame (selected-frame))
- (select-frame-set-input-focus frame))
- (select-window window))
- (setq res (car res)))
-
+ (funcall avy-pre-action res)
+ (setq res (car res))
(funcall (or avy-action 'avy-action-goto)
(if (consp res)
(car res)
- res))))))
+ res))
+ res))))
+
+(define-obsolete-function-alias 'avy--process 'avy-process
+ "0.4.0")
(defvar avy--overlays-back nil
"Hold overlays for when `avy-background' is t.")
@@ -833,18 +906,24 @@ Use OVERLAY-FN to visualize the decision overlay."
(setq avy--overlays-back nil)
(avy--remove-leading-chars))
+(defun avy--visible-p (s)
+ (let ((invisible (get-char-property s 'invisible)))
+ (or (null invisible)
+ (eq t buffer-invisibility-spec)
+ (null (assoc invisible buffer-invisibility-spec)))))
+
(defun avy--next-visible-point ()
"Return the next closest point without 'invisible property."
(let ((s (point)))
(while (and (not (= (point-max) (setq s (next-char-property-change s))))
- (get-char-property s 'invisible)))
+ (not (avy--visible-p s))))
s))
(defun avy--next-invisible-point ()
"Return the next closest point with 'invisible property."
(let ((s (point)))
(while (and (not (= (point-max) (setq s (next-char-property-change s))))
- (not (get-char-property s 'invisible))))
+ (avy--visible-p s)))
s))
(defun avy--find-visible-regions (rbeg rend)
@@ -879,7 +958,7 @@ When GROUP is non-nil, (BEG . END) should delimit that regex group."
(save-excursion
(goto-char (car pair))
(while (re-search-forward regex (cdr pair) t)
- (unless (get-char-property (1- (point)) 'invisible)
+ (when (avy--visible-p (1- (point)))
(when (or (null pred)
(funcall pred))
(push (cons (cons (match-beginning group)
@@ -1026,7 +1105,7 @@ LEAF is normally ((BEG . END) . WND)."
(wnd (cdr leaf))
end)
(dotimes (i len)
- (set-text-properties (- len i 1) (- len i)
+ (set-text-properties i (1+ i)
`(face ,(nth i avy-lead-faces))
str))
(when (eq avy-style 'de-bruijn)
@@ -1152,21 +1231,36 @@ exist."
(post #'avy--overlay-post)
(de-bruijn #'avy--overlay-at-full)
(words #'avy--overlay-at-full)
+ (ignore #'ignore)
(t (error "Unexpected style %S" style))))
-(defun avy--generic-jump (regex window-flip style &optional beg end)
+(cl-defun avy-jump (regex &key window-flip beg end action pred)
+ "Jump to REGEX.
+The window scope is determined by `avy-all-windows'.
+When WINDOW-FLIP is non-nil, do the opposite of `avy-all-windows'.
+BEG and END narrow the scope where candidates are searched.
+ACTION is a function that takes point position as an argument.
+When PRED is non-nil, it's a filter for matching point positions."
+ (setq avy-action (or action avy-action))
+ (let ((avy-all-windows
+ (if window-flip
+ (not avy-all-windows)
+ avy-all-windows)))
+ (avy-process
+ (avy--regex-candidates regex beg end pred))))
+
+(defun avy--generic-jump (regex window-flip &optional beg end)
"Jump to REGEX.
The window scope is determined by `avy-all-windows'.
When WINDOW-FLIP is non-nil, do the opposite of `avy-all-windows'.
-STYLE determines the leading char overlay style.
BEG and END narrow the scope where candidates are searched."
+ (declare (obsolete avy-jump "0.4.0"))
(let ((avy-all-windows
(if window-flip
(not avy-all-windows)
avy-all-windows)))
- (avy--process
- (avy--regex-candidates regex beg end)
- (avy--style-fn style))))
+ (avy-process
+ (avy--regex-candidates regex beg end))))
;;* Commands
;;;###autoload
@@ -1176,24 +1270,21 @@ The window scope is determined by `avy-all-windows' (ARG negates it)."
(interactive (list (read-char "char: " t)
current-prefix-arg))
(avy-with avy-goto-char
- (avy--generic-jump
+ (avy-jump
(if (= 13 char)
"\n"
(regexp-quote (string char)))
- arg
- avy-style)))
+ :window-flip arg)))
;;;###autoload
(defun avy-goto-char-in-line (char)
"Jump to the currently visible CHAR in the current line."
(interactive (list (read-char "char: " t)))
(avy-with avy-goto-char
- (avy--generic-jump
+ (avy-jump
(regexp-quote (string char))
- avy-all-windows
- avy-style
- (line-beginning-position)
- (line-end-position))))
+ :beg (line-beginning-position)
+ :end (line-end-position))))
;;;###autoload
(defun avy-goto-char-2 (char1 char2 &optional arg beg end)
@@ -1210,11 +1301,11 @@ BEG and END narrow the scope where candidates are searched."
(when (eq char2 ?
)
(setq char2 ?\n))
(avy-with avy-goto-char-2
- (avy--generic-jump
+ (avy-jump
(regexp-quote (string char1 char2))
- arg
- avy-style
- beg end)))
+ :window-flip arg
+ :beg beg
+ :end end)))
;;;###autoload
(defun avy-goto-char-2-above (char1 char2 &optional arg)
@@ -1252,11 +1343,10 @@ When ARG is non-nil, do the opposite of `avy-all-windows'."
(interactive)
(avy-with avy-isearch
(let ((avy-background nil))
- (avy--process
+ (avy-process
(avy--regex-candidates (if isearch-regexp
isearch-string
- (regexp-quote isearch-string)))
- (avy--style-fn avy-style))
+ (regexp-quote isearch-string))))
(isearch-done))))
;;;###autoload
@@ -1267,7 +1357,10 @@ When ARG is non-nil, do the opposite of `avy-all-windows'.
BEG and END narrow the scope where candidates are searched."
(interactive "P")
(avy-with avy-goto-word-0
- (avy--generic-jump avy-goto-word-0-regexp arg avy-style beg end)))
+ (avy-jump avy-goto-word-0-regexp
+ :window-flip arg
+ :beg beg
+ :end end)))
(defun avy-goto-word-0-above (arg)
"Jump to a word start between window start and point.
@@ -1307,7 +1400,10 @@ When SYMBOL is non-nil, jump to symbol start instead of word start."
(concat
(if symbol "\\_<" "\\b")
str)))))
- (avy--generic-jump regex arg avy-style beg end))))
+ (avy-jump regex
+ :window-flip arg
+ :beg beg
+ :end end))))
;;;###autoload
(defun avy-goto-word-1-above (char &optional arg)
@@ -1404,7 +1500,7 @@ BEG and END narrow the scope where candidates are searched."
(while (> (point) ws)
(when (or (null predicate)
(and predicate (funcall predicate)))
- (unless (get-char-property (point) 'invisible)
+ (unless (not (avy--visible-p (point)))
(push (cons (point) (selected-window)) window-cands)))
(subword-backward))
(and (= (point) ws)
@@ -1413,7 +1509,7 @@ BEG and END narrow the scope where candidates are searched."
(not (get-char-property (point) 'invisible))
(push (cons (point) (selected-window)) window-cands)))
(setq candidates (nconc candidates window-cands))))))
- (avy--process candidates (avy--style-fn avy-style)))))
+ (avy-process candidates))))
;;;###autoload
(defun avy-goto-subword-1 (char &optional arg)
@@ -1458,8 +1554,8 @@ When BOTTOM-UP is non-nil, display avy candidates from top to bottom"
(narrow-to-region ws (or end (window-end (selected-window) t)))
(goto-char (point-min))
(while (< (point) (point-max))
- (unless (get-char-property
- (max (1- (point)) ws) 'invisible)
+ (when (member (get-char-property
+ (max (1- (point)) ws) 'invisible) '(nil org-link))
(push (cons
(if (eq avy-style 'post)
(line-end-position)
@@ -1566,13 +1662,14 @@ The window scope is determined by `avy-all-windows'.
When ARG is non-nil, do the opposite of `avy-all-windows'.
BEG and END narrow the scope where candidates are searched.
When BOTTOM-UP is non-nil, display avy candidates from top to bottom"
- (let ((avy-action #'identity))
- (avy--process
- (avy--line-cands arg beg end bottom-up)
- (if avy-linum-mode
- (progn (message "Goto line:")
- 'ignore)
- (avy--style-fn avy-style)))))
+ (setq avy-action (or avy-action #'identity))
+ (let ((avy-style (if avy-linum-mode
+ (progn
+ (message "Goto line:")
+ 'ignore)
+ avy-style)))
+ (avy-process
+ (avy--line-cands arg beg end bottom-up))))
;;;###autoload
(defun avy-goto-line (&optional arg)
@@ -1608,7 +1705,7 @@ Otherwise, forward to `goto-line' with ARG."
(forward-line (1- (string-to-number line))))
(throw 'done 'exit))))))
(r (avy--line (eq arg 4))))
- (unless (eq r t)
+ (when (and (not (eq r t)) (eq avy-action #'identity))
(avy-action-goto r))))))
;;;###autoload
@@ -1889,11 +1986,10 @@ newline."
(defun avy--read-candidates (&optional re-builder)
"Read as many chars as possible and return their occurrences.
At least one char must be read, and then repeatedly one next char
-may be read if it is entered before `avy-timeout-seconds'. Any
-key defined in `avy-del-last-char-by' (by default `C-h' and `DEL')
-deletes the last char entered, and `RET' exits with the
-currently read string immediately instead of waiting for another
-char for `avy-timeout-seconds'.
+may be read if it is entered before `avy-timeout-seconds'. DEL
+deletes the last char entered, and RET exits with the currently
+read string immediately instead of waiting for another char for
+`avy-timeout-seconds'.
The format of the result is the same as that of `avy--regex-candidates'.
This function obeys `avy-all-windows' setting.
RE-BUILDER is a function that takes a string and returns a regex.
@@ -1905,6 +2001,8 @@ Otherwise, the whole regex is highlighted."
char break overlays regex)
(unwind-protect
(progn
+ (avy--make-backgrounds
+ (avy-window-list))
(while (and (not break)
(setq char
(read-char (format "%d char%s: "
@@ -1948,7 +2046,7 @@ Otherwise, the whole regex is highlighted."
(goto-char (car pair))
(setq regex (funcall re-builder str))
(while (re-search-forward regex (cdr pair) t)
- (unless (get-char-property (1- (point)) 'invisible)
+ (unless (not (avy--visible-p (1- (point))))
(let* ((idx (if (= (length (match-data)) 4) 1 0))
(ov (make-overlay
(match-beginning idx) (match-end idx))))
@@ -1966,7 +2064,10 @@ Otherwise, the whole regex is highlighted."
(overlay-get ov 'window)))
overlays)))
(dolist (ov overlays)
- (delete-overlay ov)))))
+ (delete-overlay ov))
+ (avy--done))))
+
+(defvar avy--old-cands nil)
;;;###autoload
(defun avy-goto-char-timer (&optional arg)
@@ -1977,16 +2078,16 @@ The window scope is determined by `avy-all-windows' (ARG negates it)."
(not avy-all-windows)
avy-all-windows)))
(avy-with avy-goto-char-timer
- (avy--process
- (avy--read-candidates)
- (avy--style-fn avy-style)))))
+ (setq avy--old-cands (avy--read-candidates))
+ (avy-process avy--old-cands))))
(defun avy-push-mark ()
"Store the current point and window."
- (ring-insert avy-ring
- (cons (point) (selected-window)))
- (unless (region-active-p)
- (push-mark)))
+ (let ((inhibit-message t))
+ (ring-insert avy-ring
+ (cons (point) (selected-window)))
+ (unless (region-active-p)
+ (push-mark))))
(defun avy-pop-mark ()
"Jump back to the last location of `avy-push-mark'."
@@ -2010,22 +2111,30 @@ The window scope is determined by `avy-all-windows' (ARG negates it)."
(defvar org-reverse-note-order)
(declare-function org-refile "org")
(declare-function org-back-to-heading "org")
+(declare-function org-reveal "org")
+
+(defvar org-after-refile-insert-hook)
(defun avy-org-refile-as-child ()
"Refile current heading as first child of heading selected with `avy.'"
;; Inspired by `org-teleport': http://kitchingroup.cheme.cmu.edu/blog/2016/03/18/Org-teleport-headlines/
(interactive)
- (let ((rfloc (save-excursion
- (let* ((org-reverse-note-order t)
- (pos (avy-with avy-goto-line
- (avy--generic-jump (rx bol (1+ "*") (1+ space))
- nil avy-style)
- (point)))
- (filename (buffer-file-name (or (buffer-base-buffer (current-buffer))
- (current-buffer)))))
- (list nil filename nil pos)))))
- ;; org-refile must be called outside of the excursion
- (org-refile nil nil rfloc)))
+ (let* ((org-reverse-note-order t)
+ (marker (save-excursion
+ (avy-with avy-goto-line
+ (unless (eq 't (avy-jump (rx bol (1+ "*") (1+ space))))
+ ;; `avy-jump' returns t when aborted with C-g.
+ (point-marker)))))
+ (filename (buffer-file-name (or (buffer-base-buffer (marker-buffer marker))
+ (marker-buffer marker))))
+ (rfloc (list nil filename nil marker))
+ ;; Ensure the refiled heading is visible.
+ (org-after-refile-insert-hook (if (member 'org-reveal org-after-refile-insert-hook)
+ org-after-refile-insert-hook
+ (cons #'org-reveal org-after-refile-insert-hook))))
+ (when marker
+ ;; Only attempt refile if avy session was not aborted.
+ (org-refile nil nil rfloc))))
(defun avy-org-goto-heading-timer (&optional arg)
"Read one or many characters and jump to matching Org headings.
@@ -2035,11 +2144,10 @@ The window scope is determined by `avy-all-windows' (ARG negates it)."
(not avy-all-windows)
avy-all-windows)))
(avy-with avy-goto-char-timer
- (avy--process
+ (avy-process
(avy--read-candidates
(lambda (input)
- (format "^\\*+ .*\\(%s\\)" input)))
- (avy--style-fn avy-style))
+ (format "^\\*+ .*\\(%s\\)" input))))
(org-back-to-heading))))
(provide 'avy)
diff --git a/packages/avy-migemo-20180716.1455.tar b/packages/avy-migemo-20180716.1455.tar
index ceedc45..bd80a0c 100644
Binary files a/packages/avy-migemo-20180716.1455.tar and b/packages/avy-migemo-20180716.1455.tar differ
diff --git a/packages/biblio-20161014.2304.tar b/packages/biblio-20190624.1408.tar
similarity index 82%
rename from packages/biblio-20161014.2304.tar
rename to packages/biblio-20190624.1408.tar
index e34bd06..83ceebc 100644
Binary files a/packages/biblio-20161014.2304.tar and b/packages/biblio-20190624.1408.tar differ
diff --git a/packages/biblio-core-20160901.1815.el b/packages/biblio-core-20190624.1408.el
similarity index 97%
rename from packages/biblio-core-20160901.1815.el
rename to packages/biblio-core-20190624.1408.el
index 94d1753..a5a2304 100644
--- a/packages/biblio-core-20160901.1815.el
+++ b/packages/biblio-core-20190624.1408.el
@@ -4,7 +4,7 @@
;; Author: Clément Pit-Claudel
;; Version: 0.2
-;; Package-Version: 20160901.1815
+;; Package-Version: 20190624.1408
;; Package-Requires: ((emacs "24.3") (let-alist "1.0.4") (seq "1.11") (dash "2.12.1"))
;; Keywords: bib, tex, convenience, hypermedia
;; URL: http://github.com/cpitclaudel/biblio.el
@@ -113,7 +113,7 @@ DIALECT is `BibTeX' or `biblatex'. AUTOKEY: see `biblio-format-bibtex'."
(bibtex-clean-entry autokey)))
(defun biblio--cleanup-bibtex (autokey)
- "Default balue of `biblio-cleanup-bibtex-function'.
+ "Default value of `biblio-cleanup-bibtex-function'.
AUTOKEY: See biblio-format-bibtex."
(save-excursion
(when (search-forward "@data{" nil t)
@@ -144,7 +144,7 @@ With non-nil AUTOKEY, automatically generate a key for BIBTEX."
(funcall biblio-cleanup-bibtex-function autokey))
(if (fboundp 'font-lock-ensure) (font-lock-ensure)
(with-no-warnings (font-lock-fontify-buffer)))
- (buffer-string)))
+ (buffer-substring-no-properties (point-min) (point-max))))
(defun biblio--beginning-of-response-body ()
"Move point to beginning of response body."
@@ -190,7 +190,7 @@ server's response is current at the time of the call, and killed
after the call returns. Call CLEANUP-FUNCTION before checking
for errors. If the request returns one of the errors in
ALLOWED-ERRORS, CALLBACK is instead called with one argument, the
-list of alowed errors that occured instead of a buffer. If the
+list of allowed errors that occurred instead of a buffer. If the
request returns another error, an exception is raised."
(lambda (events)
(let ((target-buffer (current-buffer)))
@@ -386,7 +386,7 @@ Uses .url, and .doi as a fallback."
(user-error "This record does not contain a direct URL (try arXiv or HAL)")))
(defun biblio--selection-next ()
- "Move to next seach result."
+ "Move to next search result."
(interactive)
(biblio--selection-move #'end-of-line #'re-search-forward))
@@ -396,7 +396,7 @@ Uses .url, and .doi as a fallback."
(biblio--selection-move #'ignore #'re-search-forward))
(defun biblio--selection-previous ()
- "Move to previous seach result."
+ "Move to previous search result."
(interactive)
(biblio--selection-move #'beginning-of-line #'re-search-backward))
@@ -626,10 +626,11 @@ NEWLINE is non-nil, add a newline before the main text."
(if authors (biblio-join-1 ", " authors)
"(no authors)")))
-(defun biblio--prepare-title (title)
- "Cleanup TITLE for presentation to the user."
- (or (biblio--nonempty-string-p (biblio--cleanup-field title))
- "(no title)"))
+(defun biblio--prepare-title (title &optional year)
+ "Cleanup TITLE and add YEAR for presentation to the user."
+ (concat (or (biblio--nonempty-string-p (biblio--cleanup-field title))
+ "(no title)")
+ (if year (format " [%s]" year) "")))
(defun biblio--browse-url (button)
"Open web browser on page pointed to by BUTTON."
@@ -658,9 +659,10 @@ This command expects ITEM to be a single alist, in the following format:
(type . \"Type of document (journal paper, proceedings, report, …)\")
(category . \"Category of this document (aka primary topic)\")
(publisher . \"Publisher of this document\")
- (references . \"Identifier(s) of this document (DOI, DPLB id, Handle, …)\")
+ (references . \"Identifier(s) of this document (DOI, DBLP id, Handle, …)\")
(open-access-status . \"Open access status of this document\")
(url . \"Relevant URL\")
+ (year . \"Publication year as a string, if available\")
(direct-url . \"Direct URL of paper (typically PDF)\"))
Each of `container', `type', `category', `publisher',
@@ -673,7 +675,7 @@ provide examples of how to build such a result."
(biblio--with-text-property 'biblio-metadata item
(let-alist item
(biblio-with-fontification 'font-lock-function-name-face
- (biblio-insert-with-prefix "> " (biblio--prepare-title .title)))
+ (biblio-insert-with-prefix "> " (biblio--prepare-title .title .year)))
(insert "\n")
(biblio-with-fontification 'font-lock-doc-face
(biblio-insert-with-prefix " " (biblio--prepare-authors .authors)))
diff --git a/packages/blacken-20190521.841.el b/packages/blacken-20190521.841.el
new file mode 100644
index 0000000..382c9c3
--- /dev/null
+++ b/packages/blacken-20190521.841.el
@@ -0,0 +1,159 @@
+;;; blacken.el --- Reformat python buffers using the "black" formatter
+
+;; Copyright (C) 2018-2019 Artem Malyshev
+
+;; Author: Artem Malyshev
+;; Homepage: https://github.com/proofit404/blacken
+;; Version: 0.0.1
+;; Package-Version: 20190521.841
+;; Package-Requires: ((emacs "25.2"))
+
+;; 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.
+;;
+;; For a full copy of the GNU General Public License
+;; see .
+
+;;; Commentary:
+;;
+;; Blacken uses black to format a Python buffer. It can be called
+;; explicitly on a certain buffer, but more conveniently, a minor-mode
+;; 'blacken-mode' is provided that turns on automatically running
+;; black on a buffer before saving.
+;;
+;; Installation:
+;;
+;; Add blacken.el to your load-path.
+;;
+;; To automatically format all Python buffers before saving, add the
+;; function blacken-mode to python-mode-hook:
+;;
+;; (add-hook 'python-mode-hook 'blacken-mode)
+;;
+;;; Code:
+
+(require 'cl-lib)
+
+(defgroup blacken nil
+ "Reformat Python code with \"black\"."
+ :group 'python)
+
+(defcustom blacken-executable "black"
+ "Name of the executable to run."
+ :type 'string)
+
+(defcustom blacken-line-length nil
+ "Line length to enforce.
+
+It must be an integer, nil or `fill'.
+If `fill', the `fill-column' variable value is used."
+ :type '(choice :tag "Line Length Limit"
+ (const :tag "Use default" nil)
+ (const :tag "Use fill-column" fill)
+ (integer :tag "Line Length"))
+ :safe 'integerp)
+
+(defcustom blacken-allow-py36 nil
+ "Allow using Python 3.6-only syntax on all input files."
+ :type 'boolean
+ :safe 'booleanp)
+
+(defcustom blacken-skip-string-normalization nil
+ "Don't normalize string quotes or prefixes."
+ :type 'boolean
+ :safe 'booleanp)
+
+(defcustom blacken-fast-unsafe nil
+ "Skips temporary sanity checks."
+ :type 'boolean
+ :safe 'booleanp)
+
+(defun blacken-call-bin (input-buffer output-buffer error-buffer)
+ "Call process black.
+
+Send INPUT-BUFFER content to the process stdin. Saving the
+output to OUTPUT-BUFFER. Saving process stderr to ERROR-BUFFER.
+Return black process the exit code."
+ (with-current-buffer input-buffer
+ (let ((process (make-process :name "blacken"
+ :command `(,blacken-executable ,@(blacken-call-args))
+ :buffer output-buffer
+ :stderr error-buffer
+ :noquery t
+ :sentinel (lambda (process event)))))
+ (set-process-query-on-exit-flag (get-buffer-process error-buffer) nil)
+ (set-process-sentinel (get-buffer-process error-buffer) (lambda (process event)))
+ (save-restriction
+ (widen)
+ (process-send-region process (point-min) (point-max)))
+ (process-send-eof process)
+ (accept-process-output process nil nil t)
+ (while (process-live-p process)
+ (accept-process-output process nil nil t))
+ (process-exit-status process))))
+
+(defun blacken-call-args ()
+ "Build black process call arguments."
+ (append
+ (when blacken-line-length
+ (list "--line-length"
+ (number-to-string (cl-case blacken-line-length
+ ('fill fill-column)
+ (t blacken-line-length)))))
+ (when blacken-allow-py36
+ (list "--py36"))
+ (when blacken-fast-unsafe
+ (list "--fast"))
+ (when blacken-skip-string-normalization
+ (list "--skip-string-normalization"))
+ (when (string-match "\.pyi$" (buffer-file-name (current-buffer)))
+ (list "--pyi"))
+ '("-")))
+
+;;;###autoload
+(defun blacken-buffer (&optional display)
+ "Try to blacken the current buffer.
+
+Show black output, if black exit abnormally and DISPLAY is t."
+ (interactive (list t))
+ (let* ((original-buffer (current-buffer))
+ (original-point (point))
+ (original-window-pos (window-start))
+ (tmpbuf (get-buffer-create "*blacken*"))
+ (errbuf (get-buffer-create "*blacken-error*")))
+ ;; This buffer can be left after previous black invocation. It
+ ;; can contain error message of the previous run.
+ (dolist (buf (list tmpbuf errbuf))
+ (with-current-buffer buf
+ (erase-buffer)))
+ (condition-case err
+ (if (not (zerop (blacken-call-bin original-buffer tmpbuf errbuf)))
+ (error "Black failed, see %s buffer for details" (buffer-name errbuf))
+ (unless (eq (compare-buffer-substrings tmpbuf nil nil original-buffer nil nil) 0)
+ (with-current-buffer tmpbuf
+ (copy-to-buffer original-buffer (point-min) (point-max)))
+ (goto-char original-point)
+ (set-window-start (selected-window) original-window-pos))
+ (mapc 'kill-buffer (list tmpbuf errbuf)))
+ (error (message "%s" (error-message-string err))
+ (when display
+ (pop-to-buffer errbuf))))))
+
+;;;###autoload
+(define-minor-mode blacken-mode
+ "Automatically run black before saving."
+ :lighter " Black"
+ (if blacken-mode
+ (add-hook 'before-save-hook 'blacken-buffer nil t)
+ (remove-hook 'before-save-hook 'blacken-buffer t)))
+
+(provide 'blacken)
+
+;;; blacken.el ends here
diff --git a/packages/bm-20181012.1631.tar b/packages/bm-20190807.1217.tar
similarity index 95%
rename from packages/bm-20181012.1631.tar
rename to packages/bm-20190807.1217.tar
index 0e9b486..1226cb6 100644
Binary files a/packages/bm-20181012.1631.tar and b/packages/bm-20190807.1217.tar differ
diff --git a/packages/browse-at-remote-20180622.631.el b/packages/browse-at-remote-20190213.1929.el
similarity index 85%
rename from packages/browse-at-remote-20180622.631.el
rename to packages/browse-at-remote-20190213.1929.el
index 32d53d0..67e4e4d 100644
--- a/packages/browse-at-remote-20180622.631.el
+++ b/packages/browse-at-remote-20190213.1929.el
@@ -1,11 +1,11 @@
-;;; browse-at-remote.el --- Open github/gitlab/bitbucket/stash page from Emacs -*- lexical-binding:t -*-
+;;; browse-at-remote.el --- Open github/gitlab/bitbucket/stash/gist/phab/sourcehut page from Emacs -*- lexical-binding:t -*-
-;; Copyright © 2015-2016 Rustem Muslimov
+;; Copyright © 2015-2018 Rustem Muslimov
;;
;; Author: Rustem Muslimov
-;; Version: 0.10.0
-;; Package-Version: 20180622.631
-;; Keywords: github, gitlab, bitbucket, convenience
+;; Version: 0.13.0
+;; Package-Version: 20190213.1929
+;; Keywords: github, gitlab, bitbucket, gist, stash, phabricator, sourcehut
;; Package-Requires: ((f "0.17.2") (s "1.9.0") (cl-lib "0.5"))
;; This program is free software: you can redistribute it and/or modify
@@ -46,7 +46,9 @@
'(("bitbucket.org" ."bitbucket")
("github.com" . "github")
("gitlab.com" . "gitlab")
- ("git.savannah.gnu.org" . "gnu"))
+ ("git.savannah.gnu.org" . "gnu")
+ ("gist.github.com" . "gist")
+ ("git.sr.ht" . "sourcehut"))
"Alist of domain patterns to remote types."
:type '(alist :key-type (string :tag "Domain")
@@ -55,7 +57,10 @@
(const :tag "GitLab" "gitlab")
(const :tag "Bitbucket" "bitbucket")
(const :tag "Stash/Bitbucket Server" "stash")
- (const :tag "git.savannah.gnu.org" "gnu")))
+ (const :tag "git.savannah.gnu.org" "gnu")
+ (const :tag "Phabricator" "phabricator")
+ (const :tag "gist.github.com" "gist")
+ (const :tag "sourcehut" "sourcehut")))
:group 'browse-at-remote)
(defcustom browse-at-remote-prefer-symbolic t
@@ -247,6 +252,24 @@ If HEAD is detached, return nil."
"Commit URL formatted for bitbucket"
(format "%s/commits/%s" repo-url commithash))
+(defun browse-at-remote--format-region-url-as-gist (repo-url location filename &optional linestart lineend)
+ "URL formatted for gist."
+ (concat
+ (format "%s#file-%s" repo-url
+ (replace-regexp-in-string "[^a-z0-9_]+" "-" filename))
+ (cond
+ ((and linestart lineend) (format "-L%d-L%d" linestart lineend))
+ (linestart (format "-L%d" linestart))
+ (t ""))))
+
+(defun browse-at-remote--format-commit-url-as-gist (repo-url commithash)
+ "Commit URL formatted for gist"
+ (cond
+ ((equal commithash "master")
+ repo-url)
+ (t
+ (format "%s/%s" repo-url commithash))))
+
(defun browse-at-remote--fix-repo-url-stash (repo-url)
"Inserts 'projects' and 'repos' in #repo-url"
(let* ((reversed-url (reverse (split-string repo-url "/")))
@@ -269,6 +292,19 @@ If HEAD is detached, return nil."
"Commit URL formatted for stash"
(format "%s/commits/%s" (browse-at-remote--fix-repo-url-stash repo-url) commithash))
+(defun browse-at-remote--format-region-url-as-phabricator (repo-url location filename &optional linestart lineend)
+ "URL formatted for Phabricator"
+ (let* ((lines (cond
+ (lineend (format "\$%d-%d" linestart lineend))
+ (linestart (format "\$%d" linestart))
+ (t ""))))
+ (format "%s/browse/%s/%s%s" repo-url location filename lines)))
+
+(defun browse-at-remote--format-commit-url-as-phabricator (repo-url commithash)
+ "Commit URL formatted for Phabricator"
+ (message repo-url)
+ (format "%s/%s%s" (replace-regexp-in-string "\/source/.*" "" repo-url) (read-string "Please input the callsign for this repository:") commithash))
+
(defun browse-at-remote--format-region-url-as-gitlab (repo-url location filename &optional linestart lineend)
"URL formatted for gitlab.
The only difference from github is format of region: L1-2 instead of L1-L2"
@@ -278,11 +314,23 @@ The only difference from github is format of region: L1-2 instead of L1-L2"
(linestart (format "%s/blob/%s/%s#L%d" repo-url location filename linestart))
(t (format "%s/tree/%s/%s" repo-url location filename))))
+(defun browse-at-remote--format-region-url-as-sourcehut (repo-url location filename &optional linestart lineend)
+ "URL formatted for sourcehut."
+ (cond
+ ((and linestart lineend)
+ (format "%s/tree/%s/%s#L%d-%d" repo-url location filename linestart lineend))
+ (linestart (format "%s/tree/%s/%s#L%d" repo-url location filename linestart))
+ (t (format "%s/tree/%s/%s" repo-url location filename))))
+
(defun browse-at-remote--format-commit-url-as-gitlab (repo-url commithash)
"Commit URL formatted for gitlab.
Currently the same as for github."
(format "%s/commit/%s" repo-url commithash))
+(defun browse-at-remote--format-commit-url-as-sourcehut (repo-url commithash)
+ "Commit URL formatted for sourcehut."
+ (format "%s/commit/%s" repo-url commithash))
+
(defun browse-at-remote--commit-url (commithash)
"Return the URL to browse COMMITHASH."
(let* ((remote (car (browse-at-remote--remote-ref)))
@@ -339,10 +387,13 @@ Currently the same as for github."
;; magit-commit-mode and magit-revision-mode
((or (eq major-mode 'magit-commit-mode) (eq major-mode 'magit-revision-mode))
(save-excursion
+ ;; Search for the SHA1 on the first line.
(goto-char (point-min))
(let* ((first-line
(buffer-substring-no-properties (line-beginning-position) (line-end-position)))
- (commithash (car (s-split " " first-line))))
+ (commithash (cl-loop for word in (s-split " " first-line)
+ when (eq 40 (length word))
+ return word)))
(browse-at-remote--commit-url commithash))))
;; log-view-mode
diff --git a/packages/bui-20181218.1830.tar b/packages/bui-20181218.1830.tar
new file mode 100644
index 0000000..28ad37b
Binary files /dev/null and b/packages/bui-20181218.1830.tar differ
diff --git a/packages/bundler-20160815.915.el b/packages/bundler-20190701.1013.el
similarity index 98%
rename from packages/bundler-20160815.915.el
rename to packages/bundler-20190701.1013.el
index 02d8736..a328bb0 100644
--- a/packages/bundler-20160815.915.el
+++ b/packages/bundler-20190701.1013.el
@@ -4,7 +4,7 @@
;; Author: Tobias Svensson
;; URL: http://github.com/endofunky/bundler.el
-;; Package-Version: 20160815.915
+;; Package-Version: 20190701.1013
;; Keywords: bundler ruby
;; Created: 31 Dec 2011
;; Version: 1.1.1
@@ -183,7 +183,7 @@ found."
(t
(concat remote
(replace-regexp-in-string
- "Resolving dependencies...\\|\n" ""
+ "Resolving dependencies...\\|The dependency .* will be unused by .*$\\|\n" ""
bundler-stdout)
"/")))))
diff --git a/packages/caml-20181011.1328.tar b/packages/caml-20190413.1205.tar
similarity index 93%
rename from packages/caml-20181011.1328.tar
rename to packages/caml-20190413.1205.tar
index 3aaaabc..b3b91eb 100644
Binary files a/packages/caml-20181011.1328.tar and b/packages/caml-20190413.1205.tar differ
diff --git a/packages/cargo-20181112.722.tar b/packages/cargo-20190816.1046.tar
similarity index 88%
rename from packages/cargo-20181112.722.tar
rename to packages/cargo-20190816.1046.tar
index adf9cd6..6977ead 100644
Binary files a/packages/cargo-20181112.722.tar and b/packages/cargo-20190816.1046.tar differ
diff --git a/packages/ccls-20181106.546.tar b/packages/ccls-20190720.935.tar
similarity index 84%
rename from packages/ccls-20181106.546.tar
rename to packages/ccls-20190720.935.tar
index 31832cd..a1f8de8 100644
Binary files a/packages/ccls-20181106.546.tar and b/packages/ccls-20190720.935.tar differ
diff --git a/packages/centered-cursor-mode-20180112.1555.el b/packages/centered-cursor-mode-20190306.1006.el
similarity index 91%
rename from packages/centered-cursor-mode-20180112.1555.el
rename to packages/centered-cursor-mode-20190306.1006.el
index 1b194e8..528a3e7 100644
--- a/packages/centered-cursor-mode-20180112.1555.el
+++ b/packages/centered-cursor-mode-20190306.1006.el
@@ -6,12 +6,12 @@
;; Maintainer: André Riemann
;; Created: 2007-09-14
;; Keywords: convenience
-;; Package-Version: 20180112.1555
+;; Package-Version: 20190306.1006
;; URL: https://github.com/andre-r/centered-cursor-mode.el
-;; Compatibility: tested with GNU Emacs 23.0, 24, 26
-;; Version: 0.5.7
-;; Last-Updated: 2018-01-12
+;; Compatibility: tested with GNU Emacs 24, 26, 27
+;; Version: 0.5.11
+;; Last-Updated: 2019-03-06
;; 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
@@ -57,6 +57,16 @@
;; - more bugs?
;;; Change Log:
+;; 2019-03-06 kqr
+;; * more customisable way to inhibit recentering after a command:
+;; new defcustom ccm-inhibit-centering-when
+;; * new ignored command evil-mouse-drag-region
+;; 2019-02-24 Gollum999
+;; * Fix aggressive centering while dragging mouse (selecting text doesn't scroll)
+;; 2019-02-05 andre-r
+;; * tip from MATTHIAS Andreas
+;; - replaced forward-line with next-line in ccm-scroll-up and ccm-scroll-down;
+;; scrolled too far in visual-line-mode
;; 2018-01-12 andre-r
;; * #3: Centering does not take line-height into account
;; - added new function for calculating visible lines
@@ -133,10 +143,11 @@ If you want a different animation speed."
:type 'number)
(defcustom ccm-ignored-commands '(mouse-drag-region
- mouse-set-region
+ mouse-set-region
mouse-set-point
widget-button-click
- scroll-bar-toolkit-scroll)
+ scroll-bar-toolkit-scroll
+ evil-mouse-drag-region)
"After these commands recentering is ignored.
This is to prevent unintentional jumping (especially when mouse
clicking). Following commands (except the ignored ones) will
@@ -146,6 +157,14 @@ jumping to the center."
:tag "Ignored commands"
:type '(repeat (symbol :tag "Command")))
+(defcustom ccm-inhibit-centering-when '(ccm-ignored-command-p
+ ccm-mouse-drag-movement-p)
+ "A list of functions which are allowed to inhibit recentering.
+If any of these return t, recentering is canceled."
+ :group 'centered-cursor
+ :tag "Inhibit centering when"
+ :type '(repeat (symbol :tag "Function")))
+
;;;###autoload
(defun ccm-visible-text-lines ()
"Visible text lines"
@@ -232,6 +251,8 @@ This command exists, because mwheel-scroll caused strange
behaviour with automatic recentering."
;; (interactive (list last-input-event))
(interactive "e")
+ (when (region-active-p)
+ (deactivate-mark))
(let* ((mods (delq 'click (delq 'double (delq 'triple (event-modifiers event)))))
(amt (assoc mods mouse-wheel-scroll-amount)))
;;(message "%S" mods)
@@ -262,7 +283,7 @@ a fixed position the movement appears as page up."
(interactive "P")
(let ((amt (or arg (- (ccm-visible-text-lines)
next-screen-context-lines))))
- (forward-line (- amt))))
+ (next-line (- amt))))
(defun ccm-scroll-up (&optional arg)
"Replaces `scroll-up' to be consistent with `ccm-scroll-down'.
@@ -272,7 +293,7 @@ the movement appears as page up."
(interactive "P")
(let ((amt (or arg (- (ccm-visible-text-lines)
next-screen-context-lines))))
- (forward-line amt)))
+ (next-line amt)))
(defun ccm-vpos-down (arg)
@@ -315,9 +336,17 @@ the center. Just the variable ccm-vpos is set."
(setq ccm-vpos (* (eval ccm-vpos-init)
ccm-vpos-inverted))))
+(defun ccm-ignored-command-p ()
+ "Check if the last command was one listed in CCM-IGNORED-COMMANDS."
+ (member this-command ccm-ignored-commands))
+
+(defun ccm-mouse-drag-movement-p ()
+ "Check if the last input event corresponded to a mouse drag event."
+ (mouse-movement-p last-command-event))
+
(defun ccm-position-cursor ()
"Do the actual recentering at the position `ccm-vpos'."
- (unless (member this-command ccm-ignored-commands)
+ (unless (seq-some #'funcall ccm-inhibit-centering-when)
(unless ccm-vpos
(ccm-vpos-recenter))
(unless (minibufferp (current-buffer))
diff --git a/packages/chinese-wbim-20150624.350.tar b/packages/chinese-wbim-20190727.854.tar
similarity index 99%
rename from packages/chinese-wbim-20150624.350.tar
rename to packages/chinese-wbim-20190727.854.tar
index fb661a8..64ab73f 100644
Binary files a/packages/chinese-wbim-20150624.350.tar and b/packages/chinese-wbim-20190727.854.tar differ
diff --git a/packages/chocolate-theme-20190818.756.el b/packages/chocolate-theme-20190818.756.el
new file mode 100644
index 0000000..f180de0
--- /dev/null
+++ b/packages/chocolate-theme-20190818.756.el
@@ -0,0 +1,1660 @@
+;;; chocolate-theme.el --- A dark chocolaty theme -*- lexical-binding: t; -*-
+
+;; Copyright (c) 2018-2019 Valeriy Savchenko (GNU/GPL Licence)
+
+;; Authors: Valeriy Savchenko
+;; URL: http://github.com/SavchenkoValeriy/emacs-chocolate-theme
+;; Package-Version: 20190818.756
+;; Version: 0.2.0
+;; Package-Requires: ((emacs "24.1") (autothemer "0.2"))
+
+;;; Commentary:
+;; Poor doggies can't experience it because of two reasons
+
+;;; Code:
+(require 'autothemer)
+
+(autothemer-deftheme
+ chocolate "Poor doggies can't experience it because of two reasons"
+
+ ((((class color) (min-colors #xFFFFFF))) ;; color column 1 GUI/24bit
+
+ (chocolate-mono-1 "#BFAAAE")
+ (chocolate-mono-2 "#968185")
+ (chocolate-mono-3 "#705B5F")
+ (chocolate-hue-1 "#56B5C2")
+ (chocolate-hue-1-2 "#7CEFFF")
+ (chocolate-hue-1-3 "#6ED6E5")
+ (chocolate-hue-1-4 "#54BCCA")
+ (chocolate-hue-1-5 "#45AFBD")
+ (chocolate-hue-2 "#EAEAFE")
+ (chocolate-hue-3 "#DC672C")
+ (chocolate-hue-4 "#C7AE9D")
+ (chocolate-hue-4-2 "#937F73")
+ (chocolate-hue-5 "#DF6B75")
+ (chocolate-hue-5-2 "#BE5046")
+ (chocolate-hue-5-3 "#D2646E")
+ (chocolate-hue-5-4 "#C55D67")
+ (chocolate-hue-5-5 "#B85660")
+ (chocolate-hue-5-6 "#AB5059")
+ (chocolate-hue-6 "#D19965")
+ (chocolate-hue-6-2 "#E4BF7A")
+ (chocolate-hue-6-3 "#AA8768")
+ (chocolate-hue-7 "#FFC15E")
+ (chocolate-hue-7-2 "#FFC05B")
+ (chocolate-hue-7-3 "#FBBD5A")
+ (chocolate-hue-7-4 "#EDB254")
+ (chocolate-hue-7-5 "#E0A84F")
+ (chocolate-hue-8 "#C77497")
+ (chocolate-hue-8-2 "#BB6D8E")
+ (chocolate-hue-8-3 "#AF6685")
+ (chocolate-hue-8-4 "#975873")
+ (chocolate-hue-8-5 "#8B516A")
+ (chocolate-hue-9 "#56E39F")
+ (chocolate-hue-9-2 "#50D595")
+ (chocolate-hue-9-3 "#4BC88C")
+ (chocolate-hue-9-4 "#46BB83")
+ (chocolate-hue-9-5 "#41AE7A")
+ (chocolate-syntax-light "#4B393E")
+ (chocolate-syntax-bg-light "#3E2F33")
+ (chocolate-syntax-bg "#33272A")
+ (chocolate-syntax-bg-dark "#261D1F")
+ (chocolate-syntax-accent "#F88425")
+ (chocolate-syntax-renamed "#329fff")
+ (chocolate-syntax-added "#43d089")
+ (chocolate-syntax-modified "#e0c184")
+ (chocolate-syntax-removed "#e05151")
+ (chocolate-darker-green "#292D29")
+ (chocolate-dark-green "#2A382F")
+ (chocolate-darker-red "#4B2729")
+ (chocolate-dark-red "#632E2F")
+ (chocolate-darker-yellow "#483B31")
+ (chocolate-dark-yellow "#594A3B"))
+
+ ((default (:foreground chocolate-hue-4 :background chocolate-syntax-bg))
+ (cursor (:background chocolate-hue-4))
+ (link (:foreground chocolate-hue-1 :underline t))
+ (link-visited (:foreground chocolate-hue-1 :underline nil))
+ (mode-line (:foreground chocolate-hue-6 :background chocolate-syntax-light :box nil))
+ (mode-line-inactive (:foreground chocolate-hue-6-3 :background chocolate-syntax-bg-light :box nil))
+ (fringe (:background chocolate-syntax-bg))
+ (linum (:foreground chocolate-hue-4-2))
+ (region (:background chocolate-syntax-light :distant-foreground chocolate-hue-4))
+ (secondary-selection (:background chocolate-syntax-light))
+ (hl-line (:background chocolate-syntax-bg-light))
+
+ ;; Built-in syntax
+ (font-lock-builtin-face (:foreground chocolate-syntax-accent))
+ (font-lock-constant-face (:foreground chocolate-hue-6))
+ (font-lock-comment-face (:foreground chocolate-mono-3))
+ (font-lock-function-name-face (:weight 'bold :foreground chocolate-hue-1))
+ (font-lock-keyword-face (:foreground chocolate-hue-3))
+ (font-lock-string-face (:foreground chocolate-hue-6-2))
+ (font-lock-variable-name-face (:foreground chocolate-hue-5))
+ (font-lock-type-face (:foreground chocolate-hue-1))
+ (font-lock-warning-face (:foreground chocolate-hue-5-2 :bold t))
+
+ ;; MODE SUPPORT: rainbow-delimiters
+ (rainbow-delimiters-depth-1-face (:foreground chocolate-hue-1))
+ (rainbow-delimiters-depth-2-face (:foreground chocolate-hue-2))
+ (rainbow-delimiters-depth-3-face (:foreground chocolate-hue-3))
+ (rainbow-delimiters-depth-4-face (:foreground chocolate-hue-4))
+ (rainbow-delimiters-depth-5-face (:foreground chocolate-hue-5))
+ (rainbow-delimiters-depth-6-face (:foreground chocolate-hue-6))
+ (rainbow-delimiters-depth-7-face (:foreground chocolate-hue-1))
+ (rainbow-delimiters-depth-8-face (:foreground chocolate-hue-2))
+ (rainbow-delimiters-depth-9-face (:foreground chocolate-hue-3))
+ (rainbow-delimiters-depth-10-face (:foreground chocolate-hue-4))
+ (rainbow-delimiters-depth-11-face (:foreground chocolate-hue-5))
+ (rainbow-delimiters-depth-12-face (:foreground chocolate-hue-6))
+ (rainbow-delimiters-unmatched-face (:foreground chocolate-hue-4 nil))
+
+ (cquery-sem-variable-face-0 (:foreground chocolate-hue-5))
+ (cquery-sem-variable-face-1 (:foreground chocolate-hue-5-3))
+ (cquery-sem-variable-face-2 (:foreground chocolate-hue-5-4))
+ (cquery-sem-variable-face-3 (:foreground chocolate-hue-5-5))
+ (cquery-sem-variable-face-4 (:foreground chocolate-hue-5-6))
+ (cquery-sem-variable-face-5 (:foreground chocolate-hue-5))
+ (cquery-sem-variable-face-6 (:foreground chocolate-hue-5-3))
+ (cquery-sem-variable-face-7 (:foreground chocolate-hue-5-4))
+ (cquery-sem-variable-face-8 (:foreground chocolate-hue-5-5))
+ (cquery-sem-variable-face-9 (:foreground chocolate-hue-5-6))
+
+ (cquery-sem-type-face-0 (:foreground chocolate-hue-1))
+ (cquery-sem-type-face-1 (:foreground chocolate-hue-1-2))
+ (cquery-sem-type-face-2 (:foreground chocolate-hue-1-3))
+ (cquery-sem-type-face-3 (:foreground chocolate-hue-1-4))
+ (cquery-sem-type-face-4 (:foreground chocolate-hue-1-5))
+ (cquery-sem-type-face-5 (:foreground chocolate-hue-1))
+ (cquery-sem-type-face-6 (:foreground chocolate-hue-1-2))
+ (cquery-sem-type-face-7 (:foreground chocolate-hue-1-3))
+ (cquery-sem-type-face-8 (:foreground chocolate-hue-1-4))
+ (cquery-sem-type-face-9 (:foreground chocolate-hue-1-5))
+
+ (cquery-sem-function-face-0 (:foreground chocolate-hue-7))
+ (cquery-sem-function-face-1 (:foreground chocolate-hue-7-2))
+ (cquery-sem-function-face-2 (:foreground chocolate-hue-7-3))
+ (cquery-sem-function-face-3 (:foreground chocolate-hue-7-4))
+ (cquery-sem-function-face-4 (:foreground chocolate-hue-7-5))
+ (cquery-sem-function-face-5 (:foreground chocolate-hue-7))
+ (cquery-sem-function-face-6 (:foreground chocolate-hue-7-2))
+ (cquery-sem-function-face-7 (:foreground chocolate-hue-7-3))
+ (cquery-sem-function-face-8 (:foreground chocolate-hue-7-4))
+ (cquery-sem-function-face-9 (:foreground chocolate-hue-7-5))
+
+ (cquery-sem-namespace-face-0 (:foreground chocolate-hue-8))
+ (cquery-sem-namespace-face-1 (:foreground chocolate-hue-8-2))
+ (cquery-sem-namespace-face-2 (:foreground chocolate-hue-8-3))
+ (cquery-sem-namespace-face-3 (:foreground chocolate-hue-8-4))
+ (cquery-sem-namespace-face-4 (:foreground chocolate-hue-8-5))
+ (cquery-sem-namespace-face-5 (:foreground chocolate-hue-8))
+ (cquery-sem-namespace-face-6 (:foreground chocolate-hue-8-2))
+ (cquery-sem-namespace-face-7 (:foreground chocolate-hue-8-3))
+ (cquery-sem-namespace-face-8 (:foreground chocolate-hue-8-4))
+ (cquery-sem-namespace-face-9 (:foreground chocolate-hue-8-5))
+
+ (cquery-sem-parameter-face-0 (:foreground chocolate-hue-9))
+ (cquery-sem-parameter-face-1 (:foreground chocolate-hue-9-2))
+ (cquery-sem-parameter-face-2 (:foreground chocolate-hue-9-3))
+ (cquery-sem-parameter-face-3 (:foreground chocolate-hue-9-4))
+ (cquery-sem-parameter-face-4 (:foreground chocolate-hue-9-5))
+ (cquery-sem-parameter-face-5 (:foreground chocolate-hue-9))
+ (cquery-sem-parameter-face-6 (:foreground chocolate-hue-9-2))
+ (cquery-sem-parameter-face-7 (:foreground chocolate-hue-9-3))
+ (cquery-sem-parameter-face-8 (:foreground chocolate-hue-9-4))
+ (cquery-sem-parameter-face-9 (:foreground chocolate-hue-9-5))
+
+ (lsp-face-highlight-textual (:background chocolate-syntax-light))
+
+ ;; MODE SUPPORT: ivy
+ (ivy-prompt-match (:inherit 'ivy-current-match))
+ (ivy-highlight-face (:inherit 'highlight))
+ (ivy-action (:inherit 'font-lock-builtin-face))
+ (ivy-virtual (:foreground chocolate-mono-1))
+ (ivy-remote (:foreground chocolate-syntax-renamed))
+ (ivy-modified-buffer (:inherit 'default))
+ (ivy-subdir (:inherit 'dired-directory))
+ (ivy-match-required-face (:foreground chocolate-syntax-accent :inherit 'minibuffer-prompt))
+ (ivy-confirm-face (:foreground chocolate-syntax-bg-dark :inherit 'minibuffer-prompt))
+ (ivy-minibuffer-match-face-4 (:foreground chocolate-hue-6-2 :inherit 'ivy-minibuffer-match-face-1))
+ (ivy-minibuffer-match-face-3 (:foreground chocolate-syntax-added :inherit 'ivy-minibuffer-match-face-1))
+ (ivy-minibuffer-match-face-2 (:foreground chocolate-hue-6 :inherit 'ivy-minibuffer-match-face-1))
+ (ivy-minibuffer-match-face-1 (:weight 'bold :foreground chocolate-mono-3 :background chocolate-syntax-bg-dark))
+ (ivy-minibuffer-match-highlight (:inherit 'highlight))
+ (ivy-current-match (:weight 'bold :background chocolate-mono-3))
+ (ivy-cursor (:foreground chocolate-hue-2 :background chocolate-syntax-bg-dark))
+
+ ;; MODE support: js2
+ (js2-function-param (:foreground chocolate-hue-1))
+ (js2-external-variable (:weight 'bold :foreground chocolate-hue-7))
+ (js2-function-call (:foreground chocolate-hue-6))
+
+ ;; MODE support: display-line-numbers
+ (line-number (:foreground chocolate-mono-3))
+ (line-number-current-line (:foreground chocolate-mono-2 :weight 'bold))
+
+ ;; MODE support: ediff
+ (ediff-current-diff-A (:background chocolate-darker-red))
+ (ediff-current-diff-Ancestor (:inherit 'ediff-current-diff-A))
+ (ediff-current-diff-B (:background chocolate-darker-green))
+ (ediff-current-diff-C (:background chocolate-darker-yellow))
+ (ediff-even-diff-A (:background chocolate-syntax-bg-light))
+ (ediff-even-diff-Ancestor (:inherit 'ediff-even-diff-A))
+ (ediff-even-diff-B (:background chocolate-syntax-bg-light))
+ (ediff-even-diff-C (:background chocolate-syntax-bg-light))
+ (ediff-fine-diff-A (:background chocolate-dark-red))
+ (ediff-fine-diff-Ancestor (:inherit 'ediff-fine-diff-A))
+ (ediff-fine-diff-B (:background chocolate-dark-green))
+ (ediff-fine-diff-C (:background chocolate-dark-yellow))
+ (ediff-odd-diff-A (:inherut 'ediff-even-diff-A))
+ (ediff-odd-diff-Ancestor (:inherit 'ediff-odd-diff-A))
+ (ediff-odd-diff-B (:inherit 'ediff-even-diff-B))
+ (ediff-odd-diff-C (:inherit 'ediff-even-diff-C))
+
+ ;; MODE SUPPORT: org
+ (org-table (:foreground chocolate-hue-1-5))
+ (org-date (:foreground chocolate-hue-1-3))
+ (org-done (:foreground chocolate-hue-9))
+ (org-agenda-done (:foreground chocolate-hue-9))
+ (org-headline-done (:foreground chocolate-hue-5-3))
+ (org-formula (:foreground chocolate-syntax-accent))
+ (org-document-title (:foreground chocolate-hue-1))
+ (org-document-info (:foreground chocolate-hue-1))
+ (org-agenda-structure (:foreground chocolate-hue-1-5))
+ (org-scheduled (:foreground chocolate-hue-9))
+ (org-scheduled-today (:foreground chocolate-hue-9))
+ (org-agenda-dimmed-todo-face (:foreground chocolate-mono-3))
+ (org-scheduled-previously (:foreground chocolate-syntax-accent))
+ (org-agenda-restriction-lock (:background chocolate-syntax-bg-dark))
+ (org-time-grid (:foreground chocolate-hue-7))
+
+ ;; MODE SUPPORT: popup
+ (popup-face (:foreground chocolate-hue-4
+ :background chocolate-syntax-light))
+ (popup-menu-mouse-face (:foreground chocolate-hue-4
+ :background chocolate-hue-1))
+ (popup-menu-selection-face (:foreground chocolate-hue-4
+ :background chocolate-hue-1))
+ (popup-tip-face (:foreground chocolate-hue-4
+ :background chocolate-syntax-bg-dark))
+ ;; Use tip colors for the pos-tip color vars (see below)
+
+ ;; MODE SUPPORT: powerline
+ (powerline-active1 (:background chocolate-syntax-light :foreground chocolate-hue-4 :inherit 'mode-line))
+ (powerline-active2 (:background chocolate-syntax-bg))
+ (powerline-inactive1 (:background chocolate-syntax-bg-dark :inherit 'mode-line-inactive))
+ (powerline-inactive2 (:background chocolate-syntax-bg-dark :inherit 'mode-line-inactive))
+ (spaceline-highlight-face (:background chocolate-hue-6 :foreground chocolate-syntax-bg-dark))
+
+ ;; MODE SUPPORT: centaur tabs
+ (centaur-tabs-default (:background chocolate-syntax-bg-dark :foreground chocolate-hue-4))
+ (centaur-tabs-selected (:background chocolate-syntax-bg :foreground chocolate-hue-4 :weight 'bold))
+ (centaur-tabs-unselected (:background chocolate-syntax-bg-dark :foreground chocolate-mono-3 :weight 'light))
+ (centaur-tabs-selected-modified (:background chocolate-syntax-bg :foreground chocolate-hue-6 :weight 'bold))
+ (centaur-tabs-unselected-modified (:background chocolate-syntax-bg-dark :foreground chocolate-hue-6-3 :weight 'light))
+ (centaur-tabs-active-bar-face (:background chocolate-hue-7))
+ (centaur-tabs-modified-marker-selected (:inherit 'centaur-tabs-selected-modified :foreground chocolate-hue-6-2))
+ (centaur-tabs-modified-marker-unselected (:inherit 'centaur-tabs-unselected-modified))
+
+ ;; MODE SUPPORT: latex
+ (font-latex-sectioning-5-face (:foreground chocolate-hue-6-2))
+ (font-latex-italic-face (:foreground chocolate-hue-9-5 :inherit 'italic))
+ (font-latex-bold-face (:foreground chocolate-hue-7 :inherit 'bold))
+
+ (ffap
+ (:inherit 'highlight))
+ (epa-field-body
+ (:slant 'italic :foreground chocolate-hue-1))
+ (epa-field-name
+ (:weight 'bold :foreground chocolate-hue-2))
+ (epa-mark
+ (:weight 'bold :foreground chocolate-syntax-accent))
+ (epa-string
+ (:foreground chocolate-hue-2))
+ (epa-validity-disabled
+ (:slant 'italic :inverse-video t))
+ (epa-validity-low
+ (:slant 'italic))
+ (epa-validity-medium
+ (:slant 'italic :foreground chocolate-hue-2))
+ (epa-validity-high
+ (:weight 'bold :foreground chocolate-hue-2))
+ (helm-bookmark-addressbook
+ (:foreground chocolate-syntax-removed))
+ (helm-bookmark-directory
+ (:inherit 'helm-ff-directory))
+ (helm-bookmark-file-not-found
+ (:foreground chocolate-mono-2))
+ (helm-bookmark-file
+ (:foreground chocolate-syntax-renamed))
+ (helm-bookmark-man
+ (:foreground chocolate-mono-3))
+ (helm-bookmark-gnus
+ (:foreground chocolate-hue-2))
+ (helm-bookmark-w3m
+ (:foreground chocolate-syntax-accent))
+ (helm-bookmark-info
+ (:foreground chocolate-syntax-added))
+ (bookmark-menu-heading
+ (:inherit 'font-lock-type-face))
+ (bookmark-menu-bookmark
+ (:weight 'bold))
+ (eshell-prompt
+ (:foreground chocolate-mono-1))
+ (eshell-ls-clutter
+ (:foreground chocolate-hue-5))
+ (eshell-ls-product
+ (:foreground chocolate-hue-6))
+ (eshell-ls-backup
+ (:foreground chocolate-hue-6-2))
+ (eshell-ls-archive
+ (:foreground chocolate-mono-1))
+ (eshell-ls-missing
+ (:foreground chocolate-hue-5))
+ (eshell-ls-special
+ (:foreground chocolate-mono-1))
+ (eshell-ls-unreadable
+ (:foreground chocolate-mono-3))
+ (eshell-ls-readonly
+ (:foreground chocolate-hue-6))
+ (eshell-ls-executable
+ (:foreground chocolate-syntax-added))
+ (eshell-ls-symlink
+ (:foreground chocolate-syntax-renamed))
+ (eshell-ls-directory
+ (:foreground chocolate-hue-1))
+ (nlinum-current-line
+ (:weight 'bold :foreground chocolate-hue-1))
+ (aw-mode-line-face
+ (:inherit 'mode-line-buffer-id))
+ (aw-background-face
+ (:foreground chocolate-mono-3))
+ (aw-leading-char-face
+ (:foreground chocolate-syntax-accent))
+ (avy-goto-char-timer-face
+ (:inherit 'highlight))
+ (avy-background-face
+ (:foreground chocolate-mono-3))
+ (avy-lead-face
+ (:foreground chocolate-syntax-bg-dark :background chocolate-hue-1))
+ (avy-lead-face-2
+ (:inherit 'avy-lead-face))
+ (avy-lead-face-1
+ (:inherit 'avy-lead-face))
+ (avy-lead-face-0
+ (:inherit 'avy-lead-face))
+ (helm-M-x-key
+ (:underline t :foreground chocolate-syntax-accent))
+ (helm-lisp-completion-info
+ (:foreground chocolate-syntax-accent))
+ (helm-lisp-show-completion
+ (:background chocolate-syntax-light))
+ (whitespace-space-after-tab
+ (:foreground chocolate-hue-5-2 :background chocolate-syntax-accent))
+ (whitespace-empty
+ (:background chocolate-syntax-bg))
+ (whitespace-big-indent
+ (:foreground chocolate-hue-5-2 :background chocolate-syntax-accent))
+ (whitespace-indentation
+ (:foreground chocolate-hue-5 :background chocolate-hue-6-2))
+ (whitespace-space-before-tab
+ (:foreground chocolate-hue-5-2 :background chocolate-syntax-accent))
+ (whitespace-line
+ (:weight 'bold :foreground chocolate-hue-5 :background chocolate-syntax-bg-dark))
+ (whitespace-trailing
+ (:inherit 'trailing-whitespace))
+ (whitespace-newline
+ (:foreground chocolate-syntax-light))
+ (whitespace-tab
+ (:foreground chocolate-syntax-light))
+ (whitespace-hspace
+ (:foreground chocolate-mono-1 :background chocolate-syntax-light))
+ (whitespace-space
+ (:foreground chocolate-syntax-light))
+ (custom-group-subtitle
+ (:weight 'bold))
+ (custom-group-tag
+ (:height 1.2 :weight 'bold :foreground chocolate-hue-2 :inherit 'variable-pitch))
+ (custom-group-tag-1
+ (:height 1.2 :weight 'bold :foreground chocolate-syntax-modified :inherit 'variable-pitch))
+ (custom-face-tag
+ (:inherit 'custom-variable-tag))
+ (custom-visibility
+ (:height 0.8 :inherit 'link))
+ (custom-variable-button
+ (:weight 'bold :underline t))
+ (custom-variable-tag
+ (:weight 'bold :foreground chocolate-hue-2))
+ (custom-comment-tag
+ (:foreground chocolate-mono-1))
+ (custom-comment
+ (:background chocolate-mono-3))
+ (custom-link
+ (:inherit 'link))
+ (custom-state
+ (:foreground chocolate-syntax-added))
+ (custom-documentation nil)
+ (custom-button-pressed-unraised
+ (:foreground chocolate-hue-2 :inherit 'custom-button-unraised))
+ (custom-button-pressed
+ (:box
+ (:line-width 2 :style 'pressed-button)
+ :foreground chocolate-syntax-bg-dark :background chocolate-hue-2))
+ (custom-button-unraised
+ (:inherit 'underline))
+ (custom-button-mouse
+ (:box
+ (:line-width 2 :style 'released-button)
+ :foreground chocolate-syntax-bg-dark :background chocolate-hue-2))
+ (custom-button
+ (:box
+ (:line-width 2 :style 'released-button)
+ :foreground chocolate-syntax-bg-dark :background chocolate-hue-2))
+ (custom-saved
+ (:underline t))
+ (custom-themed
+ (:foreground chocolate-hue-2 :background chocolate-syntax-renamed))
+ (custom-changed
+ (:foreground chocolate-hue-2 :background chocolate-syntax-renamed))
+ (custom-set
+ (:foreground chocolate-syntax-renamed :background chocolate-hue-2))
+ (custom-modified
+ (:foreground chocolate-hue-2 :background chocolate-syntax-renamed))
+ (custom-rogue
+ (:foreground chocolate-syntax-modified :background chocolate-syntax-bg-dark))
+ (custom-invalid
+ (:foreground chocolate-syntax-accent :background chocolate-syntax-accent))
+ (memrise-session-keybinding
+ (:weight 'bold))
+ (memrise-session-literal-translation
+ (:inherit 'memrise-dashboard-description))
+ (memrise-session-keyword
+ (:weight 'bold))
+ (memrise-session-thing
+ (:height 270))
+ (memrise-dashboard-description
+ (:height 125 :inherit 'font-lock-comment-face))
+ (memrise-dashboard-difficult
+ (:foreground chocolate-syntax-accent))
+ (memrise-dashboard-review
+ (:foreground chocolate-syntax-renamed))
+ (memrise-dashboard-all
+ (:inherit 'memrise-dashboard-learned))
+ (memrise-dashboard-learned
+ (:foreground chocolate-mono-3))
+ (memrise-dashboard-name
+ (:inherit 'font-lock-keyword-face))
+ (paradox-description-face-multiline
+ (:inherit 'font-lock-doc-face))
+ (paradox-description-face
+ (:inherit 'default))
+ (paradox-download-face
+ (:inherit 'font-lock-keyword-face))
+ (paradox-starred-face
+ (:inherit 'font-lock-variable-name-face))
+ (paradox-star-face
+ (:inherit 'font-lock-string-face))
+ (paradox-archive-face
+ (:inherit 'paradox-comment-face))
+ (paradox-homepage-button-face
+ (:underline t :inherit 'font-lock-comment-face))
+ (paradox-name-face
+ (:inherit 'link))
+ (paradox-mode-line-face
+ (:weight 'normal :inherit
+ ('font-lock-keyword-face 'mode-line-buffer-id)))
+ (paradox-commit-tag-face
+ (:box 1 :foreground chocolate-hue-3 :background chocolate-hue-2))
+ (paradox-highlight-face
+ (:weight 'bold :inherit 'font-lock-variable-name-face))
+ (paradox-comment-face
+ (:foreground chocolate-mono-2))
+ (emms-metaplaylist-mode-current-face
+ (:foreground chocolate-hue-3))
+ (emms-metaplaylist-mode-face
+ (:foreground chocolate-mono-1))
+ (emms-browser-track-face
+ (:height 1.0 :foreground chocolate-mono-1))
+ (emms-browser-album-face
+ (:height 1.1 :foreground chocolate-mono-1))
+ (emms-browser-performer-face
+ (:height 1.3 :foreground chocolate-mono-1))
+ (emms-browser-composer-face
+ (:height 1.3 :foreground chocolate-mono-1))
+ (emms-browser-artist-face
+ (:height 1.3 :foreground chocolate-mono-1))
+ (emms-browser-year/genre-face
+ (:height 1.5 :foreground chocolate-mono-1))
+ (emms-stream-url-face
+ (:foreground chocolate-mono-1))
+ (emms-stream-name-face
+ (:weight 'bold))
+ (emms-playlist-selected-face
+ (:foreground chocolate-hue-1))
+ (emms-playlist-track-face
+ (:foreground chocolate-mono-2))
+ (writegood-duplicates-face
+ (:underline
+ (:style 'wave :color chocolate-hue-5)))
+ (writegood-passive-voice-face
+ (:underline
+ (:style 'wave :color chocolate-syntax-renamed)))
+ (writegood-weasels-face
+ (:underline
+ (:style 'wave :color chocolate-syntax-accent)))
+ (haskell-quasi-quote-face
+ (:inherit 'font-lock-string-face))
+ (haskell-definition-face
+ (:inherit 'font-lock-function-name-face))
+ (flymake-warnline
+ (:underline
+ (:style 'wave :color chocolate-hue-6)
+ :background chocolate-syntax-bg))
+ (flymake-errline
+ (:underline
+ (:style 'wave :color chocolate-hue-5)
+ :background chocolate-syntax-bg))
+ (jedi:highlight-function-argument
+ (:inherit 'bold))
+ (epc:face-title
+ (:weight 'bold :foreground chocolate-hue-5))
+ (ctbl:face-continue-bar
+ (:background chocolate-syntax-light))
+ (ctbl:face-cell-select
+ (:background chocolate-syntax-renamed))
+ (ctbl:face-row-select
+ (:background chocolate-syntax-bg-dark))
+ (ido-incomplete-regexp
+ (:inherit 'font-lock-warning-face))
+ (ido-indicator
+ (:foreground chocolate-hue-5 :background chocolate-syntax-bg))
+ (ido-virtual
+ (:foreground chocolate-mono-3))
+ (ido-subdir
+ (:foreground chocolate-mono-1))
+ (ido-only-match
+ (:foreground chocolate-syntax-added))
+ (ido-first-match
+ (:foreground chocolate-hue-6))
+ (ac-selection-face
+ (:inherit 'popup-menu-selection-face))
+ (ac-candidate-mouse-face
+ (:inherit 'popup-menu-mouse-face))
+ (ac-candidate-face
+ (:inherit 'popup-face))
+ (ac-completion-face
+ (:underline t :foreground chocolate-mono-1))
+ (c-annotation-face
+ (:inherit 'font-lock-constant-face))
+ (company-template-field
+ (:inherit 'match))
+ (flycheck-error-list-highlight
+ (:inherit 'highlight))
+ (flycheck-error-list-checker-name
+ (:inherit 'font-lock-function-name-face))
+ (flycheck-error-list-id-with-explainer
+ (:box
+ (:style 'released-button)
+ :inherit 'flycheck-error-list-id))
+ (flycheck-error-list-id
+ (:inherit 'font-lock-type-face))
+ (flycheck-error-list-filename
+ (:inherit 'font-lock-variable-name-face))
+ (flycheck-error-list-column-number
+ (:inherit 'font-lock-constant-face))
+ (flycheck-error-list-line-number
+ (:inherit 'font-lock-constant-face))
+ (flycheck-error-list-info
+ (:inherit 'success))
+ (flycheck-error-list-warning
+ (:inherit 'warning))
+ (flycheck-error-list-error
+ (:inherit 'error))
+ (flycheck-fringe-info
+ (:inherit 'success))
+ (flycheck-fringe-warning
+ (:inherit 'warning))
+ (flycheck-fringe-error
+ (:inherit 'error))
+ (flycheck-info
+ (:underline
+ (:style 'wave :color chocolate-syntax-added)))
+ (flycheck-warning
+ (:underline
+ (:style 'wave :color chocolate-hue-6-2)))
+ (flycheck-error
+ (:underline
+ (:style 'wave :color chocolate-hue-5)))
+ (term-color-white
+ (:foreground chocolate-hue-2 :background chocolate-hue-2))
+ (term-color-cyan
+ (:foreground chocolate-syntax-renamed :background chocolate-syntax-renamed))
+ (term-color-magenta
+ (:foreground chocolate-mono-1 :background chocolate-mono-1))
+ (term-color-blue
+ (:foreground chocolate-hue-1 :background chocolate-hue-1))
+ (term-color-yellow
+ (:foreground chocolate-hue-6-2 :background chocolate-hue-6-2))
+ (term-color-green
+ (:foreground chocolate-syntax-added :background chocolate-syntax-added))
+ (term-color-red
+ (:foreground chocolate-hue-5 :background chocolate-hue-5))
+ (term-color-black
+ (:foreground chocolate-syntax-bg-dark :background chocolate-syntax-bg-dark))
+ (term-underline
+ (:underline t))
+ (term-bold
+ (:inherit 'bold))
+ (term
+ (:inherit 'default))
+ (popup-menu-summary-face
+ (:inherit 'popup-summary-face))
+ (popup-menu-face
+ (:inherit 'popup-face))
+ (popup-isearch-match
+ (:background chocolate-hue-1 :inherit 'default))
+ (popup-scroll-bar-background-face
+ (:background chocolate-mono-1))
+ (popup-scroll-bar-foreground-face
+ (:background chocolate-syntax-bg-dark))
+ (popup-summary-face
+ (:foreground chocolate-mono-3 :inherit 'popup-face))
+ (helm-history-remote
+ (:foreground chocolate-hue-5))
+ (helm-history-deleted
+ (:inherit 'helm-ff-invalid-symlink))
+ (helm-ff-dirs
+ (:inherit 'font-lock-function-name-face))
+ (helm-ff-file
+ (:foreground chocolate-mono-1))
+ (helm-ff-invalid-symlink
+ (:foreground chocolate-syntax-bg-dark :background chocolate-syntax-accent))
+ (helm-ff-symlink
+ (:inherit 'font-lock-comment-face))
+ (helm-ff-dotted-symlink-directory
+ (:foreground chocolate-syntax-accent :background chocolate-mono-3))
+ (helm-ff-dotted-directory
+ (:foreground chocolate-syntax-light))
+ (helm-ff-directory
+ (:foreground chocolate-hue-2))
+ (helm-ff-executable
+ (:foreground chocolate-hue-2 :inherit 'italic))
+ (helm-ff-prefix
+ (:foreground chocolate-hue-1))
+ (helm-non-file-buffer
+ (:inherit 'italic))
+ (helm-buffer-archive
+ (:foreground chocolate-syntax-accent))
+ (helm-buffer-file
+ (:inherit 'font-lock-builtin-face))
+ (helm-buffer-directory
+ (:foreground chocolate-syntax-bg-dark :background chocolate-hue-2))
+ (helm-buffer-process
+ (:foreground chocolate-hue-3))
+ (helm-buffer-size
+ (:foreground chocolate-hue-4))
+ (helm-buffer-modified
+ (:inherit 'font-lock-comment-face))
+ (helm-buffer-not-saved
+ (:foreground chocolate-hue-5))
+ (helm-buffer-saved-out
+ (:foreground chocolate-syntax-accent :background chocolate-syntax-bg-dark))
+ (helm-etags-file
+ (:underline t :foreground chocolate-hue-4-2))
+ (helm-locate-finish
+ (:foreground chocolate-syntax-added))
+ (helm-grep-cmd-line
+ (:inherit 'font-lock-type-face))
+ (helm-grep-finish
+ (:foreground chocolate-syntax-added))
+ (helm-grep-lineno
+ (:foreground chocolate-mono-3))
+ (helm-grep-file
+ (:foreground chocolate-mono-1))
+ (helm-grep-match
+ (:foreground chocolate-hue-1))
+ (helm-resume-need-update
+ (:background chocolate-syntax-accent))
+ (helm-moccur-buffer
+ (:underline t :foreground chocolate-hue-1))
+ (helm-match-item
+ (:inherit 'isearch))
+ (helm-selection-line
+ (:inherit 'highlight))
+ (helm-helper
+ (:inherit 'helm-header))
+ (helm-header-line-left-margin
+ (:foreground chocolate-syntax-bg-dark :background chocolate-syntax-accent))
+ (helm-match
+ (:underline t :foreground chocolate-hue-1))
+ (helm-prefarg
+ (:foreground chocolate-syntax-added))
+ (helm-action
+ (:underline t))
+ (helm-separator
+ (:foreground chocolate-syntax-accent))
+ (helm-selection
+ (:background chocolate-mono-3 :inherit 'bold))
+ (helm-candidate-number-suspended
+ (:inverse-video t :inherit 'helm-candidate-number))
+ (helm-candidate-number
+ (:foreground chocolate-syntax-bg-dark :background chocolate-syntax-accent))
+ (helm-header
+ (:inherit 'header-line))
+ (helm-visible-mark
+ (:inherit
+ ('bold 'highlight)))
+ (helm-source-header
+ (:foreground chocolate-mono-3 :background chocolate-syntax-bg))
+ (compilation-column-number
+ (:inherit 'font-lock-doc-face))
+ (compilation-line-number
+ (:inherit 'font-lock-keyword-face))
+ (compilation-mode-line-exit
+ (:weight 'bold :foreground chocolate-syntax-bg-dark :inherit 'compilation-info))
+ (compilation-mode-line-run
+ (:inherit 'compilation-warning))
+ (compilation-mode-line-fail
+ (:weight 'bold :foreground chocolate-syntax-accent :inherit 'compilation-error))
+ (compilation-info
+ (:inherit 'success))
+ (compilation-warning
+ (:inherit 'warning))
+ (compilation-error
+ (:inherit 'error))
+ (rainbow-delimiters-mismatched-face
+ (:inherit 'rainbow-delimiters-unmatched-face))
+ (rainbow-delimiters-base-face nil)
+ (yas--field-debug-face nil)
+ (yas-field-highlight-face
+ (:inherit 'match))
+ (magithub-edit-title
+ (:inherit 'markdown-header-face-1))
+ (magithub-deleted-thing
+ (:background chocolate-syntax-bg-dark :inherit 'magit-section-highlight))
+ (magithub-notification-reason
+ (:inherit 'magit-dimmed))
+ (magithub-label
+ (:box 1))
+ (magithub-ci-unknown
+ (:inherit 'magit-signature-untrusted))
+ (magithub-ci-failure
+ (:inherit 'error))
+ (magithub-ci-success
+ (:inherit 'success))
+ (magithub-ci-pending
+ (:inherit 'magit-signature-untrusted))
+ (magithub-ci-error
+ (:inherit 'magit-signature-untrusted))
+ (magithub-ci-no-status
+ (:inherit 'magit-dimmed))
+ (magithub-user
+ (:inherit 'magit-log-author))
+ (magithub-issue-title-with-note
+ (:inherit
+ ('git-commit-summary)))
+ (magithub-issue-title-edit
+ (:inherit
+ ('git-commit-summary)))
+ (magithub-issue-number
+ (:inherit 'magit-dimmed))
+ (magithub-issue-title nil)
+ (magithub-repo
+ (:inherit 'magit-branch-remote))
+ (widget-button-pressed
+ (:foreground chocolate-syntax-accent))
+ (widget-inactive
+ (:inherit 'shadow))
+ (widget-single-line-field
+ (:background chocolate-mono-3))
+ (widget-field
+ (:background chocolate-mono-3))
+ (widget-button
+ (:weight 'bold))
+ (widget-documentation
+ (:foreground chocolate-syntax-added))
+ (markdown-header-face-6
+ (:inherit 'markdown-header-face))
+ (markdown-header-face-5
+ (:inherit 'markdown-header-face))
+ (markdown-header-face-4
+ (:inherit 'markdown-header-face))
+ (markdown-header-face-3
+ (:inherit 'markdown-header-face))
+ (markdown-header-face-2
+ (:inherit 'markdown-header-face))
+ (markdown-header-face-1
+ (:inherit 'markdown-header-face))
+ (markdown-header-face
+ (:foreground chocolate-hue-5 :inherit 'bold))
+ (markdown-html-entity-face
+ (:inherit 'font-lock-variable-name-face))
+ (markdown-html-attr-value-face
+ (:inherit 'font-lock-string-face))
+ (markdown-html-attr-name-face
+ (:inherit 'font-lock-variable-name-face))
+ (markdown-html-tag-delimiter-face
+ (:inherit 'markdown-markup-face))
+ (markdown-html-tag-name-face
+ (:inherit 'font-lock-type-face))
+ (markdown-hr-face
+ (:inherit 'markdown-markup-face))
+ (markdown-highlight-face
+ (:inherit 'highlight))
+ (markdown-gfm-checkbox-face
+ (:inherit 'font-lock-builtin-face))
+ (markdown-metadata-value-face
+ (:inherit 'font-lock-string-face))
+ (markdown-metadata-key-face
+ (:foreground chocolate-hue-5))
+ (markdown-math-face
+ (:inherit 'font-lock-string-face))
+ (markdown-comment-face
+ (:inherit 'font-lock-comment-face))
+ (markdown-line-break-face
+ (:underline t :inherit 'font-lock-constant-face))
+ (markdown-link-title-face
+ (:inherit 'font-lock-comment-face))
+ (markdown-plain-url-face
+ (:inherit 'markdown-link-face))
+ (markdown-url-face
+ (:weight 'normal :foreground chocolate-mono-1))
+ (markdown-footnote-text-face
+ (:inherit 'font-lock-comment-face))
+ (markdown-footnote-marker-face
+ (:inherit 'markdown-markup-face))
+ (markdown-reference-face
+ (:inherit 'markdown-markup-face))
+ (markdown-missing-link-face
+ (:inherit 'font-lock-warning-face))
+ (markdown-link-face
+ (:foreground chocolate-hue-1 :inherit 'bold))
+ (markdown-language-info-face
+ (:inherit 'font-lock-string-face))
+ (markdown-language-keyword-face
+ (:inherit 'font-lock-type-face))
+ (markdown-table-face
+ (:inherit
+ ('markdown-code-face)))
+ (markdown-pre-face
+ (:foreground chocolate-syntax-added))
+ (markdown-inline-code-face
+ (:inherit
+ ('markdown-code-face 'markdown-pre-face)))
+ (markdown-code-face
+ (:background chocolate-syntax-bg))
+ (markdown-blockquote-face
+ (:foreground chocolate-mono-2 :inherit 'italic))
+ (markdown-list-face
+ (:foreground chocolate-hue-5))
+ (markdown-header-delimiter-face
+ (:inherit 'markdown-header-face))
+ (markdown-header-rule-face
+ (:inherit 'markdown-markup-face))
+ (markdown-markup-face
+ (:foreground chocolate-mono-1))
+ (markdown-strike-through-face
+ (:strike-through t))
+ (markdown-bold-face
+ (:foreground chocolate-hue-6 :inherit 'bold))
+ (markdown-italic-face
+ (:foreground chocolate-mono-1 :inherit 'italic))
+ (outline-8
+ (:inherit 'font-lock-string-face))
+ (outline-7
+ (:inherit 'font-lock-builtin-face))
+ (outline-6
+ (:inherit 'font-lock-constant-face))
+ (outline-5
+ (:inherit 'font-lock-type-face))
+ (outline-4
+ (:inherit 'font-lock-comment-face))
+ (outline-3
+ (:inherit 'font-lock-keyword-face))
+ (outline-2
+ (:inherit 'font-lock-variable-name-face))
+ (outline-1
+ (:inherit 'font-lock-function-name-face))
+ (magit-blame-date
+ (:foreground chocolate-hue-5))
+ (magit-blame-name
+ (:inherit 'magit-blame-heading))
+ (magit-blame-hash
+ (:inherit 'magit-blame-heading))
+ (magit-blame-summary
+ (:inherit 'magit-blame-heading))
+ (magit-blame-heading
+ (:foreground chocolate-hue-6 :background chocolate-syntax-bg))
+ (magit-bisect-bad
+ (:foreground chocolate-hue-5))
+ (magit-bisect-skip
+ (:foreground chocolate-hue-6))
+ (magit-bisect-good
+ (:foreground chocolate-syntax-added))
+ (magit-sequence-exec
+ (:inherit 'magit-hash))
+ (magit-sequence-onto
+ (:inherit 'magit-sequence-done))
+ (magit-sequence-done
+ (:inherit 'magit-hash))
+ (magit-sequence-drop
+ (:foreground chocolate-hue-5))
+ (magit-sequence-head
+ (:foreground chocolate-hue-1))
+ (magit-sequence-part
+ (:foreground chocolate-hue-6))
+ (magit-sequence-stop
+ (:foreground chocolate-syntax-added))
+ (magit-sequence-pick
+ (:inherit 'default))
+ (magit-filename
+ (:foreground chocolate-mono-1))
+ (magit-cherry-equivalent
+ (:foreground chocolate-mono-1))
+ (magit-cherry-unmatched
+ (:foreground chocolate-syntax-renamed))
+ (magit-signature-error
+ (:inherit 'error))
+ (magit-signature-revoked
+ (:foreground chocolate-mono-1))
+ (magit-signature-expired-key
+ (:inherit 'magit-signature-expired))
+ (magit-signature-expired
+ (:foreground chocolate-hue-6))
+ (magit-signature-untrusted
+ (:foreground chocolate-syntax-renamed))
+ (magit-signature-bad
+ (:inherit 'error))
+ (magit-signature-good
+ (:inherit 'success))
+ (magit-keyword
+ (:inherit 'font-lock-string-face))
+ (magit-refname-wip
+ (:inherit 'magit-refname))
+ (magit-refname-stash
+ (:inherit 'magit-refname))
+ (magit-refname
+ (:foreground chocolate-mono-3))
+ (magit-head
+ (:inherit 'magit-branch-local))
+ (magit-branch-current
+ (:foreground chocolate-hue-1))
+ (magit-branch-local
+ (:foreground chocolate-syntax-renamed))
+ (magit-branch-remote-head
+ (:box 1 :inherit 'magit-branch-remote))
+ (magit-branch-remote
+ (:foreground chocolate-syntax-added))
+ (magit-tag
+ (:foreground chocolate-hue-6-2))
+ (magit-hash
+ (:foreground chocolate-mono-3))
+ (magit-dimmed
+ (:foreground chocolate-mono-3))
+ (magit-header-line-key
+ (:inherit 'magit-popup-key))
+ (magit-header-line
+ (:weight 'bold :box
+ (:line-width 3 :color chocolate-mono-3)
+ :foreground chocolate-hue-2 :background chocolate-mono-3))
+ (magit-reflog-other
+ (:foreground chocolate-syntax-renamed))
+ (magit-reflog-remote
+ (:foreground chocolate-syntax-renamed))
+ (magit-reflog-cherry-pick
+ (:foreground chocolate-syntax-added))
+ (magit-reflog-rebase
+ (:foreground chocolate-mono-1))
+ (magit-reflog-reset
+ (:inherit 'error))
+ (magit-reflog-checkout
+ (:foreground chocolate-hue-1))
+ (magit-reflog-merge
+ (:foreground chocolate-syntax-added))
+ (magit-reflog-amend
+ (:foreground chocolate-mono-1))
+ (magit-reflog-commit
+ (:foreground chocolate-syntax-added))
+ (magit-header-line-log-select
+ (:inherit 'bold))
+ (magit-log-date
+ (:foreground chocolate-hue-1))
+ (magit-log-author
+ (:foreground chocolate-hue-6))
+ (magit-log-graph
+ (:foreground chocolate-mono-3))
+ (magit-diffstat-removed
+ (:foreground chocolate-syntax-removed))
+ (magit-diffstat-added
+ (:foreground chocolate-syntax-added))
+ (magit-diff-whitespace-warning
+ (:inherit 'trailing-whitespace))
+ (magit-diff-context-highlight
+ (:foreground chocolate-mono-1 :background chocolate-syntax-bg))
+ (magit-diff-their-highlight
+ (:inherit 'magit-diff-added-highlight))
+ (magit-diff-base-highlight
+ (:weight 'bold :foreground chocolate-hue-6 :background chocolate-syntax-light))
+ (magit-diff-our-highlight
+ (:inherit 'magit-diff-removed-highlight))
+ (magit-diff-removed-highlight
+ (:weight 'bold :foreground chocolate-syntax-removed :background chocolate-syntax-bg))
+ (magit-diff-added-highlight
+ (:weight 'bold :foreground chocolate-syntax-added :background chocolate-syntax-light))
+ (magit-diff-context
+ (:foreground chocolate-mono-3 :background chocolate-syntax-bg))
+ (magit-diff-their
+ (:inherit 'magit-diff-added))
+ (magit-diff-base
+ (:foreground chocolate-hue-5-2 :background chocolate-syntax-bg))
+ (magit-diff-our
+ (:inherit 'magit-diff-removed))
+ (magit-diff-removed
+ (:foreground chocolate-hue-5-2 :background chocolate-syntax-bg))
+ (magit-diff-added
+ (:foreground chocolate-hue-9-5 :background chocolate-syntax-bg))
+ (magit-diff-conflict-heading
+ (:inherit 'magit-diff-hunk-heading))
+ (magit-diff-lines-boundary
+ (:inherit 'magit-diff-lines-heading))
+ (magit-diff-lines-heading
+ (:foreground chocolate-hue-6-2 :background chocolate-hue-5))
+ (magit-diff-hunk-region
+ (:inherit 'bold))
+ (magit-diff-hunk-heading-selection
+ (:foreground chocolate-hue-6 :inherit 'magit-diff-hunk-heading-highlight))
+ (magit-diff-hunk-heading-highlight
+ (:weight 'bold :foreground chocolate-syntax-bg :background chocolate-mono-1))
+ (magit-diff-hunk-heading
+ (:foreground chocolate-syntax-bg :background chocolate-syntax-light))
+ (magit-diff-file-heading-selection
+ (:weight 'bold :foreground chocolate-mono-1 :background chocolate-mono-3))
+ (magit-diff-file-heading-highlight
+ (:inherit
+ ('magit-section-highlight)))
+ (magit-diff-file-heading
+ (:weight 'bold :foreground chocolate-mono-1))
+ (smerge-refined-added
+ (:background chocolate-syntax-bg-dark :inherit 'smerge-refined-change))
+ (smerge-refined-removed
+ (:background chocolate-hue-5-2 :inherit 'smerge-refined-change))
+ (smerge-refined-changed nil)
+ (smerge-markers
+ (:background chocolate-syntax-light))
+ (smerge-base
+ (:background chocolate-hue-4-2))
+ (smerge-other
+ (:background chocolate-syntax-bg))
+ (smerge-mine
+ (:background chocolate-syntax-light))
+ (diff-refine-added
+ (:inverse-video t :inherit 'diff-added))
+ (diff-refine-removed
+ (:inverse-video t :inherit 'diff-removed))
+ (diff-refine-changed
+ (:inverse-video t :inherit 'diff-changed))
+ (diff-nonexistent
+ (:inherit 'diff-file-header))
+ (diff-context
+ (:foreground chocolate-hue-2))
+ (diff-function
+ (:inherit 'diff-header))
+ (diff-indicator-changed
+ (:inherit 'diff-changed))
+ (diff-indicator-added
+ (:inherit 'diff-added))
+ (diff-indicator-removed
+ (:inherit 'diff-removed))
+ (diff-changed
+ (:foreground chocolate-mono-1))
+ (diff-added
+ (:foreground chocolate-syntax-added :inherit 'hl-line))
+ (diff-removed
+ (:foreground chocolate-hue-5 :background chocolate-syntax-bg))
+ (diff-hunk-header
+ (:foreground chocolate-mono-1))
+ (diff-index
+ (:inherit 'diff-file-header))
+ (diff-file-header
+ (:foreground chocolate-hue-1))
+ (diff-header
+ (:foreground chocolate-syntax-renamed))
+ (magit-mode-line-process-error
+ (:inherit 'error))
+ (magit-mode-line-process
+ (:inherit 'mode-line-emphasis))
+ (magit-process-ng
+ (:inherit 'error))
+ (magit-process-ok
+ (:inherit 'success))
+ (git-commit-comment-action
+ (:inherit 'bold))
+ (git-commit-comment-file
+ (:inherit 'git-commit-pseudo-header))
+ (git-commit-comment-heading
+ (:inherit 'git-commit-known-pseudo-header))
+ (git-commit-comment-detached
+ (:inherit 'git-commit-comment-branch-local))
+ (git-commit-comment-branch-remote
+ (:inherit 'font-lock-variable-name-face))
+ (git-commit-comment-branch-local
+ (:inherit 'font-lock-variable-name-face))
+ (git-commit-known-pseudo-header
+ (:inherit 'font-lock-keyword-face))
+ (git-commit-pseudo-header
+ (:inherit 'font-lock-string-face))
+ (git-commit-note
+ (:inherit 'font-lock-string-face))
+ (git-commit-nonempty-second-line
+ (:inherit 'font-lock-warning-face))
+ (git-commit-overlong-summary
+ (:inherit 'font-lock-warning-face))
+ (git-commit-summary
+ (:inherit 'font-lock-type-face))
+ (magit-section-heading-selection
+ (:weight 'bold :foreground chocolate-hue-6))
+ (magit-section-secondary-heading
+ (:weight 'bold :foreground chocolate-mono-1))
+ (magit-section-heading
+ (:weight 'bold :foreground chocolate-hue-1))
+ (magit-section-highlight
+ (:background chocolate-syntax-bg-light))
+ (magit-popup-option-value
+ (:inherit 'font-lock-string-face))
+ (magit-popup-disabled-argument
+ (:inherit 'shadow))
+ (magit-popup-argument
+ (:inherit 'font-lock-warning-face))
+ (magit-popup-key
+ (:inherit 'font-lock-builtin-face))
+ (magit-popup-heading
+ (:inherit 'font-lock-keyword-face))
+ (log-edit-unknown-header
+ (:inherit 'font-lock-comment-face))
+ (log-edit-header
+ (:inherit 'font-lock-keyword-face))
+ (log-edit-summary
+ (:inherit 'font-lock-function-name-face))
+ (message-mml
+ (:foreground chocolate-syntax-added))
+ (message-cited-text
+ (:foreground chocolate-mono-1))
+ (message-separator
+ (:foreground chocolate-hue-2))
+ (message-header-xheader
+ (:foreground chocolate-syntax-renamed))
+ (message-header-name
+ (:foreground chocolate-syntax-added))
+ (message-header-other
+ (:foreground chocolate-hue-5))
+ (message-header-newsgroups
+ (:weight 'bold :slant 'italic :foreground chocolate-syntax-accent))
+ (message-header-subject
+ (:foreground chocolate-hue-6))
+ (message-header-cc
+ (:weight 'bold :foreground chocolate-syntax-added))
+ (message-header-to
+ (:weight 'bold :foreground chocolate-hue-6-2))
+ (dired-ignored
+ (:foreground chocolate-mono-3))
+ (dired-symlink
+ (:inherit 'font-lock-keyword-face))
+ (dired-directory
+ (:foreground chocolate-mono-1))
+ (dired-perm-write
+ (:inherit 'font-lock-comment-delimiter-face))
+ (dired-warning
+ (:inherit 'font-lock-warning-face))
+ (dired-flagged
+ (:inherit 'error))
+ (dired-marked
+ (:inherit 'warning))
+ (dired-mark
+ (:inherit 'font-lock-constant-face))
+ (dired-header
+ (:inherit 'font-lock-type-face))
+ (mm-command-output
+ (:foreground chocolate-syntax-bg-dark))
+ (change-log-acknowledgment
+ (:inherit 'font-lock-comment-face))
+ (change-log-function
+ (:inherit 'font-lock-variable-name-face))
+ (change-log-conditionals
+ (:inherit 'font-lock-variable-name-face))
+ (change-log-list
+ (:inherit 'font-lock-keyword-face))
+ (change-log-file
+ (:inherit 'font-lock-function-name-face))
+ (change-log-email
+ (:inherit 'font-lock-variable-name-face))
+ (change-log-name
+ (:inherit 'font-lock-constant-face))
+ (change-log-date
+ (:inherit 'font-lock-string-face))
+ (comint-highlight-prompt
+ (:inherit 'minibuffer-prompt))
+ (comint-highlight-input
+ (:weight 'bold))
+ (company-echo-common
+ (:foreground chocolate-hue-3))
+ (company-echo nil)
+ (company-preview-search
+ (:inherit 'company-tooltip-search))
+ (company-preview-common
+ (:foreground chocolate-mono-1 :background chocolate-syntax-bg))
+ (company-preview
+ (:foreground chocolate-hue-1))
+ (company-scrollbar-bg
+ (:inherit 'tooltip))
+ (company-scrollbar-fg
+ (:background chocolate-hue-1))
+ (company-tooltip-annotation-selection
+ (:inherit 'company-tooltip-annotation))
+ (company-tooltip-annotation
+ (:foreground chocolate-mono-1))
+ (company-tooltip-common-selection
+ (:inherit 'company-tooltip-common))
+ (company-tooltip-common
+ (:foreground chocolate-hue-1))
+ (company-tooltip-mouse
+ (:foreground chocolate-syntax-bg :background chocolate-mono-1))
+ (company-tooltip-search-selection
+ (:inherit 'highlight))
+ (company-tooltip-search
+ (:foreground chocolate-syntax-bg :background chocolate-hue-1))
+ (company-tooltip-selection
+ (:background chocolate-mono-3))
+ (company-tooltip
+ (:inherit 'tooltip))
+ (hydra-face-teal
+ (:weight 'bold :foreground chocolate-hue-1))
+ (hydra-face-pink
+ (:weight 'bold :foreground chocolate-mono-1))
+ (hydra-face-amaranth
+ (:weight 'bold :foreground chocolate-mono-1))
+ (hydra-face-blue
+ (:weight 'bold :foreground chocolate-hue-1))
+ (hydra-face-red
+ (:weight 'bold :foreground chocolate-hue-5))
+ (lv-separator
+ (:background chocolate-syntax-light))
+ (origami-fold-replacement-face
+ (:inherit
+ ('quote 'font-lock-comment-face)))
+ (origami-fold-fringe-face nil)
+ (origami-fold-header-face
+ (:box
+ (:line-width 1 :color chocolate-hue-1)
+ :background chocolate-hue-1))
+ (mc/region-face
+ (:inherit 'region))
+ (mc/cursor-bar-face
+ (:height 1 :background chocolate-hue-1))
+ (mc/cursor-face
+ (:inherit 'cursor))
+ (rectangle-preview
+ (:inherit 'region))
+ (highlight-leading-spaces
+ (:inherit 'font-lock-comment-face))
+ (spaceline-all-the-icons-sunset-face
+ (:foreground chocolate-syntax-accent :inherit 'powerline-active2))
+ (spaceline-all-the-icons-sunrise-face
+ (:foreground chocolate-hue-6-2 :inherit 'powerline-active2))
+ (spaceline-all-the-icons-info-face
+ (:foreground chocolate-syntax-renamed))
+ (spaceline-python-venv
+ (:foreground chocolate-hue-2))
+ (spaceline-flycheck-info
+ (:foreground chocolate-hue-2))
+ (spaceline-flycheck-warning
+ (:foreground chocolate-syntax-modified))
+ (spaceline-flycheck-error
+ (:foreground chocolate-hue-5))
+ (spaceline-read-only
+ (:foreground chocolate-syntax-light :background chocolate-mono-1 :inherit
+ ('quote 'mode-line)))
+ (spaceline-modified
+ (:foreground chocolate-syntax-light :background chocolate-hue-1 :inherit
+ ('quote 'mode-line)))
+ (spaceline-unmodified
+ (:foreground chocolate-syntax-light :background chocolate-syntax-accent :inherit
+ ('quote 'mode-line)))
+ (spaceline-evil-motion
+ (:foreground chocolate-syntax-light :background chocolate-mono-1 :inherit
+ ('quote 'mode-line)))
+ (spaceline-evil-visual
+ (:foreground chocolate-syntax-light :background chocolate-mono-1 :inherit
+ ('quote 'mode-line)))
+ (spaceline-evil-replace
+ (:foreground chocolate-syntax-light :background chocolate-hue-3 :inherit
+ ('quote 'mode-line)))
+ (spaceline-evil-emacs
+ (:foreground chocolate-syntax-light :background chocolate-hue-1 :inherit
+ ('quote 'mode-line)))
+ (spaceline-evil-insert
+ (:foreground chocolate-syntax-light :background chocolate-syntax-added :inherit
+ ('quote 'mode-line)))
+ (spaceline-evil-normal
+ (:foreground chocolate-syntax-light :background chocolate-syntax-accent :inherit
+ ('quote 'mode-line)))
+ (mode-line-buffer-id-inactive
+ (:inherit 'mode-line-buffer-id))
+ (powerline-inactive0
+ (:inherit 'mode-line-inactive))
+ (powerline-active0
+ (:inherit 'mode-line))
+ (doom-modeline-error
+ (:foreground chocolate-syntax-bg-dark :background chocolate-hue-5-2))
+ (all-the-icons-dsilver
+ (:foreground chocolate-mono-2))
+ (all-the-icons-lsilver
+ (:foreground chocolate-mono-1))
+ (all-the-icons-silver
+ (:foreground chocolate-mono-3))
+ (all-the-icons-dpink
+ (:foreground chocolate-mono-2))
+ (all-the-icons-lpink
+ (:foreground chocolate-syntax-modified))
+ (all-the-icons-pink
+ (:foreground chocolate-mono-1))
+ (all-the-icons-dcyan
+ (:foreground chocolate-mono-3))
+ (all-the-icons-lcyan
+ (:foreground chocolate-hue-2))
+ (all-the-icons-cyan-alt
+ (:foreground chocolate-hue-1))
+ (all-the-icons-cyan
+ (:foreground chocolate-hue-1))
+ (all-the-icons-dorange
+ (:foreground chocolate-hue-5-2))
+ (all-the-icons-lorange
+ (:foreground chocolate-syntax-accent))
+ (all-the-icons-orange
+ (:foreground chocolate-hue-3))
+ (all-the-icons-dpurple
+ (:foreground chocolate-mono-3))
+ (all-the-icons-lpurple
+ (:foreground chocolate-mono-1))
+ (all-the-icons-purple
+ (:foreground chocolate-mono-2))
+ (all-the-icons-dmaroon
+ (:foreground chocolate-mono-3))
+ (all-the-icons-lmaroon
+ (:foreground chocolate-hue-6))
+ (all-the-icons-maroon
+ (:foreground chocolate-hue-5-2))
+ (all-the-icons-dblue
+ (:foreground chocolate-mono-3))
+ (all-the-icons-lblue
+ (:foreground chocolate-hue-2))
+ (all-the-icons-blue-alt
+ (:foreground chocolate-hue-1))
+ (all-the-icons-blue
+ (:foreground chocolate-hue-1))
+ (all-the-icons-dyellow
+ (:foreground chocolate-hue-6-3))
+ (all-the-icons-lyellow
+ (:foreground chocolate-hue-6-2))
+ (all-the-icons-yellow
+ (:foreground chocolate-hue-6-2))
+ (all-the-icons-dgreen
+ (:foreground chocolate-mono-3))
+ (all-the-icons-lgreen
+ (:foreground chocolate-hue-6-2))
+ (all-the-icons-green
+ (:foreground chocolate-hue-4-2))
+ (all-the-icons-red-alt
+ (:foreground chocolate-hue-5-2))
+ (all-the-icons-dred
+ (:foreground chocolate-syntax-light))
+ (all-the-icons-lred
+ (:foreground chocolate-syntax-removed))
+ (all-the-icons-red
+ (:foreground chocolate-hue-5-2))
+ (w3m-haddock-heading-face
+ (:inherit 'highlight))
+
+ ;; MODE SUPPORT: haskell
+ (haskell-hole-face
+ (:underline
+ (:style 'wave :color chocolate-hue-1)))
+ (haskell-warning-face
+ (:underline
+ (:style 'wave :color chocolate-syntax-accent)))
+ (haskell-error-face
+ (:underline
+ (:style 'wave :color chocolate-hue-3)))
+ (haskell-interactive-face-garbage
+ (:inherit 'font-lock-string-face))
+ (haskell-interactive-face-result
+ (:inherit 'font-lock-string-face))
+ (haskell-interactive-face-compile-warning
+ (:inherit 'compilation-warning))
+ (haskell-interactive-face-compile-error
+ (:inherit 'compilation-error))
+ (haskell-interactive-face-prompt2
+ (:inherit 'font-lock-keyword-face))
+ (haskell-interactive-face-prompt
+ (:inherit 'font-lock-function-name-face))
+ (haskell-literate-comment-face
+ (:inherit 'font-lock-doc-face))
+ (haskell-liquid-haskell-annotation-face
+ (:inherit 'haskell-pragma-face))
+ (haskell-pragma-face
+ (:inherit 'font-lock-preprocessor-face))
+ (haskell-operator-face
+ (:inherit 'font-lock-variable-name-face))
+ (haskell-type-face (:foreground chocolate-hue-6))
+ (haskell-constructor-face (:foreground chocolate-hue-6-2))
+ (haskell-keyword-face
+ (:inherit 'font-lock-keyword-face))
+ (haskell-debug-muted-face
+ (:foreground chocolate-mono-2))
+ (haskell-debug-heading-face
+ (:inherit
+ ('quote 'font-lock-keyword-face)))
+ (haskell-debug-keybinding-face
+ (:weight 'bold :inherit
+ ('quote 'font-lock-type-face)))
+ (haskell-debug-newline-face
+ (:weight 'bold :background chocolate-hue-2))
+ (haskell-debug-trace-number-face
+ (:weight 'bold :background chocolate-hue-2))
+ (haskell-debug-warning-face
+ (:inherit
+ ('quote 'compilation-warning)))
+ (Info-quoted
+ (:inherit 'fixed-pitch-serif))
+ (info-index-match
+ (:inherit 'match))
+ (info-header-node
+ (:inherit 'info-node))
+ (info-header-xref
+ (:inherit 'info-xref))
+ (info-xref-visited
+ (:inherit
+ ('link-visited 'info-xref)))
+ (info-xref
+ (:inherit 'link))
+ (info-menu-star
+ (:foreground chocolate-syntax-accent))
+ (info-menu-header
+ (:weight 'bold :inherit 'variable-pitch))
+ (info-title-4
+ (:weight 'bold :inherit 'variable-pitch))
+ (info-title-3
+ (:height 1.2 :inherit 'info-title-4))
+ (info-title-2
+ (:height 1.2 :inherit 'info-title-3))
+ (info-title-1
+ (:height 1.2 :inherit 'info-title-2))
+ (info-node
+ (:weight 'bold :slant 'italic :foreground chocolate-hue-2))
+ (package-status-avail-obso
+ (:inherit 'package-status-incompat))
+ (package-status-incompat
+ (:inherit 'font-lock-comment-face))
+ (package-status-unsigned
+ (:inherit 'font-lock-warning-face))
+ (package-status-dependency
+ (:inherit 'package-status-installed))
+ (package-status-installed
+ (:inherit 'font-lock-comment-face))
+ (package-status-disabled
+ (:inherit 'font-lock-warning-face))
+ (package-status-held
+ (:inherit 'font-lock-constant-face))
+ (package-status-new
+ (:inherit
+ ('bold 'package-status-available)))
+ (package-status-available
+ (:inherit 'default))
+ (package-status-external
+ (:inherit 'package-status-built-in))
+ (package-status-built-in
+ (:inherit 'font-lock-builtin-face))
+ (package-description
+ (:inherit 'default))
+ (package-name
+ (:inherit 'link))
+ (package-help-section-name
+ (:inherit
+ ('bold 'font-lock-function-name-face)))
+ (tooltip
+ (:foreground chocolate-mono-1 :background chocolate-syntax-bg-light))
+ (eldoc-highlight-function-argument
+ (:inherit 'bold))
+ (vc-edited-state
+ (:inherit 'vc-state-base))
+ (vc-missing-state
+ (:inherit 'vc-state-base))
+ (vc-removed-state
+ (:inherit 'vc-state-base))
+ (vc-conflict-state
+ (:inherit 'vc-state-base))
+ (vc-locally-added-state
+ (:inherit 'vc-state-base))
+ (vc-locked-state
+ (:inherit 'vc-state-base))
+ (vc-needs-update-state
+ (:inherit 'vc-state-base))
+ (vc-up-to-date-state
+ (:inherit 'vc-state-base))
+ (vc-state-base nil)
+ (ns-working-text-face
+ (:underline t))
+ (buffer-menu-buffer
+ (:weight 'bold))
+ (match
+ (:weight 'bold :foreground chocolate-syntax-added :background chocolate-syntax-bg-dark))
+ (query-replace
+ (:inherit 'isearch))
+ (file-name-shadow
+ (:inherit 'shadow))
+ (lazy-highlight
+ (:weight 'bold :foreground chocolate-hue-2 :background chocolate-mono-3))
+ (isearch-fail
+ (:background chocolate-syntax-bg-dark))
+ (isearch
+ (:weight 'bold :foreground chocolate-syntax-bg-dark :background chocolate-hue-1))
+ (font-lock-regexp-grouping-construct
+ (:foreground chocolate-mono-1 :inherit 'bold))
+ (font-lock-regexp-grouping-backslash
+ (:foreground chocolate-mono-1 :inherit 'bold))
+ (font-lock-preprocessor-face
+ (:foreground chocolate-mono-1 :inherit 'bold))
+ (font-lock-negation-char-face
+ (:foreground chocolate-mono-1 :inherit 'bold))
+ (font-lock-doc-face
+ (:foreground chocolate-mono-2 :inherit 'font-lock-comment-face))
+ (font-lock-comment-delimiter-face
+ (:inherit 'font-lock-comment-face))
+ (next-error
+ (:inherit 'region))
+ (completions-common-part nil)
+ (completions-first-difference
+ (:inherit 'bold))
+ (completions-annotations
+ (:inherit 'italic))
+ (button
+ (:inherit 'link))
+ (show-paren-mismatch
+ (:weight 'bold :foreground chocolate-syntax-bg-dark :background chocolate-hue-5))
+ (show-paren-match
+ (:weight 'bold :foreground chocolate-hue-5 :background chocolate-syntax-bg-dark))
+ (tty-menu-selected-face
+ (:background chocolate-syntax-accent))
+ (tty-menu-disabled-face
+ (:foreground chocolate-hue-2 :background chocolate-syntax-renamed))
+ (tty-menu-enabled-face
+ (:weight 'bold :foreground chocolate-syntax-accent :background chocolate-syntax-renamed))
+ (success
+ (:foreground chocolate-syntax-added))
+ (warning
+ (:foreground chocolate-hue-6-2))
+ (error
+ (:foreground chocolate-hue-5))
+ (glyphless-char
+ (:height 0.6))
+ (help-argument-name
+ (:inherit 'italic))
+ (menu
+ (:inverse-video t))
+ (tool-bar
+ (:box
+ (:line-width 1 :style 'released-button)
+ :foreground chocolate-syntax-bg-dark :background chocolate-mono-1))
+ (mouse nil)
+ (border nil)
+ (scroll-bar nil)
+ (minibuffer-prompt
+ (:foreground chocolate-hue-1))
+ (window-divider-last-pixel
+ (:inherit 'window-divider))
+ (window-divider-first-pixel
+ (:inherit 'window-divider))
+ (window-divider
+ (:inherit 'vertical-border))
+ (vertical-border
+ (:foreground chocolate-syntax-bg-dark :background chocolate-syntax-bg-dark))
+ (header-line
+ (:inherit 'mode-line))
+ (mode-line-buffer-id
+ (:weight 'bold :foreground chocolate-mono-1))
+ (mode-line-emphasis
+ (:foreground chocolate-hue-1))
+ (mode-line-highlight
+ (:inherit 'highlight))
+ (nobreak-space
+ (:underline t :inherit 'escape-glyph))
+ (escape-glyph
+ (:foreground chocolate-syntax-renamed))
+ (trailing-whitespace
+ (:background chocolate-hue-5))
+ (highlight
+ (:foreground chocolate-syntax-bg-dark :background chocolate-hue-1))
+ (shadow
+ (:foreground chocolate-mono-3))
+ (variable-pitch
+ (:family "Sans Serif"))
+ (fixed-pitch-serif
+ (:family "Monospace Serif"))
+ (fixed-pitch
+ (:family "Monospace"))
+ (underline
+ (:underline t))
+ (bold-italic
+ (:inherit
+ ('bold 'italic)))
+ (italic
+ (:slant 'italic))
+ (bold
+ (:weight 'bold))
+ (helm-ag-edit-deleted-line
+ (:strike-through t :inherit 'font-lock-comment-face))
+ (swiper-line-face
+ (:foreground chocolate-syntax-bg-dark :background chocolate-hue-1))
+ (swiper-match-face-4
+ (:weight 'bold :foreground chocolate-syntax-bg-dark :background chocolate-syntax-added))
+ (swiper-match-face-3
+ (:weight 'bold :foreground chocolate-syntax-bg-dark :background chocolate-mono-1))
+ (swiper-match-face-2
+ (:weight 'bold :foreground chocolate-syntax-bg-dark :background chocolate-hue-6))
+ (swiper-match-face-1
+ (:foreground chocolate-mono-3 :background chocolate-syntax-bg-dark))
+ (git-gutter-fr+-deleted
+ (:foreground chocolate-syntax-removed :background chocolate-syntax-removed :inherit 'git-gutter+-deleted))
+ (git-gutter-fr+-added
+ (:foreground chocolate-syntax-added :background chocolate-syntax-added :inherit 'git-gutter+-added))
+ (git-gutter-fr+-modified
+ (:foreground chocolate-syntax-modified :background chocolate-syntax-modified :inherit 'git-gutter+-modified))
+ (git-gutter+-commit-header-face
+ (:inherit 'font-lock-comment-face))
+ (git-gutter+-unchanged
+ (:background chocolate-syntax-accent))
+ (git-gutter+-deleted
+ (:foreground chocolate-hue-5))
+ (git-gutter+-added
+ (:foreground chocolate-syntax-added))
+ (git-gutter+-modified
+ (:foreground chocolate-hue-6-2))
+ (git-gutter+-separator
+ (:weight 'bold :foreground chocolate-syntax-renamed))
+ (pulse-highlight-face
+ (:background chocolate-hue-6-3))
+ (pulse-highlight-start-face
+ (:background chocolate-hue-6-3))
+ (which-func
+ (:foreground chocolate-hue-1))
+ ))
+
+
+;;;###autoload
+(and load-file-name
+ (add-to-list 'custom-theme-load-path
+ (file-name-as-directory
+ (file-name-directory load-file-name))))
+
+(provide-theme 'chocolate)
+
+;;; chocolate-theme.el ends here
diff --git a/packages/cider-20181110.1413.tar b/packages/cider-20190821.1002.tar
similarity index 90%
rename from packages/cider-20181110.1413.tar
rename to packages/cider-20190821.1002.tar
index bfdfa9e..8b9a924 100644
Binary files a/packages/cider-20181110.1413.tar and b/packages/cider-20190821.1002.tar differ
diff --git a/packages/cider-eval-sexp-fu-20160907.800.el b/packages/cider-eval-sexp-fu-20190311.2152.el
similarity index 91%
rename from packages/cider-eval-sexp-fu-20160907.800.el
rename to packages/cider-eval-sexp-fu-20190311.2152.el
index 5a5318e..aa201db 100644
--- a/packages/cider-eval-sexp-fu-20160907.800.el
+++ b/packages/cider-eval-sexp-fu-20190311.2152.el
@@ -5,10 +5,10 @@
;; Author: Sylvain Benner
;; Keywords: languages, clojure, cider
-;; Package-Version: 20160907.800
+;; Package-Version: 20190311.2152
;; Created: 20 Mar 2015
-;; Version: 1.1
-;; Package-Requires: ((emacs "24") (highlight "0") (eval-sexp-fu "0.4.0"))
+;; Version: 1.2
+;; Package-Requires: ((emacs "24") (eval-sexp-fu "0.5.0"))
;; This file is not part of GNU Emacs.
@@ -33,7 +33,6 @@
;;; Code:
-(require 'highlight)
(require 'eval-sexp-fu)
(defun cider-esf--bounds-of-last-sexp ()
@@ -54,7 +53,7 @@ area is identical to that which is evaluated."
(eval-sexp-fu-flash (cider-esf--bounds-of-last-sexp)))
(define-eval-sexp-fu-flash-command cider-eval-defun-at-point
(eval-sexp-fu-flash (let ((bounds (cider-defun-at-point 'bounds)))
- (cons (first bounds) (second bounds)))))
+ (cons (car bounds) (cadr bounds)))))
;; Defines:
;; `eval-sexp-fu-cider-sexp-inner-list',
diff --git a/packages/circe-20180525.1231.tar b/packages/circe-20190322.1242.tar
similarity index 98%
rename from packages/circe-20180525.1231.tar
rename to packages/circe-20190322.1242.tar
index 915cef6..9d2e6a2 100644
Binary files a/packages/circe-20180525.1231.tar and b/packages/circe-20190322.1242.tar differ
diff --git a/packages/cl-generic-0.3.el b/packages/cl-generic-0.3.el
deleted file mode 100644
index 0e7e1e4..0000000
--- a/packages/cl-generic-0.3.el
+++ /dev/null
@@ -1,156 +0,0 @@
-;;; cl-generic.el --- Forward cl-generic compatibility for Emacs<25
-
-;; Copyright (C) 2015, 2016 Free Software Foundation, Inc
-
-;; Author: Stefan Monnier
-;; vcomment: Emacs-25's version is 1.0 so this has to stay below.
-;; Version: 0.3
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; 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:
-
-;; This is a forward compatibility package, which provides (a subset of) the
-;; features of the cl-generic package introduced in Emacs-25, for use on
-;; previous emacsen.
-
-;; Make sure this is installed *late* in your `load-path`, i.e. after Emacs's
-;; built-in .../lisp/emacs-lisp directory, so that if/when you upgrade to
-;; Emacs≥25, the built-in version of the file will take precedence, otherwise
-;; you could get into trouble (although we try to hack our way around the
-;; problem in case it happens).
-
-;; AFAIK, the main incompatibilities between cl-generic and EIEIO's defmethod
-;; are:
-;; - EIEIO does not support multiple dispatch. We ignore this difference here
-;; and rely on EIEIO to detect and signal the problem.
-;; - EIEIO only supports primary, :before, and :after qualifiers. We ignore
-;; this difference here and rely on EIEIO to detect and signal the problem.
-;; - EIEIO does not support specializers other than classes. We ignore this
-;; difference here and rely on EIEIO to detect and signal the problem.
-;; - EIEIO uses :static instead of (subclass ) and :static methods match
-;; both class arguments as well as object argument of that class. Here we
-;; turn (subclass ) into a :static qualifier and ignore the semantic
-;; difference, hoping noone will notice.
-;; - EIEIO's defgeneric does not reset the function. We ignore this difference
-;; and hope for the best.
-;; - EIEIO uses `call-next-method' and `next-method-p' while cl-defmethod uses
-;; `cl-next-method-p' and `cl-call-next-method' (simple matter of renaming).
-;; We handle that by renaming the calls in the `cl-defmethod' macro.
-;; - The errors signaled are slightly different. We make
-;; cl-no-applicable-method into a "parent" error of no-method-definition,
-;; which should cover the usual cases.
-;; - EIEIO's no-next-method and no-applicable-method have different calling
-;; conventions from cl-generic's. We don't try to handle this, so just
-;; refrain from trying to call (or add methods to) `cl-no-next-method' or
-;; `cl-no-applicable-method'.
-;; - EIEIO's `call-next-method' and `next-method-p' have dynamic scope whereas
-;; cl-generic's `cl-next-method-p' and `cl-call-next-method' are lexically
-;; scoped. The cl-defmethod here handles the common subset between the two.
-
-;;; Code:
-
-;; We need to handle the situation where this package is used with an Emacs
-;; that comes with a real cl-generic (i.e. ≥25.1).
-
-;; First line of defense: try to make sure the built-in cl-lib comes earlier in
-;; load-path so we never get loaded:
-;;;###autoload (let ((d (file-name-directory #$)))
-;;;###autoload (when (member d load-path)
-;;;###autoload (setq load-path (append (remove d load-path) (list d)))))
-
-(require 'cl-lib nil 'noerror)
-
-;; In Emacs≥25, cl-lib autoloads cl-defmethod and friends.
-
-(unless (fboundp 'cl-defmethod)
- (require 'eieio)
- (require 'cl) ;For `labels'.
-
- (defalias 'cl-defgeneric 'defgeneric)
-
- ;; Compatibility with code which tries to catch
- ;; `cl-no-applicable-method' errors.
- (push 'cl-no-applicable-method (get 'no-method-definition 'error-conditions))
-
- (defalias 'cl-generic-apply #'apply)
-
- (defmacro cl-defmethod (name args &rest body)
- (let ((qualifiers nil))
- (while (not (listp args))
- (push args qualifiers)
- (setq args (pop body)))
- (let ((docstring (if (and (stringp (car body)) (cdr body)) (pop body))))
- ;; Backward compatibility for `no-next-method' and
- ;; `no-applicable-method', which have slightly different calling
- ;; convention than their cl-generic counterpart.
- (pcase name
- (`cl-no-next-method
- (setq name 'no-next-method)
- (setq args (cddr args)))
- (`cl-no-applicable-method
- (setq name 'no-applicable-method)
- (setq args `(,(nth 1 args) ,(nth 0 args)
- ,(make-symbol "_ignore") . ,(nthcdr 2 args)))))
- (let ((arg1 (car args)))
- (when (eq (car-safe (car (cdr-safe arg1))) 'subclass)
- ;; There's no exact equivalent to `subclass', but :static
- ;; provides a superset which should work just as well in practice.
- (push :static qualifiers)
- (setf (cadr arg1) (cadr (cadr arg1)))))
-
- `(defmethod ,name ,@qualifiers ,args
- ,@(if docstring (list docstring))
- ;; We could just alias `cl-call-next-method' to `call-next-method',
- ;; and that would work, but then files compiled with this cl-generic
- ;; wouldn't work in Emacs-25 any more.
- ;; Also we fallback on `labels' if `cl-flet' is not available
- ;; (ELPA's cl-lib emulation doesn't provide cl-flet).
- ;; We don't always use `labels' because that generates warnings
- ;; in newer Emacsen where `cl-flet' is available.
- ,@(if qualifiers
- ;; Must be :before or :after, so can't call next-method.
- body
- `((,(if (fboundp 'cl-flet) 'cl-flet 'labels)
- ((cl-call-next-method (&rest args)
- (apply #'call-next-method args))
- (cl-next-method-p () (next-method-p)))
- ,@body))))))))
-
-;;;; ChangeLog:
-
-;; 2016-07-12 Stefan Monnier
-;;
-;; * cl-generic/cl-generic.el (cl-defmethod): Improve compatibility
-;;
-;; More specifically, map cl-no-applicable-method to no-applicable-method.
-;; (cl-generic-apply): New function.
-;;
-;; 2015-02-18 Stefan Monnier
-;;
-;; * cl-generic/cl-generic.el (cl-defmethod): Use cl-flet if available.
-;;
-;; 2015-02-03 Stefan Monnier
-;;
-;; * packages/cl-generic/cl-generic.el (cl-defmethod): Fix handling of
-;; subclass.
-;;
-;; 2015-02-03 Stefan Monnier
-;;
-;; * packages/cl-generic: Add new package
-;;
-
-
-(provide 'cl-generic)
-;;; cl-generic.el ends here
diff --git a/packages/cliphist-20181229.1411.tar b/packages/cliphist-20181229.1411.tar
new file mode 100644
index 0000000..404e8a9
Binary files /dev/null and b/packages/cliphist-20181229.1411.tar differ
diff --git a/packages/clj-refactor-20180826.2149.tar b/packages/clj-refactor-20190618.716.tar
similarity index 97%
rename from packages/clj-refactor-20180826.2149.tar
rename to packages/clj-refactor-20190618.716.tar
index abde173..fb6d349 100644
Binary files a/packages/clj-refactor-20180826.2149.tar and b/packages/clj-refactor-20190618.716.tar differ
diff --git a/packages/clojure-cheatsheet-20180201.804.el b/packages/clojure-cheatsheet-20180201.804.el
deleted file mode 100644
index 15fc0c7..0000000
--- a/packages/clojure-cheatsheet-20180201.804.el
+++ /dev/null
@@ -1,638 +0,0 @@
-;;; clojure-cheatsheet.el --- The Clojure Cheatsheet for Emacs
-
-;; Copyright 2013-2016 Kris Jenkins
-
-;; Author: Kris Jenkins
-;; Maintainer: Kris Jenkins
-;; Keywords: clojure cider cheatsheet helm
-;; Package-Version: 20180201.804
-;; URL: https://github.com/clojure-emacs/clojure-cheatsheet
-;; Created: 7th August 2013
-;; Version: 0.4.0
-;; Package-Requires: ((helm "1.7.7") (cider "0.9.0")) ;; TODO Helm core?
-
-;; This file is not part of GNU Emacs.
-
-;;; Commentary:
-
-;; A quick reference system for Clojure. Fast, searchable & available offline.
-
-;;; License:
-
-;; This program is free software; you can redistribute it and/or
-;; modify it under the terms of the GNU General Public License
-;; as published by the Free Software Foundation; either version 3
-;; of the License, or (at your option) any later version.
-;;
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-;;
-;; You should have received a copy of the GNU General Public License
-;; along with GNU Emacs; see the file COPYING. If not, write to the
-;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-;; Boston, MA 02110-1301, USA.
-
-;;; Code:
-
-(require 'helm)
-(require 'helm-multi-match)
-(require 'cider-interaction)
-(require 'cl-lib)
-
-(warn "This package is now deprecated as its functionality was fully integrated into CIDER and helm-cider")
-
-(defconst clojure-cheatsheet-hierarchy
- '(("Primitives"
- ("Numbers"
- ("Arithmetic"
- (clojure.core + - * / quot rem mod dec inc max min))
- ("Compare"
- (clojure.core = == not= < > <= >= compare))
- ("Bitwise"
- (clojure.core bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left bit-shift-right bit-test bit-xor unsigned-bit-shift-right))
- ("Cast"
- (clojure.core byte short long int float double bigdec bigint biginteger num rationalize))
- ("Test"
- (clojure.core nil? some? identical? zero? pos? neg? even? odd?))
- ("Random"
- (clojure.core rand rand-int))
- ("BigDecimal"
- (clojure.core with-precision))
- ("Ratios"
- (clojure.core numerator denominator ratio?))
- ("Arbitrary Precision Arithmetic"
- (clojure.core +\' -\' *\' inc\' dec\'))
- ("Unchecked"
- (clojure.core *unchecked-math*
- unchecked-add
- unchecked-add-int
- unchecked-byte
- unchecked-char
- unchecked-dec
- unchecked-dec-int
- unchecked-divide-int
- unchecked-double
- unchecked-float
- unchecked-inc
- unchecked-inc-int
- unchecked-int
- unchecked-long
- unchecked-multiply
- unchecked-multiply-int
- unchecked-negate
- unchecked-negate-int
- unchecked-remainder-int
- unchecked-short
- unchecked-subtract
- unchecked-subtract-int)))
-
- ("Strings"
- ("Create"
- (clojure.core str format))
- ("Use"
- (clojure.core count get subs compare)
- (clojure.string join escape split split-lines replace replace-first reverse re-quote-replacement index-of last-index-of starts-with? ends-with? includes?))
- ("Regex"
- (:url "Java's Regex Syntax" "http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html")
- (clojure.core re-find re-seq re-matches re-pattern re-matcher re-groups)
- (clojure.string replace replace-first re-quote-replacement))
- ("Letters"
- (clojure.string capitalize lower-case upper-case))
- ("Trim"
- (clojure.string trim trim-newline triml trimr))
- ("Test"
- (clojure.core char char? string?)
- (clojure.string blank?)))
-
- ("Other"
- ("Characters"
- (clojure.core char char-name-string char-escape-string))
- ("Keywords"
- (clojure.core keyword keyword? find-keyword))
- ("Symbols"
- (clojure.core symbol symbol? gensym))
- ("Data Readers"
- (clojure.core *data-readers* default-data-readers *default-data-reader-fn*))))
-
- ("Collections"
- ("Generic Ops"
- (clojure.core count empty not-empty into conj))
- ("Tree Walking"
- (clojure.walk walk prewalk prewalk-demo prewalk-replace postwalk postwalk-demo postwalk-replace keywordize-keys stringify-keys))
- ("Content tests"
- (clojure.core distinct? empty? every? not-every? some not-any?))
- ("Capabilities"
- (clojure.core sequential? associative? sorted? counted? reversible?))
- ("Type tests"
- (clojure.core type class coll? list? vector? set? map? seq?
- number? integer? float? decimal? class? rational? ratio?
- chunked-seq? reduced? special-symbol? record?))
- ("Lists"
- ("Create"
- (clojure.core list list*))
- ("Examine"
- (clojure.core first nth peek))
- ("'Change'"
- (clojure.core cons conj rest pop)))
-
- ("Vectors"
- ("Create"
- (clojure.core vec vector vector-of))
- ("Examine"
- (clojure.core get peek))
-
- ("'Change'"
- (clojure.core assoc pop subvec replace conj rseq))
- ("Ops"
- (clojure.core mapv filterv reduce-kv)))
-
- ("Sets"
- ("Create"
- (clojure.core set hash-set sorted-set sorted-set-by))
- ("Examine"
- (clojure.core get contains?))
- ("'Change'"
- (clojure.core conj disj))
- ("Relational Algebra"
- (clojure.set join select project union difference intersection))
- ("Get map"
- (clojure.set index rename-keys rename map-invert))
- ("Test"
- (clojure.set subset? superset?)))
-
- ("Maps"
- ("Create"
- (clojure.core hash-map array-map zipmap sorted-map sorted-map-by bean frequencies group-by))
- ("Examine"
- (clojure.core get get-in contains? find keys vals map-entry?))
- ("'Change'"
- (clojure.core assoc assoc-in dissoc merge merge-with select-keys update update-in))
- ("Entry"
- (clojure.core key val))
- ("Sorted Maps"
- (clojure.core rseq subseq rsubseq)))
-
- ("Hashes"
- (clojure.core hash hash-ordered-coll hash-unordered-coll mix-collection-hash))
-
- ("Volatiles"
- (clojure.core volatile! volatile? vreset! vswap!)))
-
- ("Functions"
- ("Create"
- (clojure.core fn defn defn- definline identity constantly comp complement partial juxt memfn memoize fnil every-pred some-fn trampoline))
- ("Call"
- (clojure.core -> ->> some-> some->> as-> cond-> cond->>))
- ("Test"
- (clojure.core fn? ifn?)))
-
- ("Transducers"
- ("Create"
- (clojure.core cat dedupe distinct drop drop-while filter interpose keep keep-indexed map map-indexed mapcat partition-all partition-by random-sample remove replace take take-nth take-while))
- ("Call"
- (clojure.core ->Eduction eduction into sequence transduce completing run!))
- ("Early Termination"
- (clojure.core deref reduced reduced? ensure-reduced unreduced)))
-
- ("Other"
- ("XML"
- (clojure.core xml-seq)
- (clojure.xml parse))
- ("REPL"
- (clojure.core *1 *2 *3 *e *print-dup* *print-length* *print-level* *print-meta* *print-readably*))
- ("EDN"
- (clojure.edn read read-string))
- ("Compiling Code & Class Generation"
- (:url "Documentation" "http://clojure.org/compilation")
- (clojure.core *compile-files* *compile-path* *file* *warn-on-reflection* compile gen-class gen-interface loaded-libs test))
- ("Misc"
- (clojure.core eval force name *clojure-version* clojure-version *command-line-args*))
- ("Pretty Printing"
- (clojure.pprint pprint print-table pp *print-right-margin*))
- ("Browser / Shell"
- (clojure.java.browse browse-url)
- (clojure.java.shell sh with-sh-dir with-sh-env)))
-
- ("Vars & Global Environment"
- (:url "Documentation" "http://clojure.org/vars")
- ("Def Variants"
- (:special def)
- (clojure.core defn defn- definline defmacro defmethod defmulti defonce defrecord))
- ("Interned Vars"
- (:special var)
- (clojure.core declare intern binding find-var))
- ("Var Objects"
- (clojure.core with-local-vars var-get var-set alter-var-root var?))
- ("Var Validators"
- (clojure.core set-validator! get-validator)))
-
- ("Reader Conditionals"
- (clojure.core reader-conditional reader-conditional? tagged-literal tagged-literal?))
-
- ("Abstractions"
- ("Protocols"
- (:url "Documentation" "http://clojure.org/protocols")
- (clojure.core defprotocol extend extend-type extend-protocol reify extends? satisfies? extenders))
- ("Records & Types"
- (:url "Documentation" "http://clojure.org/datatypes")
- (clojure.core defrecord deftype))
- ("Multimethods"
- (:url "Documentation" "http://clojure.org/multimethods")
- ("Define"
- (clojure.core defmulti defmethod))
- ("Dispatch"
- (clojure.core get-method methods))
- ("Remove"
- (clojure.core remove-method remove-all-methods))
- ("Prefer"
- (clojure.core prefer-method prefers))
- ("Relation"
- (clojure.core derive isa? parents ancestors descendants make-hierarchy))))
-
- ("Macros"
- (:url "Documentation" "http://clojure.org/macros")
- ("Create"
- (clojure.core defmacro definline))
- ("Debug"
- (clojure.core macroexpand-1 macroexpand)
- (clojure.walk macroexpand-all))
- ("Branch"
- (clojure.core and or when when-not when-let when-first if-not if-let cond condp case))
- ("Loop"
- (clojure.core for doseq dotimes while))
- ("Arrange"
- (clojure.core .. doto ->))
- ("Scope"
- (clojure.core binding locking time)
- (clojure.core with-in-str with-local-vars with-open with-out-str with-precision with-redefs with-redefs-fn))
- ("Lazy"
- (clojure.core lazy-cat lazy-seq delay delay?))
- ("Doc."
- (clojure.core assert comment)
- (clojure.repl doc dir dir-fn source-fn)))
-
- ("Java Interop"
- (:url "Documentation" "http://clojure.org/java_interop")
- ("General"
- (:special new set!)
- (clojure.core .. doto bean comparator enumeration-seq import iterator-seq memfn definterface supers bases))
- ("Cast"
- (clojure.core boolean byte short char int long float double bigdec bigint num cast biginteger))
- ("Java Arrays"
- ("Create"
- (clojure.core boolean-array byte-array double-array char-array float-array int-array long-array make-array object-array short-array to-array))
- ("Manipulate"
- (clojure.core aclone aget aset alength amap areduce aset-int aset-long aset-short aset-boolean aset-byte aset-char aset-double aset-float))
- ("Cast"
- (clojure.core booleans bytes chars doubles floats ints longs shorts)))
- ("Exceptions"
- (:special throw try catch finally)
- (clojure.core ex-info ex-data Throwable->map)
- (clojure.repl pst)))
-
- ("Namespaces"
- (:url "Documentation" "http://clojure.org/namespaces")
- ("Current"
- (clojure.core *ns*))
- ("Create Switch"
- (clojure.core ns in-ns create-ns))
- ("Add"
- (clojure.core alias import intern refer refer-clojure))
- ("Find"
- (clojure.core all-ns find-ns))
- ("Examine"
- (clojure.core ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ns-refers))
- ("From symbol"
- (clojure.core resolve namespace ns-resolve the-ns))
- ("Remove"
- (clojure.core ns-unalias ns-unmap remove-ns)))
- ("Loading"
- ("Load libs"
- (clojure.core require use import refer))
- ("List Loaded"
- (clojure.core loaded-libs))
- ("Load Misc"
- (clojure.core load load-file load-reader load-string)))
-
- ("Concurrency"
- (:url "Documentation" "http://clojure.org/atoms")
- ("Atoms"
- (clojure.core atom swap! reset! compare-and-set!))
- ("Futures"
- (clojure.core future future-call future-cancel future-cancelled? future-done? future?))
- ("Threads"
- (clojure.core bound-fn bound-fn* get-thread-bindings pop-thread-bindings push-thread-bindings))
-
- ("Misc"
- (clojure.core locking pcalls pvalues pmap seque promise deliver))
-
- ("Refs & Transactions"
- (:url "Documentation" "http://clojure.org/refs")
- ("Create"
- (clojure.core ref))
- ("Examine"
- (clojure.core deref))
- ("Transaction"
- (clojure.core sync dosync io!))
- ("In Transaction"
- (clojure.core ensure ref-set alter commute))
- ("Validators"
- (clojure.core get-validator set-validator!))
- ("History"
- (clojure.core ref-history-count ref-max-history ref-min-history)))
-
- ("Agents & Asynchronous Actions"
- (:url "Documentation" "http://clojure.org/agents")
- ("Create"
- (clojure.core agent))
- ("Examine"
- (clojure.core agent-error))
- ("Change State"
- (clojure.core send send-off restart-agent send-via set-agent-send-executor! set-agent-send-off-executor!))
- ("Block Waiting"
- (clojure.core await await-for))
- ("Ref Validators"
- (clojure.core get-validator set-validator!))
- ("Watchers"
- (clojure.core add-watch remove-watch))
- ("Thread Handling"
- (clojure.core shutdown-agents))
- ("Error"
- (clojure.core error-handler set-error-handler! error-mode set-error-mode!))
- ("Misc"
- (clojure.core *agent* release-pending-sends))))
-
- ("Sequences"
- ("Creating a Lazy Seq"
- ("From Collection"
- (clojure.core seq sequence keys vals rseq subseq rsubseq))
- ("From Producer Fn"
- (clojure.core lazy-seq repeatedly iterate))
- ("From Constant"
- (clojure.core repeat range))
- ("From Other"
- (clojure.core file-seq line-seq resultset-seq re-seq tree-seq xml-seq iterator-seq enumeration-seq))
- ("From Seq"
- (clojure.core keep keep-indexed)))
-
- ("Seq in, Seq out"
- ("Get shorter"
- (clojure.core distinct dedupe filter remove for))
- ("Get longer"
- (clojure.core cons conj concat lazy-cat mapcat cycle interleave interpose)))
- ("Tail-items"
- (clojure.core rest nthrest fnext nnext drop drop-while take-last for))
- ("Head-items"
- (clojure.core take take-nth take-while butlast drop-last for))
- ("'Change'"
- (clojure.core conj concat distinct flatten group-by partition partition-all partition-by split-at split-with filter remove replace shuffle random-sample))
- ("Rearrange"
- (clojure.core reverse sort sort-by compare))
- ("Process items"
- (clojure.core map pmap map-indexed mapcat for replace seque))
-
- ("Using a Seq"
- ("Extract item"
- (clojure.core first second last rest next ffirst nfirst fnext nnext nth nthnext rand-nth when-first max-key min-key))
- ("Construct coll"
- (clojure.core zipmap into reduce reductions set vec into-array to-array-2d))
- ("Pass to fn"
- (clojure.core apply))
- ("Search"
- (clojure.core some filter))
- ("Force evaluation"
- (clojure.core doseq dorun doall))
- ("Check for forced"
- (clojure.core realized?))))
-
- ("Zippers"
- ("Create"
- (clojure.zip zipper seq-zip vector-zip xml-zip))
- ("Get loc"
- (clojure.zip up down left right leftmost rightmost))
- ("Get seq"
- (clojure.zip lefts rights path children))
- ("'Change'"
- (clojure.zip make-node replace edit insert-child insert-left insert-right append-child remove))
- ("Move"
- (clojure.zip next prev))
- ("XML"
- (clojure.data.zip.xml attr attr= seq-test tag= text text= xml-> xml1->))
- ("Misc"
- (clojure.zip root node branch? end?)))
-
- ("Documentation"
- ("REPL"
- (clojure.repl doc find-doc apropos source pst)
- (clojure.java.javadoc javadoc)))
-
- ("Transients"
- (:url "Documentation" "http://clojure.org/transients")
- ("Create")
- (clojure.core transient persistent!)
- ("Change")
- (clojure.core conj! pop! assoc! dissoc! disj!))
- ("Misc"
- ("Compare"
- (clojure.core = == identical? not= not compare)
- (clojure.data diff))
- ("Test"
- (clojure.core true? false? nil? instance?)))
-
- ("IO"
- ("To/from ..."
- (clojure.core spit slurp))
- ("To *out*"
- (clojure.core pr prn print printf println newline)
- (clojure.pprint print-table))
- ("To writer"
- (clojure.pprint pprint cl-format))
- ("To string"
- (clojure.core format with-out-str pr-str prn-str print-str println-str))
- ("From *in*"
- (clojure.core read-line read))
- ("From reader"
- (clojure.core line-seq read))
- ("From string"
- (clojure.core read-string with-in-str))
- ("Open"
- (clojure.core with-open)
- (clojure.java.io reader writer input-stream output-stream))
- ("Interop"
- (clojure.java.io make-writer make-reader make-output-stream make-input-stream))
- ("Misc"
- (clojure.core flush file-seq *in* *out* *err*)
- (clojure.java.io file copy delete-file resource as-file as-url as-relative-path make-parents)))
-
- ("Metadata"
- (clojure.core meta with-meta alter-meta! reset-meta! vary-meta))
-
- ("Special Forms"
- (:url "Documentation" "http://clojure.org/special_forms")
- (:special def if do quote var recur throw try monitor-enter monitor-exit)
- (clojure.core fn loop)
- ("Binding / Destructuring"
- (clojure.core let fn letfn defn defmacro loop for doseq if-let if-some when-let when-some)))
- ("Async"
- ("Main"
- (clojure.core.async go go-loop ! >!! chan put! take take! close! timeout offer! poll! promise-chan))
- ("Choice"
- (clojure.core.async alt! alt!! alts! alts!! do-alts))
- ("Buffering"
- (clojure.core.async buffer dropping-buffer sliding-buffer unblocking-buffer?))
- ("Pipelines"
- (clojure.core.async pipeline pipeline-async pipeline-blocking))
- ("Threading"
- (clojure.core.async thread thread-call))
-
- ("Mixing"
- (clojure.core.async admix solo-mode mix unmix unmix-all toggle merge pipe unique))
- ("Multiples"
- (clojure.core.async mult tap untap untap-all))
- ("Publish/Subscribe"
- (clojure.core.async pub sub unsub unsub-all))
- ("Higher Order"
- (clojure.core.async filter< filter> map map< map> mapcat< mapcat> partition partition-by reduce remove< remove> split))
- ("Pre-Populate"
- (clojure.core.async into onto-chan to-chan)))
- ("Unit Tests"
- ("Defining"
- (clojure.test deftest deftest- testing is are))
- ("Running"
- (clojure.test run-tests run-all-tests test-vars))
- ("Fixtures"
- (clojure.test use-fixtures join-fixtures compose-fixtures))))
- "A data structure designed for the maintainer's convenience, which we
-transform into the format that helm requires.
-
-It's a tree, where the head of each list determines the context of the rest of the list.
-The head may be:
-
- A string, in which case it's a (sub)heading for the rest of the items.
- A symbol, in which case it's the Clojure namespace of the symbols that follow it.
- The keyword :special, in which case it's a Clojure special form - a symbol with no
- Any other keyword, in which case it's a typed item that will be passed
- through and handled in `clojure-cheatsheet/item-to-helm-source'.
-
-Note that some many Clojure symbols appear in more than once. This is
-entirely intentional. For instance, `map` belongs in the sections on
-collections and transducers.")
-
-;;; We could just make dash.el a dependency, but I'm not sure it's worth it for one utility macro.
-(defmacro clojure-cheatsheet/->> (&rest body)
- (let ((result (pop body)))
- (dolist (form body result)
- (setq result (append (if (sequencep form)
- form
- (list form))
- (list result))))))
-
-(defun clojure-cheatsheet/treewalk (before after node)
- "Walk a tree.
-Invoke BEFORE before the walk, and AFTER after it, on each NODE."
- (clojure-cheatsheet/->> node
- (funcall before)
- ((lambda (new-node)
- (if (listp new-node)
- (mapcar (lambda (child)
- (clojure-cheatsheet/treewalk before after child))
- new-node)
- new-node)))
- (funcall after)))
-
-(defun clojure-cheatsheet/symbol-qualifier (namespace symbol)
- "Given a (Clojure) NAMESPACE and a SYMBOL, fully-qualify that symbol."
- (intern (format "%s/%s" namespace symbol)))
-
-(defun clojure-cheatsheet/string-qualifier (head subnode)
- (cond
- ((keywordp (car subnode)) (list head subnode))
- ((symbolp (car subnode)) (cons head subnode))
- ((stringp (car subnode)) (cons (format "%s : %s" head (car subnode))
- (cdr subnode)))
- (t (mapcar (apply-partially 'clojure-cheatsheet/string-qualifier head) subnode))))
-
-(defun clojure-cheatsheet/propagate-headings (node)
- (clojure-cheatsheet/treewalk
- #'identity
- (lambda (item)
- (if (listp item)
- (cl-destructuring-bind (head &rest tail) item
- (cond ((equal :special head) tail)
- ((keywordp head) item)
- ((symbolp head) (mapcar (apply-partially #'clojure-cheatsheet/symbol-qualifier head) tail))
- ((stringp head) (mapcar (apply-partially #'clojure-cheatsheet/string-qualifier head) tail))
- (t item)))
- item))
- node))
-
-(defun clojure-cheatsheet/flatten (node)
- "Flatten NODE, which is a tree structure, into a list of its leaves."
- (cond
- ((not (listp node)) node)
- ((keywordp (car node)) node)
- ((listp (car node)) (apply 'append (mapcar 'clojure-cheatsheet/flatten node)))
- (t (list (mapcar 'clojure-cheatsheet/flatten node)))))
-
-(defun clojure-cheatsheet/group-by-head (data)
- "Group the DATA, which should be a list of lists, by the head of each list."
- (let ((result '()))
- (dolist (item data result)
- (let* ((head (car item))
- (tail (cdr item))
- (current (cdr (assoc head result))))
- (if current
- (setf (cdr (assoc head result))
- (append current tail))
- (setq result (append result (list item))))))))
-
-(defun clojure-cheatsheet/lookup-doc (symbol)
- (if (cider-connected-p)
- (cider-doc-lookup symbol)
- (user-error "CIDER not connected!")))
-
-(defun clojure-cheatsheet/lookup-src (symbol)
- (if (cider-connected-p)
- (cider-find-var nil symbol)
- (user-error "CIDER not connected!")))
-
-(defun clojure-cheatsheet/item-to-helm-source (item)
- "Turn ITEM, which will be (\"HEADING\" candidates...), into a helm-source."
- (cl-destructuring-bind (heading &rest entries) item
- `((name . ,heading)
- (candidates ,@(mapcar (lambda (item)
- (if (and (listp item)
- (keywordp (car item)))
- (cl-destructuring-bind (kind title value) item
- (cons title
- (list kind value)))
- item))
- entries))
- (match . ((lambda (candidate)
- (helm-mm-3-match (format "%s %s" candidate ,heading)))))
- (action-transformer (lambda (action-list current-selection)
- (if (and (listp current-selection)
- (eq (car current-selection) :url))
- '(("Browse" . (lambda (item)
- (helm-browse-url (cadr item)))))
- '(("Lookup Docs" . clojure-cheatsheet/lookup-doc)
- ("Lookup Source" . clojure-cheatsheet/lookup-src))))))))
-
-(defvar helm-source-clojure-cheatsheet
- (clojure-cheatsheet/->> clojure-cheatsheet-hierarchy
- clojure-cheatsheet/propagate-headings
- clojure-cheatsheet/flatten
- clojure-cheatsheet/group-by-head
- (mapcar 'clojure-cheatsheet/item-to-helm-source)))
-
-;;;###autoload
-(defun clojure-cheatsheet ()
- "Use helm to show a Clojure cheatsheet."
- (interactive)
- (helm :sources helm-source-clojure-cheatsheet))
-
-(provide 'clojure-cheatsheet)
-
-;;; clojure-cheatsheet.el ends here
diff --git a/packages/clojure-mode-20181024.2224.el b/packages/clojure-mode-20190725.654.el
similarity index 90%
rename from packages/clojure-mode-20181024.2224.el
rename to packages/clojure-mode-20190725.654.el
index 5f71f3e..5c8faad 100644
--- a/packages/clojure-mode-20181024.2224.el
+++ b/packages/clojure-mode-20190725.654.el
@@ -1,7 +1,7 @@
;;; clojure-mode.el --- Major mode for Clojure code -*- lexical-binding: t; -*-
-;; Copyright © 2007-2018 Jeffrey Chu, Lennart Staflin, Phil Hagelberg
-;; Copyright © 2013-2018 Bozhidar Batsov, Artur Malabarba
+;; Copyright © 2007-2019 Jeffrey Chu, Lennart Staflin, Phil Hagelberg
+;; Copyright © 2013-2019 Bozhidar Batsov, Artur Malabarba
;;
;; Authors: Jeffrey Chu
;; Lennart Staflin
@@ -9,9 +9,9 @@
;; Bozhidar Batsov
;; Artur Malabarba
;; URL: http://github.com/clojure-emacs/clojure-mode
-;; Package-Version: 20181024.2224
+;; Package-Version: 20190725.654
;; Keywords: languages clojure clojurescript lisp
-;; Version: 5.10.0-snapshot
+;; Version: 5.11.0
;; Package-Requires: ((emacs "25.1"))
;; This file is not part of GNU Emacs.
@@ -70,6 +70,8 @@
(require 'newcomment)
(require 'align)
(require 'subr-x)
+(require 'lisp-mnt)
+(require 'project)
(declare-function lisp-fill-paragraph "lisp-mode" (&optional justify))
@@ -80,7 +82,9 @@
:link '(url-link :tag "GitHub" "https://github.com/clojure-emacs/clojure-mode")
:link '(emacs-commentary-link :tag "Commentary" "clojure-mode"))
-(defconst clojure-mode-version "5.8.2"
+(defconst clojure-mode-version
+ (eval-when-compile
+ (lm-version (or load-file-name buffer-file-name)))
"The current version of `clojure-mode'.")
(defface clojure-keyword-face
@@ -93,7 +97,7 @@
"Face used to font-lock Clojure character literals."
:package-version '(clojure-mode . "3.0.0"))
-(defcustom clojure-indent-style :always-align
+(defcustom clojure-indent-style 'always-align
"Indentation style to use for function forms and macro forms.
There are two cases of interest configured by this variable.
@@ -111,7 +115,7 @@ already use special indentation rules.
The possible values for this variable are keywords indicating how
to indent function forms.
- `:always-align' - Follow the same rules as `lisp-mode'. All
+ `always-align' - Follow the same rules as `lisp-mode'. All
args are vertically aligned with the first arg in case (A),
and vertically aligned with the function name in case (B).
For instance:
@@ -121,30 +125,27 @@ to indent function forms.
merge
some-coll)
- `:always-indent' - All args are indented like a macro body.
+ `always-indent' - All args are indented like a macro body.
(reduce merge
some-coll)
(reduce
merge
some-coll)
- `:align-arguments' - Case (A) is indented like `lisp', and
+ `align-arguments' - Case (A) is indented like `lisp', and
case (B) is indented like a macro body.
(reduce merge
some-coll)
(reduce
merge
some-coll)"
- :safe #'keywordp
- :type '(choice (const :tag "Same as `lisp-mode'" :always-align)
- (const :tag "Indent like a macro body" :always-indent)
+ :safe #'symbolp
+ :type '(choice (const :tag "Same as `lisp-mode'" 'always-align)
+ (const :tag "Indent like a macro body" 'always-indent)
(const :tag "Indent like a macro body unless first arg is on the same line"
- :align-arguments))
+ 'align-arguments))
:package-version '(clojure-mode . "5.2.0"))
-(define-obsolete-variable-alias 'clojure-defun-style-default-indent
- 'clojure-indent-style "5.2.0")
-
(defcustom clojure-use-backtracking-indent t
"When non-nil, enable context sensitive indentation."
:type 'boolean
@@ -180,11 +181,12 @@ For example, \[ is allowed in :db/id[:db.part/user]."
(cl-every 'characterp value))))
(defcustom clojure-build-tool-files
- '("project.clj" ; Leiningen
- "build.boot" ; Boot
- "build.gradle" ; Gradle
- "deps.edn" ; Clojure CLI (a.k.a. tools.deps)
- "shadow-cljs.edn" ; shadow-cljs
+ '("project.clj" ; Leiningen
+ "build.boot" ; Boot
+ "build.gradle" ; Gradle
+ "build.gradle.kts" ; Gradle
+ "deps.edn" ; Clojure CLI (a.k.a. tools.deps)
+ "shadow-cljs.edn" ; shadow-cljs
)
"A list of files, which identify a Clojure project's root.
Out-of-the box `clojure-mode' understands lein, boot, gradle,
@@ -216,8 +218,6 @@ Out-of-the box `clojure-mode' understands lein, boot, gradle,
(define-key map (kbd "f") #'clojure-thread-first-all)
(define-key map (kbd "C-l") #'clojure-thread-last-all)
(define-key map (kbd "l") #'clojure-thread-last-all)
- (define-key map (kbd "C-a") #'clojure-unwind-all)
- (define-key map (kbd "a") #'clojure-unwind-all)
(define-key map (kbd "C-p") #'clojure-cycle-privacy)
(define-key map (kbd "p") #'clojure-cycle-privacy)
(define-key map (kbd "C-(") #'clojure-convert-collection-to-list)
@@ -240,10 +240,13 @@ Out-of-the box `clojure-mode' understands lein, boot, gradle,
(define-key map (kbd "n h") #'clojure-insert-ns-form-at-point)
(define-key map (kbd "n u") #'clojure-update-ns)
(define-key map (kbd "n s") #'clojure-sort-ns)
+ (define-key map (kbd "n r") #'clojure-rename-ns-alias)
(define-key map (kbd "s i") #'clojure-introduce-let)
(define-key map (kbd "s m") #'clojure-move-to-let)
(define-key map (kbd "s f") #'clojure-let-forward-slurp-sexp)
(define-key map (kbd "s b") #'clojure-let-backward-slurp-sexp)
+ (define-key map (kbd "C-a") #'clojure-add-arity)
+ (define-key map (kbd "a") #'clojure-add-arity)
map)
"Keymap for Clojure refactoring commands.")
(fset 'clojure-refactor-map clojure-refactor-map)
@@ -262,11 +265,13 @@ Out-of-the box `clojure-mode' understands lein, boot, gradle,
["Cycle if, if-not" clojure-cycle-if]
["Cycle when, when-not" clojure-cycle-when]
["Cycle not" clojure-cycle-not]
+ ["Add function arity" clojure-add-arity]
("ns forms"
["Insert ns form at the top" clojure-insert-ns-form]
["Insert ns form here" clojure-insert-ns-form-at-point]
["Update ns form" clojure-update-ns]
- ["Sort ns form" clojure-sort-ns])
+ ["Sort ns form" clojure-sort-ns]
+ ["Rename ns alias" clojure-rename-ns-alias])
("Convert collection"
["Convert to list" clojure-convert-collection-to-list]
["Convert to quoted list" clojure-convert-collection-to-quoted-list]
@@ -395,7 +400,7 @@ The command will prompt you to select one of the available sections."
(let ((section-url (concat clojure-reference-base-url (cdr (assoc section clojure-reference-sections)))))
(browse-url section-url)))))
-(defconst clojure-cheatsheet-url "http://clojure.org/api/cheatsheet"
+(defconst clojure-cheatsheet-url "https://clojure.org/api/cheatsheet"
"The URL of the official Clojure cheatsheet.")
(defun clojure-view-cheatsheet ()
@@ -470,22 +475,15 @@ ENDP and DELIMITER."
t)
(= orig-point (match-end 0)))))))))
-(declare-function paredit-open-curly "ext:paredit")
-(declare-function paredit-close-curly "ext:paredit")
+(declare-function paredit-open-curly "ext:paredit" t t)
+(declare-function paredit-close-curly "ext:paredit" t t)
(declare-function paredit-convolute-sexp "ext:paredit")
-(defun clojure--replace-let-bindings-and-indent (orig-fun &rest args)
- "Advise ORIG-FUN to replace let bindings.
-
-Sexps are replace by their bound name if a let form was
-convoluted.
-
-ORIG-FUN should be `paredit-convolute-sexp'.
-
-ARGS are passed to ORIG-FUN, as with all advice."
+(defun clojure--replace-let-bindings-and-indent ()
+ "Replace let bindings and indent."
(save-excursion
(backward-sexp)
- (when (looking-back clojure--let-regexp)
+ (when (looking-back clojure--let-regexp nil)
(clojure--replace-sexps-with-bindings-and-indent))))
(defun clojure-paredit-setup (&optional keymap)
@@ -553,9 +551,16 @@ replacement for `cljr-expand-let`."
(clojure-font-lock-setup)
(add-hook 'paredit-mode-hook #'clojure-paredit-setup)
;; `electric-layout-post-self-insert-function' prevents indentation in strings
- ;; and comments, force indentation in docstrings:
+ ;; and comments, force indentation of non-inlined docstrings:
(add-hook 'electric-indent-functions
- (lambda (_char) (if (clojure-in-docstring-p) 'do-indent)))
+ (lambda (_char) (if (and (clojure-in-docstring-p)
+ ;; make sure we're not dealing with an inline docstring
+ ;; e.g. (def foo "inline docstring" bar)
+ (save-excursion
+ (beginning-of-line-text)
+ (eq (get-text-property (point) 'face)
+ 'font-lock-doc-face)))
+ 'do-indent)))
;; integration with project.el
(add-hook 'project-find-functions #'clojure-current-project))
@@ -786,7 +791,7 @@ any number of matches of `clojure--sym-forbidden-rest-chars'."))
"[ \r\n\t]*"
;; Possibly type or metadata
"\\(?:#?^\\(?:{[^}]*}\\|\\sw+\\)[ \r\n\t]*\\)*"
- "\\(\\sw+\\)?")
+ (concat "\\(" clojure--sym-regexp "\\)?"))
(1 font-lock-keyword-face)
(2 font-lock-function-name-face nil t))
;; (fn name? args ...)
@@ -848,7 +853,8 @@ any number of matches of `clojure--sym-forbidden-rest-chars'."))
"\\>")
0 font-lock-builtin-face)
;; Dynamic variables - *something* or @*something*
- ("\\(?:\\<\\|/\\)@?\\(\\*[a-z-]*\\*\\)\\>" 1 font-lock-variable-name-face)
+ (,(concat "\\(?:\\<\\|/\\)@?\\(\\*" clojure--sym-regexp "\\*\\)\\>")
+ 1 font-lock-variable-name-face)
;; Global constants - nil, true, false
(,(concat
"\\<"
@@ -861,8 +867,8 @@ any number of matches of `clojure--sym-forbidden-rest-chars'."))
;; namespace definitions: (ns foo.bar)
(,(concat "(\\[ \r\n\t]*"
- ;; Possibly metadata
- "\\(?:\\^?{[^}]+}[ \r\n\t]*\\)*"
+ ;; Possibly metadata, shorthand and/or longhand
+ "\\(?:\\^?\\(?:{[^}]+}\\|:[^ \r\n\t]+[ \r\n\t]\\)[ \r\n\t]*\\)*"
;; namespace
"\\(" clojure--sym-regexp "\\)")
(1 font-lock-type-face))
@@ -909,6 +915,10 @@ any number of matches of `clojure--sym-forbidden-rest-chars'."))
(,(rx "`" (group-n 1 (optional "#'")
(+ (or (syntax symbol) (syntax word)))) "`")
(1 'font-lock-constant-face prepend))
+ ;; Highlight [[var]] comments
+ (,(rx "[[" (group-n 1 (optional "#'")
+ (+ (or (syntax symbol) (syntax word)))) "]]")
+ (1 'font-lock-constant-face prepend))
;; Highlight escaped characters in strings.
(clojure-font-lock-escaped-chars 0 'bold prepend)
;; Highlight grouping constructs in regular expressions
@@ -955,7 +965,13 @@ highlighted region)."
(setq docelt (1- docelt)))))
(and (zerop docelt) (<= (point) startpos)
(progn (forward-comment (point-max)) t)
- (= (point) (nth 8 state)))))
+ (= (point) (nth 8 state))))
+ ;; In a def, at last position is not a docstring
+ (not (and (string= "def" firstsym)
+ (save-excursion
+ (goto-char startpos)
+ (goto-char (+ startpos (length (sexp-at-point)) 2))
+ (looking-at "[ \r\n\t]*\)")))))
font-lock-doc-face
font-lock-string-face))))
font-lock-comment-face))
@@ -1115,7 +1131,9 @@ will align the values like this:
:safe #'listp
:type '(repeat string))
-(defcustom clojure-align-cond-forms '("condp" "cond" "cond->" "cond->>" "case" "are")
+(defcustom clojure-align-cond-forms '("condp" "cond" "cond->" "cond->>" "case" "are"
+ "clojure.core/condp" "clojure.core/cond" "clojure.core/cond->"
+ "clojure.core/cond->>" "clojure.core/case" "clojure.test/are")
"List of strings identifying cond-like forms."
:package-version '(clojure-mode . "5.1")
:safe #'listp
@@ -1305,7 +1323,10 @@ symbol properties."
'clojure-indent-function)
(get (intern-soft (match-string 1 function-name))
'clojure-backtracking-indent)))
- (when (string-match (rx (or "let" "when" "while") (syntax symbol))
+ ;; indent symbols starting with if, when, ...
+ ;; such as if-let, when-let, ...
+ ;; like if, when, ...
+ (when (string-match (rx string-start (or "if" "when" "let" "while") (syntax symbol))
function-name)
(clojure--get-indent-method (substring (match-string 0 function-name) 0 -1)))))
@@ -1365,6 +1386,10 @@ spec."
(let ((function (thing-at-point 'symbol)))
(clojure--get-indent-method function))))
+(defun clojure--keyword-to-symbol (keyword)
+ "Convert KEYWORD to symbol."
+ (intern (substring (symbol-name keyword) 1)))
+
(defun clojure--normal-indent (last-sexp indent-mode)
"Return the normal indentation column for a sexp.
Point should be after the open paren of the _enclosing_ sexp, and
@@ -1390,19 +1415,22 @@ accepted by `clojure-indent-style'."
;; Here we have reached the start of the enclosing sexp (point is now at
;; the function name), so the behaviour depends on INDENT-MODE and on
;; whether there's also an argument on this line (case A or B).
- (let ((case-a ; The meaning of case-a is explained in `clojure-indent-style'.
+ (let ((indent-mode (if (keywordp indent-mode)
+ ;; needed for backwards compatibility
+ ;; as before clojure-mode 5.10 indent-mode was a keyword
+ (clojure--keyword-to-symbol indent-mode)
+ indent-mode))
+ (case-a ; The meaning of case-a is explained in `clojure-indent-style'.
(and last-sexp-start
(< last-sexp-start (line-end-position)))))
(cond
- ;; For compatibility with the old `clojure-defun-style-default-indent', any
- ;; value other than these 3 is equivalent to `always-body'.
- ((not (memq indent-mode '(:always-align :align-arguments nil)))
+ ((eq indent-mode 'always-indent)
(+ (current-column) lisp-body-indent -1))
;; There's an arg after the function name, so align with it.
(case-a (goto-char last-sexp-start)
(current-column))
;; Not same line.
- ((eq indent-mode :align-arguments)
+ ((eq indent-mode 'align-arguments)
(+ (current-column) lisp-body-indent -1))
;; Finally, just align with the function name.
(t (current-column)))))))
@@ -1474,7 +1502,7 @@ This function also returns nil meaning don't specify the indentation."
(+ lisp-body-indent containing-form-column))
;; Further non-special args, align with the arg above.
((> pos (1+ method))
- (clojure--normal-indent last-sexp :always-align))
+ (clojure--normal-indent last-sexp 'always-align))
;; Special arg. Rigidly indent with a large indentation.
(t
(+ (* 2 lisp-body-indent) containing-form-column)))))
@@ -1488,7 +1516,7 @@ This function also returns nil meaning don't specify the indentation."
(cond
;; Preserve useful alignment of :require (and friends) in `ns' forms.
((and function (string-match "^:" function))
- (clojure--normal-indent last-sexp :always-align))
+ (clojure--normal-indent last-sexp 'always-align))
;; This should be identical to the :defn above.
((and function
(string-match "\\`\\(?:\\S +/\\)?\\(def[a-z]*\\|with-\\)"
@@ -1550,6 +1578,7 @@ work). To set it from Lisp code, use
(when-not 1)
(when-first 1)
(do 0)
+ (delay 0)
(future 0)
(comment 0)
(doto 1)
@@ -1718,6 +1747,10 @@ Return nil if not inside a project."
(when (> (length choices) 0)
(car (sort choices #'file-in-directory-p)))))
+;; project.el integration
+(cl-defmethod project-roots ((project (head clojure)))
+ (list (cdr project)))
+
(defun clojure-project-relative-path (path)
"Denormalize PATH by making it relative to the project root."
(file-relative-name path (clojure-project-dir)))
@@ -1864,6 +1897,19 @@ the cached value will be updated automatically."
(defvar-local clojure-cached-ns nil
"A buffer ns cache used to speed up ns-related operations.")
+(defun clojure--find-ns-in-direction (direction)
+ "Return the nearest namespace in a specific DIRECTION.
+DIRECTION is `forward' or `backward'."
+ (let ((candidate)
+ (fn (if (eq direction 'forward)
+ #'search-forward-regexp
+ #'search-backward-regexp)))
+ (while (and (not candidate)
+ (funcall fn clojure-namespace-name-regex nil t))
+ (unless (or (clojure--in-string-p) (clojure--in-comment-p))
+ (setq candidate (match-string-no-properties 4))))
+ candidate))
+
(defun clojure-find-ns ()
"Return the namespace of the current Clojure buffer.
Return the namespace closest to point and above it. If there are
@@ -1879,12 +1925,8 @@ The results will be cached if `clojure-cache-ns' is set to t."
;; Move to top-level to avoid searching from inside ns
(ignore-errors (while t (up-list nil t t)))
- ;; The closest ns form above point.
- (when (or (re-search-backward clojure-namespace-name-regex nil t)
- ;; Or any form at all.
- (and (goto-char (point-min))
- (re-search-forward clojure-namespace-name-regex nil t)))
- (match-string-no-properties 4))))))
+ (or (clojure--find-ns-in-direction 'backward)
+ (clojure--find-ns-in-direction 'forward))))))
(setq clojure-cached-ns ns)
ns)))
@@ -1934,7 +1976,7 @@ Returns a list pair, e.g. (\"defn\" \"abc\") or (\"deftest\" \"some-test\")."
\"Non-logical\" sexp are ^metadata and #reader.macros."
(comment-normalize-vars)
(comment-forward (point-max))
- (looking-at-p "\\^\\|#[[:alpha:]]"))
+ (looking-at-p "\\^\\|#:?:?[[:alpha:]]"))
(defun clojure-forward-logical-sexp (&optional n)
"Move forward N logical sexps.
@@ -2032,9 +2074,8 @@ many times."
(condition-case nil
(save-match-data
(let ((original-position (point))
- clojure-comment-start clojure-comment-end)
+ clojure-comment-end)
(beginning-of-defun)
- (setq clojure-comment-start (point))
(end-of-defun)
(setq clojure-comment-end (point))
(beginning-of-defun)
@@ -2089,8 +2130,7 @@ list of (fn args) to pass to `apply''"
Point must be between the opening paren and the ->> symbol."
(forward-sexp)
(save-excursion
- (let ((beg (point))
- (contents (clojure-delete-and-extract-sexp)))
+ (let ((contents (clojure-delete-and-extract-sexp)))
(when (looking-at " *\n")
(join-line 'following))
(clojure--ensure-parens-around-function-names)
@@ -2162,10 +2202,12 @@ before fixing whitespace."
(delete-trailing-whitespace (car sexp) (cdr sexp)))))
;;;###autoload
-(defun clojure-unwind ()
- "Unwind thread at point or above point by one level.
-Return nil if there are no more levels to unwind."
- (interactive)
+(defun clojure-unwind (&optional n)
+ "Unwind thread at point or above point by N levels.
+With universal argument \\[universal-argument], fully unwind thread."
+ (interactive "P")
+ (setq n (cond ((equal n '(4)) 999)
+ (n) (1)))
(save-excursion
(let ((limit (save-excursion
(beginning-of-defun)
@@ -2174,23 +2216,24 @@ Return nil if there are no more levels to unwind."
(when (looking-at "(")
(forward-char 1)
(forward-sexp 1)))
- (search-backward-regexp "([^-]*->" limit)
- (if (clojure--nothing-more-to-unwind)
- (progn (clojure--pop-out-of-threading)
- (clojure--fix-sexp-whitespace)
- nil)
- (down-list)
- (prog1 (cond
- ((looking-at "[^-]*->\\_>") (clojure--unwind-first))
- ((looking-at "[^-]*->>\\_>") (clojure--unwind-last)))
- (clojure--fix-sexp-whitespace 'move-out))
- t))))
+ (while (> n 0)
+ (search-backward-regexp "([^-]*->" limit)
+ (if (clojure--nothing-more-to-unwind)
+ (progn (clojure--pop-out-of-threading)
+ (clojure--fix-sexp-whitespace)
+ (setq n 0)) ;; break out of loop
+ (down-list)
+ (cond
+ ((looking-at "[^-]*->\\_>") (clojure--unwind-first))
+ ((looking-at "[^-]*->>\\_>") (clojure--unwind-last)))
+ (clojure--fix-sexp-whitespace 'move-out)
+ (setq n (1- n)))))))
;;;###autoload
(defun clojure-unwind-all ()
"Fully unwind thread at point or above point."
(interactive)
- (while (clojure-unwind)))
+ (clojure-unwind '(4)))
(defun clojure--remove-superfluous-parens ()
"Remove extra parens from a form."
@@ -2362,6 +2405,10 @@ See: https://github.com/clojure-emacs/clj-refactor.el/wiki/cljr-cycle-privacy"
"Check whether the point is currently in a string."
(nth 3 (syntax-ppss)))
+(defun clojure--in-comment-p ()
+ "Check whether the point is currently in a comment."
+ (nth 4 (syntax-ppss)))
+
(defun clojure--goto-if ()
"Find the first surrounding if or if-not expression."
(when (clojure--in-string-p)
@@ -2426,7 +2473,7 @@ See: https://github.com/clojure-emacs/clj-refactor.el/wiki/cljr-cycle-if"
(condition-case nil
(backward-up-list)
(scan-error (user-error "`clojure-cycle-not' must be invoked inside a list")))
- (if (looking-back "(not ")
+ (if (looking-back "(not " nil)
(progn
(delete-char -5)
(forward-sexp)
@@ -2619,10 +2666,26 @@ lists up."
(insert sexp)
(clojure--replace-sexps-with-bindings-and-indent)))
+(defun clojure--rename-ns-alias-internal (current-alias new-alias)
+ "Rename a namespace alias CURRENT-ALIAS to NEW-ALIAS."
+ (clojure--find-ns-in-direction 'backward)
+ (let ((rgx (concat ":as +" current-alias))
+ (bound (save-excursion (forward-list 1) (point))))
+ (when (search-forward-regexp rgx bound t)
+ (replace-match (concat ":as " new-alias))
+ (save-excursion
+ (while (re-search-forward (concat current-alias "/") nil t)
+ (when (not (nth 3 (syntax-ppss)))
+ (replace-match (concat new-alias "/")))))
+ (save-excursion
+ (while (re-search-forward (concat "#::" current-alias "{") nil t)
+ (replace-match (concat "#::" new-alias "{"))))
+ (message "Successfully renamed alias '%s' to '%s'" current-alias new-alias))))
+
;;;###autoload
(defun clojure-let-backward-slurp-sexp (&optional n)
"Slurp the s-expression before the let form into the let form.
-With a numberic prefix argument slurp the previous N s-expression
+With a numeric prefix argument slurp the previous N s-expressions
into the let form."
(interactive "p")
(let ((n (or n 1)))
@@ -2642,10 +2705,11 @@ into the let form."
;;;###autoload
(defun clojure-let-forward-slurp-sexp (&optional n)
"Slurp the next s-expression after the let form into the let form.
-With a numeric prefix argument slurp the next N s-expressions into the let form."
+With a numeric prefix argument slurp the next N s-expressions
+into the let form."
(interactive "p")
(unless n (setq n 1))
- (dotimes (k n)
+ (dotimes (_ n)
(save-excursion (clojure--let-forward-slurp-sexp-internal))))
;;;###autoload
@@ -2661,6 +2725,95 @@ With a numeric prefix argument the let is introduced N lists up."
(interactive)
(clojure--move-to-let-internal (read-from-minibuffer "Name of bound symbol: ")))
+;;;###autoload
+(defun clojure-rename-ns-alias ()
+ "Rename a namespace alias."
+ (interactive)
+ (let ((current-alias (read-from-minibuffer "Current alias: ")))
+ (save-excursion
+ (clojure--find-ns-in-direction 'backward)
+ (let ((rgx (concat ":as +" current-alias))
+ (bound (save-excursion (forward-list 1) (point))))
+ (if (save-excursion (search-forward-regexp rgx bound t))
+ (let ((new-alias (read-from-minibuffer "New alias: ")))
+ (clojure--rename-ns-alias-internal current-alias new-alias))
+ (message "Cannot find namespace alias: '%s'" current-alias))))))
+
+(defun clojure--add-arity-defprotocol-internal ()
+ "Add an arity to a signature inside a defprotocol.
+
+Assumes cursor is at beginning of signature."
+ (re-search-forward "\\[")
+ (save-excursion (insert "] [")))
+
+(defun clojure--add-arity-reify-internal ()
+ "Add an arity to a function inside a reify.
+
+Assumes cursor is at beginning of function."
+ (re-search-forward "\\(\\w+ \\)")
+ (insert "[")
+ (save-excursion (insert "])\n(" (match-string 0))))
+
+(defun clojure--add-arity-internal ()
+ "Add an arity to a function.
+
+Assumes cursor is at beginning of function."
+ (let ((beg-line (what-line))
+ (end (save-excursion (forward-sexp)
+ (point))))
+ (down-list 2)
+ (when (looking-back "{" 1) ;; skip metadata if present
+ (up-list)
+ (down-list))
+ (cond
+ ((looking-back "(" 1) ;; multi-arity fn
+ (insert "[")
+ (save-excursion (insert "])\n(")))
+ ((looking-back "\\[" 1) ;; single-arity fn
+ (let* ((same-line (string= beg-line (what-line)))
+ (new-arity-text (concat (when same-line "\n") "([")))
+ (save-excursion
+ (goto-char end)
+ (insert ")"))
+
+ (re-search-backward " +\\[")
+ (replace-match new-arity-text)
+ (save-excursion (insert "])\n([")))))))
+
+;;;###autoload
+(defun clojure-add-arity ()
+ "Add an arity to a function."
+ (interactive)
+ (let ((original-pos (point))
+ (n 0))
+ (while (not (looking-at-p "(\\(defn\\|letfn\\|fn\\|defmacro\\|defmethod\\|defprotocol\\|reify\\|proxy\\)"))
+ (setq n (1+ n))
+ (backward-up-list 1 t))
+ (let ((beg (point))
+ (end-marker (make-marker))
+ (end (save-excursion (forward-sexp)
+ (point)))
+ (jump-up (lambda (x)
+ (goto-char original-pos)
+ (backward-up-list x t))))
+ (set-marker end-marker end)
+ (cond
+ ((looking-at-p "(\\(defn\\|fn\\|defmethod\\|defmacro\\)")
+ (clojure--add-arity-internal))
+ ((looking-at-p "(letfn")
+ (funcall jump-up (- n 2))
+ (clojure--add-arity-internal))
+ ((looking-at-p "(proxy")
+ (funcall jump-up (- n 1))
+ (clojure--add-arity-internal))
+ ((looking-at-p "(defprotocol")
+ (funcall jump-up (- n 1))
+ (clojure--add-arity-defprotocol-internal))
+ ((looking-at-p "(reify")
+ (funcall jump-up (- n 1))
+ (clojure--add-arity-reify-internal)))
+ (indent-region beg end-marker))))
+
;;; ClojureScript
(defconst clojurescript-font-lock-keywords
diff --git a/packages/clojure-snippets-20180314.1308.tar b/packages/clojure-snippets-20180314.1308.tar
index 928db6d..9c5471a 100644
Binary files a/packages/clojure-snippets-20180314.1308.tar and b/packages/clojure-snippets-20180314.1308.tar differ
diff --git a/packages/closql-20190731.1450.el b/packages/closql-20190731.1450.el
new file mode 100644
index 0000000..c0b8804
--- /dev/null
+++ b/packages/closql-20190731.1450.el
@@ -0,0 +1,565 @@
+;;; closql.el --- store EIEIO objects using EmacSQL -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2016-2019 Jonas Bernoulli
+
+;; Author: Jonas Bernoulli
+;; Homepage: https://github.com/emacscollective/closql
+;; Package-Requires: ((emacs "25.1") (emacsql-sqlite "3.0.0"))
+;; Package-Version: 20190731.1450
+;; Keywords: extensions
+
+;; 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 of the License,
+;; 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.
+
+;; For a full copy of the GNU GPL see http://www.gnu.org/licenses.
+
+;;; Commentary:
+
+;; Store uniform EIEIO objects in an EmacSQL database. SQLite is used
+;; as backend. This library imposes some restrictions on what kind of
+;; objects can be stored; it isn't intended to store arbitrary objects.
+;; All objects have to share a common superclass and subclasses cannot
+;; add any additional instance slots.
+
+;;; Code:
+
+(require 'eieio)
+(require 'emacsql-sqlite)
+
+(eval-when-compile (require 'subr-x))
+
+;;; Objects
+
+(defclass closql-object ()
+ ((closql-class-prefix :initform nil :allocation :class)
+ (closql-class-suffix :initform nil :allocation :class)
+ (closql-table :initform nil :allocation :class)
+ (closql-primary-key :initform nil :allocation :class)
+ (closql-foreign-key :initform nil :allocation :class)
+ (closql-order-by :initform nil :allocation :class)
+ (closql-database :initform nil :initarg :closql-database))
+ :abstract t)
+
+;;;; Oref
+
+(defun eieio-oref--closql-oref (fn obj slot)
+ (if (closql-object--eieio-childp obj)
+ (closql-oref obj slot)
+ (funcall fn obj slot)))
+
+(advice-add 'eieio-oref :around #'eieio-oref--closql-oref)
+
+(defun closql--oref (obj slot)
+ (aref obj (eieio--slot-name-index (eieio--object-class obj) slot)))
+
+(defun closql-oref (obj slot)
+ (cl-check-type slot symbol)
+ (cl-check-type obj (or eieio-object class))
+ (let* ((class (cond ((symbolp obj)
+ (error "eieio-oref called on a class: %s" obj)
+ (let ((c (cl--find-class obj)))
+ (if (eieio--class-p c) (eieio-class-un-autoload obj))
+ c))
+ (t (eieio--object-class obj))))
+ (c (eieio--slot-name-index class slot)))
+ (if (not c)
+ (if (setq c (eieio--class-slot-name-index class slot))
+ (aref (eieio--class-class-allocation-values class) c)
+ (slot-missing obj slot 'oref))
+ (cl-check-type obj eieio-object)
+ (let ((value (aref obj c))
+ (class (closql--slot-class obj slot))
+ (table (closql--slot-table obj slot))
+ (db (closql--oref obj 'closql-database)))
+ (cond
+ (class
+ (aset obj c
+ (mapcar (lambda (row)
+ (closql--remake-instance class db row))
+ (emacsql db (vconcat
+ [:select * :from $i1
+ :where (= $i2 $s3)]
+ (vector
+ :order-by
+ (or (oref-default class closql-order-by)
+ [(asc $i4)])))
+ (oref-default class closql-table)
+ (oref-default class closql-foreign-key)
+ (closql--oref
+ obj (oref-default obj closql-primary-key))
+ (oref-default class closql-primary-key)))))
+ (table
+ (if (eq value eieio-unbound)
+ (let ((columns (closql--table-columns db table)))
+ (aset obj c
+ (mapcar
+ (if (= (length columns) 2) #'cadr #'cdr)
+ (emacsql db [:select * :from $i1
+ :where (= $i2 $s3)
+ :order-by [(asc $i4)]]
+ table
+ (car columns)
+ (closql--oref
+ obj (oref-default obj closql-primary-key))
+ (cadr columns)))))
+ value))
+ (t
+ (eieio-barf-if-slot-unbound value obj slot 'oref)))))))
+
+;;;; Oset
+
+(defun eieio-oset--closql-oset (fn obj slot value)
+ (if (closql-object--eieio-childp obj)
+ (closql-oset obj slot value)
+ (funcall fn obj slot value)))
+
+(advice-add 'eieio-oset :around #'eieio-oset--closql-oset)
+
+(defun closql--oset (obj slot value)
+ (aset obj (eieio--slot-name-index (eieio--object-class obj) slot) value))
+
+(defun closql-oset (obj slot value)
+ (cl-check-type obj eieio-object)
+ (cl-check-type slot symbol)
+ (let* ((class (eieio--object-class obj))
+ (c (eieio--slot-name-index class slot)))
+ (if (not c)
+ (if (setq c (eieio--class-slot-name-index class slot))
+ (progn (eieio--validate-class-slot-value class c value slot)
+ (aset (eieio--class-class-allocation-values class) c value))
+ (slot-missing obj slot 'oset value))
+ (eieio--validate-slot-value class c value slot)
+ (unless (eq slot 'closql-database)
+ (let ((db (closql--oref obj 'closql-database)))
+ (unless (or (not db) (eq db eieio-unbound))
+ (closql--dset db obj slot value))))
+ (aset obj c value))))
+
+(defun closql--dset (db obj slot value)
+ (let* ((key (oref-default obj closql-primary-key))
+ (id (closql--oref obj key))
+ (class (closql--slot-class obj slot))
+ (table (closql--slot-table obj slot)))
+ (cond
+ (class
+ (error "Not implemented for closql-class slots: oset"))
+ (table
+ (emacsql-with-transaction db
+ (let ((columns (closql--table-columns db table)))
+ ;; Caller might have modified value in place.
+ (closql--oset obj slot eieio-unbound)
+ (let ((list1 (closql-oref obj slot))
+ (list2 value)
+ elt1 elt2)
+ (when (= (length columns) 2)
+ (setq list1 (mapcar #'list list1))
+ (setq list2 (mapcar #'list list2)))
+ ;; `list2' may not be sorted at all and `list1' has to
+ ;; be sorted because Elisp and SQLite sort differently.
+ (setq list1 (cl-sort list1 'string< :key #'car))
+ (setq list2 (cl-sort list2 'string< :key #'car))
+ (while (progn (setq elt1 (car list1))
+ (setq elt2 (car list2))
+ (or elt1 elt2))
+ (let ((key1 (car elt1))
+ (key2 (car elt2)))
+ (cond
+ ((and elt1 (or (not elt2) (string< key1 key2)))
+ (apply #'emacsql db
+ (vconcat
+ [:delete-from $i1 :where]
+ (closql--where-equal (cons id elt1) 1))
+ table
+ (cl-mapcan #'list columns (cons id elt1)))
+ (pop list1))
+ ((string= key1 key2)
+ (unless (equal elt1 elt2)
+ (cl-mapcar
+ (lambda (col val1 val2)
+ (unless (equal val1 val2)
+ (emacsql db [:update $i1 :set (= $i2 $s3)
+ :where (and (= $i4 $s5) (= $i6 $s7))]
+ table col val2
+ (car columns) id
+ (cadr columns) key2)))
+ (cddr columns)
+ (cdr elt1)
+ (cdr elt2)))
+ (pop list1)
+ (pop list2))
+ (t
+ (emacsql db [:insert-into $i1 :values $v2]
+ table (vconcat (cons id elt2)))
+ (pop list2)))))))))
+ (t
+ (emacsql db [:update $i1 :set (= $i2 $s3) :where (= $i4 $s5)]
+ (oref-default obj closql-table)
+ slot
+ (if (eq value eieio-unbound) 'eieio-unbound value)
+ key id)))))
+
+;;;; Slot Properties
+
+(defun closql--slot-class (obj slot)
+ (closql--slot-get obj slot :closql-class))
+
+(defun closql--slot-table (obj slot)
+ (let ((tbl (closql--slot-get obj slot :closql-table)))
+ (and tbl (intern (replace-regexp-in-string
+ "-" "_"
+ (symbol-name (if (symbolp tbl) tbl (car tbl))))))))
+
+(defun closql--slot-get (object-or-class slot prop)
+ (let ((s (car (cl-member slot
+ (eieio-class-slots
+ (cond ((eieio-object-p object-or-class)
+ (eieio--object-class object-or-class))
+ ((eieio--class-p object-or-class)
+ object-or-class)
+ (t
+ (find-class object-or-class 'error))))
+ :key #'cl--slot-descriptor-name))))
+ (and s (cdr (assoc prop (cl--slot-descriptor-props s))))))
+
+(defconst closql--slot-properties '(:closql-class :closql-table))
+
+(defun eieio-defclass-internal--set-closql-slot-props
+ (cname _superclasses slots _options)
+ (let ((class (cl--find-class cname)))
+ (when (child-of-class-p class 'closql-object)
+ (pcase-dolist (`(,name . ,slot) slots)
+ (let ((slot-obj
+ (car (cl-member name
+ (cl-coerce (eieio--class-slots class) 'list)
+ :key (lambda (elt) (aref elt 1))))))
+ (dolist (prop closql--slot-properties)
+ (let ((val (plist-get slot prop)))
+ (when val
+ (setf (alist-get prop (cl--slot-descriptor-props slot-obj))
+ val)))))))))
+
+(advice-add 'eieio-defclass-internal :after
+ #'eieio-defclass-internal--set-closql-slot-props)
+
+(defun eieio--slot-override--set-closql-slot-props (old new _)
+ (dolist (prop closql--slot-properties)
+ (when (alist-get prop (cl--slot-descriptor-props new))
+ (setf (alist-get prop (cl--slot-descriptor-props old))
+ (alist-get prop (cl--slot-descriptor-props new))))))
+
+(advice-add 'eieio--slot-override :after
+ #'eieio--slot-override--set-closql-slot-props)
+
+;;; Database
+
+(defclass closql-database (emacsql-sqlite-connection)
+ ((object-class :allocation :class)))
+
+(cl-defmethod closql-db ((class (subclass closql-database))
+ &optional variable file debug)
+ (or (let ((db (and variable (symbol-value variable))))
+ (and db (emacsql-live-p db) db))
+ (let ((db-init (not (and file (file-exists-p file))))
+ (db (make-instance class :file file)))
+ (set-process-query-on-exit-flag (oref db process) nil)
+ (when debug
+ (emacsql-enable-debugging db))
+ (when db-init
+ (closql--db-init db))
+ (when variable
+ (set variable db))
+ db)))
+
+(cl-defgeneric closql--db-init (db))
+
+(cl-defmethod emacsql ((connection closql-database) sql &rest args)
+ (mapcar #'closql--extern-unbound
+ (apply #'cl-call-next-method connection sql
+ (mapcar (lambda (arg)
+ (if (stringp arg)
+ (let ((copy (copy-sequence arg)))
+ (set-text-properties 0 (length copy) nil copy)
+ copy)
+ arg))
+ args))))
+
+(cl-defmethod closql-insert ((db closql-database) obj &optional replace)
+ (closql--oset obj 'closql-database db)
+ (let (alist)
+ (dolist (slot (eieio-class-slots (eieio--object-class obj)))
+ (setq slot (cl--slot-descriptor-name slot))
+ (let ((table (closql--slot-get obj slot :closql-table)))
+ (when table
+ (push (cons slot (closql-oref obj slot)) alist)
+ (closql--oset obj slot eieio-unbound))))
+ (emacsql-with-transaction db
+ (emacsql db
+ (if replace
+ [:insert-or-replace-into $i1 :values $v2]
+ [:insert-into $i1 :values $v2])
+ (oref-default obj closql-table)
+ (pcase-let ((`(,class ,_db . ,values)
+ (closql--intern-unbound
+ (closql--coerce obj 'list))))
+ (vconcat (cons (closql--abbrev-class
+ (if (eieio--class-p class)
+ (eieio--class-name class)
+ class))
+ values))))
+ (pcase-dolist (`(,slot . ,value) alist)
+ (closql--dset db obj slot value))))
+ obj)
+
+(cl-defmethod closql-delete ((obj closql-object))
+ (let ((key (oref-default obj closql-primary-key)))
+ (emacsql (closql--oref obj 'closql-database)
+ [:delete-from $i1 :where (= $i2 $s3)]
+ (oref-default obj closql-table)
+ key
+ (closql--oref obj key))))
+
+(cl-defmethod closql-reload ((obj closql-object))
+ (or (closql-get (closql--oref obj 'closql-database)
+ (closql--oref obj (oref-default obj closql-primary-key))
+ (eieio-object-class obj))
+ (error "Cannot reload object")))
+
+(cl-defmethod closql-get ((db closql-database) ident &optional class)
+ (unless class
+ (setq class (oref-default db object-class)))
+ (when-let ((row (car (emacsql db [:select * :from $i1
+ :where (= $i2 $s3)]
+ (oref-default class closql-table)
+ (oref-default class closql-primary-key)
+ ident))))
+ (closql--remake-instance class db row t)))
+
+(cl-defmethod closql-query ((db closql-database) &optional select pred class)
+ (if select
+ (let ((value (closql-select db select pred class)))
+ (if (and select (symbolp select))
+ (mapcar #'car value)
+ value))
+ (closql-entries db pred class)))
+
+(cl-defmethod closql-entries ((db closql-database) &optional pred class)
+ (unless class
+ (setq class (oref-default db object-class)))
+ (mapcar (lambda (row)
+ (closql--remake-instance class db row))
+ (closql-select db '* pred class)))
+
+(cl-defmethod closql-select ((db closql-database) select &optional pred class)
+ (unless class
+ (setq class (oref-default db object-class)))
+ (emacsql db
+ (vconcat [:select $i1 :from $i2]
+ (and pred
+ [:where class :in $v3])
+ (if-let ((order (oref-default class closql-order-by)))
+ (vector :order-by order)
+ [:order-by [(asc $i4)]]))
+ select
+ (oref-default class closql-table)
+ (and pred (closql-where-class-in pred))
+ (oref-default class closql-primary-key)))
+
+(defun closql--table-columns (db table &optional prefixed)
+ (mapcar (if prefixed
+ (lambda (col) (intern (format "%s:%s" table (cadr col))))
+ #'cadr)
+ (emacsql db (format "PRAGMA table_info(%s)" table))))
+
+;;; Object/Row Conversion
+
+(cl-defmethod closql--remake-instance ((class (subclass closql-object))
+ db row &optional resolve)
+ (pcase-let ((`(,abbrev . ,values)
+ (closql--extern-unbound row)))
+ (let* ((class-sym (closql--expand-abbrev class abbrev))
+ (this (if (fboundp 'record)
+ (let* ((class-obj (eieio--class-object class-sym))
+ (obj (copy-sequence
+ (eieio--class-default-object-cache
+ class-obj))))
+ (setq values (apply #'vector (cons db values)))
+ (dotimes (i (length (eieio--class-slots class-obj)))
+ (aset obj (1+ i) (aref values i)))
+ obj)
+ (vconcat (list class-sym db) values))))
+ (when resolve
+ (closql--resolve-slots this))
+ this)))
+
+(cl-defmethod closql--resolve-slots ((obj closql-object))
+ (dolist (slot (eieio-class-slots (eieio--object-class obj)))
+ (setq slot (cl--slot-descriptor-name slot))
+ (when (and (not (slot-boundp obj slot))
+ (or (closql--slot-get obj slot :closql-class)
+ (closql--slot-get obj slot :closql-table)))
+ (closql--oset obj slot (closql-oref obj slot)))))
+
+(defun closql--intern-unbound (row)
+ (mapcar (lambda (elt)
+ (if (eq elt eieio-unbound) 'eieio-unbound elt))
+ row))
+
+(defun closql--extern-unbound (row)
+ (mapcar (lambda (elt)
+ (if (eq elt 'eieio-unbound) eieio-unbound elt))
+ row))
+
+(defun closql--coerce (object type)
+ (cl-coerce (if (and (fboundp 'recordp)
+ (recordp object))
+ (let* ((len (length object))
+ (vec (make-vector len -1)))
+ (dotimes (i len)
+ (aset vec i (aref object i)))
+ vec)
+ object)
+ type))
+
+(cl-defmethod closql--abbrev-class ((class-tag symbol))
+ ;; This other method is only used for old-school eieio-class-tag--*.
+ (closql--abbrev-class (intern (substring (symbol-name class-tag) 17))))
+
+(cl-defmethod closql--abbrev-class ((class (subclass closql-object)))
+ (let ((name (symbol-name class))
+ (prefix (oref-default class closql-class-prefix))
+ (suffix (oref-default class closql-class-suffix)))
+ (intern (substring name
+ (if prefix (length prefix) 0)
+ (if suffix (- (length suffix)) nil)))))
+
+(cl-defmethod closql--expand-abbrev ((class (subclass closql-object)) abbrev)
+ (intern (concat (and (not (fboundp 'record)) "eieio-class-tag--")
+ (oref-default class closql-class-prefix)
+ (symbol-name abbrev)
+ (oref-default class closql-class-suffix))))
+
+(defun closql--where-equal (value offset)
+ (vector
+ (cons 'and
+ (mapcar (lambda (v)
+ (if v
+ (list '=
+ (intern (format "$i%i" (cl-incf offset)))
+ (intern (format "$s%i" (cl-incf offset))))
+ (list 'isnull
+ (intern (format "$i%i" (1- (cl-incf offset 2)))))))
+ value))))
+
+(defun closql-where-class-in (classes)
+ (vconcat
+ (mapcar 'closql--abbrev-class
+ (cl-mapcan (lambda (sym)
+ (let ((str (symbol-name sym)))
+ (cond ((string-match-p "--eieio-childp\\'" str)
+ (closql--list-subclasses
+ (intern (substring str 0 -14)) nil))
+ ((string-match-p "-p\\'" str)
+ (list (intern (substring str 0 -2))))
+ (t
+ (list sym)))))
+ (if (listp classes) classes (list classes))))))
+
+(defun closql--list-subclasses (class &optional result)
+ (unless (class-abstract-p class)
+ (cl-pushnew class result))
+ (dolist (child (eieio--class-children (cl--find-class class)))
+ (setq result (closql--list-subclasses child result)))
+ result)
+
+(cl-defmethod closql--list-subabbrevs ((class (subclass closql-object))
+ &optional wildcards)
+ (cl-labels
+ ((types
+ (class)
+ (let ((children (eieio--class-children (cl--find-class class)))
+ ;; An abstract base-class may violate its own naming rules.
+ (abbrev (ignore-errors (closql--abbrev-class class))))
+ (nconc (and (not (class-abstract-p class)) (list abbrev))
+ (and wildcards children
+ (list (if abbrev (intern (format "%s*" abbrev)) '*)))
+ (cl-mapcan #'types children)))))
+ (sort (types class) #'string<)))
+
+(cl-defmethod closql--set-object-class ((db closql-database) obj class)
+ (let* ((table (oref-default obj closql-table))
+ (key (oref-default obj closql-primary-key))
+ (id (closql--oref obj key)))
+ (aset obj 0
+ (if (fboundp 'record)
+ (aref (copy-sequence
+ (eieio--class-default-object-cache
+ (eieio--class-object class)))
+ 0)
+ (intern (format "eieio-class-tag--%s" class))))
+ (emacsql db [:update $i1 :set (= class $s2) :where (= $i3 $s4)]
+ table
+ (closql--abbrev-class class)
+ key id)))
+
+;;; Experimental
+
+(defun closql--iref (obj slot)
+ (pcase-let*
+ ((db (closql--oref obj 'closql-database))
+ (`(,d-table ,i-table)
+ (closql--slot-tables obj slot))
+ (d-cols (closql--table-columns db d-table))
+ (i-cols (closql--table-columns db i-table))
+ (obj-id (closql--oref obj (oref-default obj closql-primary-key))))
+ (emacsql db (format "\
+SELECT DISTINCT %s FROM %s AS d, %s AS i
+WHERE d.%s = i.%s AND d.%s = '%S';"
+ (mapconcat (apply-partially #'format "i.%s")
+ (cddr i-cols) ", ")
+ d-table
+ i-table
+ (cadr d-cols)
+ (cadr i-cols)
+ (car d-cols)
+ obj-id))))
+
+(defun closql--slot-tables (obj slot)
+ (let ((tbls (closql--slot-get obj slot :closql-table)))
+ (unless (listp tbls)
+ (error "%s isn't an indirect slot" slot))
+ (pcase-let ((`(,d-tbl ,i-tbl) tbls))
+ (list (intern (replace-regexp-in-string "-" "_" (symbol-name d-tbl)))
+ (intern (replace-regexp-in-string "-" "_" (symbol-name i-tbl)))))))
+
+;;; Utilities
+
+(defun closql-format (object string &rest slots)
+ "Format a string out of a format STRING and an OBJECT's SLOTS.
+
+STRING is a format-string like for `format'. OBJECT is an Eieio
+object and SLOTS are slots of that object, their values are used
+like `format' uses its OBJECTS arguments (which are unrelated to
+this function's OBJECT argument, they just have similar names).
+
+While this function does not have much to do with the purpose of
+`closql', it is being defined here anyway because Eieio does not
+define a similar function under a more appropriate name such as
+`eieio-format'."
+ (apply #'format string
+ (mapcar (lambda (slot) (eieio-oref object slot)) slots)))
+
+;;; _
+(provide 'closql)
+;; Local Variables:
+;; indent-tabs-mode: nil
+;; End:
+;;; closql.el ends here
diff --git a/packages/cmake-ide-20181023.1430.el b/packages/cmake-ide-20190731.1009.el
similarity index 90%
rename from packages/cmake-ide-20181023.1430.el
rename to packages/cmake-ide-20190731.1009.el
index 72a3d57..0b7f4d5 100644
--- a/packages/cmake-ide-20181023.1430.el
+++ b/packages/cmake-ide-20190731.1009.el
@@ -4,7 +4,7 @@
;; Author: Atila Neves
;; Version: 0.6
-;; Package-Version: 20181023.1430
+;; Package-Version: 20190731.1009
;; Package-Requires: ((emacs "24.4") (cl-lib "0.5") (seq "1.11") (levenshtein "0") (s "1.11.0"))
;; Keywords: languages
;; URL: http://github.com/atilaneves/cmake-ide
@@ -226,6 +226,16 @@ the closest possible matches available in cppcheck."
"Whether or not to try all unique compiler flags for header files."
)
+(defvar cmake-sentinel-flag
+ nil
+ "One interactive execution is allowed at the same time."
+ )
+
+(defvar cmake-temp-project-dir
+ nil
+ "The project dir is kept while the sentinel works."
+ )
+
(defun cide--make-hash-table ()
"Make a hash table with equal for the test function."
(make-hash-table :test #'equal))
@@ -290,11 +300,11 @@ the closest possible matches available in cppcheck."
"Run CMake if the compilation database JSON file is not found."
(interactive)
(when (cide--locate-project-dir)
- (cmake-ide-maybe-start-rdm)
- (if (cide--need-to-run-cmake)
- (cmake-ide-run-cmake)
- (progn
- (cide--add-file-to-buffer-list)
+ (cmake-ide-maybe-start-rdm)
+ (if (cide--need-to-run-cmake)
+ (cmake-ide-run-cmake)
+ (progn
+ (cide--add-file-to-buffer-list)
(cide--on-cmake-finished)))))
(defun cide--add-file-to-buffer-list ()
@@ -320,23 +330,29 @@ This works by calling cmake in a temporary directory (or `cmake-ide-build-dir')
and parsing the JSON file deposited there with the compiler
flags."
(interactive)
- (when (buffer-file-name) ; if we call cmake-ide-run-cmake from a scatch buffer, do nothing
- (when (file-readable-p (buffer-file-name)) ; new files need not apply
- (save-some-buffers 1)
- (let ((project-dir (cide--locate-project-dir)))
- (if project-dir ; no point if it's not a CMake project
- ;; register this buffer to be either a header or source file
- ;; waiting for results
- (progn
- (cide--add-file-to-buffer-list)
- ;; run cmake only if project dir contains a CMakeLists.txt file.
- (if (cide--locate-cmakelists)
- (let ((cmake-dir (cide--build-dir)))
- (let ((default-directory cmake-dir))
- (cide--run-cmake-impl project-dir cmake-dir)
- (cide--register-callback)))
- (cide--message "No CMakeLists.txt found in project dir, skip cmake run.")))
- (cide--message "try to run cmake on a non cmake project [%s]" default-directory))))))
+ (if (not cmake-sentinel-flag)
+ (when (buffer-file-name) ; if we call cmake-ide-run-cmake from a scatch buffer, do nothing
+ (when (file-readable-p (buffer-file-name)) ; new files need not apply
+ (save-some-buffers 1)
+ (let ((project-dir (cide--locate-project-dir)))
+ (if project-dir ; no point if it's not a CMake project
+ (if (not (file-exists-p (expand-file-name "CMakeCache.txt" project-dir)))
+ ;; register this buffer to be either a header or source file
+ ;; waiting for results
+ (progn
+ (cide--add-file-to-buffer-list)
+ ;; run cmake only if project dir contains a CMakeLists.txt file.
+ (if (cide--locate-cmakelists)
+ (let ((cmake-dir (cide--build-dir)))
+ (let ((default-directory cmake-dir))
+ (cide--run-cmake-impl project-dir cmake-dir)
+ (cide--register-callback)
+ (setq cmake-temp-project-dir project-dir)
+ (setq cmake-sentinel-flag t)))
+ (cide--message "No CMakeLists.txt found in project dir, skip cmake run.")))
+ (cide--message "CMakeCache.txt found in project dir, skip cmake run."))
+ (cide--message "try to run cmake on a non cmake project [%s]" default-directory)))))
+ (cide--message "Another cmake is already running, skip cmake run.")))
(defun cide--message (str &rest vars)
@@ -350,7 +366,9 @@ This works by calling cmake in a temporary directory (or `cmake-ide-build-dir')
(cide--message "Finished running CMake")
(if (= 0 (process-exit-status process)) ; only perform post cmake operation on success.
(cide--on-cmake-finished)
- (cide--message "CMake failed, see *cmake* for details.")))))
+ (cide--message "CMake failed, see *cmake* for details."))
+ (setq cmake-sentinel-flag nil)
+ (setq cmake-temp-project-dir nil))))
(defun cide--register-a-callback (callback)
"Register CALLBACK to be called when CMake finishes running."
@@ -370,14 +388,16 @@ This works by calling cmake in a temporary directory (or `cmake-ide-build-dir')
(defun cmake-ide-load-db ()
"Load compilation DB and set flags for current buffer."
(interactive)
- (when (cide--locate-project-dir)
- (cide--message "cmake-ide-load-db for file %s" (buffer-file-name))
- (cmake-ide-maybe-start-rdm)
- (let* ((file-name buffer-file-name)
- (buffers (list (current-buffer)))
- (cide--src-buffers (if (cide--is-src-file file-name) buffers nil))
- (cide--hdr-buffers (if (cide--is-src-file file-name) nil buffers)))
- (cide--on-cmake-finished))))
+ (if (not cmake-sentinel-flag)
+ (when (cide--locate-project-dir)
+ (cide--message "cmake-ide-load-db for file %s" (buffer-file-name))
+ (cmake-ide-maybe-start-rdm)
+ (let* ((file-name buffer-file-name)
+ (buffers (list (current-buffer)))
+ (cide--src-buffers (if (cide--is-src-file file-name) buffers nil))
+ (cide--hdr-buffers (if (cide--is-src-file file-name) nil buffers)))
+ (cide--on-cmake-finished)))
+ (cide--message "cmake is running, skip run.")))
(defvar cide--rdm-executable nil
"Rdm executable location path.")
@@ -568,13 +588,15 @@ the object file's name just above."
ret-file-name)))
-(defun cide--get-string-from-file (path)
- "Return PATH's file content."
- (if (file-exists-p path)
- (with-temp-buffer
- (insert-file-contents path)
- (buffer-string))
- ""))
+(defun cide--read-file (path)
+ "Return PATH's file content as a string."
+ (if (stringp path)
+ (if (file-exists-p path)
+ (with-temp-buffer
+ (insert-file-contents path)
+ (buffer-string))
+ "")
+ (cide--message "cide--read-file ERROR: %s is not a string" path)))
(defun cide--set-flags-for-hdr-from-all-flags (idb buffer sys-includes)
"Use IDB to set flags from a header BUFFER with SYS-INCLUDES from all project source files."
@@ -663,26 +685,29 @@ the object file's name just above."
(setq flycheck-clang-includes includes)
(setq flycheck-gcc-includes includes)
(flycheck-clear)
- (run-at-time "0.5 sec" nil 'flycheck-buffer)))))
+ (when (bound-and-true-p flycheck-mode)
+ (run-at-time "0.5 sec" nil 'flycheck-buffer))))))
(defun cmake-ide-delete-file ()
"Remove file connected to current buffer and kill buffer, then run CMake."
(interactive)
- (when (cide--locate-project-dir)
- (if (cide--build-dir)
- (let ((filename (buffer-file-name))
- (buffer (current-buffer))
- (name (buffer-name)))
- (if (not (and filename (file-exists-p filename)))
- (error "Buffer '%s' is not visiting a file!" name)
- (when (yes-or-no-p "Are you sure you want to remove this file? ")
- (delete-file filename)
- (kill-buffer buffer)
- (let ((project-dir (cide--locate-project-dir)))
- (when (and project-dir (file-exists-p (expand-file-name "CMakeLists.txt" project-dir)))
- (cide--run-cmake-impl project-dir (cide--build-dir)))
- (cide--message "File '%s' successfully removed" filename)))))
- (error "Not possible to delete a file without setting cmake-ide-build-dir"))))
+ (if (not cmake-sentinel-flag)
+ (when (cide--locate-project-dir)
+ (if (cide--build-dir)
+ (let ((filename (buffer-file-name))
+ (buffer (current-buffer))
+ (name (buffer-name)))
+ (if (not (and filename (file-exists-p filename)))
+ (error "Buffer '%s' is not visiting a file!" name)
+ (when (yes-or-no-p "Are you sure you want to remove this file? ")
+ (delete-file filename)
+ (kill-buffer buffer)
+ (let ((project-dir (cide--locate-project-dir)))
+ (when (and project-dir (file-exists-p (expand-file-name "CMakeLists.txt" project-dir)))
+ (cide--run-cmake-impl project-dir (cide--build-dir)))
+ (cide--message "File '%s' successfully removed" filename)))))
+ (error "Not possible to delete a file without setting cmake-ide-build-dir")))
+ (cide--message "cmake is running, skip run.")))
(defun cide--run-cmake-impl (project-dir cmake-dir)
@@ -692,7 +717,8 @@ the object file's name just above."
(cide--message "Running cmake for src path %s in build path %s" project-dir cmake-dir)
(apply 'start-process (append (list "cmake" "*cmake*" cmake-ide-cmake-command)
(cide--cmake-args)
- (list "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON" project-dir))))))
+ (list "-DCMAKE_EXPORT_COMPILE_COMMANDS=ON"
+ "-B" "." "-S" project-dir))))))
(defun cide--project-key ()
@@ -792,7 +818,7 @@ Return nil for non-CMake project."
(defun cide--get-file-params (response-file)
"Get file parameters from a response file given as compilation argument."
- (replace-regexp-in-string "\\\n" " " (cide--get-string-from-file (expand-file-name response-file (cide--build-dir)))))
+ (replace-regexp-in-string "\\\n" " " (cide--read-file (expand-file-name response-file (cide--build-dir)))))
(defun cide--quote-if-spaces (str)
"Add quotes to STR if it has spaces."
@@ -997,7 +1023,8 @@ CMakeLists.txt file. Return nil if not found."
"Return the path to the project directory."
(let ((cmakelists (cide--locate-cmakelists)))
;; if project dir is set by the user, use this value.
- (or (and (cide--project-dir-var) (expand-file-name (cide--project-dir-var)))
+ (or cmake-temp-project-dir
+ (and (cide--project-dir-var) (expand-file-name (cide--project-dir-var)))
(and cmakelists (file-name-directory cmakelists)) ; else try to use cmakelists dir
nil ; if no CMakeLists.txt nor project-dir set, return nil and prevent cmake-ide to do anything else
)))
@@ -1012,7 +1039,7 @@ computed IDBs, and if none are found actually performs the conversion."
(cide--message "Non-existent compilation DB file %s" (cide--comp-db-file-name))
(progn
(cide--message "Converting JSON CDB %s to IDB" (cide--comp-db-file-name))
- (setq idb (cide--cdb-json-string-to-idb (cide--get-string-from-file (cide--comp-db-file-name))))
+ (setq idb (cide--cdb-json-string-to-idb (cide--read-file (cide--comp-db-file-name))))
(puthash (cide--build-dir) idb cide--cache-dir-to-idb)
(puthash (cide--build-dir) (cide--hash-file (cide--comp-db-file-name)) cide--cache-dir-to-cdb-hash)
(remhash (cide--build-dir) cide--cache-irony-dirs))))
@@ -1029,7 +1056,7 @@ computed IDBs, and if none are found actually performs the conversion."
(defun cide--hash-file (file-name)
"Calculate the hash of FILE-NAME."
- (secure-hash 'md5 (cide--get-string-from-file file-name)))
+ (secure-hash 'md5 (cide--read-file file-name)))
(defun cide--cdb-json-string-to-idb (json-str)
"Tranform JSON-STR into an IDB.
@@ -1091,7 +1118,7 @@ The IDB is hash mapping files to all JSON objects (usually only one) in the CDB.
(let* ((base-name (file-name-nondirectory file-name))
(src-file-name (cide--idb-obj-get obj 'file)))
(if (string-match (concat "# *include +[\"<] *" base-name)
- (cide--get-string-from-file src-file-name))
+ (cide--read-file src-file-name))
src-file-name
nil)))
@@ -1135,24 +1162,26 @@ The IDB is hash mapping files to all JSON objects (usually only one) in the CDB.
(defun cmake-ide-compile ()
"Compile the project."
(interactive)
- (when (cide--locate-project-dir)
- (if (cide--build-dir)
- (let ((compile-command (cide--get-compile-command (cide--build-dir))))
- ;; compile-command could be nil, if so prompt for compile command (i.e. in a non-cmake project ...)
- (if compile-command
- (if (functionp compile-command)
- (funcall compile-command)
- (compile compile-command))
- (call-interactively compile-command)))
- (call-interactively compile-command))
- (cide--run-rc)))
+ (if (not cmake-sentinel-flag)
+ (when (cide--locate-project-dir)
+ (if (cide--build-dir)
+ (let ((compile-command (cide--get-compile-command (cide--build-dir))))
+ ;; compile-command could be nil, if so prompt for compile command (i.e. in a non-cmake project ...)
+ (if compile-command
+ (if (functionp compile-command)
+ (funcall compile-command)
+ (compile compile-command))
+ (call-interactively compile-command)))
+ (call-interactively compile-command))
+ (cide--run-rc))
+ (cide--message "cmake is running, skip run.")))
(defun cide--get-compile-command (dir)
"Return the compile command to use for DIR."
(cond (cmake-ide-compile-command cmake-ide-compile-command)
- ((file-exists-p (expand-file-name "build.ninja" dir)) (concat cmake-ide-ninja-command " -C " dir))
- ((file-exists-p (expand-file-name "Makefile" dir)) (concat cmake-ide-make-command " -C " dir))
+ ((file-exists-p (expand-file-name "build.ninja" dir)) (concat cmake-ide-ninja-command " -C " (shell-quote-argument dir)))
+ ((file-exists-p (expand-file-name "Makefile" dir)) (concat cmake-ide-make-command " -C " (shell-quote-argument dir)))
(t nil)))
@@ -1175,7 +1204,7 @@ The IDB is hash mapping files to all JSON objects (usually only one) in the CDB.
(sleep-for 0.8)
(set-process-query-on-exit-flag rdm-process nil)))))))
-
+
(defun cide--process-running-p (name)
"If a process called NAME is running or not."
(or (get-process name) (cide--system-process-running-p name)))
diff --git a/packages/cmake-mode-20180709.1426.el b/packages/cmake-mode-20190710.1319.el
similarity index 97%
rename from packages/cmake-mode-20180709.1426.el
rename to packages/cmake-mode-20190710.1319.el
index 25d6f5a..838cab0 100644
--- a/packages/cmake-mode-20180709.1426.el
+++ b/packages/cmake-mode-20190710.1319.el
@@ -1,5 +1,7 @@
;;; cmake-mode.el --- major-mode for editing CMake sources
-;; Package-Version: 20180709.1426
+
+;; Package-Requires: ((emacs "24.1"))
+;; Package-Version: 20190710.1319
; Distributed under the OSI-approved BSD 3-Clause License. See accompanying
; file Copyright.txt or https://cmake.org/licensing for details.
@@ -225,17 +227,11 @@ the indentation. Otherwise it retains the same position on the line"
;;
(defvar cmake-mode-hook nil)
-;------------------------------------------------------------------------------
-
-;; For compatibility with Emacs < 24
-(defalias 'cmake--parent-mode
- (if (fboundp 'prog-mode) 'prog-mode 'fundamental-mode))
-
;;------------------------------------------------------------------------------
;; Mode definition.
;;
;;;###autoload
-(define-derived-mode cmake-mode cmake--parent-mode "CMake"
+(define-derived-mode cmake-mode prog-mode "CMake"
"Major mode for editing CMake source files."
; Setup font-lock mode.
diff --git a/packages/color-identifiers-mode-20181011.2114.el b/packages/color-identifiers-mode-20190805.1455.el
similarity index 99%
rename from packages/color-identifiers-mode-20181011.2114.el
rename to packages/color-identifiers-mode-20190805.1455.el
index 0bcec3e..6a94cbf 100644
--- a/packages/color-identifiers-mode-20181011.2114.el
+++ b/packages/color-identifiers-mode-20190805.1455.el
@@ -4,7 +4,7 @@
;; Author: Ankur Dave
;; Url: https://github.com/ankurdave/color-identifiers-mode
-;; Package-Version: 20181011.2114
+;; Package-Version: 20190805.1455
;; Created: 24 Jan 2014
;; Version: 1.1
;; Keywords: faces, languages
@@ -45,6 +45,9 @@
(defgroup color-identifiers nil "Color identifiers based on their names."
:group 'faces)
+(defvar color-identifiers:timer nil
+ "Timer for running `color-identifiers:refresh'.")
+
;;;###autoload
(define-minor-mode color-identifiers-mode
"Color the identifiers in the current buffer based on their names."
@@ -572,9 +575,6 @@ For Emacs Lisp support within color-identifiers-mode."
;;; PACKAGE INTERNALS ==========================================================
-(defvar color-identifiers:timer nil
- "Timer for running `color-identifiers:refresh'.")
-
(defvar color-identifiers:colors nil
"List of generated hex colors for internal use.")
@@ -767,7 +767,7 @@ evaluates to true."
(and flface-prop (memq flface-prop identifier-faces)))
(get-text-property (point) 'color-identifiers:fontified)))
(goto-char (next-property-change (point) nil limit))
- (if (not (and (looking-back identifier-context-re nil)
+ (if (not (and (looking-back identifier-context-re (line-beginning-position))
(or (not identifier-exclusion-re) (not (looking-at identifier-exclusion-re)))
(looking-at identifier-re)))
(progn
diff --git a/packages/color-theme-sanityinc-solarized-20181021.2055.tar b/packages/color-theme-sanityinc-solarized-20190206.59.tar
similarity index 89%
rename from packages/color-theme-sanityinc-solarized-20181021.2055.tar
rename to packages/color-theme-sanityinc-solarized-20190206.59.tar
index 0cffd3a..ebb1004 100644
Binary files a/packages/color-theme-sanityinc-solarized-20181021.2055.tar and b/packages/color-theme-sanityinc-solarized-20190206.59.tar differ
diff --git a/packages/color-theme-sanityinc-tomorrow-20181024.1728.tar b/packages/color-theme-sanityinc-tomorrow-20190819.2324.tar
similarity index 89%
rename from packages/color-theme-sanityinc-tomorrow-20181024.1728.tar
rename to packages/color-theme-sanityinc-tomorrow-20190819.2324.tar
index e652429..3f564d3 100644
Binary files a/packages/color-theme-sanityinc-tomorrow-20181024.1728.tar and b/packages/color-theme-sanityinc-tomorrow-20190819.2324.tar differ
diff --git a/packages/common-lisp-snippets-20180226.1523.tar b/packages/common-lisp-snippets-20180226.1523.tar
index 15238d3..8cb1ee9 100644
Binary files a/packages/common-lisp-snippets-20180226.1523.tar and b/packages/common-lisp-snippets-20180226.1523.tar differ
diff --git a/packages/company-20181105.2312.tar b/packages/company-20190821.658.tar
similarity index 95%
rename from packages/company-20181105.2312.tar
rename to packages/company-20190821.658.tar
index 8602049..2f78d7d 100644
Binary files a/packages/company-20181105.2312.tar and b/packages/company-20190821.658.tar differ
diff --git a/packages/company-ansible-20180701.1813.tar b/packages/company-ansible-20190301.2111.tar
similarity index 79%
rename from packages/company-ansible-20180701.1813.tar
rename to packages/company-ansible-20190301.2111.tar
index 911ad0c..3dfaaba 100644
Binary files a/packages/company-ansible-20180701.1813.tar and b/packages/company-ansible-20190301.2111.tar differ
diff --git a/packages/company-cabal-20170917.1317.tar b/packages/company-cabal-20170917.1317.tar
index fef1aeb..6a69626 100644
Binary files a/packages/company-cabal-20170917.1317.tar and b/packages/company-cabal-20170917.1317.tar differ
diff --git a/packages/company-coq-20181107.2136.tar b/packages/company-coq-20190425.1851.tar
similarity index 83%
rename from packages/company-coq-20181107.2136.tar
rename to packages/company-coq-20190425.1851.tar
index 4f104c5..3a753cd 100644
Binary files a/packages/company-coq-20181107.2136.tar and b/packages/company-coq-20190425.1851.tar differ
diff --git a/packages/company-dcd-20170516.910.el b/packages/company-dcd-20190116.256.el
similarity index 61%
rename from packages/company-dcd-20170516.910.el
rename to packages/company-dcd-20190116.256.el
index e34952f..15cbc51 100644
--- a/packages/company-dcd-20170516.910.el
+++ b/packages/company-dcd-20190116.256.el
@@ -1,8 +1,8 @@
-;;; company-dcd.el --- Company backend for Dlang using DCD.
+;;; company-dcd.el --- Company backend for Dlang using DCD. -*- lexical-binding: t -*-
;; Author: tsukimizake
;; Version: 0.1
-;; Package-Version: 20170516.910
+;; Package-Version: 20190116.256
;; Package-Requires: ((company "0.9") (flycheck-dmd-dub "0.7") (yasnippet "0.8") (popwin "0.7") (cl-lib "0.5") (ivy "20160804.326"))
;; Keywords: languages
;; URL: http://github.com/tsukimizake/company-dcd
@@ -71,7 +71,7 @@ You can't put port number flag here. Set `company-dcd--server-port' instead."
(defconst company-dcd--server-buffer-name "*dcd-server*")
(defconst company-dcd--error-buffer-name "*dcd-error*")
-(defconst company-dcd--output-buffer-name "*dcd-output*")
+(defconst company-dcd--output-buffer-name-template "*dcd-output-%d*")
(defconst company-dcd--documentation-buffer-name "*dcd-document*")
(defcustom company-dcd-server-executable
@@ -80,23 +80,41 @@ You can't put port number flag here. Set `company-dcd--server-port' instead."
:group 'company-dcd
:type 'file)
-(defcustom company-dcd--server-port 9166
- "Port number of dcd-server. The default is 9166."
- :group 'company-dcd)
+(defcustom company-dcd-server-address nil
+ "Port number / UNIX socket path of dcd-server.
+
+Possible values:
+- nil - use DCD's default connection method
+- a number - use this TCP port (DCD's default is 9166)
+- a string - use this UNIX socket path
+
+The default is nil."
+ :group 'company-dcd
+ :type '(choice
+ (const :tag "Use platform default" nil)
+ (integer :tag "Use this TCP port number")
+ (file :tag "Use this UNIX socket path")))
+
+(define-obsolete-variable-alias 'company-dcd--server-port 'company-dcd-server-address)
(defvar company-dcd--delay-after-kill-process 200
"Duration to wait after killing the server process, in milliseconds.
If `company-dcd-restart-server' does not work correctly, please set this variable to a bigger number.")
-(defvar company-dcd--version nil
- "Version of dcd-server. This variable is automatically set when company-dcd--get-version is called.")
+(defvar company-dcd--counter 0
+ "Client request counter. Incremented to uniquely identify requests.")
(defcustom company-dcd--ignore-template-argument nil
"If non-nil, ignore template argument of calltip candidate."
- :group 'company-dcd)
+ :group 'company-dcd
+ :type 'boolean)
;; Server management functions
+(defun company-dcd--error (msg)
+ "Signal a company-dcd error with the given MSG."
+ (error (concat "company-dcd error: " msg)))
+
(defun company-dcd-stop-server ()
"Stop dcd-server manually. You shouldn't need to call this function directly.
@@ -104,17 +122,27 @@ If you need to restart the server, use `company-dcd-restart-server' instead."
(interactive)
(interrupt-process "dcd-server"))
+(defun company-dcd--server-address-flags ()
+ "Return the client/server command line flags indicating the server address."
+ (cond
+ ((null company-dcd-server-address) '())
+ ((numberp company-dcd-server-address)
+ (list "--tcp=true" "--port" (number-to-string company-dcd-server-address)))
+ ((stringp company-dcd-server-address)
+ (list "--tcp=false" "--socketFile" company-dcd-server-address))
+ (t
+ (error "Invalid value of company-dcd-server-address (%S)" company-dcd-server-address))))
+
(defun company-dcd--start-server ()
"Start dcd-server."
(unless (executable-find company-dcd-server-executable)
- (error "company-dcd error: dcd-server not found"))
+ (company-dcd--error "Could not find dcd-server"))
(let (buf args proc)
(setq buf (get-buffer-create company-dcd--server-buffer-name))
- (setq args (nconc (list company-dcd-server-executable
- "-p"
- (format "%s" company-dcd--server-port))
+ (setq args (nconc (list company-dcd-server-executable)
+ (company-dcd--server-address-flags)
company-dcd--flags))
(setq proc
(with-current-buffer buf (apply 'start-process "dcd-server" (current-buffer) args)))
@@ -137,32 +165,17 @@ If you need to restart the server, use `company-dcd-restart-server' instead."
(when (company-dcd--server-is-alive-p)
(company-dcd-stop-server)
(sleep-for 0 company-dcd--delay-after-kill-process))
- (company-dcd--start-server)
- (setq company-dcd--version nil))
-
-(defun company-dcd--get-version ()
- "Get the version of dcd-server. Cache the value to `company-dcd--version'."
- (if company-dcd--version
- company-dcd--version
- (progn
- (let ((str (company-dcd--call-process '("--version")))
- verstr)
- (unless str
- (error "company-dcd error: Error obtaining dcd-server version"))
- (string-match (rx "v" (submatch (* nonl)) (or "-" "\n")) str)
- (setq verstr (match-string 1 str))
- (setq company-dcd--version (string-to-number verstr))
- ))))
+ (company-dcd--start-server))
;; Output parsing functions
-(defun company-dcd--parse-output-for-completion ()
- "Parse dcd output from a completion query.
+(defun company-dcd--parse-output-for-completion (buffer)
+ "Parse dcd output from a completion query from BUFFER.
Return a list of matches, where each match is a string,
optionally with an attached `company-dcd--help' property
containing the completion kind."
- (with-current-buffer company-dcd--output-buffer-name
+ (with-current-buffer buffer
(goto-char (point-min))
(let ((pattern company-dcd--completion-pattern)
lines match detailed-info
@@ -184,68 +197,92 @@ containing the completion kind."
(rx (and (submatch (* nonl)) ": " (submatch (* nonl)) ": " (submatch (* nonl) eol)))
"If this regexp matches the first line of dcd-client output, it indicates an error message.")
-(defun company-dcd--handle-error (res args)
- "Display error message from a failed dcd-client invocation with exit code RES and arguments ARGS."
+(defun company-dcd--handle-error (outbuf err args)
+ "Display error message from a failed dcd-client invocation with buffer OUTBUF, error ERR, and arguments ARGS."
(let* ((errbuf (get-buffer-create company-dcd--error-buffer-name))
- (outbuf (get-buffer company-dcd--output-buffer-name))
(cmd (concat company-dcd-client-executable " " (mapconcat 'identity args " ")))
(errstr
(with-current-buffer outbuf
(goto-char (point-min))
- (re-search-forward company-dcd--error-message-regexp)
- (concat
- (match-string 2) " : " (match-string 3)))
- ))
+ (if (re-search-forward company-dcd--error-message-regexp nil t)
+ (concat
+ (match-string 2) " : " (match-string 3))
+ "(unknown)"))))
(with-current-buffer errbuf
(erase-buffer)
- (insert (current-time-string)
- "\n\"" cmd "\" failed."
- (format "\nError type is: %s\n" errstr)
- )
+ (insert (format
+ "%s\n\"%s\" failed (%s).\nError type is: %s\n\ndcd-client output:\n\n%s"
+ (current-time-string)
+ cmd
+ err
+ errstr
+ (with-current-buffer outbuf (buffer-string))))
(goto-char (point-min)))
(display-buffer errbuf)))
-(defun company-dcd--output-buf-string ()
- "Return contents of dcd-output buffer."
- (with-current-buffer company-dcd--output-buffer-name
- (buffer-string)))
-
;; Utility functions for process invocation
-(defun company-dcd--call-process (args)
- "Call dcd-client with ARGS and return output string.
+(defun company-dcd--call-process (args send-buffer callback)
+ "Asynchronously call dcd-client with ARGS. Invoke CALLBACK with results.
-The current buffer's contents is passed to dcd-client via stdin.
-\(The entire buffer is sent, even if narrowed.\)
+If SEND-BUFFER is non-nil, the current buffer's contents is
+passed to dcd-client via stdin. (The entire buffer is sent, even
+if narrowed.)
-Returns the output from dcd-client, or nil if an error occurred."
- (let ((buf (get-buffer-create company-dcd--output-buffer-name)))
+CALLBACK is invoked as (BUFFER), where BUFFER is the buffer
+holding the dcd-client output, or nil in case of error."
+ (let* ((index (cl-incf company-dcd--counter))
+ (buf (get-buffer-create (format company-dcd--output-buffer-name-template index))))
(with-current-buffer buf (erase-buffer))
(if (executable-find company-dcd-client-executable)
- ;; Execute dcd-client, get error code
- (let ((res (apply 'call-process-region 1 (1+ (buffer-size))
- company-dcd-client-executable nil buf nil args)))
- (with-current-buffer buf
- (if (eq 0 res)
- (buffer-string) ; Return output
- (company-dcd--handle-error res args)
- nil)))
-
- (message "company-dcd error: could not find dcd-client executable")
- nil)))
+ (let ((process (make-process
+ :name (format "dcd-client-%d" index)
+ :buffer buf
+ :stderr buf
+ :command (cons company-dcd-client-executable args)
+ :noquery t
+ :sentinel
+ (lambda (_process event)
+ (when callback
+ (if (equal event "finished\n")
+ (funcall callback buf)
+ (funcall callback nil)
+ (company-dcd--handle-error buf (string-trim event) args))
+ (setq callback nil)
+ (kill-buffer buf))))))
+ (when send-buffer
+ (process-send-region process 1 (1+ (buffer-size))))
+ (when (or send-buffer (process-live-p process))
+ (process-send-eof process)))
+ (message "company-dcd error: could not find dcd-client executable"))))
(defsubst company-dcd--cursor-position ()
"Get the current cursor position to pass to dcd-client."
(1- (position-bytes (point))))
+(defun company-dcd--word-char-p (char)
+ "Return t if CHAR is a D word char (part of an identifier), nil otherwise."
+ (member (char-syntax char) '(?w ?_)))
+
+(defun company-dcd--symbol-position ()
+ "Return a number representing a position of the symbol at point.
+
+The returned value is suitable for dcd-client queries which
+operate on complete symbols, such as --symbolLocation and --doc."
+ (let ((pos (company-dcd--cursor-position)))
+
+ ;; Work around https://github.com/Hackerpilot/DCD/issues/98
+ (if (and (not (company-dcd--word-char-p (char-before (point))))
+ (company-dcd--word-char-p (char-after (point))))
+ (1+ pos)
+ pos)))
+
(defun company-dcd--build-args (&optional pos)
"Build the argument list to pass to dcd-client.
Optionally, pass POS as the --cursorPos argument if non-nil."
(nconc
- (list
- "--port"
- (format "%s" company-dcd--server-port))
+ (company-dcd--server-address-flags)
(when pos
(list
(concat "-I" default-directory)
@@ -258,12 +295,17 @@ Optionally, pass POS as the --cursorPos argument if non-nil."
;; Interface functions to company-mode.
-(defun company-dcd--get-candidates ()
- "Retrieve ordinary auto-completion candidates."
+(defun company-dcd--get-candidates (callback)
+ "Retrieve ordinary auto-completion candidates.
+
+Invoke CALLBACK with candidates, or nil in case of error."
(unless (company-dcd--in-string/comment)
- (when (company-dcd--call-process
- (company-dcd--build-args (company-dcd--cursor-position)))
- (company-dcd--parse-output-for-completion))))
+ (company-dcd--call-process
+ (company-dcd--build-args (company-dcd--cursor-position))
+ t
+ (lambda (buf)
+ (funcall callback
+ (when buf (company-dcd--parse-output-for-completion buf)))))))
(defun company-dcd--documentation (item)
"Return a short documentation string of ITEM.
@@ -297,7 +339,9 @@ highlighted. Currently this returns a string describing the item's kind."
(defun company-dcd--action (lastcompl)
"Post-completion action callback.
-Used to display the argument list (calltips)."
+Used to display the argument list (calltips).
+
+LASTCOMPL is the last completion, as received from company."
;; Q: Why run-with-timer?
;; A: See https://github.com/company-mode/company-mode/issues/320
(let ((candidate-type (company-dcd--get-help lastcompl)))
@@ -321,32 +365,42 @@ Used to display the argument list (calltips)."
(defvar company-dcd-mode nil)
-(defun company-dcd (command &optional arg &rest ignored)
- "The `company-mode' backend callback for DCD."
+(defun company-dcd (command &optional arg &rest _ignored)
+ "The `company-mode' backend callback for DCD.
+
+COMMAND and ARG are the completion command and arguments."
(interactive (list 'interactive))
(cl-case command
(interactive (company-begin-backend 'company-dcd))
(prefix (and company-dcd-mode (company-grab-symbol)))
- (candidates (company-dcd--get-candidates))
+ (candidates (cons :async #'company-dcd--get-candidates))
(annotation (format " %s" (company-dcd--get-help arg)))
(meta (company-dcd--documentation arg))
(post-completion (company-dcd--action arg))
- (doc-buffer (company-dcd--get-completion-documentation arg))
- (location (company-dcd--get-completion-location arg))))
+ (doc-buffer (cons :async (lambda (callback) (company-dcd--get-completion-documentation arg callback))))
+ (location (cons :async (lambda (callback) (company-dcd--get-completion-location arg callback))))))
;; Function calltip expansion with yasnippet
-(defun company-dcd--get-calltip-candidates ()
- "Return calltip completion candidates for the D symbol at point.
+(defun company-dcd--get-calltip-candidates (callback)
+ "Get calltip completion candidates for the D symbol at point.
The cursor must be at the end of a D symbol.
-When the symbol is not a function, return nil."
- (let ((buf (get-buffer-create company-dcd--output-buffer-name)))
- (when (company-dcd--call-process-for-calltips)
- (with-current-buffer buf (company-dcd--parse-calltips)))))
+When the symbol is not a function, return nil.
+
+CALLBACK is invoked with the parsed calltips."
+ (company-dcd--call-process-for-calltips
+ (lambda (buf)
+ (funcall
+ callback
+ (when buf
+ (with-current-buffer buf
+ (company-dcd--parse-calltips)))))))
-(defun company-dcd--call-process-for-calltips ()
- "Call process to get calltips of the function at point."
+(defun company-dcd--call-process-for-calltips (callback)
+ "Call process to get calltips of the function at point.
+
+CALLBACK is invoked with the result buffer."
(let ((src (buffer-string))
(pt (point)))
(with-temp-buffer
@@ -357,7 +411,8 @@ When the symbol is not a function, return nil."
(backward-char 2)
(company-dcd--call-process
- (company-dcd--build-args (company-dcd--cursor-position))))))
+ (company-dcd--build-args (company-dcd--cursor-position))
+ t callback))))
(defconst company-dcd--normal-calltip-pattern
@@ -365,14 +420,15 @@ When the symbol is not a function, return nil."
"Regexp to parse calltip completion.
\\1 is function return type (if exists) and name, and \\2 is args.")
(defconst company-dcd--template-pattern (rx (submatch (* nonl)) (submatch "(" (*? nonl) ")") (submatch "(" (* nonl)")"))
- "Regexp to parse template calltips.
+ "Regexp to parse template calltips.
\\1 is function return type (if exists) and name, \\2 is template args, and \\3 is args.")
(defconst company-dcd--calltip-pattern
(rx (or (and bol (* nonl) "(" (* nonl) ")" eol)
(and bol (* nonl) "(" (*? nonl) ")" "(" (* nonl)")" eol))))
(defcustom company-dcd--ignore-template-argument t
"If non-nil, ignore template argument on calltip expansion."
- :group 'company-dcd)
+ :group 'company-dcd
+ :type 'boolean)
(defsubst company-dcd--cleanup-function-candidate (s)
"Helper function for parsing calltips.
@@ -448,14 +504,14 @@ Returns a list of calltip candidates."
(if (company-dcd--candidate-is-template-p match)
(progn
(string-match company-dcd--template-pattern match)
- (add-to-list 'lines (company-dcd--cleanup-function-candidate (format "%s%s" (match-string 1 match) (match-string 3 match)))) ;remove template argument
+ (push (company-dcd--cleanup-function-candidate (format "%s%s" (match-string 1 match) (match-string 3 match))) lines) ;remove template argument
(unless company-dcd--ignore-template-argument
(string-match company-dcd--template-pattern match)
- (add-to-list 'lines (company-dcd--cleanup-template-candidate (format "%s!%s%s" (match-string 1 match) (match-string 2 match) (match-string 3 match))))) ; candidate with template argument
+ (push (company-dcd--cleanup-template-candidate (format "%s!%s%s" (match-string 1 match) (match-string 2 match) (match-string 3 match))) lines)) ; candidate with template argument
)
(progn
(string-match company-dcd--normal-calltip-pattern match)
- (add-to-list 'lines (company-dcd--cleanup-function-candidate (format "%s%s" (match-string 1 match) (match-string 2 match))))) ; when it was not template argument
+ (push (company-dcd--cleanup-function-candidate (format "%s%s" (match-string 1 match) (match-string 2 match))) lines)) ; when it was not template argument
))
lines
))
@@ -477,7 +533,8 @@ Returns a list of calltip candidates."
(defun company-dcd--calltip-action (lastcompl)
"Post-completion callback: format and insert the calltip using yasnippet.
-This function should be called at *dcd-output* buf."
+
+LASTCOMPL is the last completion, as received from company."
(let* ((end (point))
(arg-beg (save-excursion
(backward-sexp)
@@ -499,23 +556,26 @@ This function should be called at *dcd-output* buf."
(setq res (format "%s%s" (company-dcd--format-calltips template-args) res))))
(yas-expand-snippet res)))
-(defun company-dcd--calltip-completion-available ()
- (if (company-dcd--get-calltip-candidates)
- (company-grab-symbol)
- nil))
+(defun company-dcd--calltip-completion-available (callback)
+ "`prefix' implementation for company-dcd calltips \"backends\".
+
+Invoke CALLBACK with prefix, or nil in case of error."
+ (company-dcd--get-calltip-candidates
+ (lambda (calltips)
+ (funcall callback (and calltips (company-grab-symbol))))))
-(defun company-dcd--calltips (command &optional arg &rest ignored)
- "Company \"backend\" for DCD calltip completion."
+(defun company-dcd--calltips (command &optional arg &rest _ignored)
+ "Company \"backend\" for DCD calltip completion.
+
+COMMAND and ARG are the completion command and arguments."
(interactive (list 'interactive))
(cl-case command
(interactive (company-begin-backend 'company-dcd--calltips))
- (prefix (company-dcd--calltip-completion-available))
- (candidates
- (company-dcd--get-calltip-candidates)
- )
+ (prefix (cons :async #'company-dcd--calltip-completion-available))
+ (candidates (cons :async #'company-dcd--get-calltip-candidates))
(post-completion (company-dcd--calltip-action arg))
- (doc-buffer (company-dcd--get-completion-documentation arg))
- (location (company-dcd--get-completion-location arg))))
+ (doc-buffer (cons :async (lambda (callback) (company-dcd--get-completion-documentation arg callback))))
+ (location (cons :async (lambda (callback) (company-dcd--get-completion-location arg callback))))))
;; Struct constructor calltip expansion
@@ -526,33 +586,41 @@ dcd-client outputs candidates which begin with \"this\" when completing struct c
(while (search-forward "this" nil t)
(replace-match struct-name)))
-(defun company-dcd--get-calltip-candidate-for-struct-constructor (lastcompl)
- "Almost the same as `company-dcd--get-calltip-candidates', but call `company-dcd--replace-this-to-struct-name' before parsing."
- (let ((buf (get-buffer-create company-dcd--output-buffer-name)))
- (company-dcd--call-process-for-calltips)
- (with-current-buffer buf
- (company-dcd--replace-this-to-struct-name lastcompl)
- (company-dcd--parse-calltips))
- ))
+(defun company-dcd--get-calltip-candidate-for-struct-constructor (lastcompl callback)
+ "`candidates' implementation for struct constructor \"backend\".
+
+Almost the same as `company-dcd--get-calltip-candidates', but
+call `company-dcd--replace-this-to-struct-name' before parsing.
+
+LASTCOMPL is the last completion, as received from company.
+Invoke CALLBACK with prefix, or nil in case of error."
+ (company-dcd--call-process-for-calltips
+ (lambda (buf)
+ (funcall
+ callback
+ (when buf
+ (with-current-buffer buf
+ (company-dcd--replace-this-to-struct-name lastcompl)
+ (company-dcd--parse-calltips)))))))
-(defun company-dcd--calltips-for-struct-constructor (command &optional arg &rest ignored)
- "Company \"backend\" for DCD struct/class constructor calltip completion."
+(defun company-dcd--calltips-for-struct-constructor (command &optional arg &rest _ignored)
+ "Company \"backend\" for DCD struct/class constructor calltip completion.
+
+COMMAND and ARG are the completion command and arguments."
(interactive (list 'interactive))
(cl-case command
(interactive (company-begin-backend 'company-dcd--calltips))
- (prefix (company-dcd--calltip-completion-available))
- (candidates
- (company-dcd--get-calltip-candidate-for-struct-constructor arg))
+ (prefix (cons :async #'company-dcd--calltip-completion-available))
+ (candidates (cons :async (lambda (callback) (company-dcd--get-calltip-candidate-for-struct-constructor arg callback))))
(post-completion (company-dcd--calltip-action arg))
- (doc-buffer (company-dcd--get-completion-documentation arg))
- (location (company-dcd--get-completion-location arg))))
+ (doc-buffer (cons :async (lambda (callback) (company-dcd--get-completion-documentation arg callback))))
+ (location (cons :async (lambda (callback) (company-dcd--get-completion-location arg callback))))))
;; Documentation display
(defun company-dcd--reformat-documentation ()
- "Prepare a documentation string for display.
-Currently, it simply unescapes `\\n' unless it's in $(D ...) closure."
+ "Decode (unescape) the documentation text received from dcd-client."
(with-current-buffer (get-buffer company-dcd--documentation-buffer-name)
(goto-char (point-min))
(while (not (equal (point) (point-max)))
@@ -560,48 +628,56 @@ Currently, it simply unescapes `\\n' unless it's in $(D ...) closure."
((looking-at (rx "\\n"))
(delete-char 2)
(insert "\n"))
- ((looking-at (rx "$(")) ; skip D expr.
- (forward-sexp 2))
- )
- (forward-char))
- ))
+ ((looking-at (rx "\\\\"))
+ (delete-char 1)
+ (forward-char))
+ (t
+ (forward-char))))))
-(defun company-dcd--get-ddoc ()
+(defun company-dcd--get-ddoc (callback)
"Retrieve symbol documentation using \"dcd-client --doc\".
-Return nil on error or if the symbol is not documented."
- (let ((args
- (append
- (company-dcd--build-args (company-dcd--cursor-position))
- '("--doc"))))
-
- (let ((result (company-dcd--call-process args)))
- (when (and
- result ; invocation succeeded
- (string-match (rx (not (syntax whitespace)))
- result)) ; result not empty (contains non-whitespace)
- result))))
+Invoke CALLBACK with the result, or nil on error or if the symbol
+is not documented."
+ (company-dcd--call-process
+ (append
+ (company-dcd--build-args (company-dcd--symbol-position))
+ '("--doc"))
+ t
+ (lambda (buf)
+ (funcall
+ callback
+ (let ((result (and buf (with-current-buffer buf (buffer-string)))))
+ (when (and
+ result ; invocation succeeded
+ (string-match (rx (not (syntax whitespace)))
+ result)) ; result not empty (contains non-whitespace)
+ result))))))
(defun company-dcd-show-ddoc-with-buffer ()
"Display Ddoc of symbol at point using `display-buffer'."
(interactive)
- (let ((raw-doc (company-dcd--get-ddoc)))
- (if raw-doc
- (progn
- (with-current-buffer (get-buffer-create company-dcd--documentation-buffer-name)
- (erase-buffer)
- (insert raw-doc))
- (company-dcd--reformat-documentation)
- (display-buffer (get-buffer-create company-dcd--documentation-buffer-name)))
- (message "No documentation for the symbol at point."))))
-
-
-(defun company-dcd--call-process-with-compl (lastcompl switch)
+ (company-dcd--get-ddoc
+ (lambda (raw-doc)
+ (if raw-doc
+ (progn
+ (with-current-buffer (get-buffer-create company-dcd--documentation-buffer-name)
+ (erase-buffer)
+ (insert raw-doc))
+ (company-dcd--reformat-documentation)
+ (display-buffer (get-buffer-create company-dcd--documentation-buffer-name)))
+ (message "No documentation for the symbol at point.")))))
+
+
+(defun company-dcd--call-process-with-compl (lastcompl switch callback)
"Call dcd-client with a hypothetically-expanded completion candidate.
-Create a temporary buffer, which is a copy of the current buffer but with
-LASTCOMPL expanded. Execute DCD with the additional parameter SWITCH.
-Return the result."
+Create a temporary buffer, which is a copy of the current buffer
+but with LASTCOMPL expanded. Execute DCD with the additional
+parameter SWITCH.
+
+Invoke CALLBACK with the dcd-client output buffer, or nil in case
+of error."
(let ((src (buffer-string))
(pt (point)))
(with-temp-buffer
@@ -616,26 +692,36 @@ Return the result."
(company-dcd--call-process
(append
(company-dcd--build-args (company-dcd--cursor-position))
- (list switch))))))
-
-(defun company-dcd--get-completion-documentation (lastcompl)
- "Company callback for displaying the documentation for a completion candidate."
- (let ((raw-doc (company-dcd--call-process-with-compl lastcompl "--doc")))
- (when raw-doc
- (company-doc-buffer
- (with-current-buffer (get-buffer-create company-dcd--documentation-buffer-name)
- (erase-buffer)
- (insert raw-doc)
- (company-dcd--reformat-documentation)
- (buffer-string))))))
-
+ (list switch))
+ t callback))))
+
+(defun company-dcd--get-completion-documentation (lastcompl callback)
+ "Company callback for displaying the documentation for a completion candidate.
+
+LASTCOMPL is the last completion, as received from company.
+
+Invoke CALLBACK with the documentation string, or nil in case of error."
+ (company-dcd--call-process-with-compl
+ lastcompl "--doc"
+ (lambda (buf)
+ (funcall
+ callback
+ (when buf
+ (let ((raw-doc (with-current-buffer buf (buffer-string))))
+ (company-doc-buffer
+ (with-current-buffer (get-buffer-create company-dcd--documentation-buffer-name)
+ (erase-buffer)
+ (insert raw-doc)
+ (company-dcd--reformat-documentation)
+ (buffer-string)))))))))
;; Go to definition
;; Thanks to jedi.el by Takafumi Arakaki
(defcustom company-dcd--goto-definition-marker-ring-length 16
"Length of marker ring to store `company-dcd-goto-definition' call positions."
- :group 'company-dcd)
+ :group 'company-dcd
+ :type 'integer)
(defvar company-dcd--goto-definition-marker-ring
(make-ring company-dcd--goto-definition-marker-ring-length)
@@ -649,10 +735,10 @@ Return the result."
"Goto the point where `company-dcd-goto-definition' was last called."
(interactive)
(if (ring-empty-p company-dcd--goto-definition-marker-ring)
- (error "Marker ring is empty, can't pop")
+ (company-dcd--error "Marker ring is empty, can't pop")
(let ((marker (ring-remove company-dcd--goto-definition-marker-ring 0)))
(switch-to-buffer (or (marker-buffer marker)
- (error "Buffer has been deleted")))
+ (company-dcd--error "Buffer has been deleted")))
(goto-char (marker-position marker))
;; Cleanup the marker so as to avoid them piling up.
(set-marker marker nil nil))))
@@ -662,63 +748,65 @@ Return the result."
(defun company-dcd-goto-definition ()
"Goto declaration of symbol at point."
(interactive)
- (when (company-dcd--call-process-for-symbol-declaration)
- (let ((data (company-dcd--parse-output-for-get-symbol-declaration)))
- (if data
- (let ((file (company-dcd--position-data-file data))
- (offset (company-dcd--position-data-offset data)))
- (company-dcd--goto-def-push-marker)
- (unless (string= file "stdin") ; the declaration is in the current file
- (find-file file))
- (goto-char (byte-to-position offset)))
- (message "Not found")))))
-
-(defun company-dcd--get-completion-location (lastcompl)
- "Company callback for opening the definition for a completion candidate."
- (when (company-dcd--call-process-with-compl lastcompl "--symbolLocation")
- (let ((data (company-dcd--parse-output-for-get-symbol-declaration)))
- (when data
- (let* ((file (company-dcd--position-data-file data))
- (offset (company-dcd--position-data-offset data))
- (buffer (if (string= file "stdin")
- (current-buffer)
- (find-file-noselect file)))
- (position (with-current-buffer buffer (byte-to-position offset))))
- (cons buffer position))))))
+ (company-dcd--call-process-for-symbol-declaration
+ (lambda (buf)
+ (when buf
+ (let ((data (company-dcd--parse-output-for-get-symbol-declaration buf)))
+ (if data
+ (let ((file (company-dcd--position-data-file data))
+ (offset (company-dcd--position-data-offset data)))
+ (company-dcd--goto-def-push-marker)
+ (unless (string= file "stdin") ; the declaration is in the current file
+ (find-file file))
+ (goto-char (byte-to-position offset)))
+ (message "Not found")))))))
+
+(defun company-dcd--get-completion-location (lastcompl callback)
+ "Company callback for opening the definition for a completion candidate.
+
+LASTCOMPL is the last completion, as received from company.
+Invoke CALLBACK with (buffer . position), or nil in case of error."
+ (company-dcd--call-process-with-compl
+ lastcompl "--symbolLocation"
+ (lambda (buf)
+ (funcall
+ callback
+ (when buf
+ (let ((data (company-dcd--parse-output-for-get-symbol-declaration buf)))
+ (when data
+ (let* ((file (company-dcd--position-data-file data))
+ (offset (company-dcd--position-data-offset data))
+ (buffer (if (string= file "stdin")
+ (current-buffer)
+ (find-file-noselect file)))
+ (position (with-current-buffer buffer (byte-to-position offset))))
+ (cons buffer position)))))))))
;; Utilities for goto-definition
-(defun company-dcd--word-char-p (char)
- "Return t if CHAR is a D word char (part of an identifier), nil otherwise."
- (member (char-syntax char) '(?w ?_)))
-
-(defun company-dcd--call-process-for-symbol-declaration ()
- "Call process for `dcd-client --symbolLocation'."
- (let ((pos (company-dcd--cursor-position)))
-
- ;; Work around https://github.com/Hackerpilot/DCD/issues/98
- (when (and
- (not (company-dcd--word-char-p (char-before (point))))
- (company-dcd--word-char-p (char-after (point))))
- (setq pos (1+ pos)))
+(defun company-dcd--call-process-for-symbol-declaration (callback)
+ "Call process for `dcd-client --symbolLocation'.
- (company-dcd--call-process
- (append (company-dcd--build-args pos) '("--symbolLocation")))))
+Invoke CALLBACK with the dcd-client output buffer, or nil in case
+of error."
+ (company-dcd--call-process
+ (append (company-dcd--build-args (company-dcd--symbol-position))
+ '("--symbolLocation"))
+ t callback))
-(defun company-dcd--parse-output-for-get-symbol-declaration ()
- "Parse output of `company-dcd--get-symbol-declaration'.
+(defun company-dcd--parse-output-for-get-symbol-declaration (buf)
+ "Parse output of `company-dcd--get-symbol-declaration' from BUF.
Output is a `company-dcd--position-data', whose `type' is nil."
- (let ((buf (get-buffer-create company-dcd--output-buffer-name)))
- (with-current-buffer buf
- (goto-char (point-min))
- (if (not (string= "Not found\n" (buffer-string)))
- (progn (re-search-forward (rx (submatch (* nonl)) "\t" (submatch (* nonl)) "\n"))
- (make-company-dcd--position-data
- :file (match-string 1)
- :offset (1+ (string-to-number (match-string 2)))))
- nil))
- ))
+ (with-current-buffer buf
+ (goto-char (point-min))
+ (if (not (string= "Not found\n" (buffer-string)))
+ (progn (re-search-forward (rx (submatch (* nonl)) "\t" (submatch (* nonl)) "\n"))
+ (make-company-dcd--position-data
+ :file (match-string 1)
+ :offset (1+ (string-to-number (match-string 2)))))
+ nil))
+ )
;;; Symbol search.
@@ -726,37 +814,46 @@ Output is a `company-dcd--position-data', whose `type' is nil."
(rx (and bol (submatch (* nonl)) "\t" (submatch char) "\t" (submatch (* digit)) eol))
"Regex pattern to parse dcd output for symbol location.")
-(defun company-dcd--parse-output-for-symbol-search ()
- "Return a list of company-dcd--position-data."
- (with-current-buffer company-dcd--output-buffer-name
+(defun company-dcd--parse-output-for-symbol-search (buf)
+ "Return a list of `company-dcd--position-data' from BUF."
+ (with-current-buffer buf
(goto-char (point-min))
(let (res)
(while (re-search-forward company-dcd--symbol-search-pattern nil t)
- (add-to-list 'res
- (make-company-dcd--position-data
- :file (match-string 1)
- :type (match-string 2)
- :offset (string-to-number (match-string 3)))
- ))
+ (push (make-company-dcd--position-data
+ :file (match-string 1)
+ :type (match-string 2)
+ :offset (string-to-number (match-string 3)))
+ res))
res)))
-(defun company-dcd--call-process-for-symbol-search (str)
- "Invoke dcd-client to find symbol STR."
+(defun company-dcd--call-process-for-symbol-search (str callback)
+ "Invoke dcd-client to find symbol STR.
+
+Invoke CALLBACK with the dcd-client output buffer, or nil in case
+of error."
(let ((args
(append
(company-dcd--build-args)
'("--search")
(list str))))
- (company-dcd--call-process args)))
+ (company-dcd--call-process args t callback)))
-(defun company-dcd--symbol-search (str)
+(defun company-dcd--symbol-search (str callback)
"Search symbol using DCD with query STR.
-Return a list of `company-dcd--position-data' structs."
- (when (company-dcd--call-process-for-symbol-search str)
- (company-dcd--parse-output-for-symbol-search)))
+Invoke CALLBACK with a list of `company-dcd--position-data'
+structs, or nil in case of error."
+ (company-dcd--call-process-for-symbol-search
+ str
+ (lambda (buf)
+ (funcall
+ callback
+ (when buf
+ (company-dcd--parse-output-for-symbol-search buf))))))
(defun company-dcd--pos-data-to-ivy-candidate-string (pos-data)
+ "Convert `company-dcd--position-data' POS-DATA to Ivy candidate string."
(with-current-buffer (company-dcd--find-file-of-pos-data pos-data)
(company-dcd--goto-char-of-pos-data pos-data)
(let ((line-string (company-dcd--line-string-at-pos)))
@@ -768,6 +865,7 @@ Return a list of `company-dcd--position-data' structs."
)))
(defun company-dcd--ivy-candidate-string-to-pos-data (str)
+ "Convert Ivy candidate string STR to `company-dcd--position-data'."
(string-match (rx (submatch (* nonl)) ":" (submatch (* nonl)) ":" (submatch (* nonl)) "\n" (* nonl)) str)
(let ((file (match-string 1 str))
(type (match-string 2 str))
@@ -775,12 +873,15 @@ Return a list of `company-dcd--position-data' structs."
(make-company-dcd--position-data :file file :type type :offset offset)))
(defun company-dcd--find-file-of-pos-data (pos-data)
+ "Return buffer corresponding to `company-dcd--position-data' POS-DATA, creating it if necessary."
(find-file-noselect (company-dcd--position-data-file pos-data)))
(defun company-dcd--goto-char-of-pos-data (pos-data)
+ "Place point according to `company-dcd--position-data' POS-DATA."
(goto-char (byte-to-position (company-dcd--position-data-offset pos-data))))
(defun company-dcd--line-string-at-pos ()
+ "Return the contents of the line at point as a plain string."
(let ((beg (point-at-bol))
(end (point-at-eol)))
(buffer-substring-no-properties beg end)))
@@ -794,40 +895,47 @@ Else, read query."
(read-string "Query: ")))
(defun company-dcd-ivy-search-symbol ()
+ "Begin symbol search using ivy-mode."
(interactive)
- (let* ((ivy-format-function 'ivy-format-function-arrow)
- (query (company-dcd--read-query-or-region-str))
- (candidates (company-dcd--symbol-search query))
- (candidates-strlist (mapcar 'company-dcd--pos-data-to-ivy-candidate-string candidates))
- (res (company-dcd--ivy-candidate-string-to-pos-data (ivy-read "Search: " candidates-strlist))))
- (company-dcd--goto-def-push-marker)
- (switch-to-buffer (company-dcd--find-file-of-pos-data res))
- (company-dcd--goto-char-of-pos-data res)
- ))
+ (let ((ivy-format-function 'ivy-format-function-arrow)
+ (query (company-dcd--read-query-or-region-str)))
+ (company-dcd--symbol-search
+ query
+ (lambda (candidates)
+ (let* ((candidates-strlist (mapcar 'company-dcd--pos-data-to-ivy-candidate-string candidates))
+ (res (company-dcd--ivy-candidate-string-to-pos-data (ivy-read "Search: " candidates-strlist))))
+ (company-dcd--goto-def-push-marker)
+ (switch-to-buffer (company-dcd--find-file-of-pos-data res))
+ (company-dcd--goto-char-of-pos-data res)
+ )))))
;;; Automatic import path detection.
(defvar company-dcd--imports-cache (make-hash-table :test #'equal)
"A cache variable to store import paths from dub.")
(defun company-dcd--get-project-dir ()
- "Get current dub project dir"
+ "Get current Dub project dir."
(fldd--get-project-dir))
(defun company-dcd--get-include-dirs ()
- "Get include dir using dub."
+ "Get include dir using Dub."
(fldd--get-dub-package-dirs))
(defun company-dcd--initialize-imports-cache ()
+ "Initialize imports cache."
(setq company-dcd--imports-cache (make-hash-table :test #'equal)))
(defun company-dcd--delete-imports-cache ()
+ "Clear imports cache."
(interactive)
(company-dcd--initialize-imports-cache))
(defun company-dcd--put-imports-cache (project-root-dir import-dirs)
+ "Add entry IMPORT-DIRS to imports cache for given PROJECT-ROOT-DIR."
(puthash project-root-dir import-dirs company-dcd--imports-cache))
(defun company-dcd--get-imports-cache (project-root-dir)
+ "Query entry from imports cache for given PROJECT-ROOT-DIR."
(gethash project-root-dir company-dcd--imports-cache))
(defun company-dcd--parent-directory (dir)
@@ -889,8 +997,9 @@ If cache was found, use it instead of calling dub."
(append
(company-dcd--build-args)
(company-dcd--find-imports-dmd)
- cached-or-dub-imports
- ))))
+ cached-or-dub-imports)
+ nil
+ (lambda (_buf)))))
(defvar company-dcd-mode-map (make-keymap))
(define-key company-dcd-mode-map (kbd "C-c ?") 'company-dcd-show-ddoc-with-buffer)
diff --git a/packages/company-emoji-20180925.2008.tar b/packages/company-emoji-20180925.2008.tar
index f34317f..e38b0c6 100644
Binary files a/packages/company-emoji-20180925.2008.tar and b/packages/company-emoji-20180925.2008.tar differ
diff --git a/packages/company-ghci-20160311.200.el b/packages/company-ghci-20190707.311.el
similarity index 96%
rename from packages/company-ghci-20160311.200.el
rename to packages/company-ghci-20190707.311.el
index 7cca1b6..24e3e54 100644
--- a/packages/company-ghci-20160311.200.el
+++ b/packages/company-ghci-20190707.311.el
@@ -2,7 +2,7 @@
;; Author: Hector Orellana
;; Package-Requires: ((company "0.8.11") (haskell-mode "13"))
-;; Package-Version: 20160311.200
+;; Package-Version: 20190707.311
;; Package-X-Original-Version: 0.03
;; This program is free software; you can redistribute it and/or modify
@@ -38,7 +38,7 @@
(defun company-ghci/hoogle-info (symbol)
"Use hoogle --info to search documentation of SYMBOL"
(when (executable-find "hoogle")
- (shell-command-to-string (format "hoogle --info %s" symbol))))
+ (shell-command-to-string (format "hoogle --info \"%s\"" symbol))))
(defun company-ghci/repl-command (cmd)
"Execute CMD in the ghci process."
diff --git a/packages/company-go-20180427.1856.el b/packages/company-go-20190203.19.el
similarity index 97%
rename from packages/company-go-20180427.1856.el
rename to packages/company-go-20190203.19.el
index 118ae56..9d0532c 100644
--- a/packages/company-go-20180427.1856.el
+++ b/packages/company-go-20190203.19.el
@@ -4,7 +4,7 @@
;; Author: nsf
;; Keywords: languages
-;; Package-Version: 20180427.1856
+;; Package-Version: 20190203.19
;; Package-Requires: ((company "0.8.0") (go-mode "1.0.0"))
;; No license, this code is under public domain, do whatever you want.
@@ -19,15 +19,6 @@
(require 'go-mode)
(require 'company)
-;; Close gocode daemon at exit unless it was already running
-(eval-after-load "go-mode"
- '(progn
- (let* ((user (or (getenv "USER") "all"))
- (sock (format (concat temporary-file-directory "gocode-daemon.%s") user)))
- (unless (file-exists-p sock)
- (add-hook 'kill-emacs-hook #'(lambda ()
- (ignore-errors
- (call-process company-go-gocode-command nil nil nil "close"))))))))
(defgroup company-go nil
"Completion back-end for Go."
@@ -69,6 +60,20 @@ symbol is preceded by a \".\", ignoring `company-minimum-prefix-length'."
:group 'company-go
:type 'string)
+
+(defun company-go--close-daemon ()
+ "Close gocode daemon."
+ (ignore-errors
+ (call-process company-go-gocode-command nil nil nil "close")))
+
+;; Close gocode daemon at exit unless it was already running
+(eval-after-load "go-mode"
+ '(progn
+ (let* ((user (or (getenv "USER") "all"))
+ (sock (format (concat temporary-file-directory "gocode-daemon.%s") user)))
+ (unless (file-exists-p sock)
+ (add-hook 'kill-emacs-hook #'company-go--close-daemon)))))
+
(defun company-go--invoke-autocomplete ()
(let ((code-buffer (current-buffer))
(gocode-args (append company-go-gocode-args
diff --git a/packages/company-lsp-20181105.1644.el b/packages/company-lsp-20190612.1553.el
similarity index 50%
rename from packages/company-lsp-20181105.1644.el
rename to packages/company-lsp-20190612.1553.el
index b9f015e..a1a1afc 100644
--- a/packages/company-lsp-20181105.1644.el
+++ b/packages/company-lsp-20190612.1553.el
@@ -1,8 +1,8 @@
;;; company-lsp.el --- Company completion backend for lsp-mode. -*- lexical-binding: t -*-
-;; Version: 2.0.2
-;; Package-Version: 20181105.1644
-;; Package-Requires: ((emacs "25.1") (lsp-mode "3.4") (company "0.9.0") (s "1.2.0") (dash "2.11.0"))
+;; Version: 2.1.0
+;; Package-Version: 20190612.1553
+;; Package-Requires: ((emacs "25.1") (lsp-mode "6.0") (company "0.9.0") (s "1.2.0") (dash "2.11.0"))
;; URL: https://github.com/tigersoldier/company-lsp
;; This program is free software: you can redistribute it and/or modify
@@ -40,7 +40,7 @@
:prefix "company-lsp-"
:group 'tools)
-(defcustom company-lsp-cache-candidates 'auto
+(defcustom company-lsp-cache-candidates nil
"Whether or not to cache completion candidates.
When set to 'auto, company-lsp caches the completion. It sends
@@ -50,17 +50,59 @@ sorted or filtered as the server would for cached completion
results.
When set to t, company-mode caches the completion. It won't send
-incremental completion requests to the server.
+incremental completion requests to the server. Candidates are
+filtered on client side.
-When set to nil, results are not cached at all. The candidates
-are always sorted and filtered by the server. Use this option if
+When set to nil, results are not cached at all. Each incremental
+completion will send requests to the server. Use this option if
the server handles caching for incremental completion or
-sorting/matching provided by the server is critical."
+sorting/matching provided by the server is critical. If
+`company-lsp-filter-candidates' is non-nil for the language
+server, returned candidates are filtered by company-lsp.
+Otherwise candidates are not filtered."
:type '(choice (const :tag "Respect server response" auto)
(const :tag "Always cache" t)
(const :tag "Never cache" nil))
:group 'company-lsp)
+(defcustom company-lsp-filter-candidates
+ ;; The server ID of bingo has been renamed to go-bingo. Keeping both for
+ ;; backward compatibility.
+ '((bingo . nil)
+ (ccls . nil)
+ (clangd . nil)
+ (cquery . nil)
+ (go-bingo . nil)
+ (gopls . nil)
+ (javacomp . nil)
+ (jdtls . nil)
+ (pyls . nil)
+ (rls . nil)
+ (t . t))
+ "Whether or not to filter completion candidates returned by server.
+
+Some servers return unfiltered candidates while others do
+server-side filtering. This option controls whether or not to
+filter candidates on client-side when
+`company-lsp-cache-candidates' is nil for the current server. This
+option doesn't change the filtering behavior when
+`company-lsp-cache-candidates' is set to auto or t.
+
+Value can be t, nil, or an alist. When set
+to t, always filter candidates regardless of the current language
+server. When set to candidates are never filtered.
+
+When set to an alist, the key is either a symbol of the server-id
+defined by the LSP client for the server, or t that matches other
+servers. The value is a boolean."
+ :type '(choice (const :tag "Always filter" t)
+ (const :tag "Never filter" nil)
+ (alist :tag "Depends on language server"
+ :key-type (choice (const :tag "Other servers" t)
+ (symbol :tag "Server ID"))
+ :value-type boolean))
+ :group 'company-lsp)
+
(defcustom company-lsp-async t
"Whether or not to use async operations to fetch data."
:type 'boolean
@@ -76,7 +118,12 @@ item with the snippet and use yas-snippet to expand it."
:type 'boolean
:group 'company-lsp)
-(defcustom company-lsp-enable-recompletion nil
+(defcustom company-lsp-enable-trigger-kind t
+ "Whether or not to populate triggerKind field in the completion request."
+ :type 'boolean
+ :group 'company-lsp)
+
+(defcustom company-lsp-enable-recompletion t
"Whether or not to re-trigger completion for trigger characters.
If set to non-nil, when company-lsp finishes completion, it checks if
@@ -87,8 +134,63 @@ This is useful in cases such as 'std' is completed as 'std::' in C++."
:type 'boolean
:group 'company-lsp)
+(defcustom company-lsp-enable-additional-text-edit t
+ "Whether or not to apply additional text edit.
+
+If set to non-nil, company-lsp will apply additional text edits
+from the server. Otherwise, the additional text edits are
+ignored."
+ :type 'boolean
+ :group 'company-lsp)
+
+(defcustom company-lsp-match-candidate-predicate #'company-lsp-match-candidate-flex
+ "Predicate function that determines whether a candidate matches given input.
+
+The function takes two parameters: CANDIDATE and PREFIX.
+CANDIDATE is a string created by `company-lsp--make-candidate'.
+PREFIX is the symbol before point that should be used for
+filtering. If the function returns non-nil, CANDIDATE will
+be presented in the completion list.
+
+Company-lsp provides two builtin predicates:
+`company-lsp-match-candidate-prefix' and
+`company-lsp-match-candidate-flex'."
+ :type 'function
+ :group 'company-lsp)
+
+(defconst company-lsp--trigger-kind-invoked 1
+ "The completion is triggered by typing identifier or invoking `company-lsp'.
+
+Defined in LSP spec as CompletionTriggerKind.Invoked.")
+
+(defconst company-lsp--trigger-kind-trigger-character 2
+ "The completion is triggered by typing a trigger character.
+
+Defined in LSP spec as CompletionTriggerKind.TriggerCharacter.")
+
+(defconst company-lsp--trigger-kind-incomplete 3
+ "The completion is triggered by narrowing incomplete completion list.
+
+Defined in LSP spec as
+CompletionTriggerKind.TriggerForIncompleteCompletions.")
+
(declare-function yas-expand-snippet "ext:yasnippet.el")
+(defun company-lsp--get-config (config server-id)
+ "Get the CONFIG value for SERVER-ID.
+
+If CONFIG is a list in the form of (server-id . value), return
+the value of key SERVER-ID. When there is no value of key
+SERVER-ID, return the value of key t if it's present, or return
+nil otherwise.
+
+If CONFIG is not a list, return it directly."
+ (if (listp config)
+ (if-let (server-config (assq server-id config))
+ (cdr server-config)
+ (alist-get t config))
+ config))
+
(defvar company-lsp--snippet-functions '(("rust" . company-lsp--rust-completion-snippet))
"Alist of functions to insert our snippets for each language.")
@@ -98,6 +200,10 @@ This is useful in cases such as 'std' is completed as 'std::' in C++."
PREFIX is the prefix string.
COMPLETION is a cache-item created by `company-lsp--cache-item-new'.")
+(defvar-local company-lsp--last-request-id nil
+ "The last request ID for completion sent to the language
+ server. nil means no outstanding requests.")
+
(defun company-lsp--trigger-characters ()
"Return a list of completion trigger characters specified by server."
(let ((provider (lsp--capability "completionProvider")))
@@ -208,9 +314,7 @@ It looks for function corresponding to the language in
ITEM is a hashtable of the CompletionItem message.
Return a string of the snippet to expand, or nil if no snippet is available."
- (-when-let* ((language-id-fn (lsp--client-language-id (lsp--workspace-client lsp--cur-workspace)))
- (language-id (funcall language-id-fn (current-buffer)))
- (fn-cons (assoc language-id company-lsp--snippet-functions))
+ (-when-let* ((fn-cons (assoc (lsp-buffer-language) company-lsp--snippet-functions))
(fn (cdr fn-cons)))
(funcall fn item)))
@@ -245,10 +349,18 @@ CANDIDATE is a string returned by `company-lsp--make-candidate'."
(delete-region (- (point) (length candidate)) (point))
(insert prefix)
(let* ((range (gethash "range" text-edit))
- (start-point (lsp--position-to-point (gethash "start" range)))
(new-text-length (length insert-text)))
+ ;; No that the text edit start may not be equal to prefix/label start.
+ ;; For example jdtls can insert "java.util.List" for "java.uti". The
+ ;; prefix start is before "uti", while the text edit start is before
+ ;; "java".
+ ;;
+ ;; We need to adjust `start' to be the text edit start, because the
+ ;; snippet expansion below will replace text between `start' and point
+ ;; with insert-text again.
+ (setq start (lsp--position-to-point (gethash "start" range)))
(lsp--apply-text-edit text-edit)
- (goto-char (+ start-point new-text-length))))
+ (goto-char (+ start new-text-length))))
((and insert-text (not (eq insert-text-format 2)))
(cl-assert (string-equal (buffer-substring-no-properties start (point)) label))
(goto-char start)
@@ -256,7 +368,7 @@ CANDIDATE is a string returned by `company-lsp--make-candidate'."
(insert insert-text)))
(let ((start-marker (set-marker (make-marker) start)))
- (when additional-text-edits
+ (when (and additional-text-edits company-lsp-enable-additional-text-edit)
(lsp--apply-text-edits additional-text-edits))
(when (and company-lsp-enable-snippet
(fboundp 'yas-expand-snippet))
@@ -310,21 +422,90 @@ Return a list of strings as the completion candidates."
((sequencep response) response)))
(candidates (mapcar (lambda (item)
(company-lsp--make-candidate item prefix))
- (lsp--sort-completions items))))
+ (lsp--sort-completions items)))
+ (server-id (lsp--client-server-id (lsp--workspace-client lsp--cur-workspace)))
+ (should-filter (or (eq company-lsp-cache-candidates t)
+ (and (null company-lsp-cache-candidates)
+ (company-lsp--get-config company-lsp-filter-candidates server-id)))))
(when (null company-lsp--completion-cache)
- (add-hook 'company-completion-cancelled-hook #'company-lsp--cleanup-cache)
- (add-hook 'company-completion-finished-hook #'company-lsp--cleanup-cache))
+ (add-hook 'company-completion-cancelled-hook #'company-lsp--cleanup-cache nil t)
+ (add-hook 'company-completion-finished-hook #'company-lsp--cleanup-cache nil t))
(when (eq company-lsp-cache-candidates 'auto)
;; Only cache candidates on auto mode. If it's t company caches the
;; candidates for us.
(company-lsp--cache-put prefix (company-lsp--cache-item-new candidates incomplete)))
- candidates))
+ (if should-filter
+ (company-lsp--filter-candidates candidates prefix)
+ candidates)))
+
+(defun company-lsp--filter-candidates (candidates prefix)
+ "Filter CANDIDATES by PREFIX.
+
+CANDIDATES are a list of strings of candidate labels created by
+`company-lsp--make-candidate'.
+
+Returns a new list of candidates."
+ ;; TODO: Allow customizing matching functions to support fuzzy matching.
+ ;; Consider supporting company-flx out of box.
+ (let (resort)
+ (--> candidates
+ ;; candidate -> (score matched candidate)
+ (mapcar (lambda (candidate)
+ (let ((match (funcall company-lsp-match-candidate-predicate candidate prefix)))
+ (if (consp match)
+ (progn
+ (setq resort t)
+ (list (car match) (cdr match) candidate))
+ (list -1 match candidate))))
+ it)
+ (-filter (lambda (item)
+ (nth 1 item))
+ it)
+ (if resort
+ (sort it (lambda (a b) (< (car a) (car b))))
+ it)
+ (mapcar (lambda (item) (nth 2 item))
+ it))))
+
+(defun company-lsp-match-candidate-prefix (candidate prefix)
+ "Return non-nil if the filter text of CANDIDATE starts with PREFIX.
+
+The match is case-insensitive."
+ (s-starts-with-p prefix (company-lsp--candidate-filter-text candidate) t))
+
+(defun company-lsp-match-candidate-flex (candidate prefix)
+ "Return non-nil if the filter text of CANDIDATE matches PREFIX.
+
+See `company-lsp--compute-flex-match' for more details."
+ (company-lsp--compute-flex-match (company-lsp--candidate-filter-text candidate)
+ prefix
+ t))
+
+(defun company-lsp--candidate-filter-text (candidate)
+ "Return filter string of CANDIDATE.
+
+CANDIDATE is a string created by `company-lsp--make-candidate'.
+If the CompletionItem of CANDIDATE has filterText field, return
+the value of filterText. Otherwise return CANDIDATE itself."
+ (let* ((candidate-item (company-lsp--candidate-item candidate))
+ (filter-text (gethash "filterText" candidate-item)))
+ (or filter-text candidate)))
(defun company-lsp--cleanup-cache (_)
"Clean up completion cache and company hooks."
(setq company-lsp--completion-cache nil)
- (remove-hook 'company-completion-finished-hook #'company-lsp--cleanup-cache)
- (remove-hook 'company-completion-cancelled-hook #'company-lsp--cleanup-cache))
+ (remove-hook 'company-completion-finished-hook #'company-lsp--cleanup-cache t)
+ (remove-hook 'company-completion-cancelled-hook #'company-lsp--cleanup-cache t))
+
+(defun company-lsp--cancel-outstanding-request ()
+ "Cancels outstanding completion requests.
+
+A cancel command with `company-lsp--last-request-id' will be sent
+to the server. `company-lsp--last-request-id' is reset to nil
+after cancellation."
+ (when company-lsp--last-request-id
+ (lsp--cancel-request company-lsp--last-request-id)
+ (setq company-lsp--last-request-id nil)))
(defun company-lsp--cache-put (prefix candidates)
"Set cache for PREFIX to be CANDIDATES.
@@ -338,24 +519,34 @@ CANDIDATES is a cache item created by `company-lsp--cache-item-new'."
"Get the cached completion for PREFIX.
Return a cache item if cache for PREFIX exists. Otherwise return nil."
- (let ((cache (cdr (assoc prefix company-lsp--completion-cache)))
- (len (length prefix))
- previous-cache)
- (if cache
- cache
- (cl-dotimes (i len)
- (when (setq previous-cache
- (cdr (assoc (substring prefix 0 (- len i 1))
- company-lsp--completion-cache)))
- (if (company-lsp--cache-item-incomplete-p previous-cache)
- (cl-return nil)
- ;; TODO: Allow customizing matching functions to support fuzzy matching.
- ;; Consider supporting company-flx out of box.
- (let* ((previous-candidates (company-lsp--cache-item-candidates previous-cache))
- (new-candidates (all-completions prefix previous-candidates))
- (new-cache (company-lsp--cache-item-new new-candidates nil)))
- (company-lsp--cache-put prefix new-cache)
- (cl-return new-cache))))))))
+ (-when-let* ((cached (company-lsp--cache-find-closest prefix))
+ (subprefix (car cached))
+ (cache-item (cdr cached)))
+ (cond
+ ((string= prefix subprefix)
+ ;; Found exact match.
+ cache-item)
+ ((company-lsp--cache-item-incomplete-p cache-item)
+ ;; Closest subprefix has incomplete result. Return nil to ask for narrowed
+ ;; down results.
+ nil)
+ (t
+ ;; Narrow down complete results for subprefix.
+ (let* ((candidates (company-lsp--cache-item-candidates cache-item))
+ (new-candidates (company-lsp--filter-candidates candidates prefix))
+ (new-cache (company-lsp--cache-item-new new-candidates nil)))
+ (company-lsp--cache-put prefix new-cache)
+ new-cache)))))
+
+(defun company-lsp--cache-find-closest (prefix)
+ "Find cached completion with the longest sub-prefix of PREFIX.
+
+Return a cons cell of (subprefix . cache-item) or nil."
+ (let ((len (length prefix)))
+ (cl-dotimes (i (1+ len))
+ (when-let (item (assoc (substring prefix 0 (- len i))
+ company-lsp--completion-cache))
+ (cl-return item)))))
(defun company-lsp--cache-item-new (candidates incomplete)
"Create a new cache item.
@@ -382,10 +573,8 @@ which company can handle."
(let* ((resolved-candidate (company-lsp--resolve-candidate candidate "documentation"))
(item (company-lsp--candidate-item resolved-candidate))
(documentation (gethash "documentation" item)))
- (if
- (hash-table-p documentation) ;; If true, then the documentation is a MarkupContent. String otherwise.
- (gethash "value" documentation)
- documentation)))
+ (when documentation
+ (lsp--render-element documentation))))
(defun company-lsp--candidates-sync (prefix)
"Get completion candidates synchronously.
@@ -393,55 +582,166 @@ which company can handle."
PREFIX is the prefix string for completion.
Return a list of strings as completion candidates."
- (let ((req (lsp--make-request "textDocument/completion"
- (lsp--text-document-position-params))))
- (company-lsp--on-completion (lsp--send-request req) prefix)))
+ (company-lsp--on-completion
+ (lsp--send-request (company-lsp--make-completion-request prefix))
+ prefix))
(defun company-lsp--candidates-async (prefix callback)
"Get completion candidates asynchronously.
PREFIX is the prefix string for completion.
CALLBACK is a function that takes a list of strings as completion candidates."
- (let ((req (lsp--make-request "textDocument/completion"
- (lsp--text-document-position-params))))
- (lsp--send-request-async req
- (lambda (resp)
- (funcall callback (company-lsp--on-completion resp prefix))))))
-
-(defun company-lsp--compute-match (candidate)
- "Compute the matched parts of CANDIDATE.
-
-CANDIDATE is a string of the candidate label.
-
-Return an alist of (CHUNK-START . CHUNK-END), representing parts
-within CANDIDATE that matches the current prefix. See the
-\"match\" section of `company-backends' for more info."
- (let* ((prefix (company-lsp--completion-prefix))
- (prefix-str (downcase (if (consp prefix) (car prefix)
- prefix)))
+ (let ((req (company-lsp--make-completion-request prefix))
+ body)
+ (company-lsp--cancel-outstanding-request)
+ (setq body
+ (lsp--send-request-async req
+ (lambda (resp)
+ (setq company-lsp--last-request-id nil)
+ (funcall callback (company-lsp--on-completion resp prefix)))))
+ (setq company-lsp--last-request-id (plist-get body :id))))
+
+(defun company-lsp--make-completion-request (prefix)
+ "Make request body for completion.
+
+PREFIX is a string prefix given by company-mode.
+
+Returns the request body that can be used by `lsp-send-request'
+or `lsp-send-request-async'."
+ (let ((params (lsp--text-document-position-params)))
+ (when company-lsp-enable-trigger-kind
+ (setq params (plist-put params :context
+ (company-lsp--get-completion-context prefix))))
+ (lsp--make-request "textDocument/completion"
+ params)))
+
+(defun company-lsp--get-completion-context (prefix)
+ "Return a plist representing a CompletionContext message for PREFIX.
+
+Returns one of `company-lsp--trigger-kind-invoked',
+`company-lsp--trigger-kind-trigger-character' and
+`company-lsp--trigger-kind-incomplete'."
+ (cond
+ ((or (eq this-command 'company-lsp)
+ (eq this-command 'company-begin-backend)
+ (eq this-command 'company-complete)
+ (eq this-command 'company-complete-common))
+ ;; Explicitly calling completion command.
+ (company-lsp--make-completion-context company-lsp--trigger-kind-invoked))
+ ((company-lsp--cache-find-closest prefix)
+ ;; Has incomplete candidates for sub-prefix. This assumes that if the
+ ;; candidates for sub-prefix, completion won't reach this step since the
+ ;; candidates for the sub-prefix can be narrowed down and returned directly.
+ (company-lsp--make-completion-context
+ company-lsp--trigger-kind-incomplete))
+ ((or (null company-point) (< company-point (point)))
+ ;; `company-point' is updated after backend gets called. So it's nil if
+ ;; backend is called for a new completion, or less than current point if
+ ;; backend is called after typing. Both cases indicates completion is
+ ;; triggered by typing.
+ (if-let (trigger-character (company-lsp--get-context-trigger-characters))
+ (company-lsp--make-completion-context
+ company-lsp--trigger-kind-trigger-character trigger-character)
+ (company-lsp--make-completion-context
+ company-lsp--trigger-kind-invoked)))
+ (t (company-lsp--make-completion-context company-lsp--trigger-kind-invoked))))
+
+(defun company-lsp--make-completion-context (trigger-kind &optional trigger-character)
+ "Create a plist representing a CompletionContext message.
+
+TRIGGER-KIND: one of `company-lsp--trigger-kind-invoked',
+`company-lsp--trigger-kind-trigger-character' and
+`company-lsp--trigger-kind-incomplete'.
+
+TRIGGER-CHARACTER: The trigger characters that triggers
+completion of kind `company-lsp--trigger-kind-trigger-character'.
+If the length of it is greater than 1, only the last character is
+used."
+ (let* ((trigger-len (if trigger-character (length trigger-character)
+ 0))
+ (single-trigger (if (> trigger-len 1)
+ (substring trigger-character (1- trigger-len))
+ trigger-character)))
+ (if trigger-character
+ (list :triggerKind trigger-kind
+ :triggerCharacter single-trigger)
+ (list :triggerKind trigger-kind))))
+
+(defun company-lsp--get-context-trigger-characters ()
+ "Return the trigger characters after current point.
+
+If there are multiple trigger characters matched (e.g. one is a
+suffix of another), return any of them. If no trigger characters
+match, return nil."
+ (let ((trigger-chars (company-lsp--trigger-characters)))
+ (seq-find (lambda (trigger-char)
+ (and (>= (point) (length trigger-char))
+ (string= (buffer-substring (- (point) (length trigger-char))
+ (point))
+ trigger-char)))
+ trigger-chars)))
+
+(defun company-lsp--compute-flex-match (label &optional prefix full-match)
+ "Perform flex match for PREFIX in LABEL.
+
+This function finds out substrings in LABEL. The concatenation of
+those substrings is a prefix of PREFIX if FULL-MATCH is nil, or
+is exactly PREFIX if FULL-MATCH is non-nil.
+
+If PREFIX is nil, the return value of
+`company-lsp--completion-prefix' is used as PREFIX.
+
+Return a cons cell of (score . substrings). Score is a number for
+sorting, the smaller the better. When FULL-MATCH is non-nil and
+there is no match, score is always -1. Substrings is an alist
+of (substring-start . substring-end), representing the inclusive
+start position and exclusive end position of those substrings.
+The alist of strings is compatible with the result for the
+\"match\" command for company-mode backends. See the \"match\"
+section of `company-backends' for more info. Note that if
+FULL-MATCH is non-nil and the concatenation of substrings does
+not equal to PREFIX, nil is returned."
+ (let* ((prefix-obj (or prefix (company-lsp--completion-prefix)))
+ (prefix-str (if (consp prefix-obj) (car prefix-obj) prefix-obj))
+ (prefix-low (downcase prefix-str))
(prefix-pos 0)
- (prefix-len (length prefix-str))
- (candidate-pos 0)
- (candidate-len (length candidate))
- (candidate-str (downcase candidate))
- chunks
- chunk-start)
- (while (and (< prefix-pos prefix-len)
- (< candidate-pos candidate-len))
- (if (= (aref prefix-str prefix-pos)
- (aref candidate-str candidate-pos))
- (progn
- (when (not chunk-start)
- (setq chunk-start candidate-pos))
- (incf prefix-pos)
- (incf candidate-pos))
- (when chunk-start
- (push (cons chunk-start candidate-pos) chunks)
- (setq chunk-start nil))
- (incf candidate-pos)))
- (when chunk-start
- (push (cons chunk-start candidate-pos) chunks))
- (nreverse chunks)))
+ (prefix-len (length prefix-low))
+ (label-pos 0)
+ (label-len (length label))
+ (label-low (downcase label))
+ substrings
+ substring-start
+ ;; Initial penalty for the difference of length, but with lower weight.
+ (score (abs (- label-len prefix-len))))
+ (if (string-empty-p prefix-str)
+ '(0 . ((0 . 0)))
+ (while (and (< prefix-pos prefix-len)
+ (< label-pos label-len))
+ (if (= (aref prefix-low prefix-pos)
+ (aref label-low label-pos))
+ (progn
+ (when (not substring-start)
+ (setq substring-start label-pos)
+ ;; We simply use the sum of all substring start positions as the
+ ;; score. This is a good proxy that prioritize fewer substring parts
+ ;; and earlier occurrence of substrings.
+ (cl-incf score (* substring-start 100)))
+ (when (not (= (aref prefix-str prefix-pos)
+ (aref label label-pos)))
+ ;; The prefix and label have different cases. Adding penalty to
+ ;; the score. It has lower weight than substring start but higher
+ ;; than the length difference.
+ (cl-incf score 10))
+ (cl-incf prefix-pos))
+ (when substring-start
+ (push (cons substring-start label-pos) substrings)
+ (setq substring-start nil)))
+ (cl-incf label-pos))
+ (when substring-start
+ (push (cons substring-start label-pos) substrings))
+ (if (or (not full-match) (= prefix-pos prefix-len))
+ (cons score (nreverse substrings))
+ (cons -1 nil)))))
;;;###autoload
(defun company-lsp (command &optional arg &rest _)
@@ -451,11 +751,14 @@ See the documentation of `company-backends' for COMMAND and ARG."
(interactive (list 'interactive))
(cl-case command
(interactive (company-begin-backend #'company-lsp))
- (prefix (and
- (bound-and-true-p lsp-mode)
- (lsp--capability "completionProvider")
- (not (company-in-string-or-comment))
- (or (company-lsp--completion-prefix) 'stop)))
+ (prefix
+ (and
+ (bound-and-true-p lsp-mode)
+ (lsp--capability "completionProvider")
+ (or (--some (lsp--client-completion-in-comments? (lsp--workspace-client it))
+ (lsp-workspaces))
+ (not (company-in-string-or-comment)))
+ (or (company-lsp--completion-prefix) 'stop)))
(candidates
;; If the completion items in the response have textEdit action populated,
;; we'll apply them in `company-lsp--post-completion'. However, textEdit
@@ -472,7 +775,7 @@ See the documentation of `company-backends' for COMMAND and ARG."
(annotation (lsp--annotate arg))
(quickhelp-string (company-lsp--documentation arg))
(doc-buffer (company-doc-buffer (company-lsp--documentation arg)))
- (match (company-lsp--compute-match arg))
+ (match (cdr (company-lsp--compute-flex-match arg)))
(post-completion (company-lsp--post-completion arg))))
(defun company-lsp--client-capabilities ()
diff --git a/packages/company-lua-20171108.2306.tar b/packages/company-lua-20171108.2306.tar
index a961eea..62acc20 100644
Binary files a/packages/company-lua-20171108.2306.tar and b/packages/company-lua-20171108.2306.tar differ
diff --git a/packages/company-math-20171016.1514.el b/packages/company-math-20190507.2006.el
similarity index 87%
rename from packages/company-math-20171016.1514.el
rename to packages/company-math-20190507.2006.el
index 60ac7e2..1d6bc1c 100644
--- a/packages/company-math-20171016.1514.el
+++ b/packages/company-math-20190507.2006.el
@@ -1,9 +1,9 @@
-;;; company-math.el --- Completion backends for unicode math symbols and latex tags
+;;; company-math.el --- Completion backends for unicode math symbols and latex tags -*- lexical-binding: t -*-
;;
-;; Copyright (C) 2015 Free Software Foundation, Inc.
-;; Author: Vitalie Spinu
+;; Copyright (C) 2015-2019 Free Software Foundation, Inc.
+;; Author: Vitalie Spinu
;; URL: https://github.com/vspinu/company-math
-;; Package-Version: 20171016.1514
+;; Package-Version: 20190507.2006
;; Keywords: Unicode, symbols, completion
;; Version: 1.3
;; Package-Requires: ((company "0.8.0") (math-symbol-lists "1.2"))
@@ -23,12 +23,12 @@
;; General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
-;; along with this program; see the file COPYING. If not, write to
-;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth
-;; Floor, Boston, MA 02110-1301, USA.
+;; along with GNU Emacs. If not, see .
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
+;;; Commentary:
+;;
;;; Code:
(require 'math-symbol-lists)
@@ -47,7 +47,7 @@
(defcustom company-math-subscript-prefix "__"
"Prefix for unicode subscripts.
-When nil, no custom prefix is active. Irrespective of the value
+When nil, no custom prefix is active. Irrespective of the value
of this variable, prefix composed of `company-math-symbol-prefix'
and \"_\" is always active (\"\\_\"). This variable takes effect
in a new Emacs session."
@@ -57,7 +57,7 @@ in a new Emacs session."
(defcustom company-math-superscript-prefix "^^"
"Prefix for unicode superscripts.
-When nil, no custom prefix is active. Irrespective of the value
+When nil, no custom prefix is active. Irrespective of the value
of this variable, prefix composed of `company-math-symbol-prefix'
and \"^\" is always active (\"\\^\"). This variable takes effect
in a new Emacs session."
@@ -79,7 +79,7 @@ in a new Emacs session."
(psup (when company-math-superscript-prefix
(concat "\\|" (regexp-quote company-math-superscript-prefix)))))
(setq company-math--unicode-prefix-regexp
- (concat "\\(" psym psub psup "\\)[^ \t\n]*")))
+ (concat "\\(" psym psub psup "\\)[^ \t\n]*")))
(defcustom company-math-allow-unicode-symbols-in-faces t
"List of faces to allow the insertion of Unicode symbols.
@@ -112,9 +112,10 @@ When set to special value t, allow on all faces except those in
(defun company-math--make-candidates (alist prefix)
"Build a list of math symbols ready to be used in a company backend.
-ALIST is one of the defined alist in package
-`math-symbol-lists'. Return a list of LaTeX symbols with text
-property :symbol being the corresponding unicode symbol."
+ALIST is one of the defined alist in package `math-symbol-lists'.
+PREFIX is a string to be prefixed to each symbol. Return a list
+of LaTeX symbols with text property :symbol being the
+corresponding unicode symbol."
(delq nil
(mapcar
(lambda (el)
@@ -146,6 +147,9 @@ property :symbol being the corresponding unicode symbol."
"List of math completion candidates for unicode backend.")
(defun company-math--prefix (regexp allow-faces disallow-faces)
+ "Response to company prefix command.
+REGEXP is the regexp, ALLOW-FACES and DISALLOW-FACES are list of
+various faces to allow or disallow completion on."
(let* ((face (get-text-property (point) 'face))
(face (or (car-safe face) face))
(insertp (and (not (memq face disallow-faces))
@@ -178,8 +182,9 @@ property :symbol being the corresponding unicode symbol."
;;; BACKENDS
;;;###autoload
-(defun company-latex-commands (command &optional arg &rest ignored)
- "Company backend for latex commands."
+(defun company-latex-commands (command &optional arg &rest _ignored)
+ "Company backend for latex commands.
+COMMAND and ARG is as required by company backends."
(interactive (list 'interactive))
(cl-case command
(interactive (company-begin-backend 'company-latex-commands))
@@ -189,8 +194,9 @@ property :symbol being the corresponding unicode symbol."
(sorted t)))
;;;###autoload
-(defun company-math-symbols-latex (command &optional arg &rest ignored)
- "Company backend for LaTeX mathematical symbols."
+(defun company-math-symbols-latex (command &optional arg &rest _ignored)
+ "Company backend for LaTeX mathematical symbols.
+COMMAND and ARG is as required by company backends."
(interactive (list 'interactive))
(cl-case command
(interactive (company-begin-backend 'company-math-symbols-latex))
@@ -202,16 +208,16 @@ property :symbol being the corresponding unicode symbol."
(candidates (all-completions arg company-math--symbols))))
;;;###autoload
-(defun company-math-symbols-unicode (command &optional arg &rest ignored)
+(defun company-math-symbols-unicode (command &optional arg &rest _ignored)
"Company backend for insertion of Unicode mathematical symbols.
+COMMAND and ARG is as required by company backends.
See the unicode-math page [1] for a list of fonts that have a
good support for mathematical symbols. Unicode provides only a
limited range of sub(super)scripts; see the wikipedia page [2]
for details.
[1] http://ftp.snt.utwente.nl/pub/software/tex/help/Catalogue/entries/unicode-math.html
- [2] https://en.wikipedia.org/wiki/Unicode_subscripts_and_superscripts
-"
+ [2] https://en.wikipedia.org/wiki/Unicode_subscripts_and_superscripts"
(interactive (list 'interactive))
(cl-case command
(interactive (company-begin-backend 'company-math-symbols-unicode))
diff --git a/packages/company-php-20181110.303.el b/packages/company-php-20190424.222.el
similarity index 85%
rename from packages/company-php-20181110.303.el
rename to packages/company-php-20190424.222.el
index 5482291..8a7350e 100644
--- a/packages/company-php-20181110.303.el
+++ b/packages/company-php-20190424.222.el
@@ -1,11 +1,18 @@
-;;; company-php.el --- company completion source for php
-;; Copyright (C) 2014 - 2016 jim
-;; Author: xcwenn@qq.com [https://github.com/xcwen]
+;;; company-php.el --- A company back-end for PHP.
+
+;; Copyright (C) 2014-2019 jim
+
+;; Author: jim
+;; Maintainer: jim
;; URL: https://github.com/xcwen/ac-php
-;; Package-Version: 20181110.303
-;; Package-X-Original-Version: 20171209.2243
+;; Package-Version: 20190424.222
;; Keywords: completion, convenience, intellisense
-;; Package-Requires: ( (cl-lib "0.5") (ac-php-core "1") (company "0.9") )
+;; Package-Requires: ((cl-lib "0.5") (ac-php-core "2.0") (company "0.9"))
+;; Compatibility: GNU Emacs: 24.4, 25.x, 26.x, 27.x
+
+;; This file is NOT part of GNU Emacs.
+
+;;; License
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
@@ -21,16 +28,25 @@
;; along with this program. If not, see .
;;; Commentary:
-;; company source for php.
-;; support Linux and OSX, but windows need more test
-;; More info and **example** at : https://github.com/xcwen/ac-php
-;;(add-hook 'php-mode-hook
-;; '(lambda ()
+;; A company back-end for PHP.
+;;
+;; (add-hook 'php-mode-hook
+;; '(lambda ()
;; (require 'company-php)
;; (company-mode t)
;; (add-to-list 'company-backends 'company-ac-php-backend )))
-
+;;
+;; Many options available under Help:Customize
+;; Options specific to ac-php are in
+;; Convenience/Completion/Auto Complete
+;; Convenience/Completion/Company
+;;
+;; Known to work with Linux and macOS. Windows support is in beta stage.
+;; For more info and examples see URL `https://github.com/xcwen/ac-php' .
+;;
+;; Bugs: Bug tracking is currently handled using the GitHub issue tracker
+;; (see URL `https://github.com/xcwen/ac-php/issues')
;;; Code:
@@ -50,7 +66,9 @@ symbol is preceded by \"->\" or \"::\", ignoring
If `company-begin-commands' is a list, it should include `c-electric-lt-gt'
and `c-electric-colon', for automatic completion right after \">\" and
-\":\".")
+\":\"."
+ :group 'company-php
+ :type 'boolean)
(defun company-ac-php-annotation (item)
(let ((doc (ac-php-clean-document (get-text-property 0 'ac-php-help item))))
@@ -81,12 +99,11 @@ matches IDLE-BEGIN-AFTER-RE, return it wrapped in a cons."
(cons symbol t)
symbol)))))
-;; TODO it bad for namespace like \App\add\ss
+;; TODO: May not work for namespace like \App\add\ss
(defun company-ac-php--prefix ()
(if company-php-begin-after-member-access
- (company-ac-php-company-grab-symbol-cons "->\\|::" 2)
- (company-ac-php--prefix-symbol)))
-
+ (company-ac-php-company-grab-symbol-cons "->\\|::" 2)
+ (company-ac-php--prefix-symbol)))
(defun company-ac-php-candidate (arg)
(let* ((ac-php-prefix-str (company-ac-php--prefix-symbol))
diff --git a/packages/company-reftex-20181222.906.el b/packages/company-reftex-20181222.906.el
new file mode 100644
index 0000000..1a242f2
--- /dev/null
+++ b/packages/company-reftex-20181222.906.el
@@ -0,0 +1,249 @@
+;;; company-reftex.el --- Company backend based on RefTeX. -*- lexical-binding: t -*-
+
+;; Copyright (C) 2018 TheBB
+;;
+;; Author: Eivind Fonn
+;; URL: https://github.com/TheBB/company-reftex
+;; Package-Version: 20181222.906
+;; Version: 0.1.0
+;; Keywords: bib tex company latex reftex references labels citations
+;; Package-Requires: ((emacs "25.1") (s "1.12") (company "0.8"))
+
+;; 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:
+
+;; To use, add `company-reftex-labels' and `company-reftex-citations' to `company-backends' in the
+;; buffers where you want it activated. The major mode must be derived from `latex-mode', and
+;; `reftex-mode' must be switched on for them to work.
+;;
+;; - `company-reftex-labels' will trigger inside forms like \ref{}, \eqref{}, \auroref{}, etc.
+;; - `company-reftex-citations' will trigger inside cite{}.
+;;
+;; These backends collect data from RefTeX, which is very powerful. Citations from external bibtex
+;; files should be found automatically. In multi-file documents, make sure `TeX-master' is set
+;; appropriately.
+
+;;; Code:
+
+
+(eval-when-compile
+ (require 'rx))
+
+(require 'cl-lib)
+(require 'company)
+(require 'reftex)
+(require 'reftex-cite)
+(require 's)
+
+
+;; Customization
+
+(defgroup company-reftex nil
+ "Completion backend for RefTeX."
+ :prefix "company-reftex-"
+ :tag "Company RefTeX"
+ :group 'company)
+
+(defcustom company-reftex-annotate-citations "%t"
+ "If non-nil, a format string with which to annotate citations.
+See `reftex-format-citation'."
+ :type '(choice string (const nil))
+ :group 'company-reftex)
+
+(defcustom company-reftex-annotate-labels t
+ "Whether to annotate labels with their contents."
+ :type 'boolean
+ :group 'company-reftex)
+
+(defcustom company-reftex-max-annotation-length nil
+ "Truncate annotations to this length."
+ :type '(choice (const :tag "Off" nil) integer)
+ :group 'company-reftex)
+
+(defcustom company-reftex-labels-regexp
+ (rx "\\"
+ ;; List taken from `reftex-ref-style-alist'
+ (or "autoref"
+ "autopageref"
+ "Cpageref"
+ "cpageref"
+ "Cref"
+ "cref"
+ "eqref"
+ "Fref"
+ "fref"
+ "pageref"
+ "Ref"
+ "ref"
+ "vpageref"
+ "Vref"
+ "vref")
+ "{"
+ (group (* (not (any "}"))))
+ (regexp "\\="))
+ "Regular expression to use when lookng for the label prefix.
+Group number 1 should be the prefix itself."
+ :type 'string
+ :group 'company-reftex)
+
+(defcustom company-reftex-citations-regexp
+ (rx "\\"
+ ;; List taken from `reftex-cite-format-builtin'
+ (or "autocite"
+ "autocite*"
+ "bibentry"
+ "cite"
+ "cite*"
+ "citeA"
+ "citeaffixed"
+ "citeasnoun"
+ "citeauthor"
+ "citeauthor*"
+ "citeauthory"
+ "citefield"
+ "citeN"
+ "citename"
+ "cites"
+ "citet"
+ "citet*"
+ "citetitle"
+ "citetitle*"
+ "citep"
+ "citeyear"
+ "citeyear*"
+ "footcite"
+ "footfullcite"
+ "fullcite"
+ "fullocite"
+ "nocite"
+ "ocite"
+ "ocites"
+ "parencite"
+ "parencite*"
+ "possessivecite"
+ "shortciteA"
+ "shortciteN"
+ "smartcite"
+ "textcite"
+ "textcite*"
+ "ycite"
+ "ycites")
+ (* (not (any "[{")))
+ (* (seq "[" (* (not (any "]"))) "]"))
+ "{"
+ (* (seq (* (not (any "},"))) ","))
+ (group (* (not (any "},")))))
+ "Regular expression to use when lookng for the citation prefix.
+Group number 1 should be the prefix itself."
+ :type 'string
+ :group 'company-reftex)
+
+
+
+;; Auxiliary functions
+
+(defun company-reftex-prefix (regexp)
+ "Return the prefix for matching given REGEXP."
+ (and (derived-mode-p 'latex-mode)
+ reftex-mode
+ (when (looking-back regexp nil)
+ (match-string-no-properties 1))))
+
+(defun company-reftex-annotate (key annotation)
+ "Annotate KEY with ANNOTATION if the latter is not nil.
+Obeys the setting of `company-reftex-max-annotation-length'."
+ (cond
+ ((not annotation) key)
+ ((not company-reftex-max-annotation-length)
+ (propertize key 'reftex-annotation annotation))
+ (t (propertize key 'reftex-annotation
+ (s-truncate company-reftex-max-annotation-length annotation)))))
+
+
+
+;; Citations
+
+(defun company-reftex-citation-candidates (prefix)
+ "Find all citation candidates matching PREFIX."
+ (reftex-access-scan-info)
+ ;; Reftex will ask for a regexp by using `completing-read'
+ ;; Override this programatically with a regexp from the prefix
+ (cl-letf (((symbol-function 'reftex--query-search-regexps)
+ (lambda (_) (list (regexp-quote prefix)))))
+ (let* ((bibtype (reftex-bib-or-thebib))
+ (candidates
+ (cond
+ ((eq 'thebib bibtype)
+ (reftex-extract-bib-entries-from-thebibliography
+ (reftex-uniquify
+ (mapcar 'cdr
+ (reftex-all-assq
+ 'thebib (symbol-value reftex-docstruct-symbol))))))
+ ((eq 'bib bibtype)
+ (reftex-extract-bib-entries (reftex-get-bibfile-list)))
+ (reftex-default-bibliography
+ (reftex-extract-bib-entries (reftex-default-bibliography))))))
+ (cl-loop
+ for entry in candidates
+ collect
+ (let ((key (substring-no-properties (car entry))))
+ (company-reftex-annotate
+ key
+ (when company-reftex-annotate-citations
+ (reftex-format-citation entry company-reftex-annotate-citations))))))))
+
+;;;###autoload
+(defun company-reftex-citations (command &optional arg &rest _)
+ "Company backend for LaTeX citations, powered by reftex.
+For more information on COMMAND and ARG see `company-backends'."
+ (interactive (list 'interactive))
+ (cl-case command
+ (interactive (company-begin-backend 'company-reftex-labels))
+ (prefix (company-reftex-prefix company-reftex-citations-regexp))
+ (candidates (company-reftex-citation-candidates arg))
+ (annotation (when company-reftex-annotate-citations
+ (concat
+ (unless company-tooltip-align-annotations " -> ")
+ (get-text-property 0 'reftex-annotation arg))))))
+
+
+
+;; Labels
+
+(defun company-reftex-label-candidates (prefix)
+ "Find all label candidates matching PREFIX."
+ (reftex-access-scan-info)
+ (cl-loop for entry in (symbol-value reftex-docstruct-symbol)
+ if (and (stringp (car entry)) (string-prefix-p prefix (car entry)))
+ collect
+ (company-reftex-annotate (car entry) (cl-caddr entry))))
+
+;;;###autoload
+(defun company-reftex-labels (command &optional arg &rest _)
+ "Company backend for LaTeX labels, powered by reftex.
+For more information on COMMAND and ARG see `company-backends'."
+ (interactive (list 'interactive))
+ (cl-case command
+ (interactive (company-begin-backend 'company-reftex-labels))
+ (prefix (company-reftex-prefix company-reftex-labels-regexp))
+ (candidates (company-reftex-label-candidates arg))
+ (annotation (when company-reftex-annotate-labels
+ (concat
+ (unless company-tooltip-align-annotations " -> ")
+ (get-text-property 0 'reftex-annotation arg))))))
+
+(provide 'company-reftex)
+
+;;; company-reftex.el ends here
diff --git a/packages/company-restclient-20151202.1201.el b/packages/company-restclient-20190426.1312.el
similarity index 95%
rename from packages/company-restclient-20151202.1201.el
rename to packages/company-restclient-20190426.1312.el
index 18112e4..02ea275 100644
--- a/packages/company-restclient-20151202.1201.el
+++ b/packages/company-restclient-20190426.1312.el
@@ -1,11 +1,11 @@
-;;; company-restclient.el --- company-mode completion back-end for restclient-mode
+;;; company-restclient.el --- company-mode completion back-end for restclient-mode -*- lexical-binding: t -*-
;; Public domain.
;; Author: Iku Iwasa
;; URL: https://github.com/iquiw/company-restclient
-;; Package-Version: 20151202.1201
-;; Version: 0.2.0
+;; Package-Version: 20190426.1312
+;; Version: 0.3.0
;; Package-Requires: ((cl-lib "0.5") (company "0.8.0") (emacs "24") (know-your-http-well "0.2.0") (restclient "0.0.0"))
;;; Commentary:
@@ -67,13 +67,13 @@ The key is header name and the value is list of header values.")
(header (or (company-grab "^[-[:alpha:]]*")
(company-restclient--grab-var)
(company-grab-symbol)))
- (vardecl nil)
(comment nil)
+ ;; Try to grab variable for vardecl too, as it can be variable reference.
(t (company-restclient--grab-var))))
(defun company-restclient--grab-var ()
"Grab variable for completion prefix."
- (company-grab ".\\(:[^: \n]*\\)" 1))
+ (company-grab "\\(:[^: \n]*\\)" 1))
(defun company-restclient-candidates (prefix)
"Provide completion candidates for the given PREFIX."
diff --git a/packages/company-rtags-20180730.338.el b/packages/company-rtags-20190821.449.el
similarity index 98%
rename from packages/company-rtags-20180730.338.el
rename to packages/company-rtags-20190821.449.el
index f93cbde..26f1735 100644
--- a/packages/company-rtags-20180730.338.el
+++ b/packages/company-rtags-20190821.449.el
@@ -5,7 +5,7 @@
;; Author: Jan Erik Hanssen
;; Anders Bakken
;; URL: http://rtags.net
-;; Package-Version: 20180730.338
+;; Package-Version: 20190821.449
;; Version: 0.5
;; Package-Requires: ((emacs "24.3") (company "0.8.1") (rtags "2.10"))
@@ -188,7 +188,8 @@ otherwise 'meta property. See also `company-rtags--meta'."
(let ((meta (company-rtags--meta candidate insert)))
(cond
((null meta) nil)
- ((string-match "\\((.*)\\)" meta)
+ ((and (string-match "\\((.*)\\)" meta)
+ (not (string-match "^struct (anonymous)" meta)))
(match-string 1 meta)))))
(defun company-rtags-completions-calculate-maxwidth ()
diff --git a/packages/company-terraform-20180703.1233.tar b/packages/company-terraform-20190607.1037.tar
similarity index 99%
rename from packages/company-terraform-20180703.1233.tar
rename to packages/company-terraform-20190607.1037.tar
index 0f2bb4d..970f721 100644
Binary files a/packages/company-terraform-20180703.1233.tar and b/packages/company-terraform-20190607.1037.tar differ
diff --git a/packages/company-web-20180402.1155.tar b/packages/company-web-20180402.1155.tar
index 1654ef9..338a04f 100644
Binary files a/packages/company-web-20180402.1155.tar and b/packages/company-web-20180402.1155.tar differ
diff --git a/packages/confluence-20151021.128.tar b/packages/confluence-20151021.128.tar
index eb3c4de..806e3e3 100644
Binary files a/packages/confluence-20151021.128.tar and b/packages/confluence-20151021.128.tar differ
diff --git a/packages/copy-as-format-20171216.16.el b/packages/copy-as-format-20190523.258.el
similarity index 84%
rename from packages/copy-as-format-20171216.16.el
rename to packages/copy-as-format-20190523.258.el
index 7841740..7f21669 100644
--- a/packages/copy-as-format-20171216.16.el
+++ b/packages/copy-as-format-20190523.258.el
@@ -1,9 +1,9 @@
-;;; copy-as-format.el --- Copy buffer locations as GitHub/Slack/JIRA/HipChat/... formatted code -*- lexical-binding: t; -*-
+;;; copy-as-format.el --- Copy buffer locations as GitHub/Slack/JIRA etc... formatted code -*- lexical-binding: t; -*-
;; Copyright (C) 2016-2017 Skye Shaw
;; Author: Skye Shaw
-;; Package-Version: 20171216.16
-;; Package-X-Original-Version: 0.0.7
+;; Package-Version: 20190523.258
+;; Package-X-Original-Version: 0.0.8
;; Keywords: github, slack, jira, hipchat, gitlab, bitbucket, org-mode, pod, rst, asciidoc, tools, convenience
;; URL: https://github.com/sshaw/copy-as-format
;; Package-Requires: ((cl-lib "0.5"))
@@ -39,6 +39,9 @@
;;; Change Log:
+;; 2019-01-19 - v0.0.8
+;; * Add more languages to Jira (thanks Peter Oliver)
+;;
;; 2017-12-15 - v0.0.7
;; * Add support for AsciiDoc
;; * Remove use of string-empty-p to support pre 24.4 versions of Emacs
@@ -70,10 +73,19 @@
(require 'tabify)
(require 'xml)
-(defvar copy-as-format-default "markdown"
- "Name of the default formatter, defaults to `markdown'.")
+(defgroup copy-as-format nil
+ "Copy buffer locations as GitHub/Slack/JIRA etc... formatted code"
+ :prefix "copy-as-format-"
+ :link '(url-link :tag "Report a Bug" "https://github.com/sshaw/copy-as-format/issues")
+ :link '(url-link :tag "Homepage" "https://github.com/sshaw/copy-as-format")
+ :group 'convenience)
+
+(defcustom copy-as-format-default "markdown"
+ "Name of the default formatter, defaults to `markdown'."
+ :type 'string
+ :group 'copy-as-format)
-(defvar copy-as-format-format-alist
+(defcustom copy-as-format-format-alist
'(("asciidoc" copy-as-format--asciidoc)
("bitbucket" copy-as-format--github)
("disqus" copy-as-format--disqus)
@@ -88,24 +100,47 @@
("pod" copy-as-format--pod)
("rst" copy-as-format--rst)
("slack" copy-as-format--slack))
- "Alist of format names and the function to do the formatting.")
+ "Alist of format names and the function to do the formatting."
+ :type '(alist :key-type string :value-type (group function))
+ :group 'copy-as-format)
-(defvar copy-as-format-asciidoc-include-file-name nil
- "If non-nil include the buffer's file name.")
+(defcustom copy-as-format-asciidoc-include-file-name nil
+ "If non-nil include the buffer's file name."
+ :type 'boolean
+ :group 'copy-as-format)
-(defvar copy-as-format-asciidoc-language-alist nil
+(defcustom copy-as-format-asciidoc-language-alist nil
"Alist of file name patterns to language names used for syntax highlighting.
By default the buffer's file extension is used. If this does not
-work with your processor add the appropriate mapping here.")
+work with your processor add the appropriate mapping here."
+ :type '(alist :key-type string :value-type string)
+ :group 'copy-as-format)
(defconst copy-as-format--jira-supported-languages
'(("as" "actionscript")
+ ("adb" "ada")
+ ("ads" "ada")
+ ("cs" "c#")
+ ("erl" "erlang")
+ ("hs" "haskel")
("htm" "html")
- ("js" "javascript")))
-
-(dolist (lang '("html" "java" "sql" "xhtml" "xml"))
+ ("mm" "objc")
+ ("pl" "perl")
+ ("pm" "perl")
+ ("py" "python")
+ ("rb" "ruby")
+ ("ksh" "sh")
+ ("vb" "visualbasic")
+ ("yml" "yaml"))
+ "Alist mapping file extensions to Jira language names.
+Jira's {code} markup blocks are documented at URL `https://jira.atlassian.com/secure/WikiRendererHelpAction.jspa?section=advanced',
+but you can get a complete list from Jira itself by trying to use
+a language unknown to it.")
+
+(dolist (lang '("applescript" "bash" "c" "cpp" "css" "go" "groovy" "html" "java" "js" "json" "lua" "php" "r" "scala" "sh" "sql" "swift" "xml" "yaml"))
(add-to-list 'copy-as-format--jira-supported-languages (list lang lang)))
+
(defun copy-as-format--extract-text ()
(if (not (use-region-p))
(buffer-substring-no-properties (line-beginning-position) (line-end-position))
@@ -181,11 +216,9 @@ work with your processor add the appropriate mapping here.")
(defun copy-as-format--jira (text multiline)
(if multiline
- (let ((lang (car (assoc (copy-as-format--language)
- copy-as-format--jira-supported-languages))))
- (format "{code%s}\n%s\n{code}\n"
- (if (null lang) "" (concat ":" lang))
- text))
+ (let ((lang (car (cdr (assoc (copy-as-format--language)
+ copy-as-format--jira-supported-languages)))))
+ (format "{code:%s}\n%s\n{code}\n" (or lang "none") text))
(format "{{%s}}" (copy-as-format--trim text))))
(defun copy-as-format--markdown (text multiline)
diff --git a/packages/counsel-20181111.1805.el b/packages/counsel-20190821.1027.el
similarity index 68%
rename from packages/counsel-20181111.1805.el
rename to packages/counsel-20190821.1027.el
index 21efde3..b1ec0c5 100644
--- a/packages/counsel-20181111.1805.el
+++ b/packages/counsel-20190821.1027.el
@@ -1,12 +1,12 @@
;;; counsel.el --- Various completion functions using Ivy -*- lexical-binding: t -*-
-;; Copyright (C) 2015-2018 Free Software Foundation, Inc.
+;; Copyright (C) 2015-2019 Free Software Foundation, Inc.
;; Author: Oleh Krehel
;; URL: https://github.com/abo-abo/swiper
-;; Package-Version: 20181111.1805
-;; Version: 0.10.0
-;; Package-Requires: ((emacs "24.3") (swiper "0.9.0"))
+;; Package-Version: 20190821.1027
+;; Version: 0.12.0
+;; Package-Requires: ((emacs "24.3") (swiper "0.12.0"))
;; Keywords: convenience, matching, tools
;; This file is part of GNU Emacs.
@@ -22,7 +22,7 @@
;; GNU General Public License for more details.
;; For a full copy of the GNU General Public License
-;; see .
+;; see .
;;; Commentary:
@@ -31,11 +31,11 @@
;;
;; Currently available:
;; - Symbol completion for Elisp, Common Lisp, Python, Clojure, C, C++.
-;; - Describe fuctions for Elisp: function, variable, library, command,
+;; - Describe functions for Elisp: function, variable, library, command,
;; bindings, theme.
;; - Navigation functions: imenu, ace-line, semantic, outline.
;; - Git utilities: git-files, git-grep, git-log, git-stash, git-checkout.
-;; - Grep utitilies: grep, ag, pt, recoll, ack, rg.
+;; - Grep utilities: grep, ag, pt, recoll, ack, rg.
;; - System utilities: process list, rhythmbox, linux-app.
;; - Many more.
@@ -45,36 +45,60 @@
(require 'compile)
(require 'dired)
+(defgroup counsel nil
+ "Completion functions using Ivy."
+ :group 'matching
+ :prefix "counsel-")
+
;;* Utility
-(defvar counsel-more-chars-alist
- '((counsel-grep . 2)
- (t . 3))
- "Map commands to their minimum required input length.
-That is the number of characters prompted for before fetching
-candidates. The special key t is used as a fallback.")
-
-(defun counsel-more-chars ()
- "Return two fake candidates prompting for at least N input.
-N is obtained from `counsel-more-chars-alist'."
- (let ((diff (- (ivy-alist-setting counsel-more-chars-alist)
- (length ivy-text))))
- (when (> diff 0)
- (list "" (format "%d chars more" diff)))))
-
-(defun counsel-unquote-regex-parens (str)
- "Unquote regexp parentheses in STR."
- (if (consp str)
- (mapconcat #'car (cl-remove-if-not #'cdr str) ".*")
- (replace-regexp-in-string "\\\\[(){}]\\|[()]"
- (lambda (s)
- (or (cdr (assoc s '(("\\(" . "(")
- ("\\)" . ")")
- ("(" . "\\(")
- (")" . "\\)")
- ("\\{" . "{")
- ("\\}" . "}"))))
- (error "Unexpected parenthesis: %S" s)))
- str t t)))
+(define-obsolete-variable-alias 'counsel-more-chars-alist 'ivy-more-chars-alist "0.10.0")
+
+(define-obsolete-function-alias 'counsel-more-chars 'ivy-more-chars "0.10.0")
+
+(defun counsel--elisp-to-pcre (regex &optional look-around)
+ "Convert REGEX from Elisp format to PCRE format, on best-effort basis.
+REGEX may be of any format returned by an Ivy regex function,
+namely a string or a list. The return value is always a string.
+
+Note that incorrect results may be returned for sufficiently
+complex regexes."
+ (if (consp regex)
+ (if (and look-around
+ (or (cdr regex)
+ (not (cdar regex))))
+ (concat
+ "^"
+ (mapconcat
+ (lambda (pair)
+ (let ((subexp (counsel--elisp-to-pcre (car pair))))
+ (format "(?%c.*%s)"
+ (if (cdr pair) ?= ?!)
+ subexp)))
+ regex
+ ""))
+ (mapconcat
+ (lambda (pair)
+ (let ((subexp (counsel--elisp-to-pcre (car pair))))
+ (if (string-match-p "|" subexp)
+ (format "(?:%s)" subexp)
+ subexp)))
+ (cl-remove-if-not #'cdr regex)
+ ".*"))
+ (replace-regexp-in-string
+ "\\\\[(){}|`']\\|[()]"
+ (lambda (s)
+ (or (cdr (assoc s '(("\\(" . "(")
+ ("\\)" . ")")
+ ("(" . "\\(")
+ (")" . "\\)")
+ ("\\{" . "{")
+ ("\\}" . "}")
+ ("\\|" . "|")
+ ("\\`" . "^")
+ ("\\'" . "$"))))
+ (error
+ "Unexpected error in `counsel--elisp-to-pcre' (got match %S)" s)))
+ regex t t)))
(defun counsel-directory-name (dir)
"Return the name of directory DIR with a slash."
@@ -91,33 +115,35 @@ N is obtained from `counsel-more-chars-alist'."
str)
str))
-(defun counsel-require-program (program)
- "Check system for PROGRAM, printing error if unfound."
- (or (and (stringp program)
- (not (string= program ""))
- (executable-find program))
- (user-error "Required program \"%s\" not found in your path" program)))
+(defun counsel-require-program (cmd)
+ "Check system for program used in CMD, printing error if not found.
+CMD is either a string or a list of strings.
+To skip the `executable-find' check, start the string with a space."
+ (unless (and (stringp cmd) (string-match-p "^ " cmd))
+ (let ((program (if (listp cmd)
+ (car cmd)
+ (car (split-string cmd)))))
+ (or (and (stringp program)
+ (not (string= program ""))
+ (executable-find program))
+ (user-error "Required program \"%s\" not found in your path" program)))))
(defun counsel-prompt-function-default ()
"Return prompt appended with a semicolon."
- (ivy-add-prompt-count
- (format "%s: " (ivy-state-prompt ivy-last))))
+ (declare (obsolete ivy-set-prompt "0.10.0"))
+ (ivy-add-prompt-count (concat (ivy-state-prompt ivy-last) ": ")))
(declare-function eshell-split-path "esh-util")
(defun counsel-prompt-function-dir ()
"Return prompt appended with the parent directory."
(require 'esh-util)
- (ivy-add-prompt-count
- (let ((directory (ivy-state-directory ivy-last)))
- (format "%s [%s]: "
- (ivy-state-prompt ivy-last)
- (let ((dir-list (eshell-split-path directory)))
- (if (> (length dir-list) 3)
- (apply #'concat
- (append '("...")
- (cl-subseq dir-list (- (length dir-list) 3))))
- directory))))))
+ (let* ((dir (ivy-state-directory ivy-last))
+ (parts (nthcdr 3 (eshell-split-path dir)))
+ (dir (format " [%s]: " (if parts (apply #'concat "..." parts) dir))))
+ (ivy-add-prompt-count
+ (replace-regexp-in-string ; Insert dir before any trailing colon.
+ "\\(?:: ?\\)?\\'" dir (ivy-state-prompt ivy-last) t t))))
;;* Async Utility
(defvar counsel--async-time nil
@@ -137,6 +163,9 @@ The time is measured in seconds.")
This plist maps commands to a plist mapping their exit codes to
descriptions.")
+(defvar counsel--async-last-error-string nil
+ "When the process returned non-0, store the output here.")
+
(defun counsel-set-async-exit-code (cmd number str)
"For CMD, associate NUMBER exit code with STR."
(let ((plist (plist-get counsel--async-exit-code-plist cmd)))
@@ -147,24 +176,40 @@ descriptions.")
(defvar counsel-async-split-string-re "\n"
"Store the regexp for splitting shell command output.")
+(make-obsolete-variable
+ 'counsel-async-split-string-re 'counsel-async-split-string-re-alist "<2019-07-16 Tue>")
+
+(defvar counsel-async-split-string-re-alist '((t . "\n"))
+ "Store the regexp for splitting shell command output.")
(defvar counsel-async-ignore-re nil
"Regexp matching candidates to ignore in `counsel--async-filter'.")
+(make-obsolete-variable 'counsel-async-ignore-re 'counsel-async-ignore-re-alist "<2019-07-16 Tue>")
+
+(defvar counsel-async-ignore-re-alist nil
+ "An alist of regexp matching candidates to ignore in `counsel--async-filter'.")
+
+(defvar counsel--async-last-command nil
+ "Store the last command ran by `counsel--async-command'.")
(defun counsel--async-command (cmd &optional sentinel filter name)
"Start and return new counsel process by calling CMD.
+CMD can be either a shell command as a string, or a list of the
+program name to be called directly, followed by its arguments.
If the default counsel process or one with NAME already exists,
kill it and its associated buffer before starting a new one.
Give the process the functions SENTINEL and FILTER, which default
to `counsel--async-sentinel' and `counsel--async-filter',
respectively."
(counsel-delete-process name)
- (let ((name (or name " *counsel*"))
- proc)
- (when (get-buffer name)
- (kill-buffer name))
- (setq proc (start-file-process-shell-command
- name (get-buffer-create name) cmd))
+ (setq name (or name " *counsel*"))
+ (when (get-buffer name)
+ (kill-buffer name))
+ (setq counsel--async-last-command cmd)
+ (let* ((buf (get-buffer-create name))
+ (proc (if (listp cmd)
+ (apply #'start-file-process name buf cmd)
+ (start-file-process-shell-command name buf cmd))))
(setq counsel--async-time (current-time))
(setq counsel--async-start counsel--async-time)
(set-process-sentinel proc (or sentinel #'counsel--async-sentinel))
@@ -173,6 +218,12 @@ respectively."
(defvar counsel-grep-last-line nil)
+(defun counsel--split-string (&optional str)
+ (split-string
+ (or str (buffer-string))
+ (ivy-alist-setting counsel-async-split-string-re-alist)
+ t))
+
(defun counsel--async-sentinel (process _msg)
"Sentinel function for an asynchronous counsel PROCESS."
(when (eq (process-status process) 'exit)
@@ -181,14 +232,16 @@ respectively."
(ivy--set-candidates
(ivy--sort-maybe
(with-current-buffer (process-buffer process)
- (split-string (buffer-string) counsel-async-split-string-re t))))
+ (counsel--split-string))))
(setq counsel-grep-last-line nil)
(when counsel--async-start
(setq counsel--async-duration
(time-to-seconds (time-since counsel--async-start))))
(let ((re (ivy-re-to-str (funcall ivy--regex-function ivy-text))))
(if ivy--old-cands
- (ivy--recompute-index ivy-text re ivy--all-candidates)
+ (if (eq (ivy-alist-setting ivy-index-functions-alist) 'ivy-recompute-index-zero)
+ (ivy-set-index 0)
+ (ivy--recompute-index ivy-text re ivy--all-candidates))
(unless (ivy-set-index
(ivy--preselect-index
(ivy-state-preselect ivy-last)
@@ -198,6 +251,8 @@ respectively."
(if ivy--all-candidates
(ivy--exhibit)
(ivy--insert-minibuffer "")))
+ (setq counsel--async-last-error-string
+ (with-current-buffer (process-buffer process) (buffer-string)))
(setq ivy--all-candidates
(let ((status (process-exit-status process))
(plist (plist-get counsel--async-exit-code-plist
@@ -208,10 +263,8 @@ respectively."
(ivy--exhibit))))
(defcustom counsel-async-filter-update-time 500000
- "The amount of time in microseconds to wait until updating
-`counsel--async-filter'."
- :type 'integer
- :group 'ivy)
+ "The amount of microseconds to wait until updating `counsel--async-filter'."
+ :type 'integer)
(defun counsel--async-filter (process str)
"Receive from PROCESS the output STR.
@@ -225,16 +278,14 @@ Update the minibuffer with the amount of lines collected every
(with-current-buffer (process-buffer process)
(setq numlines (count-lines (point-min) (point-max)))
(ivy--set-candidates
- (let ((lines (split-string (buffer-string)
- counsel-async-split-string-re
- t)))
- (if (stringp counsel-async-ignore-re)
+ (let ((lines (counsel--split-string))
+ (ignore-re (ivy-alist-setting counsel-async-ignore-re-alist)))
+ (if (stringp ignore-re)
(cl-remove-if (lambda (line)
- (string-match-p counsel-async-ignore-re line))
+ (string-match-p ignore-re line))
lines)
lines))))
- (let ((ivy--prompt (format (concat "%d++ " (ivy-state-prompt ivy-last))
- numlines)))
+ (let ((ivy--prompt (format "%d++ %s" numlines (ivy-state-prompt ivy-last))))
(ivy--insert-minibuffer (ivy--format ivy--all-candidates)))
(setq counsel--async-time (current-time)))))
@@ -299,6 +350,7 @@ Update the minibuffer with the amount of lines collected every
(declare-function jedi:complete-request "ext:jedi-core")
(declare-function jedi:ac-direct-matches "ext:jedi")
+;;;###autoload
(defun counsel-jedi ()
"Python completion at point."
(interactive)
@@ -357,12 +409,11 @@ Update the minibuffer with the amount of lines collected every
;;** `counsel-company'
(defvar company-candidates)
-(defvar company-point)
(defvar company-common)
+(defvar company-prefix)
+(declare-function company-abort "ext:company")
(declare-function company-complete "ext:company")
(declare-function company-mode "ext:company")
-(declare-function company-complete-common "ext:company")
-(declare-function company-abort "ext:company")
;;;###autoload
(defun counsel-company ()
@@ -371,13 +422,17 @@ Update the minibuffer with the amount of lines collected every
(company-mode 1)
(unless company-candidates
(company-complete))
- (when company-point
- (when (looking-back company-common (line-beginning-position))
- (setq ivy-completion-beg (match-beginning 0))
- (setq ivy-completion-end (match-end 0)))
- (ivy-read "company cand: " company-candidates
- :action #'ivy-completion-in-region-action
- :unwind #'company-abort)))
+ (let ((len (cond (company-common
+ (length company-common))
+ (company-prefix
+ (length company-prefix)))))
+ (when len
+ (setq ivy-completion-beg (- (point) len))
+ (setq ivy-completion-end (point))
+ (ivy-read "Candidate: " company-candidates
+ :action #'ivy-completion-in-region-action
+ :unwind #'company-abort
+ :caller 'counsel-company))))
;;** `counsel-irony'
(declare-function irony-completion-candidates-async "ext:irony-completion")
@@ -476,9 +531,6 @@ Used by commands `counsel-describe-variable' and
(error "Couldn't find definition of %s"
sym))))))))
-(define-obsolete-function-alias 'counsel-symbol-at-point
- 'ivy-thing-at-point "0.7.0")
-
(defun counsel--variable-p (symbol)
"Return non-nil if SYMBOL is a bound or documented variable."
(or (and (boundp symbol)
@@ -487,8 +539,7 @@ Used by commands `counsel-describe-variable' and
(defcustom counsel-describe-variable-function #'describe-variable
"Function to call to describe a variable passed as parameter."
- :type 'function
- :group 'ivy)
+ :type 'function)
(defun counsel-describe-variable-transformer (var)
"Propertize VAR if it's a custom variable."
@@ -526,8 +577,7 @@ Variables declared using `defcustom' are highlighted according to
(defcustom counsel-describe-function-function #'describe-function
"Function to call to describe a function passed as parameter."
- :type 'function
- :group 'ivy)
+ :type 'function)
(defun counsel-describe-function-transformer (function-name)
"Propertize FUNCTION-NAME if it's an interactive function."
@@ -544,7 +594,6 @@ Variables declared using `defcustom' are highlighted according to
(defcustom counsel-describe-function-preselect #'ivy-thing-at-point
"Determine what `counsel-describe-function' should preselect."
- :group 'ivy
:type '(radio
(function-item ivy-thing-at-point)
(function-item ivy-function-called-at-point)))
@@ -601,23 +650,32 @@ to `ivy-highlight-face'."
(defun counsel--setq-doconst (x)
"Return a cons of description and value for X.
X is an item of a radio- or choice-type defcustom."
- (let (y)
- (when (and (listp x)
- (consp (setq y (last x))))
- (unless (equal y '(function))
- (setq x (car y))
- (cons (prin1-to-string x)
- (if (symbolp x)
- (list 'quote x)
- x))))))
+ (when (listp x)
+ (let ((v (car-safe (last x)))
+ (tag (and (eq (car x) 'const)
+ (plist-get (cdr x) :tag))))
+ (when (and (or v tag) (not (eq v 'function)))
+ (cons
+ (concat
+ (when tag
+ (concat tag ": "))
+ (if (stringp v) v (prin1-to-string v)))
+ (if (symbolp v)
+ (list 'quote v)
+ v))))))
(declare-function lv-message "ext:lv")
(declare-function lv-delete-window "ext:lv")
(declare-function custom-variable-documentation "cus-edit")
+(defface counsel-variable-documentation
+ '((t :inherit font-lock-comment-face))
+ "Face for displaying Lisp documentation."
+ :group 'ivy-faces)
+
;;;###autoload
(defun counsel-set-variable (sym)
- "Set a variable, with completion.
+ "Set a variable SYM, with completion.
When the selected variable is a `defcustom' with the type boolean
or radio, offer completion of all possible values.
@@ -638,26 +696,25 @@ With a prefix arg, restrict list to variables defined using
(require 'lv nil t)
(not (string= "nil" (custom-variable-documentation sym)))
(propertize (custom-variable-documentation sym)
- 'face 'font-lock-comment-face)))
+ 'face 'counsel-variable-documentation)))
sym-type
cands)
(unwind-protect
(progn
(when doc
- (lv-message doc))
+ (lv-message (ivy--quote-format-string doc)))
(if (and (boundp sym)
(setq sym-type (get sym 'custom-type))
(cond
((and (consp sym-type)
(memq (car sym-type) '(choice radio)))
- (setq cands (delq nil (mapcar #'counsel--setq-doconst (cdr sym-type)))))
+ (setq cands (delq nil (mapcar #'counsel--setq-doconst
+ (cdr sym-type)))))
((eq sym-type 'boolean)
(setq cands '(("nil" . nil) ("t" . t))))
(t nil)))
(let* ((sym-val (symbol-value sym))
- ;; Escape '%' chars if present
- (sym-val-str (replace-regexp-in-string "%" "%%" (format "%s" sym-val)))
- (res (ivy-read (format "Set (%S <%s>): " sym sym-val-str)
+ (res (ivy-read (format "Set (%S <%s>): " sym sym-val)
cands
:preselect (prin1-to-string sym-val))))
(when res
@@ -715,7 +772,8 @@ a symbol and how to search for them."
;;;###autoload
(defun counsel-info-lookup-symbol (symbol &optional mode)
- "Forward to `info-lookup-symbol' with ivy completion."
+ "Forward SYMBOL to `info-lookup-symbol' with ivy completion.
+With prefix arg MODE a query for the symbol help mode is offered."
(interactive
(progn
(require 'info-look)
@@ -742,22 +800,30 @@ a symbol and how to search for them."
"Face used by `counsel-M-x' for key bindings."
:group 'ivy-faces)
+(defcustom counsel-alias-expand t
+ "When non-nil, show the expansion of aliases in `counsel-M-x'."
+ :type 'boolean
+ :group 'ivy)
+
(defun counsel-M-x-transformer (cmd)
"Return CMD annotated with its active key binding, if any."
- (let ((key (where-is-internal (intern cmd) nil t)))
- (if (not key)
- cmd
- ;; Prefer `' over `C-x 6' where applicable
- (let ((i (cl-search [?\C-x ?6] key)))
- (when i
- (let ((dup (vconcat (substring key 0 i) [f2] (substring key (+ i 2))))
- (map (current-global-map)))
- (when (equal (lookup-key map key)
- (lookup-key map dup))
- (setq key dup)))))
- (setq key (key-description key))
- (put-text-property 0 (length key) 'face 'counsel-key-binding key)
- (format "%s (%s)" cmd key))))
+ (let ((alias (symbol-function (intern cmd)))
+ (key (where-is-internal (intern cmd) nil t)))
+ (concat cmd
+ (when (and (symbolp alias) counsel-alias-expand)
+ (format " (%s)" alias))
+ (when key
+ ;; Prefer `' over `C-x 6' where applicable
+ (let ((i (cl-search [?\C-x ?6] key)))
+ (when i
+ (let ((dup (vconcat (substring key 0 i) [f2] (substring key (+ i 2))))
+ (map (current-global-map)))
+ (when (equal (lookup-key map key)
+ (lookup-key map dup))
+ (setq key dup)))))
+ (setq key (key-description key))
+ (put-text-property 0 (length key) 'face 'counsel-key-binding key)
+ (format " (%s)" key)))))
(defvar amx-initialized)
(defvar amx-cache)
@@ -793,21 +859,33 @@ packages are, in order of precedence, `amx' and `smex'."
(defun counsel--M-x-prompt ()
"String for `M-x' plus the string representation of `current-prefix-arg'."
- (if (not current-prefix-arg)
- "M-x "
- (concat
- (if (eq current-prefix-arg '-)
- "- "
- (if (integerp current-prefix-arg)
- (format "%d " current-prefix-arg)
- (if (= (car current-prefix-arg) 4)
- "C-u "
- (format "%d " (car current-prefix-arg)))))
- "M-x ")))
+ (concat (cond ((null current-prefix-arg)
+ nil)
+ ((eq current-prefix-arg '-)
+ "- ")
+ ((integerp current-prefix-arg)
+ (format "%d " current-prefix-arg))
+ ((= (car current-prefix-arg) 4)
+ "C-u ")
+ (t
+ (format "%d " (car current-prefix-arg))))
+ "M-x "))
(defvar counsel-M-x-history nil
"History for `counsel-M-x'.")
+(defun counsel-M-x-action (cmd)
+ "Execute CMD."
+ (setq cmd (intern cmd))
+ (cond ((bound-and-true-p amx-initialized)
+ (amx-rank cmd))
+ ((bound-and-true-p smex-initialized-p)
+ (smex-rank cmd)))
+ (setq prefix-arg current-prefix-arg)
+ (setq this-command cmd)
+ (setq real-this-command cmd)
+ (command-execute cmd 'record))
+
;;;###autoload
(defun counsel-M-x (&optional initial-input)
"Ivy version of `execute-extended-command'.
@@ -822,19 +900,13 @@ when available, in that order of precedence."
(setq real-this-command real-last-command)
(let ((externs (counsel--M-x-externs)))
(ivy-read (counsel--M-x-prompt) (or externs obarray)
- :predicate (and (not externs) #'commandp)
+ :predicate (and (not externs)
+ (lambda (sym)
+ (and (commandp sym)
+ (not (get sym 'byte-obsolete-info)))))
:require-match t
:history 'counsel-M-x-history
- :action (lambda (cmd)
- (setq cmd (intern cmd))
- (cond ((bound-and-true-p amx-initialized)
- (amx-rank cmd))
- ((bound-and-true-p smex-initialized-p)
- (smex-rank cmd)))
- (setq prefix-arg current-prefix-arg)
- (setq this-command cmd)
- (setq real-this-command cmd)
- (command-execute cmd 'record))
+ :action #'counsel-M-x-action
:sort (not externs)
:keymap counsel-describe-map
:initial-input initial-input
@@ -863,10 +935,11 @@ when available, in that order of precedence."
'(("r" counsel-command-history-action-eval "eval command")
("e" counsel-command-history-action-edit-and-eval "edit and eval command")))
+;;;###autoload
(defun counsel-command-history ()
"Show the history of commands."
(interactive)
- (ivy-read "%d Command: " (mapcar #'prin1-to-string command-history)
+ (ivy-read "Command: " (mapcar #'prin1-to-string command-history)
:require-match t
:action #'counsel-command-history-action-eval
:caller 'counsel-command-history))
@@ -987,7 +1060,8 @@ Usable with `ivy-resume', `ivy-next-line-and-call' and
(ivy-set-actions
'counsel-descbinds
'(("d" counsel-descbinds-action-find "definition")
- ("I" counsel-descbinds-action-info "info")))
+ ("I" counsel-descbinds-action-info "info")
+ ("x" counsel-descbinds-action-exec "execute")))
(defvar counsel-descbinds-history nil
"History for `counsel-descbinds'.")
@@ -1021,18 +1095,28 @@ See `describe-buffer-bindings' for further information."
(push
(cons (format
"%-15s %s"
- (propertize key 'face 'font-lock-builtin-face)
+ (propertize key 'face 'counsel-key-binding)
fun)
(cons key cmd))
res))))
(forward-line 1)))
(nreverse res)))
+(defcustom counsel-descbinds-function #'describe-function
+ "Function to call to describe a function passed as parameter."
+ :type 'function)
+
(defun counsel-descbinds-action-describe (x)
"Describe function of candidate X.
See `describe-function' for further information."
(let ((cmd (cddr x)))
- (describe-function cmd)))
+ (funcall counsel-descbinds-function cmd)))
+
+(defun counsel-descbinds-action-exec (x)
+ "Run candidate X.
+See `execute-extended-command' for further information."
+ (let ((cmd (cddr x)))
+ (command-execute cmd 'record)))
(defun counsel-descbinds-action-find (x)
"Find symbol definition of candidate X.
@@ -1060,8 +1144,7 @@ BUFFER defaults to the current one."
;;** `counsel-describe-face'
(defcustom counsel-describe-face-function #'describe-face
"Function to call to describe a face or face name argument."
- :type 'function
- :group 'ivy)
+ :type 'function)
(defun counsel--face-at-point ()
"Return name of face around point.
@@ -1070,6 +1153,7 @@ back to the face of the character after point, and finally the
`default' face."
(symbol-name (or (face-at-point t) 'default)))
+;;;###autoload
(defun counsel-describe-face ()
"Completion for `describe-face'."
(interactive)
@@ -1095,17 +1179,20 @@ back to the face of the character after point, and finally the
("C" counsel-customize-face-other-window "customize other window")))
;;** `counsel-faces'
-(defun counsel--faces-format-function (format)
- "Return an `ivy-format-function' for `counsel-faces'.
+(defvar counsel--faces-format "%-40s %s")
+
+(defun counsel--faces-format-function (names)
+ "Customize `ivy-format-functions-alist' for `counsel-faces'.
Each candidate is formatted based on the given FORMAT string."
- (let ((formatter (lambda (name)
- (format format name (propertize list-faces-sample-text
- 'face (intern name))))))
- (lambda (names)
- (ivy--format-function-generic
- (lambda (name)
- (funcall formatter (ivy--add-face name 'ivy-current-match)))
- formatter names "\n"))))
+ (let ((formatter
+ (lambda (name)
+ (format counsel--faces-format name
+ (propertize list-faces-sample-text
+ 'face (intern name))))))
+ (ivy--format-function-generic
+ (lambda (name)
+ (funcall formatter (ivy--add-face name 'ivy-current-match)))
+ formatter names "\n")))
;;;###autoload
(defun counsel-faces ()
@@ -1114,10 +1201,9 @@ Actions are provided by default for describing or customizing the
selected face."
(interactive)
(let* ((names (mapcar #'symbol-name (face-list)))
- (ivy-format-function
- (counsel--faces-format-function
- (format "%%-%ds %%s"
- (apply #'max 0 (mapcar #'string-width names))))))
+ (counsel--faces-format
+ (format "%%-%ds %%s"
+ (apply #'max 0 (mapcar #'string-width names)))))
(ivy-read "Face: " names
:require-match t
:history 'face-name-history
@@ -1126,6 +1212,8 @@ selected face."
:action counsel-describe-face-function
:caller 'counsel-faces)))
+(add-to-list 'ivy-format-functions-alist '(counsel-faces . counsel--faces-format-function))
+
(ivy-set-actions
'counsel-faces
'(("c" counsel-customize-face "customize")
@@ -1141,29 +1229,37 @@ selected face."
'(("j" find-file-other-window "other window")
("x" counsel-find-file-extern "open externally")))
+(defun counsel--dominating-file (file &optional dir)
+ "Look up directory hierarchy for FILE, starting in DIR.
+Like `locate-dominating-file', but DIR defaults to
+`default-directory' and the return value is expanded."
+ (and (setq dir (locate-dominating-file (or dir default-directory) file))
+ (expand-file-name dir)))
+
(defun counsel-locate-git-root ()
- "Locate the root of the git repository containing the current buffer."
- (or (locate-dominating-file default-directory ".git")
- (error "Not in a git repository")))
+ "Return the root of the Git repository containing the current buffer."
+ (or (counsel--git-root)
+ (error "Not in a Git repository")))
+
+(defun counsel-git-cands ()
+ (let ((default-directory (counsel-locate-git-root)))
+ (split-string
+ (shell-command-to-string counsel-git-cmd)
+ "\n"
+ t)))
;;;###autoload
(defun counsel-git (&optional initial-input)
"Find file in the current Git repository.
INITIAL-INPUT can be given as the initial minibuffer input."
(interactive)
- (counsel-require-program (car (split-string counsel-git-cmd)))
- (let* ((default-directory (expand-file-name (counsel-locate-git-root)))
- (cands (split-string
- (shell-command-to-string counsel-git-cmd)
- "\n"
- t)))
- (ivy-read "Find file" cands
+ (counsel-require-program counsel-git-cmd)
+ (let ((default-directory (counsel-locate-git-root)))
+ (ivy-read "Find file: " (counsel-git-cands)
:initial-input initial-input
:action #'counsel-git-action
:caller 'counsel-git)))
-(ivy-set-prompt 'counsel-git #'counsel-prompt-function-default)
-
(defun counsel-git-action (x)
"Find file X in current Git repository."
(with-ivy-window
@@ -1175,9 +1271,9 @@ INITIAL-INPUT can be given as the initial minibuffer input."
(cd (ivy-state-directory ivy-last))
(counsel-cmd-to-dired
(counsel--expand-ls
- (format "%s | grep -i -E '%s' | xargs ls"
+ (format "%s | %s | xargs ls"
counsel-git-cmd
- (counsel-unquote-regex-parens ivy--old-re)))))
+ (counsel--file-name-filter)))))
(defvar counsel-dired-listing-switches "-alh"
"Switches passed to `ls' for `counsel-cmd-to-dired'.")
@@ -1227,12 +1323,6 @@ INITIAL-INPUT can be given as the initial minibuffer input."
(defvar counsel-git-grep-cmd nil
"Store the command for `counsel-git-grep'.")
-(defvar counsel--git-grep-count nil
- "Store the line count in current repository.")
-
-(defvar counsel--git-grep-count-threshold 20000
- "The maximum threshold beyond which repositories are considered large.")
-
(defvar counsel-git-grep-history nil
"History for `counsel-git-grep'.")
@@ -1243,21 +1333,34 @@ INITIAL-INPUT can be given as the initial minibuffer input."
(defcustom counsel-grep-post-action-hook nil
"Hook that runs after the point moves to the next candidate.
Typical value: '(recenter)."
- :type 'hook
- :group 'ivy)
+ :type 'hook)
-(defun counsel-git-grep-function (str &optional _pred &rest _unused)
- "Grep in the current git repository for STRING."
+(defcustom counsel-git-grep-cmd-function #'counsel-git-grep-cmd-function-default
+ "How a git-grep shell call is built from the input."
+ :type '(radio
+ (function-item counsel-git-grep-cmd-function-default)
+ (function-item counsel-git-grep-cmd-function-ignore-order)
+ (function :tag "Other")))
+
+(defun counsel-git-grep-cmd-function-default (str)
+ (format counsel-git-grep-cmd
+ (setq ivy--old-re (ivy--regex str t))))
+
+(defun counsel-git-grep-cmd-function-ignore-order (str)
+ (setq ivy--old-re (ivy--regex str t))
+ (let ((parts (split-string str " " t)))
+ (concat
+ "git --no-pager grep --full-name -n --no-color -i -e "
+ (mapconcat #'shell-quote-argument parts " --and -e "))))
+
+(defun counsel-git-grep-function (string)
+ "Grep in the current Git repository for STRING."
(or
- (and (> counsel--git-grep-count counsel--git-grep-count-threshold)
- (counsel-more-chars))
- (let* ((default-directory (ivy-state-directory ivy-last))
- (cmd (format counsel-git-grep-cmd
- (setq ivy--old-re (ivy--regex str t)))))
- (if (<= counsel--git-grep-count counsel--git-grep-count-threshold)
- (split-string (shell-command-to-string cmd) "\n" t)
- (counsel--gg-candidates (ivy--regex str))
- nil))))
+ (ivy-more-chars)
+ (progn
+ (counsel--async-command
+ (funcall counsel-git-grep-cmd-function string))
+ nil)))
(defun counsel-git-grep-action (x)
"Go to occurrence X in current Git repository."
@@ -1276,39 +1379,14 @@ Typical value: '(recenter)."
(swiper--cleanup)
(swiper--add-overlays (ivy--regex ivy-text))))))
-(defun counsel-git-grep-matcher (regexp candidates)
- "Return REGEXP matching CANDIDATES for `counsel-git-grep'."
- (or (and (equal regexp ivy--old-re)
- ivy--old-cands)
- (prog1
- (setq ivy--old-cands
- (cl-remove-if-not
- (lambda (x)
- (ignore-errors
- (when (string-match "^[^:]+:[^:]+:" x)
- (setq x (substring x (match-end 0)))
- (if (stringp regexp)
- (string-match regexp x)
- (let ((res t))
- (dolist (re regexp)
- (setq res
- (and res
- (ignore-errors
- (if (cdr re)
- (string-match (car re) x)
- (not (string-match (car re) x)))))))
- res)))))
- candidates))
- (setq ivy--old-re regexp))))
-
(defun counsel-git-grep-transformer (str)
"Higlight file and line number in STR."
(when (string-match "\\`\\([^:]+\\):\\([^:]+\\):" str)
(ivy-add-face-text-property (match-beginning 1) (match-end 1)
- 'compilation-info
+ 'ivy-grep-info
str)
(ivy-add-face-text-property (match-beginning 2) (match-end 2)
- 'compilation-line-number
+ 'ivy-grep-line-number
str))
str)
@@ -1339,18 +1417,51 @@ files in a project.")
(setq cmd counsel-git-grep-cmd-default)))
(cons proj cmd)))
-(defun counsel--git-grep-count-func-default ()
- "Default defun to calculate `counsel--git-grep-count'."
- (if (eq system-type 'windows-nt)
- 0
- (read (shell-command-to-string "du -s \"$(git rev-parse --git-dir)\" 2>/dev/null"))))
-
-(defvar counsel--git-grep-count-func #'counsel--git-grep-count-func-default
- "Defun to calculate `counsel--git-grep-count' for `counsel-git-grep'.")
+(defun counsel--call (command &optional result-fn)
+ "Synchronously call COMMAND and return its output as a string.
+COMMAND comprises the program name followed by its arguments, as
+in `make-process'. Signal `file-error' and emit a warning if
+COMMAND fails. Obey file handlers based on `default-directory'.
+On success, RESULT-FN is called in output buffer with no arguments."
+ (let ((stderr (make-temp-file "counsel-call-stderr-"))
+ status)
+ (unwind-protect
+ (with-temp-buffer
+ (setq status (apply #'process-file (car command) nil
+ (list t stderr) nil (cdr command)))
+ (if (eq status 0)
+ (if result-fn
+ (funcall result-fn)
+ ;; Return all output except trailing newline.
+ (buffer-substring (point-min)
+ (- (point)
+ (if (eq (bobp) (bolp))
+ 0
+ 1))))
+ ;; Convert process status into error list.
+ (setq status (list 'file-error
+ (mapconcat #'identity `(,@command "failed") " ")
+ status))
+ ;; Print stderr contents, if any, to *Warnings* buffer.
+ (let ((msg (condition-case err
+ (unless (zerop (cadr (insert-file-contents
+ stderr nil nil nil t)))
+ (buffer-string))
+ (error (error-message-string err)))))
+ (lwarn 'ivy :warning "%s" (apply #'concat
+ (error-message-string status)
+ (and msg (list "\n" msg)))))
+ ;; Signal `file-error' with process status.
+ (signal (car status) (cdr status))))
+ (delete-file stderr))))
+
+(defun counsel--command (&rest command)
+ "Forward COMMAND to `counsel--call'."
+ (counsel--call command))
;;;###autoload
(defun counsel-git-grep (&optional cmd initial-input)
- "Grep for a string in the current git repository.
+ "Grep for a string in the current Git repository.
When CMD is a string, use it as a \"git grep\" command.
When CMD is non-nil, prompt for a specific \"git grep\" command.
INITIAL-INPUT can be given as the initial minibuffer input."
@@ -1359,41 +1470,32 @@ INITIAL-INPUT can be given as the initial minibuffer input."
proj)
(setq proj (car proj-and-cmd))
(setq counsel-git-grep-cmd (cdr proj-and-cmd))
- (counsel-require-program (car (split-string counsel-git-grep-cmd)))
+ (counsel-require-program counsel-git-grep-cmd)
(let ((collection-function
(if proj
#'counsel-git-grep-proj-function
#'counsel-git-grep-function))
(unwind-function
- (if proj
- (lambda ()
- (counsel-delete-process)
- (swiper--cleanup))
- (lambda ()
- (swiper--cleanup))))
+ (lambda ()
+ (counsel-delete-process)
+ (swiper--cleanup)))
(default-directory (if proj
(car proj)
(counsel-locate-git-root))))
- (setq counsel--git-grep-count (funcall counsel--git-grep-count-func))
- (ivy-read "git grep" collection-function
+ (ivy-read "git grep: " collection-function
:initial-input initial-input
- :matcher #'counsel-git-grep-matcher
- :dynamic-collection (or proj
- (>
- counsel--git-grep-count
- counsel--git-grep-count-threshold))
+ :dynamic-collection t
:keymap counsel-git-grep-map
:action #'counsel-git-grep-action
:unwind unwind-function
:history 'counsel-git-grep-history
:caller 'counsel-git-grep))))
-(ivy-set-prompt 'counsel-git-grep #'counsel-prompt-function-default)
(cl-pushnew 'counsel-git-grep ivy-highlight-grep-commands)
(defun counsel-git-grep-proj-function (str)
- "Grep for STR in the current git repository."
+ "Grep for STR in the current Git repository."
(or
- (counsel-more-chars)
+ (ivy-more-chars)
(let ((regex (setq ivy--old-re
(ivy--regex str t))))
(counsel--async-command (format counsel-git-grep-cmd regex))
@@ -1411,66 +1513,17 @@ INITIAL-INPUT can be given as the initial minibuffer input."
(setq ivy--all-candidates
(all-completions "" 'counsel-git-grep-function))))
-(defvar counsel-gg-state nil
- "The current state of candidates / count sync.")
-
-(defun counsel--gg-candidates (regex)
- "Return git grep candidates for REGEX."
- (setq counsel-gg-state -2)
- (counsel--gg-count regex)
- (let ((default-directory (ivy-state-directory ivy-last)))
- (set-process-filter
- (counsel--async-command (concat (format counsel-git-grep-cmd regex)
- " | head -n 200")
- #'counsel--gg-sentinel)
- nil)))
-
-(defun counsel--gg-sentinel (process _msg)
- "Sentinel function for a `counsel-git-grep' PROCESS."
- (when (eq (process-status process) 'exit)
- (cl-case (process-exit-status process)
- ((0 141)
- (with-current-buffer (process-buffer process)
- (setq ivy--all-candidates
- (or (split-string (buffer-string) "\n" t)
- '("")))
- (setq ivy--old-cands ivy--all-candidates))
- (when (zerop (cl-incf counsel-gg-state))
- (ivy--exhibit)))
- (1
- (setq ivy--all-candidates '("Error"))
- (setq ivy--old-cands ivy--all-candidates)
- (ivy--exhibit)))))
-
-(defun counsel--gg-count-sentinel (process _msg)
- "Sentinel function for a `counsel--gg-count' PROCESS."
- (when (and (eq (process-status process) 'exit)
- (zerop (process-exit-status process)))
- (with-current-buffer (process-buffer process)
- (setq ivy--full-length (string-to-number (buffer-string))))
- (when (zerop (cl-incf counsel-gg-state))
- (ivy--exhibit))))
-
-(defun counsel--gg-count (regex &optional no-async)
- "Count the number of results matching REGEX in `counsel-git-grep'.
-The command to count the matches is called asynchronously.
-If NO-ASYNC is non-nil, do it synchronously instead."
- (let ((default-directory (ivy-state-directory ivy-last))
- (cmd (concat
- (format (replace-regexp-in-string
- "--full-name" "-c"
- counsel-git-grep-cmd)
- ;; "git grep -i -c '%s'"
- (replace-regexp-in-string
- "-" "\\\\-"
- (replace-regexp-in-string "'" "''" regex)))
- " | sed 's/.*:\\(.*\\)/\\1/g' | awk '{s+=$1} END {print s}'")))
- (if no-async
- (string-to-number (shell-command-to-string cmd))
- (set-process-filter
- (counsel--async-command cmd #'counsel--gg-count-sentinel
- nil " *counsel-gg-count*")
- nil))))
+(defun counsel--normalize-grep-match (str)
+ ;; Prepend ./ if necessary:
+ (unless (ivy--starts-with-dotslash str)
+ (setq str (concat "./" str)))
+ ;; Remove column info if any:
+ (save-match-data
+ (when (string-match
+ "[^\n:]+?[^\n/:]:[\t ]*[1-9][0-9]*[\t ]*:\\([1-9][0-9]*:\\)"
+ str)
+ (setq str (replace-match "" t t str 1))))
+ str)
(defun counsel-git-grep-occur ()
"Generate a custom occur buffer for `counsel-git-grep'.
@@ -1485,7 +1538,7 @@ When REVERT is non-nil, regenerate the current *ivy-occur* buffer."
(positive-pattern (replace-regexp-in-string
;; git-grep can't handle .*?
"\\.\\*\\?" ".*"
- (if (stringp regex) regex (caar regex))))
+ (ivy-re-to-str regex)))
(negative-patterns
(if (stringp regex) ""
(mapconcat (lambda (x)
@@ -1495,18 +1548,13 @@ When REVERT is non-nil, regenerate the current *ivy-occur* buffer."
" ")))
(cmd (concat (format counsel-git-grep-cmd positive-pattern) negative-patterns))
cands)
- (setq cands (split-string
- (shell-command-to-string cmd)
- counsel-async-split-string-re
- t))
+ (setq cands (counsel--split-string (shell-command-to-string cmd)))
;; Need precise number of header lines for `wgrep' to work.
(insert (format "-*- mode:grep; default-directory: %S -*-\n\n\n"
default-directory))
(insert (format "%d candidates:\n" (length cands)))
(ivy--occur-insert-lines
- (mapcar
- (lambda (cand) (concat "./" cand))
- cands))))
+ (mapcar #'counsel--normalize-grep-match cands))))
(defun counsel-git-grep-query-replace ()
"Start `query-replace' with string to replace from last search string."
@@ -1558,13 +1606,15 @@ done") "\n" t)))
(defvar counsel-git-log-cmd "GIT_PAGER=cat git log --grep '%s'"
"Command used for \"git log\".")
-(defvar counsel-git-log-split-string-re "\ncommit "
+(defvar counsel-git-log-split-string-re "^commit "
"The `split-string' separates when split output of `counsel-git-log-cmd'.")
+(make-obsolete-variable
+ 'counsel-git-log-split-string-re 'counsel-async-split-string-re-alist "<2019-07-16 Tue>")
(defun counsel-git-log-function (str)
"Search for STR in git log."
(or
- (counsel-more-chars)
+ (ivy-more-chars)
(progn
;; `counsel--yank-pop-format-function' uses this
(setq ivy--old-re (funcall ivy--regex-function str))
@@ -1580,6 +1630,18 @@ done") "\n" t)))
"Add candidate X to kill ring."
(message "%S" (kill-new x)))
+(declare-function magit-show-commit "ext:magit-diff")
+
+(defun counsel-git-log-show-commit-action (log-entry)
+ "Visit the commit corresponding to LOG-ENTRY."
+ (require 'magit-diff)
+ (let ((commit (substring-no-properties log-entry 0 (string-match-p "\\W" log-entry))))
+ (magit-show-commit commit)))
+
+(ivy-set-actions
+ 'counsel-git-log
+ '(("v" counsel-git-log-show-commit-action "visit commit")))
+
;;** `counsel-git-change-worktree'
(defun counsel-git-change-worktree-action (git-root-dir tree)
"Find the corresponding file in the worktree located at tree.
@@ -1591,13 +1653,13 @@ TREE is the selected candidate."
(find-file file-name)))
(defun counsel-git-worktree-list ()
- "List worktrees in the git repository containing the current buffer."
+ "List worktrees in the Git repository containing the current buffer."
(let ((default-directory (counsel-locate-git-root)))
(split-string (shell-command-to-string "git worktree list") "\n" t)))
(defun counsel-git-worktree-parse-root (tree)
"Return worktree from candidate TREE."
- (substring tree 0 (string-match " " tree)))
+ (substring tree 0 (string-match-p " " tree)))
(defun counsel-git-close-worktree-files-action (root-dir)
"Close all buffers from the worktree located at ROOT-DIR."
@@ -1635,10 +1697,12 @@ The command is passed a single argument comprising all characters
in BRANCH up to, but not including, the first space
character (#x20), or the string's end if it lacks a space."
(shell-command
- (format "git checkout %s" (substring branch 0 (string-match-p " " branch)))))
+ (format "git checkout %s"
+ (shell-quote-argument
+ (substring branch 0 (string-match-p " " branch))))))
(defun counsel-git-branch-list ()
- "Return list of branches in the current git repository.
+ "Return list of branches in the current Git repository.
Value comprises all local and remote branches bar the one
currently checked out."
(cl-mapcan (lambda (line)
@@ -1658,21 +1722,24 @@ currently checked out."
(defvar counsel-yank-pop-truncate-radius)
+(defun counsel--git-log-format-function (str)
+ (let ((counsel-yank-pop-truncate-radius 5))
+ (counsel--yank-pop-format-function str)))
+
;;;###autoload
(defun counsel-git-log ()
"Call the \"git log --grep\" shell command."
(interactive)
- (let ((counsel-async-split-string-re counsel-git-log-split-string-re)
- (counsel-async-ignore-re "^[ \n]*$")
- (counsel-yank-pop-truncate-radius 5)
- (ivy-format-function #'counsel--yank-pop-format-function))
- (ivy-read "Grep log: " #'counsel-git-log-function
- :dynamic-collection t
- :action #'counsel-git-log-action
- :unwind #'counsel-delete-process
- :caller 'counsel-git-log)))
+ (ivy-read "Grep log: " #'counsel-git-log-function
+ :dynamic-collection t
+ :action #'counsel-git-log-action
+ :unwind #'counsel-delete-process
+ :caller 'counsel-git-log))
+(add-to-list 'ivy-format-functions-alist '(counsel-git-log . counsel--git-log-format-function))
(add-to-list 'ivy-height-alist '(counsel-git-log . 4))
+(add-to-list 'counsel-async-split-string-re-alist '(counsel-git-log . "^commit "))
+(add-to-list 'counsel-async-ignore-re-alist '(counsel-git-log . "^[ \n]*$"))
;;* File
;;** `counsel-find-file'
@@ -1680,13 +1747,11 @@ currently checked out."
(let ((map (make-sparse-keymap)))
(define-key map (kbd "C-DEL") 'counsel-up-directory)
(define-key map (kbd "C-") 'counsel-up-directory)
- (define-key map (kbd "C-M-y") 'counsel-yank-directory)
+ (define-key map (kbd "`") (ivy-make-magic-action 'counsel-find-file "b"))
map))
-(defun counsel-yank-directory ()
- "Yank the current directory into the minibuffer."
- (interactive)
- (insert ivy--directory))
+(define-obsolete-function-alias 'counsel-yank-directory 'ivy-insert-current-full
+ "<2019-06-13 Thu>")
(when (executable-find "git")
(add-to-list 'ivy-ffap-url-functions 'counsel-github-url-p)
@@ -1706,8 +1771,7 @@ currently checked out."
(defcustom counsel-root-command "sudo"
"Command to gain root privileges."
- :type 'string
- :group 'ivy)
+ :type 'string)
(defun counsel-find-file-as-root (x)
"Find file X with root privileges."
@@ -1739,6 +1803,15 @@ choose between `yes-or-no-p' and `y-or-n-p'; otherwise default to
#'yes-or-no-p)
(apply #'format fmt args)))
+(defun counsel-find-file-copy (x)
+ "Copy file X."
+ (require 'dired-aux)
+ (counsel--find-file-1 "Copy file to: "
+ ivy--directory
+ (lambda (new-name)
+ (dired-copy-file x new-name 1))
+ 'counsel-find-file-copy))
+
(defun counsel-find-file-delete (x)
"Delete file X."
(when (or delete-by-moving-to-trash
@@ -1747,20 +1820,27 @@ choose between `yes-or-no-p' and `y-or-n-p'; otherwise default to
(counsel--yes-or-no-p "Delete %s? " x))
(dired-delete-file x dired-recursive-deletes delete-by-moving-to-trash)
(dired-clean-up-after-deletion x)
- (ivy--reset-state ivy-last)))
+ (let ((win (and (not (eq ivy-exit 'done))
+ (active-minibuffer-window))))
+ (when win (with-selected-window win (ivy--cd ivy--directory))))))
(defun counsel-find-file-move (x)
"Move or rename file X."
- (ivy-read "Rename file to: " #'read-file-name-internal
- :matcher #'counsel--find-file-matcher
- :action (lambda (new-name)
- (require 'dired-aux)
- (dired-rename-file x new-name 1))
- :keymap counsel-find-file-map
- :caller 'counsel-find-file-move))
+ (require 'dired-aux)
+ (counsel--find-file-1 "Rename file to: "
+ ivy--directory
+ (lambda (new-name)
+ (dired-rename-file x new-name 1))
+ 'counsel-find-file-move))
(defun counsel-find-file-mkdir-action (_x)
- (make-directory (expand-file-name ivy-text ivy--directory)))
+ "Create a directory and any nonexistent parent dirs from `ivy-text'."
+ (let ((dir (file-name-as-directory
+ (expand-file-name ivy-text ivy--directory)))
+ (win (and (not (eq ivy-exit 'done))
+ (active-minibuffer-window))))
+ (make-directory dir t)
+ (when win (with-selected-window win (ivy--cd dir)))))
(ivy-set-actions
'counsel-find-file
@@ -1770,18 +1850,17 @@ choose between `yes-or-no-p' and `y-or-n-p'; otherwise default to
("x" counsel-find-file-extern "open externally")
("r" counsel-find-file-as-root "open as root")
("k" counsel-find-file-delete "delete")
+ ("c" counsel-find-file-copy "copy file")
("m" counsel-find-file-move "move or rename")
("d" counsel-find-file-mkdir-action "mkdir")))
(defcustom counsel-find-file-at-point nil
"When non-nil, add file-at-point to the list of candidates."
- :type 'boolean
- :group 'ivy)
+ :type 'boolean)
(defcustom counsel-preselect-current-file nil
"When non-nil, preselect current file in list of candidates."
- :type 'boolean
- :group 'ivy)
+ :type 'boolean)
(defcustom counsel-find-file-ignore-regexp nil
"A regexp of files to ignore while in `counsel-find-file'.
@@ -1795,10 +1874,9 @@ Choosing the dotfiles option, \"\\`\\.\", might be convenient,
since you can still access the dotfiles if your input starts with
a dot. The generic way to toggle ignored files is \\[ivy-toggle-ignore],
but the leading dot is a lot faster."
- :group 'ivy
:type `(choice
(const :tag "None" nil)
- (const :tag "Dotfiles" "\\`\\.")
+ (const :tag "Dotfiles and Lockfiles" "\\(?:\\`\\|[/\\]\\)\\(?:[#.]\\)")
(const :tag "Ignored Extensions"
,(regexp-opt completion-ignored-extensions))
(regexp :tag "Regex")))
@@ -1814,12 +1892,12 @@ Skip some dotfiles unless `ivy-text' requires them."
(string-match re-str (directory-file-name x)))))))
(if (or (null ivy-use-ignore)
(null counsel-find-file-ignore-regexp)
- (string-match "\\`\\." ivy-text))
+ (string-match-p "\\`\\." ivy-text))
res
(or (cl-remove-if
(lambda (x)
(and
- (string-match counsel-find-file-ignore-regexp x)
+ (string-match-p counsel-find-file-ignore-regexp x)
(not (member x ivy-extra-directories))))
res)
res))))
@@ -1829,18 +1907,25 @@ Skip some dotfiles unless `ivy-text' requires them."
(defvar counsel-find-file-speedup-remote t
"Speed up opening remote files by disabling `find-file-hook' for them.")
+(defcustom counsel-find-file-extern-extensions '("mp4" "mkv" "xlsx")
+ "List of extensions that make `counsel-find-file' use `counsel-find-file-extern'."
+ :type '(repeat string))
+
(defun counsel-find-file-action (x)
"Find file X."
(with-ivy-window
- (if (and counsel-find-file-speedup-remote
- (file-remote-p ivy--directory))
- (let ((find-file-hook nil))
- (find-file (expand-file-name x ivy--directory)))
- (find-file (expand-file-name x ivy--directory)))))
+ (cond ((and counsel-find-file-speedup-remote
+ (file-remote-p ivy--directory))
+ (let ((find-file-hook nil))
+ (find-file (expand-file-name x ivy--directory))))
+ ((member (file-name-extension x) counsel-find-file-extern-extensions)
+ (counsel-find-file-extern x))
+ (t
+ (find-file (expand-file-name x ivy--directory))))))
(defun counsel--preselect-file ()
"Return candidate to preselect during filename completion.
-The preselect behaviour can be customized via user options
+The preselect behavior can be customized via user options
`counsel-find-file-at-point' and
`counsel-preselect-current-file', which see."
(or
@@ -1852,24 +1937,30 @@ The preselect behaviour can be customized via user options
buffer-file-name
(file-name-nondirectory buffer-file-name))))
-;;;###autoload
-(defun counsel-find-file (&optional initial-input)
- "Forward to `find-file'.
-When INITIAL-INPUT is non-nil, use it in the minibuffer during completion."
- (interactive)
- (ivy-read "Find file: " #'read-file-name-internal
+(defun counsel--find-file-1 (prompt initial-input action caller)
+ (ivy-read prompt #'read-file-name-internal
:matcher #'counsel--find-file-matcher
:initial-input initial-input
- :action #'counsel-find-file-action
+ :action action
:preselect (counsel--preselect-file)
:require-match 'confirm-after-completion
:history 'file-name-history
:keymap counsel-find-file-map
- :caller 'counsel-find-file))
+ :caller caller))
+
+;;;###autoload
+(defun counsel-find-file (&optional initial-input)
+ "Forward to `find-file'.
+When INITIAL-INPUT is non-nil, use it in the minibuffer during completion."
+ (interactive)
+ (counsel--find-file-1
+ "Find file: " initial-input
+ #'counsel-find-file-action
+ 'counsel-find-file))
(ivy-set-occur 'counsel-find-file 'counsel-find-file-occur)
-(defvar counsel-find-file-occur-cmd "ls -a | grep -i -E '%s' | xargs -d '\\n' ls -d --group-directories-first"
+(defvar counsel-find-file-occur-cmd "ls -a | %s | xargs -d '\\n' ls -d --group-directories-first"
"Format string for `counsel-find-file-occur'.")
(defvar counsel-find-file-occur-use-find (not (eq system-type 'gnu/linux))
@@ -1879,11 +1970,51 @@ When INITIAL-INPUT is non-nil, use it in the minibuffer during completion."
"Expand CMD that ends in \"ls\" with switches."
(concat cmd " " counsel-dired-listing-switches " | sed -e \"s/^/ /\""))
+(defvar counsel-file-name-filter-alist
+ '(("ag -i '%s'" . t)
+ ("ack -i '%s'" . t)
+ ("perl -ne '/(%s.*)/i && print \"$1\\n\";'" . t)
+ ("grep -i -E '%s'"))
+ "Alist of file name filtering commands.
+The car is a shell command and the cdr is t when the shell
+command supports look-arounds. The executable for the commands
+will be checked for existence via `executable-find'. The first
+one that exists will be used.")
+
+(defun counsel--file-name-filter (&optional use-ignore)
+ "Return a command that filters a file list to match ivy candidates.
+If USE-IGNORE is non-nil, try to generate a command that respects
+`counsel-find-file-ignore-regexp'."
+ (let ((regex ivy--old-re))
+ (if (= 0 (length regex))
+ "cat"
+ (let ((filter-cmd (cl-find-if
+ (lambda (x)
+ (executable-find
+ (car (split-string (car x)))))
+ counsel-file-name-filter-alist))
+ cmd)
+ (when (and use-ignore ivy-use-ignore
+ counsel-find-file-ignore-regexp
+ (cdr filter-cmd)
+ (not (string-match-p "\\`\\." ivy-text))
+ (not (string-match-p counsel-find-file-ignore-regexp
+ (or (car ivy--old-cands) ""))))
+ (let ((ignore-re (list (counsel--elisp-to-pcre
+ counsel-find-file-ignore-regexp))))
+ (setq regex (if (stringp regex)
+ (list ignore-re (cons regex t))
+ (cons ignore-re regex)))))
+ (setq cmd (format (car filter-cmd)
+ (counsel--elisp-to-pcre regex (cdr filter-cmd))))
+ (if (string-match-p "csh\\'" shell-file-name)
+ (replace-regexp-in-string "\\?!" "?\\\\!" cmd)
+ cmd)))))
+
(defun counsel--occur-cmd-find ()
- (let* ((regex (counsel-unquote-regex-parens ivy--old-re))
- (cmd (format
- "find . -maxdepth 1 | grep -i -E '%s' | xargs -I {} find {} -maxdepth 0 -ls"
- regex)))
+ (let ((cmd (format
+ "find . -maxdepth 1 | %s | xargs -I {} find {} -maxdepth 0 -ls"
+ (counsel--file-name-filter t))))
(concat
(counsel--cmd-to-dired-by-type "d" cmd)
" && "
@@ -1908,13 +2039,29 @@ When INITIAL-INPUT is non-nil, use it in the minibuffer during completion."
(counsel-cmd-to-dired
(counsel--expand-ls
(format counsel-find-file-occur-cmd
- (counsel-unquote-regex-parens ivy--old-re))))))
+ (if (string-match-p "grep" counsel-find-file-occur-cmd)
+ ;; for backwards compatibility
+ (counsel--elisp-to-pcre ivy--old-re)
+ (counsel--file-name-filter t)))))))
+
+(defvar counsel-up-directory-level t
+ "Control whether `counsel-up-directory' goes up a level or always a directory.
+
+If non-nil, then `counsel-up-directory' will remove the final level of the path.
+For example: /a/long/path/file.jpg => /a/long/path/
+ /a/long/path/ => /a/long/
+
+If nil, then `counsel-up-directory' will go up a directory.
+For example: /a/long/path/file.jpg => /a/long/
+ /a/long/path/ => /a/long/")
(defun counsel-up-directory ()
"Go to the parent directory preselecting the current one.
If the current directory is remote and it's not possible to go up any
-further, make the remote prefix editable"
+further, make the remote prefix editable.
+
+See variable `counsel-up-directory-level'."
(interactive)
(let* ((cur-dir (directory-file-name (expand-file-name ivy--directory)))
(up-dir (file-name-directory cur-dir)))
@@ -1929,15 +2076,22 @@ further, make the remote prefix editable"
(setq ivy-text "")
(delete-minibuffer-contents)
(insert up-dir))
- (ivy--cd up-dir)
- (setf (ivy-state-preselect ivy-last)
- (file-name-as-directory (file-name-nondirectory cur-dir))))))
+ (if (and counsel-up-directory-level (not (string= ivy-text "")))
+ (delete-region (line-beginning-position) (line-end-position))
+ (ivy--cd up-dir)
+ (setf (ivy-state-preselect ivy-last)
+ (file-name-as-directory (file-name-nondirectory cur-dir)))))))
+
+(defun counsel-down-directory ()
+ "Descend into the current directory."
+ (interactive)
+ (ivy--directory-enter))
(defun counsel-at-git-issue-p ()
"When point is at an issue in a Git-versioned file, return the issue string."
(and (looking-at "#[0-9]+")
(or (eq (vc-backend buffer-file-name) 'Git)
- (eq major-mode 'magit-commit-mode)
+ (memq major-mode '(magit-commit-mode vc-git-log-view-mode))
(bound-and-true-p magit-commit-mode))
(match-string-no-properties 0)))
@@ -1969,7 +2123,7 @@ further, make the remote prefix editable"
(let ((origin (shell-command-to-string
"git remote get-url origin")))
(when (string-match "git.sv.gnu.org:/srv/git/emacs.git" origin)
- (format "http://debbugs.gnu.org/cgi/bugreport.cgi?bug=%s"
+ (format "https://debbugs.gnu.org/cgi/bugreport.cgi?bug=%s"
(substring url 1)))))))
(defvar counsel-url-expansions-alist nil
@@ -1994,7 +2148,7 @@ If the format element is a function, more powerful
transformations are possible. As an example,
'(\"\\`issue\\([[:digit:]]+\\)\\'\" .
(lambda (word)
- (concat \"http://debbugs.gnu.org/cgi/bugreport.cgi?bug=\"
+ (concat \"https://debbugs.gnu.org/cgi/bugreport.cgi?bug=\"
(match-string 1 word))))
trims the \"issue\" prefix from the word at point before creating the URL.")
@@ -2005,15 +2159,29 @@ will be expanded according to its format. This function is
intended to be used in `ivy-ffap-url-functions' to browse the
result as a URL."
(let ((word-at-point (current-word)))
- (cl-some
- (lambda (pair)
- (let ((regexp (car pair))
- (formatter (cdr pair)))
- (when (string-match regexp word-at-point)
- (if (functionp formatter)
- (funcall formatter word-at-point)
- (format formatter word-at-point)))))
- counsel-url-expansions-alist)))
+ (when word-at-point
+ (cl-some
+ (lambda (pair)
+ (let ((regexp (car pair))
+ (formatter (cdr pair)))
+ (when (string-match regexp word-at-point)
+ (if (functionp formatter)
+ (funcall formatter word-at-point)
+ (format formatter word-at-point)))))
+ counsel-url-expansions-alist))))
+
+;;** `counsel-dired'
+(declare-function dired "dired")
+
+;;;###autoload
+(defun counsel-dired (&optional initial-input)
+ "Forward to `dired'.
+When INITIAL-INPUT is non-nil, use it in the minibuffer during completion."
+ (interactive)
+ (counsel--find-file-1
+ "Dired (directory): " initial-input
+ (lambda (d) (dired (expand-file-name d)))
+ 'counsel-dired))
;;** `counsel-recentf'
(defvar recentf-list)
@@ -2029,6 +2197,7 @@ result as a URL."
:action (lambda (f)
(with-ivy-window
(find-file f)))
+ :require-match t
:caller 'counsel-recentf))
(ivy-set-actions
'counsel-recentf
@@ -2036,12 +2205,54 @@ result as a URL."
("f" find-file-other-frame "other frame")
("x" counsel-find-file-extern "open externally")))
+(defun counsel-buffer-or-recentf-candidates ()
+ "Return candidates for `counsel-buffer-or-recentf'."
+ (require 'recentf)
+ (recentf-mode)
+ (let ((buffers
+ (delq nil
+ (mapcar (lambda (b)
+ (when (buffer-file-name b)
+ (buffer-file-name b)))
+ (buffer-list)))))
+ (append
+ buffers
+ (cl-remove-if (lambda (f) (member f buffers))
+ (mapcar #'substring-no-properties recentf-list)))))
+
+;;;###autoload
+(defun counsel-buffer-or-recentf ()
+ "Find a buffer visiting a file or file on `recentf-list'."
+ (interactive)
+ (ivy-read "Buffer File or Recentf: " (counsel-buffer-or-recentf-candidates)
+ :action (lambda (s)
+ (with-ivy-window
+ (if (bufferp s)
+ (switch-to-buffer s)
+ (find-file s))))
+ :require-match t
+ :caller 'counsel-buffer-or-recentf))
+
+(ivy-set-actions
+ 'counsel-buffer-or-recentf
+ '(("j" find-file-other-window "other window")
+ ("f" find-file-other-frame "other frame")
+ ("x" counsel-find-file-extern "open externally")))
+
+(defun counsel-buffer-or-recentf-transformer (var)
+ "Propertize VAR if it's a buffer visiting a file."
+ (if (member var (mapcar #'buffer-file-name (buffer-list)))
+ (ivy-append-face var 'ivy-highlight-face)
+ var))
+
+(ivy-set-display-transformer
+ 'counsel-buffer-or-recentf 'counsel-buffer-or-recentf-transformer)
+
;;** `counsel-bookmark'
(defcustom counsel-bookmark-avoid-dired nil
"If non-nil, open directory bookmarks with `counsel-find-file'.
By default `counsel-bookmark' opens a dired buffer for directories."
- :type 'boolean
- :group 'ivy)
+ :type 'boolean)
(defvar bookmark-alist)
(declare-function bookmark-location "bookmark")
@@ -2072,7 +2283,7 @@ By default `counsel-bookmark' opens a dired buffer for directories."
:caller 'counsel-bookmark))
(defun counsel--apply-bookmark-fn (fn)
- "Return a function applyinig FN to a bookmark's location."
+ "Return a function applying FN to a bookmark's location."
(lambda (bookmark)
(funcall fn (bookmark-location bookmark))))
@@ -2128,7 +2339,7 @@ can use `C-x r j i' to open that file."
(interactive)
(ivy-read "File Register: "
;; Use the `register-alist' variable to filter out file
- ;; registers. Each entry for a file registar will have the
+ ;; registers. Each entry for a file register will have the
;; following layout:
;;
;; (NUMBER 'file . "string/path/to/file")
@@ -2152,7 +2363,7 @@ can use `C-x r j i' to open that file."
'(("j" find-file-other-window "other window")))
;;** `counsel-locate'
-(defcustom counsel-locate-cmd (cond ((eq system-type 'darwin)
+(defcustom counsel-locate-cmd (cond ((memq system-type '(darwin berkeley-unix))
'counsel-locate-cmd-noregex)
((and (eq system-type 'windows-nt)
(executable-find "es.exe"))
@@ -2163,7 +2374,6 @@ can use `C-x r j i' to open that file."
The function takes a string - the current input, and returns a
string - the full shell command to run."
- :group 'ivy
:type '(choice
(const :tag "Default" counsel-locate-cmd-default)
(const :tag "No regex" counsel-locate-cmd-noregex)
@@ -2181,6 +2391,7 @@ string - the full shell command to run."
(defvar counsel-locate-history nil
"History for `counsel-locate'.")
+;;;###autoload
(defun counsel-locate-action-extern (x)
"Pass X to `xdg-open' or equivalent command via the shell."
(interactive "FFile: ")
@@ -2207,7 +2418,7 @@ string - the full shell command to run."
"Return a shell command based on INPUT."
(counsel-require-program "locate")
(format "locate -i --regex '%s'"
- (counsel-unquote-regex-parens
+ (counsel--elisp-to-pcre
(ivy--regex input))))
(defun counsel-locate-cmd-noregex (input)
@@ -2224,23 +2435,42 @@ string - the full shell command to run."
"Return a shell command based on INPUT."
(counsel-require-program "es.exe")
(format "es.exe -i -r -p %s"
- (counsel-unquote-regex-parens
+ (counsel--elisp-to-pcre
(ivy--regex input t))))
(defun counsel-locate-function (input)
"Call the \"locate\" shell command with INPUT."
(or
- (counsel-more-chars)
+ (ivy-more-chars)
(progn
(counsel--async-command
(funcall counsel-locate-cmd input))
'("" "working..."))))
+(defcustom counsel-locate-db-path "~/.local/mlocate.db"
+ "Location where to put the locatedb in case your home folder is encrypted."
+ :type 'file)
+
+(defun counsel--locate-updatedb ()
+ (when (file-exists-p "~/.Private")
+ (let ((db-fname (expand-file-name counsel-locate-db-path)))
+ (setenv "LOCATE_PATH" db-fname)
+ (when (or (not (file-exists-p db-fname))
+ (> (time-to-seconds
+ (time-subtract
+ (current-time)
+ (nth 5 (file-attributes db-fname))))
+ 60))
+ (message "Updating %s..." db-fname)
+ (counsel--command
+ "updatedb" "-l" "0" "-o" db-fname "-U" (expand-file-name "~"))))))
+
;;;###autoload
(defun counsel-locate (&optional initial-input)
"Call the \"locate\" shell command.
INITIAL-INPUT can be given as the initial minibuffer input."
(interactive)
+ (counsel--locate-updatedb)
(ivy-read "Locate: " #'counsel-locate-function
:initial-input initial-input
:dynamic-collection t
@@ -2273,12 +2503,9 @@ INITIAL-INPUT can be given as the initial minibuffer input."
(defun counsel-fzf-function (str)
(let ((default-directory counsel--fzf-dir))
+ (setq ivy--old-re (ivy--regex-fuzzy str))
(counsel--async-command
- (format counsel-fzf-cmd
- (if (string-equal str "")
- "\"\""
- (setq ivy--old-re (ivy--regex-fuzzy str))
- str))))
+ (format counsel-fzf-cmd str)))
nil)
;;;###autoload
@@ -2294,20 +2521,18 @@ FZF-PROMPT, if non-nil, is passed as `ivy-read' prompt argument."
(read-directory-name (concat
fzf-basename
" in directory: "))))))
-
- (let ((fzf-basename (car (split-string counsel-fzf-cmd))))
- (counsel-require-program fzf-basename)
- (setq counsel--fzf-dir
- (or initial-directory
- (funcall counsel-fzf-dir-function)))
- (ivy-read (or fzf-prompt (concat fzf-basename ": "))
- #'counsel-fzf-function
- :initial-input initial-input
- :re-builder #'ivy--regex-fuzzy
- :dynamic-collection t
- :action #'counsel-fzf-action
- :unwind #'counsel-delete-process
- :caller 'counsel-fzf)))
+ (counsel-require-program counsel-fzf-cmd)
+ (setq counsel--fzf-dir
+ (or initial-directory
+ (funcall counsel-fzf-dir-function)))
+ (ivy-read (or fzf-prompt "fzf: ")
+ #'counsel-fzf-function
+ :initial-input initial-input
+ :re-builder #'ivy--regex-fuzzy
+ :dynamic-collection t
+ :action #'counsel-fzf-action
+ :unwind #'counsel-delete-process
+ :caller 'counsel-fzf))
(defun counsel-fzf-action (x)
"Find file X in current fzf directory."
@@ -2375,55 +2600,80 @@ FZF-PROMPT, if non-nil, is passed as `ivy-read' prompt argument."
(message (cdr x)))
:caller 'counsel-rpm)))
+(defun counsel--find-return-list (args)
+ (unless (listp args)
+ (user-error "`counsel-file-jump-args' is a list now, please customize accordingly."))
+ (counsel--call
+ (cons find-program args)
+ (lambda ()
+ (let (files)
+ (goto-char (point-min))
+ (while (< (point) (point-max))
+ (when (looking-at "\\./")
+ (goto-char (match-end 0)))
+ (push (buffer-substring (point) (line-end-position)) files)
+ (beginning-of-line 2))
+ (nreverse files)))))
+
+(defcustom counsel-file-jump-args (split-string ". -name .git -prune -o -type f -print")
+ "Arguments for the `find-command' when using `counsel-file-jump'."
+ :type '(repeat string))
+
;;** `counsel-file-jump'
;;;###autoload
(defun counsel-file-jump (&optional initial-input initial-directory)
"Jump to a file below the current directory.
-List all files within the current directory or any of its subdirectories.
+List all files within the current directory or any of its sub-directories.
INITIAL-INPUT can be given as the initial minibuffer input.
INITIAL-DIRECTORY, if non-nil, is used as the root directory for search."
(interactive
(list nil
(when current-prefix-arg
(read-directory-name "From directory: "))))
- (counsel-require-program "find")
- (let* ((default-directory (or initial-directory default-directory)))
+ (counsel-require-program find-program)
+ (let ((default-directory (or initial-directory default-directory)))
(ivy-read "Find file: "
- (split-string
- (shell-command-to-string
- (concat find-program " * -type f -not -path '*\/.git*'"))
- "\n" t)
+ (counsel--find-return-list counsel-file-jump-args)
:matcher #'counsel--find-file-matcher
:initial-input initial-input
- :action (lambda (x)
- (with-ivy-window
- (find-file (expand-file-name x ivy--directory))))
+ :action #'find-file
:preselect (counsel--preselect-file)
:require-match 'confirm-after-completion
:history 'file-name-history
:keymap counsel-find-file-map
:caller 'counsel-file-jump)))
+(ivy-set-actions
+ 'counsel-file-jump
+ `(("d" ,(lambda (x)
+ (dired (or (file-name-directory x) default-directory)))
+ "open in dired")))
+
+(defcustom counsel-dired-jump-args (split-string ". -name .git -prune -o -type d -print")
+ "Arguments for the `find-command' when using `counsel-dired-jump'."
+ :type '(repeat string))
+
;;** `counsel-dired-jump'
;;;###autoload
(defun counsel-dired-jump (&optional initial-input initial-directory)
- "Jump to a directory (in dired) below the current directory.
-List all subdirectories within the current directory.
+ "Jump to a directory (see `dired-jump') below the current directory.
+List all sub-directories within the current directory.
INITIAL-INPUT can be given as the initial minibuffer input.
INITIAL-DIRECTORY, if non-nil, is used as the root directory for search."
(interactive
(list nil
(when current-prefix-arg
(read-directory-name "From directory: "))))
- (counsel-require-program "find")
- (let* ((default-directory (or initial-directory default-directory)))
- (ivy-read "Directory: "
- (split-string
- (shell-command-to-string
- (concat find-program " * -type d -not -path '*\/.git*'"))
- "\n" t)
+ (counsel-require-program find-program)
+ (let ((default-directory (or initial-directory default-directory)))
+ (ivy-read "Find directory: "
+ (cdr
+ (counsel--find-return-list counsel-dired-jump-args))
+ :matcher #'counsel--find-file-matcher
:initial-input initial-input
:action (lambda (d) (dired-jump nil (expand-file-name d)))
+ :history 'file-name-history
+ :keymap counsel-find-file-map
:caller 'counsel-dired-jump)))
;;* Grep
@@ -2436,21 +2686,16 @@ This function expects that the candidates have already been filtered.
It applies no filtering to ivy--all-candidates."
(unless (eq major-mode 'ivy-occur-grep-mode)
(ivy-occur-grep-mode))
- (let* ((directory
- (if git-grep-dir-is-file
- (file-name-directory (ivy-state-directory ivy-last))
- (ivy-state-directory ivy-last)))
- (prepend
- (if git-grep-dir-is-file
- (concat (file-name-nondirectory
- (ivy-state-directory ivy-last)) ":")
- "")))
+ (let ((directory
+ (if git-grep-dir-is-file
+ (file-name-directory (ivy-state-directory ivy-last))
+ (ivy-state-directory ivy-last))))
(setq default-directory directory)
;; Need precise number of header lines for `wgrep' to work.
(insert (format "-*- mode:grep; default-directory: %S -*-\n\n\n" default-directory))
(insert (format "%d candidates:\n" (length ivy--all-candidates)))
(ivy--occur-insert-lines
- (mapcar (lambda (cand) (concat "./" prepend cand)) ivy--all-candidates))))
+ (mapcar #'counsel--normalize-grep-match ivy--all-candidates))))
;;** `counsel-ag'
(defvar counsel-ag-map
@@ -2458,6 +2703,7 @@ It applies no filtering to ivy--all-candidates."
(define-key map (kbd "C-l") 'ivy-call-and-recenter)
(define-key map (kbd "M-q") 'counsel-git-grep-query-replace)
(define-key map (kbd "C-'") 'swiper-avy)
+ (define-key map (kbd "C-x C-d") 'counsel-cd)
map))
(defcustom counsel-ag-base-command
@@ -2467,11 +2713,14 @@ It applies no filtering to ivy--all-candidates."
"Format string to use in `counsel-ag-function' to construct the command.
The %s will be replaced by optional extra ag arguments followed by the
regex string."
- :type 'string
- :group 'ivy)
+ :type 'string)
(defvar counsel-ag-command nil)
+(defvar counsel--grep-tool-look-around t)
+
+(defvar counsel--regex-look-around nil)
+
(counsel-set-async-exit-code 'counsel-ag 1 "No matches found")
(ivy-set-occur 'counsel-ag 'counsel-ag-occur)
(ivy-set-display-transformer 'counsel-ag 'counsel-git-grep-transformer)
@@ -2500,33 +2749,49 @@ NEEDLE is the search string."
(replace-match needle t t extra-args 1)
(concat extra-args " " needle))))
+(defun counsel--grep-regex (str)
+ (counsel--elisp-to-pcre
+ (setq ivy--old-re
+ (funcall ivy--regex-function str))
+ counsel--regex-look-around))
+
+(defun counsel--ag-extra-switches (regex)
+ "Get additional switches needed for look-arounds."
+ (and (stringp counsel--regex-look-around)
+ ;; using look-arounds
+ (string-match-p "\\`\\^(\\?[=!]" regex)
+ (concat " " counsel--regex-look-around " ")))
+
(defun counsel-ag-function (string)
"Grep in the current directory for STRING."
- (let ((command-args (counsel--split-command-args string)))
- (let ((switches (car command-args))
- (search-term (cdr command-args)))
- (if (< (length search-term) 3)
- (let ((ivy-text search-term))
- (counsel-more-chars))
- (let ((default-directory (ivy-state-directory ivy-last))
- (regex (counsel-unquote-regex-parens
- (setq ivy--old-re
- (ivy--regex search-term)))))
- (counsel--async-command (counsel--format-ag-command
- switches
- (shell-quote-argument regex)))
- nil)))))
+ (let* ((command-args (counsel--split-command-args string))
+ (search-term (cdr command-args)))
+ (or
+ (let ((ivy-text search-term))
+ (ivy-more-chars))
+ (let* ((default-directory (ivy-state-directory ivy-last))
+ (regex (counsel--grep-regex search-term))
+ (switches (concat (car command-args)
+ (counsel--ag-extra-switches regex)
+ (and (ivy--case-fold-p string) " -i "))))
+ (counsel--async-command (counsel--format-ag-command
+ switches
+ (shell-quote-argument regex)))
+ nil))))
;;;###autoload
-(defun counsel-ag (&optional initial-input initial-directory extra-ag-args ag-prompt)
+(cl-defun counsel-ag (&optional initial-input initial-directory extra-ag-args ag-prompt
+ &key caller)
"Grep for a string in the current directory using ag.
INITIAL-INPUT can be given as the initial minibuffer input.
INITIAL-DIRECTORY, if non-nil, is used as the root directory for search.
EXTRA-AG-ARGS string, if non-nil, is appended to `counsel-ag-base-command'.
-AG-PROMPT, if non-nil, is passed as `ivy-read' prompt argument."
+AG-PROMPT, if non-nil, is passed as `ivy-read' prompt argument.
+CALLER is passed to `ivy-read'."
(interactive)
(setq counsel-ag-command counsel-ag-base-command)
- (counsel-require-program (car (split-string counsel-ag-command)))
+ (setq counsel--regex-look-around counsel--grep-tool-look-around)
+ (counsel-require-program counsel-ag-command)
(when current-prefix-arg
(setq initial-directory
(or initial-directory
@@ -2540,9 +2805,10 @@ AG-PROMPT, if non-nil, is passed as `ivy-read' prompt argument."
(car (split-string counsel-ag-command)))))))
(setq counsel-ag-command (counsel--format-ag-command (or extra-ag-args "") "%s"))
(let ((default-directory (or initial-directory
- (locate-dominating-file default-directory ".git")
+ (counsel--git-root)
default-directory)))
- (ivy-read (or ag-prompt (car (split-string counsel-ag-command)))
+ (ivy-read (or ag-prompt
+ (concat (car (split-string counsel-ag-command)) ": "))
#'counsel-ag-function
:initial-input initial-input
:dynamic-collection t
@@ -2552,9 +2818,17 @@ AG-PROMPT, if non-nil, is passed as `ivy-read' prompt argument."
:unwind (lambda ()
(counsel-delete-process)
(swiper--cleanup))
- :caller 'counsel-ag)))
+ :caller (or caller 'counsel-ag))))
+
+(defun counsel-cd ()
+ "Change the directory for the currently running Ivy command."
+ (interactive)
+ (let ((input ivy-text)
+ (new-dir (read-directory-name "cd: ")))
+ (ivy-quit-and-run
+ (let ((default-directory new-dir))
+ (funcall (ivy-state-caller ivy-last) input)))))
-(ivy-set-prompt 'counsel-ag #'counsel-prompt-function-default)
(cl-pushnew 'counsel-ag ivy-highlight-grep-commands)
(defun counsel-grep-like-occur (cmd-template)
@@ -2565,23 +2839,20 @@ AG-PROMPT, if non-nil, is passed as `ivy-read' prompt argument."
(and (string-match "\"\\(.*\\)\"" (buffer-name))
(match-string 1 (buffer-name))))
(let* ((command-args (counsel--split-command-args ivy-text))
+ (regex (counsel--grep-regex (cdr command-args)))
+ (switches (concat (car command-args)
+ (counsel--ag-extra-switches regex)))
(cmd (format cmd-template
(concat
- (car command-args)
- (shell-quote-argument
- (counsel-unquote-regex-parens
- (ivy--regex (cdr command-args)))))))
- (cands (split-string (shell-command-to-string cmd)
- counsel-async-split-string-re
- t)))
+ switches
+ (shell-quote-argument regex))))
+ (cands (counsel--split-string (shell-command-to-string cmd))))
;; Need precise number of header lines for `wgrep' to work.
(insert (format "-*- mode:grep; default-directory: %S -*-\n\n\n"
default-directory))
(insert (format "%d candidates:\n" (length cands)))
(ivy--occur-insert-lines
- (mapcar
- (lambda (cand) (concat "./" cand))
- cands))))
+ (mapcar #'counsel--normalize-grep-match cands))))
(defun counsel-ag-occur ()
"Generate a custom occur buffer for `counsel-ag'."
@@ -2591,8 +2862,7 @@ AG-PROMPT, if non-nil, is passed as `ivy-read' prompt argument."
;;** `counsel-pt'
(defcustom counsel-pt-base-command "pt --nocolor --nogroup -e %s"
"Alternative to `counsel-ag-base-command' using pt."
- :type 'string
- :group 'ivy)
+ :type 'string)
;;;###autoload
(defun counsel-pt (&optional initial-input)
@@ -2601,8 +2871,9 @@ INITIAL-INPUT can be given as the initial minibuffer input.
This uses `counsel-ag' with `counsel-pt-base-command' instead of
`counsel-ag-base-command'."
(interactive)
- (let ((counsel-ag-base-command counsel-pt-base-command))
- (counsel-ag initial-input)))
+ (let ((counsel-ag-base-command counsel-pt-base-command)
+ (counsel--grep-tool-look-around nil))
+ (counsel-ag initial-input :caller 'counsel-pt)))
(cl-pushnew 'counsel-pt ivy-highlight-grep-commands)
;;** `counsel-ack'
@@ -2612,8 +2883,7 @@ This uses `counsel-ag' with `counsel-pt-base-command' instead of
(or (executable-find "ack-grep") "ack"))
" --nocolor --nogroup %s")
"Alternative to `counsel-ag-base-command' using ack."
- :type 'string
- :group 'ivy)
+ :type 'string)
;;;###autoload
(defun counsel-ack (&optional initial-input)
@@ -2622,17 +2892,20 @@ INITIAL-INPUT can be given as the initial minibuffer input.
This uses `counsel-ag' with `counsel-ack-base-command' replacing
`counsel-ag-base-command'."
(interactive)
- (let ((counsel-ag-base-command counsel-ack-base-command))
- (counsel-ag initial-input)))
+ (let ((counsel-ag-base-command counsel-ack-base-command)
+ (counsel--grep-tool-look-around t))
+ (counsel-ag initial-input :caller 'counsel-ack)))
;;** `counsel-rg'
-(defcustom counsel-rg-base-command "rg -S --no-heading --line-number --color never %s ."
+(defcustom counsel-rg-base-command
+ (if (memq system-type '(ms-dos windows-nt))
+ "rg -S --no-heading --line-number --color never %s ."
+ "rg -S --no-heading --line-number --color never %s")
"Alternative to `counsel-ag-base-command' using ripgrep.
Note: don't use single quotes for the regex."
- :type 'string
- :group 'ivy)
+ :type 'string)
(counsel-set-async-exit-code 'counsel-rg 1 "No matches found")
(ivy-set-occur 'counsel-rg 'counsel-ag-occur)
@@ -2644,10 +2917,19 @@ Note: don't use single quotes for the regex."
INITIAL-INPUT can be given as the initial minibuffer input.
INITIAL-DIRECTORY, if non-nil, is used as the root directory for search.
EXTRA-RG-ARGS string, if non-nil, is appended to `counsel-rg-base-command'.
-RG-PROMPT, if non-nil, is passed as `ivy-read' prompt argument."
+RG-PROMPT, if non-nil, is passed as `ivy-read' prompt argument.
+
+Example input with inclusion and exclusion file patterns:
+ -g*.py -g!*test* -- ..."
(interactive)
- (let ((counsel-ag-base-command counsel-rg-base-command))
- (counsel-ag initial-input initial-directory extra-rg-args rg-prompt)))
+ (let ((counsel-ag-base-command counsel-rg-base-command)
+ (counsel--grep-tool-look-around
+ (let ((rg (car (split-string counsel-rg-base-command)))
+ (switch "--pcre2"))
+ (and (eq 0 (call-process rg nil nil nil switch "--version"))
+ switch))))
+ (counsel-ag initial-input initial-directory extra-rg-args rg-prompt
+ :caller 'counsel-rg)))
(cl-pushnew 'counsel-rg ivy-highlight-grep-commands)
;;** `counsel-grep'
@@ -2663,16 +2945,15 @@ RG-PROMPT, if non-nil, is passed as `ivy-read' prompt argument."
It should contain two %-sequences (see function `format') to be
substituted by the search regexp and file, respectively. Neither
%-sequence should be contained in single quotes."
- :type 'string
- :group 'ivy)
+ :type 'string)
(defvar counsel-grep-command nil)
(defun counsel-grep-function (string)
"Grep in the current directory for STRING."
(or
- (counsel-more-chars)
- (let ((regex (counsel-unquote-regex-parens
+ (ivy-more-chars)
+ (let ((regex (counsel--elisp-to-pcre
(setq ivy--old-re
(ivy--regex string)))))
(counsel--async-command
@@ -2725,6 +3006,9 @@ substituted by the search regexp and file, respectively. Neither
(ivy-set-occur 'counsel-grep 'counsel-grep-occur)
(counsel-set-async-exit-code 'counsel-grep 1 "")
+(defvar counsel-grep-history nil
+ "History for `counsel-grep'.")
+
;;;###autoload
(defun counsel-grep (&optional initial-input)
"Grep for a string in the file visited by the current buffer.
@@ -2732,12 +3016,15 @@ When non-nil, INITIAL-INPUT is the initial search pattern."
(interactive)
(unless buffer-file-name
(user-error "Current buffer is not visiting a file"))
- (counsel-require-program (car (split-string counsel-grep-base-command)))
+ (counsel-require-program counsel-grep-base-command)
(setq counsel-grep-last-line nil)
(setq counsel-grep-command
(format counsel-grep-base-command
- "%s" (shell-quote-argument buffer-file-name)))
- (let ((init-point (point))
+ "%s" (shell-quote-argument
+ (file-name-nondirectory
+ buffer-file-name))))
+ (let ((default-directory (file-name-directory buffer-file-name))
+ (init-point (point))
res)
(unwind-protect
(setq res (ivy-read "grep: " 'counsel-grep-function
@@ -2753,9 +3040,8 @@ When non-nil, INITIAL-INPUT is the initial search pattern."
(line-end-position)))))
:keymap counsel-grep-map
- :history 'counsel-git-grep-history
- :update-fn (lambda ()
- (counsel-grep-action (ivy-state-current ivy-last)))
+ :history 'counsel-grep-history
+ :update-fn 'auto
:re-builder #'ivy--regex
:action #'counsel-grep-action
:unwind (lambda ()
@@ -2765,13 +3051,35 @@ When non-nil, INITIAL-INPUT is the initial search pattern."
(unless res
(goto-char init-point)))))
+;;;###autoload
+(defun counsel-grep-backward (&optional initial-input)
+ "Grep for a string in the file visited by the current buffer going
+backward similar to `swiper-backward'. When non-nil, INITIAL-INPUT is
+the initial search pattern."
+ (interactive)
+ (let ((ivy-index-functions-alist
+ '((counsel-grep . ivy-recompute-index-swiper-async-backward))))
+ (counsel-grep initial-input)))
+
;;** `counsel-grep-or-swiper'
(defcustom counsel-grep-swiper-limit 300000
"Buffer size threshold for `counsel-grep-or-swiper'.
When the number of characters in a buffer exceeds this threshold,
`counsel-grep' will be used instead of `swiper'."
- :type 'integer
- :group 'ivy)
+ :type 'integer)
+
+(defcustom counsel-grep-use-swiper-p #'counsel-grep-use-swiper-p-default
+ "When this function returns non-nil, call `swiper', else `counsel-grep'."
+ :type '(choice
+ (const :tag "Rely on `counsel-grep-swiper-limit'."
+ counsel-grep-use-swiper-p-default)
+ (const :tag "Always use `counsel-grep'." ignore)
+ (function :tag "Custom")))
+
+(defun counsel-grep-use-swiper-p-default ()
+ (<= (buffer-size)
+ (/ counsel-grep-swiper-limit
+ (if (eq major-mode 'org-mode) 4 1))))
;;;###autoload
(defun counsel-grep-or-swiper (&optional initial-input)
@@ -2783,19 +3091,28 @@ When non-nil, INITIAL-INPUT is the initial search pattern."
(ignore-errors
(file-remote-p buffer-file-name))
(jka-compr-get-compression-info buffer-file-name)
- (<= (buffer-size)
- (/ counsel-grep-swiper-limit
- (if (eq major-mode 'org-mode) 4 1))))
+ (funcall counsel-grep-use-swiper-p))
(swiper initial-input)
(when (file-writable-p buffer-file-name)
(save-buffer))
(counsel-grep initial-input)))
+;;** `counsel-grep-or-swiper-backward'
+;;;###autoload
+(defun counsel-grep-or-swiper-backward (&optional initial-input)
+ "Call `swiper-backward' for small buffers and `counsel-grep-backward' for
+large ones. When non-nil, INITIAL-INPUT is the initial search pattern."
+ (interactive)
+ (let ((ivy-index-functions-alist
+ '((swiper . ivy-recompute-index-swiper-backward)
+ (counsel-grep . ivy-recompute-index-swiper-async-backward))))
+ (counsel-grep-or-swiper initial-input)))
+
;;** `counsel-recoll'
(defun counsel-recoll-function (str)
"Run recoll for STR."
(or
- (counsel-more-chars)
+ (ivy-more-chars)
(progn
(counsel--async-command
(format "recoll -t -b %s"
@@ -2804,12 +3121,13 @@ When non-nil, INITIAL-INPUT is the initial search pattern."
;; This command uses the recollq command line tool that comes together
;; with the recoll (the document indexing database) source:
-;; http://www.lesbonscomptes.com/recoll/download.html
+;; https://www.lesbonscomptes.com/recoll/download.html
;; You need to build it yourself (together with recoll):
;; cd ./query && make && sudo cp recollq /usr/local/bin
;; You can try the GUI version of recoll with:
;; sudo apt-get install recoll
;; Unfortunately, that does not install recollq.
+;;;###autoload
(defun counsel-recoll (&optional initial-input)
"Search for a string in the recoll database.
You'll be given a list of files that match.
@@ -2847,7 +3165,7 @@ INITIAL-INPUT can be given as the initial minibuffer input."
(defun counsel--org-make-tag-string ()
(if (fboundp #'org-make-tag-string)
;; >= Org 9.2
- (org-make-tag-string (org-get-tags))
+ (org-make-tag-string (counsel--org-get-tags))
(with-no-warnings
(org-get-tags-string))))
@@ -2931,7 +3249,7 @@ otherwise continue prompting for tags."
(goto-char m)
(setq counsel-org-tags
(delete-dups
- (append (org-get-tags) add-tags)))
+ (append (counsel--org-get-tags) add-tags)))
(counsel-org--set-tags))))))
(counsel-org--set-tags)))
((eq this-command 'ivy-call)
@@ -2957,6 +3275,12 @@ otherwise continue prompting for tags."
(declare-function org-agenda-set-tags "org-agenda")
(declare-function org-tags-completion-function "org")
+;;;###autoload
+(defun counsel--org-get-tags ()
+ (delete "" (condition-case nil
+ (org-get-tags nil t)
+ (error (org-get-tags)))))
+
;;;###autoload
(defun counsel-org-tag ()
"Add or remove tags in `org-mode'."
@@ -2969,10 +3293,10 @@ otherwise continue prompting for tags."
(org-agenda-error))))
(with-current-buffer (marker-buffer hdmarker)
(goto-char hdmarker)
- (setq counsel-org-tags (org-get-tags)))))
+ (setq counsel-org-tags (counsel--org-get-tags)))))
(unless (org-at-heading-p)
(org-back-to-heading t))
- (setq counsel-org-tags (org-get-tags)))
+ (setq counsel-org-tags (counsel--org-get-tags)))
(let ((org-last-tags-completion-table
(append (and (or org-complete-tags-always-offer-all-agenda-tags
(eq major-mode 'org-agenda-mode))
@@ -2992,38 +3316,35 @@ otherwise continue prompting for tags."
:action #'counsel-org-tag-action
:caller 'counsel-org-tag))))
+(defvar org-version)
+
;;;###autoload
(defun counsel-org-tag-agenda ()
"Set tags for the current agenda item."
(interactive)
- (let ((store (symbol-function 'org-set-tags)))
- (unwind-protect
- (progn
- (fset 'org-set-tags
- (symbol-function 'counsel-org-tag))
- (org-agenda-set-tags nil nil))
- (fset 'org-set-tags store))))
+ (cl-letf (((symbol-function (if (version< org-version "9.2")
+ 'org-set-tags
+ 'org-set-tags-command))
+ #'counsel-org-tag))
+ (org-agenda-set-tags)))
(define-obsolete-variable-alias 'counsel-org-goto-display-tags
'counsel-org-headline-display-tags "0.10.0")
(defcustom counsel-org-headline-display-tags nil
"If non-nil, display tags in matched `org-mode' headlines."
- :type 'boolean
- :group 'ivy)
+ :type 'boolean)
(define-obsolete-variable-alias 'counsel-org-goto-display-todo
'counsel-org-headline-display-todo "0.10.0")
(defcustom counsel-org-headline-display-todo nil
"If non-nil, display todo keywords in matched `org-mode' headlines."
- :type 'boolean
- :group 'ivy)
+ :type 'boolean)
(defcustom counsel-org-headline-display-priority nil
"If non-nil, display priorities in matched `org-mode' headlines."
- :type 'boolean
- :group 'ivy)
+ :type 'boolean)
(declare-function org-get-heading "org")
(declare-function org-goto-marker-or-bmk "org")
@@ -3032,6 +3353,89 @@ otherwise continue prompting for tags."
;;;###autoload
(defalias 'counsel-org-goto #'counsel-outline)
+(defcustom counsel-org-goto-all-outline-path-prefix nil
+ "Prefix for outline candidates in `counsel-org-goto-all'."
+ :type '(choice
+ (const :tag "None" nil)
+ (const :tag "File name" file-name)
+ (const :tag "File name (nondirectory part)" file-name-nondirectory)
+ (const :tag "Buffer name" buffer-name)))
+
+(defun counsel-org-goto-all--outline-path-prefix ()
+ (cl-case counsel-org-goto-all-outline-path-prefix
+ (file-name buffer-file-name)
+ (file-name-nondirectory (file-name-nondirectory buffer-file-name))
+ (buffer-name (buffer-name))))
+
+(defvar counsel-outline-settings
+ '((emacs-lisp-mode
+ :outline-regexp ";;[;*]+[\s\t]+"
+ :outline-level counsel-outline-level-emacs-lisp)
+ (org-mode
+ :outline-title counsel-outline-title-org
+ :action counsel-org-goto-action
+ :history counsel-org-goto-history
+ :caller counsel-org-goto)
+ ;; markdown-mode package
+ (markdown-mode
+ :outline-title counsel-outline-title-markdown)
+ ;; Built-in mode or AUCTeX package
+ (latex-mode
+ :outline-title counsel-outline-title-latex))
+ "Alist mapping major modes to their `counsel-outline' settings.
+
+Each entry is a pair (MAJOR-MODE . PLIST). `counsel-outline'
+checks whether an entry exists for the current buffer's
+MAJOR-MODE and, if so, loads the settings specified by PLIST
+instead of the default settings. The following settings are
+recognized:
+
+- `:outline-regexp' is a regexp to match the beginning of an
+ outline heading. It is only checked at the start of a line and
+ so need not start with \"^\".
+ Defaults to the value of the variable `outline-regexp'.
+
+- `:outline-level' is a function of no arguments which computes
+ the level of an outline heading. It is called with point at
+ the beginning of `outline-regexp' and with the match data
+ corresponding to `outline-regexp'.
+ Defaults to the value of the variable `outline-level'.
+
+- `:outline-title' is a function of no arguments which returns
+ the title of an outline heading. It is called with point at
+ the end of `outline-regexp' and with the match data
+ corresponding to `outline-regexp'.
+ Defaults to the function `counsel-outline-title'.
+
+- `:action' is a function of one argument, the selected outline
+ heading to jump to. This setting corresponds directly to its
+ eponymous `ivy-read' keyword, as used by `counsel-outline', so
+ the type of the function's argument depends on the value
+ returned by `counsel-outline-candidates'.
+ Defaults to the function `counsel-outline-action'.
+
+- `:history' is a history list, usually a symbol representing a
+ history list variable. It corresponds directly to its
+ eponymous `ivy-read' keyword, as used by `counsel-outline'.
+ Defaults to the symbol `counsel-outline-history'.
+
+- `:caller' is a symbol to uniquely identify the caller to
+ `ivy-read'. It corresponds directly to its eponymous
+ `ivy-read' keyword, as used by `counsel-outline'.
+ Defaults to the symbol `counsel-outline'.
+
+- `:display-style' overrides the variable
+ `counsel-outline-display-style'.
+
+- `:path-separator' overrides the variable
+ `counsel-outline-path-separator'.
+
+- `:face-style' overrides the variable
+ `counsel-outline-face-style'.
+
+- `:custom-faces' overrides the variable
+ `counsel-outline-custom-faces'.")
+
;;;###autoload
(defun counsel-org-goto-all ()
"Go to a different location in any org file."
@@ -3040,7 +3444,11 @@ otherwise continue prompting for tags."
(dolist (b (buffer-list))
(with-current-buffer b
(when (derived-mode-p 'org-mode)
- (setq entries (nconc entries (counsel-outline-candidates))))))
+ (setq entries
+ (nconc entries
+ (counsel-outline-candidates
+ (cdr (assq 'org-mode counsel-outline-settings))
+ (counsel-org-goto-all--outline-path-prefix)))))))
(ivy-read "Goto: " entries
:history 'counsel-org-goto-history
:action #'counsel-org-goto-action
@@ -3050,8 +3458,6 @@ otherwise continue prompting for tags."
"Go to headline in candidate X."
(org-goto-marker-or-bmk (cdr x)))
-(defvar org-version)
-
(defun counsel--org-get-heading-args ()
"Return list of arguments for `org-get-heading'.
Try to return the right number of arguments for the current Org
@@ -3077,26 +3483,19 @@ attachment directory associated with the current buffer, all
contained files are listed, so the return value could conceivably
include attachments of other Org buffers."
(require 'org-attach)
- (let* ((ids (let (res)
- (save-excursion
- (goto-char (point-min))
- (while (re-search-forward "^:ID:[\t ]+\\(.*\\)$" nil t)
- (push (match-string-no-properties 1) res))
- (nreverse res))))
- (files
- (cl-remove-if-not
- #'file-exists-p
- (mapcar (lambda (id)
- (expand-file-name
- (concat (substring id 0 2) "/" (substring id 2))
- org-attach-directory))
- ids))))
+ (let (dirs)
+ (save-excursion
+ (goto-char (point-min))
+ (while (re-search-forward "^:\\(ATTACH_DIR\\|ID\\):[\t ]+\\(.*\\)$" nil t)
+ (let ((dir (org-attach-dir)))
+ (when dir
+ (push dir dirs)))))
(cl-mapcan
(lambda (dir)
(mapcar (lambda (file)
(file-relative-name (expand-file-name file dir)))
(org-attach-file-list dir)))
- files)))
+ (nreverse dirs))))
;;;###autoload
(defun counsel-org-file ()
@@ -3230,8 +3629,7 @@ For displaying tags and TODO keywords in `org-mode' buffers, see
:type '(choice
(const :tag "Title only" title)
(const :tag "Headline" headline)
- (const :tag "Path" path))
- :group 'ivy)
+ (const :tag "Path" path)))
(define-obsolete-variable-alias 'counsel-org-goto-separator
'counsel-outline-path-separator "0.10.0")
@@ -3242,8 +3640,7 @@ For displaying tags and TODO keywords in `org-mode' buffers, see
"String separating path entries in matched outline headings.
This variable has no effect unless
`counsel-outline-display-style' is set to `path'."
- :type 'string
- :group 'ivy)
+ :type 'string)
(declare-function org-get-outline-path "org")
@@ -3299,11 +3696,49 @@ This variable has no effect unless
;;* Misc. Emacs
;;** `counsel-mark-ring'
+(defface counsel--mark-ring-highlight
+ '((t (:inherit highlight)))
+ "Face for current `counsel-mark-ring' line."
+ :group 'ivy-faces)
+
+(defvar counsel--mark-ring-overlay nil
+ "Internal overlay to highlight line by candidate of `counsel-mark-ring'.")
+
+(defun counsel--mark-ring-add-highlight ()
+ "Add highlight to current line."
+ (setq counsel--mark-ring-overlay
+ (make-overlay (line-beginning-position) (1+ (line-end-position))))
+ (with-ivy-window
+ (overlay-put counsel--mark-ring-overlay 'face
+ 'counsel--mark-ring-highlight)))
+
+(defun counsel--mark-ring-delete-highlight ()
+ "If `counsel-mark-ring' have highlight, delete highlight."
+ (if counsel--mark-ring-overlay (delete-overlay counsel--mark-ring-overlay)))
+
+(defvar counsel--mark-ring-calling-point 0
+ "Internal variable to remember calling position.")
+
+(defun counsel--mark-ring-unwind ()
+ "Return back to calling position of `counsel-mark-ring'."
+ (goto-char counsel--mark-ring-calling-point)
+ (counsel--mark-ring-delete-highlight))
+
+(defun counsel--mark-ring-update-fn ()
+ "Show preview by candidate."
+ (let ((linenum (string-to-number (ivy-state-current ivy-last))))
+ (counsel--mark-ring-delete-highlight)
+ (unless (= linenum 0)
+ (with-ivy-window
+ (forward-line (- linenum (line-number-at-pos)))))))
+
+;;;###autoload
(defun counsel-mark-ring ()
"Browse `mark-ring' interactively.
Obeys `widen-automatically', which see."
(interactive)
- (let ((cands
+ (let ((counsel--mark-ring-calling-point (point))
+ (cands
(save-excursion
(save-restriction
;; Widen, both to save `line-number-at-pos' the trouble
@@ -3323,6 +3758,7 @@ Obeys `widen-automatically', which see."
(if cands
(ivy-read "Mark: " cands
:require-match t
+ :update-fn #'counsel--mark-ring-update-fn
:action (lambda (cand)
(let ((pos (cdr-safe cand)))
(when pos
@@ -3332,6 +3768,7 @@ Obeys `widen-automatically', which see."
(error "\
Position of selected mark outside accessible part of buffer")))
(goto-char pos))))
+ :unwind #'counsel--mark-ring-unwind
:caller 'counsel-mark-ring)
(message "Mark ring is empty"))))
@@ -3343,6 +3780,9 @@ Position of selected mark outside accessible part of buffer")))
(declare-function package-delete "package")
(declare-function package-desc-extras "package")
+(defvar counsel-package-history nil
+ "History for `counsel-package'.")
+
(defun counsel--package-candidates ()
"Return completion alist for `counsel-package'."
(unless package--initialized
@@ -3357,6 +3797,7 @@ Position of selected mark outside accessible part of buffer")))
package-archive-contents)
#'counsel--package-sort))
+;;;###autoload
(defun counsel-package ()
"Install or delete packages.
@@ -3375,9 +3816,10 @@ Additional actions:\\
(counsel--package-candidates)
:action #'counsel-package-action
:require-match t
+ :history 'counsel-package-history
:caller 'counsel-package))
-(cl-pushnew '(counsel-package . "^+ ") ivy-initial-inputs-alist :key #'car)
+(cl-pushnew '(counsel-package . "^+") ivy-initial-inputs-alist :key #'car)
(defun counsel-package-action (package)
"Delete or install PACKAGE."
@@ -3441,7 +3883,7 @@ Additional actions:\\
;;;###autoload
(defun counsel-tmm ()
- "Text-mode emulation of looking and choosing from a menubar."
+ "Text-mode emulation of looking and choosing from a menu bar."
(interactive)
(require 'tmm)
(run-hooks 'menu-bar-update-hook)
@@ -3451,8 +3893,7 @@ Additional actions:\\
;;** `counsel-yank-pop'
(defcustom counsel-yank-pop-truncate-radius 2
"Number of context lines around `counsel-yank-pop' candidates."
- :type 'integer
- :group 'ivy)
+ :type 'integer)
(defun counsel--yank-pop-truncate (str)
"Truncate STR for use in `counsel-yank-pop'."
@@ -3481,18 +3922,13 @@ Additional actions:\\
(defcustom counsel-yank-pop-separator "\n"
"Separator for the kill ring strings in `counsel-yank-pop'."
- :group 'ivy
- :type 'string)
-
-(make-obsolete-variable
- 'counsel-yank-pop-height
- 'ivy-height-alist
- "<2018-04-14 Fri>") ;; TODO: Add version tag
+ :type '(choice
+ (const :tag "Plain" "\n")
+ (const :tag "Dashes" "\n----\n")
+ string))
-(defcustom counsel-yank-pop-height 5
- "The `ivy-height' of `counsel-yank-pop'."
- :group 'ivy
- :type 'integer)
+(define-obsolete-variable-alias 'counsel-yank-pop-height
+ 'ivy-height-alist "0.11.0")
(defun counsel--yank-pop-format-function (cand-pairs)
"Transform CAND-PAIRS into a string for `counsel-yank-pop'."
@@ -3507,7 +3943,7 @@ Additional actions:\\