diff --git a/autoload/SpaceVim/layers/lang/autohotkey.vim b/autoload/SpaceVim/layers/lang/autohotkey.vim
index 7e2650db4..3a3c2d6be 100644
--- a/autoload/SpaceVim/layers/lang/autohotkey.vim
+++ b/autoload/SpaceVim/layers/lang/autohotkey.vim
@@ -18,7 +18,7 @@
function! SpaceVim#layers#lang#autohotkey#plugins() abort
let plugins = []
- call add(plugins, ['wsdjeg/vim-autohotkey', {'merged' : 0}])
+ call add(plugins, [g:_spacevim_root_dir . 'bundle/vim-autohotkey', {'merged' : 0}])
return plugins
endfunction
diff --git a/bundle/vim-autohotkey/.vintrc.yaml b/bundle/vim-autohotkey/.vintrc.yaml
new file mode 100644
index 000000000..9ce848e97
--- /dev/null
+++ b/bundle/vim-autohotkey/.vintrc.yaml
@@ -0,0 +1,11 @@
+cmdargs:
+ # Checking more strictly
+ severity: style_problem
+
+policies:
+ ProhibitImplicitScopeVariable:
+ enabled: false
+ ProhibitAbbreviationOption:
+ enabled: false
+ ProhibitSetNoCompatible:
+ enabled: false
diff --git a/bundle/vim-autohotkey/LICENSE b/bundle/vim-autohotkey/LICENSE
new file mode 100644
index 000000000..94a9ed024
--- /dev/null
+++ b/bundle/vim-autohotkey/LICENSE
@@ -0,0 +1,674 @@
+ 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.
+
+
+ Copyright (C)
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+
+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:
+
+ Copyright (C)
+ 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/bundle/vim-autohotkey/README.md b/bundle/vim-autohotkey/README.md
new file mode 100644
index 000000000..25408897e
--- /dev/null
+++ b/bundle/vim-autohotkey/README.md
@@ -0,0 +1,7 @@
+# vim-autohotkey
+
+> autohotkey support for vim/neovim
+
+This is part of SpaceVim's autohotkey layer, and the website is:
+
+https://spacevim.org/layers/lang/autohotkey/
diff --git a/bundle/vim-autohotkey/autoload/autohotkey.vim b/bundle/vim-autohotkey/autoload/autohotkey.vim
new file mode 100644
index 000000000..700c864ba
--- /dev/null
+++ b/bundle/vim-autohotkey/autoload/autohotkey.vim
@@ -0,0 +1,743 @@
+let s:complete_dict = {
+ \ 'AutoTrim' :
+ \ "AutoTrim, On|Off\nDetermines whether Var1 = %Var2% statements omit spaces and tabs from the beginning and end of Var2.",
+ \ 'Blocks' :
+ \ "{\nzero or more commands\n}\nA pair of braces denotes a block. Blocks are typically used with functions, Else, Loop, While-loop, and IF-commands.",
+ \ 'BlockInput' :
+ \ "BlockInput, Mode\nDisables or enables the user's ability to interact with the computer via keyboard and mouse. ",
+ \ 'Break' :
+ \ "Break [, LoopLabel]\nExits (terminates) a loop. Valid inside any kind of loop.",
+ \ 'Catch' :
+ \ '',
+ \ 'Click' :
+ \ '',
+ \ 'ClipWait' :
+ \ "ClipWait [, SecondsToWait, 1]\nWaits until the clipboard contains data.",
+ \ 'ComObjActive()' :
+ \ "ComObject := ComObjActive(CLSID)\nRetrieves a running object that has been registered with OLE.",
+ \ 'ComObjArray()' :
+ \ "ArrayObj := ComObjArray(VarType, Count1 [, Count2, ... Count8])\nCreates a SafeArray for use with COM.",
+ \ 'ComObjConnect()' :
+ \ "ComObjConnect(ComObject [, Prefix])\nConnects the object's event sources to functions with a given prefix.",
+ \ 'ComObjCreate()' :
+ \ "ComObject := ComObjCreate(CLSID [, IID])\nCreates a COM object.",
+ \ 'ComObjError()' :
+ \ "Enabled := ComObjError([Enable])\nEnables or disables notification of COM errors.",
+ \ 'ComObjFlags()' :
+ \ "Flags := ComObjFlags(ComObject [, NewFlags, Mask])\nRetrieves or changes flags which control a COM wrapper object's behaviour.",
+ \ 'ComObjGet()' :
+ \ "ComObject := ComObjGet(Name)\nReturns a reference to an object provided by a COM component.",
+ \ 'ComObjQuery()' :
+ \ "InterfacePointer := ComObjQuery(ComObject, [SID,] IID)\nQueries a COM object for an interface or service.",
+ \ 'ComObjType()' :
+ \ "VarType := ComObjType(ComObject)\nName := ComObjType(ComObject, \"Name\")\nIID := ComObjType(ComObject, \"IID\")\nRetrieves type information from a COM object.",
+ \ 'ComObjValue()' :
+ \ "Value := ComObjValue(ComObject)\nRetrieves the value or pointer stored in a COM wrapper object.",
+ \ 'Continue' :
+ \ "Continue [, LoopLabel]\nSkips the rest of the current loop iteration and begins a new one. Valid inside any kind of loop.",
+ \ 'Control' :
+ \ "Control, Cmd [, Value, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]\nMakes a variety of changes to a control.",
+ \ 'ControlClick' :
+ \ "ControlClick [, Control-or-Pos, WinTitle, WinText, WhichButton, ClickCount, Options, ExcludeTitle, ExcludeText]\nSends a mouse button or mouse wheel event to a control. ",
+ \ 'ControlFocus' :
+ \ "ControlFocus [, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]\nSets input focus to a given control on a window. ",
+ \ 'ControlGet' :
+ \ "ControlGet, OutputVar, Cmd [, Value, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]\nRetrieves various types of information about a control. ",
+ \ 'ControlGetFocus' :
+ \ "ControlGetFocus, OutputVar [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nRetrieves which control of the target window has input focus, if any.",
+ \ 'ControlGetPos' :
+ \ "ControlGetPos [, X, Y, Width, Height, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]\nRetrieves the position and size of a control.",
+ \ 'ControlGetText' :
+ \ "ControlGetText, OutputVar [, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]\nRetrieves text from a control. ",
+ \ 'ControlMove' :
+ \ "ControlMove, Control, X, Y, Width, Height [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nMoves or resizes a control. ",
+ \ 'ControlSend' :
+ \ "ControlSend [, Control, Keys, WinTitle, WinText, ExcludeTitle, ExcludeText]\nControlSendRaw: Same parameters as above.\nSends simulated keystrokes to a window or control.",
+ \ 'ControlSendRaw' :
+ \ "ControlSend [, Control, Keys, WinTitle, WinText, ExcludeTitle, ExcludeText]\nControlSendRaw: Same parameters as above.\nSends simulated keystrokes to a window or control.",
+ \ 'ControlSetText' :
+ \ "ControlSetText [, Control, NewText, WinTitle, WinText, ExcludeTitle, ExcludeText]\nChanges the text of a control. ",
+ \ 'CoordMode' :
+ \ "CoordMode, ToolTip|Pixel|Mouse|Caret|Menu [, Screen|Window|Client]\nSets coordinate mode for various commands to be relative to either the active window or the screen.",
+ \ 'Critical' :
+ \ "Critical [, Off]\nCritical 50 ; See bottom of remarks.\nPrevents the current thread from being interrupted by other threads.",
+ \ 'DetectHiddenText' :
+ \ "DetectHiddenText, On|Off\nDetermines whether invisible text in a window is \"seen\" for the purpose of finding the window. This affects commands such as IfWinExist and WinActivate.",
+ \ 'DetectHiddenWindows' :
+ \ "DetectHiddenWindows, On|Off\nDetermines whether invisible windows are \"seen\" by the script.",
+ \ 'DllCall' :
+ \ "Result := DllCall(\"[DllFile\]Function\" [, Type1, Arg1, Type2, Arg2, \"Cdecl ReturnType\"])\nCalls a function inside a DLL, such as a standard Windows API function.",
+ \ 'Drive' :
+ \ "Drive, Sub-command [, Drive , Value]\nEjects/retracts the tray in a CD or DVD drive, or sets a drive's volume label. ",
+ \ 'DriveGet' :
+ \ "DriveGet, OutputVar, Cmd [, Value]\nRetrieves various types of information about the computer's drive(s). ",
+ \ 'DriveSpaceFree' :
+ \ "DriveSpaceFree, OutputVar, Path\nRetrieves the free disk space of a drive, in Megabytes.",
+ \ 'Edit' :
+ \ "Edit\nOpens the current script for editing in the associated editor.",
+ \ 'Else' :
+ \ "Else\nSpecifies the command(s) to perform if an IF-statement evaluates to FALSE. When more than one command is present, enclose them in a block (braces). ",
+ \ 'EnvAdd' :
+ \ "EnvAdd, Var, Value [, TimeUnits]\nVar += Value [, TimeUnits]\nVar++\nSets a variable to the sum of itself plus the given value (can also add or subtract time from a date-time value). Synonymous with: var += value.",
+ \ 'EnvDiv' :
+ \ "EnvDiv, Var, Value\nSets a variable to itself divided by the given value. Synonymous with: Var /= Value.",
+ \ 'EnvGet' :
+ \ "EnvGet, OutputVar, EnvVarName\nRetrieves an environment variable.",
+ \ 'EnvMult' :
+ \ "EnvMult, Var, Value\nSets a variable to itself times the given value. Synonymous with: Var *= Value.",
+ \ 'EnvSet' :
+ \ "EnvSet, EnvVar, Value\nWrites a value to a variable contained in the environment.",
+ \ 'EnvSub' :
+ \ "EnvSub, Var, Value [, TimeUnits]\nVar -= Value [, TimeUnits]\nVar--\nSets a variable to itself minus the given value (can also compare date-time values). Synonymous with: Var -= Value.",
+ \ 'EnvUpdate' :
+ \ "EnvUpdate\nNotifies the OS and all running applications that environment variable(s) have changed.",
+ \ 'Exit' :
+ \ "Exit [, ExitCode]\nExits the current thread or (if the script is not persistent and contains no hotkeys) the entire script.",
+ \ 'ExitApp' :
+ \ "ExitApp [, ExitCode]\nTerminates the script unconditionally.",
+ \ 'FileAppend' :
+ \ "FileAppend [, Text, Filename, Encoding]\nWrites text to the end of a file (first creating the file, if necessary).",
+ \ 'FileCopy' :
+ \ "FileCopy, SourcePattern, DestPattern [, Flag]\nCopies one or more files.",
+ \ 'FileCopyDir' :
+ \ "FileCopyDir, Source, Dest [, Flag]\nCopies a folder along with all its sub-folders and files (similar to xcopy).",
+ \ 'FileCreateDir' :
+ \ "FileCreateDir, DirName\nCreates a directory/folder. ",
+ \ 'FileCreateShortcut' :
+ \ "FileCreateShortcut, Target, LinkFile [, WorkingDir, Args, Description, IconFile, ShortcutKey, IconNumber, RunState]\nCreates a shortcut (.lnk) file.",
+ \ 'FileDelete' :
+ \ "FileDelete, FilePattern\nDeletes one or more files. ",
+ \ 'FileEncoding' :
+ \ "FileEncoding [, Encoding]\nSets the default encoding for FileRead, FileReadLine, Loop Read, FileAppend, and FileOpen.",
+ \ 'FileGetAttrib' :
+ \ "FileGetAttrib, OutputVar [, Filename]\nAttributeString := FileExist(FilePattern)\nReports whether a file or folder is read-only, hidden, etc. ",
+ \ 'FileGetShortcut' :
+ \ "FileGetShortcut, LinkFile [, OutTarget, OutDir, OutArgs, OutDescription, OutIcon, OutIconNum, OutRunState]\nRetrieves information about a shortcut (.lnk) file, such as its target file. ",
+ \ 'FileGetSize' :
+ \ "FileGetSize, OutputVar [, Filename, Units]\nRetrieves the size of a file.",
+ \ 'FileGetTime' :
+ \ "FileGetTime, OutputVar [, Filename, WhichTime]\nRetrieves the datetime stamp of a file or folder.",
+ \ 'FileGetVersion' :
+ \ "FileGetVersion, OutputVar [, Filename]\nRetrieves the version of a file.",
+ \ 'FileInstall' :
+ \ "FileInstall, Source, Dest [, Flag]\nIncludes the specified file inside the compiled version of the script.",
+ \ 'FileMove' :
+ \ "FileMove, SourcePattern, DestPattern [, Flag]\nMoves or renames one or more files.",
+ \ 'FileMoveDir' :
+ \ "FileMoveDir, Source, Dest [, Flag]\nMoves a folder along with all its sub-folders and files. It can also rename a folder.",
+ \ 'FileOpen' :
+ \ "file := FileOpen(Filename, Flags [, Encoding])\nOpens a file.",
+ \ 'FileRead' :
+ \ "FileRead, OutputVar, Filename\nReads a file's contents into a variable.",
+ \ 'FileReadLine' :
+ \ "FileReadLine, OutputVar, Filename, LineNum\nReads the specified line from a file and stores the text in a variable.",
+ \ 'FileRecycle' :
+ \ "FileRecycle, FilePattern\nSends a file or directory to the recycle bin, if possible.",
+ \ 'FileRecycleEmpty' :
+ \ "FileRecycleEmpty [, DriveLetter]\nEmpties the recycle bin. ",
+ \ 'FileRemoveDir' :
+ \ "FileRemoveDir, DirName [, Recurse?]\nDeletes a folder.",
+ \ 'FileSelectFile' :
+ \ "FileSelectFile, OutputVar [, Options, RootDir\Filename, Prompt, Filter]\nDisplays a standard dialog that allows the user to open or save file(s).",
+ \ 'FileSelectFolder' :
+ \ "FileSelectFolder, OutputVar [, StartingFolder, Options, Prompt]\nDisplays a standard dialog that allows the user to select a folder.",
+ \ 'FileSetAttrib' :
+ \ "FileSetAttrib, Attributes [, FilePattern, OperateOnFolders?, Recurse?]\nChanges the attributes of one or more files or folders. Wildcards are supported.",
+ \ 'FileSetTime' :
+ \ "FileSetTime [, YYYYMMDDHH24MISS, FilePattern, WhichTime, OperateOnFolders?, Recurse?]\nChanges the datetime stamp of one or more files or folders. Wildcards are supported.",
+ \ 'For-loop' :
+ \ "For Key [, Value] in Expression\nRepeats a series of commands once for each key-value pair in an object.",
+ \ 'FormatTime' :
+ \ "FormatTime, OutputVar [, YYYYMMDDHH24MISS, Format]\nTransforms a YYYYMMDDHH24MISS timestamp into the specified date/time format.",
+ \ 'GetKeyState' :
+ \ "GetKeyState, OutputVar, KeyName [, Mode]\n KeyIsDown := GetKeyState(\"KeyName\" [, \"Mode\"])\nChecks if a keyboard key or mouse/joystick button is down or up. Also retrieves joystick status.",
+ \ 'Gosub' :
+ \ "Gosub, Label\nJumps to the specified label and continues execution until Return is encountered.",
+ \ 'Goto' :
+ \ "Goto, Label\nJumps to the specified label and continues execution.",
+ \ 'GroupActivate' :
+ \ "GroupActivate, GroupName [, R]\nActivates the next window in a window group that was defined with GroupAdd. ",
+ \ 'GroupAdd' :
+ \ "GroupAdd, GroupName [, WinTitle, WinText, Label, ExcludeTitle, ExcludeText]\nAdds a window specification to a window group, creating the group if necessary.",
+ \ 'GroupClose' :
+ \ "GroupClose, GroupName [, A|R]\nCloses the active window if it was just activated by GroupActivate or GroupDeactivate. It then activates the next window in the series. It can also close all windows in a group. ",
+ \ 'GroupDeactivate' :
+ \ "GroupDeactivate, GroupName [, R]\nSimilar to GroupActivate except activates the next window not in the group.",
+ \ 'GUI' :
+ \ "Gui, sub-command [, Param2, Param3, Param4]\nCreates and manages windows and controls. Such windows can be used as data entry forms or custom user interfaces.",
+ \ 'GuiControl' :
+ \ "GuiControl, Sub-command, ControlID [, Param3]\nMakes a variety of changes to a control in a GUI window.",
+ \ 'GuiControlGet' :
+ \ "GuiControlGet, OutputVar [, Sub-command, ControlID, Param4]\nRetrieves various types of information about a control in a GUI window. ",
+ \ 'Hotkey' :
+ \ "Hotkey, KeyName [, Label, Options]\nHotkey, IfWinActive/Exist [, WinTitle, WinText]\nHotkey, If, Expression\nCreates, modifies, enables, or disables a hotkey while the script is running.",
+ \ 'If' :
+ \ "IfEqual, var, value (same: if var = value)\nIfNotEqual, var, value (same: if var <> value) (!= can be used in place of <>)\nIfGreater, var, value (same: if var > value)\nIfGreaterOrEqual, var, value (same: if var >= value)\nIfLess, var, value (same: if var < value)\nIfLessOrEqual, var, value (same: if var <= value)\nIf var ; If var's contents are blank or 0, it is considered false. Otherwise, it is true.\nif Var between LowerBound and UpperBound\nif Var not between LowerBound and UpperBound\nSee also: IfInString\nSpecifies the command(s) to perform if the comparison of a variable to a value evalutes to TRUE. When more than one command is present, enclose them in a block (braces).\nif Var in MatchList\nif Var not in MatchList
\nif Var contains MatchList\nif Var not contains MatchList\nChecks whether a variable's contents match one of the items in a list.\n",
+ \ 'IfEqual' :
+ \ "IfEqual, var, value (same: if var = value)\nIfNotEqual, var, value (same: if var <> value) (!= can be used in place of <>)\nIfGreater, var, value (same: if var > value)\nIfGreaterOrEqual, var, value (same: if var >= value)\nIfLess, var, value (same: if var < value)\nIfLessOrEqual, var, value (same: if var <= value)\nIf var ; If var's contents are blank or 0, it is considered false. Otherwise, it is true.\nSee also: IfInString\nSpecifies the command(s) to perform if the comparison of a variable to a value evalutes to TRUE. When more than one command is present, enclose them in a block (braces).",
+ \ 'IfNotEqual' :
+ \ "IfEqual, var, value (same: if var = value)\nIfNotEqual, var, value (same: if var <> value) (!= can be used in place of <>)\nIfGreater, var, value (same: if var > value)\nIfGreaterOrEqual, var, value (same: if var >= value)\nIfLess, var, value (same: if var < value)\nIfLessOrEqual, var, value (same: if var <= value)\nIf var ; If var's contents are blank or 0, it is considered false. Otherwise, it is true.\nSee also: IfInString\nSpecifies the command(s) to perform if the comparison of a variable to a value evalutes to TRUE. When more than one command is present, enclose them in a block (braces).",
+ \ 'IfLess' :
+ \ "IfEqual, var, value (same: if var = value)\nIfNotEqual, var, value (same: if var <> value) (!= can be used in place of <>)\nIfGreater, var, value (same: if var > value)\nIfGreaterOrEqual, var, value (same: if var >= value)\nIfLess, var, value (same: if var < value)\nIfLessOrEqual, var, value (same: if var <= value)\nIf var ; If var's contents are blank or 0, it is considered false. Otherwise, it is true.\nSee also: IfInString\nSpecifies the command(s) to perform if the comparison of a variable to a value evalutes to TRUE. When more than one command is present, enclose them in a block (braces).",
+ \ 'IfLessOrEqual' :
+ \ "IfEqual, var, value (same: if var = value)\nIfNotEqual, var, value (same: if var <> value) (!= can be used in place of <>)\nIfGreater, var, value (same: if var > value)\nIfGreaterOrEqual, var, value (same: if var >= value)\nIfLess, var, value (same: if var < value)\nIfLessOrEqual, var, value (same: if var <= value)\nIf var ; If var's contents are blank or 0, it is considered false. Otherwise, it is true.\nSee also: IfInString\nSpecifies the command(s) to perform if the comparison of a variable to a value evalutes to TRUE. When more than one command is present, enclose them in a block (braces).",
+ \ 'IfGreater' :
+ \ "IfEqual, var, value (same: if var = value)\nIfNotEqual, var, value (same: if var <> value) (!= can be used in place of <>)\nIfGreater, var, value (same: if var > value)\nIfGreaterOrEqual, var, value (same: if var >= value)\nIfLess, var, value (same: if var < value)\nIfLessOrEqual, var, value (same: if var <= value)\nIf var ; If var's contents are blank or 0, it is considered false. Otherwise, it is true.\nSee also: IfInString\nSpecifies the command(s) to perform if the comparison of a variable to a value evalutes to TRUE. When more than one command is present, enclose them in a block (braces).",
+ \ 'IfGreaterOrEqual' :
+ \ "IfEqual, var, value (same: if var = value)\nIfNotEqual, var, value (same: if var <> value) (!= can be used in place of <>)\nIfGreater, var, value (same: if var > value)\nIfGreaterOrEqual, var, value (same: if var >= value)\nIfLess, var, value (same: if var < value)\nIfLessOrEqual, var, value (same: if var <= value)\nIf var ; If var's contents are blank or 0, it is considered false. Otherwise, it is true.\nSee also: IfInString\nSpecifies the command(s) to perform if the comparison of a variable to a value evalutes to TRUE. When more than one command is present, enclose them in a block (braces).",
+ \ 'IfExist' :
+ \ "IfExist, FilePattern\nIfNotExist, FilePattern\nAttributeString := FileExist(FilePattern)\nChecks for the existence of a file or folder.",
+ \ 'IfNotExist' :
+ \ "IfExist, FilePattern\nIfNotExist, FilePattern\nAttributeString := FileExist(FilePattern)\nChecks for the existence of a file or folder.",
+ \ 'if' :
+ \ "if (expression)\nSpecifies the command(s) to perform if an expression evaluates to TRUE. ",
+ \ 'contains' :
+ \ "if Var in MatchList\nif Var not in MatchList
\nif Var contains MatchList\nif Var not contains MatchList\nChecks whether a variable's contents match one of the items in a list.",
+ \ 'IfInString' :
+ \ "IfInString, var, SearchString\nIfNotInString, var, SearchString\nPosition := InStr(Haystack, Needle [, CaseSensitive?, StartingPos]]) ; See the InStr() function for details.\nChecks if a variable contains the specified string.",
+ \ 'IfNotInString' :
+ \ "IfInString, var, SearchString\nIfNotInString, var, SearchString\nPosition := InStr(Haystack, Needle [, CaseSensitive?, StartingPos]]) ; See the InStr() function for details.\nChecks if a variable contains the specified string.",
+ \ 'IfMsgBox' :
+ \ "IfMsgBox, ButtonName\nChecks which button was pushed by the user during the most recent MsgBox command.",
+ \ 'IfWinActive' :
+ \ "IfWinActive [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nIfWinNotActive [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nUniqueID := WinActive(\"WinTitle\", \"WinText\", \"ExcludeTitle\", \"ExcludeText\")\nChecks if the specified window exists and is currently active (foremost).",
+ \ 'IfWinNotActive' :
+ \ "IfWinActive [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nIfWinNotActive [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nUniqueID := WinActive(\"WinTitle\", \"WinText\", \"ExcludeTitle\", \"ExcludeText\")\nChecks if the specified window exists and is currently active (foremost).",
+ \ 'IfWinExist' :
+ \ "IfWinExist [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nIfWinNotExist [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nUniqueID := WinExist(\"WinTitle\", \"WinText\", \"ExcludeTitle\", \"ExcludeText\")\nChecks if a matching window exists. WinExist() returns the Unique ID (HWND) of the first matching window.",
+ \ 'IfWinNotExist' :
+ \ "IfWinExist [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nIfWinNotExist [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nUniqueID := WinExist(\"WinTitle\", \"WinText\", \"ExcludeTitle\", \"ExcludeText\")\nChecks if a matching window exists. WinExist() returns the Unique ID (HWND) of the first matching window.",
+ \ 'WinExist' :
+ \ "IfWinExist [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nIfWinNotExist [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nUniqueID := WinExist(\"WinTitle\", \"WinText\", \"ExcludeTitle\", \"ExcludeText\")\nChecks if a matching window exists. WinExist() returns the Unique ID (HWND) of the first matching window.",
+ \ 'ImageSearch' :
+ \ "ImageSearch, OutputVarX, OutputVarY, X1, Y1, X2, Y2, ImageFile\nSearches a region of the screen for an image.",
+ \ 'IniDelete' :
+ \ "IniDelete, Filename, Section [, Key]\nDeletes a value from a standard format .ini file. ",
+ \ 'IniRead' :
+ \ "IniRead, OutputVar, Filename [, Section, Key, Default]\nReads a value from a standard format .ini file.",
+ \ 'IniWrite' :
+ \ "IniWrite, Value, Filename, Section [, Key]\nWrites a value to a standard format .ini file.",
+ \ 'Input' :
+ \ "Input [, OutputVar, Options, EndKeys, MatchList]\nWaits for the user to type a string (not supported on Windows 9x: it does nothing).",
+ \ 'InputBox' :
+ \ "InputBox, OutputVar [, Title, Prompt, HIDE, Width, Height, X, Y, Font, Timeout, Default]\nDisplays an input box to ask the user to enter a string.",
+ \ 'KeyHistory' :
+ \ "KeyHistory\nDisplays script info and a history of the most recent keystrokes and mouse clicks.",
+ \ 'KeyWait' :
+ \ "KeyWait, KeyName [, Options]\nWaits for a key or mouse/joystick button to be released or pressed down. ",
+ \ 'ListHotkeys' :
+ \ "ListHotkeys\nDisplays the hotkeys in use by the current script, whether their subroutines are currently running, and whether or not they use the keyboard or mouse hook.",
+ \ 'ListLines' :
+ \ "ListLines [, On|Off]\nDisplays the script lines most recently executed.",
+ \ 'ListVars' :
+ \ "ListVars\nDisplays the script's variables: their names and current contents.",
+ \ 'ListView' :
+ \ "Gui, Add, ListView, Options, ColumnTitle1|ColumnTitle2|...\nA List-View is one of the most elaborate controls provided by the operating system. In its most recognizable form, it displays a tabular view of rows and columns, the most common example of which is Explorer's list of files and folders (detail view).
\nThough it may be elaborate, a ListView's basic features are easy to use. The syntax for creating a ListView is:",
+ \ 'Loop' :
+ \ "Loop [, Count]\nPerform a series of commands repeatedly: either the specified number of times or until break is encountered.",
+ \ 'Menu' :
+ \ "Menu, MenuName, Cmd [, P3, P4, P5]\nCreates, deletes, modifies and displays menus and menu items. Changes the tray icon and its tooltip. Controls whether the main window of a compiled script can be opened.",
+ \ 'MouseClick' :
+ \ "MouseClick [, WhichButton , X, Y, ClickCount, Speed, D|U, R]\nClicks or holds down a mouse button, or turns the mouse wheel. NOTE: The Click command is generally more flexible and easier to use.",
+ \ 'MouseClickDrag' :
+ \ "MouseClickDrag, WhichButton, X1, Y1, X2, Y2 [, Speed, R]\nClicks and holds the specified mouse button, moves the mouse to the destination coordinates, then releases the button.",
+ \ 'MouseGetPos' :
+ \ "MouseGetPos, [OutputVarX, OutputVarY, OutputVarWin, OutputVarControl, 1|2|3]\nRetrieves the current position of the mouse cursor, and optionally which window and control it is hovering over. ",
+ \ 'MouseMove' :
+ \ "MouseMove, X, Y [, Speed, R]\nMoves the mouse cursor.",
+ \ 'MsgBox' :
+ \ "MsgBox, Text\nMsgBox [, Options, Title, Text, Timeout]\nDisplays the specified text in a small window containing one or more buttons (such as Yes and No).",
+ \ 'ObjAddRef()' :
+ \ "ObjAddRef(Ptr)
ObjRelease(Ptr)\nIncrements or decrements an object's reference count.",
+ \ 'ObjRelease()' :
+ \ "ObjAddRef(Ptr)
ObjRelease(Ptr)\nIncrements or decrements an object's reference count.",
+ \ 'OnExit' :
+ \ "OnExit [, Label]\nSpecifies a subroutine to run automatically when the script exits.",
+ \ 'OnMessage' :
+ \ "OnMessage(MsgNumber [, \"FunctionName\", MaxThreads])\nSpecifies a function to call automatically when the script receives the specified message.",
+ \ 'OutputDebug' :
+ \ "OutputDebug, Text\nSends a string to the debugger (if any) for display.",
+ \ 'Pause' :
+ \ "#p::Pause ; Pressing Win+P once will pause the script. Pressing it again will unpause.\nPause [, On|Off|Toggle, OperateOnUnderlyingThread?]\nPauses the script's current thread.",
+ \ 'PixelGetColor' :
+ \ "PixelGetColor, OutputVar, X, Y [, Alt|Slow|RGB]\nRetrieves the color of the pixel at the specified x,y coordinates.",
+ \ 'PixelSearch' :
+ \ "PixelSearch, OutputVarX, OutputVarY, X1, Y1, X2, Y2, ColorID [, Variation, Fast|RGB]\nSearches a region of the screen for a pixel of the specified color.",
+ \ 'PostMessage' :
+ \ "PostMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]\nSendMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText, Timeout]\nSends a message to a window or control (SendMessage additionally waits for acknowledgement).",
+ \ 'SendMessage' :
+ \ "PostMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]\nSendMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText, Timeout]\nSends a message to a window or control (SendMessage additionally waits for acknowledgement).",
+ \ 'Process' :
+ \ "Process, Cmd, PID-or-Name [, Param3]\nPerforms one of the following operations on a process: checks if it exists; changes its priority; closes it; waits for it to close.",
+ \ 'Progress' :
+ \ "SplashImage, Off\nSplashImage [, ImageFile, Options, SubText, MainText, WinTitle, FontName]\nProgress, Off\nProgress, ProgressParam1 [, SubText, MainText, WinTitle, FontName]\nCreates or updates a window containing a progress bar or an image.",
+ \ 'SplashImage' :
+ \ "SplashImage, Off\nSplashImage [, ImageFile, Options, SubText, MainText, WinTitle, FontName]\nProgress, Off\nProgress, ProgressParam1 [, SubText, MainText, WinTitle, FontName]\nCreates or updates a window containing a progress bar or an image.",
+ \ 'Random' :
+ \ "Random, OutputVar [, Min, Max]\nRandom, , NewSeed\nGenerates a pseudo-random number.",
+ \ 'RegDelete' :
+ \ "RegDelete, RootKey, SubKey [, ValueName]\nDeletes a subkey or value from the registry. ",
+ \ 'RegExMatch' :
+ \ "FoundPos := RegExMatch(Haystack, NeedleRegEx [, UnquotedOutputVar = \"\", StartingPosition = 1])\nDetermines whether a string contains a pattern (regular expression).",
+ \ 'RegExReplace' :
+ \ "NewStr := RegExReplace(Haystack, NeedleRegEx [, Replacement = \"\", OutputVarCount = \"\", Limit = -1, StartingPosition = 1])\nReplaces occurrences of a pattern (regular expression) inside a string.",
+ \ 'RegisterCallback' :
+ \ "Address := RegisterCallback(\"FunctionName\" [, Options = \"\", ParamCount = FormalCount, EventInfo = Address])\nCreates a machine-code address that when called, redirects the call to a function in the script.",
+ \ 'RegRead' :
+ \ "RegRead, OutputVar, RootKey, SubKey [, ValueName]\nReads a value from the registry.",
+ \ 'RegWrite' :
+ \ "RegWrite, ValueType, RootKey, SubKey [, ValueName, Value]\nWrites a value to the registry.",
+ \ 'Reload' :
+ \ "Reload\nReplaces the currently running instance of the script with a new one. ",
+ \ 'Return' :
+ \ "Return [, Expression]\nReturns from a subroutine to which execution had previously jumped via function-call, Gosub, Hotkey activation, GroupActivate, or other means. ",
+ \ 'Run' :
+ \ "Run, Target [, WorkingDir, Max|Min|Hide|UseErrorLevel, OutputVarPID]\nRuns an external program. Unlike Run, RunWait will wait until\nthe program finishes before continuing.",
+ \ 'RunWait' :
+ \ "Run, Target [, WorkingDir, Max|Min|Hide|UseErrorLevel, OutputVarPID]\nRuns an external program. Unlike Run, RunWait will wait until\nthe program finishes before continuing.",
+ \ 'RunAs' :
+ \ "RunAs [, User, Password, Domain]\nSpecifies a set of user credentials to use for all subsequent uses of Run and RunWait. Requires Windows 2000/XP or later.",
+ \ 'Send' :
+ \ "Send Keys\nSendRaw Keys\nSendInput Keys\nSendPlay Keys\nSendEvent Keys\nSends simulated keystrokes and mouse clicks to the active window.",
+ \ 'SendRaw' :
+ \ "Send Keys\nSendRaw Keys\nSendInput Keys\nSendPlay Keys\nSendEvent Keys\nSends simulated keystrokes and mouse clicks to the active window.",
+ \ 'SendInput' :
+ \ "Send Keys\nSendRaw Keys\nSendInput Keys\nSendPlay Keys\nSendEvent Keys\nSends simulated keystrokes and mouse clicks to the active window.",
+ \ 'SendPlay' :
+ \ "Send Keys\nSendRaw Keys\nSendInput Keys\nSendPlay Keys\nSendEvent Keys\nSends simulated keystrokes and mouse clicks to the active window.",
+ \ 'SendEvent' :
+ \ "Send Keys\nSendRaw Keys\nSendInput Keys\nSendPlay Keys\nSendEvent Keys\nSends simulated keystrokes and mouse clicks to the active window.",
+ \ 'SendLevel' :
+ \ "SendLevel, Level\nControls which artificial keyboard and mouse events are ignored by hotkeys and hotstrings.",
+ \ 'SendMode' :
+ \ "SendMode Input|Play|Event|InputThenPlay\nMakes Send synonymous with SendInput or SendPlay rather than the default (SendEvent). Also makes Click and MouseMove/Click/Drag use the specified method.",
+ \ 'SetBatchLines' :
+ \ "SetBatchLines, 20ms\nSetBatchLines, LineCount\nDetermines how fast a script will run (affects CPU utilization).",
+ \ 'SetControlDelay' :
+ \ "SetControlDelay, Delay\nSets the delay that will occur after each control-modifying command.",
+ \ 'SetDefaultMouseSpeed' :
+ \ "SetDefaultMouseSpeed, Speed\nSets the mouse speed that will be used if unspecified in Click and MouseMove/Click/Drag.",
+ \ 'SetEnv' :
+ \ "SetEnv, Var, Value\nVar = Value\nAssigns the specified value to a variable.",
+ \ 'SetFormat' :
+ \ "SetFormat, NumberType, Format\nSets the format of integers and floating point numbers generated by math operations.",
+ \ 'SetKeyDelay' :
+ \ "SetKeyDelay [, Delay, PressDuration, Play]\nSets the delay that will occur after each keystroke sent by Send and ControlSend.",
+ \ 'SetMouseDelay' :
+ \ "SetMouseDelay, Delay [, Play]\nSets the delay that will occur after each mouse movement or click.",
+ \ 'SetCapsLockState' :
+ \ "SetCapsLockState [, State]\nSetNumLockState [, State]\nSetScrollLockState [, State]\nSets the state of the Capslock/NumLock/ScrollLock key. Can also force the key to stay on or off.",
+ \ 'SetNumLockState' :
+ \ "SetCapsLockState [, State]\nSetNumLockState [, State]\nSetScrollLockState [, State]\nSets the state of the Capslock/NumLock/ScrollLock key. Can also force the key to stay on or off.",
+ \ 'SetScrollLockState' :
+ \ "SetCapsLockState [, State]\nSetNumLockState [, State]\nSetScrollLockState [, State]\nSets the state of the Capslock/NumLock/ScrollLock key. Can also force the key to stay on or off.",
+ \ 'SetRegView' :
+ \ "SetRegView, RegView\nSets the registry view used by RegRead, RegWrite, RegDelete and registry loops.",
+ \ 'SetStoreCapslockMode' :
+ \ "SetStoreCapslockMode, On|Off\nWhether to restore the state of CapsLock after a Send.",
+ \ 'SetTimer' :
+ \ "SetTimer [, Label, Period|On|Off, Priority]\nCauses a subroutine to be launched automatically and repeatedly at a specified time interval.",
+ \ 'SetTitleMatchMode' :
+ \ "SetTitleMatchMode, MatchMode\nSetTitleMatchMode, Fast|Slow\nSets the matching behavior of the WinTitle parameter in commands such as WinWait.",
+ \ 'SetWinDelay' :
+ \ "SetWinDelay, Delay\nSets the delay that will occur after each windowing command, such as WinActivate.",
+ \ 'SetWorkingDir' :
+ \ "SetWorkingDir, DirName\nChanges the script's current working directory. ",
+ \ 'Shutdown' :
+ \ "Shutdown, Code\nShuts down, restarts, or logs off the system.",
+ \ 'Sleep' :
+ \ "Sleep, DelayInMilliseconds\nWaits the specified amount of time before continuing.",
+ \ 'Sort' :
+ \ "Sort, VarName [, Options]\nArranges a variable's contents in alphabetical, numerical, or random order (optionally removing duplicates).",
+ \ 'SoundBeep' :
+ \ "SoundBeep [, Frequency, Duration]\nEmits a tone from the PC speaker.",
+ \ 'SoundGet' :
+ \ "SoundGet, OutputVar [, ComponentType, ControlType, DeviceNumber]\nRetrieves various settings from a sound device (master mute, master volume, etc.)",
+ \ 'SoundGetWaveVolume' :
+ \ "SoundGetWaveVolume, OutputVar [, DeviceNumber]\nRetrieves the wave output volume for a sound device.",
+ \ 'SoundPlay' :
+ \ "SoundPlay, Filename [, wait]\nPlays a sound, video, or other supported file type. ",
+ \ 'SoundSet' :
+ \ "SoundSet, NewSetting [, ComponentType, ControlType, DeviceNumber]\nChanges various settings of a sound device (master mute, master volume, etc.)",
+ \ 'SoundSetWaveVolume' :
+ \ "SoundSetWaveVolume, Percent [, DeviceNumber]\nChanges the wave output volume for a sound device.",
+ \ 'SplashTextOn' :
+ \ "SplashTextOff\nSplashTextOn [, Width, Height, Title, Text]\nCreates a customizable text popup window.",
+ \ 'SplashTextOff' :
+ \ "SplashTextOff\nSplashTextOn [, Width, Height, Title, Text]\nCreates a customizable text popup window.",
+ \ 'SplitPath' :
+ \ "SplitPath, InputVar [, OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive]\nSeparates a file name or URL into its name, directory, extension, and drive.",
+ \ 'StatusbarGetText' :
+ \ "StatusBarGetText, OutputVar [, Part#, WinTitle, WinText, ExcludeTitle, ExcludeText]\nRetrieves the text from a standard status bar control. ",
+ \ 'StatusBarWait' :
+ \ "StatusBarWait [, BarText, Seconds, Part#, WinTitle, WinText, Interval, ExcludeTitle, ExcludeText]\nWaits until a window's status bar contains the specified string.",
+ \ 'StringCaseSense' :
+ \ "StringCaseSense, On|Off|Locale\nDetermines whether string comparisons are case sensitive (default is \"not case sensitive\"). ",
+ \ 'StringGetPos' :
+ \ "StringGetPos, OutputVar, InputVar, SearchText [, L#|R#, Offset]\nPosition := InStr(Haystack, Needle [, CaseSensitive?, StartingPos]) ; See the InStr() function for details.\nRetrieves the position of the specified substring within a string.",
+ \ 'StringLeft' :
+ \ "StringLeft, OutputVar, InputVar, Count\nStringRight, OutputVar, InputVar, Count\nNewStr := SubStr(String, StartPos [, Length]) ; See the SubStr() function for details.\nRetrieves a number of characters from the left or right-hand side of\na string.",
+ \ 'StringRight' :
+ \ "StringLeft, OutputVar, InputVar, Count\nStringRight, OutputVar, InputVar, Count\nNewStr := SubStr(String, StartPos [, Length]) ; See the SubStr() function for details.\nRetrieves a number of characters from the left or right-hand side of\na string.",
+ \ 'StrLen' :
+ \ "OutputVar := StrLen(InputVar)\nStringLen, OutputVar, InputVar\nRetrieves the count of how many characters are in a string.",
+ \ 'StringLen' :
+ \ "OutputVar := StrLen(InputVar)\nStringLen, OutputVar, InputVar\nRetrieves the count of how many characters are in a string.",
+ \ 'StringLower' :
+ \ "StringLower, OutputVar, InputVar [, T]\nStringUpper, OutputVar, InputVar [, T]\nConverts a string to lowercase or uppercase.",
+ \ 'StringUpper' :
+ \ "StringLower, OutputVar, InputVar [, T]\nStringUpper, OutputVar, InputVar [, T]\nConverts a string to lowercase or uppercase.",
+ \ 'StringMid' :
+ \ "StringMid, OutputVar, InputVar, StartChar [, Count , L]\nNewStr := SubStr(String, StartPos [, Length]) ; See the SubStr() function for details.\nRetrieves one or more characters from the specified position in a string.",
+ \ 'StringReplace' :
+ \ "StringReplace, OutputVar, InputVar, SearchText [, ReplaceText, ReplaceAll?]\nReplaces the specified substring with a new string.",
+ \ 'StringSplit' :
+ \ "StringSplit, OutputArray, InputVar [, Delimiters, OmitChars]\nArray := StrSplit(String [, Delimiters, OmitChars]) ; [v1.1.13+]\nSeparates a string into an array of substrings using the specified delimiters.",
+ \ 'StrSplit()' :
+ \ "StringSplit, OutputArray, InputVar [, Delimiters, OmitChars]\nArray := StrSplit(String [, Delimiters, OmitChars]) ; [v1.1.13+]\nSeparates a string into an array of substrings using the specified delimiters.",
+ \ 'StringTrimLeft' :
+ \ "StringTrimLeft, OutputVar, InputVar, Count\nStringTrimRight, OutputVar, InputVar, Count\nNewStr := SubStr(String, StartPos [, Length]) ; See the SubStr() function for details.\nRemoves a number of characters from the left or right-hand side of a\nstring.",
+ \ 'StringTrimRight' :
+ \ "StringTrimLeft, OutputVar, InputVar, Count\nStringTrimRight, OutputVar, InputVar, Count\nNewStr := SubStr(String, StartPos [, Length]) ; See the SubStr() function for details.\nRemoves a number of characters from the left or right-hand side of a\nstring.",
+ \ 'StrPut' :
+ \ "StrPut(String [, Encoding = None ] )\nStrPut(String, Address [, Length] [, Encoding = None ] )\nStrGet(Address [, Length] [, Encoding = None ] )\nCopies a string to or from a memory address, optionally converting to or from a given code page.",
+ \ 'StrGet' :
+ \ "StrPut(String [, Encoding = None ] )\nStrPut(String, Address [, Length] [, Encoding = None ] )\nStrGet(Address [, Length] [, Encoding = None ] )\nCopies a string to or from a memory address, optionally converting to or from a given code page.",
+ \ 'Suspend' :
+ \ "Suspend [, Mode]\nDisables or enables all or selected hotkeys and hotstrings.",
+ \ 'SysGet' :
+ \ "SysGet, OutputVar, Sub-command [, Param3]\nRetrieves screen resolution, multi-monitor info, dimensions of system objects, and other system properties.",
+ \ 'Thread' :
+ \ "Thread, NoTimers [, false]\nThread, Priority, n\nThread, Interrupt [, Duration, LineCount]\nSets the priority or interruptibility of threads. It can also temporarily disable all timers.",
+ \ 'Throw' :
+ \ "Throw [, Expression]\nSignals the occurrence of an error. This signal can be caught by a try-catch statement.",
+ \ 'ToolTip' :
+ \ "ToolTip [, Text, X, Y, WhichToolTip]\nCreates an always-on-top window anywhere on the screen.",
+ \ 'Transform' :
+ \ "Transform, OutputVar, Cmd, Value1 [, Value2]\nPerforms miscellaneous math functions, bitwise operations, and tasks such as ASCII/Unicode conversion.",
+ \ 'TrayTip' :
+ \ "TrayTip [, Title, Text, Seconds, Options]\nCreates a balloon message window near the tray icon. Requires Windows 2000/XP or later.",
+ \ 'TreeView' :
+ \ "Gui, Add, TreeView, Options\nA Tree-View displays a hierarchy of items by indenting child items beneath their parents. The most common example is Explorer's tree of drives and folders.",
+ \ 'Trim' :
+ \ "Result := Trim(String, OmitChars = \" `t\")\nResult := LTrim(String, OmitChars = \" `t\")\nResult := RTrim(String, OmitChars = \" `t\")\nTrims characters from the beginning and/or end of a string.",
+ \ 'Try' :
+ \ "Try Statement\nGuards one or more statements (commands or expressions) against runtime errors and exceptions thrown by the throw command.",
+ \ 'Until' :
+ \ "Loop {\n ...\n} Until Expression\nApplies a condition to the continuation of a Loop or For-loop.",
+ \ 'UrlDownloadToFile' :
+ \ "UrlDownloadToFile, URL, Filename\nDownloads a file from the Internet.",
+ \ 'VarSetCapacity()' :
+ \ "GrantedCapacity := VarSetCapacity(UnquotedVarName [, RequestedCapacity, FillByte])\nEnlarges a variable's holding capacity or frees its memory. Normally, this is necessary only for unusual circumstances such as DllCall.",
+ \ 'While-loop' :
+ \ "While Expression\nPerforms a series of commands repeatedly until the specified expression evaluates to false.",
+ \ 'WinActivate' :
+ \ "WinActivate [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nActivates the specified window (makes it foremost).",
+ \ 'WinActivateBottom' :
+ \ "WinActivateBottom [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nSame as WinActivate except that it activates the bottommost (least recently active) matching window rather than the topmost.",
+ \ 'WinClose' :
+ \ "WinClose [, WinTitle, WinText, SecondsToWait, ExcludeTitle, ExcludeText]\nCloses the specified window.",
+ \ 'WinGet' :
+ \ "WinGet, OutputVar [, Cmd, WinTitle, WinText, ExcludeTitle, ExcludeText]\nRetrieves the specified window's unique ID, process ID, process name, or a list of its controls. It can also retrieve a list of all windows matching the specified criteria.",
+ \ 'WinGetActiveStats' :
+ \ "WinGetActiveStats, Title, Width, Height, X, Y\nCombines the functions of WinGetActiveTitle and WinGetPos into one command.",
+ \ 'WinGetActiveTitle' :
+ \ "WinGetActiveTitle, OutputVar\nRetrieves the title of the active window.",
+ \ 'WinGetClass' :
+ \ "WinGetClass, OutputVar [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nRetrieves the specified window's class name.",
+ \ 'WinGetPos' :
+ \ "WinGetPos [, X, Y, Width, Height, WinTitle, WinText, ExcludeTitle, ExcludeText]\nRetrieves the position and size of the specified window.",
+ \ 'WinGetText' :
+ \ "WinGetText, OutputVar [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nRetrieves the text from the specified window.",
+ \ 'WinGetTitle' :
+ \ "WinGetTitle, OutputVar [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nRetrieves the title of the specified window.",
+ \ 'WinHide' :
+ \ "WinHide [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nHides the specified window.",
+ \ 'WinKill' :
+ \ "WinKill [, WinTitle, WinText, SecondsToWait, ExcludeTitle, ExcludeText]\nForces the specified window to close.",
+ \ 'WinMaximize' :
+ \ "WinMaximize [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nEnlarges the specified window to its maximum size. ",
+ \ 'WinMenuSelectItem' :
+ \ "WinMenuSelectItem, WinTitle, WinText, Menu [, SubMenu1, SubMenu2, SubMenu3, SubMenu4, SubMenu5, SubMenu6, ExcludeTitle, ExcludeText]\nInvokes a menu item from the menu bar of the specified window.",
+ \ 'WinMinimize' :
+ \ "WinMinimize [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nCollapses the specified window into a button on the task bar.",
+ \ 'WinMinimizeAll' :
+ \ "WinMinimizeAll\nWinMinimizeAllUndo\nMinimizes or unminimizes all windows.",
+ \ 'WinMinimizeAllUndo' :
+ \ "WinMinimizeAll\nWinMinimizeAllUndo\nMinimizes or unminimizes all windows.",
+ \ 'WinMove' :
+ \ "WinMove, X, Y\nWinMove, WinTitle, WinText, X, Y [, Width, Height, ExcludeTitle, ExcludeText]\nChanges the position and/or size of the specified window.",
+ \ 'WinRestore' :
+ \ "WinRestore [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nUnminimizes or unmaximizes the specified window if it is minimized or maximized.",
+ \ 'WinSet' :
+ \ "WinSet, Attribute, Value [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nMakes a variety of changes to the specified window, such as \"always on top\" and transparency.",
+ \ 'WinSetTitle' :
+ \ "WinSetTitle, NewTitle\nWinSetTitle, WinTitle, WinText, NewTitle [, ExcludeTitle, ExcludeText]\nChanges the title of the specified window.",
+ \ 'WinShow' :
+ \ "WinShow [, WinTitle, WinText, ExcludeTitle, ExcludeText]\nUnhides the specified window.",
+ \ 'WinWait' :
+ \ "WinWait [, WinTitle, WinText, Seconds, ExcludeTitle, ExcludeText]\nWaits until the specified window\nexists.",
+ \ 'WinWaitActive' :
+ \ "WinWaitActive [, WinTitle, WinText, Seconds, ExcludeTitle, ExcludeText]\nWinWaitNotActive [, WinTitle, WinText, Seconds, ExcludeTitle, ExcludeText]\nWaits until the specified window\nis active or not active. ",
+ \ 'WinWaitNotActive' :
+ \ "WinWaitActive [, WinTitle, WinText, Seconds, ExcludeTitle, ExcludeText]\nWinWaitNotActive [, WinTitle, WinText, Seconds, ExcludeTitle, ExcludeText]\nWaits until the specified window\nis active or not active. ",
+ \ 'WinWaitClose' :
+ \ "WinWaitClose [, WinTitle, WinText, Seconds, ExcludeTitle, ExcludeText]\nWaits until the specified window\ndoes not exist.",
+ \ '#AllowSameLineComments' :
+ \ "#AllowSameLineComments\nRemoved in v1.1.09: AutoIt scripts are no longer supported.
\nOnly for AutoIt v2 (.aut) scripts: Allows a comment to appear on the same line as a command.",
+ \ '#ClipboardTimeout' :
+ \ "#ClipboardTimeout Milliseconds\nChanges how long the script keeps trying to access the clipboard when the first attempt fails.",
+ \ '#CommentFlag' :
+ \ "#CommentFlag NewString\nChanges the script's comment symbol from semicolon to some other string.",
+ \ '#ErrorStdOut' :
+ \ "#ErrorStdOut\nSends any syntax error that prevents a script from launching to stdout rather than displaying a dialog.",
+ \ '#EscapeChar' :
+ \ "#EscapeChar NewChar\nChanges the script's escape character (e.g. accent vs. backslash).",
+ \ '#HotkeyInterval' :
+ \ "#HotkeyInterval Milliseconds\nAlong with #MaxHotkeysPerInterval, specifies the rate of hotkey activations beyond which a warning dialog will be displayed.",
+ \ '#HotkeyModifierTimeout' :
+ \ "#HotkeyModifierTimeout Milliseconds\nAffects the behavior of hotkey modifiers: CTRL, ALT, WIN, and SHIFT.",
+ \ '#Hotstring' :
+ \ "#Hotstring NoMouse\n#Hotstring EndChars NewChars\n#Hotstring NewOptions\nChanges hotstring options or ending characters.",
+ \ '#If' :
+ \ "#If [, Expression ]\nCreates context-sensitive hotkeys and hotstrings. Such hotkeys perform a different action (or none at all) depending on the result of an expression.",
+ \ '#IfTimeout' :
+ \ "#IfTimeout Timeout\nSets the maximum time that may be spent evaluating a single #If expression.",
+ \ '#IfWinActive' :
+ \ "#IfWinActive [, WinTitle, WinText]\n#IfWinExist [, WinTitle, WinText]\n#IfWinNotActive [, WinTitle, WinText]\n#IfWinNotExist [, WinTitle, WinText]\n#If [, Expression]\nCreates context-sensitive hotkeys and hotstrings. Such hotkeys perform a different action (or none at all) depending on the type of window that is active or exists.",
+ \ '#IfWinNotActive' :
+ \ "#IfWinActive [, WinTitle, WinText]\n#IfWinExist [, WinTitle, WinText]\n#IfWinNotActive [, WinTitle, WinText]\n#IfWinNotExist [, WinTitle, WinText]\n#If [, Expression]\nCreates context-sensitive hotkeys and hotstrings. Such hotkeys perform a different action (or none at all) depending on the type of window that is active or exists.",
+ \ '#IfWinExist' :
+ \ "#IfWinActive [, WinTitle, WinText]\n#IfWinExist [, WinTitle, WinText]\n#IfWinNotActive [, WinTitle, WinText]\n#IfWinNotExist [, WinTitle, WinText]\n#If [, Expression]\nCreates context-sensitive hotkeys and hotstrings. Such hotkeys perform a different action (or none at all) depending on the type of window that is active or exists.",
+ \ '#IfWinNotExist' :
+ \ "#IfWinActive [, WinTitle, WinText]\n#IfWinExist [, WinTitle, WinText]\n#IfWinNotActive [, WinTitle, WinText]\n#IfWinNotExist [, WinTitle, WinText]\n#If [, Expression]\nCreates context-sensitive hotkeys and hotstrings. Such hotkeys perform a different action (or none at all) depending on the type of window that is active or exists.",
+ \ '#Include' :
+ \ "#Include FileOrDirName\n#Include \n#IncludeAgain FileOrDirName\nCauses the script to behave as though the specified file's contents are present at this exact position.",
+ \ '#InputLevel' :
+ \ "#InputLevel [, Level]\nControls which artificial keyboard and mouse events are ignored by hotkeys and hotstrings.",
+ \ '#InstallKeybdHook' :
+ \ "#InstallKeybdHook\nForces the unconditional installation of the keyboard hook.",
+ \ '#InstallMouseHook' :
+ \ "#InstallMouseHook\nForces the unconditional installation of the mouse hook.",
+ \ '#KeyHistory' :
+ \ "#KeyHistory MaxEvents\nSets the maximum number of keyboard and mouse events displayed by the KeyHistory window. You can set it to 0 to disable key history.",
+ \ '#MaxHotkeysPerInterval' :
+ \ "#MaxHotkeysPerInterval Value\nAlong with #HotkeyInterval, specifies the rate of hotkey activations beyond which a warning dialog will be displayed.",
+ \ '#MaxMem' :
+ \ "#MaxMem Megabytes\nSets the maximum capacity of each variable to the specified number of megabytes.",
+ \ '#MaxThreads' :
+ \ "#MaxThreads Value\nSets the maximum number of simultaneous threads.",
+ \ '#MaxThreadsBuffer' :
+ \ "#MaxThreadsBuffer On|Off\nCauses some or all hotkeys to buffer rather than ignore keypresses when their #MaxThreadsPerHotkey limit has been reached. ",
+ \ '#MaxThreadsPerHotkey' :
+ \ "#MaxThreadsPerHotkey Value\nSets the maximum number of simultaneous threads per hotkey or hotstring.",
+ \ '#MenuMaskKey' :
+ \ "#MenuMaskKey KeyName\nChanges which key is used to mask Win or Alt keyup events.",
+ \ '#NoEnv' :
+ \ "#NoEnv\nAvoids checking empty variables to see if they are environment variables (recommended for all new scripts).",
+ \ '#NoTrayIcon' :
+ \ "#NoTrayIcon\nDisables the showing of a tray icon.",
+ \ '#Persistent' :
+ \ "#Persistent\nKeeps a script permanently running (that is, until the user closes it or ExitApp is encountered).",
+ \ '#SingleInstance' :
+ \ "#SingleInstance [force|ignore|off]\nDetermines whether a script is allowed to run again when it is already running.",
+ \ '#UseHook' :
+ \ "#UseHook [On|Off]\nForces the use of the hook to implement all or some keyboard hotkeys.",
+ \ '#Warn' :
+ \ "#Warn [, WarningType, WarningMode]\nEnables or disables warnings for specific conditions which may indicate an error, such as a typo or missing \"global\" declaration.",
+ \ '#WinActivateForce' :
+ \ "#WinActivateForce\nSkips the gentle method of activating a window and goes straight to the forceful method. ",
+ \ 'ACos': '',
+ \ 'ASin': '',
+ \ 'ATan': '',
+ \ 'A_AhkPAth': '',
+ \ 'A_AhkVersion': '',
+ \ 'A_AppData': '',
+ \ 'A_AppDataCommon': '',
+ \ 'A_AutoTrim': '',
+ \ 'A_BatchLines': '',
+ \ 'A_CaretX': '',
+ \ 'A_CaretY': '',
+ \ 'A_ComputerName': '',
+ \ 'A_ControlDelay': '',
+ \ 'A_Cursor': '',
+ \ 'A_DD': '',
+ \ 'A_DDD': '',
+ \ 'A_DDDD': '',
+ \ 'A_DefaultMouseSpeed': '',
+ \ 'A_Desktop': '',
+ \ 'A_DesktopCommon': '',
+ \ 'A_DetectHiddenText': '',
+ \ 'A_DetectHiddenWindows': '',
+ \ 'A_EndChar': '',
+ \ 'A_EventInfo': '',
+ \ 'A_ExitReason': '',
+ \ 'A_FormatFloat': '',
+ \ 'A_FormatInteger': '',
+ \ 'A_Gui': '',
+ \ 'A_GuiControl': '',
+ \ 'A_GuiControlEvent': '',
+ \ 'A_GuiEvent': '',
+ \ 'A_GuiHeight': '',
+ \ 'A_GuiWidth': '',
+ \ 'A_GuiX': '',
+ \ 'A_GuiY': '',
+ \ 'A_Hour': '',
+ \ 'A_IPAddress1': '',
+ \ 'A_IPAddress2': '',
+ \ 'A_IPAddress3': '',
+ \ 'A_IPAddress4': '',
+ \ 'A_IconFile': '',
+ \ 'A_IconHidden': '',
+ \ 'A_IconNumber': '',
+ \ 'A_IconTip': '',
+ \ 'A_Index': '',
+ \ 'A_IsAdmin': '',
+ \ 'A_IsCompiled': '',
+ \ 'A_IsSuspended': '',
+ \ 'A_KeyDelay': '',
+ \ 'A_Language': '',
+ \ 'A_LastError': '',
+ \ 'A_LineFile': '',
+ \ 'A_LineNumber': '',
+ \ 'A_LoopField': '',
+ \ 'A_LoopFileName': '',
+ \ 'A_LoopReadLine': '',
+ \ 'A_LoopRegName': '',
+ \ 'A_MM': '',
+ \ 'A_MMM': '',
+ \ 'A_MMMM': '',
+ \ 'A_MSec': '',
+ \ 'A_Min': '',
+ \ 'A_MouseDelay': '',
+ \ 'A_MyDocuments': '',
+ \ 'A_Now': '',
+ \ 'A_NowUTC': '',
+ \ 'A_OSType': '',
+ \ 'A_OSVersion': '',
+ \ 'A_PriorHotkey': '',
+ \ 'A_ProgramFiles': '',
+ \ 'A_Programs': '',
+ \ 'A_ProgramsCommon': '',
+ \ 'A_STringCaseSense': '',
+ \ 'A_ScreenHeight': '',
+ \ 'A_ScreenWidth': '',
+ \ 'A_ScriptDir': '',
+ \ 'A_ScriptFullPath': '',
+ \ 'A_ScriptName': '',
+ \ 'A_Sec': '',
+ \ 'A_Space': '',
+ \ 'A_StartMenu': '',
+ \ 'A_StartMenuCommon': '',
+ \ 'A_Startup': '',
+ \ 'A_StartupCommon': '',
+ \ 'A_Tab': '',
+ \ 'A_Temp': '',
+ \ 'A_ThisHotkey': '',
+ \ 'A_ThisMenu': '',
+ \ 'A_ThisMenuItem': '',
+ \ 'A_ThisMenuItemPos': '',
+ \ 'A_TickCount': '',
+ \ 'A_TimeIdle': '',
+ \ 'A_TimeIdlePhysical': '',
+ \ 'A_TimeSincePriorHotkey': '',
+ \ 'A_TimeSinceThisHotkey': '',
+ \ 'A_TitleMatchMode': '',
+ \ 'A_TitleMatchModeSpeed': '',
+ \ 'A_UserName': '',
+ \ 'A_WDay': '',
+ \ 'A_WinDelay': '',
+ \ 'A_WinDir': '',
+ \ 'A_WorkingDir': '',
+ \ 'A_YWeek': '',
+ \ 'A_YYYY': '',
+ \ 'Abs': '',
+ \ 'AllowSameLineComments': '',
+ \ 'Asc': '',
+ \ 'Ceil': '',
+ \ 'Chr': '',
+ \ 'Clipboard': '',
+ \ 'ClipboardAll': '',
+ \ 'ClipboardTimeout': '',
+ \ 'ComSpec': '',
+ \ 'CommentFlag': '',
+ \ 'Cos': '',
+ \ 'ErrorLevel': '',
+ \ 'ErrorStdOut': '',
+ \ 'EscapeChar': '',
+ \ 'Exp': '',
+ \ 'FileExist': '',
+ \ 'Floor': '',
+ \ 'Gui': '',
+ \ 'HotKeyModifierTimeout': '',
+ \ 'HotkeyInterval': '',
+ \ 'Hotstring': '',
+ \ 'InStr': '',
+ \ 'Include': '',
+ \ 'IncludeAgain': '',
+ \ 'InstallKeybdHook': '',
+ \ 'InstallMouseHook': '',
+ \ 'IsLabel': '',
+ \ 'Ln': '',
+ \ 'Log': '',
+ \ 'MaxHotkeysPerInterval': '',
+ \ 'MaxMem': '',
+ \ 'MaxThreads': '',
+ \ 'MaxThreadsBuffer': '',
+ \ 'MaxThreadsPerHotkey': '',
+ \ 'Mod': '',
+ \ 'NoEnv': '',
+ \ 'NoTrayIcon': '',
+ \ 'Persistent': '',
+ \ 'ProgramFiles': '',
+ \ 'Round': '',
+ \ 'SetNumScrollCapsLockState': '',
+ \ 'Sin': '',
+ \ 'SingleInstance': '',
+ \ 'Sqrt': '',
+ \ 'StatusBarGetText': '',
+ \ 'SubStr': '',
+ \ 'Tan': '',
+ \ 'URLDownloadToFile': '',
+ \ 'UseHook': '',
+ \ 'VarSetCapacity': '',
+ \ 'WinActivateForce': '',
+ \ 'WinActive': '',
+ \ 'ahk_class': '',
+ \ 'ahk_group': '',
+ \ 'ahk_id': '',
+ \ 'ahk_pid': '',
+ \ 'contained': '',
+ \ 'false': '',
+ \ 'global': '',
+ \ 'local': '',
+ \ 'true': '',
+ \ }
+function! autohotkey#complete(findstart, base) abort
+
+ if a:findstart
+ let line = getline('.')
+ let idx = col('.') - 1
+ let hasleftbrace = 0
+ while idx > 0
+ let idx -= 1
+ let c = line[idx]
+ if c =~# '\v[a-zA-Z0-9]'
+ continue
+ elseif c ==# '#'
+ return idx
+ else
+ return idx+1
+ endif
+ endwhile
+ return 0
+ else
+ let complete_dict = []
+ for [k, v] in items(s:complete_dict)
+ if k =~ '^' . a:base
+ call add(complete_dict, {'word': k, 'info': v, 'icase':1})
+ endif
+ endfor
+ return sort(complete_dict)
+ endif
+endfunction
diff --git a/bundle/vim-autohotkey/ftdetect/autohotkey.vim b/bundle/vim-autohotkey/ftdetect/autohotkey.vim
new file mode 100644
index 000000000..2fa098542
--- /dev/null
+++ b/bundle/vim-autohotkey/ftdetect/autohotkey.vim
@@ -0,0 +1 @@
+au BufNewFile,BufRead *.ahk setf autohotkey
diff --git a/bundle/vim-autohotkey/plugin/autohotkey.vim b/bundle/vim-autohotkey/plugin/autohotkey.vim
new file mode 100644
index 000000000..1f6da67f2
--- /dev/null
+++ b/bundle/vim-autohotkey/plugin/autohotkey.vim
@@ -0,0 +1,4 @@
+augroup vim_autohotkey
+ autocmd!
+ autocmd FileType autohotkey setlocal omnifunc=autohotkey#complete
+augroup END
diff --git a/bundle/vim-autohotkey/syntax/autohotkey.vim b/bundle/vim-autohotkey/syntax/autohotkey.vim
new file mode 100644
index 000000000..64aafa63d
--- /dev/null
+++ b/bundle/vim-autohotkey/syntax/autohotkey.vim
@@ -0,0 +1,277 @@
+if v:version < 600
+ syntax clear
+elseif exists('b:current_syntax')
+ finish
+endif
+
+" add the ; for ahk comments to work well (wrap and continue)
+set comments=s1:/*,mb:*,ex:*/,:;
+
+sy case ignore
+
+
+sy keyword ahkKeyword ahk_id ahk_pid ahk_class ahk_group ahk_parent true false
+
+
+" this is a great hack by savage. The problem is that it colors whatever you are
+" writing in ahkFunction color, and then it turns normal when you leave. Very
+" distracting. The solution is less elegant: list all posible ahk commands,
+" which we do next.
+
+" sy match ahkFunction "^\s*\w\{1,},"
+" sy match ahkFunction "\w\{1,}," contained
+" sy match ahkFunction "^\s*\w\{1,}\s*$" contains=ahkStatement
+" sy match ahkFunction "\w\{1,}\s*$" contained
+syn keyword ahkFunction
+ \ ClipWait EnvGet EnvSet EnvUpdate
+ \ Drive DriveGet DriveSpaceFree FileAppend FileCopy FileCopyDir
+ \ FileCreateDir FileCreateShortcut FileDelete FileGetAttrib
+ \ FileGetShortcut FileGetSize FileGetTime FileGetVersion FileInstall
+ \ FileMove FileMoveDir FileReadLine FileRead FileRecycle FileRecycleEmpty
+ \ FileRemoveDir FileSelectFolder FileSelectFile FileSetAttrib FileSetTime
+ \ IniDelete IniRead IniWrite SetWorkingDir
+ \ SplitPath
+ \ Gui GuiControl GuiControlGet IfMsgBox InputBox MsgBox Progress
+ \ SplashImage SplashTextOn SplashTextOff ToolTip TrayTip
+ \ Hotkey ListHotkeys BlockInput ControlSend ControlSendRaw GetKeyState
+ \ KeyHistory KeyWait Input Send SendRaw SendInput SendPlay SendEvent
+ \ SendMode SetKeyDelay SetNumScrollCapsLockState SetStoreCapslockMode
+ \ EnvAdd EnvDiv EnvMult EnvSub Random SetFormat Transform
+ \ AutoTrim BlockInput CoordMode Critical Edit ImageSearch
+ \ ListLines ListVars Menu OutputDebug PixelGetColor PixelSearch
+ \ SetBatchLines SetEnv SetTimer SysGet Thread Transform URLDownloadToFile
+ \ Click ControlClick MouseClick MouseClickDrag MouseGetPos MouseMove
+ \ SetDefaultMouseSpeed SetMouseDelay
+ \ Process Run RunWait RunAs Shutdown Sleep
+ \ RegDelete RegRead RegWrite
+ \ SoundBeep SoundGet SoundGetWaveVolume SoundPlay SoundSet
+ \ SoundSetWaveVolume
+ \ FormatTime IfInString IfNotInString Sort StringCaseSense StringGetPos
+ \ StringLeft StringRight StringLower StringUpper StringMid StringReplace
+ \ StringSplit StringTrimLeft StringTrimRight
+ \ Control ControlClick ControlFocus ControlGet ControlGetFocus
+ \ ControlGetPos ControlGetText ControlMove ControlSend ControlSendRaw
+ \ ControlSetText Menu PostMessage SendMessage SetControlDelay
+ \ WinMenuSelectItem GroupActivate GroupAdd GroupClose GroupDeactivate
+ \ DetectHiddenText DetectHiddenWindows SetTitleMatchMode SetWinDelay
+ \ StatusBarGetText StatusBarWait WinActivate WinActivateBottom WinClose
+ \ WinGet WinGetActiveStats WinGetActiveTitle WinGetClass WinGetPos
+ \ WinGetText WinGetTitle WinHide WinKill WinMaximize WinMinimize
+ \ WinMinimizeAll WinMinimizeAllUndo WinMove WinRestore WinSet
+ \ WinSetTitle WinShow WinWait WinWaitActive WinWaitNotActive WinWaitClose
+ \ InStr RegExMatch RegExReplace StrLen SubStr Asc Chr
+ \ DllCall VarSetCapacity WinActive WinExist IsLabel OnMessage
+ \ Abs Ceil Exp Floor Log Ln Mod Round Sqrt Sin Cos Tan ASin ACos ATan
+ \ FileExist GetKeyState numput numget RegisterCallback
+
+" these are user-defined functions, in dark green
+sy match ahkNewFunction "\s*\w\{1,}(.*)"
+sy match ahkNewFunctionParams "(\@<=.*)\@=" containedin=ahkNewFunction
+
+sy match ahkEscape "`." containedin=ahkFunction,ahkLabel,ahkVariable,ahkNewFunctionParams
+
+" I don't like %var value% being in a different color than the var itself, so
+" commented out.
+"sy match ahkVariable "%.\{-}%" containedin=ahkNewFunctionParams
+"sy match ahkVariable "%.\{-}%"
+
+sy match ahkKey "[!#^+]\{1,4}`\=.\n" contains=ahkEscape
+sy match ahkKey "[!#^+]\{0,4}{.\{-}}"
+
+
+sy match ahkDirective "^#[a-zA-Z]\{2,\}"
+
+sy match ahkLabel "^\w\+:\s*$"
+sy match ahkLabel "^[^,]\+:\{2\}\(\w\+,\)\=" contains=ahkFunction
+sy match ahkLabel "^[^,]\+:\{2\}\w\+\s*$" contains=ahkFunction
+sy match ahkLabel "^:.\+:.*::"
+sy keyword ahkLabel return containedin=ahkFunction
+
+sy match ahkStatement "^\s*if\w*\(,\)\="
+sy keyword ahkStatement If Else Loop Loop, exitapp containedin=ahkFunction
+
+sy match ahkComment "`\@