diff --git a/.gitignore b/.gitignore
index ef9c902..a737e16 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,60 +1,65 @@
-#-------------------------------------------------------------------------------
-# NppExec
-NppExec_Manual.chm
-*.zip
-
-#-------------------------------------------------------------------------------
-# VisualStudio
-
-#-- User-specific files
-*.suo
-*.user
-*.sln.docstates
-
-#-- Build results
-[Dd]ebug/
-[Rr]elease/
-x64/
-x86/
-#[Bb]in/
-[Oo]bj/
-*.pdb
-
-#-- Visual C++ cache files
-.vs/
-ipch/
-*.aps
-*.ncb
-*.opendb
-*.opensdf
-*.sdf
-*.cachefile
-*.vc.db
-
-#-- Backup & report files from converting an old project file to a newer
-# Visual Studio version. Backup files are not needed, because we have git ;-)
-_UpgradeReport_Files/
-Backup*/
-UpgradeLog*.XML
-UpgradeLog*.htm
-
-#-- Others
-*_i.c
-*_p.c
-*.ilk
-*.meta
-*.obj
-*.pch
-*.pdb
-*.pgc
-*.pgd
-*.rsp
-*.sbr
-*.tlb
-*.tli
-*.tlh
-*.tmp
-*.tmp_proj
-*.log
-.builds
-*.pidb
+#-------------------------------------------------------------------------------
+# NppExec
+NppExec_Manual.chm
+*.zip
+
+#-------------------------------------------------------------------------------
+# VisualStudio
+
+#-- User-specific files
+*.suo
+*.user
+*.sln.docstates
+
+#-- Build results
+[Dd]ebug/
+/NppExec/[Rr]elease/*
+!/NppExec/[Rr]elease/NppExec/*
+NppExecPluginMsgTester/[Rr]elease*/*
+UnitTests/[Rr]elease*/*
+x64/
+x86/
+#[Bb]in/
+[Oo]bj/
+*.pdb
+*.lib
+
+#-- Visual C++ cache files
+.vs/
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.vc.db
+
+#-- Backup & report files from converting an old project file to a newer
+# Visual Studio version. Backup files are not needed, because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+#-- Others
+*_i.c
+*_p.c
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.tlog
+.builds
+*.pidb
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..f288702
--- /dev/null
+++ b/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/NppExec/NppExec_DevCpp.dev b/NppExec/NppExec_DevCpp.dev
index 771c0d8..2898857 100644
--- a/NppExec/NppExec_DevCpp.dev
+++ b/NppExec/NppExec_DevCpp.dev
@@ -1,7 +1,7 @@
[Project]
FileName=NppExec_DevCpp.dev
Name=NppExec
-UnitCount=84
+UnitCount=86
Type=3
Ver=2
IsCpp=1
@@ -19,7 +19,7 @@ PrivateResource=NppExec_DevCpp_private.rc
ResourceIncludes=
MakeIncludes=
Compiler=-DUNICODE_@@_-D_UNICODE_@@_
-CppCompiler=-DUNICODE_@@_-D_UNICODE_@@_-std=gnu++11_@@_
+CppCompiler=-DUNICODE_@@_-D_UNICODE_@@_-std=gnu++17_@@_
Linker=-lcomctl32_@@_-lcomdlg32_@@_-lgdi32_@@_-lshlwapi_@@_
Icon=
ExeOutput=
@@ -922,3 +922,23 @@ Priority=1000
OverrideBuildCmd=0
BuildCmd=
+[Unit85]
+FileName=src\PickColorBtn.cpp
+CompileCpp=1
+Folder=NppExec
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
+[Unit86]
+FileName=src\ChildProcess.cpp
+CompileCpp=1
+Folder=NppExec
+Compile=1
+Link=1
+Priority=1000
+OverrideBuildCmd=0
+BuildCmd=
+
diff --git a/NppExec/NppExec_VC2015.vcxproj b/NppExec/NppExec_VC2015.vcxproj
index 2fcbd08..4df8527 100644
--- a/NppExec/NppExec_VC2015.vcxproj
+++ b/NppExec/NppExec_VC2015.vcxproj
@@ -276,6 +276,8 @@
+
+
@@ -323,16 +325,19 @@
+
+
+
diff --git a/NppExec/NppExec_VC2017.vcxproj b/NppExec/NppExec_VC2017.vcxproj
index 5fdbfbc..9c5701a 100644
--- a/NppExec/NppExec_VC2017.vcxproj
+++ b/NppExec/NppExec_VC2017.vcxproj
@@ -125,7 +125,6 @@
DisabledWIN32;_DEBUG;_WINDOWS;_USRDLL;NPPEXEC_EXPORTS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)
- falseEnableFastChecksMultiThreadedDebug
@@ -148,7 +147,6 @@
DisabledWIN32;_DEBUG;_WINDOWS;_USRDLL;NPPEXEC_EXPORTS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)
- falseEnableFastChecksMultiThreadedDebug
@@ -258,6 +256,7 @@
+
@@ -279,6 +278,7 @@
+
@@ -296,6 +296,7 @@
+
@@ -326,6 +327,7 @@
+
@@ -337,6 +339,7 @@
+
diff --git a/NppExec/NppExec_VC2017.vcxproj.filters b/NppExec/NppExec_VC2017.vcxproj.filters
index 84c855e..646712e 100644
--- a/NppExec/NppExec_VC2017.vcxproj.filters
+++ b/NppExec/NppExec_VC2017.vcxproj.filters
@@ -141,6 +141,12 @@
Source Files\c_base
+
+ Source Files
+
+
+ Source Files
+
@@ -242,6 +248,9 @@
Header Files
+
+ Header Files\npp_files
+ Header Files\npp_files
@@ -299,6 +308,12 @@
Header Files\c_base
+
+ Header Files
+
+
+ Header Files
+
diff --git a/NppExec/NppExec_VC2019.sln b/NppExec/NppExec_VC2019.sln
new file mode 100644
index 0000000..a7a6d55
--- /dev/null
+++ b/NppExec/NppExec_VC2019.sln
@@ -0,0 +1,33 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.32413.511
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{65281C0D-EEA5-49A9-BF22-ABF2FCAF6A49}") = "NppExec", "NppExec_VC2019.vcxproj", "{70DF0FCD-0D4D-4C2A-B56D-A7DF0296CD93}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Debug (ANSI)|Win32 = Debug (ANSI)|Win32
+ Debug (ANSI)|x64 = Debug (ANSI)|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {70DF0FCD-0D4D-4C2A-B56D-A7DF0296CD93}.Debug|Win32.ActiveCfg = Debug|Win32
+ {70DF0FCD-0D4D-4C2A-B56D-A7DF0296CD93}.Debug|Win32.Build.0 = Debug|Win32
+ {70DF0FCD-0D4D-4C2A-B56D-A7DF0296CD93}.Debug|x64.ActiveCfg = Debug|x64
+ {70DF0FCD-0D4D-4C2A-B56D-A7DF0296CD93}.Debug|x64.Build.0 = Debug|x64
+ {70DF0FCD-0D4D-4C2A-B56D-A7DF0296CD93}.Debug (ANSI)|Win32.ActiveCfg = Debug (ANSI)|Win32
+ {70DF0FCD-0D4D-4C2A-B56D-A7DF0296CD93}.Debug (ANSI)|Win32.Build.0 = Debug (ANSI)|Win32
+ {70DF0FCD-0D4D-4C2A-B56D-A7DF0296CD93}.Debug (ANSI)|x64.ActiveCfg = Debug (ANSI)|x64
+ {70DF0FCD-0D4D-4C2A-B56D-A7DF0296CD93}.Debug (ANSI)|x64.Build.0 = Debug (ANSI)|x64
+ {70DF0FCD-0D4D-4C2A-B56D-A7DF0296CD93}.Release|Win32.ActiveCfg = Release|Win32
+ {70DF0FCD-0D4D-4C2A-B56D-A7DF0296CD93}.Release|Win32.Build.0 = Release|Win32
+ {70DF0FCD-0D4D-4C2A-B56D-A7DF0296CD93}.Release|x64.ActiveCfg = Release|x64
+ {70DF0FCD-0D4D-4C2A-B56D-A7DF0296CD93}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/NppExec/NppExec_VC2019.vcxproj b/NppExec/NppExec_VC2019.vcxproj
new file mode 100644
index 0000000..f31e16e
--- /dev/null
+++ b/NppExec/NppExec_VC2019.vcxproj
@@ -0,0 +1,354 @@
+
+
+
+
+ Debug (ANSI)
+ Win32
+
+
+ Debug (ANSI)
+ x64
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ NppExec
+ {70DF0FCD-0D4D-4C2A-B56D-A7DF0296CD93}
+ NppExec
+ Win32Proj
+
+
+
+ DynamicLibrary
+ v142
+ false
+ Unicode
+
+
+ DynamicLibrary
+ v142
+ false
+ Unicode
+
+
+ DynamicLibrary
+ v142
+ false
+ Unicode
+
+
+ DynamicLibrary
+ v142
+ false
+ MultiByte
+
+
+ DynamicLibrary
+ v142
+ false
+ Unicode
+
+
+ DynamicLibrary
+ v142
+ false
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+ <_ProjectFileVersion>12.0.30501.0
+
+
+ Debug\
+ Debug\
+ true
+
+
+ Debug\
+ Debug\
+ true
+
+
+ true
+
+
+ true
+
+
+ Release\
+ Release\
+ false
+
+
+ false
+
+
+
+ Disabled
+ WIN32;_DEBUG;_WINDOWS;_USRDLL;NPPEXEC_EXPORTS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)
+ EnableFastChecks
+ MultiThreadedDebug
+
+ Level3
+ EditAndContinue
+ /Zc:threadSafeInit- %(AdditionalOptions)
+
+
+ comctl32.lib htmlhelp.lib %(AdditionalOptions)
+ $(OutDir)NppExec.dll
+ true
+ $(OutDir)NppExec.pdb
+ Windows
+ $(OutDir)NppExec.lib
+ MachineX86
+ shlwapi.lib;%(AdditionalDependencies)
+
+
+
+
+ Disabled
+ WIN32;_DEBUG;_WINDOWS;_USRDLL;NPPEXEC_EXPORTS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)
+ EnableFastChecks
+ MultiThreadedDebug
+
+
+ Level3
+ EditAndContinue
+ /Zc:threadSafeInit- %(AdditionalOptions)
+
+
+ comctl32.lib htmlhelp.lib %(AdditionalOptions)
+ $(OutDir)NppExec.dll
+ true
+ $(OutDir)NppExec.pdb
+ Windows
+ $(OutDir)NppExec.lib
+ MachineX86
+ shlwapi.lib;%(AdditionalDependencies)
+
+
+
+
+ Disabled
+ WIN32;_DEBUG;_WINDOWS;_USRDLL;NPPEXEC_EXPORTS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)
+ EnableFastChecks
+ MultiThreadedDebug
+
+
+ Level3
+ ProgramDatabase
+
+
+ comctl32.lib htmlhelp.lib %(AdditionalOptions)
+ $(OutDir)NppExec.dll
+ true
+ $(OutDir)NppExec.pdb
+ Windows
+ $(OutDir)NppExec.lib
+ shlwapi.lib;%(AdditionalDependencies)
+
+
+
+
+ Disabled
+ WIN32;_DEBUG;_WINDOWS;_USRDLL;NPPEXEC_EXPORTS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)
+ EnableFastChecks
+ MultiThreadedDebug
+
+
+ Level3
+ ProgramDatabase
+
+
+ comctl32.lib htmlhelp.lib %(AdditionalOptions)
+ $(OutDir)NppExec.dll
+ true
+ $(OutDir)NppExec.pdb
+ Windows
+ $(OutDir)NppExec.lib
+ shlwapi.lib;%(AdditionalDependencies)
+
+
+
+
+ WIN32;NDEBUG;_WINDOWS;_USRDLL;NPPEXEC_EXPORTS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)
+ MultiThreaded
+
+ Level3
+ ProgramDatabase
+ /Zc:threadSafeInit- %(AdditionalOptions)
+
+
+ comctl32.lib htmlhelp.lib %(AdditionalOptions)
+ $(OutDir)NppExec.dll
+ true
+ Windows
+ true
+ true
+ $(OutDir)NppExec.lib
+ MachineX86
+ shlwapi.lib;%(AdditionalDependencies)
+
+
+
+
+ WIN32;NDEBUG;_WINDOWS;_USRDLL;NPPEXEC_EXPORTS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)
+ MultiThreaded
+
+
+ Level3
+ ProgramDatabase
+
+
+ comctl32.lib htmlhelp.lib %(AdditionalOptions)
+ $(OutDir)NppExec.dll
+ false
+ Windows
+ true
+ true
+ $(OutDir)NppExec.lib
+ shlwapi.lib;%(AdditionalDependencies)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/NppExec/NppExec_VC2019.vcxproj.filters b/NppExec/NppExec_VC2019.vcxproj.filters
new file mode 100644
index 0000000..646712e
--- /dev/null
+++ b/NppExec/NppExec_VC2019.vcxproj.filters
@@ -0,0 +1,323 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hpp;hxx;hm;inl;inc;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx
+
+
+ {3dd2d2c6-05d4-41b8-a602-2731eddfc239}
+
+
+ {2e542de7-1a8f-4b53-97a0-736ae0c257c3}
+
+
+ {d6bb39d9-dfd2-4771-a80d-2617c7f0ec31}
+
+
+ {e6dadeeb-d381-419e-8c25-f921e51b9235}
+
+
+ {7f553aa3-1d98-4f1c-b924-024428bfff6d}
+
+
+ {975a6d58-a2e8-4a99-9cf8-78f4754bf1dc}
+
+
+ {17860ebd-8035-4dd1-aa6b-3db759dcd616}
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files\fparser
+
+
+ Source Files
+
+
+ Source Files\cpp
+
+
+ Source Files\c_base
+
+
+ Source Files\c_base
+
+
+ Source Files\c_base
+
+
+ Source Files\c_base
+
+
+ Source Files\c_base
+
+
+ Source Files\c_base
+
+
+ Source Files\c_base
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files\fparser
+
+
+ Header Files\fparser
+
+
+ Header Files\fparser
+
+
+ Header Files\fparser
+
+
+ Header Files
+
+
+ Header Files\npp_files
+
+
+ Header Files\npp_files
+
+
+ Header Files\npp_files
+
+
+ Header Files\npp_files
+
+
+ Header Files\npp_files
+
+
+ Header Files\npp_files
+
+
+ Header Files\npp_files
+
+
+ Header Files\cpp
+
+
+ Header Files\cpp
+
+
+ Header Files\cpp
+
+
+ Header Files\cpp
+
+
+ Header Files\cpp
+
+
+ Header Files\c_base
+
+
+ Header Files\c_base
+
+
+ Header Files\c_base
+
+
+ Header Files\c_base
+
+
+ Header Files\c_base
+
+
+ Header Files\c_base
+
+
+ Header Files\c_base
+
+
+ Header Files\c_base
+
+
+ Header Files
+
+
+ Header Files
+
+
+
+
+ Resource Files
+
+
+
\ No newline at end of file
diff --git a/NppExec/NppExec_VC2022.sln b/NppExec/NppExec_VC2022.sln
new file mode 100644
index 0000000..ae70541
--- /dev/null
+++ b/NppExec/NppExec_VC2022.sln
@@ -0,0 +1,33 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.5.33627.172
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{E562BEB5-0D1F-4E10-AB35-CE4DD4620D6D}") = "NppExec", "NppExec_VC2022.vcxproj", "{653F5B73-87D2-48E3-BF19-309274028BF7}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Debug (ANSI)|Win32 = Debug (ANSI)|Win32
+ Debug (ANSI)|x64 = Debug (ANSI)|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {653F5B73-87D2-48E3-BF19-309274028BF7}.Debug|Win32.ActiveCfg = Debug|Win32
+ {653F5B73-87D2-48E3-BF19-309274028BF7}.Debug|Win32.Build.0 = Debug|Win32
+ {653F5B73-87D2-48E3-BF19-309274028BF7}.Debug|x64.ActiveCfg = Debug|x64
+ {653F5B73-87D2-48E3-BF19-309274028BF7}.Debug|x64.Build.0 = Debug|x64
+ {653F5B73-87D2-48E3-BF19-309274028BF7}.Debug (ANSI)|Win32.ActiveCfg = Debug (ANSI)|Win32
+ {653F5B73-87D2-48E3-BF19-309274028BF7}.Debug (ANSI)|Win32.Build.0 = Debug (ANSI)|Win32
+ {653F5B73-87D2-48E3-BF19-309274028BF7}.Debug (ANSI)|x64.ActiveCfg = Debug (ANSI)|x64
+ {653F5B73-87D2-48E3-BF19-309274028BF7}.Debug (ANSI)|x64.Build.0 = Debug (ANSI)|x64
+ {653F5B73-87D2-48E3-BF19-309274028BF7}.Release|Win32.ActiveCfg = Release|Win32
+ {653F5B73-87D2-48E3-BF19-309274028BF7}.Release|Win32.Build.0 = Release|Win32
+ {653F5B73-87D2-48E3-BF19-309274028BF7}.Release|x64.ActiveCfg = Release|x64
+ {653F5B73-87D2-48E3-BF19-309274028BF7}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/NppExec/NppExec_VC2022.vcxproj b/NppExec/NppExec_VC2022.vcxproj
new file mode 100644
index 0000000..1d82b95
--- /dev/null
+++ b/NppExec/NppExec_VC2022.vcxproj
@@ -0,0 +1,354 @@
+
+
+
+
+ Debug (ANSI)
+ Win32
+
+
+ Debug (ANSI)
+ x64
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ NppExec
+ {653F5B73-87D2-48E3-BF19-309274028BF7}
+ NppExec
+ Win32Proj
+
+
+
+ DynamicLibrary
+ v143
+ false
+ Unicode
+
+
+ DynamicLibrary
+ v143
+ false
+ Unicode
+
+
+ DynamicLibrary
+ v143
+ false
+ Unicode
+
+
+ DynamicLibrary
+ v143
+ false
+ MultiByte
+
+
+ DynamicLibrary
+ v143
+ false
+ Unicode
+
+
+ DynamicLibrary
+ v143
+ false
+ MultiByte
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ false
+
+
+ <_ProjectFileVersion>12.0.30501.0
+
+
+ Debug\
+ Debug\
+ true
+
+
+ Debug\
+ Debug\
+ true
+
+
+ true
+
+
+ true
+
+
+ Release\
+ Release\
+ false
+
+
+ false
+
+
+
+ Disabled
+ WIN32;_DEBUG;_WINDOWS;_USRDLL;NPPEXEC_EXPORTS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)
+ EnableFastChecks
+ MultiThreadedDebug
+
+ Level3
+ EditAndContinue
+ /Zc:threadSafeInit- %(AdditionalOptions)
+
+
+ comctl32.lib htmlhelp.lib %(AdditionalOptions)
+ $(OutDir)NppExec.dll
+ true
+ $(OutDir)NppExec.pdb
+ Windows
+ $(OutDir)NppExec.lib
+ MachineX86
+ shlwapi.lib;%(AdditionalDependencies)
+
+
+
+
+ Disabled
+ WIN32;_DEBUG;_WINDOWS;_USRDLL;NPPEXEC_EXPORTS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)
+ EnableFastChecks
+ MultiThreadedDebug
+
+
+ Level3
+ EditAndContinue
+ /Zc:threadSafeInit- %(AdditionalOptions)
+
+
+ comctl32.lib htmlhelp.lib %(AdditionalOptions)
+ $(OutDir)NppExec.dll
+ true
+ $(OutDir)NppExec.pdb
+ Windows
+ $(OutDir)NppExec.lib
+ MachineX86
+ shlwapi.lib;%(AdditionalDependencies)
+
+
+
+
+ Disabled
+ WIN32;_DEBUG;_WINDOWS;_USRDLL;NPPEXEC_EXPORTS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)
+ EnableFastChecks
+ MultiThreadedDebug
+
+
+ Level3
+ ProgramDatabase
+
+
+ comctl32.lib htmlhelp.lib %(AdditionalOptions)
+ $(OutDir)NppExec.dll
+ true
+ $(OutDir)NppExec.pdb
+ Windows
+ $(OutDir)NppExec.lib
+ shlwapi.lib;%(AdditionalDependencies)
+
+
+
+
+ Disabled
+ WIN32;_DEBUG;_WINDOWS;_USRDLL;NPPEXEC_EXPORTS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)
+ EnableFastChecks
+ MultiThreadedDebug
+
+
+ Level3
+ ProgramDatabase
+
+
+ comctl32.lib htmlhelp.lib %(AdditionalOptions)
+ $(OutDir)NppExec.dll
+ true
+ $(OutDir)NppExec.pdb
+ Windows
+ $(OutDir)NppExec.lib
+ shlwapi.lib;%(AdditionalDependencies)
+
+
+
+
+ WIN32;NDEBUG;_WINDOWS;_USRDLL;NPPEXEC_EXPORTS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)
+ MultiThreaded
+
+ Level3
+ ProgramDatabase
+ /Zc:threadSafeInit- %(AdditionalOptions)
+
+
+ comctl32.lib htmlhelp.lib %(AdditionalOptions)
+ $(OutDir)NppExec.dll
+ true
+ Windows
+ true
+ true
+ $(OutDir)NppExec.lib
+ MachineX86
+ shlwapi.lib;%(AdditionalDependencies)
+
+
+
+
+ WIN32;NDEBUG;_WINDOWS;_USRDLL;NPPEXEC_EXPORTS;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NON_CONFORMING_SWPRINTFS;%(PreprocessorDefinitions)
+ MultiThreaded
+
+
+ Level3
+ ProgramDatabase
+
+
+ comctl32.lib htmlhelp.lib %(AdditionalOptions)
+ $(OutDir)NppExec.dll
+ false
+ Windows
+ true
+ true
+ $(OutDir)NppExec.lib
+ shlwapi.lib;%(AdditionalDependencies)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/NppExec/NppExec_VC2022.vcxproj.filters b/NppExec/NppExec_VC2022.vcxproj.filters
new file mode 100644
index 0000000..646712e
--- /dev/null
+++ b/NppExec/NppExec_VC2022.vcxproj.filters
@@ -0,0 +1,323 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hpp;hxx;hm;inl;inc;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx
+
+
+ {3dd2d2c6-05d4-41b8-a602-2731eddfc239}
+
+
+ {2e542de7-1a8f-4b53-97a0-736ae0c257c3}
+
+
+ {d6bb39d9-dfd2-4771-a80d-2617c7f0ec31}
+
+
+ {e6dadeeb-d381-419e-8c25-f921e51b9235}
+
+
+ {7f553aa3-1d98-4f1c-b924-024428bfff6d}
+
+
+ {975a6d58-a2e8-4a99-9cf8-78f4754bf1dc}
+
+
+ {17860ebd-8035-4dd1-aa6b-3db759dcd616}
+
+
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files\fparser
+
+
+ Source Files
+
+
+ Source Files\cpp
+
+
+ Source Files\c_base
+
+
+ Source Files\c_base
+
+
+ Source Files\c_base
+
+
+ Source Files\c_base
+
+
+ Source Files\c_base
+
+
+ Source Files\c_base
+
+
+ Source Files\c_base
+
+
+ Source Files
+
+
+ Source Files
+
+
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files\fparser
+
+
+ Header Files\fparser
+
+
+ Header Files\fparser
+
+
+ Header Files\fparser
+
+
+ Header Files
+
+
+ Header Files\npp_files
+
+
+ Header Files\npp_files
+
+
+ Header Files\npp_files
+
+
+ Header Files\npp_files
+
+
+ Header Files\npp_files
+
+
+ Header Files\npp_files
+
+
+ Header Files\npp_files
+
+
+ Header Files\cpp
+
+
+ Header Files\cpp
+
+
+ Header Files\cpp
+
+
+ Header Files\cpp
+
+
+ Header Files\cpp
+
+
+ Header Files\c_base
+
+
+ Header Files\c_base
+
+
+ Header Files\c_base
+
+
+ Header Files\c_base
+
+
+ Header Files\c_base
+
+
+ Header Files\c_base
+
+
+ Header Files\c_base
+
+
+ Header Files\c_base
+
+
+ Header Files
+
+
+ Header Files
+
+
+
+
+ Resource Files
+
+
+
\ No newline at end of file
diff --git a/NppExec/Release/NppExec/BaseDef.h b/NppExec/Release/NppExec/BaseDef.h
index 6cd4436..c5d28c2 100644
--- a/NppExec/Release/NppExec/BaseDef.h
+++ b/NppExec/Release/NppExec/BaseDef.h
@@ -10,10 +10,14 @@
#define NPE_SF_REGEXP 0x00000100 // search using a regular expression
#define NPE_SF_POSIX 0x00000200 // search using a POSIX-compatible regular expression
#define NPE_SF_CXX11REGEX 0x00000400 // search using a C++11 regular expression
+#define NPE_SF_REGEXP_EMPTYMATCH_NOTAFTERMATCH 0x00002000
+#define NPE_SF_REGEXP_EMPTYMATCH_ALL 0x00004000
+#define NPE_SF_REGEXP_EMPTYMATCH_ALLOWATSTART 0x00008000
#define NPE_SF_BACKWARD 0x00010000 // search backward (from the bottom to the top)
#define NPE_SF_NEXT 0x00020000 // search from current_position + 1
#define NPE_SF_INSELECTION 0x00100000 // search only in the selected text
-#define NPE_SF_INWHOLETEXT 0x00200000 // search in the whole text, not only from the current position
+#define NPE_SF_INENTIRETEXT 0x00200000 // search in the entire text, not only from the current position
+#define NPE_SF_INWHOLETEXT 0x00200000 // search in the entire text, not only from the current position
#define NPE_SF_SETPOS 0x01000000 // move the caret to the position of the occurrence found
#define NPE_SF_SETSEL 0x02000000 // move the caret + select the occurrence found
#define NPE_SF_REPLACEALL 0x10000000 // replace all the occurrences from the current pos to the end
diff --git a/NppExec/Release/NppExec/Notepad_plus_msgs.h b/NppExec/Release/NppExec/Notepad_plus_msgs.h
index a2261b0..03e1cbf 100644
--- a/NppExec/Release/NppExec/Notepad_plus_msgs.h
+++ b/NppExec/Release/NppExec/Notepad_plus_msgs.h
@@ -1,5 +1,5 @@
// This file is part of Notepad++ project
-// Copyright (C)2021 Don HO
+// Copyright (C)2025 Don HO
// 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
@@ -15,14 +15,18 @@
// along with this program. If not, see .
+
+// For more comprehensive information on plugin communication, please refer to the following resource:
+// https://npp-user-manual.org/docs/plugin-communication/
+
+
#pragma once
#include
-#include
enum LangType {L_TEXT, L_PHP , L_C, L_CPP, L_CS, L_OBJC, L_JAVA, L_RC,\
L_HTML, L_XML, L_MAKEFILE, L_PASCAL, L_BATCH, L_INI, L_ASCII, L_USER,\
- L_ASP, L_SQL, L_VB, L_JS, L_CSS, L_PERL, L_PYTHON, L_LUA, \
+ L_ASP, L_SQL, L_VB, L_JS_EMBEDDED, L_CSS, L_PERL, L_PYTHON, L_LUA, \
L_TEX, L_FORTRAN, L_BASH, L_FLASH, L_NSIS, L_TCL, L_LISP, L_SCHEME,\
L_ASM, L_DIFF, L_PROPS, L_PS, L_RUBY, L_SMALLTALK, L_VHDL, L_KIX, L_AU3,\
L_CAML, L_ADA, L_VERILOG, L_MATLAB, L_HASKELL, L_INNO, L_SEARCHRESULT,\
@@ -33,436 +37,1024 @@ enum LangType {L_TEXT, L_PHP , L_C, L_CPP, L_CS, L_OBJC, L_JAVA, L_RC,\
L_CSOUND, L_ERLANG, L_ESCRIPT, L_FORTH, L_LATEX, \
L_MMIXAL, L_NIM, L_NNCRONTAB, L_OSCRIPT, L_REBOL, \
L_REGISTRY, L_RUST, L_SPICE, L_TXT2TAGS, L_VISUALPROLOG,\
- // Don't use L_JS, use L_JAVASCRIPT instead
- // The end of enumated language type, so it should be always at the end
+ L_TYPESCRIPT, L_JSON5, L_MSSQL, L_GDSCRIPT, L_HOLLYWOOD,\
+ L_GOLANG, L_RAKU, L_TOML, L_SAS, L_ERRORLIST, \
+ // Don't use L_JS_EMBEDDED, use L_JAVASCRIPT instead
+ // The end of enumerated language type, so it should be always at the end
L_EXTERNAL};
+enum class ExternalLexerAutoIndentMode { Standard, C_Like, Custom };
+enum class MacroStatus { Idle, RecordInProgress, RecordingStopped, PlayingBack };
-enum winVer{ WV_UNKNOWN, WV_WIN32S, WV_95, WV_98, WV_ME, WV_NT, WV_W2K, WV_XP, WV_S2003, WV_XPX64, WV_VISTA, WV_WIN7, WV_WIN8, WV_WIN81, WV_WIN10};
-enum Platform { PF_UNKNOWN, PF_X86, PF_X64, PF_IA64 };
+enum winVer { WV_UNKNOWN, WV_WIN32S, WV_95, WV_98, WV_ME, WV_NT, WV_W2K, WV_XP, WV_S2003, WV_XPX64, WV_VISTA, WV_WIN7, WV_WIN8, WV_WIN81, WV_WIN10, WV_WIN11 };
+enum Platform { PF_UNKNOWN, PF_X86, PF_X64, PF_IA64, PF_ARM64 };
#define NPPMSG (WM_USER + 1000)
- #define NPPM_GETCURRENTSCINTILLA (NPPMSG + 4)
- #define NPPM_GETCURRENTLANGTYPE (NPPMSG + 5)
- #define NPPM_SETCURRENTLANGTYPE (NPPMSG + 6)
-
- #define NPPM_GETNBOPENFILES (NPPMSG + 7)
- #define ALL_OPEN_FILES 0
- #define PRIMARY_VIEW 1
- #define SECOND_VIEW 2
-
- #define NPPM_GETOPENFILENAMES (NPPMSG + 8)
-
-
- #define NPPM_MODELESSDIALOG (NPPMSG + 12)
- #define MODELESSDIALOGADD 0
- #define MODELESSDIALOGREMOVE 1
+ #define NPPM_GETCURRENTSCINTILLA (NPPMSG + 4)
+ // BOOL NPPM_GETCURRENTSCINTILLA(0, int* iScintillaView)
+ // Get current Scintilla view.
+ // wParam: 0 (not used)
+ // lParam[out]: iScintillaView could be 0 (Main View) or 1 (Sub View)
+ // return TRUE
+
+ #define NPPM_GETCURRENTLANGTYPE (NPPMSG + 5)
+ // BOOL NPPM_GETCURRENTLANGTYPE(0, int* langType)
+ // Get the programming language type from the current used document.
+ // wParam: 0 (not used)
+ // lParam[out]: langType - see "enum LangType" for all valid values
+ // return TRUE
+
+ #define NPPM_SETCURRENTLANGTYPE (NPPMSG + 6)
+ // BOOL NPPM_SETCURRENTLANGTYPE(0, int langType)
+ // Set a new programming language type to the current used document.
+ // wParam: 0 (not used)
+ // lParam[in]: langType - see "enum LangType" for all valid values
+ // return TRUE
+
+ #define NPPM_GETNBOPENFILES (NPPMSG + 7)
+ #define ALL_OPEN_FILES 0
+ #define PRIMARY_VIEW 1
+ #define SECOND_VIEW 2
+ // int NPPM_GETNBOPENFILES(0, int iViewType)
+ // Get the number of files currently open.
+ // wParam: 0 (not used)
+ // lParam[in]: iViewType - could be PRIMARY_VIEW (value 1), SECOND_VIEW (value 2) or ALL_OPEN_FILES (value 0)
+ // return the number of opened files
+
+ #define NPPM_GETOPENFILENAMES_DEPRECATED (NPPMSG + 8)
+ // BOOL NPPM_GETOPENFILENAMES_DEPRECATED(wchar_t** fileNames, int nbFileNames) - DEPRECATED: It is kept for the compatibility. Use NPPM_GETBUFFERIDFROMPOS & NPPM_GETFULLPATHFROMBUFFERID instead.
+ // Get the open files full paths of both views. User is responsible to allocate a big enough fileNames array by using NPPM_GETNBOPENFILES.
+ // wParam[out]: fileNames - array of file path
+ // lParam[in]: nbFileNames is the number of file path.
+ // return value: The number of files copied into fileNames array
+
+ #define NPPM_MODELESSDIALOG (NPPMSG + 12)
+ #define MODELESSDIALOGADD 0
+ #define MODELESSDIALOGREMOVE 1
+ // HWND NPPM_MODELESSDIALOG(int action, HWND hDlg)
+ // Register (or unregister) plugin's dialog handle.
+ // For each created dialog in your plugin, you should register it (and unregister while destroy it) to Notepad++ by using this message.
+ // If this message is ignored, then your dialog won't react with the key stroke messages such as TAB, Ctrl-C or Ctrl-V key.
+ // For the good functioning of your plugin dialog, you're recommended to not ignore this message.
+ // wParam[in]: action is MODELESSDIALOGADD (for registering your hDlg) or MODELESSDIALOGREMOVE (for unregistering your hDlg)
+ // lParam[in]: hDlg is the handle of dialog to register/unregister
+ // return hDlg (HWND) on success, NULL on failure
#define NPPM_GETNBSESSIONFILES (NPPMSG + 13)
+ // int NPPM_GETNBSESSIONFILES (BOOL* pbIsValidXML, wchar_t* sessionFileName)
+ // Get the number of files to load in the session sessionFileName. sessionFileName should be a full path name of an xml file.
+ // wParam[out]: pbIsValidXML, if the lParam pointer is null, then this parameter will be ignored. TRUE if XML is valid, otherwise FALSE.
+ // lParam[in]: sessionFileName is XML session full path
+ // return value: The number of files in XML session file
+
#define NPPM_GETSESSIONFILES (NPPMSG + 14)
- #define NPPM_SAVESESSION (NPPMSG + 15)
- #define NPPM_SAVECURRENTSESSION (NPPMSG + 16)
+ // BOOL NPPM_GETSESSIONFILES (wchar_t** sessionFileArray, wchar_t* sessionFileName)
+ // the files' full path name from a session file.
+ // wParam[out]: sessionFileArray is the array in which the files' full path of the same group are written. To allocate the array with the proper size, send message NPPM_GETNBSESSIONFILES.
+ // lParam[in]: sessionFileName is XML session full path
+ // Return FALSE on failure, TRUE on success
+ #define NPPM_SAVESESSION (NPPMSG + 15)
struct sessionInfo {
- TCHAR* sessionFilePathName;
- int nbFile;
- TCHAR** files;
+ wchar_t* sessionFilePathName; // Full session file path name to be saved
+ int nbFile; // Size of "files" array - number of files to be saved in session
+ wchar_t** files; // Array of file name (full path) to be saved in session
};
+ // NPPM_SAVESESSION(0, sessionInfo* si)
+ // Creates an session file for a defined set of files.
+ // Contrary to NPPM_SAVECURRENTSESSION (see below), which saves the current opened files, this call can be used to freely define any file which should be part of a session.
+ // wParam: 0 (not used)
+ // lParam[in]: si is a pointer to sessionInfo structure
+ // Returns sessionFileName on success, NULL otherwise
- #define NPPM_GETOPENFILENAMESPRIMARY (NPPMSG + 17)
- #define NPPM_GETOPENFILENAMESSECOND (NPPMSG + 18)
+ #define NPPM_SAVECURRENTSESSION (NPPMSG + 16)
+ // wchar_t* NPPM_SAVECURRENTSESSION(0, wchar_t* sessionFileName)
+ // Saves the current opened files in Notepad++ as a group of files (session) as an xml file.
+ // wParam: 0 (not used)
+ // lParam[in]: sessionFileName is the xml full path name
+ // Returns sessionFileName on success, NULL otherwise
+
+
+ #define NPPM_GETOPENFILENAMESPRIMARY_DEPRECATED (NPPMSG + 17)
+ // BOOL NPPM_GETOPENFILENAMESPRIMARY_DEPRECATED(wchar_t** fileNames, int nbFileNames) - DEPRECATED: It is kept for the compatibility. Use NPPM_GETBUFFERIDFROMPOS & NPPM_GETFULLPATHFROMBUFFERID instead.
+ // Get the open files full paths of main view. User is responsible to allocate an big enough fileNames array by using NPPM_GETNBOPENFILES.
+ // wParam[out]: fileNames - array of file path
+ // lParam[in]: nbFileNames is the number of file path.
+ // return value: The number of files copied into fileNames array
+
+ #define NPPM_GETOPENFILENAMESSECOND_DEPRECATED (NPPMSG + 18)
+ // BOOL NPPM_GETOPENFILENAMESSECOND_DEPRECATED(wchar_t** fileNames, int nbFileNames) - DEPRECATED: It is kept for the compatibility. Use NPPM_GETBUFFERIDFROMPOS & NPPM_GETFULLPATHFROMBUFFERID instead.
+ // Get the open files full paths of sub-view. User is responsible to allocate an big enough fileNames array by using NPPM_GETNBOPENFILES.
+ // wParam[out]: fileNames - array of file path
+ // lParam[in]: nbFileNames is the number of file path.
+ // return value: The number of files copied into fileNames array
#define NPPM_CREATESCINTILLAHANDLE (NPPMSG + 20)
- #define NPPM_DESTROYSCINTILLAHANDLE (NPPMSG + 21)
+ // HWND NPPM_CREATESCINTILLAHANDLE(0, HWND hParent)
+ // A plugin can create a Scintilla for its usage by sending this message to Notepad++.
+ // wParam: 0 (not used)
+ // lParam[in]: hParent - If set (non NULL), it will be the parent window of this created Scintilla handle, otherwise the parent window is Notepad++
+ // return the handle of created Scintilla handle
+
+ #define NPPM_DESTROYSCINTILLAHANDLE_DEPRECATED (NPPMSG + 21)
+ // BOOL NPPM_DESTROYSCINTILLAHANDLE_DEPRECATED(0, HWND hScintilla) - DEPRECATED: It is kept for the compatibility.
+ // Notepad++ will deallocate every created Scintilla control on exit, this message returns TRUE but does nothing.
+ // wParam: 0 (not used)
+ // lParam[in]: hScintilla is Scintilla handle
+ // Return TRUE
+
#define NPPM_GETNBUSERLANG (NPPMSG + 22)
+ // int NPPM_GETNBUSERLANG(0, int* udlID)
+ // Get the number of user defined languages and, optionally, the starting menu id.
+ // wParam: 0 (not used)
+ // lParam[out]: udlID is optional, if not used set it to 0, otherwise an integer pointer is needed to retrieve the menu identifier.
+ // Return the number of user defined languages identified
#define NPPM_GETCURRENTDOCINDEX (NPPMSG + 23)
#define MAIN_VIEW 0
#define SUB_VIEW 1
+ // int NPPM_GETCURRENTDOCINDEX(0, int inView)
+ // Get the current index of the given view.
+ // wParam: 0 (not used)
+ // lParam[in]: inView, should be 0 (main view) or 1 (sub-view)
+ // Return -1 if the view is invisible (hidden), otherwise is the current index.
#define NPPM_SETSTATUSBAR (NPPMSG + 24)
- #define STATUSBAR_DOC_TYPE 0
- #define STATUSBAR_DOC_SIZE 1
- #define STATUSBAR_CUR_POS 2
- #define STATUSBAR_EOF_FORMAT 3
+ #define STATUSBAR_DOC_TYPE 0
+ #define STATUSBAR_DOC_SIZE 1
+ #define STATUSBAR_CUR_POS 2
+ #define STATUSBAR_EOF_FORMAT 3
#define STATUSBAR_UNICODE_TYPE 4
- #define STATUSBAR_TYPING_MODE 5
+ #define STATUSBAR_TYPING_MODE 5
+ // BOOL NPPM_SETSTATUSBAR(int whichPart, wchar_t *str2set)
+ // Set string in the specified field of a statusbar.
+ // wParam[in]: whichPart for indicating the statusbar part you want to set. It can be only the above value (0 - 5)
+ // lParam[in]: str2set is the string you want to write to the part of statusbar.
+ // Return FALSE on failure, TRUE on success
#define NPPM_GETMENUHANDLE (NPPMSG + 25)
#define NPPPLUGINMENU 0
#define NPPMAINMENU 1
- // INT NPPM_GETMENUHANDLE(INT menuChoice, 0)
+ // int NPPM_GETMENUHANDLE(int menuChoice, 0)
+ // Get menu handle (HMENU) of choice.
+ // wParam[in]: menuChoice could be main menu (NPPMAINMENU) or Plugin menu (NPPPLUGINMENU)
+ // lParam: 0 (not used)
// Return: menu handle (HMENU) of choice (plugin menu handle or Notepad++ main menu handle)
#define NPPM_ENCODESCI (NPPMSG + 26)
- //ascii file to unicode
- //int NPPM_ENCODESCI(MAIN_VIEW/SUB_VIEW, 0)
- //return new unicodeMode
+ // int NPPM_ENCODESCI(int inView, 0)
+ // Changes current buffer in view to UTF-8.
+ // wParam[in]: inView - main view (0) or sub-view (1)
+ // lParam: 0 (not used)
+ // return new UniMode, with the following value:
+ // 0: ANSI
+ // 1: UTF-8 with BOM
+ // 2: UTF-16 Big Ending with BOM
+ // 3: UTF-16 Little Ending with BOM
+ // 4: UTF-8 without BOM
+ // 5: uni7Bit
+ // 6: UTF-16 Big Ending without BOM
+ // 7: UTF-16 Little Ending without BOM
#define NPPM_DECODESCI (NPPMSG + 27)
- //unicode file to ascii
- //int NPPM_DECODESCI(MAIN_VIEW/SUB_VIEW, 0)
- //return old unicodeMode
+ // int NPPM_DECODESCI(int inView, 0)
+ // Changes current buffer in view to ANSI.
+ // wParam[in]: inView - main view (0) or sub-view (1)
+ // lParam: 0 (not used)
+ // return old UniMode - see above
#define NPPM_ACTIVATEDOC (NPPMSG + 28)
- //void NPPM_ACTIVATEDOC(int view, int index2Activate)
+ // BOOL NPPM_ACTIVATEDOC(int inView, int index2Activate)
+ // Switch to the document by the given view and index.
+ // wParam[in]: inView - main view (0) or sub-view (1)
+ // lParam[in]: index2Activate - index (in the view indicated above) where is the document to be activated
+ // Return TRUE
#define NPPM_LAUNCHFINDINFILESDLG (NPPMSG + 29)
- //void NPPM_LAUNCHFINDINFILESDLG(TCHAR * dir2Search, TCHAR * filtre)
+ // BOOL NPPM_LAUNCHFINDINFILESDLG(wchar_t * dir2Search, wchar_t * filtre)
+ // Launch Find in Files dialog and set "Find in" directory and filters with the given arguments.
+ // wParam[in]: if dir2Search is not NULL, it will be set as working directory in which Notepad++ will search
+ // lParam[in]: if filtre is not NULL, filtre string will be set into filter field
+ // Return TRUE
#define NPPM_DMMSHOW (NPPMSG + 30)
- //void NPPM_DMMSHOW(0, tTbData->hClient)
+ // BOOL NPPM_DMMSHOW(0, HWND hDlg)
+ // Show the dialog which was previously registered by NPPM_DMMREGASDCKDLG.
+ // wParam: 0 (not used)
+ // lParam[in]: hDlg is the handle of dialog to show
+ // Return TRUE
#define NPPM_DMMHIDE (NPPMSG + 31)
- //void NPPM_DMMHIDE(0, tTbData->hClient)
+ // BOOL NPPM_DMMHIDE(0, HWND hDlg)
+ // Hide the dialog which was previously registered by NPPM_DMMREGASDCKDLG.
+ // wParam: 0 (not used)
+ // lParam[in]: hDlg is the handle of dialog to hide
+ // Return TRUE
#define NPPM_DMMUPDATEDISPINFO (NPPMSG + 32)
- //void NPPM_DMMUPDATEDISPINFO(0, tTbData->hClient)
+ // BOOL NPPM_DMMUPDATEDISPINFO(0, HWND hDlg)
+ // Redraw the dialog.
+ // wParam: 0 (not used)
+ // lParam[in]: hDlg is the handle of dialog to redraw
+ // Return TRUE
#define NPPM_DMMREGASDCKDLG (NPPMSG + 33)
- //void NPPM_DMMREGASDCKDLG(0, &tTbData)
+ // BOOL NPPM_DMMREGASDCKDLG(0, tTbData* pData)
+ // Pass the necessary dockingData to Notepad++ in order to make your dialog dockable.
+ // wParam: 0 (not used)
+ // lParam[in]: pData is the pointer of tTbData. Please check tTbData structure in "Docking.h"
+ // Minimum information which needs to be filled out are hClient, pszName, dlgID, uMask and pszModuleName.
+ // Notice that rcFloat and iPrevCont shouldn't be filled. They are used internally.
+ // Return TRUE
#define NPPM_LOADSESSION (NPPMSG + 34)
- //void NPPM_LOADSESSION(0, const TCHAR* file name)
+ // BOOL NPPM_LOADSESSION(0, wchar_t* sessionFileName)
+ // Open all files of same session in Notepad++ via a xml format session file sessionFileName.
+ // wParam: 0 (not used)
+ // lParam[in]: sessionFileName is the full file path of session file to reload
+ // Return TRUE
#define NPPM_DMMVIEWOTHERTAB (NPPMSG + 35)
- //void WM_DMM_VIEWOTHERTAB(0, tTbData->pszName)
+ // BOOL WM_DMM_VIEWOTHERTAB(0, wchar_t* name)
+ // Show the plugin dialog (switch to plugin tab) with the given name.
+ // wParam: 0 (not used)
+ // lParam[in]: name should be the same value as previously used to register the dialog (pszName of tTbData)
+ // Return TRUE
#define NPPM_RELOADFILE (NPPMSG + 36)
- //BOOL NPPM_RELOADFILE(BOOL withAlert, TCHAR *filePathName2Reload)
+ // BOOL NPPM_RELOADFILE(BOOL withAlert, wchar_t *filePathName2Reload)
+ // Reload the document which matches with the given filePathName2Reload.
+ // wParam: 0 (not used)
+ // lParam[in]: filePathName2Reload is the full file path of document to reload
+ // Return TRUE if reloading file succeeds, otherwise FALSE
#define NPPM_SWITCHTOFILE (NPPMSG + 37)
- //BOOL NPPM_SWITCHTOFILE(0, TCHAR *filePathName2switch)
+ // BOOL NPPM_SWITCHTOFILE(0, wchar_t* filePathName2switch)
+ // Switch to the document which matches with the given filePathName2switch.
+ // wParam: 0 (not used)
+ // lParam[in]: filePathName2switch is the full file path of document to switch
+ // Return TRUE
#define NPPM_SAVECURRENTFILE (NPPMSG + 38)
- //BOOL NPPM_SAVECURRENTFILE(0, 0)
+ // BOOL NPPM_SAVECURRENTFILE(0, 0)
+ // Save current activated document.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // Return TRUE if file is saved, otherwise FALSE (the file doesn't need to be saved, or other reasons).
#define NPPM_SAVEALLFILES (NPPMSG + 39)
- //BOOL NPPM_SAVEALLFILES(0, 0)
+ // BOOL NPPM_SAVEALLFILES(0, 0)
+ // Save all opened document.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // Return FALSE when no file needs to be saved, else TRUE if there is at least one file saved.
#define NPPM_SETMENUITEMCHECK (NPPMSG + 40)
- //void WM_PIMENU_CHECK(UINT funcItem[X]._cmdID, TRUE/FALSE)
+ // BOOL NPPM_SETMENUITEMCHECK(UINT pluginCmdID, BOOL doCheck)
+ // Set or remove the check on a item of plugin menu and tool bar (if any).
+ // wParam[in]: pluginCmdID is the plugin command ID which corresponds to the menu item: funcItem[X]._cmdID
+ // lParam[in]: if doCheck value is TRUE, item will be checked, FALSE makes item unchecked.
+ // Return TRUE
#define NPPM_ADDTOOLBARICON_DEPRECATED (NPPMSG + 41)
- //void NPPM_ADDTOOLBARICON(UINT funcItem[X]._cmdID, toolbarIcons iconHandles) -- DEPRECATED : use NPPM_ADDTOOLBARICON_FORDARKMODE instead
- //2 formats of icon are needed: .ico & .bmp
- //Both handles below should be set so the icon will be displayed correctly if toolbar icon sets are changed by users
struct toolbarIcons {
HBITMAP hToolbarBmp;
HICON hToolbarIcon;
};
+ // BOOL NPPM_ADDTOOLBARICON_DEPRECATED(UINT pluginCmdID, toolbarIcons* iconHandles) -- DEPRECATED: use NPPM_ADDTOOLBARICON_FORDARKMODE instead
+ // Add an icon to the toolbar.
+ // wParam[in]: pluginCmdID is the plugin command ID which corresponds to the menu item: funcItem[X]._cmdID
+ // lParam[in]: iconHandles of toolbarIcons structure. 2 formats ".ico" & ".bmp" are needed
+ // Both handles should be set so the icon will be displayed correctly if toolbar icon sets are changed by users
+ // Return TRUE
+
#define NPPM_GETWINDOWSVERSION (NPPMSG + 42)
- //winVer NPPM_GETWINDOWSVERSION(0, 0)
+ // winVer NPPM_GETWINDOWSVERSION(0, 0)
+ // Get OS (Windows) version.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // Return enum winVer, which is defined at the beginning of this file
#define NPPM_DMMGETPLUGINHWNDBYNAME (NPPMSG + 43)
- //HWND WM_DMM_GETPLUGINHWNDBYNAME(const TCHAR *windowName, const TCHAR *moduleName)
- // if moduleName is NULL, then return value is NULL
- // if windowName is NULL, then the first found window handle which matches with the moduleName will be returned
+ // HWND NPPM_DMMGETPLUGINHWNDBYNAME(const wchar_t *windowName, const wchar_t *moduleName)
+ // Retrieve the dialog handle corresponds to the windowName and moduleName. You may need this message if you want to communicate with another plugin "dockable" dialog.
+ // wParam[in]: windowName - if windowName is NULL, then the first found window handle which matches with the moduleName will be returned
+ // lParam[in] : moduleName - if moduleName is NULL, then return value is NULL
+ // Return NULL if moduleName is NULL. If windowName is NULL, then the first found window handle which matches with the moduleName will be returned.
#define NPPM_MAKECURRENTBUFFERDIRTY (NPPMSG + 44)
- //BOOL NPPM_MAKECURRENTBUFFERDIRTY(0, 0)
-
- #define NPPM_GETENABLETHEMETEXTUREFUNC (NPPMSG + 45)
- //BOOL NPPM_GETENABLETHEMETEXTUREFUNC(0, 0)
+ // BOOL NPPM_MAKECURRENTBUFFERDIRTY(0, 0)
+ // Make the current document dirty, aka set the save state to unsaved.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // Return TRUE
+
+ #define NPPM_GETENABLETHEMETEXTUREFUNC_DEPRECATED (NPPMSG + 45)
+ // THEMEAPI NPPM_GETENABLETHEMETEXTUREFUNC(0, 0) -- DEPRECATED: plugin can use EnableThemeDialogTexture directly from uxtheme.h instead
+ // Get "EnableThemeDialogTexture" function address.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // Return a proc address or NULL
#define NPPM_GETPLUGINSCONFIGDIR (NPPMSG + 46)
- //INT NPPM_GETPLUGINSCONFIGDIR(int strLen, TCHAR *str)
+ // int NPPM_GETPLUGINSCONFIGDIR(int strLen, wchar_t *str)
// Get user's plugin config directory path. It's useful if plugins want to save/load parameters for the current user
- // Returns the number of TCHAR copied/to copy.
- // Users should call it with "str" be NULL to get the required number of TCHAR (not including the terminating nul character),
- // allocate "str" buffer with the return value + 1, then call it again to get the path.
+ // wParam[in]: strLen is length of allocated buffer in which directory path is copied
+ // lParam[out] : str is the allocated buffere. User should call this message twice -
+ // The 1st call with "str" be NULL to get the required number of wchar_t (not including the terminating nul character)
+ // The 2nd call to allocate "str" buffer with the 1st call's return value + 1, then call it again to get the path
+ // Return value: The 1st call - the number of wchar_t to copy.
+ // The 2nd call - FALSE on failure, TRUE on success
#define NPPM_MSGTOPLUGIN (NPPMSG + 47)
- //BOOL NPPM_MSGTOPLUGIN(TCHAR *destModuleName, CommunicationInfo *info)
- // return value is TRUE when the message arrive to the destination plugins.
- // if destModule or info is NULL, then return value is FALSE
struct CommunicationInfo {
- long internalMsg;
- const TCHAR * srcModuleName;
- void * info; // defined by plugin
+ long internalMsg; // an integer defined by plugin Y, known by plugin X, identifying the message being sent.
+ const wchar_t * srcModuleName; // the complete module name (with the extension .dll) of caller (plugin X).
+ void* info; // defined by plugin, the information to be exchanged between X and Y. It's a void pointer so it should be defined by plugin Y and known by plugin X.
};
+ // BOOL NPPM_MSGTOPLUGIN(wchar_t *destModuleName, CommunicationInfo *info)
+ // Send a private information to a plugin with given plugin name. This message allows the communication between 2 plugins.
+ // For example, plugin X can execute a command of plugin Y if plugin X knows the command ID and the file name of plugin Y.
+ // wParam[in]: destModuleName is the destination complete module file name (with the file extension ".dll")
+ // lParam[in]: info - See above "CommunicationInfo" structure
+ // The returned value is TRUE if Notepad++ found the plugin by its module name (destModuleName), and pass the info (communicationInfo) to the module.
+ // The returned value is FALSE if no plugin with such name is found.
#define NPPM_MENUCOMMAND (NPPMSG + 48)
- //void NPPM_MENUCOMMAND(0, int cmdID)
- // uncomment //#include "menuCmdID.h"
- // in the beginning of this file then use the command symbols defined in "menuCmdID.h" file
- // to access all the Notepad++ menu command items
+ // BOOL NPPM_MENUCOMMAND(0, int cmdID)
+ // Run Notepad++ command with the given command ID.
+ // wParam: 0 (not used)
+ // lParam[in]: cmdID - See "menuCmdID.h" for all the Notepad++ menu command items
+ // Return TRUE
#define NPPM_TRIGGERTABBARCONTEXTMENU (NPPMSG + 49)
- //void NPPM_TRIGGERTABBARCONTEXTMENU(int view, int index2Activate)
+ // BOOL NPPM_TRIGGERTABBARCONTEXTMENU(int inView, int index2Activate)
+ // Switch to the document by the given view and index and trigger the context menu
+ // wParam[in]: inView - main view (0) or sub-view (1)
+ // lParam[in]: index2Activate - index (in the view indicated above) where is the document to have the context menu
+ // Return TRUE
#define NPPM_GETNPPVERSION (NPPMSG + 50)
- // int NPPM_GETNPPVERSION(0, 0)
- // return version
- // ex : v4.6
- // HIWORD(version) == 4
- // LOWORD(version) == 6
+ // int NPPM_GETNPPVERSION(BOOL ADD_ZERO_PADDING, 0)
+ // Get Notepad++ version.
+ // wParam[in]: ADD_ZERO_PADDING (see below)
+ // lParam: 0 (not used)
+ // return value:
+ // HIWORD(returned_value) is major part of version: the 1st number
+ // LOWORD(returned_value) is minor part of version: the 3 last numbers
+ //
+ // ADD_ZERO_PADDING == TRUE
+ //
+ // version | HIWORD | LOWORD
+ //------------------------------
+ // 8.9.6.4 | 8 | 964
+ // 9 | 9 | 0
+ // 6.9 | 6 | 900
+ // 6.6.6 | 6 | 660
+ // 13.6.6.6 | 13 | 666
+ //
+ //
+ // ADD_ZERO_PADDING == FALSE
+ //
+ // version | HIWORD | LOWORD
+ //------------------------------
+ // 8.9.6.4 | 8 | 964
+ // 9 | 9 | 0
+ // 6.9 | 6 | 9
+ // 6.6.6 | 6 | 66
+ // 13.6.6.6 | 13 | 666
#define NPPM_HIDETABBAR (NPPMSG + 51)
// BOOL NPPM_HIDETABBAR(0, BOOL hideOrNot)
- // if hideOrNot is set as TRUE then tab bar will be hidden
- // otherwise it'll be shown.
- // return value : the old status value
+ // Hide (or show) tab bar.
+ // wParam: 0 (not used)
+ // lParam[in]: if hideOrNot is set as TRUE then tab bar will be hidden, otherwise it'll be shown.
+ // return value: the old status value
#define NPPM_ISTABBARHIDDEN (NPPMSG + 52)
// BOOL NPPM_ISTABBARHIDDEN(0, 0)
- // returned value : TRUE if tab bar is hidden, otherwise FALSE
+ // Get tab bar status.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // return value: TRUE if tool bar is hidden, otherwise FALSE
#define NPPM_GETPOSFROMBUFFERID (NPPMSG + 57)
- // INT NPPM_GETPOSFROMBUFFERID(UINT_PTR bufferID, INT priorityView)
- // Return VIEW|INDEX from a buffer ID. -1 if the bufferID non existing
- // if priorityView set to SUB_VIEW, then SUB_VIEW will be search firstly
+ // int NPPM_GETPOSFROMBUFFERID(UINT_PTR bufferID, int priorityView)
+ // Get document position (VIEW and INDEX) from a buffer ID, according priorityView.
+ // wParam[in]: BufferID of document
+ // lParam[in]: priorityView is the target VIEW. However, if the given bufferID cannot be found in the target VIEW, the other VIEW will be searched.
+ // Return -1 if the bufferID non existing, else return value contains VIEW & INDEX:
//
// VIEW takes 2 highest bits and INDEX (0 based) takes the rest (30 bits)
- // Here's the values for the view :
+ // Here's the values for the view:
// MAIN_VIEW 0
// SUB_VIEW 1
+ //
+ // if priorityView set to SUB_VIEW, then SUB_VIEW will be search firstly
#define NPPM_GETFULLPATHFROMBUFFERID (NPPMSG + 58)
- // INT NPPM_GETFULLPATHFROMBUFFERID(UINT_PTR bufferID, TCHAR *fullFilePath)
- // Get full path file name from a bufferID.
- // Return -1 if the bufferID non existing, otherwise the number of TCHAR copied/to copy
- // User should call it with fullFilePath be NULL to get the number of TCHAR (not including the nul character),
- // allocate fullFilePath with the return values + 1, then call it again to get full path file name
+ // int NPPM_GETFULLPATHFROMBUFFERID(UINT_PTR bufferID, wchar_t* fullFilePath)
+ // Get full path file name from a bufferID (the pointer of buffer).
+ // wParam[in]: bufferID
+ // lParam[out]: fullFilePath - User should call it with fullFilePath be NULL to get the number of wchar_t (not including the nul character),
+ // allocate fullFilePath with the return values + 1, then call it again to get full path file name
+ // Return -1 if the bufferID non existing, otherwise the number of wchar_t copied/to copy
#define NPPM_GETBUFFERIDFROMPOS (NPPMSG + 59)
- // LRESULT NPPM_GETBUFFERIDFROMPOS(INT index, INT iView)
- // wParam: Position of document
- // lParam: View to use, 0 = Main, 1 = Secondary
- // Returns 0 if invalid
+ // UINT_PTR NPPM_GETBUFFERIDFROMPOS(int index, int iView)
+ // Get the document bufferID from the given position (iView & index).
+ // wParam[in]: Position (0 based) of document
+ // lParam[in]: Main or sub View in which document is, 0 = Main, 1 = Sub
+ // Returns NULL if invalid, otherwise bufferID
#define NPPM_GETCURRENTBUFFERID (NPPMSG + 60)
- // LRESULT NPPM_GETCURRENTBUFFERID(0, 0)
- // Returns active Buffer
+ // UINT_PTR NPPM_GETCURRENTBUFFERID(0, 0)
+ // Get active document BufferID.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // Return active document BufferID
#define NPPM_RELOADBUFFERID (NPPMSG + 61)
- // VOID NPPM_RELOADBUFFERID(UINT_PTR bufferID, BOOL alert)
- // Reloads Buffer
- // wParam: Buffer to reload
- // lParam: 0 if no alert, else alert
+ // BOOL NPPM_RELOADBUFFERID(UINT_PTR bufferID, BOOL alert)
+ // Reloads document with the given BufferID
+ // wParam[in]: BufferID of document to reload
+ // lParam[in]: set TRUE to let user confirm or reject the reload; setting FALSE will reload with no alert.
+ // Returns TRUE on success, FALSE otherwise
#define NPPM_GETBUFFERLANGTYPE (NPPMSG + 64)
- // INT NPPM_GETBUFFERLANGTYPE(UINT_PTR bufferID, 0)
- // wParam: BufferID to get LangType from
- // lParam: 0
+ // int NPPM_GETBUFFERLANGTYPE(UINT_PTR bufferID, 0)
+ // Retrieves the language type of the document with the given bufferID.
+ // wParam[in]: BufferID of document to get LangType from
+ // lParam: 0 (not used)
// Returns as int, see LangType. -1 on error
#define NPPM_SETBUFFERLANGTYPE (NPPMSG + 65)
- // BOOL NPPM_SETBUFFERLANGTYPE(UINT_PTR bufferID, INT langType)
- // wParam: BufferID to set LangType of
- // lParam: LangType
+ // BOOL NPPM_SETBUFFERLANGTYPE(UINT_PTR bufferID, int langType)
+ // Set the language type of the document based on the given bufferID.
+ // wParam[in]: BufferID to set LangType of
+ // lParam[in]: langType as int, enum LangType for valid values (L_USER and L_EXTERNAL are not supported)
// Returns TRUE on success, FALSE otherwise
- // use int, see LangType for possible values
- // L_USER and L_EXTERNAL are not supported
#define NPPM_GETBUFFERENCODING (NPPMSG + 66)
- // INT NPPM_GETBUFFERENCODING(UINT_PTR bufferID, 0)
- // wParam: BufferID to get encoding from
- // lParam: 0
- // returns as int, see UniMode. -1 on error
+ // int NPPM_GETBUFFERENCODING(UINT_PTR bufferID, 0)
+ // Get encoding from the document with the given bufferID
+ // wParam[in]: BufferID to get encoding from
+ // lParam: 0 (not used)
+ // returns -1 on error, otherwise UniMode, with the following value:
+ // 0: ANSI
+ // 1: UTF-8 with BOM
+ // 2: UTF-16 Big Ending with BOM
+ // 3: UTF-16 Little Ending with BOM
+ // 4: UTF-8 without BOM
+ // 5: uni7Bit
+ // 6: UTF-16 Big Ending without BOM
+ // 7: UTF-16 Little Ending without BOM
#define NPPM_SETBUFFERENCODING (NPPMSG + 67)
- // BOOL NPPM_SETBUFFERENCODING(UINT_PTR bufferID, INT encoding)
+ // BOOL NPPM_SETBUFFERENCODING(UINT_PTR bufferID, int encoding)
+ // Set encoding to the document with the given bufferID
// wParam: BufferID to set encoding of
- // lParam: encoding
+ // lParam: encoding, see UniMode value in NPPM_GETBUFFERENCODING (above)
// Returns TRUE on success, FALSE otherwise
- // use int, see UniMode
// Can only be done on new, unedited files
#define NPPM_GETBUFFERFORMAT (NPPMSG + 68)
- // INT NPPM_GETBUFFERFORMAT(UINT_PTR bufferID, 0)
- // wParam: BufferID to get EolType format from
- // lParam: 0
- // returns as int, see EolType format. -1 on error
+ // int NPPM_GETBUFFERFORMAT(UINT_PTR bufferID, 0)
+ // Get the EOL format of the document with given bufferID.
+ // wParam[in]: BufferID to get EolType format from
+ // lParam: 0 (not used)
+ // Returned value is -1 on error, otherwise EolType format:
+ // 0: Windows (CRLF)
+ // 1: Macos (CR)
+ // 2: Unix (LF)
+ // 3. Unknown
#define NPPM_SETBUFFERFORMAT (NPPMSG + 69)
- // BOOL NPPM_SETBUFFERFORMAT(UINT_PTR bufferID, INT format)
- // wParam: BufferID to set EolType format of
- // lParam: format
+ // BOOL NPPM_SETBUFFERFORMAT(UINT_PTR bufferID, int format)
+ // Set the EOL format to the document with given bufferID.
+ // wParam[in]: BufferID to set EolType format of
+ // lParam[in]: EolType format. For EolType format value, see NPPM_GETBUFFERFORMAT (above)
// Returns TRUE on success, FALSE otherwise
- // use int, see EolType format
-
#define NPPM_HIDETOOLBAR (NPPMSG + 70)
// BOOL NPPM_HIDETOOLBAR(0, BOOL hideOrNot)
- // if hideOrNot is set as TRUE then tool bar will be hidden
- // otherwise it'll be shown.
- // return value : the old status value
+ // Hide (or show) the toolbar.
+ // wParam: 0 (not used)
+ // lParam[in]: if hideOrNot is set as TRUE then tool bar will be hidden, otherwise it'll be shown.
+ // return value: the old status value
#define NPPM_ISTOOLBARHIDDEN (NPPMSG + 71)
// BOOL NPPM_ISTOOLBARHIDDEN(0, 0)
- // returned value : TRUE if tool bar is hidden, otherwise FALSE
+ // Get toolbar status.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // return value: TRUE if tool bar is hidden, otherwise FALSE
#define NPPM_HIDEMENU (NPPMSG + 72)
// BOOL NPPM_HIDEMENU(0, BOOL hideOrNot)
- // if hideOrNot is set as TRUE then menu will be hidden
- // otherwise it'll be shown.
- // return value : the old status value
+ // Hide (or show) menu bar.
+ // wParam: 0 (not used)
+ // lParam[in]: if hideOrNot is set as TRUE then menu will be hidden, otherwise it'll be shown.
+ // return value: the old status value
#define NPPM_ISMENUHIDDEN (NPPMSG + 73)
// BOOL NPPM_ISMENUHIDDEN(0, 0)
- // returned value : TRUE if menu is hidden, otherwise FALSE
+ // Get menu bar status.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // return value: TRUE if menu bar is hidden, otherwise FALSE
#define NPPM_HIDESTATUSBAR (NPPMSG + 74)
// BOOL NPPM_HIDESTATUSBAR(0, BOOL hideOrNot)
- // if hideOrNot is set as TRUE then STATUSBAR will be hidden
- // otherwise it'll be shown.
- // return value : the old status value
+ // Hide (or show) status bar.
+ // wParam: 0 (not used)
+ // lParam[in]: if hideOrNot is set as TRUE then status bar will be hidden, otherwise it'll be shown.
+ // return value: the old status value
#define NPPM_ISSTATUSBARHIDDEN (NPPMSG + 75)
// BOOL NPPM_ISSTATUSBARHIDDEN(0, 0)
- // returned value : TRUE if STATUSBAR is hidden, otherwise FALSE
+ // Get status bar status.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // return value: TRUE if status bar is hidden, otherwise FALSE
#define NPPM_GETSHORTCUTBYCMDID (NPPMSG + 76)
- // BOOL NPPM_GETSHORTCUTBYCMDID(int cmdID, ShortcutKey *sk)
- // get your plugin command current mapped shortcut into sk via cmdID
- // You may need it after getting NPPN_READY notification
- // returned value : TRUE if this function call is successful and shortcut is enable, otherwise FALSE
+ // BOOL NPPM_GETSHORTCUTBYCMDID(int cmdID, ShortcutKey* sk)
+ // Get your plugin command current mapped shortcut into sk via cmdID.
+ // wParam[in]: cmdID is your plugin command ID
+ // lParam[out]: sk is a pointer of ShortcutKey strcture which will receive the requested CMD shortcut. It should be allocated in the plugin before being used.
+ // For ShortcutKey strcture, see in "PluginInterface.h". You may need it after getting NPPN_READY notification.
+ // return value: TRUE if this function call is successful and shortcut is enable, otherwise FALSE
#define NPPM_DOOPEN (NPPMSG + 77)
- // BOOL NPPM_DOOPEN(0, const TCHAR *fullPathName2Open)
- // fullPathName2Open indicates the full file path name to be opened.
- // The return value is TRUE (1) if the operation is successful, otherwise FALSE (0).
+ // BOOL NPPM_DOOPEN(0, const wchar_t* fullPathName2Open)
+ // Open a file with given fullPathName2Open.
+ // If fullPathName2Open has been already opened in Notepad++, the it will be activated and becomes the current document.
+ // wParam: 0 (not used)
+ // lParam[in]: fullPathName2Open indicates the full file path name to be opened
+ // The return value is TRUE if the operation is successful, otherwise FALSE
#define NPPM_SAVECURRENTFILEAS (NPPMSG + 78)
- // BOOL NPPM_SAVECURRENTFILEAS (BOOL asCopy, const TCHAR* filename)
+ // BOOL NPPM_SAVECURRENTFILEAS (BOOL saveAsCopy, const wchar_t* filename)
+ // Save the current activated document.
+ // wParam[in]: saveAsCopy must be either FALSE to save, or TRUE to save a copy of the current filename ("Save a Copy As..." action)
+ // lParam[in]: filename indicates the full file path name to be saved
+ // The return value is TRUE if the operation is successful, otherwise FALSE
#define NPPM_GETCURRENTNATIVELANGENCODING (NPPMSG + 79)
- // INT NPPM_GETCURRENTNATIVELANGENCODING(0, 0)
- // returned value : the current native language encoding
+ // int NPPM_GETCURRENTNATIVELANGENCODING(0, 0)
+ // Get the code page associated with the current localisation of Notepad++.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // return value: the current native language encoding
+
+ #define NPPM_ALLOCATESUPPORTED_DEPRECATED (NPPMSG + 80)
+ // DEPRECATED: the message has been made (since 2010 AD) for checking if NPPM_ALLOCATECMDID is supported. This message is no more needed.
+ // BOOL NPPM_ALLOCATESUPPORTED_DEPRECATED(0, 0)
+ // Get NPPM_ALLOCATECMDID supported status. Use to identify if subclassing is necessary
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // returns TRUE if NPPM_ALLOCATECMDID is supported
- #define NPPM_ALLOCATESUPPORTED (NPPMSG + 80)
- // returns TRUE if NPPM_ALLOCATECMDID is supported
- // Use to identify if subclassing is necessary
#define NPPM_ALLOCATECMDID (NPPMSG + 81)
- // BOOL NPPM_ALLOCATECMDID(int numberRequested, int* startNumber)
- // sets startNumber to the initial command ID if successful
- // Returns: TRUE if successful, FALSE otherwise. startNumber will also be set to 0 if unsuccessful
+ // BOOL NPPM_ALLOCATECMDID(int numberRequested, int* startNumber)
+ // Obtain a number of consecutive menu item IDs for creating menus dynamically, with the guarantee of these IDs not clashing with any other plugins.
+ // wParam[in]: numberRequested is the number of ID you request for the reservation
+ // lParam[out]: startNumber will be set to the initial command ID if successful
+ // Returns: TRUE if successful, FALSE otherwise. startNumber will also be set to 0 if unsuccessful
+ //
+ // Example: If a plugin needs 4 menu item ID, the following code can be used:
+ //
+ // int idBegin;
+ // BOOL isAllocatedSuccessful = ::SendMessage(nppData._nppHandle, NPPM_ALLOCATECMDID, 4, &idBegin);
+ //
+ // if isAllocatedSuccessful is TRUE, and value of idBegin is 46581
+ // then menu item ID 46581, 46582, 46583 and 46584 are preserved by Notepad++, and they are safe to be used by the plugin.
#define NPPM_ALLOCATEMARKER (NPPMSG + 82)
// BOOL NPPM_ALLOCATEMARKER(int numberRequested, int* startNumber)
- // sets startNumber to the initial command ID if successful
- // Allocates a marker number to a plugin
- // Returns: TRUE if successful, FALSE otherwise. startNumber will also be set to 0 if unsuccessful
+ // Allocate a number of consecutive marker IDs to a plugin: if a plugin need to add a marker on Notepad++'s Scintilla marker margin,
+ // it has to use this message to get marker number, in order to prevent from the conflict with the other plugins.
+ // wParam[in]: numberRequested is the number of ID you request for the reservation
+ // lParam[out]: startNumber will be set to the initial command ID if successful
+ // Return TRUE if successful, FALSE otherwise. startNumber will also be set to 0 if unsuccessful
+ //
+ // Example: If a plugin needs 3 marker ID, the following code can be used:
+ //
+ // int idBegin;
+ // BOOL isAllocatedSuccessful = ::SendMessage(nppData._nppHandle, NPPM_ALLOCATEMARKER, 3, &idBegin);
+ //
+ // if isAllocatedSuccessful is TRUE, and value of idBegin is 16
+ // then marker ID 16, 17 and 18 are preserved by Notepad++, and they are safe to be used by the plugin.
#define NPPM_GETLANGUAGENAME (NPPMSG + 83)
- // INT NPPM_GETLANGUAGENAME(int langType, TCHAR *langName)
- // Get programming language name from the given language type (LangType)
+ // int NPPM_GETLANGUAGENAME(LangType langType, wchar_t* langName)
+ // Get programming language name from the given language type (enum LangType).
+ // wParam[in]: langType is the number of LangType
+ // lParam[out]: langName is the buffer to receive the language name string
// Return value is the number of copied character / number of character to copy (\0 is not included)
+ //
// You should call this function 2 times - the first time you pass langName as NULL to get the number of characters to copy.
// You allocate a buffer of the length of (the number of characters + 1) then call NPPM_GETLANGUAGENAME function the 2nd time
// by passing allocated buffer as argument langName
#define NPPM_GETLANGUAGEDESC (NPPMSG + 84)
- // INT NPPM_GETLANGUAGEDESC(int langType, TCHAR *langDesc)
- // Get programming language short description from the given language type (LangType)
+ // INT NPPM_GETLANGUAGEDESC(int langType, wchar_t *langDesc)
+ // Get programming language short description from the given language type (enum LangType)
+ // wParam[in]: langType is the number of LangType
+ // lParam[out]: langDesc is the buffer to receive the language description string
// Return value is the number of copied character / number of character to copy (\0 is not included)
+ //
// You should call this function 2 times - the first time you pass langDesc as NULL to get the number of characters to copy.
// You allocate a buffer of the length of (the number of characters + 1) then call NPPM_GETLANGUAGEDESC function the 2nd time
// by passing allocated buffer as argument langDesc
- #define NPPM_SHOWDOCSWITCHER (NPPMSG + 85)
- // VOID NPPM_SHOWDOCSWITCHER(0, BOOL toShowOrNot)
- // Send this message to show or hide doc switcher.
- // if toShowOrNot is TRUE then show doc switcher, otherwise hide it.
+ #define NPPM_SHOWDOCLIST (NPPMSG + 85)
+ // BOOL NPPM_SHOWDOCLIST(0, BOOL toShowOrNot)
+ // Show or hide the Document List panel.
+ // wParam: 0 (not used)
+ // lParam[in]: toShowOrNot - if toShowOrNot is TRUE, the Document List panel is shown otherwise it is hidden.
+ // Return TRUE
- #define NPPM_ISDOCSWITCHERSHOWN (NPPMSG + 86)
- // BOOL NPPM_ISDOCSWITCHERSHOWN(0, 0)
- // Check to see if doc switcher is shown.
+ #define NPPM_ISDOCLISTSHOWN (NPPMSG + 86)
+ // BOOL NPPM_ISDOCLISTSHOWN(0, 0)
+ // Checks the visibility of the Document List panel.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // return value: TRUE if the Document List panel is currently shown, FALSE otherwise
#define NPPM_GETAPPDATAPLUGINSALLOWED (NPPMSG + 87)
// BOOL NPPM_GETAPPDATAPLUGINSALLOWED(0, 0)
// Check to see if loading plugins from "%APPDATA%\..\Local\Notepad++\plugins" is allowed.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // return value: TRUE if loading plugins from %APPDATA% is allowed, FALSE otherwise
#define NPPM_GETCURRENTVIEW (NPPMSG + 88)
- // INT NPPM_GETCURRENTVIEW(0, 0)
+ // int NPPM_GETCURRENTVIEW(0, 0)
+ // Get the current used view.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
// Return: current edit view of Notepad++. Only 2 possible values: 0 = Main, 1 = Secondary
- #define NPPM_DOCSWITCHERDISABLECOLUMN (NPPMSG + 89)
- // VOID NPPM_DOCSWITCHERDISABLECOLUMN(0, BOOL disableOrNot)
- // Disable or enable extension column of doc switcher
+ #define NPPM_DOCLISTDISABLEEXTCOLUMN (NPPMSG + 89)
+ // BOOL NPPM_DOCLISTDISABLEEXTCOLUMN(0, BOOL disableOrNot)
+ // Disable or enable extension column of Document List
+ // wParam: 0 (not used)
+ // lParam[in]: disableOrNot - if disableOrNot is TRUE, extension column is hidden otherwise it is visible.
+ // Return TRUE
+
+ #define NPPM_DOCLISTDISABLEPATHCOLUMN (NPPMSG + 102)
+ // BOOL NPPM_DOCLISTDISABLEPATHCOLUMN(0, BOOL disableOrNot)
+ // Disable or enable path column of Document List
+ // wParam: 0 (not used)
+ // lParam[in]: disableOrNot - if disableOrNot is TRUE, extension column is hidden otherwise it is visible.
+ // Return TRUE
#define NPPM_GETEDITORDEFAULTFOREGROUNDCOLOR (NPPMSG + 90)
- // INT NPPM_GETEDITORDEFAULTFOREGROUNDCOLOR(0, 0)
- // Return: current editor default foreground color. You should convert the returned value in COLORREF
+ // int NPPM_GETEDITORDEFAULTFOREGROUNDCOLOR(0, 0)
+ // Get the current editor default foreground color.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // Return: the color as integer with hex format being 0x00bbggrr
#define NPPM_GETEDITORDEFAULTBACKGROUNDCOLOR (NPPMSG + 91)
- // INT NPPM_GETEDITORDEFAULTBACKGROUNDCOLOR(0, 0)
- // Return: current editor default background color. You should convert the returned value in COLORREF
+ // int NPPM_GETEDITORDEFAULTBACKGROUNDCOLOR(0, 0)
+ // Get the current editor default background color.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // Return: the color as integer with hex format being 0x00bbggrr
#define NPPM_SETSMOOTHFONT (NPPMSG + 92)
- // VOID NPPM_SETSMOOTHFONT(0, BOOL setSmoothFontOrNot)
+ // BOOL NPPM_SETSMOOTHFONT(0, BOOL setSmoothFontOrNot)
+ // Set (or remove) smooth font. The API uses underlying Scintilla command SCI_SETFONTQUALITY to manage the font quality.
+ // wParam: 0 (not used)
+ // lParam[in]: setSmoothFontOrNot - if value is TRUE, this message sets SC_EFF_QUALITY_LCD_OPTIMIZED else SC_EFF_QUALITY_DEFAULT
+ // Return TRUE
#define NPPM_SETEDITORBORDEREDGE (NPPMSG + 93)
- // VOID NPPM_SETEDITORBORDEREDGE(0, BOOL withEditorBorderEdgeOrNot)
+ // BOOL NPPM_SETEDITORBORDEREDGE(0, BOOL withEditorBorderEdgeOrNot)
+ // Add (or remove) an additional sunken edge style to the Scintilla window else it removes the extended style from the window.
+ // wParam: 0 (not used)
+ // lParam[in]: withEditorBorderEdgeOrNot - TRUE for adding border edge on Scintilla window, FALSE for removing it
+ // Return TRUE
#define NPPM_SAVEFILE (NPPMSG + 94)
- // VOID NPPM_SAVEFILE(0, const TCHAR *fileNameToSave)
+ // BOOL NPPM_SAVEFILE(0, const wchar_t *fileNameToSave)
+ // Save the file (opened in Notepad++) with the given full file name path.
+ // wParam: 0 (not used)
+ // lParam[in]: fileNameToSave must be the full file path for the file to be saved.
+ // Return TRUE on success, FALSE on fileNameToSave is not found
#define NPPM_DISABLEAUTOUPDATE (NPPMSG + 95) // 2119 in decimal
- // VOID NPPM_DISABLEAUTOUPDATE(0, 0)
+ // BOOL NPPM_DISABLEAUTOUPDATE(0, 0)
+ // Disable Notepad++ auto-update.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // Return TRUE
#define NPPM_REMOVESHORTCUTBYCMDID (NPPMSG + 96) // 2120 in decimal
- // BOOL NPPM_REMOVESHORTCUTASSIGNMENT(int cmdID)
- // removes the assigned shortcut mapped to cmdID
- // returned value : TRUE if function call is successful, otherwise FALSE
+ // BOOL NPPM_REMOVESHORTCUTBYCMDID(int pluginCmdID, 0)
+ // Remove the assigned shortcut mapped to pluginCmdID
+ // wParam[in]: pluginCmdID
+ // lParam: 0 (not used)
+ // return value: TRUE if function call is successful, otherwise FALSE
#define NPPM_GETPLUGINHOMEPATH (NPPMSG + 97)
- // INT NPPM_GETPLUGINHOMEPATH(size_t strLen, TCHAR *pluginRootPath)
- // Get plugin home root path. It's useful if plugins want to get its own path
- // by appending which is the name of plugin without extension part.
- // Returns the number of TCHAR copied/to copy.
- // Users should call it with pluginRootPath be NULL to get the required number of TCHAR (not including the terminating nul character),
- // allocate pluginRootPath buffer with the return value + 1, then call it again to get the path.
+ // int NPPM_GETPLUGINHOMEPATH(size_t strLen, wchar_t* pluginRootPath)
+ // Get plugin home root path. It's useful if plugins want to get its own path by appending which is the name of plugin without extension part.
+ // wParam[in]: strLen - size of allocated buffer "pluginRootPath"
+ // lParam[out]: pluginRootPath - Users should call it with pluginRootPath be NULL to get the required number of wchar_t (not including the terminating nul character),
+ // allocate pluginRootPath buffer with the return value + 1, then call it again to get the path.
+ // Return the number of wchar_t copied/to copy, 0 on copy failed
#define NPPM_GETSETTINGSONCLOUDPATH (NPPMSG + 98)
- // INT NPPM_GETSETTINGSCLOUDPATH(size_t strLen, TCHAR *settingsOnCloudPath)
+ // int NPPM_GETSETTINGSCLOUDPATH(size_t strLen, wchar_t *settingsOnCloudPath)
// Get settings on cloud path. It's useful if plugins want to store its settings on Cloud, if this path is set.
- // Returns the number of TCHAR copied/to copy. If the return value is 0, then this path is not set, or the "strLen" is not enough to copy the path.
- // Users should call it with settingsCloudPath be NULL to get the required number of TCHAR (not including the terminating nul character),
- // allocate settingsCloudPath buffer with the return value + 1, then call it again to get the path.
+ // wParam[in]: strLen - size of allocated buffer "settingsOnCloudPath"
+ // lParam[out]: settingsOnCloudPath - Users should call it with settingsOnCloudPath be NULL to get the required number of wchar_t (not including the terminating nul character),
+ // allocate settingsOnCloudPath buffer with the return value + 1, then call it again to get the path.
+ // Returns the number of wchar_t copied/to copy. If the return value is 0, then this path is not set, or the "strLen" is not enough to copy the path.
#define NPPM_SETLINENUMBERWIDTHMODE (NPPMSG + 99)
#define LINENUMWIDTH_DYNAMIC 0
#define LINENUMWIDTH_CONSTANT 1
- // BOOL NPPM_SETLINENUMBERWIDTHMODE(0, INT widthMode)
+ // BOOL NPPM_SETLINENUMBERWIDTHMODE(0, int widthMode)
// Set line number margin width in dynamic width mode (LINENUMWIDTH_DYNAMIC) or constant width mode (LINENUMWIDTH_CONSTANT)
// It may help some plugins to disable non-dynamic line number margins width to have a smoothly visual effect while vertical scrolling the content in Notepad++
- // If calling is successful return TRUE, otherwise return FALSE.
+ // wParam: 0 (not used)
+ // lParam[in]: widthMode should be LINENUMWIDTH_DYNAMIC or LINENUMWIDTH_CONSTANT
+ // return TRUE if calling is successful, otherwise return FALSE
#define NPPM_GETLINENUMBERWIDTHMODE (NPPMSG + 100)
- // INT NPPM_GETLINENUMBERWIDTHMODE(0, 0)
+ // int NPPM_GETLINENUMBERWIDTHMODE(0, 0)
// Get line number margin width in dynamic width mode (LINENUMWIDTH_DYNAMIC) or constant width mode (LINENUMWIDTH_CONSTANT)
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // Return current line number margin width mode (LINENUMWIDTH_DYNAMIC or LINENUMWIDTH_CONSTANT)
#define NPPM_ADDTOOLBARICON_FORDARKMODE (NPPMSG + 101)
- // VOID NPPM_ADDTOOLBARICON_FORDARKMODE(UINT funcItem[X]._cmdID, toolbarIconsWithDarkMode iconHandles)
- // Use NPPM_ADDTOOLBARICON_FORDARKMODE instead obsolete NPPM_ADDTOOLBARICON which doesn't support the dark mode
- // 2 formats / 3 icons are needed: 1 * BMP + 2 * ICO
- // All 3 handles below should be set so the icon will be displayed correctly if toolbar icon sets are changed by users, also in dark mode
struct toolbarIconsWithDarkMode {
HBITMAP hToolbarBmp;
HICON hToolbarIcon;
HICON hToolbarIconDarkMode;
};
+ // BOOL NPPM_ADDTOOLBARICON_FORDARKMODE(UINT pluginCmdID, toolbarIconsWithDarkMode* iconHandles)
+ // Use NPPM_ADDTOOLBARICON_FORDARKMODE instead obsolete NPPM_ADDTOOLBARICON (DEPRECATED) which doesn't support the dark mode
+ // wParam[in]: pluginCmdID
+ // lParam[in]: iconHandles is the pointer of toolbarIconsWithDarkMode structure
+ // All 3 handles below should be set so the icon will be displayed correctly if toolbar icon sets are changed by users, also in dark mode
+ // Return TRUE
+
+ #define NPPM_GETEXTERNALLEXERAUTOINDENTMODE (NPPMSG + 103)
+ // BOOL NPPM_GETEXTERNALLEXERAUTOINDENTMODE(const wchar_t* languageName, ExternalLexerAutoIndentMode* autoIndentMode)
+ // Get ExternalLexerAutoIndentMode for an installed external programming language.
+ // wParam[in]: languageName is external language name to search
+ // lParam[out]: autoIndentMode could receive one of three following values
+ // - Standard (0) means Notepad++ will keep the same TAB indentation between lines;
+ // - C_Like (1) means Notepad++ will perform a C-Language style indentation for the selected external language;
+ // - Custom (2) means a Plugin will be controlling auto-indentation for the current language.
+ // returned values: TRUE for successful searches, otherwise FALSE.
+
+ #define NPPM_SETEXTERNALLEXERAUTOINDENTMODE (NPPMSG + 104)
+ // BOOL NPPM_SETEXTERNALLEXERAUTOINDENTMODE(const wchar_t* languageName, ExternalLexerAutoIndentMode autoIndentMode)
+ // Set ExternalLexerAutoIndentMode for an installed external programming language.
+ // wParam[in]: languageName is external language name to set
+ // lParam[in]: autoIndentMode could receive one of three following values
+ // - Standard (0) means Notepad++ will keep the same TAB indentation between lines;
+ // - C_Like (1) means Notepad++ will perform a C-Language style indentation for the selected external language;
+ // - Custom (2) means a Plugin will be controlling auto-indentation for the current language.
+ // return value: TRUE if function call was successful, otherwise FALSE.
+
+ #define NPPM_ISAUTOINDENTON (NPPMSG + 105)
+ // BOOL NPPM_ISAUTOINDENTON(0, 0)
+ // Get the current use Auto-Indentation setting in Notepad++ Preferences.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // Return TRUE if Auto-Indentation is on, FALSE otherwise
+
+ #define NPPM_GETCURRENTMACROSTATUS (NPPMSG + 106)
+ // MacroStatus NPPM_GETCURRENTMACROSTATUS(0, 0)
+ // Get current enum class MacroStatus { Idle, RecordInProgress, RecordingStopped, PlayingBack }
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // Return MacroStatus as int:
+ // 0: Idle - macro is not in use and it's empty
+ // 1: RecordInProgress - macro is currently being recorded
+ // 2: RecordingStopped - macro recording has been stopped
+ // 3: PlayingBack - macro is currently being played back
+
+ #define NPPM_ISDARKMODEENABLED (NPPMSG + 107)
+ // BOOL NPPM_ISDARKMODEENABLED(0, 0)
+ // Get Notepad++ Dark Mode status (ON or OFF).
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // Return TRUE if Dark Mode is enable, otherwise FALSE
+
+ #define NPPM_GETDARKMODECOLORS (NPPMSG + 108)
+ // BOOL NPPM_GETDARKMODECOLORS (size_t cbSize, NppDarkMode::Colors* returnColors)
+ // Get the colors used in Dark Mode.
+ // wParam[in]: cbSize must be filled with sizeof(NppDarkMode::Colors).
+ // lParam[out]: returnColors must be a pre-allocated NppDarkMode::Colors struct.
+ // Return TRUE when successful, FALSE otherwise.
+ // You need to uncomment the following code to use NppDarkMode::Colors structure:
+ //
+ // namespace NppDarkMode
+ // {
+ // struct Colors
+ // {
+ // COLORREF background = 0;
+ // COLORREF softerBackground = 0;
+ // COLORREF hotBackground = 0;
+ // COLORREF pureBackground = 0;
+ // COLORREF errorBackground = 0;
+ // COLORREF text = 0;
+ // COLORREF darkerText = 0;
+ // COLORREF disabledText = 0;
+ // COLORREF linkText = 0;
+ // COLORREF edge = 0;
+ // COLORREF hotEdge = 0;
+ // COLORREF disabledEdge = 0;
+ // };
+ // }
+ //
+ // Note: in the case of calling failure ("false" is returned), you may need to change NppDarkMode::Colors structure to:
+ // https://github.com/notepad-plus-plus/notepad-plus-plus/blob/master/PowerEditor/src/NppDarkMode.h#L32
+
+ #define NPPM_GETCURRENTCMDLINE (NPPMSG + 109)
+ // int NPPM_GETCURRENTCMDLINE(size_t strLen, wchar_t *commandLineStr)
+ // Get the Current Command Line string.
+ // Users should call it with commandLineStr as NULL to get the required number of wchar_t (not including the terminating nul character),
+ // allocate commandLineStr buffer with the return value + 1, then call it again to get the current command line string.
+ // wParam[in]: strLen is "commandLineStr" buffer length
+ // lParam[out]: commandLineStr receives all copied command line string
+ // Return the number of wchar_t copied/to copy
+
+
+ #define NPPM_CREATELEXER (NPPMSG + 110)
+ // void* NPPM_CREATELEXER(0, const wchar_t* lexer_name)
+ // Get the ILexer pointer created by Lexilla. Call the lexilla "CreateLexer()" function to allow plugins to set the lexer for a Scintilla instance created by NPPM_CREATESCINTILLAHANDLE.
+ // wParam: 0 (not used)
+ // lParam[in]: lexer_name is the name of the lexer
+ // Return the ILexer pointer
+
+ #define NPPM_GETBOOKMARKID (NPPMSG + 111)
+ // int NPPM_GETBOOKMARKID(0, 0)
+ // Get the bookmark ID - use this API to get bookmark ID dynamically that guarantees you get always the right bookmark ID even it's been changed through the different versions.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // Return bookmark ID
+
+ #define NPPM_DARKMODESUBCLASSANDTHEME (NPPMSG + 112)
+ namespace NppDarkMode
+ {
+ // Standard flags for main parent after its children are initialized.
+ constexpr ULONG dmfInit = 0x0000000BUL;
+
+ // Standard flags for main parent usually used in NPPN_DARKMODECHANGED.
+ constexpr ULONG dmfHandleChange = 0x0000000CUL;
+ };
+
+ // ULONG NPPM_DARKMODESUBCLASSANDTHEME(ULONG dmFlags, HWND hwnd)
+ // Add support for generic dark mode to plugin dialog. Subclassing is applied automatically unless DWS_USEOWNDARKMODE flag is used.
+ // Might not work properly in C# plugins.
+ // wParam[in]: dmFlags has 2 possible value dmfInit (0x0000000BUL) & dmfHandleChange (0x0000000CUL) - see above definition
+ // lParam[in]: hwnd is the dialog handle of plugin - Docking panels don't need to call NPPM_DARKMODESUBCLASSANDTHEME
+ // Returns successful combinations of flags.
+
+ // Examples:
+ //
+ // - after controls initializations in WM_INITDIALOG, in WM_CREATE or after CreateWindow:
+ //
+ //auto success = static_cast(::SendMessage(nppData._nppHandle, NPPM_DARKMODESUBCLASSANDTHEME, static_cast(NppDarkMode::dmfInit), reinterpret_cast(mainHwnd)));
+ //
+ // - handling dark mode change:
+ //
+ //extern "C" __declspec(dllexport) void beNotified(SCNotification * notifyCode)
+ //{
+ // switch (notifyCode->nmhdr.code)
+ // {
+ // case NPPN_DARKMODECHANGED:
+ // {
+ // ::SendMessage(nppData._nppHandle, NPPM_DARKMODESUBCLASSANDTHEME, static_cast(dmfHandleChange), reinterpret_cast(mainHwnd));
+ // ::SetWindowPos(mainHwnd, nullptr, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); // to redraw titlebar and window
+ // break;
+ // }
+ // }
+ //}
+
+ #define NPPM_ALLOCATEINDICATOR (NPPMSG + 113)
+ // BOOL NPPM_ALLOCATEINDICATOR(int numberRequested, int* startNumber)
+ // Allocates an indicator number to a plugin: if a plugin needs to add an indicator,
+ // it has to use this message to get the indicator number, in order to prevent a conflict with the other plugins.
+ // wParam[in]: numberRequested is the number of ID you request for the reservation
+ // lParam[out]: startNumber will be set to the initial command ID if successful
+ // Return TRUE if successful, FALSE otherwise. startNumber will also be set to 0 if unsuccessful
+ //
+ // Example: If a plugin needs 1 indicator ID, the following code can be used :
+ //
+ // int idBegin;
+ // BOOL isAllocatedSuccessful = ::SendMessage(nppData._nppHandle, NPPM_ALLOCATEINDICATOR, 1, &idBegin);
+ //
+ // if isAllocatedSuccessful is TRUE, and value of idBegin is 7
+ // then indicator ID 7 is preserved by Notepad++, and it is safe to be used by the plugin.
+
+ #define NPPM_GETTABCOLORID (NPPMSG + 114)
+ // int NPPM_GETTABCOLORID(int view, int tabIndex)
+ // Get the tab color ID with given tab index and view.
+ // wParam[in]: view - main view (0) or sub-view (1) or -1 (active view)
+ // lParam[in]: tabIndex - index (in the view indicated above). -1 for currently active tab
+ // Return tab color ID which contains the following values: 0 (yellow), 1 (green), 2 (blue), 3 (orange), 4 (pink) or -1 (no color)
+ //
+ // Note: there's no symmetric command NPPM_SETTABCOLORID. Plugins can use NPPM_MENUCOMMAND to set current tab color with the desired tab color ID.
+
+ #define NPPM_SETUNTITLEDNAME (NPPMSG + 115)
+ // BOOL NPPM_SETUNTITLEDNAME(BufferID id, const wchar_t* newName)
+ // Rename the tab name for an untitled tab.
+ // wParam[in]: id - BufferID of the tab. -1 for currently active tab
+ // lParam[in]: newName - the desired new name of the tab
+ // Return TRUE upon success; FALSE upon failure
+
+ #define NPPM_GETNATIVELANGFILENAME (NPPMSG + 116)
+ // int NPPM_GETNATIVELANGFILENAME(size_t strLen, char* nativeLangFileName)
+ // Get the Current native language file name string. Use it after getting NPPN_READY notification to find out which native language is used.
+ // Users should call it with nativeLangFileName as NULL to get the required number of char (not including the terminating nul character),
+ // allocate language file name string buffer with the return value + 1, then call it again to get the current native language file name string.
+ // If there's no localization file applied, the returned value is 0.
+ // wParam[in]: strLen is "language file name string" buffer length
+ // lParam[out]: language file name string receives all copied native language file name string
+ // Return the number of char copied/to copy
+
+ #define NPPM_ADDSCNMODIFIEDFLAGS (NPPMSG + 117)
+ // BOOL NPPM_ADDSCNMODIFIEDFLAGS(0, unsigned long scnModifiedFlags2Add)
+ // Add the necessary SCN_MODIFIED flags so that your plugin will receive the SCN_MODIFIED notification for these events, enabling your specific treatments.
+ // By default, Notepad++ only forwards SCN_MODIFIED with the following 5 flags/events:
+ // SC_MOD_DELETETEXT | SC_MOD_INSERTTEXT | SC_PERFORMED_UNDO | SC_PERFORMED_REDO | SC_MOD_CHANGEINDICATOR to plugins.
+ // If your plugin needs to process other SCN_MODIFIED events, you should add the required flags by sending this message to Notepad++. You can send it immediately after receiving NPPN_READY,
+ // or only when your plugin needs to listen to specific events (to avoid penalizing Notepad++'s performance). Just ensure that the message is sent only once.
+ // wParam: 0 (not used)
+ // lParam[in]: scnModifiedFlags2Add - Scintilla SCN_MODIFIED flags to add.
+ // Return TRUE
+ //
+ // Example:
+ //
+ // extern "C" __declspec(dllexport) void beNotified(SCNotification* notifyCode)
+ // {
+ // switch (notifyCode->nmhdr.code)
+ // {
+ // case NPPN_READY:
+ // {
+ // // Add SC_MOD_BEFOREDELETE and SC_MOD_BEFOREINSERT to listen to the 2 events of SCN_MODIFIED
+ // ::SendMessage(nppData._nppHandle, NPPM_ADDSCNMODIFIEDFLAGS, 0, SC_MOD_BEFOREDELETE | SC_MOD_BEFOREINSERT);
+ // }
+ // break;
+ // ...
+ // }
+ // ...
+ // }
+
+ #define NPPM_GETTOOLBARICONSETCHOICE (NPPMSG + 118)
+ // BOOL NPPM_GETTOOLBARICONSETCHOICE(0, 0)
+ // Get Notepad++ toolbar icon set choice (Fluent UI: small, Fluent UI: large, Filled Fluent UI: small, Filled Fluent UI: large and Standard icons: small.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
+ // Return toolbar icon set choice as an integer value. Here are 5 possible values:
+ // 0 (Fluent UI: small), 1 (Fluent UI: large), 2 (Filled Fluent UI: small), 3 (Filled Fluent UI: large) and 4 (Standard icons: small).
+
+ #define NPPM_GETNPPSETTINGSDIRPATH (NPPMSG + 119)
+ // int NPPM_GETNPPSETTINGSDIRPATH(size_t strLen, wchar_t *settingsDirPath)
+ // Get path for the active Notepad++ settings: it will use -settingsDir path if that's defined; if not, it will use Cloud directory if that's defined;
+ // if not, it will use the AppData settings directory, or finally the installation path. This allows plugins to have one interface to find out
+ // where the active Notepad++ settings are stored, whichever location they are currently set to.
+ // wParam[in]: strLen - size of allocated buffer "settingsDirPath"
+ // lParam[out]: settingsDirPath - Users should call it with settingsDirPath be NULL to get the required number of wchar_t (not including the terminating nul character),
+ // allocate settingsDirPath buffer with the return value + 1, then call it again to get the path.
+ // Returns the number of wchar_t copied/to copy. If the return value is 0, then the "strLen" is not enough to copy the path, or the settings path could not be determined.
+ //
+ // Note: This message is for the active Notepad++ configuration location. If you are looking for the settings directory for plugins (...\Plugins\Config\),
+ // use NPPM_GETPLUGINSCONFIGDIR instead.
+
+// For RUNCOMMAND_USER
+ #define VAR_NOT_RECOGNIZED 0
+ #define FULL_CURRENT_PATH 1
+ #define CURRENT_DIRECTORY 2
+ #define FILE_NAME 3
+ #define NAME_PART 4
+ #define EXT_PART 5
+ #define CURRENT_WORD 6
+ #define NPP_DIRECTORY 7
+ #define CURRENT_LINE 8
+ #define CURRENT_COLUMN 9
+ #define NPP_FULL_FILE_PATH 10
+ #define GETFILENAMEATCURSOR 11
+ #define CURRENT_LINESTR 12
+
+ #define RUNCOMMAND_USER (WM_USER + 3000)
-#define VAR_NOT_RECOGNIZED 0
-#define FULL_CURRENT_PATH 1
-#define CURRENT_DIRECTORY 2
-#define FILE_NAME 3
-#define NAME_PART 4
-#define EXT_PART 5
-#define CURRENT_WORD 6
-#define NPP_DIRECTORY 7
-#define CURRENT_LINE 8
-#define CURRENT_COLUMN 9
-#define NPP_FULL_FILE_PATH 10
-#define GETFILENAMEATCURSOR 11
-
-#define RUNCOMMAND_USER (WM_USER + 3000)
#define NPPM_GETFULLCURRENTPATH (RUNCOMMAND_USER + FULL_CURRENT_PATH)
#define NPPM_GETCURRENTDIRECTORY (RUNCOMMAND_USER + CURRENT_DIRECTORY)
#define NPPM_GETFILENAME (RUNCOMMAND_USER + FILE_NAME)
@@ -470,27 +1062,35 @@ enum Platform { PF_UNKNOWN, PF_X86, PF_X64, PF_IA64 };
#define NPPM_GETEXTPART (RUNCOMMAND_USER + EXT_PART)
#define NPPM_GETCURRENTWORD (RUNCOMMAND_USER + CURRENT_WORD)
#define NPPM_GETNPPDIRECTORY (RUNCOMMAND_USER + NPP_DIRECTORY)
+ #define NPPM_GETNPPFULLFILEPATH (RUNCOMMAND_USER + NPP_FULL_FILE_PATH)
#define NPPM_GETFILENAMEATCURSOR (RUNCOMMAND_USER + GETFILENAMEATCURSOR)
- // BOOL NPPM_GETXXXXXXXXXXXXXXXX(size_t strLen, TCHAR *str)
- // where str is the allocated TCHAR array,
- // strLen is the allocated array size
- // The return value is TRUE when get generic_string operation success
- // Otherwise (allocated array size is too small) FALSE
+ #define NPPM_GETCURRENTLINESTR (RUNCOMMAND_USER + CURRENT_LINESTR)
+ // BOOL NPPM_GETXXXXXXXXXXXXXXXX(size_t strLen, wchar_t *str)
+ // Get XXX string operations.
+ // wParam[in]: strLen is the allocated array size
+ // lParam[out]: str is the allocated wchar_t array
+ // The return value is TRUE when get std::wstring operation success, otherwise FALSE (allocated array size is too small)
+
#define NPPM_GETCURRENTLINE (RUNCOMMAND_USER + CURRENT_LINE)
- // INT NPPM_GETCURRENTLINE(0, 0)
+ // int NPPM_GETCURRENTLINE(0, 0)
+ // Get current line number.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
// return the caret current position line
+
#define NPPM_GETCURRENTCOLUMN (RUNCOMMAND_USER + CURRENT_COLUMN)
- // INT NPPM_GETCURRENTCOLUMN(0, 0)
+ // int NPPM_GETCURRENTCOLUMN(0, 0)
+ // Get current column number.
+ // wParam: 0 (not used)
+ // lParam: 0 (not used)
// return the caret current position column
- #define NPPM_GETNPPFULLFILEPATH (RUNCOMMAND_USER + NPP_FULL_FILE_PATH)
-
// Notification code
#define NPPN_FIRST 1000
- #define NPPN_READY (NPPN_FIRST + 1) // To notify plugins that all the procedures of launchment of notepad++ are done.
+ #define NPPN_READY (NPPN_FIRST + 1) // To notify plugins that all the initialization for launching Notepad++ is complete.
//scnNotification->nmhdr.code = NPPN_READY;
//scnNotification->nmhdr.hwndFrom = hwndNpp;
//scnNotification->nmhdr.idFrom = 0;
@@ -521,7 +1121,7 @@ enum Platform { PF_UNKNOWN, PF_X86, PF_X64, PF_IA64 };
//scnNotification->nmhdr.idFrom = BufferID;
#define NPPN_FILEBEFORESAVE (NPPN_FIRST + 7) // To notify plugins that the current file is about to be saved
- //scnNotification->nmhdr.code = NPPN_FILEBEFOREOPEN;
+ //scnNotification->nmhdr.code = NPPN_FILEBEFORESAVE;
//scnNotification->nmhdr.hwndFrom = hwndNpp;
//scnNotification->nmhdr.idFrom = BufferID;
@@ -551,7 +1151,7 @@ enum Platform { PF_UNKNOWN, PF_X86, PF_X64, PF_IA64 };
//scnNotification->nmhdr.idFrom = currentBufferID;
#define NPPN_SHORTCUTREMAPPED (NPPN_FIRST + 13) // To notify plugins that plugin command shortcut is remapped.
- //scnNotification->nmhdr.code = NPPN_SHORTCUTSREMAPPED;
+ //scnNotification->nmhdr.code = NPPN_SHORTCUTREMAPPED;
//scnNotification->nmhdr.hwndFrom = ShortcutKeyStructurePointer;
//scnNotification->nmhdr.idFrom = cmdID;
//where ShortcutKeyStructurePointer is pointer of struct ShortcutKey:
@@ -563,12 +1163,12 @@ enum Platform { PF_UNKNOWN, PF_X86, PF_X64, PF_IA64 };
//};
#define NPPN_FILEBEFORELOAD (NPPN_FIRST + 14) // To notify plugins that the current file is about to be loaded
- //scnNotification->nmhdr.code = NPPN_FILEBEFOREOPEN;
+ //scnNotification->nmhdr.code = NPPN_FILEBEFORELOAD;
//scnNotification->nmhdr.hwndFrom = hwndNpp;
//scnNotification->nmhdr.idFrom = NULL;
#define NPPN_FILELOADFAILED (NPPN_FIRST + 15) // To notify plugins that file open operation failed
- //scnNotification->nmhdr.code = NPPN_FILEOPENFAILED;
+ //scnNotification->nmhdr.code = NPPN_FILELOADFAILED;
//scnNotification->nmhdr.hwndFrom = hwndNpp;
//scnNotification->nmhdr.idFrom = BufferID;
@@ -631,3 +1231,58 @@ enum Platform { PF_UNKNOWN, PF_X86, PF_X64, PF_IA64 };
//scnNotification->nmhdr.code = NPPN_FILEDELETED;
//scnNotification->nmhdr.hwndFrom = hwndNpp;
//scnNotification->nmhdr.idFrom = BufferID;
+
+ #define NPPN_DARKMODECHANGED (NPPN_FIRST + 27) // To notify plugins that Dark Mode was enabled/disabled
+ //scnNotification->nmhdr.code = NPPN_DARKMODECHANGED;
+ //scnNotification->nmhdr.hwndFrom = hwndNpp;
+ //scnNotification->nmhdr.idFrom = 0;
+
+ #define NPPN_CMDLINEPLUGINMSG (NPPN_FIRST + 28) // To notify plugins that there are plugin arguments pluginMessage (wchar_t*) is available
+ //scnNotification->nmhdr.code = NPPN_CMDLINEPLUGINMSG;
+ //scnNotification->nmhdr.hwndFrom = hwndNpp;
+ //scnNotification->nmhdr.idFrom = pluginMessage; //where pluginMessage is pointer of type wchar_t
+ //
+ // User can pass arguments to plugins via command line argument using:
+ // -pluginMessage="PLUGIN1_ARG1=V1;PLUGIN1_ARG2=V2;PLUGIN2_ARG=V;..."
+ //
+ // The full string (wchar_t*) will be delivered to all plugins via the NPPN_CMDLINEPLUGINMSG notification. Each plugins can parse and extract the arguments relevant to itself.
+ //
+ // To avoid the collisions among plugins, the following protocol should be followed:
+ // 1. Each plugin must use its unique namespace (its folder name in plugins directory) as a prefix for its argument names.
+ // 2. The symbol ';' must be used as the delimiter between arguments when there are 2 or more arguments in the pluginMessage string.
+ // 3. The symbol '=' must be used as delimiter between argument names and their values.
+ //
+ // Example (via the command line):
+ // -pluginMessage="NppExecScriptPath=C:\Program Files\Notepad++\plugins\NppExec\init.py;NppExecArg2=arg2Value;mimeToolsSettings=disable;pluginYInfo=show"
+ //
+ // Interpretation:
+ // - Plugin "NppExec" processes: NppExecScriptPath=C:\Program Files\Notepad++\plugins\NppExec\init.py & NppExecArg2=arg2Value
+ // - Plugin "mimeTools" processes: mimeToolsSettings=disable
+ // - Plugin "pluginY" processes: pluginYInfo=show
+
+ #define NPPN_EXTERNALLEXERBUFFER (NPPN_FIRST + 29) // To notify lexer plugins that the buffer (in idFrom) is just applied to a external lexer
+ //scnNotification->nmhdr.code = NPPN_EXTERNALLEXERBUFFER;
+ //scnNotification->nmhdr.hwndFrom = hwndNpp;
+ //scnNotification->nmhdr.idFrom = BufferID; //where pluginMessage is pointer of type wchar_t
+
+ #define NPPN_GLOBALMODIFIED (NPPN_FIRST + 30) // To notify plugins that the current document is just modified by Replace All action.
+ // For solving the performance issue (from v8.6.4), Notepad++ doesn't trigger SCN_MODIFIED during Replace All action anymore.
+ // As a result, the plugins which monitor SCN_MODIFIED should also monitor NPPN_GLOBALMODIFIED.
+ // This notification is implemented in Notepad++ v8.6.5.
+ //scnNotification->nmhdr.code = NPPN_GLOBALMODIFIED;
+ //scnNotification->nmhdr.hwndFrom = BufferID;
+ //scnNotification->nmhdr.idFrom = 0; // preserved for the future use, must be zero
+
+ #define NPPN_NATIVELANGCHANGED (NPPN_FIRST + 31) // To notify plugins that the current native language is just changed to another one.
+ // Use NPPM_GETNATIVELANGFILENAME to get current native language file name.
+ // Use NPPM_GETMENUHANDLE(NPPPLUGINMENU, 0) to get submenu "Plugins" handle (HMENU)
+ //scnNotification->nmhdr.code = NPPN_NATIVELANGCHANGED;
+ //scnNotification->nmhdr.hwndFrom = hwndNpp
+ //scnNotification->nmhdr.idFrom = 0; // preserved for the future use, must be zero
+
+ #define NPPN_TOOLBARICONSETCHANGED (NPPN_FIRST + 32) // To notify plugins that toolbar icon set selection has changed
+ //scnNotification->nmhdr.code = NPPN_TOOLBARICONSETCHANGED;
+ //scnNotification->nmhdr.hwndFrom = hwndNpp;
+ //scnNotification->nmhdr.idFrom = iconSetChoice;
+ // where iconSetChoice could be 1 of 5 possible values:
+ // 0 (Fluent UI: small), 1 (Fluent UI: large), 2 (Filled Fluent UI: small), 3 (Filled Fluent UI: large) and 4 (Standard icons: small).
diff --git a/NppExec/Release/NppExec/Scintilla.h b/NppExec/Release/NppExec/Scintilla.h
index f5cd312..67927ec 100644
--- a/NppExec/Release/NppExec/Scintilla.h
+++ b/NppExec/Release/NppExec/Scintilla.h
@@ -20,7 +20,6 @@ extern "C" {
int Scintilla_RegisterClasses(void *hInstance);
int Scintilla_ReleaseResources(void);
#endif
-int Scintilla_LinkLexers(void);
#ifdef __cplusplus
}
@@ -37,6 +36,7 @@ typedef intptr_t sptr_t;
#include "Sci_Position.h"
typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam, sptr_t lParam);
+typedef sptr_t (*SciFnDirectStatus)(sptr_t ptr, unsigned int iMessage, uptr_t wParam, sptr_t lParam, int *pStatus);
#ifndef SCI_DISABLE_AUTOGENERATED
@@ -57,11 +57,15 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_GETCURRENTPOS 2008
#define SCI_GETANCHOR 2009
#define SCI_GETSTYLEAT 2010
+#define SCI_GETSTYLEINDEXAT 2038
#define SCI_REDO 2011
#define SCI_SETUNDOCOLLECTION 2012
#define SCI_SELECTALL 2013
#define SCI_SETSAVEPOINT 2014
-#define SCI_GETSTYLEDTEXT 2015
+//deprecated by N++ 2GB+ support via new scintilla interfaces from 5.2.3 (see https://www.scintilla.org/ScintillaHistory.html),
+//please use SCI_GETTEXTRANGEFULL, SCI_FINDTEXTFULL,SCI_GETSTYLEDTEXTFULL and SCI_FORMATRANGEFULL and corresponding defines/structs
+//#define SCI_GETSTYLEDTEXT 2015
+#define SCI_GETSTYLEDTEXTFULL 2778
#define SCI_CANREDO 2016
#define SCI_MARKERLINEFROMHANDLE 2017
#define SCI_MARKERDELETEHANDLE 2018
@@ -104,6 +108,8 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_GETNEXTTABSTOP 2677
#define SC_CP_UTF8 65001
#define SCI_SETCODEPAGE 2037
+#define SCI_SETFONTLOCALE 2760
+#define SCI_GETFONTLOCALE 2761
#define SC_IME_WINDOWED 0
#define SC_IME_INLINE 1
#define SCI_GETIMEINTERACTION 2678
@@ -149,7 +155,12 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SC_MARK_RGBAIMAGE 30
#define SC_MARK_BOOKMARK 31
#define SC_MARK_VERTICALBOOKMARK 32
+#define SC_MARK_BAR 33
#define SC_MARK_CHARACTER 10000
+#define SC_MARKNUM_HISTORY_REVERTED_TO_ORIGIN 21
+#define SC_MARKNUM_HISTORY_SAVED 22
+#define SC_MARKNUM_HISTORY_MODIFIED 23
+#define SC_MARKNUM_HISTORY_REVERTED_TO_MODIFIED 24
#define SC_MARKNUM_FOLDEREND 25
#define SC_MARKNUM_FOLDEROPENMID 26
#define SC_MARKNUM_FOLDERMIDTAIL 27
@@ -157,11 +168,16 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SC_MARKNUM_FOLDERSUB 29
#define SC_MARKNUM_FOLDER 30
#define SC_MARKNUM_FOLDEROPEN 31
+#define SC_MASK_HISTORY 0x01E00000
#define SC_MASK_FOLDERS 0xFE000000
#define SCI_MARKERDEFINE 2040
#define SCI_MARKERSETFORE 2041
#define SCI_MARKERSETBACK 2042
#define SCI_MARKERSETBACKSELECTED 2292
+#define SCI_MARKERSETFORETRANSLUCENT 2294
+#define SCI_MARKERSETBACKTRANSLUCENT 2295
+#define SCI_MARKERSETBACKSELECTEDTRANSLUCENT 2296
+#define SCI_MARKERSETSTROKEWIDTH 2297
#define SCI_MARKERENABLEHIGHLIGHT 2293
#define SCI_MARKERADD 2043
#define SCI_MARKERDELETE 2044
@@ -172,6 +188,8 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_MARKERDEFINEPIXMAP 2049
#define SCI_MARKERADDSET 2466
#define SCI_MARKERSETALPHA 2476
+#define SCI_MARKERGETLAYER 2734
+#define SCI_MARKERSETLAYER 2735
#define SC_MAX_MARGIN 4
#define SC_MARGIN_SYMBOL 0
#define SC_MARGIN_NUMBER 1
@@ -264,12 +282,65 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_STYLEGETWEIGHT 2064
#define SCI_STYLESETCHARACTERSET 2066
#define SCI_STYLESETHOTSPOT 2409
+#define SCI_STYLESETCHECKMONOSPACED 2254
+#define SCI_STYLEGETCHECKMONOSPACED 2255
+#define SC_STRETCH_ULTRA_CONDENSED 1
+#define SC_STRETCH_EXTRA_CONDENSED 2
+#define SC_STRETCH_CONDENSED 3
+#define SC_STRETCH_SEMI_CONDENSED 4
+#define SC_STRETCH_NORMAL 5
+#define SC_STRETCH_SEMI_EXPANDED 6
+#define SC_STRETCH_EXPANDED 7
+#define SC_STRETCH_EXTRA_EXPANDED 8
+#define SC_STRETCH_ULTRA_EXPANDED 9
+#define SCI_STYLESETSTRETCH 2258
+#define SCI_STYLEGETSTRETCH 2259
+#define SCI_STYLESETINVISIBLEREPRESENTATION 2256
+#define SCI_STYLEGETINVISIBLEREPRESENTATION 2257
+#define SC_ELEMENT_LIST 0
+#define SC_ELEMENT_LIST_BACK 1
+#define SC_ELEMENT_LIST_SELECTED 2
+#define SC_ELEMENT_LIST_SELECTED_BACK 3
+#define SC_ELEMENT_SELECTION_TEXT 10
+#define SC_ELEMENT_SELECTION_BACK 11
+#define SC_ELEMENT_SELECTION_ADDITIONAL_TEXT 12
+#define SC_ELEMENT_SELECTION_ADDITIONAL_BACK 13
+#define SC_ELEMENT_SELECTION_SECONDARY_TEXT 14
+#define SC_ELEMENT_SELECTION_SECONDARY_BACK 15
+#define SC_ELEMENT_SELECTION_INACTIVE_TEXT 16
+#define SC_ELEMENT_SELECTION_INACTIVE_BACK 17
+#define SC_ELEMENT_SELECTION_INACTIVE_ADDITIONAL_TEXT 18
+#define SC_ELEMENT_SELECTION_INACTIVE_ADDITIONAL_BACK 19
+#define SC_ELEMENT_CARET 40
+#define SC_ELEMENT_CARET_ADDITIONAL 41
+#define SC_ELEMENT_CARET_LINE_BACK 50
+#define SC_ELEMENT_WHITE_SPACE 60
+#define SC_ELEMENT_WHITE_SPACE_BACK 61
+#define SC_ELEMENT_HOT_SPOT_ACTIVE 70
+#define SC_ELEMENT_HOT_SPOT_ACTIVE_BACK 71
+#define SC_ELEMENT_FOLD_LINE 80
+#define SC_ELEMENT_HIDDEN_LINE 81
+#define SCI_SETELEMENTCOLOUR 2753
+#define SCI_GETELEMENTCOLOUR 2754
+#define SCI_RESETELEMENTCOLOUR 2755
+#define SCI_GETELEMENTISSET 2756
+#define SCI_GETELEMENTALLOWSTRANSLUCENT 2757
+#define SCI_GETELEMENTBASECOLOUR 2758
#define SCI_SETSELFORE 2067
#define SCI_SETSELBACK 2068
#define SCI_GETSELALPHA 2477
#define SCI_SETSELALPHA 2478
#define SCI_GETSELEOLFILLED 2479
#define SCI_SETSELEOLFILLED 2480
+#define SC_LAYER_BASE 0
+#define SC_LAYER_UNDER_TEXT 1
+#define SC_LAYER_OVER_TEXT 2
+#define SCI_GETSELECTIONLAYER 2762
+#define SCI_SETSELECTIONLAYER 2763
+#define SCI_GETCARETLINELAYER 2764
+#define SCI_SETCARETLINELAYER 2765
+#define SCI_GETCARETLINEHIGHLIGHTSUBLINE 2773
+#define SCI_SETCARETLINEHIGHLIGHTSUBLINE 2774
#define SCI_SETCARETFORE 2069
#define SCI_ASSIGNCMDKEY 2070
#define SCI_CLEARCMDKEY 2071
@@ -284,6 +355,21 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_GETCHARACTERCATEGORYOPTIMIZATION 2721
#define SCI_BEGINUNDOACTION 2078
#define SCI_ENDUNDOACTION 2079
+#define SCI_GETUNDOSEQUENCE 2799
+#define SCI_GETUNDOACTIONS 2790
+#define SCI_SETUNDOSAVEPOINT 2791
+#define SCI_GETUNDOSAVEPOINT 2792
+#define SCI_SETUNDODETACH 2793
+#define SCI_GETUNDODETACH 2794
+#define SCI_SETUNDOTENTATIVE 2795
+#define SCI_GETUNDOTENTATIVE 2796
+#define SCI_SETUNDOCURRENT 2797
+#define SCI_GETUNDOCURRENT 2798
+#define SCI_PUSHUNDOACTIONTYPE 2800
+#define SCI_CHANGELASTUNDOACTIONTEXT 2801
+#define SCI_GETUNDOACTIONTYPE 2802
+#define SCI_GETUNDOACTIONPOSITION 2803
+#define SCI_GETUNDOACTIONTEXT 2804
#define INDIC_PLAIN 0
#define INDIC_SQUIGGLE 1
#define INDIC_TT 2
@@ -306,7 +392,8 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define INDIC_POINTCHARACTER 19
#define INDIC_GRADIENT 20
#define INDIC_GRADIENTCENTRE 21
-#define INDIC_EXPLORERLINK 22
+#define INDIC_POINT_TOP 22
+#define INDIC_EXPLORERLINK 23
#define INDIC_CONTAINER 8
#define INDIC_IME 32
#define INDIC_IME_MAX 35
@@ -314,7 +401,15 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define INDICATOR_CONTAINER 8
#define INDICATOR_IME 32
#define INDICATOR_IME_MAX 35
-#define INDICATOR_MAX 35
+#define INDICATOR_HISTORY_REVERTED_TO_ORIGIN_INSERTION 36
+#define INDICATOR_HISTORY_REVERTED_TO_ORIGIN_DELETION 37
+#define INDICATOR_HISTORY_SAVED_INSERTION 38
+#define INDICATOR_HISTORY_SAVED_DELETION 39
+#define INDICATOR_HISTORY_MODIFIED_INSERTION 40
+#define INDICATOR_HISTORY_MODIFIED_DELETION 41
+#define INDICATOR_HISTORY_REVERTED_TO_MODIFIED_INSERTION 42
+#define INDICATOR_HISTORY_REVERTED_TO_MODIFIED_DELETION 43
+#define INDICATOR_MAX 43
#define SCI_INDICSETSTYLE 2080
#define SCI_INDICGETSTYLE 2081
#define SCI_INDICSETFORE 2082
@@ -327,9 +422,12 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_INDICGETHOVERFORE 2683
#define SC_INDICVALUEBIT 0x1000000
#define SC_INDICVALUEMASK 0xFFFFFF
+#define SC_INDICFLAG_NONE 0
#define SC_INDICFLAG_VALUEFORE 1
#define SCI_INDICSETFLAGS 2684
#define SCI_INDICGETFLAGS 2685
+#define SCI_INDICSETSTROKEWIDTH 2751
+#define SCI_INDICGETSTROKEWIDTH 2752
#define SCI_SETWHITESPACEFORE 2084
#define SCI_SETWHITESPACEBACK 2085
#define SCI_SETWHITESPACESIZE 2086
@@ -363,6 +461,11 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_USERLISTSHOW 2117
#define SCI_AUTOCSETAUTOHIDE 2118
#define SCI_AUTOCGETAUTOHIDE 2119
+#define SC_AUTOCOMPLETE_NORMAL 0
+#define SC_AUTOCOMPLETE_FIXED_SIZE 1
+#define SC_AUTOCOMPLETE_SELECT_FIRST_ITEM 2
+#define SCI_AUTOCSETOPTIONS 2638
+#define SCI_AUTOCGETOPTIONS 2639
#define SCI_AUTOCSETDROPRESTOFWORD 2270
#define SCI_AUTOCGETDROPRESTOFWORD 2271
#define SCI_REGISTERIMAGE 2405
@@ -373,6 +476,10 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_AUTOCGETMAXWIDTH 2209
#define SCI_AUTOCSETMAXHEIGHT 2210
#define SCI_AUTOCGETMAXHEIGHT 2211
+#define SCI_AUTOCSETSTYLE 2109
+#define SCI_AUTOCGETSTYLE 2120
+#define SCI_AUTOCSETIMAGESCALE 2815
+#define SCI_AUTOCGETIMAGESCALE 2816
#define SCI_SETINDENT 2122
#define SCI_GETINDENT 2123
#define SCI_SETUSETABS 2124
@@ -420,11 +527,31 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCFIND_REGEXP 0x00200000
#define SCFIND_POSIX 0x00400000
#define SCFIND_CXX11REGEX 0x00800000
-#define SCI_FINDTEXT 2150
-#define SCI_FORMATRANGE 2151
+//deprecated by N++ 2GB+ support via new scintilla interfaces from 5.2.3 (see https://www.scintilla.org/ScintillaHistory.html),
+//please use SCI_GETTEXTRANGEFULL, SCI_FINDTEXTFULL,SCI_GETSTYLEDTEXTFULL and SCI_FORMATRANGEFULL and corresponding defines/structs
+//#define SCI_FINDTEXT 2150
+#define SCI_FINDTEXTFULL 2196
+//deprecated by N++ 2GB+ support via new scintilla interfaces from 5.2.3 (see https://www.scintilla.org/ScintillaHistory.html),
+//please use SCI_GETTEXTRANGEFULL, SCI_FINDTEXTFULL,SCI_GETSTYLEDTEXTFULL and SCI_FORMATRANGEFULL and corresponding defines/structs
+//#define SCI_FORMATRANGE 2151
+#define SCI_FORMATRANGEFULL 2777
+#define SC_CHANGE_HISTORY_DISABLED 0
+#define SC_CHANGE_HISTORY_ENABLED 1
+#define SC_CHANGE_HISTORY_MARKERS 2
+#define SC_CHANGE_HISTORY_INDICATORS 4
+#define SCI_SETCHANGEHISTORY 2780
+#define SCI_GETCHANGEHISTORY 2781
+#define SC_UNDO_SELECTION_HISTORY_DISABLED 0
+#define SC_UNDO_SELECTION_HISTORY_ENABLED 1
+#define SC_UNDO_SELECTION_HISTORY_SCROLL 2
+#define SCI_SETUNDOSELECTIONHISTORY 2782
+#define SCI_GETUNDOSELECTIONHISTORY 2783
+#define SCI_SETSELECTIONSERIALIZED 2784
+#define SCI_GETSELECTIONSERIALIZED 2785
#define SCI_GETFIRSTVISIBLELINE 2152
#define SCI_GETLINE 2153
#define SCI_GETLINECOUNT 2154
+#define SCI_ALLOCATELINES 2089
#define SCI_SETMARGINLEFT 2155
#define SCI_GETMARGINLEFT 2156
#define SCI_SETMARGINRIGHT 2157
@@ -432,13 +559,18 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_GETMODIFY 2159
#define SCI_SETSEL 2160
#define SCI_GETSELTEXT 2161
-#define SCI_GETTEXTRANGE 2162
+//deprecated by N++ 2GB+ support via new scintilla interfaces from 5.2.3 (see https://www.scintilla.org/ScintillaHistory.html),
+//please use SCI_GETTEXTRANGEFULL, SCI_FINDTEXTFULL,SCI_GETSTYLEDTEXTFULL and SCI_FORMATRANGEFULL and corresponding defines/structs
+//#define SCI_GETTEXTRANGE 2162
+#define SCI_GETTEXTRANGEFULL 2039
#define SCI_HIDESELECTION 2163
+#define SCI_GETSELECTIONHIDDEN 2088
#define SCI_POINTXFROMPOSITION 2164
#define SCI_POINTYFROMPOSITION 2165
#define SCI_LINEFROMPOSITION 2166
#define SCI_POSITIONFROMLINE 2167
#define SCI_LINESCROLL 2168
+#define SCI_SCROLLVERTICAL 2817
#define SCI_SCROLLCARET 2169
#define SCI_SCROLLRANGE 2569
#define SCI_REPLACESEL 2170
@@ -456,6 +588,7 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_GETTEXT 2182
#define SCI_GETTEXTLENGTH 2183
#define SCI_GETDIRECTFUNCTION 2184
+#define SCI_GETDIRECTSTATUSFUNCTION 2772
#define SCI_GETDIRECTPOINTER 2185
#define SCI_SETOVERTYPE 2186
#define SCI_GETOVERTYPE 2187
@@ -475,6 +608,7 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_TARGETWHOLEDOCUMENT 2690
#define SCI_REPLACETARGET 2194
#define SCI_REPLACETARGETRE 2195
+#define SCI_REPLACETARGETMINIMAL 2779
#define SCI_SEARCHINTARGET 2197
#define SCI_SETSEARCHFLAGS 2198
#define SCI_GETSEARCHFLAGS 2199
@@ -492,6 +626,7 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_VISIBLEFROMDOCLINE 2220
#define SCI_DOCLINEFROMVISIBLE 2221
#define SCI_WRAPCOUNT 2235
+#define SC_FOLDLEVELNONE 0x0
#define SC_FOLDLEVELBASE 0x400
#define SC_FOLDLEVELWHITEFLAG 0x1000
#define SC_FOLDLEVELHEADERFLAG 0x2000
@@ -518,16 +653,19 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SC_FOLDACTION_CONTRACT 0
#define SC_FOLDACTION_EXPAND 1
#define SC_FOLDACTION_TOGGLE 2
+#define SC_FOLDACTION_CONTRACT_EVERY_LEVEL 4
#define SCI_FOLDLINE 2237
#define SCI_FOLDCHILDREN 2238
#define SCI_EXPANDCHILDREN 2239
#define SCI_FOLDALL 2662
#define SCI_ENSUREVISIBLE 2232
+#define SC_AUTOMATICFOLD_NONE 0x0000
#define SC_AUTOMATICFOLD_SHOW 0x0001
#define SC_AUTOMATICFOLD_CLICK 0x0002
#define SC_AUTOMATICFOLD_CHANGE 0x0004
#define SCI_SETAUTOMATICFOLD 2663
#define SCI_GETAUTOMATICFOLD 2664
+#define SC_FOLDFLAG_NONE 0x0000
#define SC_FOLDFLAG_LINEBEFORE_EXPANDED 0x0002
#define SC_FOLDFLAG_LINEBEFORE_CONTRACTED 0x0004
#define SC_FOLDFLAG_LINEAFTER_EXPANDED 0x0008
@@ -648,7 +786,9 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_CANCEL 2325
#define SCI_DELETEBACK 2326
#define SCI_TAB 2327
+#define SCI_LINEINDENT 2813
#define SCI_BACKTAB 2328
+#define SCI_LINEDEDENT 2814
#define SCI_NEWLINE 2329
#define SCI_FORMFEED 2330
#define SCI_VCHOME 2331
@@ -787,7 +927,9 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SC_SEL_LINES 2
#define SC_SEL_THIN 3
#define SCI_SETSELECTIONMODE 2422
+#define SCI_CHANGESELECTIONMODE 2659
#define SCI_GETSELECTIONMODE 2423
+#define SCI_SETMOVEEXTENDSSELECTION 2719
#define SCI_GETMOVEEXTENDSSELECTION 2706
#define SCI_GETLINESELSTARTPOSITION 2424
#define SCI_GETLINESELENDPOSITION 2425
@@ -841,6 +983,7 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_TOGGLECARETSTICKY 2459
#define SCI_SETPASTECONVERTENDINGS 2467
#define SCI_GETPASTECONVERTENDINGS 2468
+#define SCI_REPLACERECTANGULAR 2771
#define SCI_SELECTIONDUPLICATE 2469
#define SCI_SETCARETLINEBACKALPHA 2470
#define SCI_GETCARETLINEBACKALPHA 2471
@@ -849,6 +992,7 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define CARETSTYLE_BLOCK 2
#define CARETSTYLE_OVERSTRIKE_BAR 0
#define CARETSTYLE_OVERSTRIKE_BLOCK 0x10
+#define CARETSTYLE_CURSES 0x20
#define CARETSTYLE_INS_MASK 0xF
#define CARETSTYLE_BLOCK_AFTER 0x100
#define SCI_SETCARETSTYLE 2512
@@ -865,7 +1009,12 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_INDICATOREND 2509
#define SCI_SETPOSITIONCACHE 2514
#define SCI_GETPOSITIONCACHE 2515
+#define SCI_SETLAYOUTTHREADS 2775
+#define SCI_GETLAYOUTTHREADS 2776
#define SCI_COPYALLOWLINE 2519
+#define SCI_CUTALLOWLINE 2810
+#define SCI_SETCOPYSEPARATOR 2811
+#define SCI_GETCOPYSEPARATOR 2812
#define SCI_GETCHARACTERPOINTER 2520
#define SCI_GETRANGEPOINTER 2643
#define SCI_GETGAPPOSITION 2644
@@ -929,6 +1078,7 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_CLEARSELECTIONS 2571
#define SCI_SETSELECTION 2572
#define SCI_ADDSELECTION 2573
+#define SCI_SELECTIONFROMPOINT 2474
#define SCI_DROPSELECTIONN 2671
#define SCI_SETMAINSELECTION 2574
#define SCI_GETMAINSELECTION 2575
@@ -990,6 +1140,7 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SC_TECHNOLOGY_DIRECTWRITE 1
#define SC_TECHNOLOGY_DIRECTWRITERETAIN 2
#define SC_TECHNOLOGY_DIRECTWRITEDC 3
+#define SC_TECHNOLOGY_DIRECT_WRITE_1 4
#define SCI_SETTECHNOLOGY 2630
#define SCI_GETTECHNOLOGY 2631
#define SCI_CREATELOADER 2632
@@ -1008,29 +1159,57 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SCI_SETREPRESENTATION 2665
#define SCI_GETREPRESENTATION 2666
#define SCI_CLEARREPRESENTATION 2667
+#define SCI_CLEARALLREPRESENTATIONS 2770
+#define SC_REPRESENTATION_PLAIN 0
+#define SC_REPRESENTATION_BLOB 1
+#define SC_REPRESENTATION_COLOUR 0x10
+#define SCI_SETREPRESENTATIONAPPEARANCE 2766
+#define SCI_GETREPRESENTATIONAPPEARANCE 2767
+#define SCI_SETREPRESENTATIONCOLOUR 2768
+#define SCI_GETREPRESENTATIONCOLOUR 2769
#define SCI_EOLANNOTATIONSETTEXT 2740
#define SCI_EOLANNOTATIONGETTEXT 2741
#define SCI_EOLANNOTATIONSETSTYLE 2742
#define SCI_EOLANNOTATIONGETSTYLE 2743
#define SCI_EOLANNOTATIONCLEARALL 2744
-#define EOLANNOTATION_HIDDEN 0
-#define EOLANNOTATION_STANDARD 1
-#define EOLANNOTATION_BOXED 2
+#define EOLANNOTATION_HIDDEN 0x0
+#define EOLANNOTATION_STANDARD 0x1
+#define EOLANNOTATION_BOXED 0x2
+#define EOLANNOTATION_STADIUM 0x100
+#define EOLANNOTATION_FLAT_CIRCLE 0x101
+#define EOLANNOTATION_ANGLE_CIRCLE 0x102
+#define EOLANNOTATION_CIRCLE_FLAT 0x110
+#define EOLANNOTATION_FLATS 0x111
+#define EOLANNOTATION_ANGLE_FLAT 0x112
+#define EOLANNOTATION_CIRCLE_ANGLE 0x120
+#define EOLANNOTATION_FLAT_ANGLE 0x121
+#define EOLANNOTATION_ANGLES 0x122
#define SCI_EOLANNOTATIONSETVISIBLE 2745
#define SCI_EOLANNOTATIONGETVISIBLE 2746
#define SCI_EOLANNOTATIONSETSTYLEOFFSET 2747
#define SCI_EOLANNOTATIONGETSTYLEOFFSET 2748
+#define SC_SUPPORTS_LINE_DRAWS_FINAL 0
+#define SC_SUPPORTS_PIXEL_DIVISIONS 1
+#define SC_SUPPORTS_FRACTIONAL_STROKE_WIDTH 2
+#define SC_SUPPORTS_TRANSLUCENT_STROKE 3
+#define SC_SUPPORTS_PIXEL_MODIFICATION 4
+#define SC_SUPPORTS_THREAD_SAFE_MEASURE_WIDTHS 5
+#define SCI_SUPPORTSFEATURE 2750
+#define SC_LINECHARACTERINDEX_NONE 0
+#define SC_LINECHARACTERINDEX_UTF32 1
+#define SC_LINECHARACTERINDEX_UTF16 2
+#define SCI_GETLINECHARACTERINDEX 2710
+#define SCI_ALLOCATELINECHARACTERINDEX 2711
+#define SCI_RELEASELINECHARACTERINDEX 2712
+#define SCI_LINEFROMINDEXPOSITION 2713
+#define SCI_INDEXPOSITIONFROMLINE 2714
#define SCI_STARTRECORD 3001
#define SCI_STOPRECORD 3002
-#define SCI_SETLEXER 4001
#define SCI_GETLEXER 4002
#define SCI_COLOURISE 4003
#define SCI_SETPROPERTY 4004
-// #define KEYWORDSET_MAX 8
#define KEYWORDSET_MAX 30
#define SCI_SETKEYWORDS 4005
-#define SCI_SETLEXERLANGUAGE 4006
-#define SCI_LOADLEXERLIBRARY 4007
#define SCI_GETPROPERTY 4008
#define SCI_GETPROPERTYEXPANDED 4009
#define SCI_GETPROPERTYINT 4010
@@ -1083,7 +1262,7 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SC_MOD_CHANGETABSTOPS 0x200000
#define SC_MOD_CHANGEEOLANNOTATION 0x400000
#define SC_MODEVENTMASKALL 0x7FFFFF
-#define SC_SEARCHRESULT_LINEBUFFERMAXLENGTH 2048
+#define SC_UPDATE_NONE 0x0
#define SC_UPDATE_CONTENT 0x1
#define SC_UPDATE_SELECTION 0x2
#define SC_UPDATE_V_SCROLL 0x4
@@ -1122,6 +1301,7 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SC_AC_TAB 3
#define SC_AC_NEWLINE 4
#define SC_AC_COMMAND 5
+#define SC_AC_SINGLE_CHOICE 6
#define SC_CHARACTERSOURCE_DIRECT_INPUT 0
#define SC_CHARACTERSOURCE_TENTATIVE_INPUT 1
#define SC_CHARACTERSOURCE_IME_RESULT 2
@@ -1163,21 +1343,11 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
#define SC_BIDIRECTIONAL_R2L 2
#define SCI_GETBIDIRECTIONAL 2708
#define SCI_SETBIDIRECTIONAL 2709
-#define SC_LINECHARACTERINDEX_NONE 0
-#define SC_LINECHARACTERINDEX_UTF32 1
-#define SC_LINECHARACTERINDEX_UTF16 2
-#define SCI_GETLINECHARACTERINDEX 2710
-#define SCI_ALLOCATELINECHARACTERINDEX 2711
-#define SCI_RELEASELINECHARACTERINDEX 2712
-#define SCI_LINEFROMINDEXPOSITION 2713
-#define SCI_INDEXPOSITIONFROMLINE 2714
#endif
+#define SC_SEARCHRESULT_LINEBUFFERMAXLENGTH 2048
#define SCI_GETBOOSTREGEXERRMSG 5000
-
-#define SCN_SCROLLED 2080
#define SCN_FOLDINGSTATECHANGED 2081
-
/* --Autogenerated -- end of section automatically generated from Scintilla.iface */
#endif
@@ -1186,20 +1356,42 @@ typedef sptr_t (*SciFnDirect)(sptr_t ptr, unsigned int iMessage, uptr_t wParam,
* CHARRANGE, TEXTRANGE, FINDTEXTEX, FORMATRANGE, and NMHDR structs.
* So older code that treats Scintilla as a RichEdit will work. */
-struct Sci_CharacterRange {
- Sci_PositionCR cpMin;
- Sci_PositionCR cpMax;
+//deprecated by N++ 2GB+ support via new scintilla interfaces from 5.2.3 (see https://www.scintilla.org/ScintillaHistory.html),
+//please use SCI_GETTEXTRANGEFULL, SCI_FINDTEXTFULL, and SCI_FORMATRANGEFULL and corresponding defines/structs
+//struct Sci_CharacterRange {
+// Sci_PositionCR cpMin;
+// Sci_PositionCR cpMax;
+//};
+
+struct Sci_CharacterRangeFull {
+ Sci_Position cpMin;
+ Sci_Position cpMax;
};
-struct Sci_TextRange {
- struct Sci_CharacterRange chrg;
+//deprecated by N++ 2GB+ support via new scintilla interfaces from 5.2.3 (see https://www.scintilla.org/ScintillaHistory.html),
+//please use SCI_GETTEXTRANGEFULL, SCI_FINDTEXTFULL, and SCI_FORMATRANGEFULL and corresponding defines/structs
+//struct Sci_TextRange {
+// struct Sci_CharacterRange chrg;
+// char *lpstrText;
+//};
+
+struct Sci_TextRangeFull {
+ struct Sci_CharacterRangeFull chrg;
char *lpstrText;
};
-struct Sci_TextToFind {
- struct Sci_CharacterRange chrg;
+//deprecated by N++ 2GB+ support via new scintilla interfaces from 5.2.3 (see https://www.scintilla.org/ScintillaHistory.html),
+//please use SCI_GETTEXTRANGEFULL, SCI_FINDTEXTFULL, and SCI_FORMATRANGEFULL and corresponding defines/structs
+//struct Sci_TextToFind {
+// struct Sci_CharacterRange chrg;
+// const char *lpstrText;
+// struct Sci_CharacterRange chrgText;
+//};
+
+struct Sci_TextToFindFull {
+ struct Sci_CharacterRangeFull chrg;
const char *lpstrText;
- struct Sci_CharacterRange chrgText;
+ struct Sci_CharacterRangeFull chrgText;
};
typedef void *Sci_SurfaceID;
@@ -1214,17 +1406,27 @@ struct Sci_Rectangle {
/* This structure is used in printing and requires some of the graphics types
* from Platform.h. Not needed by most client code. */
-struct Sci_RangeToFormat {
+//deprecated by N++ 2GB+ support via new scintilla interfaces from 5.2.3 (see https://www.scintilla.org/ScintillaHistory.html),
+//please use SCI_GETTEXTRANGEFULL, SCI_FINDTEXTFULL, and SCI_FORMATRANGEFULL and corresponding defines/structs
+//struct Sci_RangeToFormat {
+// Sci_SurfaceID hdc;
+// Sci_SurfaceID hdcTarget;
+// struct Sci_Rectangle rc;
+// struct Sci_Rectangle rcPage;
+// struct Sci_CharacterRange chrg;
+//};
+
+struct Sci_RangeToFormatFull {
Sci_SurfaceID hdc;
Sci_SurfaceID hdcTarget;
struct Sci_Rectangle rc;
struct Sci_Rectangle rcPage;
- struct Sci_CharacterRange chrg;
+ struct Sci_CharacterRangeFull chrg;
};
#ifndef __cplusplus
/* For the GTK+ platform, g-ir-scanner needs to have these typedefs. This
- * is not required in C++ code and actually seems to break ScintillaEditPy */
+ * is not required in C++ code and has caused problems in the past. */
typedef struct Sci_NotifyHeader Sci_NotifyHeader;
typedef struct SCNotification SCNotification;
#endif
@@ -1242,10 +1444,12 @@ struct SCNotification {
Sci_NotifyHeader nmhdr;
Sci_Position position;
/* SCN_STYLENEEDED, SCN_DOUBLECLICK, SCN_MODIFIED, SCN_MARGINCLICK, */
- /* SCN_NEEDSHOWN, SCN_DWELLSTART, SCN_DWELLEND, SCN_CALLTIPCLICK, */
+ /* SCN_MARGINRIGHTCLICK, SCN_NEEDSHOWN, SCN_DWELLSTART, SCN_DWELLEND, */
+ /* SCN_CALLTIPCLICK, */
/* SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK, SCN_HOTSPOTRELEASECLICK, */
/* SCN_INDICATORCLICK, SCN_INDICATORRELEASE, */
- /* SCN_USERLISTSELECTION, SCN_AUTOCSELECTION */
+ /* SCN_USERLISTSELECTION, SCN_AUTOCCOMPLETED, SCN_AUTOCSELECTION, */
+ /* SCN_AUTOCSELECTIONCHANGE */
int ch;
/* SCN_CHARADDED, SCN_KEY, SCN_AUTOCCOMPLETED, SCN_AUTOCSELECTION, */
@@ -1253,10 +1457,12 @@ struct SCNotification {
int modifiers;
/* SCN_KEY, SCN_DOUBLECLICK, SCN_HOTSPOTCLICK, SCN_HOTSPOTDOUBLECLICK, */
/* SCN_HOTSPOTRELEASECLICK, SCN_INDICATORCLICK, SCN_INDICATORRELEASE, */
+ /* SCN_MARGINCLICK, SCN_MARGINRIGHTCLICK */
int modificationType; /* SCN_MODIFIED */
const char *text;
- /* SCN_MODIFIED, SCN_USERLISTSELECTION, SCN_AUTOCSELECTION, SCN_URIDROPPED */
+ /* SCN_MODIFIED, SCN_USERLISTSELECTION, SCN_URIDROPPED, */
+ /* SCN_AUTOCCOMPLETED, SCN_AUTOCSELECTION, SCN_AUTOCSELECTIONCHANGE */
Sci_Position length; /* SCN_MODIFIED */
Sci_Position linesAdded; /* SCN_MODIFIED */
@@ -1266,28 +1472,27 @@ struct SCNotification {
Sci_Position line; /* SCN_MODIFIED */
int foldLevelNow; /* SCN_MODIFIED */
int foldLevelPrev; /* SCN_MODIFIED */
- int margin; /* SCN_MARGINCLICK */
- int listType; /* SCN_USERLISTSELECTION */
+ int margin; /* SCN_MARGINCLICK, SCN_MARGINRIGHTCLICK */
+ int listType; /* SCN_USERLISTSELECTION, SCN_AUTOCSELECTIONCHANGE */
int x; /* SCN_DWELLSTART, SCN_DWELLEND */
int y; /* SCN_DWELLSTART, SCN_DWELLEND */
int token; /* SCN_MODIFIED with SC_MOD_CONTAINER */
Sci_Position annotationLinesAdded; /* SCN_MODIFIED with SC_MOD_CHANGEANNOTATION */
int updated; /* SCN_UPDATEUI */
int listCompletionMethod;
- /* SCN_AUTOCSELECTION, SCN_AUTOCCOMPLETED, SCN_USERLISTSELECTION, */
+ /* SCN_AUTOCSELECTION, SCN_AUTOCCOMPLETED, SCN_USERLISTSELECTION */
int characterSource; /* SCN_CHARADDED */
};
-struct SearchResultMarking {
- long _start;
- long _end;
+#include
+struct SearchResultMarkingLine { // each line could have several segments if user want to see only 1 found line which contains several results
+ std::vector> _segmentPostions; // a vector of pair of start & end of occurrence for colourizing
};
struct SearchResultMarkings {
- long _length;
- SearchResultMarking *_markings;
+ intptr_t _length;
+ SearchResultMarkingLine *_markings;
};
-
#ifdef INCLUDE_DEPRECATED_FEATURES
#define SCI_SETKEYSUNICODE 2521
diff --git a/NppExec/Release/NppExec/menuCmdID.h b/NppExec/Release/NppExec/menuCmdID.h
index 9a76213..85efc46 100644
--- a/NppExec/Release/NppExec/menuCmdID.h
+++ b/NppExec/Release/NppExec/menuCmdID.h
@@ -1,5 +1,5 @@
// This file is part of Notepad++ project
-// Copyright (C)2021 Don HO
+// Copyright (C)2025 Don HO
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
@@ -43,14 +43,15 @@
#define IDM_FILE_OPEN_FOLDER (IDM_FILE + 19)
#define IDM_FILE_OPEN_CMD (IDM_FILE + 20)
#define IDM_FILE_RESTORELASTCLOSEDFILE (IDM_FILE + 21)
- #define IDM_FILE_OPENFOLDERASWORSPACE (IDM_FILE + 22)
+ #define IDM_FILE_OPENFOLDERASWORKSPACE (IDM_FILE + 22)
#define IDM_FILE_OPEN_DEFAULT_VIEWER (IDM_FILE + 23)
#define IDM_FILE_CLOSEALL_UNCHANGED (IDM_FILE + 24)
#define IDM_FILE_CONTAININGFOLDERASWORKSPACE (IDM_FILE + 25)
+ #define IDM_FILE_CLOSEALL_BUT_PINNED (IDM_FILE + 26)
// IMPORTANT: If list above is modified, you have to change the following values:
// To be updated if new menu item(s) is (are) added in menu "File"
- #define IDM_FILEMENU_LASTONE IDM_FILE_CONTAININGFOLDERASWORKSPACE
+ #define IDM_FILEMENU_LASTONE IDM_FILE_CLOSEALL_BUT_PINNED
// 0 based position of command "Exit" including the bars in the file menu
// and without counting "Recent files history" items
@@ -68,7 +69,7 @@
//10 Rename...
//11 Close
//12 Close All
-//13 Close More
+//13 Close Multiple Documents
//14 Move to Recycle Bin
//15 --------
//16 Load Session...
@@ -109,12 +110,12 @@
#define IDM_MACRO_SAVECURRENTMACRO (IDM_EDIT + 25)
#define IDM_EDIT_RTL (IDM_EDIT + 26)
#define IDM_EDIT_LTR (IDM_EDIT + 27)
- #define IDM_EDIT_SETREADONLY (IDM_EDIT + 28)
+ #define IDM_EDIT_TOGGLEREADONLY (IDM_EDIT + 28)
#define IDM_EDIT_FULLPATHTOCLIP (IDM_EDIT + 29)
#define IDM_EDIT_FILENAMETOCLIP (IDM_EDIT + 30)
#define IDM_EDIT_CURRENTDIRTOCLIP (IDM_EDIT + 31)
#define IDM_MACRO_RUNMULTIMACRODLG (IDM_EDIT + 32)
- #define IDM_EDIT_CLEARREADONLY (IDM_EDIT + 33)
+ #define IDM_EDIT_TOGGLESYSTEMREADONLY (IDM_EDIT + 33)
#define IDM_EDIT_COLUMNMODE (IDM_EDIT + 34)
#define IDM_EDIT_BLOCK_COMMENT_SET (IDM_EDIT + 35)
#define IDM_EDIT_BLOCK_UNCOMMENT (IDM_EDIT + 36)
@@ -165,11 +166,33 @@
#define IDM_EDIT_SORTLINES_LEXICO_CASE_INSENS_DESCENDING (IDM_EDIT + 81)
#define IDM_EDIT_COPY_LINK (IDM_EDIT + 82)
#define IDM_EDIT_SORTLINES_REVERSE_ORDER (IDM_EDIT + 83)
+ #define IDM_EDIT_INSERT_DATETIME_SHORT (IDM_EDIT + 84)
+ #define IDM_EDIT_INSERT_DATETIME_LONG (IDM_EDIT + 85)
+ #define IDM_EDIT_INSERT_DATETIME_CUSTOMIZED (IDM_EDIT + 86)
+ #define IDM_EDIT_COPY_ALL_NAMES (IDM_EDIT + 87)
+ #define IDM_EDIT_COPY_ALL_PATHS (IDM_EDIT + 88)
+ #define IDM_EDIT_BEGINENDSELECT_COLUMNMODE (IDM_EDIT + 89)
+ #define IDM_EDIT_MULTISELECTALL (IDM_EDIT + 90)
+ #define IDM_EDIT_MULTISELECTALLMATCHCASE (IDM_EDIT + 91)
+ #define IDM_EDIT_MULTISELECTALLWHOLEWORD (IDM_EDIT + 92)
+ #define IDM_EDIT_MULTISELECTALLMATCHCASEWHOLEWORD (IDM_EDIT + 93)
+ #define IDM_EDIT_MULTISELECTNEXT (IDM_EDIT + 94)
+ #define IDM_EDIT_MULTISELECTNEXTMATCHCASE (IDM_EDIT + 95)
+ #define IDM_EDIT_MULTISELECTNEXTWHOLEWORD (IDM_EDIT + 96)
+ #define IDM_EDIT_MULTISELECTNEXTMATCHCASEWHOLEWORD (IDM_EDIT + 97)
+ #define IDM_EDIT_MULTISELECTUNDO (IDM_EDIT + 98)
+ #define IDM_EDIT_MULTISELECTSSKIP (IDM_EDIT + 99)
+ #define IDM_EDIT_SORTLINES_LOCALE_ASCENDING (IDM_EDIT + 100)
+ #define IDM_EDIT_SORTLINES_LOCALE_DESCENDING (IDM_EDIT + 101)
+ #define IDM_EDIT_SETREADONLYFORALLDOCS (IDM_EDIT + 102)
+ #define IDM_EDIT_CLEARREADONLYFORALLDOCS (IDM_EDIT + 103)
#define IDM_EDIT_AUTOCOMPLETE (50000 + 0)
#define IDM_EDIT_AUTOCOMPLETE_CURRENTFILE (50000 + 1)
#define IDM_EDIT_FUNCCALLTIP (50000 + 2)
#define IDM_EDIT_AUTOCOMPLETE_PATH (50000 + 6)
+ #define IDM_EDIT_FUNCCALLTIP_PREVIOUS (50000 + 10)
+ #define IDM_EDIT_FUNCCALLTIP_NEXT (50000 + 11)
#define IDM_SEARCH (IDM + 3000)
@@ -243,41 +266,47 @@
#define IDM_SEARCH_MARKONEEXT4 (IDM_SEARCH + 65)
#define IDM_SEARCH_MARKONEEXT5 (IDM_SEARCH + 66)
+ #define IDM_SEARCH_CHANGED_NEXT (IDM_SEARCH + 67)
+ #define IDM_SEARCH_CHANGED_PREV (IDM_SEARCH + 68)
+ #define IDM_SEARCH_CLEAR_CHANGE_HISTORY (IDM_SEARCH + 69)
+
#define IDM_MISC (IDM + 3500)
- #define IDM_FILESWITCHER_FILESCLOSE (IDM_MISC + 1)
- #define IDM_FILESWITCHER_FILESCLOSEOTHERS (IDM_MISC + 2)
+ #define IDM_DOCLIST_FILESCLOSE (IDM_MISC + 1)
+ #define IDM_DOCLIST_FILESCLOSEOTHERS (IDM_MISC + 2)
+ #define IDM_DOCLIST_COPYNAMES (IDM_MISC + 3)
+ #define IDM_DOCLIST_COPYPATHS (IDM_MISC + 4)
#define IDM_VIEW (IDM + 4000)
//#define IDM_VIEW_TOOLBAR_HIDE (IDM_VIEW + 1)
- #define IDM_VIEW_TOOLBAR_REDUCE (IDM_VIEW + 2)
- #define IDM_VIEW_TOOLBAR_ENLARGE (IDM_VIEW + 3)
- #define IDM_VIEW_TOOLBAR_STANDARD (IDM_VIEW + 4)
- #define IDM_VIEW_REDUCETABBAR (IDM_VIEW + 5)
- #define IDM_VIEW_LOCKTABBAR (IDM_VIEW + 6)
- #define IDM_VIEW_DRAWTABBAR_TOPBAR (IDM_VIEW + 7)
- #define IDM_VIEW_DRAWTABBAR_INACIVETAB (IDM_VIEW + 8)
+ //#define IDM_VIEW_TOOLBAR_REDUCE (IDM_VIEW + 2)
+ //#define IDM_VIEW_TOOLBAR_ENLARGE (IDM_VIEW + 3)
+ //#define IDM_VIEW_TOOLBAR_STANDARD (IDM_VIEW + 4)
+ //#define IDM_VIEW_REDUCETABBAR (IDM_VIEW + 5)
+ //#define IDM_VIEW_LOCKTABBAR (IDM_VIEW + 6)
+ //#define IDM_VIEW_DRAWTABBAR_TOPBAR (IDM_VIEW + 7)
+ //#define IDM_VIEW_DRAWTABBAR_INACTIVETAB (IDM_VIEW + 8)
#define IDM_VIEW_POSTIT (IDM_VIEW + 9)
- #define IDM_VIEW_TOGGLE_FOLDALL (IDM_VIEW + 10)
+ #define IDM_VIEW_FOLDALL (IDM_VIEW + 10)
#define IDM_VIEW_DISTRACTIONFREE (IDM_VIEW + 11)
- #define IDM_VIEW_LINENUMBER (IDM_VIEW + 12)
- #define IDM_VIEW_SYMBOLMARGIN (IDM_VIEW + 13)
- #define IDM_VIEW_FOLDERMAGIN (IDM_VIEW + 14)
- #define IDM_VIEW_FOLDERMAGIN_SIMPLE (IDM_VIEW + 15)
- #define IDM_VIEW_FOLDERMAGIN_ARROW (IDM_VIEW + 16)
- #define IDM_VIEW_FOLDERMAGIN_CIRCLE (IDM_VIEW + 17)
- #define IDM_VIEW_FOLDERMAGIN_BOX (IDM_VIEW + 18)
+ //#define IDM_VIEW_LINENUMBER (IDM_VIEW + 12)
+ //#define IDM_VIEW_SYMBOLMARGIN (IDM_VIEW + 13)
+ //#define IDM_VIEW_FOLDERMARGIN (IDM_VIEW + 14)
+ //#define IDM_VIEW_FOLDERMARGIN_SIMPLE (IDM_VIEW + 15)
+ //#define IDM_VIEW_FOLDERMARGIN_ARROW (IDM_VIEW + 16)
+ //#define IDM_VIEW_FOLDERMARGIN_CIRCLE (IDM_VIEW + 17)
+ //#define IDM_VIEW_FOLDERMARGIN_BOX (IDM_VIEW + 18)
#define IDM_VIEW_ALL_CHARACTERS (IDM_VIEW + 19)
#define IDM_VIEW_INDENT_GUIDE (IDM_VIEW + 20)
- #define IDM_VIEW_CURLINE_HILITING (IDM_VIEW + 21)
+ //#define IDM_VIEW_CURLINE_HILITING (IDM_VIEW + 21)
#define IDM_VIEW_WRAP (IDM_VIEW + 22)
#define IDM_VIEW_ZOOMIN (IDM_VIEW + 23)
#define IDM_VIEW_ZOOMOUT (IDM_VIEW + 24)
#define IDM_VIEW_TAB_SPACE (IDM_VIEW + 25)
#define IDM_VIEW_EOL (IDM_VIEW + 26)
- #define IDM_VIEW_TOOLBAR_REDUCE_SET2 (IDM_VIEW + 27)
- #define IDM_VIEW_TOOLBAR_ENLARGE_SET2 (IDM_VIEW + 28)
- #define IDM_VIEW_TOGGLE_UNFOLDALL (IDM_VIEW + 29)
+ //#define IDM_VIEW_TOOLBAR_REDUCE_SET2 (IDM_VIEW + 27)
+ //#define IDM_VIEW_TOOLBAR_ENLARGE_SET2 (IDM_VIEW + 28)
+ #define IDM_VIEW_UNFOLDALL (IDM_VIEW + 29)
#define IDM_VIEW_FOLD_CURRENT (IDM_VIEW + 30)
#define IDM_VIEW_UNFOLD_CURRENT (IDM_VIEW + 31)
#define IDM_VIEW_FULLSCREENTOGGLE (IDM_VIEW + 32)
@@ -286,17 +315,17 @@
#define IDM_VIEW_SYNSCROLLV (IDM_VIEW + 35)
#define IDM_VIEW_SYNSCROLLH (IDM_VIEW + 36)
//#define IDM_VIEW_EDGENONE (IDM_VIEW + 37)
- #define IDM_VIEW_DRAWTABBAR_CLOSEBOTTUN (IDM_VIEW + 38)
- #define IDM_VIEW_DRAWTABBAR_DBCLK2CLOSE (IDM_VIEW + 39)
- #define IDM_VIEW_REFRESHTABAR (IDM_VIEW + 40)
+ //#define IDM_VIEW_DRAWTABBAR_CLOSEBOTTUN (IDM_VIEW + 38)
+ //#define IDM_VIEW_DRAWTABBAR_DBCLK2CLOSE (IDM_VIEW + 39)
+ //#define IDM_VIEW_REFRESHTABAR (IDM_VIEW + 40)
#define IDM_VIEW_WRAP_SYMBOL (IDM_VIEW + 41)
#define IDM_VIEW_HIDELINES (IDM_VIEW + 42)
- #define IDM_VIEW_DRAWTABBAR_VERTICAL (IDM_VIEW + 43)
- #define IDM_VIEW_DRAWTABBAR_MULTILINE (IDM_VIEW + 44)
- #define IDM_VIEW_DOCCHANGEMARGIN (IDM_VIEW + 45)
- #define IDM_VIEW_LWDEF (IDM_VIEW + 46)
- #define IDM_VIEW_LWALIGN (IDM_VIEW + 47)
- #define IDM_VIEW_LWINDENT (IDM_VIEW + 48)
+ //#define IDM_VIEW_DRAWTABBAR_VERTICAL (IDM_VIEW + 43)
+ //#define IDM_VIEW_DRAWTABBAR_MULTILINE (IDM_VIEW + 44)
+ //#define IDM_VIEW_DOCCHANGEMARGIN (IDM_VIEW + 45)
+ //#define IDM_VIEW_LWDEF (IDM_VIEW + 46)
+ //#define IDM_VIEW_LWALIGN (IDM_VIEW + 47)
+ #define IDM_PINTAB (IDM_VIEW + 48)
#define IDM_VIEW_SUMMARY (IDM_VIEW + 49)
#define IDM_VIEW_FOLD (IDM_VIEW + 50)
@@ -319,7 +348,7 @@
#define IDM_VIEW_UNFOLD_7 (IDM_VIEW_UNFOLD + 7)
#define IDM_VIEW_UNFOLD_8 (IDM_VIEW_UNFOLD + 8)
- #define IDM_VIEW_FILESWITCHER_PANEL (IDM_VIEW + 70)
+ #define IDM_VIEW_DOCLIST (IDM_VIEW + 70)
#define IDM_VIEW_SWITCHTO_OTHER_VIEW (IDM_VIEW + 72)
#define IDM_EXPORT_FUNC_LIST_AND_QUIT (IDM_VIEW + 73)
@@ -356,12 +385,26 @@
#define IDM_VIEW_SWITCHTO_PROJECT_PANEL_3 (IDM_VIEW + 106)
#define IDM_VIEW_SWITCHTO_FILEBROWSER (IDM_VIEW + 107)
#define IDM_VIEW_SWITCHTO_FUNC_LIST (IDM_VIEW + 108)
+ #define IDM_VIEW_SWITCHTO_DOCLIST (IDM_VIEW + 109)
+
+ #define IDM_VIEW_TAB_COLOUR_NONE (IDM_VIEW + 110)
+ #define IDM_VIEW_TAB_COLOUR_1 (IDM_VIEW + 111)
+ #define IDM_VIEW_TAB_COLOUR_2 (IDM_VIEW + 112)
+ #define IDM_VIEW_TAB_COLOUR_3 (IDM_VIEW + 113)
+ #define IDM_VIEW_TAB_COLOUR_4 (IDM_VIEW + 114)
+ #define IDM_VIEW_TAB_COLOUR_5 (IDM_VIEW + 115)
+ #define IDM_VIEW_TAB_START (IDM_VIEW + 116)
+ #define IDM_VIEW_TAB_END (IDM_VIEW + 117)
+
+ #define IDM_VIEW_NPC (IDM_VIEW + 130)
+ #define IDM_VIEW_NPC_CCUNIEOL (IDM_VIEW + 131)
#define IDM_VIEW_GOTO_ANOTHER_VIEW 10001
#define IDM_VIEW_CLONE_TO_ANOTHER_VIEW 10002
#define IDM_VIEW_GOTO_NEW_INSTANCE 10003
#define IDM_VIEW_LOAD_IN_NEW_INSTANCE 10004
-
+ #define IDM_VIEW_GOTO_START 10005
+ #define IDM_VIEW_GOTO_END 10006
#define IDM_FORMAT (IDM + 5000)
#define IDM_FORMAT_TODOS (IDM_FORMAT + 1)
@@ -430,7 +473,6 @@
#define IDM_FORMAT_KOI8R_CYRILLIC (IDM_FORMAT_ENCODE + 48)
#define IDM_FORMAT_ENCODE_END IDM_FORMAT_KOI8R_CYRILLIC
- //#define IDM_FORMAT_CONVERT 200
#define IDM_LANG (IDM + 6000)
#define IDM_LANGSTYLE_CONFIG_DLG (IDM_LANG + 1)
@@ -516,14 +558,25 @@
#define IDM_LANG_SPICE (IDM_LANG + 81)
#define IDM_LANG_TXT2TAGS (IDM_LANG + 82)
#define IDM_LANG_VISUALPROLOG (IDM_LANG + 83)
+ #define IDM_LANG_TYPESCRIPT (IDM_LANG + 84)
+ #define IDM_LANG_JSON5 (IDM_LANG + 85)
+ #define IDM_LANG_MSSQL (IDM_LANG + 86)
+ #define IDM_LANG_GDSCRIPT (IDM_LANG + 87)
+ #define IDM_LANG_HOLLYWOOD (IDM_LANG + 88)
+ #define IDM_LANG_GOLANG (IDM_LANG + 89)
+ #define IDM_LANG_RAKU (IDM_LANG + 90)
+ #define IDM_LANG_TOML (IDM_LANG + 91)
+ #define IDM_LANG_SAS (IDM_LANG + 92)
+ #define IDM_LANG_ERRORLIST (IDM_LANG + 93)
#define IDM_LANG_EXTERNAL (IDM_LANG + 165)
#define IDM_LANG_EXTERNAL_LIMIT (IDM_LANG + 179)
#define IDM_LANG_USER (IDM_LANG + 180) //46180: Used for translation
- #define IDM_LANG_USER_LIMIT (IDM_LANG + 210) //46210: Ajust with IDM_LANG_USER
+ #define IDM_LANG_USER_LIMIT (IDM_LANG + 210) //46210: Adjust with IDM_LANG_USER
#define IDM_LANG_USER_DLG (IDM_LANG + 250) //46250: Used for translation
#define IDM_LANG_OPENUDLDIR (IDM_LANG + 300)
+ #define IDM_LANG_UDLCOLLECTION_PROJECT_SITE (IDM_LANG + 301)
@@ -534,7 +587,7 @@
#define IDM_FORUM (IDM_ABOUT + 4)
//#define IDM_PLUGINSHOME (IDM_ABOUT + 5)
#define IDM_UPDATE_NPP (IDM_ABOUT + 6)
- #define IDM_WIKIFAQ (IDM_ABOUT + 7)
+ //#define IDM_WIKIFAQ (IDM_ABOUT + 7)
//#define IDM_HELP (IDM_ABOUT + 8)
#define IDM_CONFUPDATERPROXY (IDM_ABOUT + 9)
#define IDM_CMDLINEARGUMENTS (IDM_ABOUT + 10)
@@ -543,12 +596,12 @@
#define IDM_SETTING (IDM + 8000)
-// #define IDM_SETTING_TAB_SIZE (IDM_SETTING + 1)
-// #define IDM_SETTING_TAB_REPLCESPACE (IDM_SETTING + 2)
-// #define IDM_SETTING_HISTORY_SIZE (IDM_SETTING + 3)
-// #define IDM_SETTING_EDGE_SIZE (IDM_SETTING + 4)
+// #define IDM_SETTING_TAB_SIZE (IDM_SETTING + 1)
+// #define IDM_SETTING_TAB_REPLACESPACE (IDM_SETTING + 2)
+// #define IDM_SETTING_HISTORY_SIZE (IDM_SETTING + 3)
+// #define IDM_SETTING_EDGE_SIZE (IDM_SETTING + 4)
#define IDM_SETTING_IMPORTPLUGIN (IDM_SETTING + 5)
- #define IDM_SETTING_IMPORTSTYLETHEMS (IDM_SETTING + 6)
+ #define IDM_SETTING_IMPORTSTYLETHEMES (IDM_SETTING + 6)
#define IDM_SETTING_TRAYICON (IDM_SETTING + 8)
#define IDM_SETTING_SHORTCUT_MAPPER (IDM_SETTING + 9)
#define IDM_SETTING_REMEMBER_LAST_SESSION (IDM_SETTING + 10)
@@ -566,6 +619,12 @@
#define IDM_TOOL_SHA256_GENERATE (IDM_TOOL + 4)
#define IDM_TOOL_SHA256_GENERATEFROMFILE (IDM_TOOL + 5)
#define IDM_TOOL_SHA256_GENERATEINTOCLIPBOARD (IDM_TOOL + 6)
+ #define IDM_TOOL_SHA1_GENERATE (IDM_TOOL + 7)
+ #define IDM_TOOL_SHA1_GENERATEFROMFILE (IDM_TOOL + 8)
+ #define IDM_TOOL_SHA1_GENERATEINTOCLIPBOARD (IDM_TOOL + 9)
+ #define IDM_TOOL_SHA512_GENERATE (IDM_TOOL + 10)
+ #define IDM_TOOL_SHA512_GENERATEFROMFILE (IDM_TOOL + 11)
+ #define IDM_TOOL_SHA512_GENERATEINTOCLIPBOARD (IDM_TOOL + 12)
#define IDM_EXECUTE (IDM + 9000)
@@ -575,3 +634,24 @@
#define IDM_SYSTRAYPOPUP_NEW_AND_PASTE (IDM_SYSTRAYPOPUP + 3)
#define IDM_SYSTRAYPOPUP_OPENFILE (IDM_SYSTRAYPOPUP + 4)
#define IDM_SYSTRAYPOPUP_CLOSE (IDM_SYSTRAYPOPUP + 5)
+
+#define IDR_WINDOWS_MENU 11000
+ #define IDM_WINDOW_WINDOWS (IDR_WINDOWS_MENU + 1)
+ #define IDM_WINDOW_SORT_FN_ASC (IDR_WINDOWS_MENU + 2)
+ #define IDM_WINDOW_SORT_FN_DSC (IDR_WINDOWS_MENU + 3)
+ #define IDM_WINDOW_SORT_FP_ASC (IDR_WINDOWS_MENU + 4)
+ #define IDM_WINDOW_SORT_FP_DSC (IDR_WINDOWS_MENU + 5)
+ #define IDM_WINDOW_SORT_FT_ASC (IDR_WINDOWS_MENU + 6)
+ #define IDM_WINDOW_SORT_FT_DSC (IDR_WINDOWS_MENU + 7)
+ #define IDM_WINDOW_SORT_FS_ASC (IDR_WINDOWS_MENU + 8)
+ #define IDM_WINDOW_SORT_FS_DSC (IDR_WINDOWS_MENU + 9)
+ #define IDM_WINDOW_SORT_FD_ASC (IDR_WINDOWS_MENU + 10)
+ #define IDM_WINDOW_SORT_FD_DSC (IDR_WINDOWS_MENU + 11)
+ #define IDM_WINDOW_MRU_FIRST (IDR_WINDOWS_MENU + 20)
+ #define IDM_WINDOW_MRU_LIMIT (IDR_WINDOWS_MENU + 59)
+ #define IDM_WINDOW_COPY_NAME (IDM_WINDOW_MRU_LIMIT + 1)
+ #define IDM_WINDOW_COPY_PATH (IDM_WINDOW_MRU_LIMIT + 2)
+
+#define IDR_DROPLIST_MENU 14000
+ #define IDM_DROPLIST_LIST (IDR_DROPLIST_MENU + 1)
+ #define IDM_DROPLIST_MRU_FIRST (IDR_DROPLIST_MENU + 20)
diff --git a/NppExec/doc/NppExec/NppExec_Manual.chm b/NppExec/doc/NppExec/NppExec_Manual.chm
deleted file mode 100644
index a9b5d5d..0000000
Binary files a/NppExec/doc/NppExec/NppExec_Manual.chm and /dev/null differ
diff --git a/NppExec/doc/NppExec/NppExec_Manual/2.4.html b/NppExec/doc/NppExec/NppExec_Manual/2.4.html
deleted file mode 100644
index b50ddf0..0000000
--- a/NppExec/doc/NppExec/NppExec_Manual/2.4.html
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-2.4. Using several copies of NppExec
-
-
-
2.4. Using several copies of NppExec
-
You can have several copies of "NppExec.dll" in
- your Notepad++'es Plugins subfolder in order to have several NppExec's Console
- windows. Each copy of NppExec saves its own options and its own console commands
- history (if it is enabled in NppExec's options). In the same time, saved
-NppExec's scripts are shared between several copies of NppExec.
-
To have several copies of "NppExec.dll", just copy it with different name(s), for example, "NppExec2.dll", "NppExecCpp.dll", "NppExecWeb.dll" and so on. This will give you additional NppExec's Console windows with the corresponding titles: "Console2", "ConsoleCpp", "ConsoleWeb" and
-so on.
NppExec's script is a set of NppExec's
- commands. NppExec's command can be an internal command such as "cls", "npp_save", "npe_debuglog" etc. or it can be a (path)name of an executable such as "cmd", "calc", "C:\tools\tcc\tcc.exe" etc.
- Each command, depending on its meaning, can have one or more parameters.
-For example:
and
- so on. You can use "//" to comment a whole line or right part of a line (after "//"):
-
-
// this is a comment
-ECHO You'll see this // but not this (comment)
-
-
You
- can create and save NppExec's scripts using the "Execute NppExec Script..." dialog [3.6]. However, NppExec's script can also be located in a text file. I.e. you can create a text file which contains some NppExec's commands (one command per one line) and then execute this file (commands from this file) in NppExec. Such text file can be an ANSI file for ANSI version of NppExec and can be an ANSI or Unicode (UCS-2 LE/UCS-2 BE/UTF-8) file for Unicode version of NppExec. Note that Unicode text file must contain leading "BOM" bytes to be recognized by Unicode version of NppExec (by default, these bytes are present - until you force saving without "BOM"). To execute NppExec's script from a text file, use the "npp_exec" command.
- This command allows to execute commands from a previously saved (internal)
- script or from an (external) text file.
-
As you can store your NppExec's script in a text file, you can edit such file
- directly in Notepad++ and execute it with the following command(s):
-
-
NPP_SAVE // save current file (NppExec's script)...
-NPP_EXEC "$(FULL_CURRENT_PATH)" // ...and execute it
-
-
With the Console Commands History enabled, you can type this command:
-
-
NPP_EXEC "$(FULL_CURRENT_PATH)"
-
-
in NppExec's Console once, then use the Arrow Up key to repeat this command. However, be sure to save current file (with Ctrl+S) before executing it.
-
To create a menu item for NppExec's script, use NppExec's Advanced Options dialog. Then a shortcut key can be assigned to it:
-
-
Create a menu item for the script using Plugins -> NppExec -> Advanced options (select a script in the "Associated script" drop-down list, specify its menu item name - by default it's the same as the script name - and press the "Add/Modify" button).
-
Restart Notepad++ to get this new menu item.
-
Assign a shortcut key to this new menu item using Notepad++'es Settings -> Shortcut Mapper -> Plugin commands (you'll find the menu item there).
-
-
-
NppExec stores your scripts in Notepad++'es "$(PLUGINS_CONFIG_DIR)" folder. The "npes_saved.txt" file stores all the scripts except the temporary one which is stored inside "npes_temp.txt".
-
See also: "Execute NppExec Script..." [3.6]; Run-time parameters [4.3].
Running "python -?" gives the following help information, in particular:
-
-
-i : inspect interactively after running script, (also PYTHONINSPECT=x) and force prompts, even if stdin does not appear to be a terminal
-
-u : unbuffered binary stdout and stderr (also PYTHONUNBUFFERED=x) see man page for details on internal buffering relating to '-u'
-
-
The text in italic exactly refers to what is stated in NppExec's Manual, sections 1.3 and 3.1 by "NppExec is not a console emulator".
-
So, by running "python -i -u" in NppExec's Console, you get the interactive Python inside Notepad++.
-
Here is an advanced example of NppExec's script to be used to test a Python's program interactively:
-
-
npp_console local - // disable any output to the Console
-npp_save // save current file (a .py file is expected)
-cd "$(CURRENT_DIRECTORY)" // use the current file's dir
-set local @exit_cmd_silent = exit() // allows to exit Python automatically
-env_set local PATH = $(SYS.PATH);C:\Python27 // use Python 2.7
-npp_setfocus con // set the focus to the Console
-npp_console local + // enable output to the Console
-python -i -u "$(FILE_NAME)" // run Python's program interactively
-
-
-
-
-
-
-
2. Python and UTF-8
-
If your python's program contains some non-ASCII characters, you can get the following error from Python: "SyntaxError: Non-ASCII character".
-
To be able to represent such non-ASCII characters correctly on any system,
-such source file should be saved as UTF-8 (either without BOM or with BOM).
-Though the error mentioned above still remains.
-To avoid this error, acccording to http://www.python.org/dev/peps/pep-0263/ ,
-you just need to specify
-
-
# coding=utf-8
-
-
or
-
-
# -*- coding: utf-8 -*-
-
-
at the beginning of your python's program.
-
Another thing is to output something to console as UTF-8.
-
In this case, you can get something similar from Python: "UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-2: character maps to <undefined>".
-
To fix this last one, it's enough to specify the environment variable PYTHONIOENCODING by setting it to "utf-8". I.e.
-
-
// within NppExec
-env_set PYTHONIOENCODING=utf-8
-python my_program.py
-
-
-
-
-
-
3. Running Python scripts using wxPython
-
[the text below has been originally posted by cioma in NppExec's forum]
-
[ cioma: ]
-
-
I use NPP as an IDE for Python. And I use NppExec to run scripts directly from NPP, highlight script syntax and runtime errors (if any) and link errors to a line of code.
-
Some time ago I started using wxPython GUI library and faced problems with running such scripts from within NppExec.
-
If I run this (in NppExec prompt):
-
-
python -t -B -u "$(FULL_CURRENT_PATH)"
-
-
...then GUI part of wxPython is not shown. I guess the reason is that wxPython requires a "real" console buffer and NppExec doesn't provide that.
-
If I just run script over NPP "Run" dialog (no NppExec) then GUI is shown but if there are errors there is no way to easily relate them to line of code in NPP.
-
So I found this solution to work:
-
1. When creating wxPython application in the script make sure it's STDOUT is not redirected:
-
-
app = App(redirect=False)
-
-
2. Run in NppExec:
-
-
cmd /C python -t -B -u "$(FULL_CURRENT_PATH)"
-
-
Voila! We have both wxPython GUI running and its STDOUT redirected to NppExec.
-
-
[ DV: ]
-
-
Just one thing. For more details regarding runtime errors parsing (keyword: Highlight filters), refer to [4.7.4] and "help con_filter".
-
-
-
diff --git a/NppExec/doc/NppExec/NppExec_Manual/4.6.8.html b/NppExec/doc/NppExec/NppExec_Manual/4.6.8.html
deleted file mode 100644
index 3166b57..0000000
--- a/NppExec/doc/NppExec/NppExec_Manual/4.6.8.html
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-4.6.8. Clipboard, keysrokes and much more
-
-
-
4.6.8. Clipboard, keysrokes and much more
-
-
You can always extend NppExec's functionality by using different external tools.
-
For example:
-
-
NirCmd (http://www.nirsoft.net) allows to work with the clipboard, send keystrokes to the system, modify the Registry and ini-files - and much more;
-
Swiss File Knife (http://sourceforge.net/projects/swissfileknife/) allows various operations on text and binary files;
-
wget (http://gnuwin32.sourceforge.net/packages/wget.htm) allows to download from the network;
-
winapiexec (http://rammichael.com/winapiexec) allows to run WinAPI functions through command line parameters.
-
-
The list of such useful programs can go on and on - and the main idea here is the ability of "communication" between these programs and NppExec. As you can use different tools with different parameters and then retrieve and process the produced output, there theoretically is no limit of what you can achieve by this approach. This reminds us the section [3.1]: "So, generally speaking, NppExec is a tool" - and what this tool can do for you depends on how you use it. So use it wisely :)