diff --git a/elpa/python-mode-6.0.10/INSTALL b/elpa/python-mode-6.0.10/INSTALL
deleted file mode 100644
index 375bd860..00000000
--- a/elpa/python-mode-6.0.10/INSTALL
+++ /dev/null
@@ -1,24 +0,0 @@
-Put the respective lines into your Emacs initialisation file:
-
-(add-to-list 'load-path "PATH/TO/PYTHON-MODE/")
-(setq py-install-directory "PATH/TO/PYTHON-MODE/")
-(require 'python-mode)
-
-To change the Python default shell use
-
-M-x customize-variable py-shell-name
-
-or write
-
-(setq py-shell-name "MY-PYTHON")
-resp.
-(setq py-shell-name "PATH/TO/MY-PYTHON")
-
-IPython users for example may insert "ipython" with
-M-x customize-variable py-shell-name
-
-or in init-file
-
-(setq py-shell-name "ipython")
-resp.
-(setq py-shell-name "PATH/TO/ipython")
diff --git a/elpa/python-mode-6.0.10/LICENSE b/elpa/python-mode-6.0.10/LICENSE
deleted file mode 100644
index 94a9ed02..00000000
--- a/elpa/python-mode-6.0.10/LICENSE
+++ /dev/null
@@ -1,674 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc.
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users. We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors. You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
- To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights. Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received. You must make sure that they, too, receive
-or can get the source code. And you must show them these terms so they
-know their rights.
-
- Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
- For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software. For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
- Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so. This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software. The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable. Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products. If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
- Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary. To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- TERMS AND CONDITIONS
-
- 0. Definitions.
-
- "This License" refers to version 3 of the GNU General Public License.
-
- "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
- "The Program" refers to any copyrightable work licensed under this
-License. Each licensee is addressed as "you". "Licensees" and
-"recipients" may be individuals or organizations.
-
- To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy. The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
- A "covered work" means either the unmodified Program or a work based
-on the Program.
-
- To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy. Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
- To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies. Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
- An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License. If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
- 1. Source Code.
-
- The "source code" for a work means the preferred form of the work
-for making modifications to it. "Object code" means any non-source
-form of a work.
-
- A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
- The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form. A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
- The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities. However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work. For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
- The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
- The Corresponding Source for a work in source code form is that
-same work.
-
- 2. Basic Permissions.
-
- All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met. This License explicitly affirms your unlimited
-permission to run the unmodified Program. The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work. This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
- You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force. You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright. Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
- Conveying under any other circumstances is permitted solely under
-the conditions stated below. Sublicensing is not allowed; section 10
-makes it unnecessary.
-
- 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
- No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
- When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
- 4. Conveying Verbatim Copies.
-
- You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
- You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
- 5. Conveying Modified Source Versions.
-
- You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
- a) The work must carry prominent notices stating that you modified
- it, and giving a relevant date.
-
- b) The work must carry prominent notices stating that it is
- released under this License and any conditions added under section
- 7. This requirement modifies the requirement in section 4 to
- "keep intact all notices".
-
- c) You must license the entire work, as a whole, under this
- License to anyone who comes into possession of a copy. This
- License will therefore apply, along with any applicable section 7
- additional terms, to the whole of the work, and all its parts,
- regardless of how they are packaged. This License gives no
- permission to license the work in any other way, but it does not
- invalidate such permission if you have separately received it.
-
- d) If the work has interactive user interfaces, each must display
- Appropriate Legal Notices; however, if the Program has interactive
- interfaces that do not display Appropriate Legal Notices, your
- work need not make them do so.
-
- A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit. Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
- 6. Conveying Non-Source Forms.
-
- You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
- a) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by the
- Corresponding Source fixed on a durable physical medium
- customarily used for software interchange.
-
- b) Convey the object code in, or embodied in, a physical product
- (including a physical distribution medium), accompanied by a
- written offer, valid for at least three years and valid for as
- long as you offer spare parts or customer support for that product
- model, to give anyone who possesses the object code either (1) a
- copy of the Corresponding Source for all the software in the
- product that is covered by this License, on a durable physical
- medium customarily used for software interchange, for a price no
- more than your reasonable cost of physically performing this
- conveying of source, or (2) access to copy the
- Corresponding Source from a network server at no charge.
-
- c) Convey individual copies of the object code with a copy of the
- written offer to provide the Corresponding Source. This
- alternative is allowed only occasionally and noncommercially, and
- only if you received the object code with such an offer, in accord
- with subsection 6b.
-
- d) Convey the object code by offering access from a designated
- place (gratis or for a charge), and offer equivalent access to the
- Corresponding Source in the same way through the same place at no
- further charge. You need not require recipients to copy the
- Corresponding Source along with the object code. If the place to
- copy the object code is a network server, the Corresponding Source
- may be on a different server (operated by you or a third party)
- that supports equivalent copying facilities, provided you maintain
- clear directions next to the object code saying where to find the
- Corresponding Source. Regardless of what server hosts the
- Corresponding Source, you remain obligated to ensure that it is
- available for as long as needed to satisfy these requirements.
-
- e) Convey the object code using peer-to-peer transmission, provided
- you inform other peers where the object code and Corresponding
- Source of the work are being offered to the general public at no
- charge under subsection 6d.
-
- A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
- A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling. In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage. For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product. A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
- "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source. The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
- If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information. But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
- The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed. Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
- Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
- 7. Additional Terms.
-
- "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law. If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
- When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it. (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.) You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
- Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
- a) Disclaiming warranty or limiting liability differently from the
- terms of sections 15 and 16 of this License; or
-
- b) Requiring preservation of specified reasonable legal notices or
- author attributions in that material or in the Appropriate Legal
- Notices displayed by works containing it; or
-
- c) Prohibiting misrepresentation of the origin of that material, or
- requiring that modified versions of such material be marked in
- reasonable ways as different from the original version; or
-
- d) Limiting the use for publicity purposes of names of licensors or
- authors of the material; or
-
- e) Declining to grant rights under trademark law for use of some
- trade names, trademarks, or service marks; or
-
- f) Requiring indemnification of licensors and authors of that
- material by anyone who conveys the material (or modified versions of
- it) with contractual assumptions of liability to the recipient, for
- any liability that these contractual assumptions directly impose on
- those licensors and authors.
-
- All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10. If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term. If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
- If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
- Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
- 8. Termination.
-
- You may not propagate or modify a covered work except as expressly
-provided under this License. Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
- However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
- Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
- Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License. If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
- 9. Acceptance Not Required for Having Copies.
-
- You are not required to accept this License in order to receive or
-run a copy of the Program. Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance. However,
-nothing other than this License grants you permission to propagate or
-modify any covered work. These actions infringe copyright if you do
-not accept this License. Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
- Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License. You are not responsible
-for enforcing compliance by third parties with this License.
-
- An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations. If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
- You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License. For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
- 11. Patents.
-
- A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based. The
-work thus licensed is called the contributor's "contributor version".
-
- A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version. For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
- Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
- In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement). To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
- If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients. "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
- If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
- A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License. You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
- Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
- If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all. For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
- 13. Use with the GNU Affero General Public License.
-
- Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work. The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
- If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
- Later license versions may give you additional or different
-permissions. However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
- 15. Disclaimer of Warranty.
-
- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
- If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-
- 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/elpa/python-mode-6.0.10/NEWS b/elpa/python-mode-6.0.10/NEWS
deleted file mode 100644
index 88a6a5c5..00000000
--- a/elpa/python-mode-6.0.10/NEWS
+++ /dev/null
@@ -1,467 +0,0 @@
-Python Mode News
-================
-
-New in version 6.0.9
---------------------
-
-- autopair-mode delivered
- Credits to Joao Tavora http://autopair.googlecode.com
- see README-AUTOPAIR.org for details
-
-- Syntax highlighting in Python-shell buffers enabled
- boolean `py-fontify-shell-buffer-p', default is nil
-
-- py-add-abbrev, new command
- Similar to `add-mode-abbrev', but uses
- `py-partial-expression' before point for expansion to
- store, not `word'. Also provides a proposal for new
- abbrevs.
-
- Proposal for an abbrev is composed from the downcased
- initials of expansion - provided they are of char-class
- [:alpha:]
-
- For example code below would be recognised as a
- `py-expression' composed by three
- py-partial-expressions.
-
- OrderedDict.popitem(last=True)
-
- Putting the curser at the EOL, M-3 M-x py-add-abbrev
-
- would prompt "op" for an abbrev to store, as first
- `py-partial-expression' beginns with a "(", which is
- not taken as proposal.
-
-- py-edit-abbrevs
- Jumps to `python-mode-abbrev-table'
-
-- modeline enhanced
- when a path/to/my/favoured/Python is given with `py-shell-name'
- the Python-shell buffer before would display
-
- *ND path/to/my/favoured/Python*
-
- now:
-
- *ptmfP Python*
-
- boolean `py-modeline-display-full-path-p'
- boolean `py-modeline-acronym-display-home-p'
- If the modeline acronym should contain chars indicating the home-directory.
-
-- mode-line indicates "Py" by default
- customize `python-mode-modeline-display'
-
-- Pymacs intergration dropped from trunk
- conflicts with classic install being reported
-
-New in version 6.0.8
-
---------------------
-
-- `py-pep8-run', new command checking formatting
- `py-pep8-help'
-
-- `py-pyflake-run', new command
- Pyflakes is a simple program which checks Python
- source files for errors. - It is similar to
- PyChecker in scope, but differs in - that it does
- not execute the modules to check them.
- `py-pyflake-help'
-
-- `py-pylint-run', new command calls Pylint,
- a Python source code analyzer which looks for
- programming errors, helps enforcing a coding standard
- and sniffs for some code smells (as defined in Martin
- Fowler's Refactoring book) .
-
- Pylint checks length of lines of code, if variable
- names are well-formed according to your coding
- standard, if declared interfaces are truly
- implemented, and much more. Additionally, it is
- possible to write plugins.
- `py-pylint-doku', `py-pylint-help'
-
-- py-pyflakespep8-run, combines calls to pyflakes and pep8
-
-- respective flymake-modes,
- `pyflakespep8-flymake-mode', `pylint-flymake-mode'
- etc. See meny PyTools
-
-New in version 6.0.7
---------------------
-
-- make every Python shell acces its own history-file
- .python3_history
- .python_history
- .ipython_history etc.
-
-- related to shell used
- `toggle-force-py-shell-name-p'
- `force-py-shell-name-p-on'/off
-
- making it easier to enforce default py-shell upon execution
-
- `toggle-force-local-shell'
- `py-force-local-shell-on'/off
-
- If locally indicated Python shell should be taken and
- enforced upon sessions execute commands, lp:988091
-
-- specific completion:
- py-python2-shell-complete, py-python3-shell-complete,
- py-python2-script-complete, py-python3-script-complete
-
-New in version 6.0.6
---------------------
-
-- files inside a virtual machine made visible for pdbtrack
-
-- new commands `py-toggle-split-windows-on-execute', ...-on, ...-off
- `py-toggle-shell-switch-buffers-on-execute', ...-on, ...-off
- allow `py-execute-buffer' etc. to split/not-split windows,
- move cursor onto output or not
-
-- Behavior of C-u M-x `py-shell' closer to common shell
-
- C-u 4 prompts for a buffer,
- i.e. when a "*Python*" shell is running,
- C-u M-x `py-shell' opens a "*Python<2>*" per default
- C-u 2 M-x py-shell promts for command-arguments as known from 5th-series
-
-- `py-intend-tabs-mode' sets default of `indent-tabs-mode', lp:953765
-
--- New boolean variable `py-intend-tabs-mode'
- Permits value independent from Emacs-wide `indent-tabs-mode'
- Commands `py-toggle-indent-tabs-mode', ...-on, ...-off
- menu PyTools "Toggle indent-tabs-mode"
-
-- Extended py-execute-... forms provided for "line"
-
-- new commands py-beginning/end-of-line
- while introduced for internal reasons --because of it's
- return values-- they allow repeats, i.e. when already
- at end-of-line, jumping to next end etc.
-
-- new boolean `py-force-py-shell-name-p'
- When `t', execution with Python specified in `py-shell-name' is en forced, shebang will have no effect. Default is nil.
-
-- customizable `py-separator-char', a string, see report lp:975539
- Precedes guessing when not empty, is returned by
- function `py-separator-char'
-
-- nicer `org-cycle' behavior: when new `py-org-cycle-p' it `t',
- command `org-cycle' is available at shift-TAB,
-
-New in version 6.0.5
---------------------
-
-- Menu reworked and extended
-
-- extended commands combine executing statement/block... with dedidi cated/switch... etc. This may remove some need of customization.
-
-- local environments support started
- If calls to common `py-shell' should use local executable
- instead of default system Python set
- `py-use-local-default' alongside with
- `py-shell-local-path'
-
-- `py-toggle-shells' alias of more powerful `py-switch-shells'
- Toggles between the interpreter customized in `py-shell-toggle-1' resp. `py-shell-toggle-2'. Was hard-coded CPython and Jython in earlier versions, now starts with Python2 and Python3 by default.
-
-- `py-shell-name' accepts PATH/TO/EXECUTABLE
- in addition to name of an installed default Python-Shell.
- Permits installing commands like
- (defun python-XYZ-shell (&optional argprompt)
- "Start an Python-XYZ interpreter ... "
- (interactive)
- (let ((py-shell-name "PATH/TO/PYTHON-XYZ"))
- (py-shell argprompt)))
-
-- new commands `indent-tabs-mode', `toggle-indent-tabs-mode',
- `indent-tabs-mode-on', `indent-tabs-mode-off'
-
- feature after a request at Stack Exchange asked Jul
- 13 '11 at 13:23 saying
- `tab-width' now follows `py-indent-offset'
-
-- new command `py-execute-region-default' forces the
- systems default Python interpreter to execute, ignores
- shebang
-
- related functions redesigned, `async' argument dropped
- `py-execute-region' now reads:
-
- (defun py-execute-region (start end &optional shell dedicated)
- "Send the region to a Python interpreter.
-
- When called with \\[univeral-argument], execution through `default-value' of `py-shell-name' is forced.
- When called with \\[univeral-argument] followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
- When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument. "
- [ ... ]
-
-- new `py-number-face',
- visible only when customized and `py-use-number-face-p' is `t',
- inherits default face
- With large files fontifying numbers may cause a delay
- Credits to github.com/fgallina/python.el/issues42
-
-- new boolean `py-verbose-p'
- if `t', reached indent level etc. is messaged
-
-- new commands py-execute-buffer-dedicated, py-execute-buffer-switch -dedicated
-
-- `toggle-py-smart-indentation' new command
- also `py-smart-indentation-on', -off
-
-New in version 6.0.4
---------------------
-
-- Python shell starts with `python-mode'
- that's needed by completion for now
- boolean customizable `py-start-run-py-shell'
-
-- outline-(minor-)mode enabled providing regular
- expressions. Customize `py-outline-minor-mode-p' to
- switch it on with python-mode
-
-- Hook delivered to start hs-minor-mode from python-mode
- Customize `py-hide-show-minor-mode-p'
- Key setting example:
- (global-set-key [(super s)] 'hs-hide-all)
- (global-set-key [(super S)] 'hs-show-all)
-
-- Listing of available commands in org-mode and reST
- format in directory "doc"
-
-- Python shells and executing forms may be called as
- dedicated process. See commands available \w suffix
- "-dedicated".
-
-- completion fixed: M-TAB completes in Python buffer, TAB
- completes in Python shells
-
-- py-down-FORM-lc commands
- Goto beginning of line following end of FORM.
- \"-lc\" stands for \"left-corner\" - a complementary command travelling left, whilst `py-end-of-FORM' stops at right corner.
- Implemented forms are "block", "clause", "def", "class", "statement".
-
-- py-down-FORM commands
-
- like py-down-block introduced in version 6.0.3,
- implemented also for "clause", "def", "class",
- "statement".
- Go to the beginning of next block below
- current level.
-
-New in version 6.0.3
---------------------
-
-- ipython integration started
-
-- commands `ipython', `python2', `python3', `jython', `python'
- opening a respective python shell
-
-- py-shift-block-left, py-shift-block-right etc.
- Implemented forms that way are
- "paragraph" "block" "clause" "def" "class" "line" "statement"
-
-- py-dedent
- Dedent line according to `py-indent-offset'. With
- arg, do it that many times. If point is between
- indent levels, dedent to next level. Stops at BOL.
- Returns column reached, if dedent done, nil otherwise.
-
-- py-indent-forward-line
- Indent line and move one line forward. If
- `py-kill-empty-line' is non-nil, delete an empty
- line. When closing a form, use py-close-block et al,
- which will move and indent likewise. Returns position.
-
-- py-close-block, -clause, -def, class
- Set indent level to that of beginning of definition.
- If final line isn't empty and
- `py-close-block-provides-newline' non-nil, insert a
- newline. Returns column.
-
-- new commands specifying the shell override
- `py-shell-name' for execution
- implemented shells are "python" "python2" "python2.7"
- "python3" "python3.2" "jython"
-
- available with default, -switch and -no-switch
- option, i.e.
- py-execute-region-python3.2
- py-execute-region-python3.2-switch
- py-execute-region-python3.2-no-switch etc.
-
- Docstring of py-execute-region-python3.2-switch for
- example: "Send the region to a common shell calling the
- python3.2 interpreter. Ignores setting of
- `py-shell-switch-buffers-on-execute', output-buffer
- will being switched to."
-
-- Declarations
- Deal with assigments resp. statements in current
- level which don't open blocks. Provides common edit
- functions as copy, mark, kill, goto beg/end.
-
- Functions will be used typically to grasp
- initialisations resp. assignements of variables
- between the definition of a class or method and it's
- body, likewise global stuff at the head of a file.
-
-- column-marker.el
- Commands `column-marker-1', `column-marker-2', and
- `column-marker-3' each highlight a given column
- (using different background colors by default).
-
- M-x column-marker-1 highlights the column where the
- cursor is, in face `column-marker-1'.
-
- C-u 70 M-x column-marker-2 highlights column 70 in
- face `column-marker-2'.
-
- C-u 70 M-x column-marker-3 highlights column 70 in
- face `column-marker-3'. The face `column-marker-2'
- highlighting no longer shows.
-
- C-u M-x column-marker-3 turns off highlighting for
- column-marker-3, so face `column-marker-2'
- highlighting shows again for column 70.
-
- C-u C-u M-x column-marker-1 (or -2 or -3) erases all
- column highlighting.
-
- ;;
-
- Thanks a lot to it's author Rick Bielawski ,
- to Drew Adams for his care and Emacs Wiki hosting it.
-
-New in version 6.0.2
---------------------
-
-- py-electric-comment
-
- "Insert a comment. If starting a comment, indent
- accordingly. If a numeric argument ARG is provided,
- that many colons are inserted non-electrically. With
- universal-prefix-key C-u a \"#\" Electric behavior
- is inhibited inside a string or comment."
-
-- New commands `py-partial-expression':
-
- "." operators delimit a partial-expression on it's
- level.
-
- Given the function below, `py-partial-expression'
- called at pipe symbol would copy and return:
-
- def usage():
- print """Usage: %s
- ....""" % (
- os.path.basename(sys.argv[0]))
- ------------|-------------------------
- ==> path
-
- os.path.basename(sys.argv[0]))
- ------------------|-------------------
- ==> basename(sys.argv[0]))
-
- os.path.basename(sys.argv[0]))
- --------------------------|-----------
- ==> sys
-
- os.path.basename(sys.argv[0]))
- ------------------------------|-------
- ==> argv[0]
-
- while `py-expression' would copy and return
-
- (
- os.path.basename(sys.argv[0]))
-
- ;;;;;
-
- Also for existing commands a shorthand is defined:
-
- (defalias 'py-statement 'py-copy-statement)
-
- which will mark, copy and return.
-
-- Commands implementing a behavior which customizing of
- `py-shell-switch-buffers-on-execute' would do:
-
- py-execute-buffer-no-switch
- py-execute-buffer-switch
- py-execute-region-no-switch
- py-execute-region-switch
-
-- Several bugfixes.
-
-New in version 6.0.1
---------------------
-
-- New commands py-expression:
-
- py-copy-expression
- py-mark-expression
- py-beginning-of-expression
- py-end-of-expression
- py-kill-expression
-
- Also several of bugfixes are done.
-
-New in version 6.0
---------------------
-
-- Finer grained commands, core re-write.
-
- As shown below for the `mark'-command, delete,
- copy, jump to beginning and end of the respective
- programming-expressions:
-
- py-mark-statement
- py-mark-block
- py-mark-block-or-clause
- py-mark-def
- py-mark-def-or-class
- py-mark-class
- py-mark-clause
-
-- Also a couple of bugfixes are done.
-
-New in version 5.2.1
---------------------
-
-- Syntax highlight as a keyword "lambda:" just like "lambda x:". Given by Dan
- Davison.
-- Add "python3" as a key for python-mode in interpreter-mode-alist and
- auto-mode-alist.
-
-New in version 5.2.0
---------------------
-
-- Fixed filling of triple-quoted strings.
-
-- Add new font-lock faces for class names and exception names.
-
-- Do not fill when calling fill-paragraph with point in a region of code.
-
-- Fixed font-locking of exception names in parenthesized lists.
-
-- Fixed font-locking of decorators with arguments.
-
-- Fixed font-locking of triple-quoted strings; single quotes appearing in
- triple-quoted strings no longer upset font-locking.
-
-- Fixed the stack-entry regexp used by pdbtrack so that it now works with
- module-level frames.
-
-- Do not bind C-c C-h; `py-help-at-point' is now on C-c C-e by default.
-
-- hide-show mode is now supported.
-
-- When shifting regions right and left, keep the region active in Emacs.
diff --git a/elpa/python-mode-6.0.10/PKG-INFO b/elpa/python-mode-6.0.10/PKG-INFO
deleted file mode 100644
index b78f621e..00000000
--- a/elpa/python-mode-6.0.10/PKG-INFO
+++ /dev/null
@@ -1,11 +0,0 @@
-Metadata-Version: 1.0
-Name: python-mode.el
-Version: 6.0.10
-Summary: Major mode for editing Python programs
-Home-page: http://launchpad.net/python-mode
-Author: Andreas Roehler
-Author-email: andreas.roehler@online.de
-License: GNU GPLv3, Python License
-Download-URL: http://launchpad.net/python-mode/trunk/6.0.10/+download/python-mode.el-6.0.10.tar.gz
-Description: UNKNOWN
-Platform: UNKNOWN
diff --git a/elpa/python-mode-6.0.10/README b/elpa/python-mode-6.0.10/README
deleted file mode 100644
index 5928ea51..00000000
--- a/elpa/python-mode-6.0.10/README
+++ /dev/null
@@ -1,37 +0,0 @@
-Customize default Python shell as `py-shell-name'
-
-`py-shell-name' might be an installed executable as
-shell command `type' would display, but also a
-PATH/TO/(I)PYTHON, of a virtualenv for example
-
-To change the Python default shell see also INSTALL
-
-Most python-mode.el commands start with prefix `py-'
-
-`M-x py- TAB'
-displays a list of them in completion-buffer.
-See also commands list delivered in directory doc.
-
-List virtualenv related `M-x virtualenv- TAB'
-resp. Pymacs commands `M-x pymacs-'
-
-Commands related to a specific shell start with
-it's name as `ipython-complete'.
-Open an installed shell by
-
-M-x SHELL
-
-With prefix C-u user is prompted to specify a PATH-TO-LOCAL-SHELL
-Also evaluating
-
-(py-shell nil DEDICATED PATH-TO-LOCAL-SHELL)
-
-if DEDICATED is set to `t', shell will get an unique name.
-
-Install a local shell by evaluating
-
-(defun MY-LOCAL-SHELL ()
- (interactive)
- (py-shell nil DEDICATED PATH-TO-LOCAL-SHELL))
-
-If `py-complete-function' is set, it takes precedence
diff --git a/elpa/python-mode-6.0.10/ToDo b/elpa/python-mode-6.0.10/ToDo
deleted file mode 100644
index bb80f2e1..00000000
--- a/elpa/python-mode-6.0.10/ToDo
+++ /dev/null
@@ -1,2 +0,0 @@
-* implement respective to shell-dumb-shell-regexp
-
diff --git a/elpa/python-mode-6.0.10/byte-compile-directory.sh b/elpa/python-mode-6.0.10/byte-compile-directory.sh
deleted file mode 100644
index 807c4fb9..00000000
--- a/elpa/python-mode-6.0.10/byte-compile-directory.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/bash
- # -- byte-compile Emacs Lisp files delivered with python-mode.el
-
-# Author: Andreas Roehler
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
-
-# Commentary: Edit the vars pointing to the directories/files
-# holding your python-mode for test
-# assumes python-mode files in or below current directory
-
-# Code:
-
-
-# the path
-PDIR=`pwd`
-
-# python-mode file to load
-if [ -s "python-components-mode.el" ];
- then
- PYTHONMODE='python-components-mode.el'
- else
- PYTHONMODE='python-mode.el'
-fi
-
-EMACS=emacs
-PYMACSDIR=Pymacs
-
-$EMACS -Q --batch --eval "(message (emacs-version))" --eval "(when (featurep 'python-mode)(unload-feature 'python-mode t))" --eval "(add-to-list 'load-path \"$PDIR/\")" --eval "(add-to-list 'load-path \"$PYMACSDIR/\")" -load "$PDIR/pymacs.el" -load "$PDIR/$PYTHONMODE" --eval '(byte-recompile-directory default-directory 1 t)'
-
-
diff --git a/elpa/python-mode-6.0.10/completion/pycomplete.el b/elpa/python-mode-6.0.10/completion/pycomplete.el
deleted file mode 100644
index 7dfd0b28..00000000
--- a/elpa/python-mode-6.0.10/completion/pycomplete.el
+++ /dev/null
@@ -1,81 +0,0 @@
-;;; Complete symbols at point using Pymacs.
-
-;; Copyright (C) 2007 Skip Montanaro
-
-;; Author: Skip Montanaro
-;; Maintainer: skip@pobox.com
-;; Created: Oct 2004
-;; Keywords: python pymacs emacs
-
-;; This software is provided as-is, without express or implied warranty.
-;; Permission to use, copy, modify, distribute or sell this software,
-;; without fee, for any purpose and by any individual or organization, is
-;; hereby granted, provided that the above copyright notice and this
-;; paragraph appear in all copies.
-
-;; Along with pycomplete.py this file allows programmers to complete Python
-;; symbols within the current buffer. See pycomplete.py for the Python side
-;; of things and a short description of what to expect.
-
-(require 'pymacs)
-
-(pymacs-load "pycomplete")
-
-(defun py-symbol-near-point ()
- "Return the first textual item to the nearest point."
- ;; alg stolen from etag.el
- (save-excursion
- (with-syntax-table py-dotted-expression-syntax-table
- (if (or (bobp) (not (memq (char-syntax (char-before)) '(?w ?_))))
- (while (not (looking-at "\\sw\\|\\s_\\|\\'"))
- (forward-char 1)))
- (while (looking-at "\\sw\\|\\s_")
- (forward-char 1))
- (if (re-search-backward "\\sw\\|\\s_" nil t)
- (progn (forward-char 1)
- (buffer-substring (point)
- (progn (forward-sexp -1)
- (while (looking-at "\\s'")
- (forward-char 1))
- (point))))
- nil))))
-
-(defun py-find-global-imports ()
- (save-excursion
- (let (first-class-or-def imports)
- (goto-char (point-min))
- (setq first-class-or-def
- (re-search-forward "^ *\\(def\\|class\\) " nil t))
- (goto-char (point-min))
- (setq imports nil)
- (while (re-search-forward
- "^\\(import \\|from \\([A-Za-z_][A-Za-z_0-9]*\\) import \\).*"
- nil t)
- (setq imports (append imports
- (list (buffer-substring
- (match-beginning 0)
- (match-end 0))))))
- imports)))
-
-(defun py-complete ()
- (interactive)
- (let* ((pymacs-forget-mutability t)
- (symbol (py-symbol-near-point))
- (completions
- (pycomplete-pycomplete symbol
- (py-find-global-imports))))
- (cond ((null completions) ; no matching symbol
- (message "Can't find completion for \"%s\"" symbol)
- (ding))
- ((null (cdr completions))
- (if (string= "" (car completions))
- (tab-to-tab-stop)
- ;; sole completion
- (insert (car completions))))
- (t
- (message "Making completion list...")
- (with-output-to-temp-buffer "*PythonCompletions*"
- (display-completion-list completions))
- (message "Making completion list...%s" "done")))))
-
-(provide 'pycomplete)
diff --git a/elpa/python-mode-6.0.10/completion/pycomplete.py b/elpa/python-mode-6.0.10/completion/pycomplete.py
deleted file mode 100644
index 15a472d9..00000000
--- a/elpa/python-mode-6.0.10/completion/pycomplete.py
+++ /dev/null
@@ -1,121 +0,0 @@
-
-"""
-Python dot expression completion using Pymacs.
-
-This almost certainly needs work, but if you add
-
- (require 'pycomplete)
-
-to your .xemacs/init.el file (untried w/ GNU Emacs so far) and have Pymacs
-installed, when you hit M-TAB it will try to complete the dot expression
-before point. For example, given this import at the top of the file:
-
- import time
-
-typing "time.cl" then hitting M-TAB should complete "time.clock".
-
-This is unlikely to be done the way Emacs completion ought to be done, but
-it's a start. Perhaps someone with more Emacs mojo can take this stuff and
-do it right.
-
-See pycomplete.el for the Emacs Lisp side of things.
-"""
-
-# Author: Skip Montanaro
-# Maintainer: skip@pobox.com
-# Created: Oct 2004
-# Keywords: python pymacs emacs
-
-# This software is provided as-is, without express or implied warranty.
-# Permission to use, copy, modify, distribute or sell this software, without
-# fee, for any purpose and by any individual or organization, is hereby
-# granted, provided that the above copyright notice and this paragraph
-# appear in all copies.
-
-# Along with pycomplete.el this file allows programmers to complete Python
-# symbols within the current buffer.
-# import pdb
-# pdb.set_trace()
-
-import sys
-import os.path
-
-try:
- x = set
-except NameError:
- from sets import Set as set
-else:
- del x
-
-def get_all_completions(s, imports=None):
- """Return contextual completion of s (string of >= zero chars).
-
- If given, imports is a list of import statements to be executed first.
- """
- locald = {}
- if imports is not None:
- for stmt in imports:
- try:
- exec stmt in globals(), locald
- except TypeError:
- raise TypeError, "invalid type: %s" % stmt
-
- dots = s.split(".")
- if not s or len(dots) == 1:
- keys = set()
- keys.update(locald.keys())
- keys.update(globals().keys())
- import __builtin__
- keys.update(dir(__builtin__))
- keys = list(keys)
- keys.sort()
- if s:
- return [k for k in keys if k.startswith(s)]
- else:
- return keys
-
- sym = None
- for i in range(1, len(dots)):
- s = ".".join(dots[:i])
- try:
- sym = eval(s, globals(), locald)
- except NameError:
- try:
- sym = __import__(s, globals(), locald, [])
- except ImportError:
- return []
- if sym is not None:
- s = dots[-1]
- return [k for k in dir(sym) if k.startswith(s)]
-
-def pycomplete(s, imports=None):
- completions = get_all_completions(s, imports)
- if len(completions) == 0:
- return None
- else:
- dots = s.split(".")
- prefix = os.path.commonprefix([k for k in completions])
- if len(completions)==1 or len(prefix)>len(dots[-1]):
- return [prefix[len(dots[-1]):]]
-
- return completions
-
- # return os.path.commonprefix([k[len(dots[-1]):] for k in completions])
-
-if __name__ == "__main__":
- print " ->", pycomplete("")
- print "sys.get ->", pycomplete("sys.get")
- print "sy ->", pycomplete("sy")
- print "sy (sys in context) ->", pycomplete("sy", imports=["import sys"])
- print "foo. ->", pycomplete("foo.")
- print "Enc (email * imported) ->",
- print pycomplete("Enc", imports=["from email import *"])
- print "E (email * imported) ->",
- print pycomplete("E", imports=["from email import *"])
-
- print "Enc ->", pycomplete("Enc")
- print "E ->", pycomplete("E")
-
-# Local Variables :
-# pymacs-auto-reload : t
-# End :
diff --git a/elpa/python-mode-6.0.10/doc/commands-python-mode.org b/elpa/python-mode-6.0.10/doc/commands-python-mode.org
deleted file mode 100644
index a97a0a53..00000000
--- a/elpa/python-mode-6.0.10/doc/commands-python-mode.org
+++ /dev/null
@@ -1,2876 +0,0 @@
-Python-mode commands
-
-* py-guess-pdb-path
- If py-pdb-path isn't set, find location of pdb.py.
-* highlight-indentation-on
- Make sure `highlight-indentation' is on.
-* highlight-indentation-off
- Make sure `highlight-indentation' is off.
-* highlight-indentation
- Toggle highlight indentation.
-Optional argument INDENT-WIDTH specifies which indentation
-level (spaces only) should be highlighted, if omitted
-indent-width will be guessed from current major-mode
-* run-python-internal
- Run an inferior Internal Python process.
-Input and output via buffer named after
-`python-shell-internal-buffer-name' and what
-`python-shell-internal-get-process-name' returns. This new kind
-of shell is intended to be used for generic communication related
-to defined configurations. The main difference with global or
-dedicated shells is that these ones are attached to a
-configuration, not a buffer. This means that can be used for
-example to retrieve the sys.path and other stuff, without messing
-with user shells. Runs the hook
-`inferior-python-mode-hook' (after the `comint-mode-hook' is
-run). (Type C-h m in the process buffer for a list
-of commands.)
-* python-shell-send-string
- Send STRING to inferior Python PROCESS.
-When `py-verbose-p' and MSG is non-nil messages the first line of STRING.
-* python-shell-send-region
- Send the region delimited by START and END to inferior Python process.
-* python-shell-send-buffer
- Send the entire buffer to inferior Python process.
-* python-shell-send-defun
- Send the current defun to inferior Python process.
-When argument ARG is non-nil sends the innermost defun.
-* python-shell-send-file
- Send FILE-NAME to inferior Python PROCESS.
-If TEMP-FILE-NAME is passed then that file is used for processing
-instead, while internally the shell will continue to use
-FILE-NAME.
-* python-shell-switch-to-shell
- Switch to inferior Python process buffer.
-* python-shell-completion-complete-at-point
- Perform completion at point in inferior Python process.
-* python-shell-completion-complete-or-indent
- Complete or indent depending on the context.
-If content before pointer is all whitespace indent. If not try
-to complete.
-* py-count-lines
- Count lines in accessible part until current line.
-
-See http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7115
-* run-python
- Run an inferior Python process, input and output via buffer *Python*.
-
-CMD is the Python command to run. NOSHOW non-nil means don't
-show the buffer automatically.
-
-Interactively, a prefix arg means to prompt for the initial
-Python command line (default is `python-command').
-
-A new process is started if one isn't running attached to
-`python-buffer', or if called from Lisp with non-nil arg NEW.
-Otherwise, if a process is already running in `python-buffer',
-switch to that buffer.
-
-This command runs the hook `inferior-python-mode-hook' after
-running `comint-mode-hook'. Type C-h m in the
-process buffer for a list of commands.
-
-By default, Emacs inhibits the loading of Python modules from the
-current working directory, for security reasons. To disable this
-behavior, change `python-remove-cwd-from-path' to nil.
-* python-send-region
- Send the region to the inferior Python process.
-* python-send-string
- Evaluate STRING in inferior Python process.
-* python-send-buffer
- Send the current buffer to the inferior Python process.
-* python-send-defun
- Send the current defun (class or method) to the inferior Python process.
-* python-switch-to-python
- Switch to the Python process buffer, maybe starting new process.
-With prefix arg, position cursor at end of buffer.
-* python-send-region-and-go
- Send the region to the inferior Python process.
-Then switch to the process buffer.
-* python-load-file
- Load a Python file FILE-NAME into the inferior Python process.
-If the file has extension `.py' import or reload it as a module.
-Treating it as a module keeps the global namespace clean, provides
-function location information for debugging, and supports users of
-module-qualified names.
-* python-set-proc
- Set the default value of `python-buffer' to correspond to this buffer.
-If the current buffer has a local value of `python-buffer', set the
-default (global) value to that. The associated Python process is
-the one that gets input from M-x python-send-region et al when used
-in a buffer that doesn't have a local value of `python-buffer'.
-* python-fill-paragraph
- `fill-paragraph-function' handling multi-line strings and possibly comments.
-If any of the current line is in or at the end of a multi-line string,
-fill the string or the paragraph of it that point is in, preserving
-the string's indentation.
-* python-shift-left
- Shift lines in region COUNT (the prefix arg) columns to the left.
-COUNT defaults to `py-indent-offset'. If region isn't active, just shift
-current line. The region shifted includes the lines in which START and
-END lie. It is an error if any lines in the region are indented less than
-COUNT columns.
-* python-shift-right
- Shift lines in region COUNT (the prefix arg) columns to the right.
-COUNT defaults to `py-indent-offset'. If region isn't active, just shift
-current line. The region shifted includes the lines in which START and
-END lie.
-* python-mark-block
- Mark the block around point.
-Uses `python-beginning-of-block', `python-end-of-block'.
-* python-find-imports
- Find top-level imports, updating `python-imports'.
-* python-find-function
- Find source of definition of function NAME.
-Interactively, prompt for name.
-* py-insert-default-shebang
- Insert in buffer shebang of installed default Python.
-* py-electric-comment
- Insert a comment. If starting a comment, indent accordingly.
-
-If a numeric argument ARG is provided, that many colons are inserted
-non-electrically.
-With C-u "#" electric behavior is inhibited inside a string or comment.
-* py-electric-colon
- Insert a colon and indent accordingly.
-
-If a numeric argument ARG is provided, that many colons are inserted
-non-electrically.
-
-Electric behavior is inhibited inside a string or
-comment or by universal prefix C-u.
-Default is nil, controlled by `py-electric-colon-active-p'
-* py-electric-backspace
- Delete preceding character or level of indentation.
-
-With ARG do that ARG times.
-Returns column reached.
-* py-electric-delete
- Delete following character or levels of whitespace.
-
-With ARG do that ARG times.
-* py-indent-line-outmost
- Indent the current line to the outmost reasonable indent.
-
-With optional C-u an indent with length `py-indent-offset' is inserted unconditionally
-* py-indent-line
- Indent the current line according to Python rules.
-
-When called interactivly with C-u, ignore dedenting rules for block closing statements
-(e.g. return, raise, break, continue, pass)
-
-An optional C-u followed by a numeric argument neither 1 nor 4 will switch off `py-smart-indentation' for this execution. This permits to correct allowed but unwanted indents.
-Similar to `toggle-py-smart-indentation' resp. `py-smart-indentation-off' followed by TAB.
-
-This function is normally used by `indent-line-function' resp.
-TAB.
-Returns current indentation
-* py-newline-and-indent
- Add a newline and indent to outmost reasonable indent.
-When indent is set back manually, this is honoured in following lines.
-* py-newline-and-dedent
- Add a newline and indent to one level below current.
-Returns column.
-* toggle-force-local-shell
- If locally indicated Python shell should be taken and
-enforced upon sessions execute commands.
-
-Toggles boolean `py-force-local-shell-p' along with `py-force-py-shell-name-p'
-Returns value of `toggle-force-local-shell' switched to.
-
-When on, kind of an option 'follow', local shell sets `py-shell-name', enforces its use afterwards.
-
-See also commands
-`py-force-local-shell-on'
-`py-force-local-shell-off'
-
-* py-force-local-shell-on
- Make sure, `py-py-force-local-shell-p' is on.
-
-Returns value of `py-force-local-shell-p'.
-
-Kind of an option 'follow', local shell sets `py-shell-name', enforces its use afterwards
-* py-force-local-shell-off
- Restore `py-shell-name' default value and `behaviour'.
-* toggle-force-py-shell-name-p
- If customized default `py-shell-name' should be enforced upon execution.
-
-If `py-force-py-shell-name-p' should be on or off.
-Returns value of `py-force-py-shell-name-p' switched to.
-
-See also commands
-force-py-shell-name-p-on
-force-py-shell-name-p-off
-
-Caveat: Completion might not work that way.
-
-* force-py-shell-name-p-on
- Switches `py-force-py-shell-name-p' on.
-
-Customized default `py-shell-name' will be enforced upon execution.
-Returns value of `py-force-py-shell-name-p'.
-
-Caveat: Completion might not work that way.
-
-* force-py-shell-name-p-off
- Make sure, `py-force-py-shell-name-p' is off.
-
-Function to use by executes will be guessed from environment.
-Returns value of `py-force-py-shell-name-p'.
-* py-toggle-indent-tabs-mode
- Toggle `indent-tabs-mode'.
-
-Returns value of `indent-tabs-mode' switched to.
-* py-indent-tabs-mode
- With positive ARG switch `indent-tabs-mode' on.
-
-With negative ARG switch `indent-tabs-mode' off.
-Returns value of `indent-tabs-mode' switched to.
-* py-indent-tabs-mode-on
- Switch `indent-tabs-mode' on.
-* py-indent-tabs-mode-off
- Switch `indent-tabs-mode' on.
-* py-guess-indent-offset
- Guess a value for, and change, `py-indent-offset'.
-
-By default, make a buffer-local copy of `py-indent-offset' with the
-new value.
-With optional argument GLOBAL change the global value of `py-indent-offset'.
-
-Indent might be guessed savely only from beginning of a block.
-Returns `py-indent-offset'
-* py-narrow-to-defun
- Make text outside current def or class invisible.
-
-The defun visible is the one that contains point or follows point.
-* py-shift-left
- Dedent region according to `py-indent-offset' by COUNT times.
-
-If no region is active, current line is dedented.
-Returns indentation reached.
-* py-shift-right
- Indent region according to `py-indent-offset' by COUNT times.
-
-If no region is active, current line is indented.
-Returns indentation reached.
-* py-shift-paragraph-right
- Indent paragraph by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-* py-shift-paragraph-left
- Dedent paragraph by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-* py-shift-block-right
- Indent block by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-* py-shift-block-left
- Dedent block by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-* py-shift-clause-right
- Indent clause by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-* py-shift-clause-left
- Dedent clause by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-* py-shift-def-right
- Indent def by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-* py-shift-def-left
- Dedent def by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-* py-shift-class-right
- Indent class by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-* py-shift-class-left
- Dedent class by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-* py-shift-line-right
- Indent line by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-* py-shift-line-left
- Dedent line by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-* py-shift-statement-right
- Indent statement by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-* py-shift-statement-left
- Dedent statement by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-* py-indent-and-forward
- Indent current line according to mode, move one line forward.
-* py-indent-region
- Reindent a region of Python code.
-
-With optional INDENT-OFFSET specify a different value than `py-indent-offset' at place.
-
-Guesses the outmost reasonable indent
-Returns and keeps relative position
-* py-beginning-of-paragraph-position
- Returns beginning of paragraph position.
-* py-end-of-paragraph-position
- Returns end of paragraph position.
-* py-beginning-of-block-position
- Returns beginning of block position.
-* py-end-of-block-position
- Returns end of block position.
-* py-beginning-of-clause-position
- Returns beginning of clause position.
-* py-end-of-clause-position
- Returns end of clause position.
-* py-beginning-of-block-or-clause-position
- Returns beginning of block-or-clause position.
-* py-end-of-block-or-clause-position
- Returns end of block-or-clause position.
-* py-beginning-of-def-position
- Returns beginning of def position.
-* py-end-of-def-position
- Returns end of def position.
-* py-beginning-of-class-position
- Returns beginning of class position.
-* py-end-of-class-position
- Returns end of class position.
-* py-beginning-of-def-or-class-position
- Returns beginning of def-or-class position.
-* py-end-of-def-or-class-position
- Returns end of def-or-class position.
-* py-beginning-of-line-position
- Returns beginning of line position.
-* py-end-of-line-position
- Returns end of line position.
-* py-beginning-of-statement-position
- Returns beginning of statement position.
-* py-end-of-statement-position
- Returns end of statement position.
-* py-beginning-of-expression-position
- Returns beginning of expression position.
-* py-end-of-expression-position
- Returns end of expression position.
-* py-beginning-of-partial-expression-position
- Returns beginning of partial-expression position.
-* py-end-of-partial-expression-position
- Returns end of partial-expression position.
-* py-bounds-of-statement
- Returns bounds of statement at point.
-
-With optional POSITION, a number, report bounds of statement at POSITION.
-Returns a list, whose car is beg, cdr - end.
-* py-bounds-of-block
- Returns bounds of block at point.
-
-With optional POSITION, a number, report bounds of block at POSITION.
-Returns a list, whose car is beg, cdr - end.
-* py-bounds-of-clause
- Returns bounds of clause at point.
-
-With optional POSITION, a number, report bounds of clause at POSITION.
-Returns a list, whose car is beg, cdr - end.
-* py-bounds-of-block-or-clause
- Returns bounds of block-or-clause at point.
-
-With optional POSITION, a number, report bounds of block-or-clause at POSITION.
-Returns a list, whose car is beg, cdr - end.
-* py-bounds-of-def
- Returns bounds of def at point.
-
-With optional POSITION, a number, report bounds of def at POSITION.
-Returns a list, whose car is beg, cdr - end.
-* py-bounds-of-class
- Returns bounds of class at point.
-
-With optional POSITION, a number, report bounds of class at POSITION.
-Returns a list, whose car is beg, cdr - end.
-* py-bounds-of-region
- Returns bounds of region at point.
-
-Returns a list, whose car is beg, cdr - end.
-* py-bounds-of-buffer
- Returns bounds of buffer at point.
-
-With optional POSITION, a number, report bounds of buffer at POSITION.
-Returns a list, whose car is beg, cdr - end.
-* py-bounds-of-expression
- Returns bounds of expression at point.
-
-With optional POSITION, a number, report bounds of expression at POSITION.
-Returns a list, whose car is beg, cdr - end.
-* py-bounds-of-partial-expression
- Returns bounds of partial-expression at point.
-
-With optional POSITION, a number, report bounds of partial-expression at POSITION.
-Returns a list, whose car is beg, cdr - end.
-* py-bounds-of-declarations
- Bounds of consecutive multitude of assigments resp. statements around point.
-
-Indented same level, which don't open blocks.
-Typically declarations resp. initialisations of variables following
-a class or function definition.
-See also py-bounds-of-statements
-* py-beginning-of-declarations
- Got to the beginning of assigments resp. statements in current level which don't open blocks.
-
-* py-end-of-declarations
- Got to the end of assigments resp. statements in current level which don't open blocks.
-* py-declarations
- Copy and mark assigments resp. statements in current level which don't open blocks or start with a keyword.
-
-See also `py-statements', which is more general, taking also simple statements starting with a keyword.
-* py-kill-declarations
- Delete variables declared in current level.
-
-Store deleted variables in kill-ring
-* py-bounds-of-statements
- Bounds of consecutive multitude of statements around point.
-
-Indented same level, which don't open blocks.
-* py-beginning-of-statements
- Got to the beginning of statements in current level which don't open blocks.
-* py-end-of-statements
- Got to the end of statements in current level which don't open blocks.
-* py-statements
- Copy and mark simple statements in current level which don't open blocks.
-
-More general than py-declarations, which would stop at keywords like a print-statement.
-* py-kill-statements
- Delete statements declared in current level.
-
-Store deleted statements in kill-ring
-* py-comment-region
- Like `comment-region' but uses double hash (`#') comment starter.
-* py-fill-paragraph
- Like M-q, but handle Python comments and strings.
-
-If any of the current line is a comment, fill the comment or the
-paragraph of it that point is in, preserving the comment's indentation
-and initial `#'s.
-If point is inside a string, narrow to that string and fill.
-
-* py-insert-super
- Insert a function "super()" from current environment.
-
-As example given in Python v3.1 documentation » The Python Standard Library »
-
-class C(B):
- def method(self, arg):
- super().method(arg) # This does the same thing as:
- # super(C, self).method(arg)
-
-Returns the string inserted.
-* py-nesting-level
- Accepts the output of `parse-partial-sexp'.
-* py-compute-indentation
- Compute Python indentation.
-
-When HONOR-BLOCK-CLOSE-P is non-nil, statements such as `return',
-`raise', `break', `continue', and `pass' force one level of dedenting.
-* py-continuation-offset
- With numeric ARG different from 1 py-continuation-offset is set to that value; returns py-continuation-offset.
-* py-indentation-of-statement
- Returns the indenation of the statement at point.
-* py-list-beginning-position
- Return lists beginning position, nil if not inside.
-
-Optional ARG indicates a start-position for `parse-partial-sexp'.
-* py-end-of-list-position
- Return end position, nil if not inside.
-
-Optional ARG indicates a start-position for `parse-partial-sexp'.
-* py-in-triplequoted-string-p
- Returns character address of start tqs-string, nil if not inside.
-* py-in-string-p
- Returns character address of start of string, nil if not inside.
-* py-in-statement-p
- Returns list of beginning and end-position if inside.
-
-Result is useful for booleans too: (when (py-in-statement-p)...)
-will work.
-
-* py-statement-opens-block-p
- Return position if the current statement opens a block
-in stricter or wider sense.
-
-For stricter sense specify regexp.
-* py-statement-opens-clause-p
- Return position if the current statement opens block or clause.
-* py-statement-opens-block-or-clause-p
- Return position if the current statement opens block or clause.
-* py-statement-opens-class-p
- Return `t' if the statement opens a functions or class definition, nil otherwise.
-* py-statement-opens-def-p
- Return `t' if the statement opens a functions or class definition, nil otherwise.
-* py-statement-opens-def-or-class-p
- Return `t' if the statement opens a functions or class definition, nil otherwise.
-* py-current-defun
- Go to the outermost method or class definition in current scope.
-
-Python value for `add-log-current-defun-function'.
-This tells add-log.el how to find the current function/method/variable.
-Returns name of class or methods definition, if found, nil otherwise.
-
-See customizable variables `py-current-defun-show' and `py-current-defun-delay'.
-* py-sort-imports
- Sort multiline imports.
-
-Put point inside the parentheses of a multiline import and hit
-M-x py-sort-imports to sort the imports lexicographically
-* py-which-function
- Return the name of the function or class, if curser is in, return nil otherwise.
-* py-beginning-of-block
- Returns beginning of block if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-* py-end-of-block
- Go to the end of block.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-* py-beginning-of-clause
- Returns beginning of clause if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-* py-end-of-clause
- Go to the end of clause.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-* py-beginning-of-block-or-clause
- Returns beginning of block-or-clause if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-* py-end-of-block-or-clause
- Go to the end of block-or-clause.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-* py-beginning-of-def
- Returns beginning of def if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-* py-end-of-def
- Go to the end of def.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-* py-beginning-of-class
- Returns beginning of class if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-* py-end-of-class
- Go to the end of class.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-* py-beginning-of-def-or-class
- Returns beginning of def-or-class if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-* py-end-of-def-or-class
- Go to the end of def-or-class.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-* py-beginning-of-if-block
- Returns beginning of if-block if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-* py-end-of-if-block
- Go to the end of if-block.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-* py-beginning-of-try-block
- Returns beginning of try-block if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-* py-end-of-try-block
- Go to the end of try-block.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-* py-beginning-of-minor-block
- Returns beginning of minor-block if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-* py-end-of-minor-block
- Go to the end of minor-block.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-* py-beginning-of-expression
- Go to the beginning of a compound python expression.
-
-A a compound python expression might be concatenated by "." operator, thus composed by minor python expressions.
-
-If already at the beginning or before a expression, go to next expression in buffer upwards
-
-Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference
-Operators however are left aside resp. limit py-expression designed for edit-purposes.
-
-* py-end-of-expression
- Go to the end of a compound python expression.
-
-A a compound python expression might be concatenated by "." operator, thus composed by minor python expressions.
-
-Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference
-
-Operators however are left aside resp. limit py-expression designed for edit-purposes.
-* py-beginning-of-partial-expression
- Go to the beginning of a minor python expression.
-
-"." operators delimit a minor expression on their level.
-Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference
-Operators however are left aside resp. limit py-expression designed for edit-purposes.
-
-If already at the beginning or before a partial-expression, go to next partial-expression in buffer upwards
-* py-end-of-partial-expression
- Go to the end of a minor python expression.
-
-"." operators delimit a minor expression on their level.
-Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference
-Operators however are left aside resp. limit py-expression designed for edit-purposes.
-* py-beginning-of-line
- Go to beginning-of-line, return position.
-
-If already at beginning-of-line and not at BOB, go to beginning of previous line.
-* py-end-of-line
- Go to end-of-line, return position.
-
-If already at end-of-line and not at EOB, go to end of next line.
-* py-beginning-of-statement
- Go to the initial line of a simple statement.
-
-For beginning of compound statement use py-beginning-of-block.
-For beginning of clause py-beginning-of-clause.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-
-* py-end-of-statement
- Go to the last char of current statement.
-
-To go just beyond the final line of the current statement, use `py-down-statement-lc'.
-* py-goto-statement-below
- Goto beginning of next statement.
-* py-mark-paragraph
- Mark paragraph at point.
-
-Returns beginning and end positions of marked area, a cons.
-* py-mark-block
- Mark block at point.
-
-Returns beginning and end positions of marked area, a cons.
-* py-mark-clause
- Mark clause at point.
-
-Returns beginning and end positions of marked area, a cons.
-* py-mark-block-or-clause
- Mark block-or-clause at point.
-
-Returns beginning and end positions of marked area, a cons.
-* py-mark-def
- Mark def at point.
-
-With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too.
-Returns beginning and end positions of marked area, a cons.
-* py-mark-class
- Mark class at point.
-
-With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too.
-Returns beginning and end positions of marked area, a cons.
-* py-mark-def-or-class
- Mark def-or-class at point.
-
-With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too.
-Returns beginning and end positions of marked area, a cons.
-* py-mark-line
- Mark line at point.
-
-Returns beginning and end positions of marked area, a cons.
-* py-mark-statement
- Mark statement at point.
-
-Returns beginning and end positions of marked area, a cons.
-* py-mark-expression
- Mark expression at point.
-
-Returns beginning and end positions of marked area, a cons.
-* py-mark-partial-expression
- Mark partial-expression at point.
-
-Returns beginning and end positions of marked area, a cons.
-* py-beginning-of-decorator
- Go to the beginning of a decorator.
-
-Returns position if succesful
-* py-end-of-decorator
- Go to the end of a decorator.
-
-Returns position if succesful
-* py-copy-expression
- Mark expression at point.
-
-Returns beginning and end positions of marked area, a cons.
-* py-copy-partial-expression
- Mark partial-expression at point.
-
-Returns beginning and end positions of marked area, a cons.
-
-"." operators delimit a partial-expression expression on it's level, that's the difference to compound expressions.
-
-Given the function below, `py-partial-expression'
-called at pipe symbol would copy and return:
-
-def usage():
- print """Usage: %s
- ....""" % (
- os.path.basename(sys.argv[0]))
-------------|-------------------------
-==> path
-
- os.path.basename(sys.argv[0]))
-------------------|-------------------
-==> basename(sys.argv[0]))
-
- os.path.basename(sys.argv[0]))
---------------------------|-----------
-==> sys
-
- os.path.basename(sys.argv[0]))
-------------------------------|-------
-==> argv[0]
-
-while `py-expression' would copy and return
-
-(
- os.path.basename(sys.argv[0]))
-
-;;;;;
-
-Also for existing commands a shorthand is defined:
-
-(defalias 'py-statement 'py-copy-statement)
-* py-copy-statement
- Mark statement at point.
-
-Returns beginning and end positions of marked area, a cons.
-* py-copy-block
- Mark block at point.
-
-Returns beginning and end positions of marked area, a cons.
-* py-copy-block-or-clause
- Mark block-or-clause at point.
-
-Returns beginning and end positions of marked area, a cons.
-* py-copy-def
- Mark def at point.
-
-With universal argument or `py-mark-decorators' set to `t' decorators are copied too.
-Returns beginning and end positions of marked area, a cons.
-* py-copy-def-or-class
- Mark def-or-class at point.
-
-With universal argument or `py-mark-decorators' set to `t' decorators are copied too.
-Returns beginning and end positions of marked area, a cons.
-* py-copy-class
- Mark class at point.
-
-With universal argument or `py-mark-decorators' set to `t' decorators are copied too.
-Returns beginning and end positions of marked area, a cons.
-* py-copy-clause
- Mark clause at point.
- Returns beginning and end positions of marked area, a cons.
-* py-kill-expression
- Delete expression at point.
- Stores data in kill ring. Might be yanked back using `C-y'.
-* py-kill-partial-expression
- Delete partial-expression at point.
- Stores data in kill ring. Might be yanked back using `C-y'.
-
-"." operators delimit a partial-expression expression on it's level, that's the difference to compound expressions.
-* py-kill-statement
- Delete statement at point.
-
-Stores data in kill ring. Might be yanked back using `C-y'.
-* py-kill-block
- Delete block at point.
-
-Stores data in kill ring. Might be yanked back using `C-y'.
-* py-kill-block-or-clause
- Delete block-or-clause at point.
-
-Stores data in kill ring. Might be yanked back using `C-y'.
-* py-kill-def-or-class
- Delete def-or-class at point.
-
-Stores data in kill ring. Might be yanked back using `C-y'.
-* py-kill-class
- Delete class at point.
-
-Stores data in kill ring. Might be yanked back using `C-y'.
-* py-kill-def
- Delete def at point.
-
-Stores data in kill ring. Might be yanked back using `C-y'.
-* py-kill-clause
- Delete clause at point.
-
-Stores data in kill ring. Might be yanked back using `C-y'.
-* py-forward-line
- Goes to end of line after forward move.
-
-Travels right-margin comments.
-* py-go-to-beginning-of-comment
- Go to the beginning of current line's comment, if any.
-
-From a programm use `py-beginning-of-comment' instead
-* py-leave-comment-or-string-backward
- If inside a comment or string, leave it backward.
-* py-beginning-of-list-pps
- Go to the beginning of a list.
-Optional ARG indicates a start-position for `parse-partial-sexp'.
-Return beginning position, nil if not inside.
-* py-down-block-lc
- Goto beginning of line following end of block.
-
-Returns position reached, if successful, nil otherwise.
-
-"-lc" stands for "left-corner" - a complementary command travelling left, whilst `py-end-of-block' stops at right corner.
-
-See also `py-down-block': down from current definition to next beginning of block below.
-* py-down-clause-lc
- Goto beginning of line following end of clause.
-
-Returns position reached, if successful, nil otherwise.
-
-"-lc" stands for "left-corner" - a complementary command travelling left, whilst `py-end-of-clause' stops at right corner.
-
-See also `py-down-clause': down from current definition to next beginning of clause below.
-* py-down-def-lc
- Goto beginning of line following end of def.
-
-Returns position reached, if successful, nil otherwise.
-
-"-lc" stands for "left-corner" - a complementary command travelling left, whilst `py-end-of-def' stops at right corner.
-
-See also `py-down-def': down from current definition to next beginning of def below.
-* py-down-class-lc
- Goto beginning of line following end of class.
-
-Returns position reached, if successful, nil otherwise.
-
-"-lc" stands for "left-corner" - a complementary command travelling left, whilst `py-end-of-class' stops at right corner.
-
-See also `py-down-class': down from current definition to next beginning of class below.
-* py-down-statement-lc
- Goto beginning of line following end of statement.
-
-Returns position reached, if successful, nil otherwise.
-
-"-lc" stands for "left-corner" - a complementary command travelling left, whilst `py-end-of-statement' stops at right corner.
-
-See also `py-down-statement': down from current definition to next beginning of statement below.
-* py-down-statement
- Go to the beginning of next statement below in buffer.
-
-Returns indentation if statement found, nil otherwise.
-* py-down-block
- Go to the beginning of next block below in buffer.
-
-Returns indentation if block found, nil otherwise.
-* py-down-clause
- Go to the beginning of next clause below in buffer.
-
-Returns indentation if clause found, nil otherwise.
-* py-down-block-or-clause
- Go to the beginning of next block-or-clause below in buffer.
-
-Returns indentation if block-or-clause found, nil otherwise.
-* py-down-def
- Go to the beginning of next def below in buffer.
-
-Returns indentation if def found, nil otherwise.
-* py-down-class
- Go to the beginning of next class below in buffer.
-
-Returns indentation if class found, nil otherwise.
-* py-down-def-or-class
- Go to the beginning of next def-or-class below in buffer.
-
-Returns indentation if def-or-class found, nil otherwise.
-* py-forward-into-nomenclature
- Move forward to end of a nomenclature section or word.
-
-With C-u (programmatically, optional argument ARG), do it that many times.
-
-A `nomenclature' is a fancy way of saying AWordWithMixedCaseNotUnderscores.
-* py-backward-into-nomenclature
- Move backward to beginning of a nomenclature section or word.
-
-With optional ARG, move that many times. If ARG is negative, move
-forward.
-
-A `nomenclature' is a fancy way of saying AWordWithMixedCaseNotUnderscores.
-* match-paren
- Go to the matching brace, bracket or parenthesis if on its counterpart.
-
-Otherwise insert the character, the key is assigned to, here `%'.
-With universal arg insert a `%'.
-* py-toggle-execute-keep-temporary-file-p
- Toggle py-execute-keep-temporary-file-p
-* py-guess-default-python
- Defaults to "python", if guessing didn't succeed.
-* py-set-shell-completion-environment
- Sets `...-completion-command-string' and `py-complete-function'.
-* py-set-ipython-completion-command-string
- Set and return `ipython-completion-command-string'.
-* py-shell-dedicated
- Start an interactive Python interpreter in another window.
-
-With optional C-u user is prompted by
-`py-choose-shell' for command and options to pass to the Python
-interpreter.
-
-* py-shell
- Start an interactive Python interpreter in another window.
-
-Interactively, C-u 4 prompts for a buffer.
-C-u 2 prompts for `py-python-command-args'.
-If `default-directory' is a remote file name, it is also prompted
-to change if called with a prefix arg.
-
-Returns py-shell's buffer-name.
-Optional string PYSHELLNAME overrides default `py-shell-name'.
-Optional symbol SWITCH ('switch/'noswitch) precedes `py-switch-buffers-on-execute-p'
-When SEPCHAR is given, `py-shell' must not detect the file-separator.
-BUFFER allows specifying a name, the Python process is connected to
-When DONE is `t', `py-shell-manage-windows' is omitted
-
-* python
- Start an Python interpreter.
-
-Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs.
-* ipython
- Start an IPython interpreter.
-
-Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs.
-* python3
- Start an Python3 interpreter.
-
-Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs.
-* python2
- Start an Python2 interpreter.
-
-Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs.
-* python2\.7
- Start an Python2.7 interpreter.
-
-Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs.
-* jython
- Start an Jython interpreter.
-
-Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs.
-* bpython
- Start an BPython interpreter.
-
-Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs.
-* python3\.2
- Start an Python3.2 interpreter.
-
-Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs.
-* python-dedicated
- Start an unique Python interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'.
-* ipython-dedicated
- Start an unique IPython interpreter in another window.
-
-Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'.
-* python3-dedicated
- Start an unique Python3 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'.
-* python2-dedicated
- Start an unique Python2 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'.
-* python2\.7-dedicated
- Start an unique Python2.7 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'.
-* jython-dedicated
- Start an unique Jython interpreter in another window.
-
-Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'.
-* python3\.2-dedicated
- Start an unique Python3.2 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'.
-* python-switch
- Switch to Python interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'.
-* ipython-switch
- Switch to IPython interpreter in another window.
-
-Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'.
-* python3-switch
- Switch to Python3 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'.
-* python2-switch
- Switch to Python2 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'.
-* python2\.7-switch
- Switch to Python2.7 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'.
-* jython-switch
- Switch to Jython interpreter in another window.
-
-Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'.
-* python3\.2-switch
- Switch to Python3.2 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'.
-* python-no-switch
- Open an Python interpreter in another window, but do not switch to it.
-
-Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'.
-* ipython-no-switch
- Open an IPython interpreter in another window, but do not switch to it.
-
-Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'.
-* python3-no-switch
- Open an Python3 interpreter in another window, but do not switch to it.
-
-Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'.
-* python2-no-switch
- Open an Python2 interpreter in another window, but do not switch to it.
-
-Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'.
-* python2\.7-no-switch
- Open an Python2.7 interpreter in another window, but do not switch to it.
-
-Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'.
-* jython-no-switch
- Open an Jython interpreter in another window, but do not switch to it.
-
-Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'.
-* python3\.2-no-switch
- Open an Python3.2 interpreter in another window, but do not switch to it.
-
-Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'.
-* python-switch-dedicated
- Switch to an unique Python interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'.
-* ipython-switch-dedicated
- Switch to an unique IPython interpreter in another window.
-
-Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'.
-* python3-switch-dedicated
- Switch to an unique Python3 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'.
-* python2-switch-dedicated
- Switch to an unique Python2 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'.
-* python2\.7-switch-dedicated
- Switch to an unique Python2.7 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'.
-* jython-switch-dedicated
- Switch to an unique Jython interpreter in another window.
-
-Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'.
-* python3\.2-switch-dedicated
- Switch to an unique Python3.2 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'.
-* py-which-execute-file-command
- Return the command appropriate to Python version.
-
-Per default it's "(format "execfile(r'%s') # PYTHON-MODE\n" filename)" for Python 2 series.
-* py-execute-region-no-switch
- Send the region to a Python interpreter.
-
-Ignores setting of `py-switch-buffers-on-execute-p', buffer with region stays current.
-
-* py-execute-region-switch
- Send the region to a Python interpreter.
-
-Ignores setting of `py-switch-buffers-on-execute-p', output-buffer will being switched to.
-
-* py-execute-region
- Send the region to a Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)
-
-* py-execute-region-default
- Send the region to the systems default Python interpreter.
-See also `py-execute-region'.
-* py-execute-region-dedicated
- Get the region processed by an unique Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-* py-execute-region-default-dedicated
- Send the region to an unique shell of systems default Python.
-* py-execute-string
- Send the argument STRING to a Python interpreter.
-
-See also `py-execute-region'.
-* py-execute-string-dedicated
- Send the argument STRING to an unique Python interpreter.
-
-See also `py-execute-region'.
-* py-fetch-py-master-file
- Lookup if a `py-master-file' is specified.
-
-See also doku of variable `py-master-file'
-* py-execute-import-or-reload
- Import the current buffer's file in a Python interpreter.
-
-If the file has already been imported, then do reload instead to get
-the latest version.
-
-If the file's name does not end in ".py", then do execfile instead.
-
-If the current buffer is not visiting a file, do `py-execute-buffer'
-instead.
-
-If the file local variable `py-master-file' is non-nil, import or
-reload the named file instead of the buffer's file. The file may be
-saved based on the value of `py-execute-import-or-reload-save-p'.
-
-See also `M-x py-execute-region'.
-
-This may be preferable to `M-x py-execute-buffer' because:
-
- - Definitions stay in their module rather than appearing at top
- level, where they would clutter the global namespace and not affect
- uses of qualified names (MODULE.NAME).
-
- - The Python debugger gets line number information about the functions.
-* py-execute-buffer-dedicated
- Send the contents of the buffer to a unique Python interpreter.
-
-If the file local variable `py-master-file' is non-nil, execute the
-named file instead of the buffer's file.
-
-If a clipping restriction is in effect, only the accessible portion of the buffer is sent. A trailing newline will be supplied if needed.
-
-With M-x univeral-argument user is prompted to specify another then default shell.
-See also `M-x py-execute-region'.
-* py-execute-buffer-switch
- Send the contents of the buffer to a Python interpreter and switches to output.
-
-If the file local variable `py-master-file' is non-nil, execute the
-named file instead of the buffer's file.
-If there is a *Python* process buffer, it is used.
-If a clipping restriction is in effect, only the accessible portion of the buffer is sent. A trailing newline will be supplied if needed.
-
-With M-x univeral-argument user is prompted to specify another then default shell.
-See also `M-x py-execute-region'.
-* py-execute-buffer-dedicated-switch
- Send the contents of the buffer to an unique Python interpreter.
-
-Ignores setting of `py-switch-buffers-on-execute-p'.
-If the file local variable `py-master-file' is non-nil, execute the
-named file instead of the buffer's file.
-
-If a clipping restriction is in effect, only the accessible portion of the buffer is sent. A trailing newline will be supplied if needed.
-
-With M-x univeral-argument user is prompted to specify another then default shell.
-See also `M-x py-execute-region'.
-* py-execute-buffer
- Send the contents of the buffer to a Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-If the file local variable `py-master-file' is non-nil, execute the
-named file instead of the buffer's file.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)
-* py-execute-buffer-no-switch
- Send the contents of the buffer to a Python interpreter but don't switch to output.
-
-If the file local variable `py-master-file' is non-nil, execute the
-named file instead of the buffer's file.
-If there is a *Python* process buffer, it is used.
-If a clipping restriction is in effect, only the accessible portion of the buffer is sent. A trailing newline will be supplied if needed.
-
-With M-x univeral-argument user is prompted to specify another then default shell.
-See also `M-x py-execute-region'.
-* py-execute-defun
- Send the current defun (class or method) to the inferior Python process.
-* py-process-file
- Process "python filename".
-
-Optional OUTPUT-BUFFER and ERROR-BUFFER might be given.
-* py-exec-execfile-region
- Execute the region in a Python interpreter.
-* py-exec-execfile
- Process "python filename",
-Optional OUTPUT-BUFFER and ERROR-BUFFER might be given.')
-
-* py-execute-statement
- Send statement at point to a Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)
-* py-execute-block
- Send block at point to a Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)
-* py-execute-block-or-clause
- Send block-or-clause at point to a Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)
-* py-execute-def
- Send def at point to a Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)
-* py-execute-class
- Send class at point to a Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)
-* py-execute-def-or-class
- Send def-or-class at point to a Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)
-* py-execute-expression
- Send expression at point to a Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)
-* py-execute-partial-expression
- Send partial-expression at point to a Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)
-* py-execute-line
- Send current line from beginning of indent to Python interpreter.
-* py-execute-file
- When called interactively, user is prompted for filename.
-* py-down-exception
- Go to the next line down in the traceback.
-
-With M-x univeral-argument (programmatically, optional argument
-BOTTOM), jump to the bottom (innermost) exception in the exception
-stack.
-* py-up-exception
- Go to the previous line up in the traceback.
-
-With C-u (programmatically, optional argument TOP)
-jump to the top (outermost) exception in the exception stack.
-* py-output-buffer-filter
- Clear output buffer from py-shell-input prompt etc.
-* py-send-string
- Evaluate STRING in inferior Python process.
-* py-pdbtrack-toggle-stack-tracking
- Set variable `py-pdbtrack-do-tracking-p'.
-* turn-on-pdbtrack
-
-* turn-off-pdbtrack
-
-* py-fetch-docu
- Lookup in current buffer for the doku for the symbol at point.
-
-Useful for newly defined symbol, not known to python yet.
-* py-find-imports
- Find top-level imports, updating `python-imports'.
-* py-eldoc-function
- Print help on symbol at point.
-* py-describe-symbol
- Print help on symbol at point.
-
-Optional C-u used for debugging, will prevent deletion of temp file.
-* py-describe-mode
- Dump long form of `python-mode' docs.
-* py-find-function
- Find source of definition of function NAME.
-
-Interactively, prompt for name.
-* py-update-imports
- Returns `python-imports'.
-
-Imports done are displayed in message buffer.
-* py-indent-forward-line
- Indent and move one line forward to next indentation.
-Returns column of line reached.
-
-If `py-kill-empty-line' is non-nil, delete an empty line.
-When closing a form, use py-close-block et al, which will move and indent likewise.
-With M-x universal argument just indent.
-
-* py-dedent-forward-line
- Dedent line and move one line forward.
-* py-dedent
- Dedent line according to `py-indent-offset'.
-
-With arg, do it that many times.
-If point is between indent levels, dedent to next level.
-Return indentation reached, if dedent done, nil otherwise.
-
-Affected by `py-dedent-keep-relative-column'.
-* py-close-def
- Set indent level to that of beginning of function definition.
-
-If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline.
-* py-close-class
- Set indent level to that of beginning of class definition.
-
-If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline.
-* py-close-clause
- Set indent level to that of beginning of clause definition.
-
-If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline.
-* py-close-block
- Set indent level to that of beginning of block definition.
-
-If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline.
-* py-class-at-point
- Return class definition as string.
-
-With interactive call, send it to the message buffer too.
-* py-line-at-point
- Return line as string.
- With interactive call, send it to the message buffer too.
-* py-looking-at-keywords-p
- If looking at a python keyword. Returns t or nil.
-* py-match-paren-mode
- py-match-paren-mode nil oder t
-* py-match-paren
- Goto to the opening or closing of block before or after point.
-
-With arg, do it that many times.
- Closes unclosed block if jumping from beginning.
-* py-printform-insert
- Inserts a print statement out of current `(car kill-ring)' by default, inserts ARG instead if delivered.
-* py-documentation
- Launch PyDOC on the Word at Point
-* eva
- Put "eval(...)" forms around strings at point.
-* pst-here
- Kill previous "pdb.set_trace()" and insert it at point.
-* py-line-to-printform-python2
- Transforms the item on current in a print statement.
-* py-switch-imenu-index-function
- For development only. Good old renamed `py-imenu-create-index'-function hangs with medium size files already. Working `py-imenu-create-index-new' is active by default.
-
-Switch between classic index machine `py-imenu-create-index'-function and new `py-imenu-create-index-new'.
-
-The former may provide a more detailed report, thus delivering two different index-machines is considered.
-* py-choose-shell-by-path
- Select Python executable according to version desplayed in path, current buffer-file is selected from.
-
-Returns versioned string, nil if nothing appropriate found
-* py-choose-shell-by-shebang
- Choose shell by looking at #! on the first line.
-
-Returns the specified Python resp. Jython shell command name.
-* py-which-python
- Returns version of Python of current environment, a number.
-* py-python-current-environment
- Returns path of current Python installation.
-* py-switch-shell
- Toggles between the interpreter customized in `py-shell-toggle-1' resp. `py-shell-toggle-2'. Was hard-coded CPython and Jython in earlier versions, now starts with Python2 and Python3 by default.
-
-ARG might be a python-version string to set to.
-
-C-u `py-toggle-shell' prompts to specify a reachable Python command.
-C-u followed by numerical arg 2 or 3, `py-toggle-shell' opens a respective Python shell.
-C-u followed by numerical arg 5 opens a Jython shell.
-
-Should you need more shells to select, extend this command by adding inside the first cond:
-
- ((eq NUMBER (prefix-numeric-value arg))
- "MY-PATH-TO-SHELL")
-
-* py-choose-shell
- Return an appropriate executable as a string.
-
-Returns nil, if no executable found.
-
-This does the following:
- - look for an interpreter with `py-choose-shell-by-shebang'
- - examine imports using `py-choose-shell-by-import'
- - look if Path/To/File indicates a Python version
- - if not successful, return default value of `py-shell-name'
-
-When interactivly called, messages the shell name, Emacs would in the given circtumstances.
-
-With C-u 4 is called `py-switch-shell' see docu there.
-
-* py-toggle-smart-indentation
- If `py-smart-indentation' should be on or off.
-
-Returns value of `py-smart-indentation' switched to.
-* py-smart-indentation-on
- Make sure, `py-smart-indentation' is on.
-
-Returns value of `py-smart-indentation'.
-* py-smart-indentation-off
- Make sure, `py-smart-indentation' is off.
-
-Returns value of `py-smart-indentation'.
-* py-toggle-split-windows-on-execute
- If `py-split-windows-on-execute-p' should be on or off.
-
- Returns value of `py-split-windows-on-execute-p' switched to.
-* py-split-windows-on-execute-on
- Make sure, `py-split-windows-on-execute-p' is on.
-
-Returns value of `py-split-windows-on-execute-p'.
-* py-split-windows-on-execute-off
- Make sure, `py-split-windows-on-execute-p' is off.
-
-Returns value of `py-split-windows-on-execute-p'.
-* clear-flymake-allowed-file-name-masks
- Remove entries with SUFFIX from `flymake-allowed-file-name-masks'.
-
-Default is "\.py\'"
-* pylint-flymake-mode
- Toggle `pylint' `flymake-mode'.
-* pyflakes-flymake-mode
- Toggle `pyflakes' `flymake-mode'.
-* pychecker-flymake-mode
- Toggle `pychecker' `flymake-mode'.
-* pep8-flymake-mode
- Toggle `pep8' `flymake-mode'.
-* pyflakespep8-flymake-mode
- Toggle `pyflakespep8' `flymake-mode'.
-
-Joint call to pyflakes and pep8 as proposed by
-
-Keegan Carruthers-Smith
-
-
-* py-toggle-shell-switch-buffers-on-execute
- If `py-switch-buffers-on-execute-p' should be on or off.
-
- Returns value of `py-switch-buffers-on-execute-p' switched to.
-* py-shell-switch-buffers-on-execute-on
- Make sure, `py-switch-buffers-on-execute-p' is on.
-
-Returns value of `py-switch-buffers-on-execute-p'.
-* py-shell-switch-buffers-on-execute-off
- Make sure, `py-switch-buffers-on-execute-p' is off.
-
-Returns value of `py-switch-buffers-on-execute-p'.
-* py-install-directory-check
- Do some sanity check for `py-install-directory'.
-
-Returns `t' if successful.
-* py-guess-py-install-directory
- Takes value of user directory aka $HOME
-if `(locate-library "python-mode")' is not succesful.
-* py-set-load-path
- Include needed subdirs of python-mode directory.
-* autopair-insert-or-skip-quote
- Insert or possibly skip over a quoting character.
-
-Works by scheduling possible autopair behaviour, then calls
-original command as if autopair didn't exist.
-* autopair-insert-opening
- Insert opening delimiter and possibly automatically close it.
-
-Works by scheduling possible autopair behaviour, then calls
-original command as if autopair didn't exist.
-* autopair-skip-close-maybe
- Insert or possibly skip over a closing delimiter.
-
-Works by scheduling possible autopair behaviour, then calls
-original command as if autopair didn't exist.
-* autopair-backspace
- Possibly delete a pair of paired delimiters.
-
-Works by scheduling possible autopair behaviour, then calls
-original command as if autopair didn't exist.
-* autopair-newline
- Do a smart newline when right between parenthesis.
-
-In other words, insert an extra newline along with the one inserted normally
-by this command. Then place point after the first, indented.
-
-Works by scheduling possible autopair behaviour, then calls
-original command as if autopair didn't exist.
-* autopair-extra-insert-opening
- Insert (an extra) opening delimiter and possibly automatically close it.
-
-Works by scheduling possible autopair behaviour, then calls
-original command as if autopair didn't exist.
-* autopair-extra-skip-close-maybe
- Insert or possibly skip over a (and extra) closing delimiter.
-
-Works by scheduling possible autopair behaviour, then calls
-original command as if autopair didn't exist.
-* autopair-insert-or-skip-paired-delimiter
- Insert or possibly skip over a character with a syntax-class of "paired delimiter".Works by scheduling possible autopair behaviour, then calls
-original command as if autopair didn't exist.
-* py-edit-abbrevs
- Jumps to `python-mode-abbrev-table' in a buffer containing lists of abbrev definitions.
-You can edit them and type C-c C-c to redefine abbrevs
-according to your editing.
-Buffer contains a header line for each abbrev table,
- which is the abbrev table name in parentheses.
-This is followed by one line per abbrev in that table:
-NAME USECOUNT EXPANSION HOOK
-where NAME and EXPANSION are strings with quotes,
-USECOUNT is an integer, and HOOK is any valid function
-or may be omitted (it is usually omitted).
-* py-add-abbrev
- Defines python-mode specific abbrev for last expressions before point.
-Argument is how many `py-partial-expression's form the expansion; or zero means the region is the expansion.
-
-Reads the abbreviation in the minibuffer; with numeric arg it displays a proposal for an abbrev.
-Proposal is composed from the initial character(s) of the
-expansion.
-
-Don't use this function in a Lisp program; use `define-abbrev' instead.
-* py-def-or-class-beginning-position
- Returns beginning position of function or class definition.
-* py-def-or-class-end-position
- Returns end position of function or class definition.
-* py-statement-beginning-position
- Returns beginning position of statement.
-* py-statement-end-position
- Returns end position of statement.
-* py-current-indentation
- Returns beginning position of code in line.
-* py-python-version
- Returns versions number of a Python EXECUTABLE, string.
-
-If no EXECUTABLE given, `py-shell-name' is used.
-Interactively output of `--version' is displayed.
-* py-version
- Echo the current version of `python-mode' in the minibuffer.
-* py-install-search-local
-
-* py-install-local-shells
- Builds Python-shell commands from executable found in LOCAL.
-
-If LOCAL is empty, shell-command `find' searches beneath current directory.
-Eval resulting buffer to install it, see customizable `py-extensions'.
-* py-send-region
- Send the region to the inferior Python process.
-* py-send-buffer
- Send the current buffer to the inferior Python process.
-* py-switch-to-python
- Switch to the Python process buffer, maybe starting new process.
-
-With prefix arg, position cursor at end of buffer.
-* py-send-region-and-go
- Send the region to the inferior Python process.
-
-Then switch to the process buffer.
-* py-load-file
- Load a Python file FILE-NAME into the inferior Python process.
-
-If the file has extension `.py' import or reload it as a module.
-Treating it as a module keeps the global namespace clean, provides
-function location information for debugging, and supports users of
-module-qualified names.
-* py-completion-at-point
- An alternative completion, similar the way python.el does it.
-* py-script-complete
-
-* py-python-script-complete
- Complete word before point, if any. Otherwise insert TAB.
-* py-python2-shell-complete
-
-* py-python3-shell-complete
- Complete word before point, if any. Otherwise insert TAB.
-* py-shell-complete
- Complete word before point, if any. Otherwise insert TAB.
-* ipython-complete
- Complete the python symbol before point.
-
-If no completion available, insert a TAB.
-Returns the completed symbol, a string, if successful, nil otherwise.
-* ipython-complete-py-shell-name
- Complete the python symbol before point.
-
-If no completion available, insert a TAB.
-Returns the completed symbol, a string, if successful, nil otherwise.
-
-Bug: if no IPython-shell is running, fails first time due to header returned, which messes up the result. Please repeat once then.
-* py-pep8-run
- *Run pep8, check formatting (default on the file currently visited).
-
-* py-pep8-help
- Display pep8 command line help messages.
-* py-pylint-run
- *Run pylint (default on the file currently visited).
-
-For help see M-x pylint-help resp. M-x pylint-long-help.
-Home-page: http://www.logilab.org/project/pylint
-* py-pylint-help
- Display Pylint command line help messages.
-
-Let's have this until more Emacs-like help is prepared
-* py-pylint-doku
- Display Pylint Documentation.
-
-Calls `pylint --full-documentation'
-* py-pyflakes-run
- *Run pyflakes (default on the file currently visited).
-
-For help see M-x pyflakes-help resp. M-x pyflakes-long-help.
-Home-page: http://www.logilab.org/project/pyflakes
-* py-pyflakes-help
- Display Pyflakes command line help messages.
-
-Let's have this until more Emacs-like help is prepared
-* py-pyflakespep8-run
- *Run pyflakespep8, check formatting (default on the file currently visited).
-
-* py-pyflakespep8-help
- Display pyflakespep8 command line help messages.
-* py-pychecker-run
- *Run pychecker (default on the file currently visited).
-* virtualenv-current
- barfs the current activated virtualenv
-* virtualenv-activate
- Activate the virtualenv located in DIR
-* virtualenv-deactivate
- Deactivate the current virtual enviroment
-* virtualenv-workon
- Issue a virtualenvwrapper-like virtualenv-workon command
-* py-toggle-local-default-use
-
-* py-execute-statement-python
- Send statement at point to Python interpreter.
-* py-execute-statement-python-switch
- Send statement at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-statement-python-noswitch
- Send statement at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-statement-python-dedicated
- Send statement at point to Python unique interpreter.
-* py-execute-statement-python-dedicated-switch
- Send statement at point to Python unique interpreter and switch to result.
-* py-execute-statement-ipython
- Send statement at point to IPython interpreter.
-* py-execute-statement-ipython-switch
- Send statement at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-statement-ipython-noswitch
- Send statement at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-statement-ipython-dedicated
- Send statement at point to IPython unique interpreter.
-* py-execute-statement-ipython-dedicated-switch
- Send statement at point to IPython unique interpreter and switch to result.
-* py-execute-statement-python3
- Send statement at point to Python3 interpreter.
-* py-execute-statement-python3-switch
- Send statement at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-statement-python3-noswitch
- Send statement at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-statement-python3-dedicated
- Send statement at point to Python3 unique interpreter.
-* py-execute-statement-python3-dedicated-switch
- Send statement at point to Python3 unique interpreter and switch to result.
-* py-execute-statement-python2
- Send statement at point to Python2 interpreter.
-* py-execute-statement-python2-switch
- Send statement at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-statement-python2-noswitch
- Send statement at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-statement-python2-dedicated
- Send statement at point to Python2 unique interpreter.
-* py-execute-statement-python2-dedicated-switch
- Send statement at point to Python2 unique interpreter and switch to result.
-* py-execute-statement-python2\.7
- Send statement at point to Python2.7 interpreter.
-* py-execute-statement-python2\.7-switch
- Send statement at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-statement-python2\.7-noswitch
- Send statement at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-statement-python2\.7-dedicated
- Send statement at point to Python2.7 unique interpreter.
-* py-execute-statement-python2\.7-dedicated-switch
- Send statement at point to Python2.7 unique interpreter and switch to result.
-* py-execute-statement-jython
- Send statement at point to Jython interpreter.
-* py-execute-statement-jython-switch
- Send statement at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-statement-jython-noswitch
- Send statement at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-statement-jython-dedicated
- Send statement at point to Jython unique interpreter.
-* py-execute-statement-jython-dedicated-switch
- Send statement at point to Jython unique interpreter and switch to result.
-* py-execute-statement-python3\.2
- Send statement at point to Python3.2 interpreter.
-* py-execute-statement-python3\.2-switch
- Send statement at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-statement-python3\.2-noswitch
- Send statement at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-statement-python3\.2-dedicated
- Send statement at point to Python3.2 unique interpreter.
-* py-execute-statement-python3\.2-dedicated-switch
- Send statement at point to Python3.2 unique interpreter and switch to result.
-* py-execute-block-python
- Send block at point to Python interpreter.
-* py-execute-block-python-switch
- Send block at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-block-python-noswitch
- Send block at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-block-python-dedicated
- Send block at point to Python unique interpreter.
-* py-execute-block-python-dedicated-switch
- Send block at point to Python unique interpreter and switch to result.
-* py-execute-block-ipython
- Send block at point to IPython interpreter.
-* py-execute-block-ipython-switch
- Send block at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-block-ipython-noswitch
- Send block at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-block-ipython-dedicated
- Send block at point to IPython unique interpreter.
-* py-execute-block-ipython-dedicated-switch
- Send block at point to IPython unique interpreter and switch to result.
-* py-execute-block-python3
- Send block at point to Python3 interpreter.
-* py-execute-block-python3-switch
- Send block at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-block-python3-noswitch
- Send block at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-block-python3-dedicated
- Send block at point to Python3 unique interpreter.
-* py-execute-block-python3-dedicated-switch
- Send block at point to Python3 unique interpreter and switch to result.
-* py-execute-block-python2
- Send block at point to Python2 interpreter.
-* py-execute-block-python2-switch
- Send block at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-block-python2-noswitch
- Send block at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-block-python2-dedicated
- Send block at point to Python2 unique interpreter.
-* py-execute-block-python2-dedicated-switch
- Send block at point to Python2 unique interpreter and switch to result.
-* py-execute-block-python2\.7
- Send block at point to Python2.7 interpreter.
-* py-execute-block-python2\.7-switch
- Send block at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-block-python2\.7-noswitch
- Send block at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-block-python2\.7-dedicated
- Send block at point to Python2.7 unique interpreter.
-* py-execute-block-python2\.7-dedicated-switch
- Send block at point to Python2.7 unique interpreter and switch to result.
-* py-execute-block-jython
- Send block at point to Jython interpreter.
-* py-execute-block-jython-switch
- Send block at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-block-jython-noswitch
- Send block at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-block-jython-dedicated
- Send block at point to Jython unique interpreter.
-* py-execute-block-jython-dedicated-switch
- Send block at point to Jython unique interpreter and switch to result.
-* py-execute-block-python3\.2
- Send block at point to Python3.2 interpreter.
-* py-execute-block-python3\.2-switch
- Send block at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-block-python3\.2-noswitch
- Send block at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-block-python3\.2-dedicated
- Send block at point to Python3.2 unique interpreter.
-* py-execute-block-python3\.2-dedicated-switch
- Send block at point to Python3.2 unique interpreter and switch to result.
-* py-execute-clause-python
- Send clause at point to Python interpreter.
-* py-execute-clause-python-switch
- Send clause at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-clause-python-noswitch
- Send clause at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-clause-python-dedicated
- Send clause at point to Python unique interpreter.
-* py-execute-clause-python-dedicated-switch
- Send clause at point to Python unique interpreter and switch to result.
-* py-execute-clause-ipython
- Send clause at point to IPython interpreter.
-* py-execute-clause-ipython-switch
- Send clause at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-clause-ipython-noswitch
- Send clause at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-clause-ipython-dedicated
- Send clause at point to IPython unique interpreter.
-* py-execute-clause-ipython-dedicated-switch
- Send clause at point to IPython unique interpreter and switch to result.
-* py-execute-clause-python3
- Send clause at point to Python3 interpreter.
-* py-execute-clause-python3-switch
- Send clause at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-clause-python3-noswitch
- Send clause at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-clause-python3-dedicated
- Send clause at point to Python3 unique interpreter.
-* py-execute-clause-python3-dedicated-switch
- Send clause at point to Python3 unique interpreter and switch to result.
-* py-execute-clause-python2
- Send clause at point to Python2 interpreter.
-* py-execute-clause-python2-switch
- Send clause at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-clause-python2-noswitch
- Send clause at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-clause-python2-dedicated
- Send clause at point to Python2 unique interpreter.
-* py-execute-clause-python2-dedicated-switch
- Send clause at point to Python2 unique interpreter and switch to result.
-* py-execute-clause-python2\.7
- Send clause at point to Python2.7 interpreter.
-* py-execute-clause-python2\.7-switch
- Send clause at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-clause-python2\.7-noswitch
- Send clause at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-clause-python2\.7-dedicated
- Send clause at point to Python2.7 unique interpreter.
-* py-execute-clause-python2\.7-dedicated-switch
- Send clause at point to Python2.7 unique interpreter and switch to result.
-* py-execute-clause-jython
- Send clause at point to Jython interpreter.
-* py-execute-clause-jython-switch
- Send clause at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-clause-jython-noswitch
- Send clause at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-clause-jython-dedicated
- Send clause at point to Jython unique interpreter.
-* py-execute-clause-jython-dedicated-switch
- Send clause at point to Jython unique interpreter and switch to result.
-* py-execute-clause-python3\.2
- Send clause at point to Python3.2 interpreter.
-* py-execute-clause-python3\.2-switch
- Send clause at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-clause-python3\.2-noswitch
- Send clause at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-clause-python3\.2-dedicated
- Send clause at point to Python3.2 unique interpreter.
-* py-execute-clause-python3\.2-dedicated-switch
- Send clause at point to Python3.2 unique interpreter and switch to result.
-* py-execute-block-or-clause-python
- Send block-or-clause at point to Python interpreter.
-* py-execute-block-or-clause-python-switch
- Send block-or-clause at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-block-or-clause-python-noswitch
- Send block-or-clause at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-block-or-clause-python-dedicated
- Send block-or-clause at point to Python unique interpreter.
-* py-execute-block-or-clause-python-dedicated-switch
- Send block-or-clause at point to Python unique interpreter and switch to result.
-* py-execute-block-or-clause-ipython
- Send block-or-clause at point to IPython interpreter.
-* py-execute-block-or-clause-ipython-switch
- Send block-or-clause at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-block-or-clause-ipython-noswitch
- Send block-or-clause at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-block-or-clause-ipython-dedicated
- Send block-or-clause at point to IPython unique interpreter.
-* py-execute-block-or-clause-ipython-dedicated-switch
- Send block-or-clause at point to IPython unique interpreter and switch to result.
-* py-execute-block-or-clause-python3
- Send block-or-clause at point to Python3 interpreter.
-* py-execute-block-or-clause-python3-switch
- Send block-or-clause at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-block-or-clause-python3-noswitch
- Send block-or-clause at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-block-or-clause-python3-dedicated
- Send block-or-clause at point to Python3 unique interpreter.
-* py-execute-block-or-clause-python3-dedicated-switch
- Send block-or-clause at point to Python3 unique interpreter and switch to result.
-* py-execute-block-or-clause-python2
- Send block-or-clause at point to Python2 interpreter.
-* py-execute-block-or-clause-python2-switch
- Send block-or-clause at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-block-or-clause-python2-noswitch
- Send block-or-clause at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-block-or-clause-python2-dedicated
- Send block-or-clause at point to Python2 unique interpreter.
-* py-execute-block-or-clause-python2-dedicated-switch
- Send block-or-clause at point to Python2 unique interpreter and switch to result.
-* py-execute-block-or-clause-python2\.7
- Send block-or-clause at point to Python2.7 interpreter.
-* py-execute-block-or-clause-python2\.7-switch
- Send block-or-clause at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-block-or-clause-python2\.7-noswitch
- Send block-or-clause at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-block-or-clause-python2\.7-dedicated
- Send block-or-clause at point to Python2.7 unique interpreter.
-* py-execute-block-or-clause-python2\.7-dedicated-switch
- Send block-or-clause at point to Python2.7 unique interpreter and switch to result.
-* py-execute-block-or-clause-jython
- Send block-or-clause at point to Jython interpreter.
-* py-execute-block-or-clause-jython-switch
- Send block-or-clause at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-block-or-clause-jython-noswitch
- Send block-or-clause at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-block-or-clause-jython-dedicated
- Send block-or-clause at point to Jython unique interpreter.
-* py-execute-block-or-clause-jython-dedicated-switch
- Send block-or-clause at point to Jython unique interpreter and switch to result.
-* py-execute-block-or-clause-python3\.2
- Send block-or-clause at point to Python3.2 interpreter.
-* py-execute-block-or-clause-python3\.2-switch
- Send block-or-clause at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-block-or-clause-python3\.2-noswitch
- Send block-or-clause at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-block-or-clause-python3\.2-dedicated
- Send block-or-clause at point to Python3.2 unique interpreter.
-* py-execute-block-or-clause-python3\.2-dedicated-switch
- Send block-or-clause at point to Python3.2 unique interpreter and switch to result.
-* py-execute-def-python
- Send def at point to Python interpreter.
-* py-execute-def-python-switch
- Send def at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-def-python-noswitch
- Send def at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-def-python-dedicated
- Send def at point to Python unique interpreter.
-* py-execute-def-python-dedicated-switch
- Send def at point to Python unique interpreter and switch to result.
-* py-execute-def-ipython
- Send def at point to IPython interpreter.
-* py-execute-def-ipython-switch
- Send def at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-def-ipython-noswitch
- Send def at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-def-ipython-dedicated
- Send def at point to IPython unique interpreter.
-* py-execute-def-ipython-dedicated-switch
- Send def at point to IPython unique interpreter and switch to result.
-* py-execute-def-python3
- Send def at point to Python3 interpreter.
-* py-execute-def-python3-switch
- Send def at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-def-python3-noswitch
- Send def at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-def-python3-dedicated
- Send def at point to Python3 unique interpreter.
-* py-execute-def-python3-dedicated-switch
- Send def at point to Python3 unique interpreter and switch to result.
-* py-execute-def-python2
- Send def at point to Python2 interpreter.
-* py-execute-def-python2-switch
- Send def at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-def-python2-noswitch
- Send def at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-def-python2-dedicated
- Send def at point to Python2 unique interpreter.
-* py-execute-def-python2-dedicated-switch
- Send def at point to Python2 unique interpreter and switch to result.
-* py-execute-def-python2\.7
- Send def at point to Python2.7 interpreter.
-* py-execute-def-python2\.7-switch
- Send def at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-def-python2\.7-noswitch
- Send def at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-def-python2\.7-dedicated
- Send def at point to Python2.7 unique interpreter.
-* py-execute-def-python2\.7-dedicated-switch
- Send def at point to Python2.7 unique interpreter and switch to result.
-* py-execute-def-jython
- Send def at point to Jython interpreter.
-* py-execute-def-jython-switch
- Send def at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-def-jython-noswitch
- Send def at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-def-jython-dedicated
- Send def at point to Jython unique interpreter.
-* py-execute-def-jython-dedicated-switch
- Send def at point to Jython unique interpreter and switch to result.
-* py-execute-def-python3\.2
- Send def at point to Python3.2 interpreter.
-* py-execute-def-python3\.2-switch
- Send def at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-def-python3\.2-noswitch
- Send def at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-def-python3\.2-dedicated
- Send def at point to Python3.2 unique interpreter.
-* py-execute-def-python3\.2-dedicated-switch
- Send def at point to Python3.2 unique interpreter and switch to result.
-* py-execute-class-python
- Send class at point to Python interpreter.
-* py-execute-class-python-switch
- Send class at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-class-python-noswitch
- Send class at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-class-python-dedicated
- Send class at point to Python unique interpreter.
-* py-execute-class-python-dedicated-switch
- Send class at point to Python unique interpreter and switch to result.
-* py-execute-class-ipython
- Send class at point to IPython interpreter.
-* py-execute-class-ipython-switch
- Send class at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-class-ipython-noswitch
- Send class at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-class-ipython-dedicated
- Send class at point to IPython unique interpreter.
-* py-execute-class-ipython-dedicated-switch
- Send class at point to IPython unique interpreter and switch to result.
-* py-execute-class-python3
- Send class at point to Python3 interpreter.
-* py-execute-class-python3-switch
- Send class at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-class-python3-noswitch
- Send class at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-class-python3-dedicated
- Send class at point to Python3 unique interpreter.
-* py-execute-class-python3-dedicated-switch
- Send class at point to Python3 unique interpreter and switch to result.
-* py-execute-class-python2
- Send class at point to Python2 interpreter.
-* py-execute-class-python2-switch
- Send class at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-class-python2-noswitch
- Send class at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-class-python2-dedicated
- Send class at point to Python2 unique interpreter.
-* py-execute-class-python2-dedicated-switch
- Send class at point to Python2 unique interpreter and switch to result.
-* py-execute-class-python2\.7
- Send class at point to Python2.7 interpreter.
-* py-execute-class-python2\.7-switch
- Send class at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-class-python2\.7-noswitch
- Send class at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-class-python2\.7-dedicated
- Send class at point to Python2.7 unique interpreter.
-* py-execute-class-python2\.7-dedicated-switch
- Send class at point to Python2.7 unique interpreter and switch to result.
-* py-execute-class-jython
- Send class at point to Jython interpreter.
-* py-execute-class-jython-switch
- Send class at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-class-jython-noswitch
- Send class at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-class-jython-dedicated
- Send class at point to Jython unique interpreter.
-* py-execute-class-jython-dedicated-switch
- Send class at point to Jython unique interpreter and switch to result.
-* py-execute-class-python3\.2
- Send class at point to Python3.2 interpreter.
-* py-execute-class-python3\.2-switch
- Send class at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-class-python3\.2-noswitch
- Send class at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-class-python3\.2-dedicated
- Send class at point to Python3.2 unique interpreter.
-* py-execute-class-python3\.2-dedicated-switch
- Send class at point to Python3.2 unique interpreter and switch to result.
-* py-execute-region-python
- Send region at point to Python interpreter.
-* py-execute-region-python-switch
- Send region at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-region-python-noswitch
- Send region at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-region-python-dedicated
- Send region at point to Python unique interpreter.
-* py-execute-region-python-dedicated-switch
- Send region at point to Python unique interpreter and switch to result.
-* py-execute-region-ipython
- Send region at point to IPython interpreter.
-* py-execute-region-ipython-switch
- Send region at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-region-ipython-noswitch
- Send region at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-region-ipython-dedicated
- Send region at point to IPython unique interpreter.
-* py-execute-region-ipython-dedicated-switch
- Send region at point to IPython unique interpreter and switch to result.
-* py-execute-region-python3
- Send region at point to Python3 interpreter.
-* py-execute-region-python3-switch
- Send region at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-region-python3-noswitch
- Send region at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-region-python3-dedicated
- Send region at point to Python3 unique interpreter.
-* py-execute-region-python3-dedicated-switch
- Send region at point to Python3 unique interpreter and switch to result.
-* py-execute-region-python2
- Send region at point to Python2 interpreter.
-* py-execute-region-python2-switch
- Send region at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-region-python2-noswitch
- Send region at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-region-python2-dedicated
- Send region at point to Python2 unique interpreter.
-* py-execute-region-python2-dedicated-switch
- Send region at point to Python2 unique interpreter and switch to result.
-* py-execute-region-python2\.7
- Send region at point to Python2.7 interpreter.
-* py-execute-region-python2\.7-switch
- Send region at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-region-python2\.7-noswitch
- Send region at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-region-python2\.7-dedicated
- Send region at point to Python2.7 unique interpreter.
-* py-execute-region-python2\.7-dedicated-switch
- Send region at point to Python2.7 unique interpreter and switch to result.
-* py-execute-region-jython
- Send region at point to Jython interpreter.
-* py-execute-region-jython-switch
- Send region at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-region-jython-noswitch
- Send region at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-region-jython-dedicated
- Send region at point to Jython unique interpreter.
-* py-execute-region-jython-dedicated-switch
- Send region at point to Jython unique interpreter and switch to result.
-* py-execute-region-python3\.2
- Send region at point to Python3.2 interpreter.
-* py-execute-region-python3\.2-switch
- Send region at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-region-python3\.2-noswitch
- Send region at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-region-python3\.2-dedicated
- Send region at point to Python3.2 unique interpreter.
-* py-execute-region-python3\.2-dedicated-switch
- Send region at point to Python3.2 unique interpreter and switch to result.
-* py-execute-buffer-python
- Send buffer at point to Python interpreter.
-* py-execute-buffer-python-switch
- Send buffer at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-buffer-python-noswitch
- Send buffer at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-buffer-python-dedicated
- Send buffer at point to Python unique interpreter.
-* py-execute-buffer-python-dedicated-switch
- Send buffer at point to Python unique interpreter and switch to result.
-* py-execute-buffer-ipython
- Send buffer at point to IPython interpreter.
-* py-execute-buffer-ipython-switch
- Send buffer at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-buffer-ipython-noswitch
- Send buffer at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-buffer-ipython-dedicated
- Send buffer at point to IPython unique interpreter.
-* py-execute-buffer-ipython-dedicated-switch
- Send buffer at point to IPython unique interpreter and switch to result.
-* py-execute-buffer-python3
- Send buffer at point to Python3 interpreter.
-* py-execute-buffer-python3-switch
- Send buffer at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-buffer-python3-noswitch
- Send buffer at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-buffer-python3-dedicated
- Send buffer at point to Python3 unique interpreter.
-* py-execute-buffer-python3-dedicated-switch
- Send buffer at point to Python3 unique interpreter and switch to result.
-* py-execute-buffer-python2
- Send buffer at point to Python2 interpreter.
-* py-execute-buffer-python2-switch
- Send buffer at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-buffer-python2-noswitch
- Send buffer at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-buffer-python2-dedicated
- Send buffer at point to Python2 unique interpreter.
-* py-execute-buffer-python2-dedicated-switch
- Send buffer at point to Python2 unique interpreter and switch to result.
-* py-execute-buffer-python2\.7
- Send buffer at point to Python2.7 interpreter.
-* py-execute-buffer-python2\.7-switch
- Send buffer at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-buffer-python2\.7-noswitch
- Send buffer at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-buffer-python2\.7-dedicated
- Send buffer at point to Python2.7 unique interpreter.
-* py-execute-buffer-python2\.7-dedicated-switch
- Send buffer at point to Python2.7 unique interpreter and switch to result.
-* py-execute-buffer-jython
- Send buffer at point to Jython interpreter.
-* py-execute-buffer-jython-switch
- Send buffer at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-buffer-jython-noswitch
- Send buffer at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-buffer-jython-dedicated
- Send buffer at point to Jython unique interpreter.
-* py-execute-buffer-jython-dedicated-switch
- Send buffer at point to Jython unique interpreter and switch to result.
-* py-execute-buffer-python3\.2
- Send buffer at point to Python3.2 interpreter.
-* py-execute-buffer-python3\.2-switch
- Send buffer at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-buffer-python3\.2-noswitch
- Send buffer at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-buffer-python3\.2-dedicated
- Send buffer at point to Python3.2 unique interpreter.
-* py-execute-buffer-python3\.2-dedicated-switch
- Send buffer at point to Python3.2 unique interpreter and switch to result.
-* py-execute-expression-python
- Send expression at point to Python interpreter.
-* py-execute-expression-python-switch
- Send expression at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-expression-python-noswitch
- Send expression at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-expression-python-dedicated
- Send expression at point to Python unique interpreter.
-* py-execute-expression-python-dedicated-switch
- Send expression at point to Python unique interpreter and switch to result.
-* py-execute-expression-ipython
- Send expression at point to IPython interpreter.
-* py-execute-expression-ipython-switch
- Send expression at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-expression-ipython-noswitch
- Send expression at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-expression-ipython-dedicated
- Send expression at point to IPython unique interpreter.
-* py-execute-expression-ipython-dedicated-switch
- Send expression at point to IPython unique interpreter and switch to result.
-* py-execute-expression-python3
- Send expression at point to Python3 interpreter.
-* py-execute-expression-python3-switch
- Send expression at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-expression-python3-noswitch
- Send expression at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-expression-python3-dedicated
- Send expression at point to Python3 unique interpreter.
-* py-execute-expression-python3-dedicated-switch
- Send expression at point to Python3 unique interpreter and switch to result.
-* py-execute-expression-python2
- Send expression at point to Python2 interpreter.
-* py-execute-expression-python2-switch
- Send expression at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-expression-python2-noswitch
- Send expression at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-expression-python2-dedicated
- Send expression at point to Python2 unique interpreter.
-* py-execute-expression-python2-dedicated-switch
- Send expression at point to Python2 unique interpreter and switch to result.
-* py-execute-expression-python2\.7
- Send expression at point to Python2.7 interpreter.
-* py-execute-expression-python2\.7-switch
- Send expression at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-expression-python2\.7-noswitch
- Send expression at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-expression-python2\.7-dedicated
- Send expression at point to Python2.7 unique interpreter.
-* py-execute-expression-python2\.7-dedicated-switch
- Send expression at point to Python2.7 unique interpreter and switch to result.
-* py-execute-expression-jython
- Send expression at point to Jython interpreter.
-* py-execute-expression-jython-switch
- Send expression at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-expression-jython-noswitch
- Send expression at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-expression-jython-dedicated
- Send expression at point to Jython unique interpreter.
-* py-execute-expression-jython-dedicated-switch
- Send expression at point to Jython unique interpreter and switch to result.
-* py-execute-expression-python3\.2
- Send expression at point to Python3.2 interpreter.
-* py-execute-expression-python3\.2-switch
- Send expression at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-expression-python3\.2-noswitch
- Send expression at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-expression-python3\.2-dedicated
- Send expression at point to Python3.2 unique interpreter.
-* py-execute-expression-python3\.2-dedicated-switch
- Send expression at point to Python3.2 unique interpreter and switch to result.
-* py-execute-partial-expression-python
- Send partial-expression at point to Python interpreter.
-* py-execute-partial-expression-python-switch
- Send partial-expression at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-partial-expression-python-noswitch
- Send partial-expression at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-partial-expression-python-dedicated
- Send partial-expression at point to Python unique interpreter.
-* py-execute-partial-expression-python-dedicated-switch
- Send partial-expression at point to Python unique interpreter and switch to result.
-* py-execute-partial-expression-ipython
- Send partial-expression at point to IPython interpreter.
-* py-execute-partial-expression-ipython-switch
- Send partial-expression at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-partial-expression-ipython-noswitch
- Send partial-expression at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-partial-expression-ipython-dedicated
- Send partial-expression at point to IPython unique interpreter.
-* py-execute-partial-expression-ipython-dedicated-switch
- Send partial-expression at point to IPython unique interpreter and switch to result.
-* py-execute-partial-expression-python3
- Send partial-expression at point to Python3 interpreter.
-* py-execute-partial-expression-python3-switch
- Send partial-expression at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-partial-expression-python3-noswitch
- Send partial-expression at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-partial-expression-python3-dedicated
- Send partial-expression at point to Python3 unique interpreter.
-* py-execute-partial-expression-python3-dedicated-switch
- Send partial-expression at point to Python3 unique interpreter and switch to result.
-* py-execute-partial-expression-python2
- Send partial-expression at point to Python2 interpreter.
-* py-execute-partial-expression-python2-switch
- Send partial-expression at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-partial-expression-python2-noswitch
- Send partial-expression at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-partial-expression-python2-dedicated
- Send partial-expression at point to Python2 unique interpreter.
-* py-execute-partial-expression-python2-dedicated-switch
- Send partial-expression at point to Python2 unique interpreter and switch to result.
-* py-execute-partial-expression-python2\.7
- Send partial-expression at point to Python2.7 interpreter.
-* py-execute-partial-expression-python2\.7-switch
- Send partial-expression at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-partial-expression-python2\.7-noswitch
- Send partial-expression at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-partial-expression-python2\.7-dedicated
- Send partial-expression at point to Python2.7 unique interpreter.
-* py-execute-partial-expression-python2\.7-dedicated-switch
- Send partial-expression at point to Python2.7 unique interpreter and switch to result.
-* py-execute-partial-expression-jython
- Send partial-expression at point to Jython interpreter.
-* py-execute-partial-expression-jython-switch
- Send partial-expression at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-partial-expression-jython-noswitch
- Send partial-expression at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-partial-expression-jython-dedicated
- Send partial-expression at point to Jython unique interpreter.
-* py-execute-partial-expression-jython-dedicated-switch
- Send partial-expression at point to Jython unique interpreter and switch to result.
-* py-execute-partial-expression-python3\.2
- Send partial-expression at point to Python3.2 interpreter.
-* py-execute-partial-expression-python3\.2-switch
- Send partial-expression at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-partial-expression-python3\.2-noswitch
- Send partial-expression at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-partial-expression-python3\.2-dedicated
- Send partial-expression at point to Python3.2 unique interpreter.
-* py-execute-partial-expression-python3\.2-dedicated-switch
- Send partial-expression at point to Python3.2 unique interpreter and switch to result.
-* py-execute-line-python
- Send line at point to Python interpreter.
-* py-execute-line-python-switch
- Send line at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-line-python-noswitch
- Send line at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-line-python-dedicated
- Send line at point to Python unique interpreter.
-* py-execute-line-python-dedicated-switch
- Send line at point to Python unique interpreter and switch to result.
-* py-execute-line-ipython
- Send line at point to IPython interpreter.
-* py-execute-line-ipython-switch
- Send line at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-line-ipython-noswitch
- Send line at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-line-ipython-dedicated
- Send line at point to IPython unique interpreter.
-* py-execute-line-ipython-dedicated-switch
- Send line at point to IPython unique interpreter and switch to result.
-* py-execute-line-python3
- Send line at point to Python3 interpreter.
-* py-execute-line-python3-switch
- Send line at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-line-python3-noswitch
- Send line at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-line-python3-dedicated
- Send line at point to Python3 unique interpreter.
-* py-execute-line-python3-dedicated-switch
- Send line at point to Python3 unique interpreter and switch to result.
-* py-execute-line-python2
- Send line at point to Python2 interpreter.
-* py-execute-line-python2-switch
- Send line at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-line-python2-noswitch
- Send line at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-line-python2-dedicated
- Send line at point to Python2 unique interpreter.
-* py-execute-line-python2-dedicated-switch
- Send line at point to Python2 unique interpreter and switch to result.
-* py-execute-line-python2\.7
- Send line at point to Python2.7 interpreter.
-* py-execute-line-python2\.7-switch
- Send line at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-line-python2\.7-noswitch
- Send line at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-line-python2\.7-dedicated
- Send line at point to Python2.7 unique interpreter.
-* py-execute-line-python2\.7-dedicated-switch
- Send line at point to Python2.7 unique interpreter and switch to result.
-* py-execute-line-jython
- Send line at point to Jython interpreter.
-* py-execute-line-jython-switch
- Send line at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-line-jython-noswitch
- Send line at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-line-jython-dedicated
- Send line at point to Jython unique interpreter.
-* py-execute-line-jython-dedicated-switch
- Send line at point to Jython unique interpreter and switch to result.
-* py-execute-line-python3\.2
- Send line at point to Python3.2 interpreter.
-* py-execute-line-python3\.2-switch
- Send line at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-* py-execute-line-python3\.2-noswitch
- Send line at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-* py-execute-line-python3\.2-dedicated
- Send line at point to Python3.2 unique interpreter.
-* py-execute-line-python3\.2-dedicated-switch
- Send line at point to Python3.2 unique interpreter and switch to result.
diff --git a/elpa/python-mode-6.0.10/doc/commands-python-mode.rst b/elpa/python-mode-6.0.10/doc/commands-python-mode.rst
deleted file mode 100644
index 7e28e3de..00000000
--- a/elpa/python-mode-6.0.10/doc/commands-python-mode.rst
+++ /dev/null
@@ -1,4414 +0,0 @@
-Python-mode commands
-
-====================
-
-py-guess-pdb-path
------------------
-If py-pdb-path isn't set, find location of pdb.py.
-
-highlight-indentation-on
-------------------------
-Make sure `highlight-indentation' is on.
-
-highlight-indentation-off
--------------------------
-Make sure `highlight-indentation' is off.
-
-highlight-indentation
----------------------
-Toggle highlight indentation.
-Optional argument INDENT-WIDTH specifies which indentation
-level (spaces only) should be highlighted, if omitted
-indent-width will be guessed from current major-mode
-
-run-python-internal
--------------------
-Run an inferior Internal Python process.
-Input and output via buffer named after
-`python-shell-internal-buffer-name' and what
-`python-shell-internal-get-process-name' returns. This new kind
-of shell is intended to be used for generic communication related
-to defined configurations. The main difference with global or
-dedicated shells is that these ones are attached to a
-configuration, not a buffer. This means that can be used for
-example to retrieve the sys.path and other stuff, without messing
-with user shells. Runs the hook
-`inferior-python-mode-hook' (after the `comint-mode-hook' is
-run). (Type C-h m in the process buffer for a list
-of commands.)
-
-python-shell-send-string
-------------------------
-Send STRING to inferior Python PROCESS.
-When `py-verbose-p' and MSG is non-nil messages the first line of STRING.
-
-python-shell-send-region
-------------------------
-Send the region delimited by START and END to inferior Python process.
-
-python-shell-send-buffer
-------------------------
-Send the entire buffer to inferior Python process.
-
-python-shell-send-defun
------------------------
-Send the current defun to inferior Python process.
-When argument ARG is non-nil sends the innermost defun.
-
-python-shell-send-file
-----------------------
-Send FILE-NAME to inferior Python PROCESS.
-If TEMP-FILE-NAME is passed then that file is used for processing
-instead, while internally the shell will continue to use
-FILE-NAME.
-
-python-shell-switch-to-shell
-----------------------------
-Switch to inferior Python process buffer.
-
-python-shell-completion-complete-at-point
------------------------------------------
-Perform completion at point in inferior Python process.
-
-python-shell-completion-complete-or-indent
-------------------------------------------
-Complete or indent depending on the context.
-If content before pointer is all whitespace indent. If not try
-to complete.
-
-py-count-lines
---------------
-Count lines in accessible part until current line.
-
-See http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7115
-
-run-python
-----------
-Run an inferior Python process, input and output via buffer *Python*.
-
-CMD is the Python command to run. NOSHOW non-nil means don't
-show the buffer automatically.
-
-Interactively, a prefix arg means to prompt for the initial
-Python command line (default is `python-command').
-
-A new process is started if one isn't running attached to
-`python-buffer', or if called from Lisp with non-nil arg NEW.
-Otherwise, if a process is already running in `python-buffer',
-switch to that buffer.
-
-This command runs the hook `inferior-python-mode-hook' after
-running `comint-mode-hook'. Type C-h m in the
-process buffer for a list of commands.
-
-By default, Emacs inhibits the loading of Python modules from the
-current working directory, for security reasons. To disable this
-behavior, change `python-remove-cwd-from-path' to nil.
-
-python-send-region
-------------------
-Send the region to the inferior Python process.
-
-python-send-string
-------------------
-Evaluate STRING in inferior Python process.
-
-python-send-buffer
-------------------
-Send the current buffer to the inferior Python process.
-
-python-send-defun
------------------
-Send the current defun (class or method) to the inferior Python process.
-
-python-switch-to-python
------------------------
-Switch to the Python process buffer, maybe starting new process.
-With prefix arg, position cursor at end of buffer.
-
-python-send-region-and-go
--------------------------
-Send the region to the inferior Python process.
-Then switch to the process buffer.
-
-python-load-file
-----------------
-Load a Python file FILE-NAME into the inferior Python process.
-If the file has extension `.py' import or reload it as a module.
-Treating it as a module keeps the global namespace clean, provides
-function location information for debugging, and supports users of
-module-qualified names.
-
-python-set-proc
----------------
-Set the default value of `python-buffer' to correspond to this buffer.
-If the current buffer has a local value of `python-buffer', set the
-default (global) value to that. The associated Python process is
-the one that gets input from M-x python-send-region et al when used
-in a buffer that doesn't have a local value of `python-buffer'.
-
-python-fill-paragraph
----------------------
-`fill-paragraph-function' handling multi-line strings and possibly comments.
-If any of the current line is in or at the end of a multi-line string,
-fill the string or the paragraph of it that point is in, preserving
-the string's indentation.
-
-python-shift-left
------------------
-Shift lines in region COUNT (the prefix arg) columns to the left.
-COUNT defaults to `py-indent-offset'. If region isn't active, just shift
-current line. The region shifted includes the lines in which START and
-END lie. It is an error if any lines in the region are indented less than
-COUNT columns.
-
-python-shift-right
-------------------
-Shift lines in region COUNT (the prefix arg) columns to the right.
-COUNT defaults to `py-indent-offset'. If region isn't active, just shift
-current line. The region shifted includes the lines in which START and
-END lie.
-
-python-mark-block
------------------
-Mark the block around point.
-Uses `python-beginning-of-block', `python-end-of-block'.
-
-python-find-imports
--------------------
-Find top-level imports, updating `python-imports'.
-
-python-find-function
---------------------
-Find source of definition of function NAME.
-Interactively, prompt for name.
-
-py-insert-default-shebang
--------------------------
-Insert in buffer shebang of installed default Python.
-
-py-electric-comment
--------------------
-Insert a comment. If starting a comment, indent accordingly.
-
-If a numeric argument ARG is provided, that many colons are inserted
-non-electrically.
-With C-u "#" electric behavior is inhibited inside a string or comment.
-
-py-electric-colon
------------------
-Insert a colon and indent accordingly.
-
-If a numeric argument ARG is provided, that many colons are inserted
-non-electrically.
-
-Electric behavior is inhibited inside a string or
-comment or by universal prefix C-u.
-Default is nil, controlled by `py-electric-colon-active-p'
-
-py-electric-backspace
----------------------
-Delete preceding character or level of indentation.
-
-With ARG do that ARG times.
-Returns column reached.
-
-py-electric-delete
-------------------
-Delete following character or levels of whitespace.
-
-With ARG do that ARG times.
-
-py-indent-line-outmost
-----------------------
-Indent the current line to the outmost reasonable indent.
-
-With optional C-u an indent with length `py-indent-offset' is inserted unconditionally
-
-py-indent-line
---------------
-Indent the current line according to Python rules.
-
-When called interactivly with C-u, ignore dedenting rules for block closing statements
-(e.g. return, raise, break, continue, pass)
-
-An optional C-u followed by a numeric argument neither 1 nor 4 will switch off `py-smart-indentation' for this execution. This permits to correct allowed but unwanted indents.
-Similar to `toggle-py-smart-indentation' resp. `py-smart-indentation-off' followed by TAB.
-
-This function is normally used by `indent-line-function' resp.
-TAB.
-Returns current indentation
-
-py-newline-and-indent
----------------------
-Add a newline and indent to outmost reasonable indent.
-When indent is set back manually, this is honoured in following lines.
-
-py-newline-and-dedent
----------------------
-Add a newline and indent to one level below current.
-Returns column.
-
-toggle-force-local-shell
-------------------------
-If locally indicated Python shell should be taken and
-enforced upon sessions execute commands.
-
-Toggles boolean `py-force-local-shell-p' along with `py-force-py-shell-name-p'
-Returns value of `toggle-force-local-shell' switched to.
-
-When on, kind of an option 'follow', local shell sets `py-shell-name', enforces its use afterwards.
-
-See also commands
-`py-force-local-shell-on'
-`py-force-local-shell-off'
-
-
-py-force-local-shell-on
------------------------
-Make sure, `py-py-force-local-shell-p' is on.
-
-Returns value of `py-force-local-shell-p'.
-
-Kind of an option 'follow', local shell sets `py-shell-name', enforces its use afterwards
-
-py-force-local-shell-off
-------------------------
-Restore `py-shell-name' default value and `behaviour'.
-
-toggle-force-py-shell-name-p
-----------------------------
-If customized default `py-shell-name' should be enforced upon execution.
-
-If `py-force-py-shell-name-p' should be on or off.
-Returns value of `py-force-py-shell-name-p' switched to.
-
-See also commands
-force-py-shell-name-p-on
-force-py-shell-name-p-off
-
-Caveat: Completion might not work that way.
-
-
-force-py-shell-name-p-on
-------------------------
-Switches `py-force-py-shell-name-p' on.
-
-Customized default `py-shell-name' will be enforced upon execution.
-Returns value of `py-force-py-shell-name-p'.
-
-Caveat: Completion might not work that way.
-
-
-force-py-shell-name-p-off
--------------------------
-Make sure, `py-force-py-shell-name-p' is off.
-
-Function to use by executes will be guessed from environment.
-Returns value of `py-force-py-shell-name-p'.
-
-py-toggle-indent-tabs-mode
---------------------------
-Toggle `indent-tabs-mode'.
-
-Returns value of `indent-tabs-mode' switched to.
-
-py-indent-tabs-mode
--------------------
-With positive ARG switch `indent-tabs-mode' on.
-
-With negative ARG switch `indent-tabs-mode' off.
-Returns value of `indent-tabs-mode' switched to.
-
-py-indent-tabs-mode-on
-----------------------
-Switch `indent-tabs-mode' on.
-
-py-indent-tabs-mode-off
------------------------
-Switch `indent-tabs-mode' on.
-
-py-guess-indent-offset
-----------------------
-Guess a value for, and change, `py-indent-offset'.
-
-By default, make a buffer-local copy of `py-indent-offset' with the
-new value.
-With optional argument GLOBAL change the global value of `py-indent-offset'.
-
-Indent might be guessed savely only from beginning of a block.
-Returns `py-indent-offset'
-
-py-narrow-to-defun
-------------------
-Make text outside current def or class invisible.
-
-The defun visible is the one that contains point or follows point.
-
-py-shift-left
--------------
-Dedent region according to `py-indent-offset' by COUNT times.
-
-If no region is active, current line is dedented.
-Returns indentation reached.
-
-py-shift-right
---------------
-Indent region according to `py-indent-offset' by COUNT times.
-
-If no region is active, current line is indented.
-Returns indentation reached.
-
-py-shift-paragraph-right
-------------------------
-Indent paragraph by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-
-py-shift-paragraph-left
------------------------
-Dedent paragraph by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-
-py-shift-block-right
---------------------
-Indent block by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-
-py-shift-block-left
--------------------
-Dedent block by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-
-py-shift-clause-right
----------------------
-Indent clause by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-
-py-shift-clause-left
---------------------
-Dedent clause by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-
-py-shift-def-right
-------------------
-Indent def by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-
-py-shift-def-left
------------------
-Dedent def by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-
-py-shift-class-right
---------------------
-Indent class by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-
-py-shift-class-left
--------------------
-Dedent class by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-
-py-shift-line-right
--------------------
-Indent line by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-
-py-shift-line-left
-------------------
-Dedent line by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-
-py-shift-statement-right
-------------------------
-Indent statement by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-
-py-shift-statement-left
------------------------
-Dedent statement by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use [universal-argument] to specify a different value.
-
-Returns outmost indentation reached.
-
-py-indent-and-forward
----------------------
-Indent current line according to mode, move one line forward.
-
-py-indent-region
-----------------
-Reindent a region of Python code.
-
-With optional INDENT-OFFSET specify a different value than `py-indent-offset' at place.
-
-Guesses the outmost reasonable indent
-Returns and keeps relative position
-
-py-beginning-of-paragraph-position
-----------------------------------
-Returns beginning of paragraph position.
-
-py-end-of-paragraph-position
-----------------------------
-Returns end of paragraph position.
-
-py-beginning-of-block-position
-------------------------------
-Returns beginning of block position.
-
-py-end-of-block-position
-------------------------
-Returns end of block position.
-
-py-beginning-of-clause-position
--------------------------------
-Returns beginning of clause position.
-
-py-end-of-clause-position
--------------------------
-Returns end of clause position.
-
-py-beginning-of-block-or-clause-position
-----------------------------------------
-Returns beginning of block-or-clause position.
-
-py-end-of-block-or-clause-position
-----------------------------------
-Returns end of block-or-clause position.
-
-py-beginning-of-def-position
-----------------------------
-Returns beginning of def position.
-
-py-end-of-def-position
-----------------------
-Returns end of def position.
-
-py-beginning-of-class-position
-------------------------------
-Returns beginning of class position.
-
-py-end-of-class-position
-------------------------
-Returns end of class position.
-
-py-beginning-of-def-or-class-position
--------------------------------------
-Returns beginning of def-or-class position.
-
-py-end-of-def-or-class-position
--------------------------------
-Returns end of def-or-class position.
-
-py-beginning-of-line-position
------------------------------
-Returns beginning of line position.
-
-py-end-of-line-position
------------------------
-Returns end of line position.
-
-py-beginning-of-statement-position
-----------------------------------
-Returns beginning of statement position.
-
-py-end-of-statement-position
-----------------------------
-Returns end of statement position.
-
-py-beginning-of-expression-position
------------------------------------
-Returns beginning of expression position.
-
-py-end-of-expression-position
------------------------------
-Returns end of expression position.
-
-py-beginning-of-partial-expression-position
--------------------------------------------
-Returns beginning of partial-expression position.
-
-py-end-of-partial-expression-position
--------------------------------------
-Returns end of partial-expression position.
-
-py-bounds-of-statement
-----------------------
-Returns bounds of statement at point.
-
-With optional POSITION, a number, report bounds of statement at POSITION.
-Returns a list, whose car is beg, cdr - end.
-
-py-bounds-of-block
-------------------
-Returns bounds of block at point.
-
-With optional POSITION, a number, report bounds of block at POSITION.
-Returns a list, whose car is beg, cdr - end.
-
-py-bounds-of-clause
--------------------
-Returns bounds of clause at point.
-
-With optional POSITION, a number, report bounds of clause at POSITION.
-Returns a list, whose car is beg, cdr - end.
-
-py-bounds-of-block-or-clause
-----------------------------
-Returns bounds of block-or-clause at point.
-
-With optional POSITION, a number, report bounds of block-or-clause at POSITION.
-Returns a list, whose car is beg, cdr - end.
-
-py-bounds-of-def
-----------------
-Returns bounds of def at point.
-
-With optional POSITION, a number, report bounds of def at POSITION.
-Returns a list, whose car is beg, cdr - end.
-
-py-bounds-of-class
-------------------
-Returns bounds of class at point.
-
-With optional POSITION, a number, report bounds of class at POSITION.
-Returns a list, whose car is beg, cdr - end.
-
-py-bounds-of-region
--------------------
-Returns bounds of region at point.
-
-Returns a list, whose car is beg, cdr - end.
-
-py-bounds-of-buffer
--------------------
-Returns bounds of buffer at point.
-
-With optional POSITION, a number, report bounds of buffer at POSITION.
-Returns a list, whose car is beg, cdr - end.
-
-py-bounds-of-expression
------------------------
-Returns bounds of expression at point.
-
-With optional POSITION, a number, report bounds of expression at POSITION.
-Returns a list, whose car is beg, cdr - end.
-
-py-bounds-of-partial-expression
--------------------------------
-Returns bounds of partial-expression at point.
-
-With optional POSITION, a number, report bounds of partial-expression at POSITION.
-Returns a list, whose car is beg, cdr - end.
-
-py-bounds-of-declarations
--------------------------
-Bounds of consecutive multitude of assigments resp. statements around point.
-
-Indented same level, which don't open blocks.
-Typically declarations resp. initialisations of variables following
-a class or function definition.
-See also py-bounds-of-statements
-
-py-beginning-of-declarations
-----------------------------
-Got to the beginning of assigments resp. statements in current level which don't open blocks.
-
-
-py-end-of-declarations
-----------------------
-Got to the end of assigments resp. statements in current level which don't open blocks.
-
-py-declarations
----------------
-Copy and mark assigments resp. statements in current level which don't open blocks or start with a keyword.
-
-See also `py-statements', which is more general, taking also simple statements starting with a keyword.
-
-py-kill-declarations
---------------------
-Delete variables declared in current level.
-
-Store deleted variables in kill-ring
-
-py-bounds-of-statements
------------------------
-Bounds of consecutive multitude of statements around point.
-
-Indented same level, which don't open blocks.
-
-py-beginning-of-statements
---------------------------
-Got to the beginning of statements in current level which don't open blocks.
-
-py-end-of-statements
---------------------
-Got to the end of statements in current level which don't open blocks.
-
-py-statements
--------------
-Copy and mark simple statements in current level which don't open blocks.
-
-More general than py-declarations, which would stop at keywords like a print-statement.
-
-py-kill-statements
-------------------
-Delete statements declared in current level.
-
-Store deleted statements in kill-ring
-
-py-comment-region
------------------
-Like `comment-region' but uses double hash (`#') comment starter.
-
-py-fill-paragraph
------------------
-Like M-q, but handle Python comments and strings.
-
-If any of the current line is a comment, fill the comment or the
-paragraph of it that point is in, preserving the comment's indentation
-and initial `#'s.
-If point is inside a string, narrow to that string and fill.
-
-
-py-insert-super
----------------
-Insert a function "super()" from current environment.
-
-As example given in Python v3.1 documentation » The Python Standard Library »
-
-class C(B):
- def method(self, arg):
- super().method(arg) # This does the same thing as:
- # super(C, self).method(arg)
-
-Returns the string inserted.
-
-py-nesting-level
-----------------
-Accepts the output of `parse-partial-sexp'.
-
-py-compute-indentation
-----------------------
-Compute Python indentation.
-
-When HONOR-BLOCK-CLOSE-P is non-nil, statements such as `return',
-`raise', `break', `continue', and `pass' force one level of dedenting.
-
-py-continuation-offset
-----------------------
-With numeric ARG different from 1 py-continuation-offset is set to that value; returns py-continuation-offset.
-
-py-indentation-of-statement
----------------------------
-Returns the indenation of the statement at point.
-
-py-list-beginning-position
---------------------------
-Return lists beginning position, nil if not inside.
-
-Optional ARG indicates a start-position for `parse-partial-sexp'.
-
-py-end-of-list-position
------------------------
-Return end position, nil if not inside.
-
-Optional ARG indicates a start-position for `parse-partial-sexp'.
-
-py-in-triplequoted-string-p
----------------------------
-Returns character address of start tqs-string, nil if not inside.
-
-py-in-string-p
---------------
-Returns character address of start of string, nil if not inside.
-
-py-in-statement-p
------------------
-Returns list of beginning and end-position if inside.
-
-Result is useful for booleans too: (when (py-in-statement-p)...)
-will work.
-
-
-py-statement-opens-block-p
---------------------------
-Return position if the current statement opens a block
-in stricter or wider sense.
-
-For stricter sense specify regexp.
-
-py-statement-opens-clause-p
----------------------------
-Return position if the current statement opens block or clause.
-
-py-statement-opens-block-or-clause-p
-------------------------------------
-Return position if the current statement opens block or clause.
-
-py-statement-opens-class-p
---------------------------
-Return `t' if the statement opens a functions or class definition, nil otherwise.
-
-py-statement-opens-def-p
-------------------------
-Return `t' if the statement opens a functions or class definition, nil otherwise.
-
-py-statement-opens-def-or-class-p
----------------------------------
-Return `t' if the statement opens a functions or class definition, nil otherwise.
-
-py-current-defun
-----------------
-Go to the outermost method or class definition in current scope.
-
-Python value for `add-log-current-defun-function'.
-This tells add-log.el how to find the current function/method/variable.
-Returns name of class or methods definition, if found, nil otherwise.
-
-See customizable variables `py-current-defun-show' and `py-current-defun-delay'.
-
-py-sort-imports
----------------
-Sort multiline imports.
-
-Put point inside the parentheses of a multiline import and hit
-M-x py-sort-imports to sort the imports lexicographically
-
-py-which-function
------------------
-Return the name of the function or class, if curser is in, return nil otherwise.
-
-py-beginning-of-block
----------------------
-Returns beginning of block if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-
-py-end-of-block
----------------
-Go to the end of block.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-
-py-beginning-of-clause
-----------------------
-Returns beginning of clause if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-
-py-end-of-clause
-----------------
-Go to the end of clause.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-
-py-beginning-of-block-or-clause
--------------------------------
-Returns beginning of block-or-clause if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-
-py-end-of-block-or-clause
--------------------------
-Go to the end of block-or-clause.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-
-py-beginning-of-def
--------------------
-Returns beginning of def if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-
-py-end-of-def
--------------
-Go to the end of def.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-
-py-beginning-of-class
----------------------
-Returns beginning of class if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-
-py-end-of-class
----------------
-Go to the end of class.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-
-py-beginning-of-def-or-class
-----------------------------
-Returns beginning of def-or-class if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-
-py-end-of-def-or-class
-----------------------
-Go to the end of def-or-class.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-
-py-beginning-of-if-block
-------------------------
-Returns beginning of if-block if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-
-py-end-of-if-block
-------------------
-Go to the end of if-block.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-
-py-beginning-of-try-block
--------------------------
-Returns beginning of try-block if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-
-py-end-of-try-block
--------------------
-Go to the end of try-block.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-
-py-beginning-of-minor-block
----------------------------
-Returns beginning of minor-block if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-
-py-end-of-minor-block
----------------------
-Go to the end of minor-block.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-
-py-beginning-of-expression
---------------------------
-Go to the beginning of a compound python expression.
-
-A a compound python expression might be concatenated by "." operator, thus composed by minor python expressions.
-
-If already at the beginning or before a expression, go to next expression in buffer upwards
-
-Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference
-Operators however are left aside resp. limit py-expression designed for edit-purposes.
-
-
-py-end-of-expression
---------------------
-Go to the end of a compound python expression.
-
-A a compound python expression might be concatenated by "." operator, thus composed by minor python expressions.
-
-Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference
-
-Operators however are left aside resp. limit py-expression designed for edit-purposes.
-
-py-beginning-of-partial-expression
-----------------------------------
-Go to the beginning of a minor python expression.
-
-"." operators delimit a minor expression on their level.
-Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference
-Operators however are left aside resp. limit py-expression designed for edit-purposes.
-
-If already at the beginning or before a partial-expression, go to next partial-expression in buffer upwards
-
-py-end-of-partial-expression
-----------------------------
-Go to the end of a minor python expression.
-
-"." operators delimit a minor expression on their level.
-Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference
-Operators however are left aside resp. limit py-expression designed for edit-purposes.
-
-py-beginning-of-line
---------------------
-Go to beginning-of-line, return position.
-
-If already at beginning-of-line and not at BOB, go to beginning of previous line.
-
-py-end-of-line
---------------
-Go to end-of-line, return position.
-
-If already at end-of-line and not at EOB, go to end of next line.
-
-py-beginning-of-statement
--------------------------
-Go to the initial line of a simple statement.
-
-For beginning of compound statement use py-beginning-of-block.
-For beginning of clause py-beginning-of-clause.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-
-
-py-end-of-statement
--------------------
-Go to the last char of current statement.
-
-To go just beyond the final line of the current statement, use `py-down-statement-lc'.
-
-py-goto-statement-below
------------------------
-Goto beginning of next statement.
-
-py-mark-paragraph
------------------
-Mark paragraph at point.
-
-Returns beginning and end positions of marked area, a cons.
-
-py-mark-block
--------------
-Mark block at point.
-
-Returns beginning and end positions of marked area, a cons.
-
-py-mark-clause
---------------
-Mark clause at point.
-
-Returns beginning and end positions of marked area, a cons.
-
-py-mark-block-or-clause
------------------------
-Mark block-or-clause at point.
-
-Returns beginning and end positions of marked area, a cons.
-
-py-mark-def
------------
-Mark def at point.
-
-With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too.
-Returns beginning and end positions of marked area, a cons.
-
-py-mark-class
--------------
-Mark class at point.
-
-With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too.
-Returns beginning and end positions of marked area, a cons.
-
-py-mark-def-or-class
---------------------
-Mark def-or-class at point.
-
-With M-x universal argument or `py-mark-decorators' set to `t', decorators are marked too.
-Returns beginning and end positions of marked area, a cons.
-
-py-mark-line
-------------
-Mark line at point.
-
-Returns beginning and end positions of marked area, a cons.
-
-py-mark-statement
------------------
-Mark statement at point.
-
-Returns beginning and end positions of marked area, a cons.
-
-py-mark-expression
-------------------
-Mark expression at point.
-
-Returns beginning and end positions of marked area, a cons.
-
-py-mark-partial-expression
---------------------------
-Mark partial-expression at point.
-
-Returns beginning and end positions of marked area, a cons.
-
-py-beginning-of-decorator
--------------------------
-Go to the beginning of a decorator.
-
-Returns position if succesful
-
-py-end-of-decorator
--------------------
-Go to the end of a decorator.
-
-Returns position if succesful
-
-py-copy-expression
-------------------
-Mark expression at point.
-
-Returns beginning and end positions of marked area, a cons.
-
-py-copy-partial-expression
---------------------------
-Mark partial-expression at point.
-
-Returns beginning and end positions of marked area, a cons.
-
-"." operators delimit a partial-expression expression on it's level, that's the difference to compound expressions.
-
-Given the function below, `py-partial-expression'
-called at pipe symbol would copy and return:
-
-def usage():
- print """Usage: %s
- ....""" % (
- os.path.basename(sys.argv[0]))
-------------|-------------------------
-==> path
-
- os.path.basename(sys.argv[0]))
-------------------|-------------------
-==> basename(sys.argv[0]))
-
- os.path.basename(sys.argv[0]))
---------------------------|-----------
-==> sys
-
- os.path.basename(sys.argv[0]))
-------------------------------|-------
-==> argv[0]
-
-while `py-expression' would copy and return
-
-(
- os.path.basename(sys.argv[0]))
-
-;;;;;
-
-Also for existing commands a shorthand is defined:
-
-(defalias 'py-statement 'py-copy-statement)
-
-py-copy-statement
------------------
-Mark statement at point.
-
-Returns beginning and end positions of marked area, a cons.
-
-py-copy-block
--------------
-Mark block at point.
-
-Returns beginning and end positions of marked area, a cons.
-
-py-copy-block-or-clause
------------------------
-Mark block-or-clause at point.
-
-Returns beginning and end positions of marked area, a cons.
-
-py-copy-def
------------
-Mark def at point.
-
-With universal argument or `py-mark-decorators' set to `t' decorators are copied too.
-Returns beginning and end positions of marked area, a cons.
-
-py-copy-def-or-class
---------------------
-Mark def-or-class at point.
-
-With universal argument or `py-mark-decorators' set to `t' decorators are copied too.
-Returns beginning and end positions of marked area, a cons.
-
-py-copy-class
--------------
-Mark class at point.
-
-With universal argument or `py-mark-decorators' set to `t' decorators are copied too.
-Returns beginning and end positions of marked area, a cons.
-
-py-copy-clause
---------------
-Mark clause at point.
- Returns beginning and end positions of marked area, a cons.
-
-py-kill-expression
-------------------
-Delete expression at point.
- Stores data in kill ring. Might be yanked back using `C-y'.
-
-py-kill-partial-expression
---------------------------
-Delete partial-expression at point.
- Stores data in kill ring. Might be yanked back using `C-y'.
-
-"." operators delimit a partial-expression expression on it's level, that's the difference to compound expressions.
-
-py-kill-statement
------------------
-Delete statement at point.
-
-Stores data in kill ring. Might be yanked back using `C-y'.
-
-py-kill-block
--------------
-Delete block at point.
-
-Stores data in kill ring. Might be yanked back using `C-y'.
-
-py-kill-block-or-clause
------------------------
-Delete block-or-clause at point.
-
-Stores data in kill ring. Might be yanked back using `C-y'.
-
-py-kill-def-or-class
---------------------
-Delete def-or-class at point.
-
-Stores data in kill ring. Might be yanked back using `C-y'.
-
-py-kill-class
--------------
-Delete class at point.
-
-Stores data in kill ring. Might be yanked back using `C-y'.
-
-py-kill-def
------------
-Delete def at point.
-
-Stores data in kill ring. Might be yanked back using `C-y'.
-
-py-kill-clause
---------------
-Delete clause at point.
-
-Stores data in kill ring. Might be yanked back using `C-y'.
-
-py-forward-line
----------------
-Goes to end of line after forward move.
-
-Travels right-margin comments.
-
-py-go-to-beginning-of-comment
------------------------------
-Go to the beginning of current line's comment, if any.
-
-From a programm use `py-beginning-of-comment' instead
-
-py-leave-comment-or-string-backward
------------------------------------
-If inside a comment or string, leave it backward.
-
-py-beginning-of-list-pps
-------------------------
-Go to the beginning of a list.
-Optional ARG indicates a start-position for `parse-partial-sexp'.
-Return beginning position, nil if not inside.
-
-py-down-block-lc
-----------------
-Goto beginning of line following end of block.
-
-Returns position reached, if successful, nil otherwise.
-
-"-lc" stands for "left-corner" - a complementary command travelling left, whilst `py-end-of-block' stops at right corner.
-
-See also `py-down-block': down from current definition to next beginning of block below.
-
-py-down-clause-lc
------------------
-Goto beginning of line following end of clause.
-
-Returns position reached, if successful, nil otherwise.
-
-"-lc" stands for "left-corner" - a complementary command travelling left, whilst `py-end-of-clause' stops at right corner.
-
-See also `py-down-clause': down from current definition to next beginning of clause below.
-
-py-down-def-lc
---------------
-Goto beginning of line following end of def.
-
-Returns position reached, if successful, nil otherwise.
-
-"-lc" stands for "left-corner" - a complementary command travelling left, whilst `py-end-of-def' stops at right corner.
-
-See also `py-down-def': down from current definition to next beginning of def below.
-
-py-down-class-lc
-----------------
-Goto beginning of line following end of class.
-
-Returns position reached, if successful, nil otherwise.
-
-"-lc" stands for "left-corner" - a complementary command travelling left, whilst `py-end-of-class' stops at right corner.
-
-See also `py-down-class': down from current definition to next beginning of class below.
-
-py-down-statement-lc
---------------------
-Goto beginning of line following end of statement.
-
-Returns position reached, if successful, nil otherwise.
-
-"-lc" stands for "left-corner" - a complementary command travelling left, whilst `py-end-of-statement' stops at right corner.
-
-See also `py-down-statement': down from current definition to next beginning of statement below.
-
-py-down-statement
------------------
-Go to the beginning of next statement below in buffer.
-
-Returns indentation if statement found, nil otherwise.
-
-py-down-block
--------------
-Go to the beginning of next block below in buffer.
-
-Returns indentation if block found, nil otherwise.
-
-py-down-clause
---------------
-Go to the beginning of next clause below in buffer.
-
-Returns indentation if clause found, nil otherwise.
-
-py-down-block-or-clause
------------------------
-Go to the beginning of next block-or-clause below in buffer.
-
-Returns indentation if block-or-clause found, nil otherwise.
-
-py-down-def
------------
-Go to the beginning of next def below in buffer.
-
-Returns indentation if def found, nil otherwise.
-
-py-down-class
--------------
-Go to the beginning of next class below in buffer.
-
-Returns indentation if class found, nil otherwise.
-
-py-down-def-or-class
---------------------
-Go to the beginning of next def-or-class below in buffer.
-
-Returns indentation if def-or-class found, nil otherwise.
-
-py-forward-into-nomenclature
-----------------------------
-Move forward to end of a nomenclature section or word.
-
-With C-u (programmatically, optional argument ARG), do it that many times.
-
-A `nomenclature' is a fancy way of saying AWordWithMixedCaseNotUnderscores.
-
-py-backward-into-nomenclature
------------------------------
-Move backward to beginning of a nomenclature section or word.
-
-With optional ARG, move that many times. If ARG is negative, move
-forward.
-
-A `nomenclature' is a fancy way of saying AWordWithMixedCaseNotUnderscores.
-
-match-paren
------------
-Go to the matching brace, bracket or parenthesis if on its counterpart.
-
-Otherwise insert the character, the key is assigned to, here `%'.
-With universal arg insert a `%'.
-
-py-toggle-execute-keep-temporary-file-p
----------------------------------------
-Toggle py-execute-keep-temporary-file-p
-
-py-guess-default-python
------------------------
-Defaults to "python", if guessing didn't succeed.
-
-py-set-shell-completion-environment
------------------------------------
-Sets `...-completion-command-string' and `py-complete-function'.
-
-py-set-ipython-completion-command-string
-----------------------------------------
-Set and return `ipython-completion-command-string'.
-
-py-shell-dedicated
-------------------
-Start an interactive Python interpreter in another window.
-
-With optional C-u user is prompted by
-`py-choose-shell' for command and options to pass to the Python
-interpreter.
-
-
-py-shell
---------
-Start an interactive Python interpreter in another window.
-
-Interactively, C-u 4 prompts for a buffer.
-C-u 2 prompts for `py-python-command-args'.
-If `default-directory' is a remote file name, it is also prompted
-to change if called with a prefix arg.
-
-Returns py-shell's buffer-name.
-Optional string PYSHELLNAME overrides default `py-shell-name'.
-Optional symbol SWITCH ('switch/'noswitch) precedes `py-switch-buffers-on-execute-p'
-When SEPCHAR is given, `py-shell' must not detect the file-separator.
-BUFFER allows specifying a name, the Python process is connected to
-When DONE is `t', `py-shell-manage-windows' is omitted
-
-
-python
-------
-Start an Python interpreter.
-
-Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs.
-
-ipython
--------
-Start an IPython interpreter.
-
-Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs.
-
-python3
--------
-Start an Python3 interpreter.
-
-Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs.
-
-python2
--------
-Start an Python2 interpreter.
-
-Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs.
-
-python2\.7
-----------
-Start an Python2.7 interpreter.
-
-Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs.
-
-jython
-------
-Start an Jython interpreter.
-
-Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs.
-
-bpython
--------
-Start an BPython interpreter.
-
-Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs.
-
-python3\.2
-----------
-Start an Python3.2 interpreter.
-
-Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs.
-
-python-dedicated
-----------------
-Start an unique Python interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'.
-
-ipython-dedicated
------------------
-Start an unique IPython interpreter in another window.
-
-Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'.
-
-python3-dedicated
------------------
-Start an unique Python3 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'.
-
-python2-dedicated
------------------
-Start an unique Python2 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'.
-
-python2\.7-dedicated
---------------------
-Start an unique Python2.7 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'.
-
-jython-dedicated
-----------------
-Start an unique Jython interpreter in another window.
-
-Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'.
-
-python3\.2-dedicated
---------------------
-Start an unique Python3.2 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'.
-
-python-switch
--------------
-Switch to Python interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'.
-
-ipython-switch
---------------
-Switch to IPython interpreter in another window.
-
-Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'.
-
-python3-switch
---------------
-Switch to Python3 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'.
-
-python2-switch
---------------
-Switch to Python2 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'.
-
-python2\.7-switch
------------------
-Switch to Python2.7 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'.
-
-jython-switch
--------------
-Switch to Jython interpreter in another window.
-
-Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'.
-
-python3\.2-switch
------------------
-Switch to Python3.2 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'.
-
-python-no-switch
-----------------
-Open an Python interpreter in another window, but do not switch to it.
-
-Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'.
-
-ipython-no-switch
------------------
-Open an IPython interpreter in another window, but do not switch to it.
-
-Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'.
-
-python3-no-switch
------------------
-Open an Python3 interpreter in another window, but do not switch to it.
-
-Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'.
-
-python2-no-switch
------------------
-Open an Python2 interpreter in another window, but do not switch to it.
-
-Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'.
-
-python2\.7-no-switch
---------------------
-Open an Python2.7 interpreter in another window, but do not switch to it.
-
-Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'.
-
-jython-no-switch
-----------------
-Open an Jython interpreter in another window, but do not switch to it.
-
-Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'.
-
-python3\.2-no-switch
---------------------
-Open an Python3.2 interpreter in another window, but do not switch to it.
-
-Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'.
-
-python-switch-dedicated
------------------------
-Switch to an unique Python interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'.
-
-ipython-switch-dedicated
-------------------------
-Switch to an unique IPython interpreter in another window.
-
-Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'.
-
-python3-switch-dedicated
-------------------------
-Switch to an unique Python3 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'.
-
-python2-switch-dedicated
-------------------------
-Switch to an unique Python2 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'.
-
-python2\.7-switch-dedicated
----------------------------
-Switch to an unique Python2.7 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'.
-
-jython-switch-dedicated
------------------------
-Switch to an unique Jython interpreter in another window.
-
-Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'.
-
-python3\.2-switch-dedicated
----------------------------
-Switch to an unique Python3.2 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'.
-
-py-which-execute-file-command
------------------------------
-Return the command appropriate to Python version.
-
-Per default it's "(format "execfile(r'%s') # PYTHON-MODE\n" filename)" for Python 2 series.
-
-py-execute-region-no-switch
----------------------------
-Send the region to a Python interpreter.
-
-Ignores setting of `py-switch-buffers-on-execute-p', buffer with region stays current.
-
-
-py-execute-region-switch
-------------------------
-Send the region to a Python interpreter.
-
-Ignores setting of `py-switch-buffers-on-execute-p', output-buffer will being switched to.
-
-
-py-execute-region
------------------
-Send the region to a Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)
-
-
-py-execute-region-default
--------------------------
-Send the region to the systems default Python interpreter.
-See also `py-execute-region'.
-
-py-execute-region-dedicated
----------------------------
-Get the region processed by an unique Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-py-execute-region-default-dedicated
------------------------------------
-Send the region to an unique shell of systems default Python.
-
-py-execute-string
------------------
-Send the argument STRING to a Python interpreter.
-
-See also `py-execute-region'.
-
-py-execute-string-dedicated
----------------------------
-Send the argument STRING to an unique Python interpreter.
-
-See also `py-execute-region'.
-
-py-fetch-py-master-file
------------------------
-Lookup if a `py-master-file' is specified.
-
-See also doku of variable `py-master-file'
-
-py-execute-import-or-reload
----------------------------
-Import the current buffer's file in a Python interpreter.
-
-If the file has already been imported, then do reload instead to get
-the latest version.
-
-If the file's name does not end in ".py", then do execfile instead.
-
-If the current buffer is not visiting a file, do `py-execute-buffer'
-instead.
-
-If the file local variable `py-master-file' is non-nil, import or
-reload the named file instead of the buffer's file. The file may be
-saved based on the value of `py-execute-import-or-reload-save-p'.
-
-See also `M-x py-execute-region'.
-
-This may be preferable to `M-x py-execute-buffer' because:
-
- - Definitions stay in their module rather than appearing at top
- level, where they would clutter the global namespace and not affect
- uses of qualified names (MODULE.NAME).
-
- - The Python debugger gets line number information about the functions.
-
-py-execute-buffer-dedicated
----------------------------
-Send the contents of the buffer to a unique Python interpreter.
-
-If the file local variable `py-master-file' is non-nil, execute the
-named file instead of the buffer's file.
-
-If a clipping restriction is in effect, only the accessible portion of the buffer is sent. A trailing newline will be supplied if needed.
-
-With M-x univeral-argument user is prompted to specify another then default shell.
-See also `M-x py-execute-region'.
-
-py-execute-buffer-switch
-------------------------
-Send the contents of the buffer to a Python interpreter and switches to output.
-
-If the file local variable `py-master-file' is non-nil, execute the
-named file instead of the buffer's file.
-If there is a *Python* process buffer, it is used.
-If a clipping restriction is in effect, only the accessible portion of the buffer is sent. A trailing newline will be supplied if needed.
-
-With M-x univeral-argument user is prompted to specify another then default shell.
-See also `M-x py-execute-region'.
-
-py-execute-buffer-dedicated-switch
-----------------------------------
-Send the contents of the buffer to an unique Python interpreter.
-
-Ignores setting of `py-switch-buffers-on-execute-p'.
-If the file local variable `py-master-file' is non-nil, execute the
-named file instead of the buffer's file.
-
-If a clipping restriction is in effect, only the accessible portion of the buffer is sent. A trailing newline will be supplied if needed.
-
-With M-x univeral-argument user is prompted to specify another then default shell.
-See also `M-x py-execute-region'.
-
-py-execute-buffer
------------------
-Send the contents of the buffer to a Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-If the file local variable `py-master-file' is non-nil, execute the
-named file instead of the buffer's file.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)
-
-py-execute-buffer-no-switch
----------------------------
-Send the contents of the buffer to a Python interpreter but don't switch to output.
-
-If the file local variable `py-master-file' is non-nil, execute the
-named file instead of the buffer's file.
-If there is a *Python* process buffer, it is used.
-If a clipping restriction is in effect, only the accessible portion of the buffer is sent. A trailing newline will be supplied if needed.
-
-With M-x univeral-argument user is prompted to specify another then default shell.
-See also `M-x py-execute-region'.
-
-py-execute-defun
-----------------
-Send the current defun (class or method) to the inferior Python process.
-
-py-process-file
----------------
-Process "python filename".
-
-Optional OUTPUT-BUFFER and ERROR-BUFFER might be given.
-
-py-exec-execfile-region
------------------------
-Execute the region in a Python interpreter.
-
-py-exec-execfile
-----------------
-Process "python filename",
-Optional OUTPUT-BUFFER and ERROR-BUFFER might be given.')
-
-
-py-execute-statement
---------------------
-Send statement at point to a Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)
-
-py-execute-block
-----------------
-Send block at point to a Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)
-
-py-execute-block-or-clause
---------------------------
-Send block-or-clause at point to a Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)
-
-py-execute-def
---------------
-Send def at point to a Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)
-
-py-execute-class
-----------------
-Send class at point to a Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)
-
-py-execute-def-or-class
------------------------
-Send def-or-class at point to a Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)
-
-py-execute-expression
----------------------
-Send expression at point to a Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)
-
-py-execute-partial-expression
------------------------------
-Send partial-expression at point to a Python interpreter.
-
-When called with M-x univeral-argument, execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with M-x univeral-argument followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)
-
-py-execute-line
----------------
-Send current line from beginning of indent to Python interpreter.
-
-py-execute-file
----------------
-When called interactively, user is prompted for filename.
-
-py-down-exception
------------------
-Go to the next line down in the traceback.
-
-With M-x univeral-argument (programmatically, optional argument
-BOTTOM), jump to the bottom (innermost) exception in the exception
-stack.
-
-py-up-exception
----------------
-Go to the previous line up in the traceback.
-
-With C-u (programmatically, optional argument TOP)
-jump to the top (outermost) exception in the exception stack.
-
-py-output-buffer-filter
------------------------
-Clear output buffer from py-shell-input prompt etc.
-
-py-send-string
---------------
-Evaluate STRING in inferior Python process.
-
-py-pdbtrack-toggle-stack-tracking
----------------------------------
-Set variable `py-pdbtrack-do-tracking-p'.
-
-turn-on-pdbtrack
-----------------
-
-
-turn-off-pdbtrack
------------------
-
-
-py-fetch-docu
--------------
-Lookup in current buffer for the doku for the symbol at point.
-
-Useful for newly defined symbol, not known to python yet.
-
-py-find-imports
----------------
-Find top-level imports, updating `python-imports'.
-
-py-eldoc-function
------------------
-Print help on symbol at point.
-
-py-describe-symbol
-------------------
-Print help on symbol at point.
-
-Optional C-u used for debugging, will prevent deletion of temp file.
-
-py-describe-mode
-----------------
-Dump long form of `python-mode' docs.
-
-py-find-function
-----------------
-Find source of definition of function NAME.
-
-Interactively, prompt for name.
-
-py-update-imports
------------------
-Returns `python-imports'.
-
-Imports done are displayed in message buffer.
-
-py-indent-forward-line
-----------------------
-Indent and move one line forward to next indentation.
-Returns column of line reached.
-
-If `py-kill-empty-line' is non-nil, delete an empty line.
-When closing a form, use py-close-block et al, which will move and indent likewise.
-With M-x universal argument just indent.
-
-
-py-dedent-forward-line
-----------------------
-Dedent line and move one line forward.
-
-py-dedent
----------
-Dedent line according to `py-indent-offset'.
-
-With arg, do it that many times.
-If point is between indent levels, dedent to next level.
-Return indentation reached, if dedent done, nil otherwise.
-
-Affected by `py-dedent-keep-relative-column'.
-
-py-close-def
-------------
-Set indent level to that of beginning of function definition.
-
-If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline.
-
-py-close-class
---------------
-Set indent level to that of beginning of class definition.
-
-If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline.
-
-py-close-clause
----------------
-Set indent level to that of beginning of clause definition.
-
-If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline.
-
-py-close-block
---------------
-Set indent level to that of beginning of block definition.
-
-If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline.
-
-py-class-at-point
------------------
-Return class definition as string.
-
-With interactive call, send it to the message buffer too.
-
-py-line-at-point
-----------------
-Return line as string.
- With interactive call, send it to the message buffer too.
-
-py-looking-at-keywords-p
-------------------------
-If looking at a python keyword. Returns t or nil.
-
-py-match-paren-mode
--------------------
-py-match-paren-mode nil oder t
-
-py-match-paren
---------------
-Goto to the opening or closing of block before or after point.
-
-With arg, do it that many times.
- Closes unclosed block if jumping from beginning.
-
-py-printform-insert
--------------------
-Inserts a print statement out of current `(car kill-ring)' by default, inserts ARG instead if delivered.
-
-py-documentation
-----------------
-Launch PyDOC on the Word at Point
-
-eva
----
-Put "eval(...)" forms around strings at point.
-
-pst-here
---------
-Kill previous "pdb.set_trace()" and insert it at point.
-
-py-line-to-printform-python2
-----------------------------
-Transforms the item on current in a print statement.
-
-py-switch-imenu-index-function
-------------------------------
-For development only. Good old renamed `py-imenu-create-index'-function hangs with medium size files already. Working `py-imenu-create-index-new' is active by default.
-
-Switch between classic index machine `py-imenu-create-index'-function and new `py-imenu-create-index-new'.
-
-The former may provide a more detailed report, thus delivering two different index-machines is considered.
-
-py-choose-shell-by-path
------------------------
-Select Python executable according to version desplayed in path, current buffer-file is selected from.
-
-Returns versioned string, nil if nothing appropriate found
-
-py-choose-shell-by-shebang
---------------------------
-Choose shell by looking at #! on the first line.
-
-Returns the specified Python resp. Jython shell command name.
-
-py-which-python
----------------
-Returns version of Python of current environment, a number.
-
-py-python-current-environment
------------------------------
-Returns path of current Python installation.
-
-py-switch-shell
----------------
-Toggles between the interpreter customized in `py-shell-toggle-1' resp. `py-shell-toggle-2'. Was hard-coded CPython and Jython in earlier versions, now starts with Python2 and Python3 by default.
-
-ARG might be a python-version string to set to.
-
-C-u `py-toggle-shell' prompts to specify a reachable Python command.
-C-u followed by numerical arg 2 or 3, `py-toggle-shell' opens a respective Python shell.
-C-u followed by numerical arg 5 opens a Jython shell.
-
-Should you need more shells to select, extend this command by adding inside the first cond:
-
- ((eq NUMBER (prefix-numeric-value arg))
- "MY-PATH-TO-SHELL")
-
-
-py-choose-shell
----------------
-Return an appropriate executable as a string.
-
-Returns nil, if no executable found.
-
-This does the following:
- - look for an interpreter with `py-choose-shell-by-shebang'
- - examine imports using `py-choose-shell-by-import'
- - look if Path/To/File indicates a Python version
- - if not successful, return default value of `py-shell-name'
-
-When interactivly called, messages the shell name, Emacs would in the given circtumstances.
-
-With C-u 4 is called `py-switch-shell' see docu there.
-
-
-py-toggle-smart-indentation
----------------------------
-If `py-smart-indentation' should be on or off.
-
-Returns value of `py-smart-indentation' switched to.
-
-py-smart-indentation-on
------------------------
-Make sure, `py-smart-indentation' is on.
-
-Returns value of `py-smart-indentation'.
-
-py-smart-indentation-off
-------------------------
-Make sure, `py-smart-indentation' is off.
-
-Returns value of `py-smart-indentation'.
-
-py-toggle-split-windows-on-execute
-----------------------------------
-If `py-split-windows-on-execute-p' should be on or off.
-
- Returns value of `py-split-windows-on-execute-p' switched to.
-
-py-split-windows-on-execute-on
-------------------------------
-Make sure, `py-split-windows-on-execute-p' is on.
-
-Returns value of `py-split-windows-on-execute-p'.
-
-py-split-windows-on-execute-off
--------------------------------
-Make sure, `py-split-windows-on-execute-p' is off.
-
-Returns value of `py-split-windows-on-execute-p'.
-
-clear-flymake-allowed-file-name-masks
--------------------------------------
-Remove entries with SUFFIX from `flymake-allowed-file-name-masks'.
-
-Default is "\.py\'"
-
-pylint-flymake-mode
--------------------
-Toggle `pylint' `flymake-mode'.
-
-pyflakes-flymake-mode
----------------------
-Toggle `pyflakes' `flymake-mode'.
-
-pychecker-flymake-mode
-----------------------
-Toggle `pychecker' `flymake-mode'.
-
-pep8-flymake-mode
------------------
-Toggle `pep8' `flymake-mode'.
-
-pyflakespep8-flymake-mode
--------------------------
-Toggle `pyflakespep8' `flymake-mode'.
-
-Joint call to pyflakes and pep8 as proposed by
-
-Keegan Carruthers-Smith
-
-
-
-py-toggle-shell-switch-buffers-on-execute
------------------------------------------
-If `py-switch-buffers-on-execute-p' should be on or off.
-
- Returns value of `py-switch-buffers-on-execute-p' switched to.
-
-py-shell-switch-buffers-on-execute-on
--------------------------------------
-Make sure, `py-switch-buffers-on-execute-p' is on.
-
-Returns value of `py-switch-buffers-on-execute-p'.
-
-py-shell-switch-buffers-on-execute-off
---------------------------------------
-Make sure, `py-switch-buffers-on-execute-p' is off.
-
-Returns value of `py-switch-buffers-on-execute-p'.
-
-py-install-directory-check
---------------------------
-Do some sanity check for `py-install-directory'.
-
-Returns `t' if successful.
-
-py-guess-py-install-directory
------------------------------
-Takes value of user directory aka $HOME
-if `(locate-library "python-mode")' is not succesful.
-
-py-set-load-path
-----------------
-Include needed subdirs of python-mode directory.
-
-autopair-insert-or-skip-quote
------------------------------
-Insert or possibly skip over a quoting character.
-
-Works by scheduling possible autopair behaviour, then calls
-original command as if autopair didn't exist.
-
-autopair-insert-opening
------------------------
-Insert opening delimiter and possibly automatically close it.
-
-Works by scheduling possible autopair behaviour, then calls
-original command as if autopair didn't exist.
-
-autopair-skip-close-maybe
--------------------------
-Insert or possibly skip over a closing delimiter.
-
-Works by scheduling possible autopair behaviour, then calls
-original command as if autopair didn't exist.
-
-autopair-backspace
-------------------
-Possibly delete a pair of paired delimiters.
-
-Works by scheduling possible autopair behaviour, then calls
-original command as if autopair didn't exist.
-
-autopair-newline
-----------------
-Do a smart newline when right between parenthesis.
-
-In other words, insert an extra newline along with the one inserted normally
-by this command. Then place point after the first, indented.
-
-Works by scheduling possible autopair behaviour, then calls
-original command as if autopair didn't exist.
-
-autopair-extra-insert-opening
------------------------------
-Insert (an extra) opening delimiter and possibly automatically close it.
-
-Works by scheduling possible autopair behaviour, then calls
-original command as if autopair didn't exist.
-
-autopair-extra-skip-close-maybe
--------------------------------
-Insert or possibly skip over a (and extra) closing delimiter.
-
-Works by scheduling possible autopair behaviour, then calls
-original command as if autopair didn't exist.
-
-autopair-insert-or-skip-paired-delimiter
-----------------------------------------
-Insert or possibly skip over a character with a syntax-class of "paired delimiter".Works by scheduling possible autopair behaviour, then calls
-original command as if autopair didn't exist.
-
-py-edit-abbrevs
----------------
-Jumps to `python-mode-abbrev-table' in a buffer containing lists of abbrev definitions.
-You can edit them and type C-c C-c to redefine abbrevs
-according to your editing.
-Buffer contains a header line for each abbrev table,
- which is the abbrev table name in parentheses.
-This is followed by one line per abbrev in that table:
-NAME USECOUNT EXPANSION HOOK
-where NAME and EXPANSION are strings with quotes,
-USECOUNT is an integer, and HOOK is any valid function
-or may be omitted (it is usually omitted).
-
-py-add-abbrev
--------------
-Defines python-mode specific abbrev for last expressions before point.
-Argument is how many `py-partial-expression's form the expansion; or zero means the region is the expansion.
-
-Reads the abbreviation in the minibuffer; with numeric arg it displays a proposal for an abbrev.
-Proposal is composed from the initial character(s) of the
-expansion.
-
-Don't use this function in a Lisp program; use `define-abbrev' instead.
-
-py-def-or-class-beginning-position
-----------------------------------
-Returns beginning position of function or class definition.
-
-py-def-or-class-end-position
-----------------------------
-Returns end position of function or class definition.
-
-py-statement-beginning-position
--------------------------------
-Returns beginning position of statement.
-
-py-statement-end-position
--------------------------
-Returns end position of statement.
-
-py-current-indentation
-----------------------
-Returns beginning position of code in line.
-
-py-python-version
------------------
-Returns versions number of a Python EXECUTABLE, string.
-
-If no EXECUTABLE given, `py-shell-name' is used.
-Interactively output of `--version' is displayed.
-
-py-version
-----------
-Echo the current version of `python-mode' in the minibuffer.
-
-py-install-search-local
------------------------
-
-
-py-install-local-shells
------------------------
-Builds Python-shell commands from executable found in LOCAL.
-
-If LOCAL is empty, shell-command `find' searches beneath current directory.
-Eval resulting buffer to install it, see customizable `py-extensions'.
-
-py-send-region
---------------
-Send the region to the inferior Python process.
-
-py-send-buffer
---------------
-Send the current buffer to the inferior Python process.
-
-py-switch-to-python
--------------------
-Switch to the Python process buffer, maybe starting new process.
-
-With prefix arg, position cursor at end of buffer.
-
-py-send-region-and-go
----------------------
-Send the region to the inferior Python process.
-
-Then switch to the process buffer.
-
-py-load-file
-------------
-Load a Python file FILE-NAME into the inferior Python process.
-
-If the file has extension `.py' import or reload it as a module.
-Treating it as a module keeps the global namespace clean, provides
-function location information for debugging, and supports users of
-module-qualified names.
-
-py-completion-at-point
-----------------------
-An alternative completion, similar the way python.el does it.
-
-py-script-complete
-------------------
-
-
-py-python-script-complete
--------------------------
-Complete word before point, if any. Otherwise insert TAB.
-
-py-python2-shell-complete
--------------------------
-
-
-py-python3-shell-complete
--------------------------
-Complete word before point, if any. Otherwise insert TAB.
-
-py-shell-complete
------------------
-Complete word before point, if any. Otherwise insert TAB.
-
-ipython-complete
-----------------
-Complete the python symbol before point.
-
-If no completion available, insert a TAB.
-Returns the completed symbol, a string, if successful, nil otherwise.
-
-ipython-complete-py-shell-name
-------------------------------
-Complete the python symbol before point.
-
-If no completion available, insert a TAB.
-Returns the completed symbol, a string, if successful, nil otherwise.
-
-Bug: if no IPython-shell is running, fails first time due to header returned, which messes up the result. Please repeat once then.
-
-py-pep8-run
------------
-*Run pep8, check formatting (default on the file currently visited).
-
-
-py-pep8-help
-------------
-Display pep8 command line help messages.
-
-py-pylint-run
--------------
-*Run pylint (default on the file currently visited).
-
-For help see M-x pylint-help resp. M-x pylint-long-help.
-Home-page: http://www.logilab.org/project/pylint
-
-py-pylint-help
---------------
-Display Pylint command line help messages.
-
-Let's have this until more Emacs-like help is prepared
-
-py-pylint-doku
---------------
-Display Pylint Documentation.
-
-Calls `pylint --full-documentation'
-
-py-pyflakes-run
----------------
-*Run pyflakes (default on the file currently visited).
-
-For help see M-x pyflakes-help resp. M-x pyflakes-long-help.
-Home-page: http://www.logilab.org/project/pyflakes
-
-py-pyflakes-help
-----------------
-Display Pyflakes command line help messages.
-
-Let's have this until more Emacs-like help is prepared
-
-py-pyflakespep8-run
--------------------
-*Run pyflakespep8, check formatting (default on the file currently visited).
-
-
-py-pyflakespep8-help
---------------------
-Display pyflakespep8 command line help messages.
-
-py-pychecker-run
-----------------
-*Run pychecker (default on the file currently visited).
-
-virtualenv-current
-------------------
-barfs the current activated virtualenv
-
-virtualenv-activate
--------------------
-Activate the virtualenv located in DIR
-
-virtualenv-deactivate
----------------------
-Deactivate the current virtual enviroment
-
-virtualenv-workon
------------------
-Issue a virtualenvwrapper-like virtualenv-workon command
-
-py-toggle-local-default-use
----------------------------
-
-
-py-execute-statement-python
----------------------------
-Send statement at point to Python interpreter.
-
-py-execute-statement-python-switch
-----------------------------------
-Send statement at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-statement-python-noswitch
-------------------------------------
-Send statement at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-statement-python-dedicated
--------------------------------------
-Send statement at point to Python unique interpreter.
-
-py-execute-statement-python-dedicated-switch
---------------------------------------------
-Send statement at point to Python unique interpreter and switch to result.
-
-py-execute-statement-ipython
-----------------------------
-Send statement at point to IPython interpreter.
-
-py-execute-statement-ipython-switch
------------------------------------
-Send statement at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-statement-ipython-noswitch
--------------------------------------
-Send statement at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-statement-ipython-dedicated
---------------------------------------
-Send statement at point to IPython unique interpreter.
-
-py-execute-statement-ipython-dedicated-switch
----------------------------------------------
-Send statement at point to IPython unique interpreter and switch to result.
-
-py-execute-statement-python3
-----------------------------
-Send statement at point to Python3 interpreter.
-
-py-execute-statement-python3-switch
------------------------------------
-Send statement at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-statement-python3-noswitch
--------------------------------------
-Send statement at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-statement-python3-dedicated
---------------------------------------
-Send statement at point to Python3 unique interpreter.
-
-py-execute-statement-python3-dedicated-switch
----------------------------------------------
-Send statement at point to Python3 unique interpreter and switch to result.
-
-py-execute-statement-python2
-----------------------------
-Send statement at point to Python2 interpreter.
-
-py-execute-statement-python2-switch
------------------------------------
-Send statement at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-statement-python2-noswitch
--------------------------------------
-Send statement at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-statement-python2-dedicated
---------------------------------------
-Send statement at point to Python2 unique interpreter.
-
-py-execute-statement-python2-dedicated-switch
----------------------------------------------
-Send statement at point to Python2 unique interpreter and switch to result.
-
-py-execute-statement-python2\.7
--------------------------------
-Send statement at point to Python2.7 interpreter.
-
-py-execute-statement-python2\.7-switch
---------------------------------------
-Send statement at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-statement-python2\.7-noswitch
-----------------------------------------
-Send statement at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-statement-python2\.7-dedicated
------------------------------------------
-Send statement at point to Python2.7 unique interpreter.
-
-py-execute-statement-python2\.7-dedicated-switch
-------------------------------------------------
-Send statement at point to Python2.7 unique interpreter and switch to result.
-
-py-execute-statement-jython
----------------------------
-Send statement at point to Jython interpreter.
-
-py-execute-statement-jython-switch
-----------------------------------
-Send statement at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-statement-jython-noswitch
-------------------------------------
-Send statement at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-statement-jython-dedicated
--------------------------------------
-Send statement at point to Jython unique interpreter.
-
-py-execute-statement-jython-dedicated-switch
---------------------------------------------
-Send statement at point to Jython unique interpreter and switch to result.
-
-py-execute-statement-python3\.2
--------------------------------
-Send statement at point to Python3.2 interpreter.
-
-py-execute-statement-python3\.2-switch
---------------------------------------
-Send statement at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-statement-python3\.2-noswitch
-----------------------------------------
-Send statement at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-statement-python3\.2-dedicated
------------------------------------------
-Send statement at point to Python3.2 unique interpreter.
-
-py-execute-statement-python3\.2-dedicated-switch
-------------------------------------------------
-Send statement at point to Python3.2 unique interpreter and switch to result.
-
-py-execute-block-python
------------------------
-Send block at point to Python interpreter.
-
-py-execute-block-python-switch
-------------------------------
-Send block at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-block-python-noswitch
---------------------------------
-Send block at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-block-python-dedicated
----------------------------------
-Send block at point to Python unique interpreter.
-
-py-execute-block-python-dedicated-switch
-----------------------------------------
-Send block at point to Python unique interpreter and switch to result.
-
-py-execute-block-ipython
-------------------------
-Send block at point to IPython interpreter.
-
-py-execute-block-ipython-switch
--------------------------------
-Send block at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-block-ipython-noswitch
----------------------------------
-Send block at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-block-ipython-dedicated
-----------------------------------
-Send block at point to IPython unique interpreter.
-
-py-execute-block-ipython-dedicated-switch
------------------------------------------
-Send block at point to IPython unique interpreter and switch to result.
-
-py-execute-block-python3
-------------------------
-Send block at point to Python3 interpreter.
-
-py-execute-block-python3-switch
--------------------------------
-Send block at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-block-python3-noswitch
----------------------------------
-Send block at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-block-python3-dedicated
-----------------------------------
-Send block at point to Python3 unique interpreter.
-
-py-execute-block-python3-dedicated-switch
------------------------------------------
-Send block at point to Python3 unique interpreter and switch to result.
-
-py-execute-block-python2
-------------------------
-Send block at point to Python2 interpreter.
-
-py-execute-block-python2-switch
--------------------------------
-Send block at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-block-python2-noswitch
----------------------------------
-Send block at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-block-python2-dedicated
-----------------------------------
-Send block at point to Python2 unique interpreter.
-
-py-execute-block-python2-dedicated-switch
------------------------------------------
-Send block at point to Python2 unique interpreter and switch to result.
-
-py-execute-block-python2\.7
----------------------------
-Send block at point to Python2.7 interpreter.
-
-py-execute-block-python2\.7-switch
-----------------------------------
-Send block at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-block-python2\.7-noswitch
-------------------------------------
-Send block at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-block-python2\.7-dedicated
--------------------------------------
-Send block at point to Python2.7 unique interpreter.
-
-py-execute-block-python2\.7-dedicated-switch
---------------------------------------------
-Send block at point to Python2.7 unique interpreter and switch to result.
-
-py-execute-block-jython
------------------------
-Send block at point to Jython interpreter.
-
-py-execute-block-jython-switch
-------------------------------
-Send block at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-block-jython-noswitch
---------------------------------
-Send block at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-block-jython-dedicated
----------------------------------
-Send block at point to Jython unique interpreter.
-
-py-execute-block-jython-dedicated-switch
-----------------------------------------
-Send block at point to Jython unique interpreter and switch to result.
-
-py-execute-block-python3\.2
----------------------------
-Send block at point to Python3.2 interpreter.
-
-py-execute-block-python3\.2-switch
-----------------------------------
-Send block at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-block-python3\.2-noswitch
-------------------------------------
-Send block at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-block-python3\.2-dedicated
--------------------------------------
-Send block at point to Python3.2 unique interpreter.
-
-py-execute-block-python3\.2-dedicated-switch
---------------------------------------------
-Send block at point to Python3.2 unique interpreter and switch to result.
-
-py-execute-clause-python
-------------------------
-Send clause at point to Python interpreter.
-
-py-execute-clause-python-switch
--------------------------------
-Send clause at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-clause-python-noswitch
----------------------------------
-Send clause at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-clause-python-dedicated
-----------------------------------
-Send clause at point to Python unique interpreter.
-
-py-execute-clause-python-dedicated-switch
------------------------------------------
-Send clause at point to Python unique interpreter and switch to result.
-
-py-execute-clause-ipython
--------------------------
-Send clause at point to IPython interpreter.
-
-py-execute-clause-ipython-switch
---------------------------------
-Send clause at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-clause-ipython-noswitch
-----------------------------------
-Send clause at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-clause-ipython-dedicated
------------------------------------
-Send clause at point to IPython unique interpreter.
-
-py-execute-clause-ipython-dedicated-switch
-------------------------------------------
-Send clause at point to IPython unique interpreter and switch to result.
-
-py-execute-clause-python3
--------------------------
-Send clause at point to Python3 interpreter.
-
-py-execute-clause-python3-switch
---------------------------------
-Send clause at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-clause-python3-noswitch
-----------------------------------
-Send clause at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-clause-python3-dedicated
------------------------------------
-Send clause at point to Python3 unique interpreter.
-
-py-execute-clause-python3-dedicated-switch
-------------------------------------------
-Send clause at point to Python3 unique interpreter and switch to result.
-
-py-execute-clause-python2
--------------------------
-Send clause at point to Python2 interpreter.
-
-py-execute-clause-python2-switch
---------------------------------
-Send clause at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-clause-python2-noswitch
-----------------------------------
-Send clause at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-clause-python2-dedicated
------------------------------------
-Send clause at point to Python2 unique interpreter.
-
-py-execute-clause-python2-dedicated-switch
-------------------------------------------
-Send clause at point to Python2 unique interpreter and switch to result.
-
-py-execute-clause-python2\.7
-----------------------------
-Send clause at point to Python2.7 interpreter.
-
-py-execute-clause-python2\.7-switch
------------------------------------
-Send clause at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-clause-python2\.7-noswitch
--------------------------------------
-Send clause at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-clause-python2\.7-dedicated
---------------------------------------
-Send clause at point to Python2.7 unique interpreter.
-
-py-execute-clause-python2\.7-dedicated-switch
----------------------------------------------
-Send clause at point to Python2.7 unique interpreter and switch to result.
-
-py-execute-clause-jython
-------------------------
-Send clause at point to Jython interpreter.
-
-py-execute-clause-jython-switch
--------------------------------
-Send clause at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-clause-jython-noswitch
----------------------------------
-Send clause at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-clause-jython-dedicated
-----------------------------------
-Send clause at point to Jython unique interpreter.
-
-py-execute-clause-jython-dedicated-switch
------------------------------------------
-Send clause at point to Jython unique interpreter and switch to result.
-
-py-execute-clause-python3\.2
-----------------------------
-Send clause at point to Python3.2 interpreter.
-
-py-execute-clause-python3\.2-switch
------------------------------------
-Send clause at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-clause-python3\.2-noswitch
--------------------------------------
-Send clause at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-clause-python3\.2-dedicated
---------------------------------------
-Send clause at point to Python3.2 unique interpreter.
-
-py-execute-clause-python3\.2-dedicated-switch
----------------------------------------------
-Send clause at point to Python3.2 unique interpreter and switch to result.
-
-py-execute-block-or-clause-python
----------------------------------
-Send block-or-clause at point to Python interpreter.
-
-py-execute-block-or-clause-python-switch
-----------------------------------------
-Send block-or-clause at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-block-or-clause-python-noswitch
-------------------------------------------
-Send block-or-clause at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-block-or-clause-python-dedicated
--------------------------------------------
-Send block-or-clause at point to Python unique interpreter.
-
-py-execute-block-or-clause-python-dedicated-switch
---------------------------------------------------
-Send block-or-clause at point to Python unique interpreter and switch to result.
-
-py-execute-block-or-clause-ipython
-----------------------------------
-Send block-or-clause at point to IPython interpreter.
-
-py-execute-block-or-clause-ipython-switch
------------------------------------------
-Send block-or-clause at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-block-or-clause-ipython-noswitch
--------------------------------------------
-Send block-or-clause at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-block-or-clause-ipython-dedicated
---------------------------------------------
-Send block-or-clause at point to IPython unique interpreter.
-
-py-execute-block-or-clause-ipython-dedicated-switch
----------------------------------------------------
-Send block-or-clause at point to IPython unique interpreter and switch to result.
-
-py-execute-block-or-clause-python3
-----------------------------------
-Send block-or-clause at point to Python3 interpreter.
-
-py-execute-block-or-clause-python3-switch
------------------------------------------
-Send block-or-clause at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-block-or-clause-python3-noswitch
--------------------------------------------
-Send block-or-clause at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-block-or-clause-python3-dedicated
---------------------------------------------
-Send block-or-clause at point to Python3 unique interpreter.
-
-py-execute-block-or-clause-python3-dedicated-switch
----------------------------------------------------
-Send block-or-clause at point to Python3 unique interpreter and switch to result.
-
-py-execute-block-or-clause-python2
-----------------------------------
-Send block-or-clause at point to Python2 interpreter.
-
-py-execute-block-or-clause-python2-switch
------------------------------------------
-Send block-or-clause at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-block-or-clause-python2-noswitch
--------------------------------------------
-Send block-or-clause at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-block-or-clause-python2-dedicated
---------------------------------------------
-Send block-or-clause at point to Python2 unique interpreter.
-
-py-execute-block-or-clause-python2-dedicated-switch
----------------------------------------------------
-Send block-or-clause at point to Python2 unique interpreter and switch to result.
-
-py-execute-block-or-clause-python2\.7
--------------------------------------
-Send block-or-clause at point to Python2.7 interpreter.
-
-py-execute-block-or-clause-python2\.7-switch
---------------------------------------------
-Send block-or-clause at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-block-or-clause-python2\.7-noswitch
-----------------------------------------------
-Send block-or-clause at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-block-or-clause-python2\.7-dedicated
------------------------------------------------
-Send block-or-clause at point to Python2.7 unique interpreter.
-
-py-execute-block-or-clause-python2\.7-dedicated-switch
-------------------------------------------------------
-Send block-or-clause at point to Python2.7 unique interpreter and switch to result.
-
-py-execute-block-or-clause-jython
----------------------------------
-Send block-or-clause at point to Jython interpreter.
-
-py-execute-block-or-clause-jython-switch
-----------------------------------------
-Send block-or-clause at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-block-or-clause-jython-noswitch
-------------------------------------------
-Send block-or-clause at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-block-or-clause-jython-dedicated
--------------------------------------------
-Send block-or-clause at point to Jython unique interpreter.
-
-py-execute-block-or-clause-jython-dedicated-switch
---------------------------------------------------
-Send block-or-clause at point to Jython unique interpreter and switch to result.
-
-py-execute-block-or-clause-python3\.2
--------------------------------------
-Send block-or-clause at point to Python3.2 interpreter.
-
-py-execute-block-or-clause-python3\.2-switch
---------------------------------------------
-Send block-or-clause at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-block-or-clause-python3\.2-noswitch
-----------------------------------------------
-Send block-or-clause at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-block-or-clause-python3\.2-dedicated
------------------------------------------------
-Send block-or-clause at point to Python3.2 unique interpreter.
-
-py-execute-block-or-clause-python3\.2-dedicated-switch
-------------------------------------------------------
-Send block-or-clause at point to Python3.2 unique interpreter and switch to result.
-
-py-execute-def-python
----------------------
-Send def at point to Python interpreter.
-
-py-execute-def-python-switch
-----------------------------
-Send def at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-def-python-noswitch
-------------------------------
-Send def at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-def-python-dedicated
--------------------------------
-Send def at point to Python unique interpreter.
-
-py-execute-def-python-dedicated-switch
---------------------------------------
-Send def at point to Python unique interpreter and switch to result.
-
-py-execute-def-ipython
-----------------------
-Send def at point to IPython interpreter.
-
-py-execute-def-ipython-switch
------------------------------
-Send def at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-def-ipython-noswitch
--------------------------------
-Send def at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-def-ipython-dedicated
---------------------------------
-Send def at point to IPython unique interpreter.
-
-py-execute-def-ipython-dedicated-switch
----------------------------------------
-Send def at point to IPython unique interpreter and switch to result.
-
-py-execute-def-python3
-----------------------
-Send def at point to Python3 interpreter.
-
-py-execute-def-python3-switch
------------------------------
-Send def at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-def-python3-noswitch
--------------------------------
-Send def at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-def-python3-dedicated
---------------------------------
-Send def at point to Python3 unique interpreter.
-
-py-execute-def-python3-dedicated-switch
----------------------------------------
-Send def at point to Python3 unique interpreter and switch to result.
-
-py-execute-def-python2
-----------------------
-Send def at point to Python2 interpreter.
-
-py-execute-def-python2-switch
------------------------------
-Send def at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-def-python2-noswitch
--------------------------------
-Send def at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-def-python2-dedicated
---------------------------------
-Send def at point to Python2 unique interpreter.
-
-py-execute-def-python2-dedicated-switch
----------------------------------------
-Send def at point to Python2 unique interpreter and switch to result.
-
-py-execute-def-python2\.7
--------------------------
-Send def at point to Python2.7 interpreter.
-
-py-execute-def-python2\.7-switch
---------------------------------
-Send def at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-def-python2\.7-noswitch
-----------------------------------
-Send def at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-def-python2\.7-dedicated
------------------------------------
-Send def at point to Python2.7 unique interpreter.
-
-py-execute-def-python2\.7-dedicated-switch
-------------------------------------------
-Send def at point to Python2.7 unique interpreter and switch to result.
-
-py-execute-def-jython
----------------------
-Send def at point to Jython interpreter.
-
-py-execute-def-jython-switch
-----------------------------
-Send def at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-def-jython-noswitch
-------------------------------
-Send def at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-def-jython-dedicated
--------------------------------
-Send def at point to Jython unique interpreter.
-
-py-execute-def-jython-dedicated-switch
---------------------------------------
-Send def at point to Jython unique interpreter and switch to result.
-
-py-execute-def-python3\.2
--------------------------
-Send def at point to Python3.2 interpreter.
-
-py-execute-def-python3\.2-switch
---------------------------------
-Send def at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-def-python3\.2-noswitch
-----------------------------------
-Send def at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-def-python3\.2-dedicated
------------------------------------
-Send def at point to Python3.2 unique interpreter.
-
-py-execute-def-python3\.2-dedicated-switch
-------------------------------------------
-Send def at point to Python3.2 unique interpreter and switch to result.
-
-py-execute-class-python
------------------------
-Send class at point to Python interpreter.
-
-py-execute-class-python-switch
-------------------------------
-Send class at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-class-python-noswitch
---------------------------------
-Send class at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-class-python-dedicated
----------------------------------
-Send class at point to Python unique interpreter.
-
-py-execute-class-python-dedicated-switch
-----------------------------------------
-Send class at point to Python unique interpreter and switch to result.
-
-py-execute-class-ipython
-------------------------
-Send class at point to IPython interpreter.
-
-py-execute-class-ipython-switch
--------------------------------
-Send class at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-class-ipython-noswitch
----------------------------------
-Send class at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-class-ipython-dedicated
-----------------------------------
-Send class at point to IPython unique interpreter.
-
-py-execute-class-ipython-dedicated-switch
------------------------------------------
-Send class at point to IPython unique interpreter and switch to result.
-
-py-execute-class-python3
-------------------------
-Send class at point to Python3 interpreter.
-
-py-execute-class-python3-switch
--------------------------------
-Send class at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-class-python3-noswitch
----------------------------------
-Send class at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-class-python3-dedicated
-----------------------------------
-Send class at point to Python3 unique interpreter.
-
-py-execute-class-python3-dedicated-switch
------------------------------------------
-Send class at point to Python3 unique interpreter and switch to result.
-
-py-execute-class-python2
-------------------------
-Send class at point to Python2 interpreter.
-
-py-execute-class-python2-switch
--------------------------------
-Send class at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-class-python2-noswitch
----------------------------------
-Send class at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-class-python2-dedicated
-----------------------------------
-Send class at point to Python2 unique interpreter.
-
-py-execute-class-python2-dedicated-switch
------------------------------------------
-Send class at point to Python2 unique interpreter and switch to result.
-
-py-execute-class-python2\.7
----------------------------
-Send class at point to Python2.7 interpreter.
-
-py-execute-class-python2\.7-switch
-----------------------------------
-Send class at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-class-python2\.7-noswitch
-------------------------------------
-Send class at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-class-python2\.7-dedicated
--------------------------------------
-Send class at point to Python2.7 unique interpreter.
-
-py-execute-class-python2\.7-dedicated-switch
---------------------------------------------
-Send class at point to Python2.7 unique interpreter and switch to result.
-
-py-execute-class-jython
------------------------
-Send class at point to Jython interpreter.
-
-py-execute-class-jython-switch
-------------------------------
-Send class at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-class-jython-noswitch
---------------------------------
-Send class at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-class-jython-dedicated
----------------------------------
-Send class at point to Jython unique interpreter.
-
-py-execute-class-jython-dedicated-switch
-----------------------------------------
-Send class at point to Jython unique interpreter and switch to result.
-
-py-execute-class-python3\.2
----------------------------
-Send class at point to Python3.2 interpreter.
-
-py-execute-class-python3\.2-switch
-----------------------------------
-Send class at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-class-python3\.2-noswitch
-------------------------------------
-Send class at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-class-python3\.2-dedicated
--------------------------------------
-Send class at point to Python3.2 unique interpreter.
-
-py-execute-class-python3\.2-dedicated-switch
---------------------------------------------
-Send class at point to Python3.2 unique interpreter and switch to result.
-
-py-execute-region-python
-------------------------
-Send region at point to Python interpreter.
-
-py-execute-region-python-switch
--------------------------------
-Send region at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-region-python-noswitch
----------------------------------
-Send region at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-region-python-dedicated
-----------------------------------
-Send region at point to Python unique interpreter.
-
-py-execute-region-python-dedicated-switch
------------------------------------------
-Send region at point to Python unique interpreter and switch to result.
-
-py-execute-region-ipython
--------------------------
-Send region at point to IPython interpreter.
-
-py-execute-region-ipython-switch
---------------------------------
-Send region at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-region-ipython-noswitch
-----------------------------------
-Send region at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-region-ipython-dedicated
------------------------------------
-Send region at point to IPython unique interpreter.
-
-py-execute-region-ipython-dedicated-switch
-------------------------------------------
-Send region at point to IPython unique interpreter and switch to result.
-
-py-execute-region-python3
--------------------------
-Send region at point to Python3 interpreter.
-
-py-execute-region-python3-switch
---------------------------------
-Send region at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-region-python3-noswitch
-----------------------------------
-Send region at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-region-python3-dedicated
------------------------------------
-Send region at point to Python3 unique interpreter.
-
-py-execute-region-python3-dedicated-switch
-------------------------------------------
-Send region at point to Python3 unique interpreter and switch to result.
-
-py-execute-region-python2
--------------------------
-Send region at point to Python2 interpreter.
-
-py-execute-region-python2-switch
---------------------------------
-Send region at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-region-python2-noswitch
-----------------------------------
-Send region at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-region-python2-dedicated
------------------------------------
-Send region at point to Python2 unique interpreter.
-
-py-execute-region-python2-dedicated-switch
-------------------------------------------
-Send region at point to Python2 unique interpreter and switch to result.
-
-py-execute-region-python2\.7
-----------------------------
-Send region at point to Python2.7 interpreter.
-
-py-execute-region-python2\.7-switch
------------------------------------
-Send region at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-region-python2\.7-noswitch
--------------------------------------
-Send region at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-region-python2\.7-dedicated
---------------------------------------
-Send region at point to Python2.7 unique interpreter.
-
-py-execute-region-python2\.7-dedicated-switch
----------------------------------------------
-Send region at point to Python2.7 unique interpreter and switch to result.
-
-py-execute-region-jython
-------------------------
-Send region at point to Jython interpreter.
-
-py-execute-region-jython-switch
--------------------------------
-Send region at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-region-jython-noswitch
----------------------------------
-Send region at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-region-jython-dedicated
-----------------------------------
-Send region at point to Jython unique interpreter.
-
-py-execute-region-jython-dedicated-switch
------------------------------------------
-Send region at point to Jython unique interpreter and switch to result.
-
-py-execute-region-python3\.2
-----------------------------
-Send region at point to Python3.2 interpreter.
-
-py-execute-region-python3\.2-switch
------------------------------------
-Send region at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-region-python3\.2-noswitch
--------------------------------------
-Send region at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-region-python3\.2-dedicated
---------------------------------------
-Send region at point to Python3.2 unique interpreter.
-
-py-execute-region-python3\.2-dedicated-switch
----------------------------------------------
-Send region at point to Python3.2 unique interpreter and switch to result.
-
-py-execute-buffer-python
-------------------------
-Send buffer at point to Python interpreter.
-
-py-execute-buffer-python-switch
--------------------------------
-Send buffer at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-buffer-python-noswitch
----------------------------------
-Send buffer at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-buffer-python-dedicated
-----------------------------------
-Send buffer at point to Python unique interpreter.
-
-py-execute-buffer-python-dedicated-switch
------------------------------------------
-Send buffer at point to Python unique interpreter and switch to result.
-
-py-execute-buffer-ipython
--------------------------
-Send buffer at point to IPython interpreter.
-
-py-execute-buffer-ipython-switch
---------------------------------
-Send buffer at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-buffer-ipython-noswitch
-----------------------------------
-Send buffer at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-buffer-ipython-dedicated
------------------------------------
-Send buffer at point to IPython unique interpreter.
-
-py-execute-buffer-ipython-dedicated-switch
-------------------------------------------
-Send buffer at point to IPython unique interpreter and switch to result.
-
-py-execute-buffer-python3
--------------------------
-Send buffer at point to Python3 interpreter.
-
-py-execute-buffer-python3-switch
---------------------------------
-Send buffer at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-buffer-python3-noswitch
-----------------------------------
-Send buffer at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-buffer-python3-dedicated
------------------------------------
-Send buffer at point to Python3 unique interpreter.
-
-py-execute-buffer-python3-dedicated-switch
-------------------------------------------
-Send buffer at point to Python3 unique interpreter and switch to result.
-
-py-execute-buffer-python2
--------------------------
-Send buffer at point to Python2 interpreter.
-
-py-execute-buffer-python2-switch
---------------------------------
-Send buffer at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-buffer-python2-noswitch
-----------------------------------
-Send buffer at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-buffer-python2-dedicated
------------------------------------
-Send buffer at point to Python2 unique interpreter.
-
-py-execute-buffer-python2-dedicated-switch
-------------------------------------------
-Send buffer at point to Python2 unique interpreter and switch to result.
-
-py-execute-buffer-python2\.7
-----------------------------
-Send buffer at point to Python2.7 interpreter.
-
-py-execute-buffer-python2\.7-switch
------------------------------------
-Send buffer at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-buffer-python2\.7-noswitch
--------------------------------------
-Send buffer at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-buffer-python2\.7-dedicated
---------------------------------------
-Send buffer at point to Python2.7 unique interpreter.
-
-py-execute-buffer-python2\.7-dedicated-switch
----------------------------------------------
-Send buffer at point to Python2.7 unique interpreter and switch to result.
-
-py-execute-buffer-jython
-------------------------
-Send buffer at point to Jython interpreter.
-
-py-execute-buffer-jython-switch
--------------------------------
-Send buffer at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-buffer-jython-noswitch
----------------------------------
-Send buffer at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-buffer-jython-dedicated
-----------------------------------
-Send buffer at point to Jython unique interpreter.
-
-py-execute-buffer-jython-dedicated-switch
------------------------------------------
-Send buffer at point to Jython unique interpreter and switch to result.
-
-py-execute-buffer-python3\.2
-----------------------------
-Send buffer at point to Python3.2 interpreter.
-
-py-execute-buffer-python3\.2-switch
------------------------------------
-Send buffer at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-buffer-python3\.2-noswitch
--------------------------------------
-Send buffer at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-buffer-python3\.2-dedicated
---------------------------------------
-Send buffer at point to Python3.2 unique interpreter.
-
-py-execute-buffer-python3\.2-dedicated-switch
----------------------------------------------
-Send buffer at point to Python3.2 unique interpreter and switch to result.
-
-py-execute-expression-python
-----------------------------
-Send expression at point to Python interpreter.
-
-py-execute-expression-python-switch
------------------------------------
-Send expression at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-expression-python-noswitch
--------------------------------------
-Send expression at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-expression-python-dedicated
---------------------------------------
-Send expression at point to Python unique interpreter.
-
-py-execute-expression-python-dedicated-switch
----------------------------------------------
-Send expression at point to Python unique interpreter and switch to result.
-
-py-execute-expression-ipython
------------------------------
-Send expression at point to IPython interpreter.
-
-py-execute-expression-ipython-switch
-------------------------------------
-Send expression at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-expression-ipython-noswitch
---------------------------------------
-Send expression at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-expression-ipython-dedicated
----------------------------------------
-Send expression at point to IPython unique interpreter.
-
-py-execute-expression-ipython-dedicated-switch
-----------------------------------------------
-Send expression at point to IPython unique interpreter and switch to result.
-
-py-execute-expression-python3
------------------------------
-Send expression at point to Python3 interpreter.
-
-py-execute-expression-python3-switch
-------------------------------------
-Send expression at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-expression-python3-noswitch
---------------------------------------
-Send expression at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-expression-python3-dedicated
----------------------------------------
-Send expression at point to Python3 unique interpreter.
-
-py-execute-expression-python3-dedicated-switch
-----------------------------------------------
-Send expression at point to Python3 unique interpreter and switch to result.
-
-py-execute-expression-python2
------------------------------
-Send expression at point to Python2 interpreter.
-
-py-execute-expression-python2-switch
-------------------------------------
-Send expression at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-expression-python2-noswitch
---------------------------------------
-Send expression at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-expression-python2-dedicated
----------------------------------------
-Send expression at point to Python2 unique interpreter.
-
-py-execute-expression-python2-dedicated-switch
-----------------------------------------------
-Send expression at point to Python2 unique interpreter and switch to result.
-
-py-execute-expression-python2\.7
---------------------------------
-Send expression at point to Python2.7 interpreter.
-
-py-execute-expression-python2\.7-switch
----------------------------------------
-Send expression at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-expression-python2\.7-noswitch
------------------------------------------
-Send expression at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-expression-python2\.7-dedicated
-------------------------------------------
-Send expression at point to Python2.7 unique interpreter.
-
-py-execute-expression-python2\.7-dedicated-switch
--------------------------------------------------
-Send expression at point to Python2.7 unique interpreter and switch to result.
-
-py-execute-expression-jython
-----------------------------
-Send expression at point to Jython interpreter.
-
-py-execute-expression-jython-switch
------------------------------------
-Send expression at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-expression-jython-noswitch
--------------------------------------
-Send expression at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-expression-jython-dedicated
---------------------------------------
-Send expression at point to Jython unique interpreter.
-
-py-execute-expression-jython-dedicated-switch
----------------------------------------------
-Send expression at point to Jython unique interpreter and switch to result.
-
-py-execute-expression-python3\.2
---------------------------------
-Send expression at point to Python3.2 interpreter.
-
-py-execute-expression-python3\.2-switch
----------------------------------------
-Send expression at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-expression-python3\.2-noswitch
------------------------------------------
-Send expression at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-expression-python3\.2-dedicated
-------------------------------------------
-Send expression at point to Python3.2 unique interpreter.
-
-py-execute-expression-python3\.2-dedicated-switch
--------------------------------------------------
-Send expression at point to Python3.2 unique interpreter and switch to result.
-
-py-execute-partial-expression-python
-------------------------------------
-Send partial-expression at point to Python interpreter.
-
-py-execute-partial-expression-python-switch
--------------------------------------------
-Send partial-expression at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-partial-expression-python-noswitch
----------------------------------------------
-Send partial-expression at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-partial-expression-python-dedicated
-----------------------------------------------
-Send partial-expression at point to Python unique interpreter.
-
-py-execute-partial-expression-python-dedicated-switch
------------------------------------------------------
-Send partial-expression at point to Python unique interpreter and switch to result.
-
-py-execute-partial-expression-ipython
--------------------------------------
-Send partial-expression at point to IPython interpreter.
-
-py-execute-partial-expression-ipython-switch
---------------------------------------------
-Send partial-expression at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-partial-expression-ipython-noswitch
-----------------------------------------------
-Send partial-expression at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-partial-expression-ipython-dedicated
------------------------------------------------
-Send partial-expression at point to IPython unique interpreter.
-
-py-execute-partial-expression-ipython-dedicated-switch
-------------------------------------------------------
-Send partial-expression at point to IPython unique interpreter and switch to result.
-
-py-execute-partial-expression-python3
--------------------------------------
-Send partial-expression at point to Python3 interpreter.
-
-py-execute-partial-expression-python3-switch
---------------------------------------------
-Send partial-expression at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-partial-expression-python3-noswitch
-----------------------------------------------
-Send partial-expression at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-partial-expression-python3-dedicated
------------------------------------------------
-Send partial-expression at point to Python3 unique interpreter.
-
-py-execute-partial-expression-python3-dedicated-switch
-------------------------------------------------------
-Send partial-expression at point to Python3 unique interpreter and switch to result.
-
-py-execute-partial-expression-python2
--------------------------------------
-Send partial-expression at point to Python2 interpreter.
-
-py-execute-partial-expression-python2-switch
---------------------------------------------
-Send partial-expression at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-partial-expression-python2-noswitch
-----------------------------------------------
-Send partial-expression at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-partial-expression-python2-dedicated
------------------------------------------------
-Send partial-expression at point to Python2 unique interpreter.
-
-py-execute-partial-expression-python2-dedicated-switch
-------------------------------------------------------
-Send partial-expression at point to Python2 unique interpreter and switch to result.
-
-py-execute-partial-expression-python2\.7
-----------------------------------------
-Send partial-expression at point to Python2.7 interpreter.
-
-py-execute-partial-expression-python2\.7-switch
------------------------------------------------
-Send partial-expression at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-partial-expression-python2\.7-noswitch
--------------------------------------------------
-Send partial-expression at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-partial-expression-python2\.7-dedicated
---------------------------------------------------
-Send partial-expression at point to Python2.7 unique interpreter.
-
-py-execute-partial-expression-python2\.7-dedicated-switch
----------------------------------------------------------
-Send partial-expression at point to Python2.7 unique interpreter and switch to result.
-
-py-execute-partial-expression-jython
-------------------------------------
-Send partial-expression at point to Jython interpreter.
-
-py-execute-partial-expression-jython-switch
--------------------------------------------
-Send partial-expression at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-partial-expression-jython-noswitch
----------------------------------------------
-Send partial-expression at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-partial-expression-jython-dedicated
-----------------------------------------------
-Send partial-expression at point to Jython unique interpreter.
-
-py-execute-partial-expression-jython-dedicated-switch
------------------------------------------------------
-Send partial-expression at point to Jython unique interpreter and switch to result.
-
-py-execute-partial-expression-python3\.2
-----------------------------------------
-Send partial-expression at point to Python3.2 interpreter.
-
-py-execute-partial-expression-python3\.2-switch
------------------------------------------------
-Send partial-expression at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-partial-expression-python3\.2-noswitch
--------------------------------------------------
-Send partial-expression at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-partial-expression-python3\.2-dedicated
---------------------------------------------------
-Send partial-expression at point to Python3.2 unique interpreter.
-
-py-execute-partial-expression-python3\.2-dedicated-switch
----------------------------------------------------------
-Send partial-expression at point to Python3.2 unique interpreter and switch to result.
-
-py-execute-line-python
-----------------------
-Send line at point to Python interpreter.
-
-py-execute-line-python-switch
------------------------------
-Send line at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-line-python-noswitch
--------------------------------
-Send line at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-line-python-dedicated
---------------------------------
-Send line at point to Python unique interpreter.
-
-py-execute-line-python-dedicated-switch
----------------------------------------
-Send line at point to Python unique interpreter and switch to result.
-
-py-execute-line-ipython
------------------------
-Send line at point to IPython interpreter.
-
-py-execute-line-ipython-switch
-------------------------------
-Send line at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-line-ipython-noswitch
---------------------------------
-Send line at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-line-ipython-dedicated
----------------------------------
-Send line at point to IPython unique interpreter.
-
-py-execute-line-ipython-dedicated-switch
-----------------------------------------
-Send line at point to IPython unique interpreter and switch to result.
-
-py-execute-line-python3
------------------------
-Send line at point to Python3 interpreter.
-
-py-execute-line-python3-switch
-------------------------------
-Send line at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-line-python3-noswitch
---------------------------------
-Send line at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-line-python3-dedicated
----------------------------------
-Send line at point to Python3 unique interpreter.
-
-py-execute-line-python3-dedicated-switch
-----------------------------------------
-Send line at point to Python3 unique interpreter and switch to result.
-
-py-execute-line-python2
------------------------
-Send line at point to Python2 interpreter.
-
-py-execute-line-python2-switch
-------------------------------
-Send line at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-line-python2-noswitch
---------------------------------
-Send line at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-line-python2-dedicated
----------------------------------
-Send line at point to Python2 unique interpreter.
-
-py-execute-line-python2-dedicated-switch
-----------------------------------------
-Send line at point to Python2 unique interpreter and switch to result.
-
-py-execute-line-python2\.7
---------------------------
-Send line at point to Python2.7 interpreter.
-
-py-execute-line-python2\.7-switch
----------------------------------
-Send line at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-line-python2\.7-noswitch
------------------------------------
-Send line at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-line-python2\.7-dedicated
-------------------------------------
-Send line at point to Python2.7 unique interpreter.
-
-py-execute-line-python2\.7-dedicated-switch
--------------------------------------------
-Send line at point to Python2.7 unique interpreter and switch to result.
-
-py-execute-line-jython
-----------------------
-Send line at point to Jython interpreter.
-
-py-execute-line-jython-switch
------------------------------
-Send line at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-line-jython-noswitch
--------------------------------
-Send line at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-line-jython-dedicated
---------------------------------
-Send line at point to Jython unique interpreter.
-
-py-execute-line-jython-dedicated-switch
----------------------------------------
-Send line at point to Jython unique interpreter and switch to result.
-
-py-execute-line-python3\.2
---------------------------
-Send line at point to Python3.2 interpreter.
-
-py-execute-line-python3\.2-switch
----------------------------------
-Send line at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'.
-
-py-execute-line-python3\.2-noswitch
------------------------------------
-Send line at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p'
-
-py-execute-line-python3\.2-dedicated
-------------------------------------
-Send line at point to Python3.2 unique interpreter.
-
-py-execute-line-python3\.2-dedicated-switch
--------------------------------------------
-Send line at point to Python3.2 unique interpreter and switch to result.
-
diff --git a/elpa/python-mode-6.0.10/python-mode-autoloads.el b/elpa/python-mode-6.0.10/python-mode-autoloads.el
deleted file mode 100644
index 98edbeba..00000000
--- a/elpa/python-mode-6.0.10/python-mode-autoloads.el
+++ /dev/null
@@ -1,18 +0,0 @@
-;;; python-mode-autoloads.el --- automatically extracted autoloads
-;;
-;;; Code:
-
-
-;;;### (autoloads nil nil ("python-mode-pkg.el" "python-mode.el")
-;;;;;; (20535 45425 973618))
-
-;;;***
-
-(provide 'python-mode-autoloads)
-;; Local Variables:
-;; version-control: never
-;; no-byte-compile: t
-;; no-update-autoloads: t
-;; coding: utf-8
-;; End:
-;;; python-mode-autoloads.el ends here
diff --git a/elpa/python-mode-6.0.10/python-mode-pkg.el b/elpa/python-mode-6.0.10/python-mode-pkg.el
deleted file mode 100644
index 97e6349d..00000000
--- a/elpa/python-mode-6.0.10/python-mode-pkg.el
+++ /dev/null
@@ -1,2 +0,0 @@
-(define-package "python-mode" "6.0.10"
- "Python major mode")
diff --git a/elpa/python-mode-6.0.10/python-mode.el b/elpa/python-mode-6.0.10/python-mode.el
deleted file mode 100644
index 5555ef85..00000000
--- a/elpa/python-mode-6.0.10/python-mode.el
+++ /dev/null
@@ -1,17308 +0,0 @@
-;; python-mode.el --- Towards an Python-IDE in Emacs
-
-;; Maintainer: Andreas Roehler
-;; Keywords: languages, processes, python, oop
-
-;; Copyright (C) 1992,1993,1994 Tim Peters
-
-;; Author: 2003-2011 https://launchpad.net/python-mode
-;; 1995-2002 Barry A. Warsaw
-;; 1992-1994 Tim Peters
-;; Maintainer: python-mode@python.org
-;; Created: Feb 1992
-;; Keywords: python languages oop
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program. If not, see .
-
-;;; Commentary:
-
-;; commands-python-mode.org in directory doc reports
-;; available commands, also a menu is provided
-
-;; as for `py-add-abbrev':
-;; Similar to `add-mode-abbrev', but uses
-;; `py-partial-expression' before point for expansion to
-;; store, not `word'. Also provides a proposal for new
-;; abbrevs.
-
-;; Proposal for an abbrev is composed from the downcased
-;; initials of expansion - provided they are of char-class
-;; [:alpha:]
-;;
-;; For example code below would be recognised as a
-;; `py-expression' composed by three
-;; py-partial-expressions.
-;;
-;; OrderedDict.popitem(last=True)
-;;
-;; Putting the curser at the EOL, M-3 M-x py-add-abbrev
-;;
-;; would prompt "op" for an abbrev to store, as first
-;; `py-partial-expression' beginns with a "(", which is
-;; not taken as proposal.
-
-;;; Code
-
-(require 'comint)
-(require 'custom)
-(eval-when-compile (require 'cl))
-(require 'compile)
-(require 'ansi-color)
-(require 'cc-cmds)
-(require 'shell)
-(require 'rx)
-(require 'flymake)
-(require 'imenu)
-
-(defgroup python-mode nil
- "Support for the Python programming language, "
- :group 'languages
- :prefix "py-")
-
-(defconst py-version "6.0.10")
-
-(defvar python-local-version nil
- "Used internally. ")
-(make-variable-buffer-local 'python-local-version)
-
-(defvar py-local-command nil
- "Returns locally used executable-name. ")
-(make-variable-buffer-local 'py-local-command)
-
-(defvar py-local-versioned-command nil
- "Returns locally used executable-name including its version. ")
-(make-variable-buffer-local 'py-local-versioned-command)
-
-(defcustom python-mode-modeline-display "Py"
- "String to display in Emacs modeline "
-
- :type 'string
- :group 'python-mode)
-
-;;; User definable variables
-(defcustom py-indent-offset 4
- "*Amount of offset per level of indentation.
-`\\[py-guess-indent-offset]' can usually guess a good value when
-you're editing someone else's Python code."
- :type 'integer
- :group 'python-mode)
-(make-variable-buffer-local 'py-indent-offset)
-
-(defcustom pdb-path '/usr/lib/python2.7/pdb.py
- "Where to find pdb.py. Edit this according to your system.
-
-If you ignore the location `M-x py-guess-pdb-path' might display it.
-"
- :type 'variable
- :group 'python-mode)
-
-(defcustom py-verbose-p nil
- "If indenting functions should report reached indent level.
-
-Default is nil. "
-
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-prepare-autopair-mode-p t
- "If autopair-mode hook should be loaded. Default is `t'. "
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-fontify-shell-buffer-p nil
- "If code in Python shell should be highlighted as in script buffer.
-
-Default is nil.
-
-If `t', related vars like `comment-start' will be set too.
-Seems convenient when playing with stuff in IPython shell
-Might not be TRT when a lot of output arrives "
-
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-modeline-display-full-path-p nil
- "If the full PATH/TO/PYTHON should be displayed in shell modeline.
-
-Default is nil. Note: when `py-shell-name' is specified with path, it's shown as an acronym in buffer-name already. "
-
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-modeline-acronym-display-home-p nil
- "If the modeline acronym should contain chars indicating the home-directory.
-
-Default is nil "
- :type 'boolean
- :group 'python-mode)
-
-(defun py-guess-pdb-path ()
- "If py-pdb-path isn't set, find location of pdb.py. "
- (interactive)
- (let ((ele (split-string (shell-command-to-string "whereis python")))
- erg)
- (while (or (not erg)(string= "" erg))
- (when (and (string-match "^/" (car ele)) (not (string-match "/man" (car ele))))
- (setq erg (shell-command-to-string (concat "find " (car ele) " -type f -name \"pdb.py\""))))
- (setq ele (cdr ele)))
- (if erg
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- (when (interactive-p) (message "%s" "pdb.py not found, please customize `pdb-path'")))
- (concat "'" erg)))
-
-(defcustom py-install-directory ""
- "Directory where python-mode.el and it's subdirectories should be installed. Needed for completion and other environment stuff only. "
- :type 'string
- :group 'python-mode)
-
-(defcustom py-guess-py-install-directory-p t
- "If in cases, `py-install-directory' isn't set, `py-set-load-path'should guess it from `buffer-file-name'. "
-
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-report-position-p nil
- "If functions moving point like `py-forward-into-nomenclature' should report reached position.
-
-Default is nil. "
-
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-extensions "py-extensions.el"
- "File where extensions to python-mode.el should be installed. Used by virtualenv support. "
-
- :type 'string
- :group 'python-mode)
-
-(defcustom py-hide-show-minor-mode-p nil
- "If hide-show minor-mode should be on, default is nil. "
-
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-org-cycle-p nil
- "When non-nil, command `org-cycle' is available at shift-TAB,
-
-Default is nil. "
-
- :type 'boolean
- :group 'python-mode)
-
-(defcustom ipython-complete-use-separate-shell-p nil
-
- "If `ipython-complete' should use a separate shell. Thus prompt-counter is not incremented by completion. "
- :type 'boolean :group 'python-mode)
-
-(defcustom py-outline-minor-mode-p t
- "If outline minor-mode should be on, default is `t'. "
-
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-outline-mode-keywords
- '("class" "def" "elif" "else" "except"
- "for" "if" "while" "finally" "try"
- "with")
- "Keywords composing visible heads. "
- :type '(repeat string)
- :group 'python-mode)
-
-(defcustom py-start-run-py-shell t
- "If `python-mode' should start a python-shell, `py-shell'. Default is `t'. "
-
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-start-run-ipython-shell t
- "If `python-mode' should start an ipython-shell. Default is `t'.
-
-A running ipython-shell presently is needed by `ipython-complete', otherwise first try will fail. "
-
- :type 'boolean
- :group 'python-mode)
-
-;; vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
-(defcustom py-close-provides-newline t
- "If a newline is inserted, when line after block isn't empty. Default is non-nil. "
- :type 'boolean
- :group 'python-mode)
-(make-variable-buffer-local 'py-close-provides-newline)
-
-(defcustom py-dedent-keep-relative-column t
- "If point should follow dedent or kind of electric move to end of line. Default is t - keep relative position. "
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-indent-honors-multiline-listing nil
- "If `t', indents to 1+ column of opening delimiter. If `nil', indent adds one level to the beginning of statement. Default is `nil'. "
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-indent-honors-inline-comment nil
- "If non-nil, indents to column of inlined comment start.
-Default is nil. "
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-closing-list-dedents-bos nil
- "If non-nil, closing parentesis dedents onto column of statement, otherwise keeps additional `py-indent-offset', default is nil "
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-electric-colon-active-p nil
- "`py-electric-colon' feature. Default is `nil'. See lp:837065 for discussions. "
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-electric-comment-p t
- "If \"#\" should call `py-electric-comment'. Default is `t'. "
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-electric-comment-add-space-p nil
- "If py-electric-comment should add a space. Default is `nil'. "
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-mark-decorators nil
- "If py-mark-def-or-class functions should mark decorators too. Default is `nil'. "
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-tab-indent t
- "*Non-nil means TAB in Python mode calls `py-indent-line'."
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-complete-function 'nil
- "When set, enforces function todo completion, default is nil.
-
-Normally python-mode, resp. inferior-python-mode know best which functin to use. "
- :type '(choice
- (const :tag "default" nil)
- (const :tag "py-completion-at-point" py-completion-at-point)
- (const :tag "Pymacs based py-complete" py-complete)
- (const :tag "py-shell-complete" py-shell-complete)
- (const :tag "IPython's ipython-complete" ipython-complete)
- )
- :group 'python-mode)
-
-(defcustom ipython-complete-function 'ipython-complete
- "Function used for completion in IPython shell buffers.
-
-Minor bug: `ipython-complete' raises the prompt counter when completion done
-
-Richard Everson commented:
-
- I don't know how to stop IPython from incrementing the prompt
- counter, but using py-completion-at-point just hangs emacs for
- me. If I start with a new IPython shell, then
-
- In [1]: import sys
-
- In [2]: sys.pa
-
- then M-x py-completion-at-point, hoping to complete to sys.path, Emacs
- hangs. Escaping out of it shows that the \*Python\* buffer has the
- contents:
-
- >>> Traceback (most recent call last):
- File \"\", line 1, in
- NameError: name 'nil' is not defined
- >>> =
- [ ... ]
-
- On the other hand, IPython's interaction and completion itself is pretty
- impressive (for versions greater than 0.10 at least): it inserts the
- correct indentation for for, if, etc and it will show completions even
- within a loop. Here's an example from a terminal shell:
-
- In [1]:
-
- In [1]: for i in range(3):
- ...: print i, sys.p<------------ Pressed tab here; indentation inser=
- ted automatically
- sys.path sys.path_importer_cache sys.prefix
- sys.path_hooks sys.platform sys.py3kwarning
- ...: print i, sys.path<------------ Pressed tab again
- sys.path sys.path_hooks sys.path_importer_cache
-"
- :type '(choice (const :tag "py-completion-at-point" py-completion-at-point)
- (const :tag "py-shell-complete" py-shell-complete)
- (const :tag "Pymacs based py-complete" py-complete)
- (const :tag "IPython's ipython-complete" ipython-complete))
- :group 'python-mode)
-(make-variable-buffer-local 'ipython-complete-function)
-
-(defvar py-local-complete-function nil
- "Set by python-mode-hook resp. to environment.
-
-`py-complete-function', when set, overrides it. ")
-(make-variable-buffer-local 'py-local-complete-function)
-
-(defcustom py-encoding-string " # -*- coding: utf-8 -*-"
- "Default string specifying encoding of a Python file. "
- :type 'string
- :group 'python-mode)
-
-(defvar py-encoding-string-re "^[ \t]*#[ \t]*-\\*-[ \t]*coding:.+-\\*-"
- "Matches encoding string of a Python file. ")
-
-(defvar symbol-definition-start-re)
-(setq symbol-definition-start-re "^[ \t]*(\\(defun\\|defvar\\|defcustom\\)")
-(defcustom py-shebang-startstring "#! /bin/env"
- "Detecting the shell in head of file. "
- :type 'string
- :group 'python-mode)
-
-(defvar py-shebang-regexp "#![ \t]?\\([^ \t\n]+\\)[ \t]?\\([biptj]+ython[^ \t\n]*\\)"
- "Detecting the shell in head of file. ")
-
-(defcustom py-python-command-args '("-i")
- "*List of string arguments to be used when starting a Python shell."
- :type '(repeat string)
- :group 'python-mode)
-(make-variable-buffer-local 'py-python-command-args)
-
-(set-default 'py-python-command-args '("-i"))
-
-(make-obsolete-variable 'py-jpython-command-args 'py-jython-command-args nil)
-(defcustom py-jython-command-args '("-i")
- "*List of string arguments to be used when starting a Jython shell."
- :type '(repeat string)
- :group 'python-mode
- :tag "Jython Command Args")
-
-(defcustom py-cleanup-temporary t
- "If temporary buffers and files used by functions executing region should be deleted afterwards. "
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-lhs-inbound-indent 1
- "When line starts a multiline-assignment: How many colums indent should be more than opening bracket, brace or parenthesis. "
- :type 'integer
- :group 'python-mode)
-(make-variable-buffer-local 'py-lhs-inbound-indent)
-
-(defcustom py-rhs-inbound-indent 1
- "When inside a multiline-assignment: How many colums indent should be more than opening bracket, brace or parenthesis. "
- :type 'integer
- :group 'python-mode)
-(make-variable-buffer-local 'py-rhs-inbound-indent)
-
-(defcustom py-continuation-offset 2
- "*Additional amount of offset to give for some continuation lines.
-Continuation lines are those that immediately follow a backslash
-terminated line. "
- :type 'integer
- :group 'python-mode)
-
-(defcustom py-indent-tabs-mode nil
- "Python-mode starts `indent-tabs-mode' with the value specified here, default is nil. "
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-smart-indentation t
- "*Should `python-mode' try to automagically set some indentation variables?
-When this variable is non-nil, two things happen when a buffer is set
-to `python-mode':
-
- 1. `py-indent-offset' is guessed from existing code in the buffer.
- Only guessed values between 2 and 8 are considered. If a valid
- guess can't be made (perhaps because you are visiting a new
- file), then the value in `py-indent-offset' is used.
-
- 2. `indent-tabs-mode' is turned off if `py-indent-offset' does not
- equal `tab-width' (`indent-tabs-mode' is never turned on by
- Python mode). This means that for newly written code, tabs are
- only inserted in indentation if one tab is one indentation
- level, otherwise only spaces are used.
-
-Note that both these settings occur *after* `python-mode-hook' is run,
-so if you want to defeat the automagic configuration, you must also
-set `py-smart-indentation' to nil in your `python-mode-hook'."
- :type 'boolean
- :group 'python-mode)
-(make-variable-buffer-local 'py-smart-indentation)
-
-(defcustom py-align-multiline-strings-p t
- "*Flag describing how multi-line triple quoted strings are aligned.
-When this flag is non-nil, continuation lines are lined up under the
-preceding line's indentation. When this flag is nil, continuation
-lines are aligned to column zero."
- :type '(choice (const :tag "Align under preceding line" t)
- (const :tag "Align to column zero" nil))
- :group 'python-mode)
-
-(defcustom py-block-comment-prefix "##"
- "*String used by \\[comment-region] to comment out a block of code.
-This should follow the convention for non-indenting comment lines so
-that the indentation commands won't get confused (i.e., the string
-should be of the form `#x...' where `x' is not a blank or a tab, and
-`...' is arbitrary). However, this string should not end in whitespace."
- :type 'string
- :group 'python-mode)
-
-(defcustom py-indent-comments t
- "When t, comment lines are indented. "
- :type 'boolean
- :group 'python-mode)
-
-(defvar py-separator-char 47
- "Values set by defcustom only will not be seen in batch-mode. ")
-
-(defcustom py-separator-char 47
- "The character, which separates the system file-path components.
-
-Precedes guessing when not empty, returned by function `py-separator-char'. "
- :type 'character
- :group 'python-mode)
-
-(defcustom py-custom-temp-directory ""
- "If set, will take precedence over guessed values from `py-temp-directory'. Default is the empty string.
-
-When set, make sure the directory exists. "
- :type 'string
- :group 'python-mode)
-
-(defvar py-temp-directory
- (let ((ok '(lambda (x)
- (and x
- (setq x (expand-file-name x)) ; always true
- (file-directory-p x)
- (file-writable-p x)
- x)))
- erg)
- (or
- (and (not (string= "" py-custom-temp-directory))
- (if (funcall ok py-custom-temp-directory)
- (setq erg (expand-file-name py-custom-temp-directory))
- (if (file-directory-p (expand-file-name py-custom-temp-directory))
- (error "py-custom-temp-directory set but not writable")
- (error "py-custom-temp-directory not an existing directory"))))
- (and (funcall ok (getenv "TMPDIR"))
- (setq erg (getenv "TMPDIR")))
- (and (funcall ok (getenv "TEMP/TMP"))
- (setq erg (getenv "TEMP/TMP")))
- (and (funcall ok "/usr/tmp")
- (setq erg "/usr/tmp"))
- (and (funcall ok "/tmp")
- (setq erg "/tmp"))
- (and (funcall ok "/var/tmp")
- (setq erg "/var/tmp"))
- (and (eq system-type 'darwin)
- (funcall ok "/var/folders")
- (setq erg "/var/folders"))
- (and (or (eq system-type 'ms-dos)(eq system-type 'windows-nt))
- (funcall ok (concat "c:" (char-to-string py-separator-char) "Users"))
- (setq erg (concat "c:" (char-to-string py-separator-char) "Users")))
- ;; (funcall ok ".")
- (error
- "Couldn't find a usable temp directory -- set `py-temp-directory'"))
- (when erg (setq py-temp-directory erg)))
- "*Directory used for temporary files created by a *Python* process.
-By default, guesses the first directory from this list that exists and that you
-can write into: the value (if any) of the environment variable TMPDIR,
-/usr/tmp, /tmp, /var/tmp, or the current directory.
-
-`py-custom-temp-directory' will take precedence when setq ")
-
-(defcustom py-beep-if-tab-change t
- "*Ring the bell if `tab-width' is changed.
-If a comment of the form
-
- \t# vi:set tabsize=:
-
-is found before the first code line when the file is entered, and the
-current value of (the general Emacs variable) `tab-width' does not
-equal , `tab-width' is set to , a message saying so is
-displayed in the echo area, and if `py-beep-if-tab-change' is non-nil
-the Emacs bell is also rung as a warning."
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-jump-on-exception t
- "*Jump to innermost exception frame in *Python Output* buffer.
-When this variable is non-nil and an exception occurs when running
-Python code synchronously in a subprocess, jump immediately to the
-source code of the innermost traceback frame."
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-ask-about-save t
- "If not nil, ask about which buffers to save before executing some code.
-Otherwise, all modified buffers are saved without asking."
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-backspace-function 'backward-delete-char-untabify
- "*Function called by `py-electric-backspace' when deleting backwards."
- :type 'function
- :group 'python-mode)
-
-(defcustom py-delete-function 'delete-char
- "*Function called by `py-electric-delete' when deleting forwards."
- :type 'function
- :group 'python-mode)
-
-(defcustom py-pdbtrack-do-tracking-p t
- "*Controls whether the pdbtrack feature is enabled or not.
-When non-nil, pdbtrack is enabled in all comint-based buffers,
-e.g. shell buffers and the *Python* buffer. When using pdb to debug a
-Python program, pdbtrack notices the pdb prompt and displays the
-source file and line that the program is stopped at, much the same way
-as gud-mode does for debugging C programs with gdb."
- :type 'boolean
- :group 'python-mode)
-(make-variable-buffer-local 'py-pdbtrack-do-tracking-p)
-
-(defcustom py-pdbtrack-filename-mapping nil
- "Supports mapping file paths when opening file buffers in pdbtrack.
-When non-nil this is an alist mapping paths in the Python interpreter
-to paths in Emacs."
- :type 'alist
- :group 'python-mode)
-
-(defcustom py-pdbtrack-minor-mode-string " PDB"
- "*String to use in the minor mode list when pdbtrack is enabled."
- :type 'string
- :group 'python-mode)
-
-(defcustom py-import-check-point-max
- 20000
- "Maximum number of characters to search for a Java-ish import statement.
-When `python-mode' tries to calculate the shell to use (either a
-CPython or a Jython shell), it looks at the so-called `shebang' line
--- i.e. #! line. If that's not available, it looks at some of the
-file heading imports to see if they look Java-like."
- :type 'integer
- :group 'python-mode)
-
-(defcustom py-jython-packages
- '("java" "javax")
- "Imported packages that imply `jython-mode'."
- :type '(repeat string)
- :group 'python-mode)
-(make-obsolete-variable 'py-jpython-packages 'py-jython-packages nil)
-
-(defcustom py-current-defun-show t
- "If `py-current-defun' should jump to the definition, highlight it while waiting PY-WHICH-FUNC-DELAY seconds, before returning to previous position.
-
-Default is `t'."
-
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-current-defun-delay 2
- "When called interactively, `py-current-defun' should wait PY-WHICH-FUNC-DELAY seconds at the definition name found, before returning to previous position. "
-
- :type 'number
- :group 'python-mode)
-
-(defcustom py-send-receive-delay 5
- "Seconds to wait for output, used by `python-send-receive'. "
-
- :type 'number
- :group 'python-mode)
-
-(defvar py-exec-command nil
- "Mode commands will set this. ")
-(make-variable-buffer-local 'py-exec-command)
-
-(defvar py-exec-string-command nil
- "Mode commands will set this. ")
-(make-variable-buffer-local 'py-exec-string-command)
-
-(defvar py-which-bufname "Python")
-(make-variable-buffer-local 'py-which-bufname)
-
-(defcustom py-master-file nil
- "If non-nil, \\[py-execute-buffer] executes the named
-master file instead of the buffer's file. If the file name has a
-relative path, the value of variable `default-directory' for the
-buffer is prepended to come up with a file name.
-
-Beside you may set this variable in the file's local
-variable section, e.g.:
-
- # Local Variables:
- # py-master-file: \"master.py\"
- # End:
-
-"
- :type 'string
- :group 'python-mode)
-(make-variable-buffer-local 'py-master-file)
-
-(defvar py-pychecker-history nil)
-(defcustom py-pychecker-command "pychecker"
- "*Shell command used to run Pychecker."
- :type 'string
- :group 'python-mode
- :tag "Pychecker Command")
-
-(defcustom py-pychecker-command-args '("--stdlib")
- "*List of string arguments to be passed to pychecker."
- :type '(repeat string)
- :group 'python-mode
- :tag "Pychecker Command Args")
-
-(defvar py-pep8-history nil)
-(defcustom py-pep8-command "pep8"
- "*Shell command used to run pep8."
- :type 'string
- :group 'python-mode
- :tag "PEP 8 Command")
-
-(defcustom py-pep8-command-args '("")
- "*List of string arguments to be passed to pep8.
-
-Default is \"\" "
- :type '(repeat string)
- :group 'python-mode
- :tag "PEP 8 Command Args")
-
-(defvar py-pyflakespep8-history nil)
-(defcustom py-pyflakespep8-command (concat py-install-directory "pyflakespep8.py")
- "*Shell command used to run `pyflakespep8'."
- :type 'string
- :group 'python-mode
- :tag "Pyflakespep8 Command")
-
-(defcustom py-pyflakespep8-command-args '("")
- "*List of string arguments to be passed to pyflakespep8.
-
-Default is \"\" "
- :type '(repeat string)
- :group 'python-mode
- :tag "Pyflakes-pep8 Command Args")
-
-(defvar py-pyflakes-history nil)
-(defcustom py-pyflakes-command "pyflakes"
- "*Shell command used to run Pyflakes."
- :type 'string
- :group 'python-mode
- :tag "Pyflakes Command")
-
-(defcustom py-pyflakes-command-args '("")
- "*List of string arguments to be passed to pyflakes.
-
-Default is \"\" "
- :type '(repeat string)
- :group 'python-mode
- :tag "Pyflakes Command Args")
-
-(defcustom py-pep8-command-args '("")
- "*List of string arguments to be passed to pylint.
-
-Default is \"\" "
- :type '(repeat string)
- :group 'python-mode
- :tag "PEP 8 Command Args")
-
-(defvar py-pylint-history nil)
-(defcustom py-pylint-command "pylint"
- "*Shell command used to run Pylint."
- :type 'string
- :group 'python-mode
- :tag "Pylint Command")
-
-(defcustom py-pylint-command-args '("--errors-only")
- "*List of string arguments to be passed to pylint.
-
-Default is \"--errors-only\" "
- :type '(repeat string)
- :group 'python-mode
- :tag "Pylint Command Args")
-
-(defvar py-shell-alist
- '(("jython" . 'jython)
- ("python" . 'cpython))
- "*Alist of interpreters and python shells. Used by `py-choose-shell'
-to select the appropriate python interpreter mode for a file.")
-
-(defcustom py-shell-input-prompt-1-regexp "^>>> "
- "*A regular expression to match the input prompt of the shell."
- :type 'string
- :group 'python-mode)
-
-(defcustom py-shell-input-prompt-2-regexp "^[.][.][.] "
- "*A regular expression to match the input prompt of the shell after the
- first line of input."
- :type 'string
- :group 'python-mode)
-
-(defcustom py-shell-switch-buffers-on-execute-p t
- "When non-nil switch to the new Python shell. "
-
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-switch-buffers-on-execute-p nil
- "When non-nil switch to the Python output buffer. "
-
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-split-windows-on-execute-p t
- "When non-nil split windows. "
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-split-windows-on-execute-function 'split-window-vertically
- "How window should get splitted to display results of py-execute-... functions. "
- :type '(choice (const :tag "split-window-vertically" split-window-vertically)
- (const :tag "split-window-horizontally" split-window-horizontally)
- )
- :group 'python-mode)
-(make-variable-buffer-local 'py-split-windows-on-execute-function)
-
-(defcustom py-hide-show-keywords
- '("class" "def" "elif" "else" "except"
- "for" "if" "while" "finally" "try"
- "with")
- "Keywords composing visible heads.
-Also used by (minor-)outline-mode "
- :type '(repeat string)
- :group 'python-mode)
-
-(defcustom py-hide-show-hide-docstrings t
- "*Controls if doc strings can be hidden by hide-show"
- :type 'boolean
- :group 'python-mode)
-
-(defcustom python-mode-hook nil
- "Hook run when entering Python mode."
- :group 'python-mode
- :type 'hook)
-
-(custom-add-option 'python-mode-hook 'imenu-add-menubar-index)
-(custom-add-option 'python-mode-hook
- (lambda ()
- "Turn off Indent Tabs mode."
- (setq indent-tabs-mode nil)))
-(custom-add-option 'python-mode-hook 'turn-on-eldoc-mode)
-(custom-add-option 'python-mode-hook 'abbrev-mode)
-(custom-add-option 'python-mode-hook 'python-setup-brm)
-
-(defcustom py-imenu-create-index-p nil
- "Non-nil means Python mode creates and displays an index menu of functions and global variables. "
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-shell-name "python"
- "A PATH/TO/EXECUTABLE or default value `py-shell' may look for, if no shell is specified by command. "
- :type 'string
- :group 'python-mode)
-(make-variable-buffer-local 'py-shell-name)
-
-(defcustom py-shell-toggle-1 py-shell-name
- "A PATH/TO/EXECUTABLE or default value used by `py-toggle-shell'. "
- :type 'string
- :group 'python-mode)
-(make-variable-buffer-local 'py-shell-toggle-1)
-
-(defcustom py-shell-toggle-2 "python3"
- "A PATH/TO/EXECUTABLE or default value used by `py-toggle-shell'. "
- :type 'string
- :group 'python-mode)
-(make-variable-buffer-local 'py-shell-toggle-2)
-
-(defcustom py-source-modes '(python-mode jython-mode)
- "Used to determine if a buffer contains Python source code.
-
-If a file is loaded into a buffer that is in one of these major modes, it is considered Python source by `py-load-file', which uses the
-value to determine defaults."
- :type '(repeat function)
- :group 'python-mode)
-
-(defcustom py-shell-prompt-alist
- '(("ipython" . "^In \\[[0-9]+\\]: *")
- (t . "^>>> "))
- "Alist of Python input prompts.
-Each element has the form (PROGRAM . REGEXP), where PROGRAM is
-the value of `py-shell-name' for the python process and
-REGEXP is a regular expression matching the Python prompt.
-PROGRAM can also be t, which specifies the default when no other
-element matches `py-shell-name'."
- :type 'string
- :group 'python-mode)
-
-(defcustom py-shell-continuation-prompt-alist
- '(("ipython" . "^ [.][.][.]+: *")
- (t . "^[.][.][.] "))
- "Alist of Python continued-line prompts.
-Each element has the form (PROGRAM . REGEXP), where PROGRAM is
-the value of `py-shell-name' for the python process and
-REGEXP is a regular expression matching the Python prompt for
-continued lines.
-PROGRAM can also be t, which specifies the default when no other
-element matches `py-shell-name'."
- :type 'string
- :group 'python-mode)
-
-;; ipython.el
-(defvar ipython-de-input-prompt-regexp "\\(?:
-In \\[[0-9]+\\]: *.*
-----+> \\(.*
-\\)[\n]?\\)\\|\\(?:
-In \\[[0-9]+\\]: *\\(.*
-\\)\\)\\|^[ ]\\{3\\}[.]\\{3,\\}: *\\(.*
-\\)"
- "A regular expression to match the IPython input prompt and the python
-command after it. The first match group is for a command that is rewritten,
-the second for a 'normal' command, and the third for a multiline command.")
-
-(defvar ipython-de-output-prompt-regexp "^Out\\[[0-9]+\\]: "
- "A regular expression to match the output prompt of IPython.")
-
-(defcustom py-match-paren-mode nil
- "*Non-nil means, cursor will jump to beginning or end of a block.
-This vice versa, to beginning first.
-Sets `py-match-paren-key' in python-mode-map.
-Customize `py-match-paren-key' which key to use. "
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-match-paren-key "%"
- "*String used by \\[comment-region] to comment out a block of code.
-This should follow the convention for non-indenting comment lines so
-that the indentation commands won't get confused (i.e., the string
-should be of the form `#x...' where `x' is not a blank or a tab, and
-`...' is arbitrary). However, this string should not end in whitespace."
- :type 'string
- :group 'python-mode)
-
-(defcustom py-kill-empty-line t
- "*If t, py-indent-forward-line kills empty lines. "
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-remove-cwd-from-path t
- "Whether to allow loading of Python modules from the current directory.
-If this is non-nil, Emacs removes '' from sys.path when starting
-an inferior Python process. This is the default, for security
-reasons, as it is easy for the Python process to be started
-without the user's realization (e.g. to perform completion)."
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-imenu-show-method-args-p nil
- "*Controls echoing of arguments of functions & methods in the Imenu buffer.
-When non-nil, arguments are printed."
- :type 'boolean
- :group 'python-mode)
-
-(defcustom python-default-interpreter 'cpython
- "*Which Python interpreter is used by default.
-The value for this variable can be either `cpython' or `jpython'.
-
-When the value is `cpython', the variables `python-python-command' and
-`python-python-command-args' are consulted to determine the interpreter
-and arguments to use.
-
-When the value is `jpython', the variables `python-jpython-command' and
-`python-jpython-command-args' are consulted to determine the interpreter
-and arguments to use.
-
-Note that this variable is consulted only the first time that a Python
-mode buffer is visited during an Emacs session. After that, use
-\\[py-toggle-shell] to change the interpreter shell."
- :type '(choice (const :tag "Python (a.k.a. CPython)" cpython)
- (const :tag "JPython" jpython))
- :group 'python-mode)
-
-(defcustom python-python-command-args '("-i")
- "*List of string arguments to be used when starting a Python shell."
- :type '(repeat string)
- :group 'python-mode)
-
-(defcustom python-jython-command-args '("-i")
- "*List of string arguments to be used when starting a Jython shell."
- :type '(repeat string)
- :group 'python-mode
- :tag "JPython Command Args")
-
-(defcustom python-pdbtrack-do-tracking-p t
- "*Controls whether the pdbtrack feature is enabled or not.
-
-When non-nil, pdbtrack is enabled in all comint-based buffers,
-e.g. shell interaction buffers and the *Python* buffer.
-
-When using pdb to debug a Python program, pdbtrack notices the
-pdb prompt and presents the line in the source file where the
-program is stopped in a pop-up buffer. It's similar to what
-gud-mode does for debugging C programs with gdb, but without
-having to restart the program."
- :type 'boolean
- :group 'python-mode)
-(make-variable-buffer-local 'python-pdbtrack-do-tracking-p)
-
-(defcustom python-pdbtrack-minor-mode-string " PDB"
- "*Minor-mode sign to be displayed when pdbtrack is active."
- :type 'string
- :group 'python-mode)
-
-(defcustom python-shell-prompt-alist
- '(("ipython" . "^In \\[[0-9]+\\]: *")
- (t . "^>>> "))
- "Alist of Python input prompts.
-Each element has the form (PROGRAM . REGEXP), where PROGRAM is
-the value of `python-python-command' for the python process and
-REGEXP is a regular expression matching the Python prompt.
-PROGRAM can also be t, which specifies the default when no other
-element matches `python-python-command'."
- :type 'string
- :group 'python-mode)
-
-(defcustom python-shell-continuation-prompt-alist
- '(("ipython" . "^ [.][.][.]+: *")
- (t . "^[.][.][.] "))
- "Alist of Python continued-line prompts.
-Each element has the form (PROGRAM . REGEXP), where PROGRAM is
-the value of `python-python-command' for the python process and
-REGEXP is a regular expression matching the Python prompt for
-continued lines.
-PROGRAM can also be t, which specifies the default when no other
-element matches `python-python-command'."
- :type 'string
- :group 'python-mode)
-
-(defcustom python-python-command "python"
- "Shell command to run Python interpreter.
-Any arguments can't contain whitespace."
- :group 'python-mode
- :type 'string)
-
-(defcustom python-jython-command "jython"
- "Shell command to run Jython interpreter.
-Any arguments can't contain whitespace."
- :group 'python-mode
- :type 'string)
-
-(defcustom py-history-filter-regexp "\\`\\s-*\\S-?\\S-?\\s-*\\'"
- "Input matching this regexp is not saved on the history list.
-Default ignores all inputs of 0, 1, or 2 non-blank characters."
- :type 'regexp
- :group 'python-mode)
-
-(defcustom python-remove-cwd-from-path t
- "Whether to allow loading of Python modules from the current directory.
-If this is non-nil, Emacs removes '' from sys.path when starting
-an inferior Python process. This is the default, for security
-reasons, as it is easy for the Python process to be started
-without the user's realization (e.g. to perform completion)."
- :type 'boolean
- :group 'python-mode
- :version "23.3")
-
-(defcustom python-source-modes '(python-mode jython-mode)
- "Used to determine if a buffer contains Python source code.
-
-If a file is loaded into a buffer that is in one of these major modes, it is considered Python source by `py-load-file', which uses the
-value to determine defaults."
- :type '(repeat function)
- :group 'python-mode)
-
-(defcustom python-jython-packages '("java" "javax" "org" "com")
- "Packages implying `jython-mode'.
-If these are imported near the beginning of the buffer, `python-mode'
-actually punts to `jython-mode'."
- :type '(repeat string)
- :group 'python-mode)
-
-(defface py-number-face
- '((t (:inherit default)))
- ;; '((t (:inherit 'font-lock-variable-name-face)))
- "Highlight numbers. "
- :group 'python-mode)
-(defvar py-number-face 'py-number-face)
-
-(defface py-XXX-tag-face
- '((t (:inherit font-lock-string-face)))
- "XXX\\|TODO\\|FIXME "
- :group 'python-mode)
-(defvar py-XXX-tag-face 'py-XXX-tag-face)
-
-;; ;; Face for None, True, False, self, and Ellipsis
-(defface py-pseudo-keyword-face
- '((t (:inherit font-lock-keyword-face)))
- "Face for pseudo keywords in Python mode, like self, True, False, Ellipsis."
- :group 'python-mode)
-(defvar py-pseudo-keyword-face 'py-pseudo-keyword-face)
-
-(defface py-variable-name-face
- '((t (:inherit default)))
- ;; '((t (:inherit 'font-lock-variable-name-face)))
- "Face method decorators."
- :group 'python-mode)
-(defvar py-variable-name-face 'py-variable-name-face)
-
-;; PEP 318 decorators
-(defface py-decorators-face
- '((t (:inherit font-lock-keyword-face)))
- "Face method decorators."
- :group 'python-mode)
-(defvar py-decorators-face 'py-decorators-face)
-
-;; Face for builtins
-(defface py-builtins-face
- '((t (:inherit font-lock-builtin-face)))
- "Face for builtins like TypeError, object, open, and exec."
- :group 'python-mode)
-(defvar py-builtins-face 'py-builtins-face)
-
-(defface py-class-name-face
- '((t (:inherit font-lock-type-face)))
- "Face for classes."
- :group 'python-mode)
-(defvar py-class-name-face 'py-class-name-face)
-
-;; XXX, TODO, and FIXME comments and such
-(defface py-exception-name-face
- '((t (:inherit font-lock-builtin-face)))
- "."
- :group 'python-mode)
-(defvar py-exception-name-face 'py-exception-name-face)
-
-(defcustom py-use-local-default nil
- "If `t', py-shell will use `py-shell-local-path' instead
- of default Python.
-
-Making switch between several virtualenv's easier,
- `python-mode' should deliver an installer, so named-shells pointing to virtualenv's will be available. "
- :type 'boolean
- :group 'python-mode)
-
-;; (defcustom python-load-extended-executes-p t
-;; "If commands from `python-extended-executes.el' should be loaded.
-;;
-;; Default is `t'.
-;; Provides commands executing buffers code at different conditions, thus avoids customization of `py-shell-name', `py-switch-buffers-on-execute-p'. "
-;;
-;; :type 'boolean
-;; :group 'python-mode)
-
-(defcustom py-shell-local-path ""
- "If `py-use-local-default' is non-nil, `py-shell' will use EXECUTABLE indicated here incl. path. "
-
- :type 'string
- :group 'python-mode)
-
-;;; highlight-indentation.el --- Function for highlighting indentation
-;; Original Author: Anton Johansson - http://antonj.se
-;; Created: Dec 15 23:42:04 2010
-;; URL: https://github.com/antonj/Highlight-Indentation-for-Emacs
-
-(defcustom highlight-indentation nil
- "If level of indentation should be displayed at start.
-Toggle buffer local status via `M-x highlight-indentation' during session. "
-
- :type 'boolean
- :group 'python-mode)
-(make-variable-buffer-local 'highlight-indentation)
-
-(defvar highlight-indent-active nil)
-(make-variable-buffer-local 'highlight-indent-active)
-
-(defface highlight-indent-face
- '((((class color) (background dark))
- (:background "grey33"))
- (((class color) (background light))
- (:background "grey")))
- "Basic face for highlighting indentation guides.")
-
-(defvar highlight-indent-offset 4)
-(setq-default highlight-indent-offset 4)
-
-(defvar ruby-indent-level 2)
-(defvar nxml-child-indent 2)
-
-(defun highlight-indentation-on ()
- "Make sure `highlight-indentation' is on. "
- (interactive)
- (set (make-local-variable 'highlight-indent-active) nil)
- (highlight-indentation)
- (when (called-interactively-p 'any)
- (message "highlight-indentation ON")))
-
-(defun highlight-indentation-off ()
- "Make sure `highlight-indentation' is off. "
- (interactive)
- (set (make-local-variable 'highlight-indent-active) t)
- (highlight-indentation)
- (when (called-interactively-p 'any)
- (message "highlight-indentation OFF")))
-
-(defun highlight-indentation (&optional indent-width)
- "Toggle highlight indentation.
-Optional argument INDENT-WIDTH specifies which indentation
-level (spaces only) should be highlighted, if omitted
-indent-width will be guessed from current major-mode"
- (interactive "P")
- (let ((re (format "\\( \\) \\{%s\\}" (- highlight-indent-offset 1))))
- (if (not highlight-indent-active)
- (progn ;; Toggle on
- (set (make-local-variable 'highlight-indent-offset)
- (if indent-width
- indent-width
- ;; Set indentation offset according to major mode
- (cond ((eq major-mode 'python-mode)
- (if (boundp 'python-indent)
- python-indent
- py-indent-offset))
- ((eq major-mode 'ruby-mode)
- ruby-indent-level)
- ((eq major-mode 'nxml-mode)
- nxml-child-indent)
- ((local-variable-p 'c-basic-offset)
- c-basic-offset)
- (t
- (default-value 'highlight-indent-offset)))))
- (set (make-local-variable 'highlight-indent-active) t)
- (if (featurep 'xemacs)
- (font-lock-add-keywords nil `((,re (1 'paren-face-match))))
- (font-lock-add-keywords nil `((,re (1 'highlight-indent-face)))))
- (message (format "highlight-indentation with indent-width %s"
- highlight-indent-offset)))
- ;; Toggle off
- (set (make-local-variable 'highlight-indent-active) nil)
- (if (featurep 'xemacs)
- (font-lock-remove-keywords nil `((,re (1 'paren-face-match))))
- (font-lock-remove-keywords nil `((,re (1 'highlight-indent-face)))))
- (message "highlight-indentation OFF"))
- (font-lock-fontify-buffer)))
-
-(defcustom py-underscore-word-syntax-p t
- "If underscore chars should be of syntax-class `word', not of `symbol'.
-
-Underscores in word-class makes `forward-word' etc. travel the indentifiers. Default is `t'.
-
-See bug report at launchpad, lp:940812 "
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-edit-only-p nil
- "When `t' `python-mode' will not take resort nor check for installed Python executables. Default is nil.
-
-See bug report at launchpad, lp:944093. "
- :type 'boolean
- :group 'python-mode)
-
-(defvar py-force-local-shell-p nil
- "Used internally, see `toggle-force-local-shell'. ")
-
-(defcustom py-force-py-shell-name-p nil
- "When `t', execution with kind of Python specified in `py-shell-name' is enforced, possibly shebang doesn't take precedence. "
-
- :type 'boolean
- :group 'python-mode)
-
-(defvar python-mode-v5-behavior nil)
-(defcustom python-mode-v5-behavior-p nil
- "Execute region through `shell-command-on-region' as
-v5 did it - lp:990079. This might fail with certain chars - see UnicodeEncodeError lp:550661"
-
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-warn-tmp-files-left-p nil
- "Messages a warning, when `py-temp-directory' contains files susceptible being left by previous Python-mode sessions. See also lp:987534 "
- :type 'boolean
- :group 'python-mode)
-
-(defcustom py-ipython-execute-delay 0.3
- "Delay needed by execute functions when no IPython shell is running. "
- :type 'float
- :group 'python-mode)
-
-;;; Derived Python's flying circus support for Emacs
-;; Employed for completion in Python3 shells
-;; Copyright (C) 2010, 2011 Free Software Foundation, Inc.
-
-;; Original author: Fabián E. Gallina
-;; URL: https://github.com/fgallina/python.el
-
-(defcustom python-shell-buffer-name "Python"
- "Default buffer name for Python interpreter."
- :type 'string
- :group 'python-mode
- :safe 'stringp)
-
-(defcustom python-shell-interpreter "python"
- "Default Python interpreter for shell."
- :type 'string
- :group 'python-mode
- :safe 'stringp)
-
-(defcustom python-shell-internal-buffer-name "Python Internal"
- "Default buffer name for the Internal Python interpreter."
- :type 'string
- :group 'python-mode
- :safe 'stringp)
-
-(defcustom python-shell-interpreter-args "-i"
- "Default arguments for the Python interpreter."
- :type 'string
- :group 'python-mode
- :safe 'stringp)
-
-(defcustom python-shell-prompt-regexp ">>> "
- "Regular Expression matching top\-level input prompt of python shell.
-It should not contain a caret (^) at the beginning."
- :type 'string
- :group 'python-mode
- :safe 'stringp)
-
-(defcustom python-shell-prompt-block-regexp "[.][.][.] "
- "Regular Expression matching block input prompt of python shell.
-It should not contain a caret (^) at the beginning."
- :type 'string
- :group 'python-mode
- :safe 'stringp)
-
-(defcustom python-shell-prompt-output-regexp ""
- "Regular Expression matching output prompt of python shell.
-It should not contain a caret (^) at the beginning."
- :type 'string
- :group 'python-mode
- :safe 'stringp)
-
-(defcustom python-shell-prompt-pdb-regexp "[(<]*[Ii]?[Pp]db[>)]+ "
- "Regular Expression matching pdb input prompt of python shell.
-It should not contain a caret (^) at the beginning."
- :type 'string
- :group 'python-mode
- :safe 'stringp)
-
-(defcustom python-shell-send-setup-max-wait 5
- "Seconds to wait for process output before code setup.
-If output is received before the especified time then control is
-returned in that moment and not after waiting."
- :type 'integer
- :group 'python-mode
- :safe 'integerp)
-
-(defcustom python-shell-process-environment nil
- "List of environment variables for Python shell.
-This variable follows the same rules as `process-environment'
-since it merges with it before the process creation routines are
-called. When this variable is nil, the Python shell is run with
-the default `process-environment'."
- :type '(repeat string)
- :group 'python-mode
- :safe 'listp)
-
-(defcustom python-shell-extra-pythonpaths nil
- "List of extra pythonpaths for Python shell.
-The values of this variable are added to the existing value of
-PYTHONPATH in the `process-environment' variable."
- :type '(repeat string)
- :group 'python-mode
- :safe 'listp)
-
-(defcustom python-shell-exec-path nil
- "List of path to search for binaries.
-This variable follows the same rules as `exec-path' since it
-merges with it before the process creation routines are called.
-When this variable is nil, the Python shell is run with the
-default `exec-path'."
- :type '(repeat string)
- :group 'python-mode
- :safe 'listp)
-
-(defcustom python-shell-virtualenv-path nil
- "Path to virtualenv root.
-This variable, when set to a string, makes the values stored in
-`python-shell-process-environment' and `python-shell-exec-path'
-to be modified properly so shells are started with the specified
-virtualenv."
- :type 'string
- :group 'python-mode
- :safe 'stringp)
-
-(defcustom python-ffap-setup-code
- "def __FFAP_get_module_path(module):
- try:
- import os
- path = __import__(module).__file__
- if path[-4:] == '.pyc' and os.path.exists(path[0:-1]):
- path = path[:-1]
- return path
- except:
- return ''"
- "Python code to get a module path."
- :type 'string
- :group 'python-mode
- :safe 'stringp)
-
-(defcustom python-ffap-string-code
- "__FFAP_get_module_path('''%s''')\n"
- "Python code used to get a string with the path of a module."
- :type 'string
- :group 'python-mode
- :safe 'stringp)
-
-(defvar python--prompt-regexp nil)
-
-(defvar python-command python-python-command
- "Actual command used to run Python.
-May be `python-python-command' or `python-jython-command', possibly
-modified by the user. Additional arguments are added when the command
-is used by `run-python' et al.")
-
-(defvar python-buffer nil
- "*The current Python process buffer.
-
-Commands that send text from source buffers to Python processes have
-to choose a process to send to. This is determined by buffer-local
-value of `python-buffer'. If its value in the current buffer,
-i.e. both any local value and the default one, is nil, `run-python'
-and commands that send to the Python process will start a new process.
-
-Whenever \\[run-python] starts a new process, it resets the default
-value of `python-buffer' to be the new process's buffer and sets the
-buffer-local value similarly if the current buffer is in Python mode
-or Inferior Python mode, so that source buffer stays associated with a
-specific sub-process. ")
-(make-variable-buffer-local 'python-buffer)
-
-(defun python-ffap-module-path (module)
- "Function for `ffap-alist' to return path for MODULE."
- (let ((process (or
- (and (eq major-mode 'inferior-python-mode)
- (get-buffer-process (current-buffer)))
- (python-shell-get-process))))
- (if (not process)
- nil
- (let ((module-file
- (python-shell-send-string-no-output
- (format python-ffap-string-code module) process)))
- (when module-file
- (substring-no-properties module-file 1 -1))))))
-
-(eval-after-load "ffap"
- '(progn
- (push '(python-mode . python-ffap-module-path) ffap-alist)
- (push '(inferior-python-mode . python-ffap-module-path) ffap-alist)))
-
-(defcustom python-shell-setup-codes '(python-shell-completion-setup-code
- python-ffap-setup-code
- python-eldoc-setup-code)
- "List of code run by `py-shell-send-setup-codes'."
- :type '(repeat symbol)
- :group 'python-mode
- :safe 'listp)
-
-(defcustom python-shell-compilation-regexp-alist
- `((,(rx line-start (1+ (any " \t")) "File \""
- (group (1+ (not (any "\"<")))) ; avoid `' &c
- "\", line " (group (1+ digit)))
- 1 2)
- (,(rx " in file " (group (1+ not-newline)) " on line "
- (group (1+ digit)))
- 1 2)
- (,(rx line-start "> " (group (1+ (not (any "(\"<"))))
- "(" (group (1+ digit)) ")" (1+ (not (any "("))) "()")
- 1 2))
- "`compilation-error-regexp-alist' for inferior Python."
- :type '(alist string)
- :group 'python-mode)
-
-(defvar python-mode-syntax-table nil
- "Syntax table for Python files.")
-
-(setq python-mode-syntax-table
- (let ((table (make-syntax-table)))
- ;; Give punctuation syntax to ASCII that normally has symbol
- ;; syntax or has word syntax and isn't a letter.
- (let ((symbol (string-to-syntax "_"))
- (sst (standard-syntax-table)))
- (dotimes (i 128)
- (unless (= i ?_)
- (if (equal symbol (aref sst i))
- (modify-syntax-entry i "." table)))))
- (modify-syntax-entry ?$ "." table)
- (modify-syntax-entry ?% "." table)
- ;; exceptions
- (modify-syntax-entry ?# "<" table)
- (modify-syntax-entry ?\n ">" table)
- (modify-syntax-entry ?' "\"" table)
- (modify-syntax-entry ?` "$" table)
- (when py-underscore-word-syntax-p
- (modify-syntax-entry ?_ "w" table))
- table))
-
-(defconst python-dotty-syntax-table
- (let ((table (make-syntax-table)))
- (set-char-table-parent table python-mode-syntax-table)
- (modify-syntax-entry ?. "_" table)
- table)
- "Syntax table giving `.' symbol syntax.
-Otherwise inherits from `python-mode-syntax-table'.")
-(defvar outline-heading-end-regexp)
-(defvar eldoc-documentation-function)
-
-;; Stolen from org-mode
-(defun python-util-clone-local-variables (from-buffer &optional regexp)
- "Clone local variables from FROM-BUFFER.
-Optional argument REGEXP selects variables to clone and defaults
-to \"^python-\"."
- (mapc
- (lambda (pair)
- (and (symbolp (car pair))
- (string-match (or regexp "^python-")
- (symbol-name (car pair)))
- (set (make-local-variable (car pair))
- (cdr pair))))
- (buffer-local-variables from-buffer)))
-
-(defun py-send-shell-setup-code ()
- "Send all setup code for shell.
-This function takes the list of setup code to send from the
-`python-shell-setup-codes' list."
- (let ((process (get-buffer-process (current-buffer))))
- ;; (accept-process-output process python-shell-send-setup-max-wait)
- (accept-process-output process 1)
- (dolist (code python-shell-setup-codes)
- (when code
- (py-send-string (symbol-value code) process)))))
-
-(defun python-shell-get-process-name (dedicated)
- "Calculate the appropiate process name for inferior Python process.
-If DEDICATED is t and the variable `buffer-file-name' is non-nil
-returns a string with the form
-`python-shell-buffer-name'[variable `buffer-file-name'] else
-returns the value of `python-shell-buffer-name'. After
-calculating the process name adds the buffer name for the process
-in the `same-window-buffer-names' list."
- (let ((process-name
- (if (and dedicated
- buffer-file-name)
- (format "%s[%s]" python-shell-buffer-name buffer-file-name)
- (format "%s" python-shell-buffer-name))))
- (add-to-list 'same-window-buffer-names (purecopy
- (format "*%s*" process-name)))
- process-name))
-
-(defun python-shell-internal-get-process-name ()
- "Calculate the appropiate process name for Internal Python process.
-The name is calculated from `python-shell-global-buffer-name' and
-a hash of all relevant global shell settings in order to ensure
-uniqueness for different types of configurations."
- (format "%s [%s]"
- python-shell-internal-buffer-name
- (md5
- (concat
- (python-shell-parse-command)
- python-shell-prompt-regexp
- python-shell-prompt-block-regexp
- python-shell-prompt-output-regexp
- (mapconcat #'symbol-value python-shell-setup-codes "")
- (mapconcat #'identity python-shell-process-environment "")
- (mapconcat #'identity python-shell-extra-pythonpaths "")
- (mapconcat #'identity python-shell-exec-path "")
- (or python-shell-virtualenv-path "")
- (mapconcat #'identity python-shell-exec-path "")))))
-
-(defun python-shell-parse-command ()
- "Calculate the string used to execute the inferior Python process."
- (format "%s %s" python-shell-interpreter python-shell-interpreter-args))
-
-(defun python-shell-calculate-process-environment ()
- "Calculate process environment given `python-shell-virtualenv-path'."
- (let ((process-environment (append
- python-shell-process-environment
- process-environment nil))
- (virtualenv (if python-shell-virtualenv-path
- (directory-file-name python-shell-virtualenv-path)
- nil)))
- (when python-shell-extra-pythonpaths
- (setenv "PYTHONPATH"
- (format "%s%s%s"
- (mapconcat 'identity
- python-shell-extra-pythonpaths
- path-separator)
- path-separator
- (or (getenv "PYTHONPATH") ""))))
- (if (not virtualenv)
- process-environment
- (setenv "PYTHONHOME" nil)
- (setenv "PATH" (format "%s/bin%s%s"
- virtualenv path-separator
- (or (getenv "PATH") "")))
- (setenv "VIRTUAL_ENV" virtualenv))
- process-environment))
-
-(defun python-shell-calculate-exec-path ()
- "Calculate exec path given `python-shell-virtualenv-path'."
- (let ((path (append python-shell-exec-path
- exec-path nil)))
- (if (not python-shell-virtualenv-path)
- path
- (cons (format "%s/bin"
- (directory-file-name python-shell-virtualenv-path))
- path))))
-
-(defcustom python-shell-send-setup-max-wait 5
- "Seconds to wait for process output before code setup.
-If output is received before the especified time then control is
-returned in that moment and not after waiting."
- :type 'integer
- :group 'python-mode
- :safe 'integerp)
-
-(defun python-shell-make-comint (cmd proc-name &optional pop)
- "Create a python shell comint buffer.
-CMD is the python command to be executed and PROC-NAME is the
-process name the comint buffer will get. After the comint buffer
-is created the `inferior-python-mode' is activated. If POP is
-non-nil the buffer is shown."
- (save-excursion
- (let* ((proc-buffer-name (format "*%s*" proc-name))
- (process-environment (python-shell-calculate-process-environment))
- (exec-path (python-shell-calculate-exec-path)))
- (when (not (comint-check-proc proc-buffer-name))
- (let* ((cmdlist (split-string-and-unquote cmd))
- (buffer (apply 'make-comint proc-name (car cmdlist) nil
- (cdr cmdlist)))
- (current-buffer (current-buffer)))
- (with-current-buffer buffer
- (inferior-python-mode)
- (python-util-clone-local-variables current-buffer))))
- (when pop
- (pop-to-buffer proc-buffer-name))
- proc-buffer-name)))
-
-(defcustom python-shell-completion-setup-code
- "try:
- import readline
-except ImportError:
- def __COMPLETER_all_completions(text): []
-else:
- import rlcompleter
- readline.set_completer(rlcompleter.Completer().complete)
- def __COMPLETER_all_completions(text):
- import sys
- completions = []
- try:
- i = 0
- while True:
- res = readline.get_completer()(text, i)
- if not res: break
- i += 1
- completions.append(res)
- except NameError:
- pass
- return completions"
- "Code used to setup completion in inferior Python processes."
- :type 'string
- :group 'python-mode
- :safe 'stringp)
-
-(defcustom python-shell-completion-string-code
- "';'.join(__COMPLETER_all_completions('''%s'''))\n"
- "Python code used to get a string of completions separated by semicolons."
- :type 'string
- :group 'python-mode
- :safe 'stringp)
-
-(defcustom python-shell-module-completion-string-code ""
- "Python code used to get completions separated by semicolons for imports.
-
-For IPython v0.11, add the following line to
-`python-shell-completion-setup-code':
-
-from IPython.core.completerlib import module_completion
-
-and use the following as the value of this variable:
-
-';'.join(module_completion('''%s'''))\n"
- :type 'string
- :group 'python-mode
- :safe 'stringp)
-
-(defvar python-completion-original-window-configuration nil)
-
-(defun run-python-internal ()
- "Run an inferior Internal Python process.
-Input and output via buffer named after
-`python-shell-internal-buffer-name' and what
-`python-shell-internal-get-process-name' returns. This new kind
-of shell is intended to be used for generic communication related
-to defined configurations. The main difference with global or
-dedicated shells is that these ones are attached to a
-configuration, not a buffer. This means that can be used for
-example to retrieve the sys.path and other stuff, without messing
-with user shells. Runs the hook
-`inferior-python-mode-hook' (after the `comint-mode-hook' is
-run). \(Type \\[describe-mode] in the process buffer for a list
-of commands.)"
- (interactive)
- (set-process-query-on-exit-flag
- (get-buffer-process
- (python-shell-make-comint
- (python-shell-parse-command)
- (python-shell-internal-get-process-name))) nil))
-
-(defun python-shell-get-process ()
- "Get inferior Python process for current buffer and return it."
- (let* ((dedicated-proc-name (python-shell-get-process-name t))
- (dedicated-proc-buffer-name (format "*%s*" dedicated-proc-name))
- (global-proc-name (python-shell-get-process-name nil))
- (global-proc-buffer-name (format "*%s*" global-proc-name))
- (dedicated-running (comint-check-proc dedicated-proc-buffer-name))
- (global-running (comint-check-proc global-proc-buffer-name)))
- ;; Always prefer dedicated
- (get-buffer-process (or (and dedicated-running dedicated-proc-buffer-name)
- (and global-running global-proc-buffer-name)))))
-
-(defun python-shell-get-or-create-process ()
- "Get or create an inferior Python process for current buffer and return it."
- (let* ((old-buffer (current-buffer))
- (dedicated-proc-name (python-shell-get-process-name t))
- (dedicated-proc-buffer-name (format "*%s*" dedicated-proc-name))
- (global-proc-name (python-shell-get-process-name nil))
- (global-proc-buffer-name (format "*%s*" global-proc-name))
- (dedicated-running (comint-check-proc dedicated-proc-buffer-name))
- (global-running (comint-check-proc global-proc-buffer-name))
- (current-prefix-arg 4))
- (when (and (not dedicated-running) (not global-running))
- (if (call-interactively 'run-python)
- (setq dedicated-running t)
- (setq global-running t)))
- ;; Always prefer dedicated
- (switch-to-buffer old-buffer)
- (get-buffer-process (if dedicated-running
- dedicated-proc-buffer-name
- global-proc-buffer-name))))
-
-(defun python-shell-internal-get-or-create-process ()
- "Get or create an inferior Internal Python process."
- (let* ((proc-name (python-shell-internal-get-process-name))
- (proc-buffer-name (format "*%s*" proc-name)))
- (run-python-internal)
- (get-buffer-process proc-buffer-name)))
-
-(defun python-shell-send-string (string &optional process msg)
- "Send STRING to inferior Python PROCESS.
-When `py-verbose-p' and MSG is non-nil messages the first line of STRING."
- (interactive "sPython command: ")
- (let* ((process (or process (python-shell-get-or-create-process)))
- (lines (split-string string "\n" t))
- ;; (temp-file-name (make-temp-file "py"))
- (temp-file-name (concat (py-normalize-directory py-temp-directory) "psss-temp.py"))
- (file-name (or (buffer-file-name) temp-file-name)))
- ;; (when (and py-verbose-p msg)
- ;; (message (format "Sent: %s..." (nth 0 lines)))
- ;; )
- (if (> (length lines) 1)
- (progn
- (with-temp-file temp-file-name
- (insert string)
- (delete-trailing-whitespace))
- (python-shell-send-file file-name process temp-file-name))
- (comint-send-string process string)
- (when (or (not (string-match "\n$" string))
- (string-match "\n[ \t].*\n?$" string))
- (comint-send-string process "\n")))
- ;; (when (file-readable-p temp-file-name) (delete-file temp-file-name))
- )
- )
-
-(defun python-shell-send-string-no-output (string &optional process msg)
- "Send STRING to PROCESS and inhibit output.
-When MSG is non-nil messages the first line of STRING. Return
-the output."
- (let* ((output-buffer)
- (process (or process (python-shell-get-or-create-process)))
- (comint-preoutput-filter-functions
- (append comint-preoutput-filter-functions
- '(ansi-color-filter-apply
- (lambda (string)
- (setq output-buffer (concat output-buffer string))
- "")))))
- (python-shell-send-string string process msg)
- (accept-process-output process 1)
- (when output-buffer
- (replace-regexp-in-string
- (if (> (length python-shell-prompt-output-regexp) 0)
- (format "\n*%s$\\|^%s\\|\n$"
- python-shell-prompt-regexp
- (or python-shell-prompt-output-regexp ""))
- (format "\n*$\\|^%s\\|\n$"
- python-shell-prompt-regexp))
- "" output-buffer))))
-
-(defun python-shell-internal-send-string (string)
- "Send STRING to the Internal Python interpreter.
-Returns the output. See `python-shell-send-string-no-output'."
- (python-shell-send-string-no-output
- ;; Makes this function compatible with the old
- ;; python-send-receive. (At least for CEDET).
- (replace-regexp-in-string "_emacs_out +" "" string)
- (python-shell-internal-get-or-create-process) nil))
-
-(defun python-shell-send-region (start end)
- "Send the region delimited by START and END to inferior Python process."
- (interactive "r")
- (let ((deactivate-mark nil))
- (python-shell-send-string (buffer-substring start end) nil t)))
-
-(defun python-shell-send-buffer ()
- "Send the entire buffer to inferior Python process."
- (interactive)
- (save-restriction
- (widen)
- (python-shell-send-region (point-min) (point-max))))
-
-(defun python-shell-send-defun (arg)
- "Send the current defun to inferior Python process.
-When argument ARG is non-nil sends the innermost defun."
- (interactive "P")
- (save-excursion
- (python-shell-send-region
- (progn
- (or (python-beginning-of-defun-function)
- (progn (beginning-of-line) (point-marker))))
- (progn
- (or (python-end-of-defun-function)
- (progn (end-of-line) (point-marker)))))))
-
-(defun python-shell-send-file (file-name &optional process temp-file-name)
- "Send FILE-NAME to inferior Python PROCESS.
-If TEMP-FILE-NAME is passed then that file is used for processing
-instead, while internally the shell will continue to use
-FILE-NAME."
- (interactive "fFile to send: ")
- (let* ((process (or process (python-shell-get-or-create-process)))
- (temp-file-name (when temp-file-name
- (expand-file-name temp-file-name)))
- (file-name (or (expand-file-name file-name) temp-file-name))
- py-python-command-args)
- (when (not file-name)
- (error "If FILE-NAME is nil then TEMP-FILE-NAME must be non-nil"))
- (python-shell-send-string
- (format
- (concat "__pyfile = open('''%s''');"
- "exec(compile(__pyfile.read(), '''%s''', 'exec'));"
- "__pyfile.close()")
- (or temp-file-name file-name) file-name)
- process)))
-
-(defun python-shell-switch-to-shell ()
- "Switch to inferior Python process buffer."
- (interactive)
- (pop-to-buffer (process-buffer (python-shell-get-or-create-process)) t))
-
-(defcustom python-pdbtrack-stacktrace-info-regexp
- "^> \\([^\"(<]+\\)(\\([0-9]+\\))\\([?a-zA-Z0-9_<>]+\\)()"
- "Regular Expression matching stacktrace information.
-Used to extract the current line and module being inspected."
- :type 'string
- :group 'python-mode
- :safe 'stringp)
-
-;;; Eldoc
-
-(defcustom python-eldoc-setup-code
- "def __PYDOC_get_help(obj):
- try:
- import inspect
- if hasattr(obj, 'startswith'):
- obj = eval(obj, globals())
- doc = inspect.getdoc(obj)
- if not doc and callable(obj):
- target = None
- if inspect.isclass(obj) and hasattr(obj, '__init__'):
- target = obj.__init__
- objtype = 'class'
- else:
- target = obj
- objtype = 'def'
- if target:
- args = inspect.formatargspec(
- *inspect.getargspec(target)
- )
- name = obj.__name__
- doc = '{objtype} {name}{args}'.format(
- objtype=objtype, name=name, args=args
- )
- else:
- doc = doc.splitlines()[0]
- except:
- doc = ''
- try:
- exec('print doc')
- except SyntaxError:
- print(doc)"
- "Python code to setup documentation retrieval."
- :type 'string
- :group 'python-mode
- :safe 'stringp)
-
-(defcustom python-eldoc-string-code
- "__PYDOC_get_help('''%s''')\n"
- "Python code used to get a string with the documentation of an object."
- :type 'string
- :group 'python-mode
- :safe 'stringp)
-
-;;; Pdb
-(defvar python-pdbtrack-tracked-buffer nil
- "Variable containing the value of the current tracked buffer.
-Never set this variable directly, use
-`python-pdbtrack-set-tracked-buffer' instead.")
-(make-variable-buffer-local 'python-pdbtrack-tracked-buffer)
-
-(defvar python-pdbtrack-buffers-to-kill nil
- "List of buffers to be deleted after tracking finishes.")
-(make-variable-buffer-local 'python-pdbtrack-buffers-to-kill)
-
-(defun python-pdbtrack-set-tracked-buffer (file-name)
- "Set the buffer for FILE-NAME as the tracked buffer.
-Internally it uses the `python-pdbtrack-tracked-buffer' variable.
-Returns the tracked buffer."
- (let ((file-buffer (get-file-buffer file-name)))
- (if file-buffer
- (setq python-pdbtrack-tracked-buffer file-buffer)
- (setq file-buffer (find-file-noselect file-name))
- (when (not (member file-buffer python-pdbtrack-buffers-to-kill))
- (add-to-list 'python-pdbtrack-buffers-to-kill file-buffer)))
- file-buffer))
-
-(defun python-pdbtrack-comint-output-filter-function (output)
- "Move overlay arrow to current pdb line in tracked buffer.
-Argument OUTPUT is a string with the output from the comint process."
- (when (not (string= output ""))
- (let* ((full-output (ansi-color-filter-apply
- (buffer-substring comint-last-input-end (point-max))))
- (line-number)
- (file-name
- (with-temp-buffer
- (insert full-output)
- (goto-char (point-min))
- ;; OK, this sucked but now it became a cool hack. The
- ;; stacktrace information normally is on the first line
- ;; but in some cases (like when doing a step-in) it is
- ;; on the second.
- (when (or (looking-at python-pdbtrack-stacktrace-info-regexp)
- (and (forward-line)
- (looking-at python-pdbtrack-stacktrace-info-regexp)))
- (setq line-number (string-to-number
- (match-string-no-properties 2)))
- (match-string-no-properties 1)))))
- (if (and file-name line-number)
- (let* ((tracked-buffer (python-pdbtrack-set-tracked-buffer file-name))
- (shell-buffer (current-buffer))
- (tracked-buffer-window (get-buffer-window tracked-buffer))
- (tracked-buffer-line-pos))
- (with-current-buffer tracked-buffer
- (set (make-local-variable 'overlay-arrow-string) "=>")
- (set (make-local-variable 'overlay-arrow-position) (make-marker))
- (setq tracked-buffer-line-pos (progn
- (goto-char (point-min))
- (forward-line (1- line-number))
- (point-marker)))
- (when tracked-buffer-window
- (set-window-point
- tracked-buffer-window tracked-buffer-line-pos))
- (set-marker overlay-arrow-position tracked-buffer-line-pos))
- (pop-to-buffer tracked-buffer)
- (switch-to-buffer-other-window shell-buffer))
- (when python-pdbtrack-tracked-buffer
- (with-current-buffer python-pdbtrack-tracked-buffer
- (set-marker overlay-arrow-position nil))
- (mapc #'(lambda (buffer)
- (ignore-errors (kill-buffer buffer)))
- python-pdbtrack-buffers-to-kill)
- (setq python-pdbtrack-tracked-buffer nil
- python-pdbtrack-buffers-to-kill nil)))))
- output)
-
-;;;
-
-(defun python-shell-completion--get-completions (input process completion-code)
- "Retrieve available completions for INPUT using PROCESS.
-Argument COMPLETION-CODE is the python code used to get
-completions on the current context."
- (with-current-buffer (process-buffer process)
- (let ((completions
- (python-shell-send-string-no-output
- (format completion-code input) process)))
- (when (> (length completions) 2)
- (split-string completions "^'\\|^\"\\|;\\|'$\\|\"$" t)))))
-
-(defun python-shell-completion--do-completion-at-point (process imports input)
- "Do completion at point for PROCESS."
- (with-syntax-table python-dotty-syntax-table
- (let* ((code
- (if imports
- (concat imports python-shell-module-completion-string-code)
- python-shell-module-completion-string-code))
- (completions
- (python-shell-completion--get-completions
- input process code))
- (completion (when completions
- (try-completion input completions))))
- (cond ((eq completion t)
- (if (eq this-command last-command)
- (when python-completion-original-window-configuration
- (set-window-configuration
- python-completion-original-window-configuration)))
- (setq python-completion-original-window-configuration nil)
- nil)
- ((null completion)
- (message "Can't find completion for \"%s\"" input)
- (ding)
- nil)
- ((not (string= input completion))
- (progn (delete-char (- (length input)))
- (insert completion)
- ;; minibuffer.el expects a list, a bug IMO
- nil))
- (t
- (unless python-completion-original-window-configuration
- (setq python-completion-original-window-configuration
- (current-window-configuration)))
- (with-output-to-temp-buffer "*Python Completions*"
- (display-completion-list
- (all-completions input completions)))
- nil)))))
-
-(defun python-shell-completion-complete-at-point ()
- "Perform completion at point in inferior Python process."
- (interactive)
- (and comint-last-prompt-overlay
- (> (point-marker) (overlay-end comint-last-prompt-overlay))
- (python-shell-completion--do-completion-at-point
- (get-buffer-process (current-buffer))(buffer-substring-no-properties beg end) word)))
-
-(defun python-shell-completion-complete-or-indent ()
- "Complete or indent depending on the context.
-If content before pointer is all whitespace indent. If not try
-to complete."
- (interactive)
- (if (string-match "^[[:space:]]*$"
- (buffer-substring (comint-line-beginning-position)
- (point-marker)))
- (indent-for-tab-command)
- (comint-dynamic-complete)))
-
-;;; NO USER DEFINABLE VARIABLES BEYOND THIS POINT
-(defvar ipython-version nil)
-
-(defvar python-command "python"
- "Used by `py-completion-at-point', derived from python.el" )
-
-(defvaralias 'python-python-command-args 'py-python-command-args)
-(defvaralias 'py-python-command 'py-shell-name)
-(defvaralias 'py-jpython-command 'py-shell-name)
-(defvaralias 'py-jython-command 'py-shell-name)
-(defvaralias 'py-default-interpreter 'py-shell-name)
-;; (defvaralias 'python-command 'py-shell-name)
-
-(defvar py-shell-template "
-\(defun NAME (&optional argprompt)
- \"Start an DOCNAME interpreter in another window.
-
-With optional \\\\[universal-argument] user is prompted
-for options to pass to the DOCNAME interpreter. \"
- (interactive \"P\")
- (let\* ((py-shell-name \"FULLNAME\"))
- (py-shell argprompt)
- (when (interactive-p) (switch-to-buffer (current-buffer))
- (goto-char (point-max)))))
-")
-
-(setq py-shell-template "
-\(defun NAME (&optional argprompt)
- \"Start an DOCNAME interpreter in another window.
-
-With optional \\\\[universal-argument] user is prompted
-for options to pass to the DOCNAME interpreter. \"
- (interactive \"P\")
- (let\* ((py-shell-name \"FULLNAME\"))
- (py-shell argprompt)
- (when (interactive-p) (switch-to-buffer (current-buffer))
- (goto-char (point-max)))))
-")
-
-(defvar view-return-to-alist)
-(defvar python-imports) ; forward declaration
-
-(defvar py-execute-directory nil
- "Stores the file's directory-name py-execute-... functions act upon. ")
-
-(defvar py-prev-dir/file nil
- "Caches (directory . file) pair used in the last `py-load-file' command.
-Used for determining the default in the next one.")
-
-(defvar py-exception-buffer nil)
-
-(defvar py-output-buffer "*Python Output*")
-(make-variable-buffer-local 'py-output-buffer)
-
-(defvar py-execute-keep-temporary-file-p nil
- "For tests only. Excute functions delete temporary files default. ")
-
-(defvar py-expression-skip-regexp "^ =:#\t\r\n\f"
- "py-expression assumes chars indicated possible composing a py-expression, skip it. ")
-;; (setq py-expression-skip-regexp "^ =:#\t\r\n\f")
-
-(defvar py-expression-looking-regexp "[^ =:#\t\r\n\f]+"
- "py-expression assumes chars indicated possible composing a py-expression, when looking-at or -back. ")
-;; (setq py-expression-looking-regexp "[^ =:#\t\r\n\f)]")
-
-(defvar py-not-expression-regexp "[ .=:#\t\r\n\f)]"
- "py-expression assumes chars indicated probably will not compose a py-expression. ")
-;; (setq py-not-expression-regexp "[ .=:#\t\r\n\f)]")
-
-(defvar py-partial-expression-skip-regexp "^ .()[]{}=:#\t\r\n\f"
- "py-partial-expression assumes chars indicated possible composing a py-partial-expression, skip it. ")
-;; (setq py-partial-expression-skip-regexp "^ .(){}=:#\t\r\n\f")
-
-(defvar py-partial-expression-forward-regexp "^ .)}=:#\t\r\n\f"
- "py-partial-expression assumes chars indicated possible composing a py-partial-expression, skip it. ")
-
-(defvar py-partial-expression-backward-regexp "^ .({=:#\t\r\n\f"
- "py-partial-expression assumes chars indicated possible composing a py-partial-expression, skip it. ")
-
-(defvar py-not-partial-expression-skip-regexp " \\.=:#\t\r\n\f"
- "py-partial-expression assumes chars indicated may not compose a py-partial-expression, skip it. ")
-
-(defvar py-partial-expression-looking-regexp "[^ .=:#\t\r\n\f]"
- "py-partial-expression assumes chars indicated possible composing a py-partial-expression, when looking-at or -back. ")
-;; (setq py-partial-expression-looking-regexp "[^ .=:#\t\r\n\f)]")
-
-(defvar py-not-partial-expression-regexp "[ .=:#\t\r\n\f)]"
- "py-partial-expression assumes chars indicated probably will not compose a py-partial-expression. ")
-;; (setq py-not-partial-expression-regexp "[ .=:#\t\r\n\f)]")
-
-(defvar py-line-number-offset 0
- "When an exception occurs as a result of py-execute-region, a
-subsequent py-up-exception needs the line number where the region
-started, in order to jump to the correct file line. This variable is
-set in py-execute-region and used in py-jump-to-exception.")
-
-(defvar match-paren-no-use-syntax-pps nil)
-
-(defsubst py-keep-region-active ()
- "Keep the region active in XEmacs."
- ;; Ignore byte-compiler warnings you might see. Also note that
- ;; FSF's Emacs does it differently; its policy doesn't require us
- ;; to take explicit action.
- (and (boundp 'zmacs-region-stays)
- (setq zmacs-region-stays t)))
-
-;; Constants
-(defconst py-blank-or-comment-re "[ \t]*\\($\\|#\\)"
- "Regular expression matching a blank or comment line.")
-
-(defconst py-block-closing-keywords-re
- "[ \t]*\\<\\(return\\|raise\\|break\\|continue\\|pass\\)\\_>[ \n\t]"
- "Matches the beginning of a class, method or compound statement. ")
-
-(defconst py-finally-re
- "[ \t]*\\_[: \n\t]"
- "Regular expression matching keyword which closes a try-block. ")
-
-(defconst py-except-re
- "[ \t]*\\_[: \n\t]"
- "Regular expression matching keyword which composes a try-block. ")
-
-(defconst py-else-re
- "[ \t]*\\_[: \n\t]"
- "Regular expression matching keyword which closes a for- if- or try-block. ")
-
-(defconst py-return-re
- ".*:?[ \t]*\\_<\\(return\\)\\_>[ \n\t]"
- "Regular expression matching keyword which typically closes a function. ")
-
-(defconst py-no-outdent-re "\\(try:\\|except\\(\\s +.*\\)?:\\|while\\s +.*:\\|for\\s +.*:\\|if\\s +.*:\\|elif\\s +.*:\\)\\([ ]*\\_<\\(return\\|raise\\|break\\|continue\\|pass\\)\\_>[ \n]\\)")
-
-;; (defconst py-no-outdent-re
-;; (concat
-;; "\\("
-;; (mapconcat 'identity
-;; (list "try:"
-;; "except\\(\\s +.*\\)?:"
-;; "while\\s +.*:"
-;; "for\\s +.*:"
-;; "if\\s +.*:"
-;; "elif\\s +.*:"
-;; (concat py-block-closing-keywords-re "[ \t\n]"))
-;; "\\|")
-;; "\\)")
-;; "Regular expression matching lines not to dedent after.")
-
-(defvar py-traceback-line-re
- "^IPython\\|^In \\[[0-9]+\\]: *\\|^>>>\\|^[^ \t>]+>[^0-9]+\\([0-9]+\\)\\|^[ \t]+File \"\\([^\"]+\\)\", line \\([0-9]+\\)"
- "Regular expression that describes tracebacks.
-Inludes Python shell-prompt in order to stop further searches. ")
-
-(defconst py-assignment-re "\\<\\w+\\>[ \t]*\\(=\\|+=\\|*=\\|%=\\|&=\\|^=\\|<<=\\|-=\\|/=\\|**=\\||=\\|>>=\\|//=\\)"
- "If looking at the beginning of an assignment. ")
-
-(defconst py-block-re "[ \t]*\\_<\\(class\\|def\\|for\\|if\\|try\\|while\\|with\\)\\_>[: \n\t]"
- "Matches the beginning of a compound statement. ")
-
-(defconst py-minor-block-re "[ \t]*\\_<\\(for\\|if\\|try\\)\\_>[: \n\t]"
- "Matches the beginning of an `for', `if' or `try' block. ")
-
-(defconst py-try-block-re "[ \t]*\\_[: \n\t]"
- "Matches the beginning of an `if' or `try' block. ")
-
-(defconst py-class-re "[ \t]*\\_<\\(class\\)\\_>[ \n\t]"
- "Matches the beginning of a class definition. ")
-
-(defconst py-def-or-class-re "[ \t]*\\_<\\(def\\|class\\)\\_>[ \n\t]"
- "Matches the beginning of a class- or functions definition. ")
-
-(defconst py-def-re "[ \t]*\\_<\\(def\\)\\_>[ \n\t]"
- "Matches the beginning of a functions definition. ")
-
-(defconst py-block-or-clause-re "[ \t]*\\_<\\(if\\|else\\|elif\\|while\\|for\\|def\\|class\\|try\\|except\\|finally\\|with\\)\\_>[: \n\t]"
- "Matches the beginning of a compound statement or it's clause. ")
-
-(defconst py-clause-re "[ \t]*\\_<\\(else\\|elif\\|except\\|finally\\)\\_>[: \n\t]"
- "Matches the beginning of a compound statement's clause. ")
-
-(defconst py-elif-re "[ \t]*\\_<\\elif\\_>[: \n\t]"
- "Matches the beginning of a compound if-statement's clause exclusively. ")
-
-(defconst py-try-clause-re "[ \t]*\\_<\\(except\\|else\\|finally\\)\\_>[: \n\t]"
- "Matches the beginning of a compound try-statement's clause. ")
-
-(defconst py-if-re "[ \t]*\\_[ \n\t]"
- "Matches the beginning of a compound statement saying `if'. ")
-
-(defconst py-try-re "[ \t]*\\_[: \n\t]"
- "Matches the beginning of a compound statement saying `try'. " )
-
-;;; Macro definitions
-(defmacro py-in-string-or-comment-p ()
- "Returns beginning position if inside a string or comment, nil otherwise. "
- `(or (nth 8 (syntax-ppss))
- (when (or (looking-at "\"")(looking-at "[ \t]*#[ \t]*"))
- (match-beginning 0))))
-
-(defmacro empty-line-p ()
- "Returns t if cursor is at an line with nothing but whitespace-characters, nil otherwise."
- (interactive "p")
- `(save-excursion
- (progn
- (beginning-of-line)
- (looking-at "\\s-*$"))))
-
-(defmacro py-escaped ()
- "Return t if char is preceded by an odd number of backslashes. "
- `(save-excursion
- (< 0 (% (abs (skip-chars-backward "\\\\")) 2))))
-
-(defmacro py-preceding-line-backslashed-p ()
- "Return t if preceding line is a backslashed continuation line. "
- `(save-excursion
- (beginning-of-line)
- (skip-chars-backward " \t\r\n\f")
- (and (eq (char-before (point)) ?\\ )
- (py-escaped))))
-
-(defmacro py-current-line-backslashed-p ()
- "Return t if current line is a backslashed continuation line. "
- `(save-excursion
- (end-of-line)
- (skip-chars-backward " \t\r\n\f")
- (and (eq (char-before (point)) ?\\ )
- (py-escaped))))
-
-(defmacro py-continuation-line-p ()
- "Return t iff current line is a continuation line."
- `(save-excursion
- (beginning-of-line)
- (or (py-preceding-line-backslashed-p)
- (< 0 (nth 0 (syntax-ppss))))))
-
-(defun py-count-lines (&optional start end)
- "Count lines in accessible part until current line.
-
-See http://debbugs.gnu.org/cgi/bugreport.cgi?bug=7115"
- (interactive)
- (save-excursion
- (let ((count 0)
- (orig (point)))
- (goto-char (point-min))
- (while (and (< (point) orig)(not (eobp)) (skip-chars-forward "^\n" orig))
- (setq count (1+ count))
- (unless (or (not (< (point) orig)) (eobp)) (forward-char 1)
- (setq count (+ count (abs (skip-chars-forward "\n" orig))))))
- (when (bolp) (setq count (1+ count)))
- (when (interactive-p) (message "%s" count))
- count)))
-
-
-(eval-when-compile
- (defconst python-rx-constituents
- (list
- `(block-start . ,(rx symbol-start
- (or "def" "class" "if" "elif" "else" "try"
- "except" "finally" "for" "while" "with")
- symbol-end))
- `(decorator . ,(rx line-start (* space) ?@ (any letter ?_)
- (* (any word ?_))))
- `(defun . ,(rx symbol-start (or "def" "class") symbol-end))
- `(symbol-name . ,(rx (any letter ?_) (* (any word ?_))))
- `(open-paren . ,(rx (or "{" "[" "(")))
- `(close-paren . ,(rx (or "}" "]" ")")))
- `(simple-operator . ,(rx (any ?+ ?- ?/ ?& ?^ ?~ ?| ?* ?< ?> ?= ?%)))
- `(not-simple-operator . ,(rx (not (any ?+ ?- ?/ ?& ?^ ?~ ?| ?* ?< ?> ?= ?%))))
- `(operator . ,(rx (or "+" "-" "/" "&" "^" "~" "|" "*" "<" ">"
- "=" "%" "**" "//" "<<" ">>" "<=" "!="
- "==" ">=" "is" "not")))
- `(assignment-operator . ,(rx (or "=" "+=" "-=" "*=" "/=" "//=" "%=" "**="
- ">>=" "<<=" "&=" "^=" "|="))))
- "Additional Python specific sexps for `python-rx'"))
-
-(defmacro python-rx (&rest regexps)
- "Python mode specialized rx macro which supports common python named REGEXPS."
- (let ((rx-constituents (append python-rx-constituents rx-constituents)))
- (cond ((null regexps)
- (error "No regexp"))
- ((cdr regexps)
- (rx-to-string `(and ,@regexps) t))
- (t
- (rx-to-string (car regexps) t)))))
-
-;;;
-;; GNU's syntax-ppss-context
-(unless (functionp 'syntax-ppss-context)
- (defsubst syntax-ppss-context (ppss)
- (cond
- ((nth 3 ppss) 'string)
- ((nth 4 ppss) 'comment)
- (t nil))))
-
-;; Skip's XE workaround
-(unless (fboundp 'string-to-syntax)
- (defun string-to-syntax (s)
- (cond
- ((equal s "|") '(15))
- ((equal s "_") '(3))
- (t (error "Unhandled string: %s" s)))))
-
-;;; GNU python.el stuff
-
-(defun py-history-input-filter (str)
- "`comint-input-filter' function for inferior Python.
-Don't save anything for STR matching `py-history-filter-regexp'."
- (not (string-match py-history-filter-regexp str)))
-
-;; Fixme: Loses with quoted whitespace.
-(defun python-args-to-list (string)
- (let ((where (string-match "[ \t]" string)))
- (cond ((null where) (list string))
- ((not (= where 0))
- (cons (substring string 0 where)
- (python-args-to-list (substring string (+ 1 where)))))
- (t (let ((pos (string-match "[^ \t]" string)))
- (if pos (python-args-to-list (substring string pos))))))))
-
-(defvar python-preoutput-result nil
- "Data from last `_emacs_out' line seen by the preoutput filter.")
-
-(defvar python-preoutput-continuation nil
- "If non-nil, funcall this when `python-preoutput-filter' sees `_emacs_ok'.")
-
-(defvar python-preoutput-leftover nil)
-(defvar python-preoutput-skip-next-prompt nil)
-
-;; Using this stops us getting lines in the buffer like
-;; >>> ... ... >>>
-;; Also look for (and delete) an `_emacs_ok' string and call
-;; `python-preoutput-continuation' if we get it.
-(defun python-preoutput-filter (s)
- "`comint-preoutput-filter-functions' function: ignore prompts not at bol."
- (when python-preoutput-leftover
- (setq s (concat python-preoutput-leftover s))
- (setq python-preoutput-leftover nil))
- (let ((start 0)
- (res ""))
- ;; First process whole lines.
- (while (string-match "\n" s start)
- (let ((line (substring s start (setq start (match-end 0)))))
- ;; Skip prompt if needed.
- (when (and python-preoutput-skip-next-prompt
- (string-match comint-prompt-regexp line))
- (setq python-preoutput-skip-next-prompt nil)
- (setq line (substring line (match-end 0))))
- ;; Recognize special _emacs_out lines.
- (if (and (string-match "\\`_emacs_out \\(.*\\)\n\\'" line)
- (local-variable-p 'python-preoutput-result))
- (progn
- (setq python-preoutput-result (match-string 1 line))
- (set (make-local-variable 'python-preoutput-skip-next-prompt) t))
- (setq res (concat res line)))))
- ;; Then process the remaining partial line.
- (unless (zerop start) (setq s (substring s start)))
- (cond ((and (string-match comint-prompt-regexp s)
- ;; Drop this prompt if it follows an _emacs_out...
- (or python-preoutput-skip-next-prompt
- ;; ... or if it's not gonna be inserted at BOL.
- ;; Maybe we could be more selective here.
- (if (zerop (length res))
- (not (bolp))
- (string-match ".\\'" res))))
- ;; The need for this seems to be system-dependent:
- ;; What is this all about, exactly? --Stef
- ;; (if (and (eq ?. (aref s 0)))
- ;; (accept-process-output (get-buffer-process (current-buffer)) 1))
- (setq python-preoutput-skip-next-prompt nil)
- res)
- ((let ((end (min (length "_emacs_out ") (length s))))
- (eq t (compare-strings s nil end "_emacs_out " nil end)))
- ;; The leftover string is a prefix of _emacs_out so we don't know
- ;; yet whether it's an _emacs_out or something else: wait until we
- ;; get more output so we can resolve this ambiguity.
- (set (make-local-variable 'python-preoutput-leftover) s)
- res)
- (t (concat res s)))))
-
-(defvar python-version-checked nil)
-(defun python-check-version (cmd)
- "Check that CMD runs a suitable version of Python."
- ;; Fixme: Check on Jython.
- (unless (or python-version-checked
- (equal 0 (string-match (regexp-quote python-python-command)
- cmd)))
- (unless (shell-command-to-string cmd)
- (error "Can't run Python command `%s'" cmd))
- (let* ((res (shell-command-to-string
- (concat cmd
- " -c \"from sys import version_info;\
-print version_info >= (2, 2) and version_info < (3, 0)\""))))
- (unless (string-match "True" res)
- (error "Only Python versions >= 2.2 and < 3.0 are supported")))
- (setq python-version-checked t)))
-
-(defun run-python (&optional cmd noshow new)
- "Run an inferior Python process, input and output via buffer *Python*.
-
-CMD is the Python command to run. NOSHOW non-nil means don't
-show the buffer automatically.
-
-Interactively, a prefix arg means to prompt for the initial
-Python command line (default is `python-command').
-
-A new process is started if one isn't running attached to
-`python-buffer', or if called from Lisp with non-nil arg NEW.
-Otherwise, if a process is already running in `python-buffer',
-switch to that buffer.
-
-This command runs the hook `inferior-python-mode-hook' after
-running `comint-mode-hook'. Type \\[describe-mode] in the
-process buffer for a list of commands.
-
-By default, Emacs inhibits the loading of Python modules from the
-current working directory, for security reasons. To disable this
-behavior, change `python-remove-cwd-from-path' to nil."
- (interactive (if current-prefix-arg
- (list (read-string "Run Python: " python-command) nil t)
- (list python-command)))
- (unless cmd (setq cmd python-command))
- (setq python-command cmd)
- ;; Fixme: Consider making `python-buffer' buffer-local as a buffer
- ;; (not a name) in Python buffers from which `run-python' &c is
- ;; invoked. Would support multiple processes better.
- (when (or new (not (comint-check-proc python-buffer)))
- (with-current-buffer
- (let* ((cmdlist
- (append (python-args-to-list cmd) '("-i")
- (if python-remove-cwd-from-path
- '("-c" "import sys; sys.path.remove('')"))))
- (path (getenv "PYTHONPATH"))
- (process-environment ; to import emacs.py
- (cons (concat "PYTHONPATH="
- (if path (concat path path-separator))
- data-directory)
- process-environment))
- ;; If we use a pipe, unicode characters are not printed
- ;; correctly (Bug#5794) and IPython does not work at
- ;; all (Bug#5390).
- ;; (process-connection-type t))
- )
- (apply 'make-comint-in-buffer "Python"
- (generate-new-buffer "*Python*")
- (car cmdlist) nil (cdr cmdlist)))
- (setq-default python-buffer (current-buffer))
- (setq python-buffer (current-buffer))
- (accept-process-output (get-buffer-process python-buffer) 5)
- (inferior-python-mode)
- ;; Load function definitions we need.
- ;; Before the preoutput function was used, this was done via -c in
- ;; cmdlist, but that loses the banner and doesn't run the startup
- ;; file. The code might be inline here, but there's enough that it
- ;; seems worth putting in a separate file, and it's probably cleaner
- ;; to put it in a module.
- ;; Ensure we're at a prompt before doing anything else.
- (py-send-string "import emacs")
- ;; The following line was meant to ensure that we're at a prompt
- ;; before doing anything else. However, this can cause Emacs to
- ;; hang waiting for a response, if that Python function fails
- ;; (i.e. raises an exception).
- ;; (python-send-receive "print '_emacs_out ()'")
- ))
- (if (derived-mode-p 'python-mode)
- (setq python-buffer (default-value 'python-buffer))) ; buffer-local
- ;; Without this, help output goes into the inferior python buffer if
- ;; the process isn't already running.
- (sit-for 1 t) ;Should we use accept-process-output instead? --Stef
- (unless noshow (pop-to-buffer python-buffer t)))
-
-(defun python-send-command (command)
- "Like `python-send-string' but resets `compilation-shell-minor-mode'."
- (when (python-check-comint-prompt)
- (with-current-buffer (process-buffer (py-proc))
- (goto-char (point-max))
- (compilation-forget-errors)
- (py-send-string command)
- (setq compilation-last-buffer (current-buffer)))))
-
-(defun python-send-region (start end)
- "Send the region to the inferior Python process."
- ;; The region is evaluated from a temporary file. This avoids
- ;; problems with blank lines, which have different semantics
- ;; interactively and in files. It also saves the inferior process
- ;; buffer filling up with interpreter prompts. We need a Python
- ;; function to remove the temporary file when it has been evaluated
- ;; (though we could probably do it in Lisp with a Comint output
- ;; filter). This function also catches exceptions and truncates
- ;; tracebacks not to mention the frame of the function itself.
- ;;
- ;; The `compilation-shell-minor-mode' parsing takes care of relating
- ;; the reference to the temporary file to the source.
- ;;
- ;; Fixme: Write a `coding' header to the temp file if the region is
- ;; non-ASCII.
- (interactive "r")
- (let* ((f (make-temp-file "py"))
- (command
- ;; IPython puts the FakeModule module into __main__ so
- ;; emacs.eexecfile becomes useless.
- (if (or (string-match "[iI][pP]ython[^[:alpha:]]*$" (py-choose-shell))
- (string-match "[pP]ython3[[:alnum:]:]*$" (py-choose-shell)))
- (format "execfile %S" f)
- (format "emacs.eexecfile(%S)" f)))
- (orig-start (copy-marker start)))
- (when (save-excursion
- (goto-char start)
- (/= 0 (current-indentation))) ; need dummy block
- (save-excursion
- (goto-char orig-start)
- ;; Wrong if we had indented code at buffer start.
- (set-marker orig-start (line-beginning-position 0)))
- (write-region "if True:\n" nil f nil 'nomsg))
- (write-region start end f t 'nomsg)
- (python-send-command command)
- (with-current-buffer (process-buffer (py-proc))
- ;; Tell compile.el to redirect error locations in file `f' to
- ;; positions past marker `orig-start'. It has to be done *after*
- ;; `python-send-command''s call to `compilation-forget-errors'.
- (compilation-fake-loc orig-start f))))
-
-(defun python-send-string (string)
- "Evaluate STRING in inferior Python process."
- (interactive "sPython command: ")
- (comint-send-string (py-proc) string)
- (unless (string-match "\n\\'" string)
- ;; Make sure the text is properly LF-terminated.
- (comint-send-string (py-proc) "\n"))
- (when (string-match "\n[ \t].*\n?\\'" string)
- ;; If the string contains a final indented line, add a second newline so
- ;; as to make sure we terminate the multiline instruction.
- (comint-send-string (py-proc) "\n")))
-
-(defun python-send-buffer ()
- "Send the current buffer to the inferior Python process."
- (interactive)
- (python-send-region (point-min) (point-max)))
-
-;; Fixme: Try to define the function or class within the relevant
-;; module, not just at top level.
-(defun python-send-defun ()
- "Send the current defun (class or method) to the inferior Python process."
- (interactive)
- (save-excursion (python-send-region (progn (beginning-of-defun) (point))
- (progn (end-of-defun) (point)))))
-
-(defun python-switch-to-python (eob-p)
- "Switch to the Python process buffer, maybe starting new process.
-With prefix arg, position cursor at end of buffer."
- (interactive "P")
- (pop-to-buffer (process-buffer (py-proc)) t) ;Runs python if needed.
- (when eob-p
- (push-mark)
- (goto-char (point-max))))
-
-(defun python-send-region-and-go (start end)
- "Send the region to the inferior Python process.
-Then switch to the process buffer."
- (interactive "r")
- (python-send-region start end)
- (python-switch-to-python t))
-
-(defvar python-prev-dir/file nil
- "Caches (directory . file) pair used in the last `python-load-file' command.
-Used for determining the default in the next one.")
-
-(defun python-load-file (file-name)
- "Load a Python file FILE-NAME into the inferior Python process.
-If the file has extension `.py' import or reload it as a module.
-Treating it as a module keeps the global namespace clean, provides
-function location information for debugging, and supports users of
-module-qualified names."
- (interactive (comint-get-source "Load Python file: " python-prev-dir/file
- python-source-modes
- t)) ; because execfile needs exact name
- (comint-check-source file-name) ; Check to see if buffer needs saving.
- (setq python-prev-dir/file (cons (file-name-directory file-name)
- (file-name-nondirectory file-name)))
- (with-current-buffer (process-buffer (py-proc)) ;Runs python if needed.
- ;; Fixme: I'm not convinced by this logic from python-mode.el.
- (python-send-command
- (if (string-match "\\.py\\'" file-name)
- (let ((module (file-name-sans-extension
- (file-name-nondirectory file-name))))
- (format "emacs.eimport(%S,%S)"
- module (file-name-directory file-name)))
- (format "execfile(%S)" file-name)))
- (message "%s loaded" file-name)))
-
-(defun py-proc ()
- "Return the current Python process.
-
-See variable `python-buffer'. Starts a new process if necessary."
- ;; Fixme: Maybe should look for another active process if there
- ;; isn't one for `python-buffer'.
- (unless (comint-check-proc python-buffer)
- (run-python nil t))
- (get-buffer-process (if (derived-mode-p 'inferior-python-mode)
- (current-buffer)
- python-buffer)))
-
-(defun python-set-proc ()
- "Set the default value of `python-buffer' to correspond to this buffer.
-If the current buffer has a local value of `python-buffer', set the
-default (global) value to that. The associated Python process is
-the one that gets input from \\[python-send-region] et al when used
-in a buffer that doesn't have a local value of `python-buffer'."
- (interactive)
- (if (local-variable-p 'python-buffer)
- (setq-default python-buffer python-buffer)
- (error "No local value of `python-buffer'")))
-
-;; Fixme: Should this actually be used instead of info-look, i.e. be
-;; bound to C-h S? [Probably not, since info-look may work in cases
-;; where this doesn't.]
-;; (defun python-describe-symbol (symbol)
-;; "Get help on SYMBOL using `help'.
-;; Interactively, prompt for symbol.
-;;
-;; Symbol may be anything recognized by the interpreter's `help'
-;; command -- e.g. `CALLS' -- not just variables in scope in the
-;; interpreter. This only works for Python version 2.2 or newer
-;; since earlier interpreters don't support `help'.
-;;
-;; In some cases where this doesn't find documentation, \\[info-lookup-symbol]
-;; will."
-;; ;; Note that we do this in the inferior process, not a separate one, to
-;; ;; ensure the environment is appropriate.
-;; (interactive
-;; (let ((symbol (with-syntax-table python-dotty-syntax-table
-;; (current-word)))
-;; (enable-recursive-minibuffers t))
-;; (list (read-string (if symbol
-;; (format "Describe symbol (default %s): " symbol)
-;; "Describe symbol: ")
-;; nil nil symbol))))
-;; (if (equal symbol "") (error "No symbol"))
-;; ;; Ensure we have a suitable help buffer.
-;; ;; Fixme: Maybe process `Related help topics' a la help xrefs and
-;; ;; allow C-c C-f in help buffer.
-;; (let ((temp-buffer-show-hook ; avoid xref stuff
-;; (lambda ()
-;; (toggle-read-only 1)
-;; (setq view-return-to-alist
-;; (list (cons (selected-window) help-return-method))))))
-;; (with-output-to-temp-buffer (help-buffer)
-;; (with-current-buffer standard-output
-;; ;; Fixme: Is this actually useful?
-;; (help-setup-xref (list 'python-describe-symbol symbol)
-;; (called-interactively-p 'interactive))
-;; (set (make-local-variable 'comint-redirect-subvert-readonly) t)
-;; (help-print-return-message))))
-;; (comint-redirect-send-command-to-process (format "emacs.ehelp(%S, %s)"
-;; symbol python-imports)
-;; "*Help*" (py-proc) nil nil))
-
-(add-to-list 'debug-ignored-errors "^No symbol")
-
-(defun python-send-receive (string)
- "Send STRING to inferior Python (if any) and return result.
-The result is what follows `_emacs_out' in the output.
-This is a no-op if `python-check-comint-prompt' returns nil."
- (py-send-string string)
- (let ((proc (py-proc)))
- (with-current-buffer (process-buffer proc)
- (when (python-check-comint-prompt proc)
- (set (make-local-variable 'python-preoutput-result) nil)
- (while (progn
- (accept-process-output proc 5)
- (null python-preoutput-result)))
- (prog1 python-preoutput-result
- (kill-local-variable 'python-preoutput-result))))))
-
-(defun python-check-comint-prompt (&optional proc)
- "Return non-nil if and only if there's a normal prompt in the inferior buffer.
-If there isn't, it's probably not appropriate to send input to return Eldoc
-information etc. If PROC is non-nil, check the buffer for that process."
- (with-current-buffer (process-buffer (or proc (py-proc)))
- (save-excursion
- (save-match-data
- (re-search-backward (concat python--prompt-regexp " *\\=")
- nil t)))))
-
-;; Fixme: Is there anything reasonable we can do with random methods?
-;; (Currently only works with functions.)
-(defun python-eldoc-function ()
- "`eldoc-documentation-function' for Python.
-Only works when point is in a function name, not its arg list, for
-instance. Assumes an inferior Python is running."
- (let ((symbol (with-syntax-table python-dotty-syntax-table
- (current-word))))
- ;; This is run from timers, so inhibit-quit tends to be set.
- (with-local-quit
- ;; First try the symbol we're on.
- (or (and symbol
- (py-send-receive (format "emacs.eargs(%S, %s)"
- symbol python-imports)))
- ;; Try moving to symbol before enclosing parens.
- (let ((s (syntax-ppss)))
- (unless (zerop (car s))
- (when (eq ?\( (char-after (nth 1 s)))
- (save-excursion
- (goto-char (nth 1 s))
- (skip-syntax-backward "-")
- (let ((point (point)))
- (skip-chars-backward "a-zA-Z._")
- (if (< (point) point)
- (python-send-receive
- (format "emacs.eargs(%S, %s)"
- (buffer-substring-no-properties (point) point)
- python-imports))))))))))))
-
-;;; Info-look functionality.
-
-(declare-function info-lookup-maybe-add-help "info-look" (&rest arg))
-
-(defun python-after-info-look ()
- "Set up info-look for Python.
-Used with `eval-after-load'."
- (let* ((version (let ((s (shell-command-to-string (concat py-shell-name
- " -V"))))
- (string-match "^Python \\([0-9]+\\.[0-9.]+\\_>\\)" s)
- (match-string 1 s)))
- ;; Whether info files have a Python version suffix, e.g. in Debian.
- (versioned
- (with-temp-buffer
- (with-no-warnings (Info-mode))
- (condition-case ()
- ;; Don't use `info' because it would pop-up a *info* buffer.
- (with-no-warnings
- (Info-goto-node (format "(python%s-lib)Miscellaneous Index"
- version))
- t)
- (error nil)))))
- (info-lookup-maybe-add-help
- :mode 'python-mode
- :regexp "[[:alnum:]_]+"
- :doc-spec
- ;; Fixme: Can this reasonably be made specific to indices with
- ;; different rules? Is the order of indices optimal?
- ;; (Miscellaneous in -ref first prefers lookup of keywords, for
- ;; instance.)
- (if versioned
- ;; The empty prefix just gets us highlighted terms.
- `((,(concat "(python" version "-ref)Miscellaneous Index") nil "")
- (,(concat "(python" version "-ref)Module Index" nil ""))
- (,(concat "(python" version "-ref)Function-Method-Variable Index"
- nil ""))
- (,(concat "(python" version "-ref)Class-Exception-Object Index"
- nil ""))
- (,(concat "(python" version "-lib)Module Index" nil ""))
- (,(concat "(python" version "-lib)Class-Exception-Object Index"
- nil ""))
- (,(concat "(python" version "-lib)Function-Method-Variable Index"
- nil ""))
- (,(concat "(python" version "-lib)Miscellaneous Index" nil "")))
- '(("(python-ref)Miscellaneous Index" nil "")
- ("(python-ref)Module Index" nil "")
- ("(python-ref)Function-Method-Variable Index" nil "")
- ("(python-ref)Class-Exception-Object Index" nil "")
- ("(python-lib)Module Index" nil "")
- ("(python-lib)Class-Exception-Object Index" nil "")
- ("(python-lib)Function-Method-Variable Index" nil "")
- ("(python-lib)Miscellaneous Index" nil ""))))))
-(eval-after-load "info-look" '(python-after-info-look))
-
-;;;; Miscellany.
-
-;; Called from `python-mode', this causes a recursive call of the
-;; mode. See logic there to break out of the recursion.
-(defun python-maybe-jython ()
- "Invoke `jython-mode' if the buffer appears to contain Jython code.
-The criterion is either a match for `jython-mode' via
-`interpreter-mode-alist' or an import of a module from the list
-`python-jython-packages'."
- ;; The logic is taken from python-mode.el.
- (save-excursion
- (save-restriction
- (widen)
- (goto-char (point-min))
- (let ((interpreter (if (looking-at auto-mode-interpreter-regexp)
- (match-string 2))))
- (if (and interpreter (eq 'jython-mode
- (cdr (assoc (file-name-nondirectory
- interpreter)
- interpreter-mode-alist))))
- (jython-mode)
- (if (catch 'done
- (while (re-search-forward
- (rx bol (or "import" "from") (1+ space)
- (group (1+ (not (any " \t\n.")))))
- (+ (point-min) 10000) ; Probably not worth customizing.
- t)
- (if (member (match-string 1) python-jython-packages)
- (throw 'done t))))
- (jython-mode)))))))
-
-(defun python-fill-paragraph (&optional justify)
- "`fill-paragraph-function' handling multi-line strings and possibly comments.
-If any of the current line is in or at the end of a multi-line string,
-fill the string or the paragraph of it that point is in, preserving
-the string's indentation."
- (interactive "P")
- (or (fill-comment-paragraph justify)
- (save-excursion
- (end-of-line)
- (let* ((syntax (syntax-ppss))
- (orig (point))
- start end)
- (cond ((nth 4 syntax) ; comment. fixme: loses with trailing one
- (let (fill-paragraph-function)
- (fill-paragraph justify)))
- ;; The `paragraph-start' and `paragraph-separate'
- ;; variables don't allow us to delimit the last
- ;; paragraph in a multi-line string properly, so narrow
- ;; to the string and then fill around (the end of) the
- ;; current line.
- ((eq t (nth 3 syntax)) ; in fenced string
- (goto-char (nth 8 syntax)) ; string start
- (setq start (line-beginning-position))
- (setq end (condition-case () ; for unbalanced quotes
- (progn (forward-sexp)
- (- (point) 3))
- (error (point-max)))))
- ((re-search-backward "\\s|\\s-*\\=" nil t) ; end of fenced string
- (forward-char)
- (setq end (point))
- (condition-case ()
- (progn (backward-sexp)
- (setq start (line-beginning-position)))
- (error nil))))
- (when end
- (save-restriction
- (narrow-to-region start end)
- (goto-char orig)
- ;; Avoid losing leading and trailing newlines in doc
- ;; strings written like:
- ;; """
- ;; ...
- ;; """
- (let ((paragraph-separate
- ;; Note that the string could be part of an
- ;; expression, so it can have preceding and
- ;; trailing non-whitespace.
- (concat
- (rx (or
- ;; Opening triple quote without following text.
- (and (* nonl)
- (group (syntax string-delimiter))
- (repeat 2 (backref 1))
- ;; Fixme: Not sure about including
- ;; trailing whitespace.
- (* (any " \t"))
- eol)
- ;; Closing trailing quote without preceding text.
- (and (group (any ?\" ?')) (backref 2)
- (syntax string-delimiter))))
- "\\(?:" paragraph-separate "\\)"))
- fill-paragraph-function)
- (fill-paragraph justify))))))) t)
-
-(defun python-shift-left (start end &optional count)
- "Shift lines in region COUNT (the prefix arg) columns to the left.
-COUNT defaults to `py-indent-offset'. If region isn't active, just shift
-current line. The region shifted includes the lines in which START and
-END lie. It is an error if any lines in the region are indented less than
-COUNT columns."
- (interactive
- (if mark-active
- (list (region-beginning) (region-end) current-prefix-arg)
- (list (line-beginning-position) (line-end-position) current-prefix-arg)))
- (if count
- (setq count (prefix-numeric-value count))
- (setq count py-indent-offset))
- (when (> count 0)
- (save-excursion
- (goto-char start)
- (while (< (point) end)
- (if (and (< (current-indentation) count)
- (not (looking-at "[ \t]*$")))
- (error "Can't shift all lines enough"))
- (forward-line))
- (indent-rigidly start end (- count)))))
-
-(add-to-list 'debug-ignored-errors "^Can't shift all lines enough")
-
-(defun python-shift-right (start end &optional count)
- "Shift lines in region COUNT (the prefix arg) columns to the right.
-COUNT defaults to `py-indent-offset'. If region isn't active, just shift
-current line. The region shifted includes the lines in which START and
-END lie."
- (interactive
- (if mark-active
- (list (region-beginning) (region-end) current-prefix-arg)
- (list (line-beginning-position) (line-end-position) current-prefix-arg)))
- (if count
- (setq count (prefix-numeric-value count))
- (setq count py-indent-offset))
- (indent-rigidly start end count))
-
-(defun python-outline-level ()
- "`outline-level' function for Python mode.
-The level is the number of `py-indent-offset' steps of indentation
-of current line."
- (1+ (/ (current-indentation) py-indent-offset)))
-
-;; Fixme: Consider top-level assignments, imports, &c.
-(defun python-current-defun (&optional length-limit)
- "`add-log-current-defun-function' for Python."
- (save-excursion
- ;; Move up the tree of nested `class' and `def' blocks until we
- ;; get to zero indentation, accumulating the defined names.
- (let ((accum)
- (length -1))
- (catch 'done
- (while (or (null length-limit)
- (null (cdr accum))
- (< length length-limit))
- (let ((started-from (point)))
- (python-beginning-of-block)
- (end-of-line)
- (beginning-of-defun)
- (when (= (point) started-from)
- (throw 'done nil)))
- (when (looking-at (rx (0+ space) (or "def" "class") (1+ space)
- (group (1+ (or word (syntax symbol))))))
- (push (match-string 1) accum)
- (setq length (+ length 1 (length (car accum)))))
- (when (= (current-indentation) 0)
- (throw 'done nil))))
- (when accum
- (when (and length-limit (> length length-limit))
- (setcar accum ".."))
- (mapconcat 'identity accum ".")))))
-
-(defun python-mark-block ()
- "Mark the block around point.
-Uses `python-beginning-of-block', `python-end-of-block'."
- (interactive)
- (push-mark)
- (python-beginning-of-block)
- (push-mark (point) nil t)
- (python-end-of-block)
- (exchange-point-and-mark))
-
-;; Fixme: Provide a find-function-like command to find source of a
-;; definition (separate from BicycleRepairMan). Complicated by
-;; finding the right qualified name.
-
-;;;; Completion.
-
-;; http://lists.gnu.org/archive/html/bug-gnu-emacs/2008-01/msg00076.html
-(defvar python-imports "None"
- "String of top-level import statements updated by `python-find-imports'.")
-(make-variable-buffer-local 'python-imports)
-
-;; Fixme: Should font-lock try to run this when it deals with an import?
-;; Maybe not a good idea if it gets run multiple times when the
-;; statement is being edited, and is more likely to end up with
-;; something syntactically incorrect.
-;; However, what we should do is to trundle up the block tree from point
-;; to extract imports that appear to be in scope, and add those.
-(defun python-find-imports ()
- "Find top-level imports, updating `python-imports'."
- (interactive)
- (save-excursion
- (let (lines)
- (goto-char (point-min))
- (while (re-search-forward "^import\\_>\\|^from\\_>" nil t)
- (unless (syntax-ppss-context (syntax-ppss))
- (let ((start (line-beginning-position)))
- ;; Skip over continued lines.
- (while (and (eq ?\\ (char-before (line-end-position)))
- (= 0 (forward-line 1)))
- t)
- (push (buffer-substring start (line-beginning-position 2))
- lines))))
- (setq python-imports
- (if lines
- (apply #'concat
- ;; This is probably best left out since you're unlikely to need the
- ;; doc for a function in the buffer and the import will lose if the
- ;; Python sub-process' working directory isn't the same as the
- ;; buffer's.
- ;; (if buffer-file-name
- ;; (concat
- ;; "import "
- ;; (file-name-sans-extension
- ;; (file-name-nondirectory buffer-file-name))))
- (nreverse lines))
- "None"))
- (when lines
- (set-text-properties 0 (length python-imports) nil python-imports)
- ;; The output ends up in the wrong place if the string we
- ;; send contains newlines (from the imports).
- (setq python-imports
- (replace-regexp-in-string "\n" "\\n"
- (format "%S" python-imports) t t))))))
-
-(defun python-completion-at-point ()
- (let ((end (point))
- (start (save-excursion
- (and (re-search-backward
- (rx (or buffer-start (regexp "[^[:alnum:]._]"))
- (group (1+ (regexp "[[:alnum:]._]"))) point)
- nil t)
- (match-beginning 1)))))
- (when start
- (list start end
- (completion-table-dynamic 'python-symbol-completions)))))
-
-;;; FFAP support
-
-(defun python-module-path (module)
- "Function for `ffap-alist' to return path to MODULE."
- (python-send-receive (format "emacs.modpath (%S)" module)))
-
-(eval-after-load "ffap"
- '(push '(python-mode . python-module-path) ffap-alist))
-
-;;;; Find-function support
-
-;; Fixme: key binding?
-
-(defun python-find-function (name)
- "Find source of definition of function NAME.
-Interactively, prompt for name."
- (interactive
- (let ((symbol (with-syntax-table python-dotty-syntax-table
- (current-word)))
- (enable-recursive-minibuffers t))
- (list (read-string (if symbol
- (format "Find location of (default %s): " symbol)
- "Find location of: ")
- nil nil symbol))))
- (unless python-imports
- (error "Not called from buffer visiting Python file"))
- (let* ((loc (python-send-receive (format "emacs.location_of (%S, %s)"
- name python-imports)))
- (loc (car (read-from-string loc)))
- (file (car loc))
- (line (cdr loc)))
- (unless file (error "Don't know where `%s' is defined" name))
- (pop-to-buffer (find-file-noselect file))
- (when (integerp line)
- (goto-char (point-min))
- (forward-line (1- line)))))
-
-;;;
-(defvar py-mode-syntax-table nil)
-(setq py-mode-syntax-table
- (let ((table (make-syntax-table))
- (tablelookup (if (featurep 'xemacs)
- 'get-char-table
- 'aref)))
- ;; Give punctuation syntax to ASCII that normally has symbol
- ;; syntax or has word syntax and isn't a letter.
- (if (featurep 'xemacs)
- (setq table (standard-syntax-table))
- (let ((symbol (string-to-syntax "_"))
- ;; (symbol (string-to-syntax "_"))
- (sst (standard-syntax-table)))
- (dotimes (i 128)
- (unless (= i ?_)
- (if (equal symbol (funcall tablelookup sst i))
- (modify-syntax-entry i "." table))))))
- (modify-syntax-entry ?$ "." table)
- (modify-syntax-entry ?% "." table)
- ;; exceptions
- (modify-syntax-entry ?# "<" table)
- (modify-syntax-entry ?\n ">" table)
- (modify-syntax-entry ?' "\"" table)
- (modify-syntax-entry ?` "$" table)
- (modify-syntax-entry ?\_ "w" table)
- table))
-
-(defvar py-help-mode-syntax-table
- (let ((st (make-syntax-table py-mode-syntax-table)))
- ;; Don't get confused by apostrophes in the process's output (e.g. if
- ;; you execute "help(os)").
- (modify-syntax-entry ?\' "." st)
- ;; Maybe we should do the same for double quotes?
- (modify-syntax-entry ?\" "." st)
- st))
-
-(defconst py-space-backslash-table
- (let ((table (copy-syntax-table py-mode-syntax-table)))
- (modify-syntax-entry ?\\ " " table)
- table)
- "`py-mode-syntax-table' with backslash given whitespace syntax.")
-
-;; have to bind py-file-queue before installing the kill-emacs-hook
-(defvar py-file-queue nil
- "Queue of Python temp files awaiting execution.
-Currently-active file is at the head of the list.")
-
-(defvar python-mode-abbrev-table nil)
-(define-abbrev-table 'python-mode-abbrev-table ())
-
-(defvar inferior-python-mode-abbrev-table nil
- "Not in use.")
-(define-abbrev-table 'inferior-python-mode-abbrev-table ())
-
-;; pdbtrack constants
-(defconst py-pdbtrack-stack-entry-regexp
- (concat ".*\\("py-shell-input-prompt-1-regexp">\\|>\\) *\\(.*\\)(\\([0-9]+\\))\\([?a-zA-Z0-9_<>()]+\\)()")
- "Regular expression pdbtrack uses to find a stack trace entry.")
-
-;; ipython.el
-;; Recognize the ipython pdb, whose prompt is 'ipdb>' or 'ipydb>'
-;;instead of '(Pdb)'
-(defvar py-pdbtrack-input-prompt)
-(setq py-pdbtrack-input-prompt "^[(<]*[Ii]?[Pp]y?db[>)]+ ")
-(defvar py-pydbtrack-input-prompt)
-(setq py-pydbtrack-input-prompt "^[(]*ipydb[>)]+ ")
-
-;; pydb-328837.diff
-;; (defconst py-pydbtrack-stack-entry-regexp
-;; "^(\\([-a-zA-Z0-9_/.]*\\):\\([0-9]+\\)):[ \t]?\\(.*\n\\)"
-;; "Regular expression pdbtrack uses to find a stack trace entry for pydb.
-;;
-;; The debugger outputs program-location lines that look like this:
-;; (/usr/bin/zonetab2pot.py:15): makePOT")
-
-(defconst py-pdbtrack-marker-regexp-file-group 2
- "Group position in gud-pydb-marker-regexp that matches the file name.")
-
-(defconst py-pdbtrack-marker-regexp-line-group 3
- "Group position in gud-pydb-marker-regexp that matches the line number.")
-
-(defconst py-pdbtrack-marker-regexp-funcname-group 4
- "Group position in gud-pydb-marker-regexp that matches the function name.")
-
-(defconst py-pdbtrack-track-range 10000
- "Max number of characters from end of buffer to search for stack entry.")
-
-(defvar py-pdbtrack-is-tracking-p nil)
-
-;;; Bindings
-(add-to-list 'auto-mode-alist (cons (purecopy "\\.py\\'") 'python-mode))
-(add-to-list 'interpreter-mode-alist (cons (purecopy "python") 'python-mode))
-(add-to-list 'interpreter-mode-alist (cons (purecopy "jython") 'jython-mode))
-(add-to-list 'same-window-buffer-names (purecopy "*Python*"))
-
-(defconst python-font-lock-syntactic-keywords
- ;; Make outer chars of matching triple-quote sequences into generic
- ;; string delimiters. Fixme: Is there a better way?
- ;; First avoid a sequence preceded by an odd number of backslashes.
- `((,(concat "\\(?:^\\|[^\\]\\(?:\\\\.\\)*\\)" ;Prefix.
- "\\(?1:\"\\)\\(?2:\"\\)\\(?3:\"\\)\\(?4:\"\\)\\(?5:\"\\)\\(?6:\"\\)\\|\\(?1:\"\\)\\(?2:\"\\)\\(?3:\"\\)\\|\\('\\)\\('\\)\\('\\)\\|\\('\\)\\('\\)\\('\\)\\('\\)\\('\\)\\('\\)")
- (1 (python-quote-syntax 1) t t)
- (2 (python-quote-syntax 2) t t)
- (3 (python-quote-syntax 3) t t)
- (6 (python-quote-syntax 1) t t))
- ;; This doesn't really help.
- ;; (,(rx (and ?\\ (group ?\n))) (1 " "))
- ))
-
-(defun python-quote-syntax (n)
- "Put `syntax-table' property correctly on triple quote.
-Used for syntactic keywords. N is the match number (1, 2 or 3)."
- ;; Given a triple quote, we have to check the context to know
- ;; whether this is an opening or closing triple or whether it's
- ;; quoted anyhow, and should be ignored. (For that we need to do
- ;; the same job as `syntax-ppss' to be correct and it seems to be OK
- ;; to use it here despite initial worries.) We also have to sort
- ;; out a possible prefix -- well, we don't _have_ to, but I think it
- ;; should be treated as part of the string.
-
- ;; Test cases:
- ;; ur"""ar""" x='"' # """
- ;; x = ''' """ ' a
- ;; '''
- ;; x '"""' x """ \"""" x
- (save-excursion
- (goto-char (match-beginning 0))
- (cond
- ;; Consider property for the last char if in a fenced string.
- ((= n 3)
- (let* ((font-lock-syntactic-keywords nil)
- (syntax (syntax-ppss)))
- (when (eq t (nth 3 syntax)) ; after unclosed fence
- (goto-char (nth 8 syntax)) ; fence position
- ;; (skip-chars-forward "uUrR") ; skip any prefix
- ;; Is it a matching sequence?
- (if (eq (char-after) (char-after (match-beginning 2)))
- (eval-when-compile (string-to-syntax "|"))))))
- ;; Consider property for initial char, accounting for prefixes.
- ((or (and (= n 2) ; leading quote (not prefix)
- (not (match-end 1))) ; prefix is null
- (and (= n 1) ; prefix
- (match-end 1))) ; non-empty
- (let ((font-lock-syntactic-keywords nil))
- (unless (eq 'string (syntax-ppss-context (syntax-ppss)))
- (eval-when-compile (string-to-syntax "|")))))
- ;; Otherwise (we're in a non-matching string) the property is
- ;; nil, which is OK.
- )))
-
-
-;;; Keymap and syntax
-
-(defvar py-shell-map nil
- "Keymap used in *Python* shell buffers.")
-
-;; used by py-completion-at-point, the way of python.el
-(defvar python-shell-map
- (let ((map (copy-keymap comint-mode-map)))
- (define-key map [tab] 'py-shell-complete)
- (define-key map "\C-c-" 'py-up-exception)
- (define-key map "\C-c=" 'py-down-exception)
- map)
- "Keymap used in *Python* shell buffers.")
-
-;;; Intern
-(defun py-point (position)
- "Returns the value of point at certain commonly referenced POSITIONs.
-POSITION can be one of the following symbols:
-
- bol -- beginning of line
- eol -- end of line
- bod -- beginning of def or class
- eod -- end of def or class
- bob -- beginning of buffer
- eob -- end of buffer
- boi -- back to indentation
- bos -- beginning of statement
-
-This function does not modify point or mark."
- (let (erg)
- (save-excursion
- (setq erg
- (progn
- (cond
- ((eq position 'bol) (beginning-of-line))
- ((eq position 'eol) (end-of-line))
- ((eq position 'bod) (py-beginning-of-def-or-class))
- ((eq position 'eod) (py-end-of-def-or-class))
- ;; Kind of funny, I know, but useful for py-up-exception.
- ((eq position 'bob) (goto-char (point-min)))
- ((eq position 'eob) (goto-char (point-max)))
- ((eq position 'boi) (back-to-indentation))
- ((eq position 'bos) (py-beginning-of-statement))
- (t (error "Unknown buffer position requested: %s" position))) (point))))
- erg))
-
-
-;;; Font-lock and syntax
-(defun python-info-ppss-context (type &optional syntax-ppss)
- "Return non-nil if point is on TYPE using SYNTAX-PPSS.
-TYPE can be 'comment, 'string or 'paren. It returns the start
-character address of the specified TYPE."
- (let ((ppss (or syntax-ppss (syntax-ppss))))
- (cond ((eq type 'comment)
- (and (nth 4 ppss)
- (nth 8 ppss)))
- ((eq type 'string)
- (nth 8 ppss))
- ((eq type 'paren)
- (nth 1 ppss))
- (t nil))))
-
-(defvar python-font-lock-keywords nil
- "Additional expressions to highlight in Python mode.")
-
-(setq python-font-lock-keywords
- ;; Keywords
- `(,(rx symbol-start
- (or "and" "del" "from" "not" "while" "as" "elif" "global" "or" "with"
- "assert" "else" "if" "pass" "yield" "break" "import"
- "print" "exec" "in" "continue" "finally" "is"
- "return" "def" "for" "lambda" "try")
- symbol-end)
- ;; functions
- (,(rx symbol-start "def" (1+ space) (group (1+ (or word ?_))))
- (1 font-lock-function-name-face))
- ;; classes
- (,(rx symbol-start (group "class") (1+ space) (group (1+ (or word ?_))))
- (1 font-lock-keyword-face) (2 py-class-name-face))
- (,(rx symbol-start
- (or "raise" "except")
- symbol-end) . py-exception-name-face)
- ;; already pseudo-keyword
- ;; (,(rx symbol-start
- ;; (or "None" "True" "False" "__debug__" "NotImplemented")
- ;; symbol-end) . font-lock-constant-face)
- (,(rx symbol-start
- (or "cls" "self" "cls" "Ellipsis" "True" "False" "None" "__debug__" "NotImplemented")
- symbol-end) . py-pseudo-keyword-face)
- ;; Decorators.
- (,(rx line-start (* (any " \t")) (group "@" (1+ (or word ?_))
- (0+ "." (1+ (or word ?_)))))
- (1 py-decorators-face))
- ;; '("\\_>\\|<<\\)? ?=[^=\n]"
- ;; Builtin Exceptions
- (,(rx symbol-start
- (or "ArithmeticError" "AssertionError" "AttributeError"
- "BaseException" "BufferError" "BytesWarning" "DeprecationWarning"
- "EOFError" "EnvironmentError" "Exception" "FloatingPointError"
- "FutureWarning" "GeneratorExit" "IOError" "ImportError"
- "ImportWarning" "IndentationError" "IndexError" "KeyError"
- "KeyboardInterrupt" "LookupError" "MemoryError" "NameError"
- "NotImplementedError" "OSError" "OverflowError"
- "PendingDeprecationWarning" "ReferenceError" "RuntimeError"
- "RuntimeWarning" "StandardError" "StopIteration" "SyntaxError"
- "SyntaxWarning" "SystemError" "SystemExit" "TabError" "TypeError"
- "UnboundLocalError" "UnicodeDecodeError" "UnicodeEncodeError"
- "UnicodeError" "UnicodeTranslateError" "UnicodeWarning"
- "UserWarning" "ValueError" "Warning" "ZeroDivisionError")
- symbol-end) . py-exception-name-face)
- ;; (,(rx (or space line-start) symbol-start "range
- ;; Builtins
- (,(rx (or space line-start) symbol-start
- (or "_" "__doc__" "__import__" "__name__" "__package__" "abs" "all"
- "any" "apply" "basestring" "bin" "bool" "buffer" "bytearray"
- "bytes" "callable" "chr" "classmethod" "cmp" "coerce" "compile"
- "complex" "delattr" "dict" "dir" "divmod" "enumerate" "eval"
- "execfile" "file" "filter" "float" "format" "frozenset"
- "getattr" "globals" "hasattr" "hash" "help" "hex" "id" "input"
- "int" "intern" "isinstance" "issubclass" "iter" "len" "list"
- "locals" "long" "map" "max" "min" "next" "object" "oct" "open"
- "ord" "pow" "print" "property" "range" "raw_input" "reduce"
- "reload" "repr" "reversed" "round" "set" "setattr" "slice"
- "sorted" "staticmethod" "str" "sum" "super" "tuple" "type"
- "unichr" "unicode" "vars" "xrange" "zip")
- symbol-end) . py-builtins-face)
- ;; '("[ \t]*\\(_\\{0,2\\}[a-zA-Z][a-zA-Z_0-9.]+_\\{0,2\\}\\) *\\(+\\|-\\|*\\|*\\*\\|/\\|//\\|&\\|%\\||\\|\\^\\|>>\\|<<\\)? ?=[^=\n]"
- ;; 1 py-variable-name-face)
- (,(python-rx line-start (* (any " \t"))(group (** 0 2 "_") word (0+ (or word ?_))(** 0 2 "_"))(* (any " \t")) assignment-operator)
- 1 py-variable-name-face)
- ;; asignations
- ;; support for a = b = c = 5
- (,(lambda (limit)
- (let ((re (python-rx (group (+ (any word ?. ?_)))
- (? ?\[ (+ (not (any ?\]))) ?\]) (* space)
- assignment-operator)))
- (when (re-search-forward re limit t)
- (while (and (python-info-ppss-context 'paren)
- (re-search-forward re limit t)))
- (if (and (not (python-info-ppss-context 'paren))
- (not (equal (char-after (point-marker)) ?=)))
- t
- (set-match-data nil)))))
- (1 py-variable-name-face nil nil))
- ;; support for a, b, c = (1, 2, 3)
- (,(lambda (limit)
- (let ((re (python-rx (group (+ (any word ?. ?_))) (* space)
- (* ?, (* space) (+ (any word ?. ?_)) (* space))
- ?, (* space) (+ (any word ?. ?_)) (* space)
- assignment-operator)))
- (when (and (re-search-forward re limit t)
- (goto-char (nth 3 (match-data))))
- (while (and (python-info-ppss-context 'paren)
- (re-search-forward re limit t))
- (goto-char (nth 3 (match-data))))
- (if (not (python-info-ppss-context 'paren))
- t
- (set-match-data nil)))))
- (1 py-variable-name-face nil nil))
- ;; (,(rx (or space line-start) symbol-start "range" symbol-end) . py-builtins-face)
- ;; Numbers
- (,(rx symbol-start (or (1+ digit) (1+ hex-digit)) symbol-end) . py-number-face)))
-
-(defconst py-font-lock-syntactic-keywords
- '(("[^\\]\\\\\\(?:\\\\\\\\\\)*\\(\\s\"\\)\\1\\(\\1\\)"
- (2
- (7)))
- ("\\([RUBrub]?\\)[Rr]?\\(\\s\"\\)\\2\\(\\2\\)"
- (1
- (py-quote-syntax 1))
- (2
- (py-quote-syntax 2))
- (3
- (py-quote-syntax 3)))))
-
-(defun py-quote-syntax (n)
- "Put `syntax-table' property correctly on triple quote.
-Used for syntactic keywords. N is the match number (1, 2 or 3)."
- ;; Given a triple quote, we have to check the context to know
- ;; whether this is an opening or closing triple or whether it's
- ;; quoted anyhow, and should be ignored. (For that we need to do
- ;; the same job as `syntax-ppss' to be correct and it seems to be OK
- ;; to use it here despite initial worries.) We also have to sort
- ;; out a possible prefix -- well, we don't _have_ to, but I think it
- ;; should be treated as part of the string.
- ;; Test cases:
- ;; ur"""ar""" x='"' # """
- ;; x = ''' """ ' a
- ;; '''
- ;; x '"""' x """ \"""" x
- (save-excursion
- (goto-char (match-beginning 0))
- (cond
- ;; Consider property for the last char if in a fenced string.
- ((= n 3)
- (let* ((font-lock-syntactic-keywords nil)
- (syntax (if (featurep 'xemacs)
- (parse-partial-sexp (point-min) (point))
- (syntax-ppss))))
- (when (eq t (nth 3 syntax)) ; after unclosed fence
- (goto-char (nth 8 syntax)) ; fence position
- (skip-chars-forward "uUrRbB") ; skip any prefix
- ;; Is it a matching sequence?
- (if (eq (char-after) (char-after (match-beginning 2)))
- (eval-when-compile (string-to-syntax "|"))))))
- ;; Consider property for initial char, accounting for prefixes.
- ((or (and (= n 2) ; leading quote (not prefix)
- (= (match-beginning 1) (match-end 1))) ; prefix is null
- (and (= n 1) ; prefix
- (/= (match-beginning 1) (match-end 1)))) ; non-empty
- (let ((font-lock-syntactic-keywords nil))
- (unless (eq 'string (syntax-ppss-context (if (featurep 'xemacs)
- (parse-partial-sexp (point-min) (point))
- (syntax-ppss))))
- ;; (eval-when-compile (string-to-syntax "|"))
- (eval-when-compile (string-to-syntax "|")))))
- ;; Otherwise (we're in a non-matching string) the property is
- ;; nil, which is OK.
- )))
-
-(defconst python-dotty-syntax-table
- (let ((table (make-syntax-table)))
- (set-char-table-parent table py-mode-syntax-table)
- (modify-syntax-entry ?. "_" table)
- table)
- "Syntax table giving `.' symbol syntax.
-Otherwise inherits from `py-mode-syntax-table'.")
-
-;; An auxiliary syntax table which places underscore and dot in the
-;; symbol class for simplicity
-(defvar py-dotted-expression-syntax-table
- (let ((table (make-syntax-table python-mode-syntax-table)))
- (modify-syntax-entry ?_ "_" table)
- (modify-syntax-entry ?. "_" table)
- table)
- "Syntax table used to identify Python dotted expressions.")
-
-;; credits to python.el
-(defun py-beg-of-defun-function ()
- (set (make-local-variable 'beginning-of-defun-function)
- 'py-beginning-of-def-or-class))
-
-(defun py-end-of-defun-function ()
- (set (make-local-variable 'end-of-defun-function) 'py-end-of-def-or-class))
-
-(make-obsolete-variable 'jpython-mode-hook 'jython-mode-hook nil)
-(defvar jython-mode-hook nil
- "*Hook called by `jython-mode'. `jython-mode' also calls
-`python-mode-hook'.")
-
-(defvar py-shell-hook nil
- "*Hook called by `py-shell'.")
-
-;; In previous version of python-mode.el, the hook was incorrectly
-;; called py-mode-hook, and was not defvar'd. Deprecate its use.
-(and (fboundp 'make-obsolete-variable)
- (make-obsolete-variable 'py-mode-hook 'python-mode-hook nil))
-
-(defvar py-keywords "\\_<\\(ArithmeticError\\|AssertionError\\|AttributeError\\|BaseException\\|BufferError\\|BytesWarning\\|DeprecationWarning\\|EOFError\\|Ellipsis\\|EnvironmentError\\|Exception\\|False\\|FloatingPointError\\|FutureWarning\\|GeneratorExit\\|IOError\\|ImportError\\|ImportWarning\\|IndentationError\\|IndexError\\|KeyError\\|KeyboardInterrupt\\|LookupError\\|MemoryError\\|NameError\\|NoneNotImplementedError\\|NotImplemented\\|OSError\\|OverflowError\\|PendingDeprecationWarning\\|ReferenceError\\|RuntimeError\\|RuntimeWarning\\|StandardError\\|StopIteration\\|SyntaxError\\|SyntaxWarning\\|SystemError\\|SystemExit\\|TabError\\|True\\|TypeError\\|UnboundLocalError\\|UnicodeDecodeError\\|UnicodeEncodeError\\|UnicodeError\\|UnicodeTranslateError\\|UnicodeWarning\\|UserWarning\\|ValueError\\|Warning\\|ZeroDivisionError\\|__debug__\\|__import__\\|__name__\\|abs\\|all\\|and\\|any\\|apply\\|as\\|assert\\|basestring\\|bin\\|bool\\|break\\|buffer\\|bytearray\\|callable\\|chr\\|class\\|classmethod\\|cmp\\|coerce\\|compile\\|complex\\|continue\\|copyright\\|credits\\|def\\|del\\|delattr\\|dict\\|dir\\|divmod\\|elif\\|else\\|enumerate\\|eval\\|except\\|exec\\|execfile\\|exit\\|file\\|filter\\|float\\|for\\|format\\|from\\|getattr\\|global\\|globals\\|hasattr\\|hash\\|help\\|hex\\|id\\|if\\|import\\|in\\|input\\|int\\|intern\\|is\\|isinstance\\|issubclass\\|iter\\|lambda\\|len\\|license\\|list\\|locals\\|long\\|map\\|max\\|memoryview\\|min\\|next\\|not\\|object\\|oct\\|open\\|or\\|ord\\|pass\\|pow\\|print\\|property\\|quit\\|raise\\|range\\|raw_input\\|reduce\\|reload\\|repr\\|return\\|round\\|set\\|setattr\\|slice\\|sorted\\|staticmethod\\|str\\|sum\\|super\\|tuple\\|type\\|unichr\\|unicode\\|vars\\|while\\|with\\|xrange\\|yield\\|zip\\|\\)\\_>"
- "Contents like py-fond-lock-keyword")
-
-(defun py-insert-default-shebang ()
- "Insert in buffer shebang of installed default Python. "
- (interactive "*")
- (let* ((erg (if py-edit-only-p
- py-shell-name
- (executable-find py-shell-name)))
- (sheb (concat "#! " erg)))
- (insert sheb)))
-
-(defun py-electric-comment (arg)
- "Insert a comment. If starting a comment, indent accordingly.
-
-If a numeric argument ARG is provided, that many colons are inserted
-non-electrically.
-With \\[universal-argument] \"#\" electric behavior is inhibited inside a string or comment."
- (interactive "*P")
- (if (and py-indent-comments py-electric-comment-p)
- (if (ignore-errors (eq 4 (car-safe arg)))
- (insert "#")
- (when (and (eq last-command 'py-electric-comment) (looking-back " "))
- (forward-char -1))
- (if (interactive-p) (self-insert-command (prefix-numeric-value arg))
- (insert "#"))
- (let ((orig (copy-marker (point)))
- (indent (py-compute-indentation)))
- (unless
- ;; (or
- (eq (current-indentation) indent)
- ;; (looking-back "#[ \t]*"))
- (goto-char orig)
- (beginning-of-line)
- (delete-horizontal-space)
- (indent-to indent)
- (goto-char orig))
- (when py-electric-comment-add-space-p
- (unless (looking-at "[ \t]")
- (insert " "))))
- (setq last-command this-command))
- (self-insert-command (prefix-numeric-value arg))))
-
-(defun py-electric-colon (arg)
- "Insert a colon and indent accordingly.
-
-If a numeric argument ARG is provided, that many colons are inserted
-non-electrically.
-
-Electric behavior is inhibited inside a string or
-comment or by universal prefix C-u.
-Default is nil, controlled by `py-electric-colon-active-p'"
- (interactive "*P")
- (cond ((not py-electric-colon-active-p)
- (self-insert-command (prefix-numeric-value arg)))
- ((eq 4 (prefix-numeric-value arg))
- (self-insert-command 1))
- (t (self-insert-command (prefix-numeric-value arg))
- (unless (py-in-string-or-comment-p)
- (let ((orig (copy-marker (point)))
- (indent (py-compute-indentation)))
- (unless (or (eq (current-indentation) indent)
- (and (py-top-level-form-p)(< (current-indentation) indent)))
- (beginning-of-line)
- (delete-horizontal-space)
- (indent-to indent))
- (goto-char orig))))))
-
-(defun py-top-level-form-p ()
- "Return non-nil, if line starts with a top level definition.
-
-Used by `py-electric-colon', which will not indent than. "
- (let (erg)
- (save-excursion
- (beginning-of-line)
- (setq erg (or (looking-at py-class-re)
- (looking-at py-def-re))))
- erg))
-
-
-;; Electric deletion
-(defun py-electric-backspace (&optional arg)
- "Delete preceding character or level of indentation.
-
-With ARG do that ARG times.
-Returns column reached. "
- (interactive "*p")
- (let ((arg (or arg 1))
- erg)
- (dotimes (i arg)
- (if (looking-back "^[ \t]+")
- (let* ((remains (% (current-column) py-indent-offset)))
- (if (< 0 remains)
- (delete-char (- remains))
- (indent-line-to (- (current-indentation) py-indent-offset))))
- (delete-char (- 1))))
- (setq erg (current-column))
- (when (and (interactive-p) py-verbose-p) (message "%s" erg))
- erg))
-
-(defun py-electric-delete (&optional arg)
- "Delete following character or levels of whitespace.
-
-With ARG do that ARG times. "
- (interactive "*p")
- (let ((arg (or arg 1)))
- (dotimes (i arg)
- (if (and (or (bolp)(looking-back "^[ \t]+")) (looking-at "[ \t]+"))
- (let* ((remains (% (+ (current-column) (- (match-end 0)(match-beginning 0))) py-indent-offset)))
- (if (< 0 remains)
- (delete-char remains)
- (delete-char py-indent-offset)))
- (delete-char 1)))))
-
-;; (defun py-electric-delete (arg)
-;; "Delete preceding or following character or levels of whitespace.
-;;
-;; The behavior of this function depends on the variable
-;; `delete-key-deletes-forward'. If this variable is nil (or does not
-;; exist, as in older Emacsen and non-XEmacs versions), then this
-;; function behaves identically to \\[c-electric-backspace].
-;;
-;; If `delete-key-deletes-forward' is non-nil and is supported in your
-;; Emacs, then deletion occurs in the forward direction, by calling the
-;; function in `py-delete-function'.
-;;
-;; \\[universal-argument] (programmatically, argument ARG) specifies the
-;; number of characters to delete (default is 1)."
-;; (interactive "*p")
-;; (if (or (and (fboundp 'delete-forward-p) ;XEmacs 21
-;; (delete-forward-p))
-;; (and (boundp 'delete-key-deletes-forward) ;XEmacs 20
-;; delete-key-deletes-forward))
-;; (funcall py-delete-function arg)
-;; (py-electric-backspace arg)))
-
-;; required for pending-del and delsel modes
-(put 'py-electric-colon 'delete-selection t) ;delsel
-(put 'py-electric-colon 'pending-delete t) ;pending-del
-(put 'py-electric-backspace 'delete-selection 'supersede) ;delsel
-(put 'py-electric-backspace 'pending-delete 'supersede) ;pending-del
-(put 'py-electric-delete 'delete-selection 'supersede) ;delsel
-(put 'py-electric-delete 'pending-delete 'supersede) ;pending-del
-
-
-(defun py-indent-line-outmost (&optional arg)
- "Indent the current line to the outmost reasonable indent.
-
-With optional \\[universal-argument] an indent with length `py-indent-offset' is inserted unconditionally "
- (interactive "*P")
- (let* ((need (py-compute-indentation (point)))
- (cui (current-indentation))
- (cuc (current-column)))
- (cond ((eq 4 (prefix-numeric-value arg))
- (insert (make-string py-indent-offset ?\ )))
- (t
- (if (and (eq need cui)(not (eq cuc cui)))
- (back-to-indentation)
- (beginning-of-line)
- (delete-horizontal-space)
- (indent-to need))))))
-
-(defvar py-indent-line-indent nil
- "Used internal by `py-indent-line'")
-
-(defun py-indent-line-intern (need cui)
- (if py-tab-indent
- (cond ((eq need cui)
- (when (eq this-command last-command)
- (beginning-of-line)
- (delete-horizontal-space)
- (if (<= (line-beginning-position) (+ (point) (- col cui)))
- (forward-char (- col cui))
- (beginning-of-line))))
- ((< cui need)
- (if (eq this-command last-command)
- (progn
- (beginning-of-line)
- (delete-horizontal-space)
- (indent-to (+ (* (/ cui py-indent-offset) py-indent-offset) py-indent-offset))
- (forward-char (- col cui)))
- (beginning-of-line)
- (delete-horizontal-space)
- (indent-to need)
- (forward-char (- col cui))))
- (t (beginning-of-line)
- (delete-horizontal-space)
- (indent-to need)
- (if (<= (line-beginning-position) (+ (point) (- col cui)))
- (forward-char (- col cui))
- (beginning-of-line))))
- (insert-tab)))
-
-(defun py-indent-line (&optional arg)
- "Indent the current line according to Python rules.
-
-When called interactivly with \\[universal-argument], ignore dedenting rules for block closing statements
-\(e.g. return, raise, break, continue, pass)
-
-An optional \\[universal-argument] followed by a numeric argument neither 1 nor 4 will switch off `py-smart-indentation' for this execution. This permits to correct allowed but unwanted indents.
-Similar to `toggle-py-smart-indentation' resp. `py-smart-indentation-off' followed by TAB.
-
-This function is normally used by `indent-line-function' resp.
-\\[indent-for-tab-command].
-Returns current indentation "
- (interactive "P")
- (let ((cui (current-indentation))
- (col (current-column))
- (psi py-smart-indentation)
- (need (py-compute-indentation)))
- (cond ((eq 4 (prefix-numeric-value arg))
- (beginning-of-line)
- (delete-horizontal-space)
- (indent-to (+ need py-indent-offset)))
- ((not (eq 1 (prefix-numeric-value arg)))
- (py-smart-indentation-off)
- (py-indent-line-intern)
- (setq py-smart-indentation psi))
- (t (py-indent-line-intern need cui))))
- (when (and (interactive-p) py-verbose-p)(message "%s" (current-indentation)))
- (current-indentation))
-
-(defun py-newline-and-indent ()
- "Add a newline and indent to outmost reasonable indent.
-When indent is set back manually, this is honoured in following lines. "
- (interactive "*")
- (let ((ci (current-indentation))
- (orig (point))
- erg)
- (if (< ci (current-column)) ; if point beyond indentation
- (progn
- (newline)
- (save-excursion
- (goto-char orig) (delete-trailing-whitespace))
- (setq erg (indent-to-column (py-compute-indentation))))
- (beginning-of-line)
- (insert-char ?\n 1)
- (insert (make-string (setq erg (py-compute-indentation)) ?\ ))
- ;; (move-to-column erg)
- (when (looking-at "\\([ \t]+\\)") (delete-region (match-beginning 1) (match-end 1))))
- (when (and (looking-at "[ \t]+")
- (nth 1 (if (featurep 'xemacs)
- (parse-partial-sexp (point-min) (point))
- (syntax-ppss))))
- (delete-region (match-beginning 0) (match-end 0)))
- (when (and (interactive-p) py-verbose-p) (message "%s" erg))
- erg))
-
-(defalias 'py-newline-and-close-block 'py-newline-and-dedent)
-(defun py-newline-and-dedent ()
- "Add a newline and indent to one level below current.
-Returns column. "
- (interactive "*")
- (let ((cui (current-indentation))
- erg)
- (newline)
- (when (< 0 cui)
- (setq erg (- (py-compute-indentation) py-indent-offset))
- (indent-to-column erg))
- (when (and (interactive-p) py-verbose-p) (message "%s" erg))
- erg))
-
-(defun toggle-force-local-shell (&optional arg)
- "If locally indicated Python shell should be taken and
-enforced upon sessions execute commands.
-
-Toggles boolean `py-force-local-shell-p' along with `py-force-py-shell-name-p'
-Returns value of `toggle-force-local-shell' switched to.
-
-When on, kind of an option 'follow', local shell sets `py-shell-name', enforces its use afterwards.
-
-See also commands
-`py-force-local-shell-on'
-`py-force-local-shell-off'
- "
- (interactive (list arg))
- (let ((arg (or arg (if py-force-local-shell-p -1 1))))
- (if (< 0 arg)
- (progn
- (setq py-shell-name (or py-local-command (py-choose-shell)))
- (setq py-force-local-shell-p t))
- (setq py-shell-name (default-value 'py-shell-name))
- (setq py-force-local-shell-p nil))
- (when (interactive-p)
- (if py-force-local-shell-p
- (when py-verbose-p (message "Enforce %s" py-shell-name))
- (when py-verbose-p (message "py-shell-name default restored to: %s" py-shell-name))))
- py-shell-name))
-
-(defun py-force-local-shell-on ()
- "Make sure, `py-py-force-local-shell-p' is on.
-
-Returns value of `py-force-local-shell-p'.
-
-Kind of an option 'follow', local shell sets `py-shell-name', enforces its use afterwards "
- (interactive)
- (let* ((erg (toggle-force-local-shell 1)))
- (when (or py-verbose-p (interactive-p))
- (message "Enforce %s" py-shell-name))))
-
-(defun py-force-local-shell-off ()
- "Restore `py-shell-name' default value and `behaviour'. "
- (interactive)
- (let* ((erg (toggle-force-local-shell 1)))
- (when (or py-verbose-p (interactive-p))
- (message "py-shell-name default restored to: %s" py-shell-name)
- (message "Enforce %s" py-shell-name))))
-
-;; toggle-force-py-shell-name-p forms
-(defun toggle-force-py-shell-name-p (&optional arg)
- "If customized default `py-shell-name' should be enforced upon execution.
-
-If `py-force-py-shell-name-p' should be on or off.
-Returns value of `py-force-py-shell-name-p' switched to.
-
-See also commands
-force-py-shell-name-p-on
-force-py-shell-name-p-off
-
-Caveat: Completion might not work that way.
-"
- (interactive "p")
- (let ((arg (or arg (if py-force-py-shell-name-p -1 1))))
- (if (< 0 arg)
- (setq py-force-py-shell-name-p t)
- (setq py-force-py-shell-name-p nil))
- (when (or py-verbose-p (interactive-p)) (message "py-force-py-shell-name-p: %s" py-force-py-shell-name-p))
- py-force-py-shell-name-p))
-
-(defun force-py-shell-name-p-on (&optional arg)
- "Switches `py-force-py-shell-name-p' on.
-
-Customized default `py-shell-name' will be enforced upon execution.
-Returns value of `py-force-py-shell-name-p'.
-
-Caveat: Completion might not work that way.
-"
- (interactive "p")
- (let ((arg (or arg 1)))
- (toggle-force-py-shell-name-p arg))
- (when (or py-verbose-p (interactive-p)) (message "py-force-py-shell-name-p: %s" py-force-py-shell-name-p))
- py-force-py-shell-name-p)
-
-(defun force-py-shell-name-p-off ()
- "Make sure, `py-force-py-shell-name-p' is off.
-
-Function to use by executes will be guessed from environment.
-Returns value of `py-force-py-shell-name-p'. "
- (interactive)
- (toggle-force-py-shell-name-p -1)
- (when (or py-verbose-p (interactive-p)) (message "py-force-py-shell-name-p: %s" py-force-py-shell-name-p))
- py-force-py-shell-name-p)
-
-(defun py-toggle-indent-tabs-mode ()
- "Toggle `indent-tabs-mode'.
-
-Returns value of `indent-tabs-mode' switched to. "
- (interactive)
- (when
- (setq indent-tabs-mode (not indent-tabs-mode))
- (setq tab-width py-indent-offset))
- (when (and py-verbose-p (interactive-p)) (message "indent-tabs-mode %s py-indent-offset %s" indent-tabs-mode py-indent-offset))
- indent-tabs-mode)
-
-(defun py-indent-tabs-mode (arg &optional iact)
- "With positive ARG switch `indent-tabs-mode' on.
-
-With negative ARG switch `indent-tabs-mode' off.
-Returns value of `indent-tabs-mode' switched to. "
- (interactive "p")
- (if (< 0 arg)
- (progn
- (setq indent-tabs-mode t)
- (setq tab-width py-indent-offset))
- (setq indent-tabs-mode nil))
- (when (and py-verbose-p (or iact (interactive-p))) (message "indent-tabs-mode %s py-indent-offset %s" indent-tabs-mode py-indent-offset))
- indent-tabs-mode)
-
-(defun py-indent-tabs-mode-on (arg)
- "Switch `indent-tabs-mode' on. "
- (interactive "p")
- (indent-tabs-mode (abs arg)(interactive-p)))
-
-(defun py-indent-tabs-mode-off (arg)
- "Switch `indent-tabs-mode' on. "
- (interactive "p")
- (indent-tabs-mode (- (abs arg))(interactive-p)))
-
-;;; Guess indent offset
-(defun py-guessed-sanity-check (guessed)
- (and (>= guessed 2)(<= guessed 8)(eq 0 (% guessed 2))))
-
-(defun py-guess-indent-offset (&optional global orig origline)
- "Guess a value for, and change, `py-indent-offset'.
-
-By default, make a buffer-local copy of `py-indent-offset' with the
-new value.
-With optional argument GLOBAL change the global value of `py-indent-offset'.
-
-Indent might be guessed savely only from beginning of a block.
-Returns `py-indent-offset'"
- (interactive "P")
- (save-excursion
- (let* ((orig (or orig (point)))
- (origline (or origline (py-count-lines)))
- (firstindent
- (if (eq origline (py-count-lines))
- (progn (py-beginning-of-statement)
- (if (eq origline (py-count-lines))
- (progn (py-beginning-of-statement)(current-column)) (current-column)))))
- (erg (when firstindent
- (py-beginning-of-block)
- (if
- (< (current-column) firstindent)
- (current-column)
- (progn (goto-char orig)
- ;; need a block-start
- (when
- (setq firstindent (progn (py-beginning-of-block)(current-indentation)))
- (when (eq origline (py-count-lines))
- (setq firstindent (progn (py-beginning-of-block)(current-indentation))))
- (when (ignore-errors (< firstindent (py-down-statement)))
- (current-indentation)))))))
- (guessed (when erg (abs (- firstindent erg)))))
- (if (and guessed (py-guessed-sanity-check guessed))
- (setq py-indent-offset guessed)
- (setq py-indent-offset (default-value 'py-indent-offset)))
- (funcall (if global 'kill-local-variable 'make-local-variable)
- 'py-indent-offset)
- (when (and py-verbose-p (interactive-p))
- (message "%s value of py-indent-offset: %d"
- (if global "Global" "Local")
- py-indent-offset))
- py-indent-offset)))
-
-;;;
-(defun py-comment-indent-function ()
- "Python version of `comment-indent-function'."
- ;; This is required when filladapt is turned off. Without it, when
- ;; filladapt is not used, comments which start in column zero
- ;; cascade one character to the right
- (save-excursion
- (beginning-of-line)
- (let ((eol (line-end-position)))
- (and comment-start-skip
- (re-search-forward comment-start-skip eol t)
- (setq eol (match-beginning 0)))
- (goto-char eol)
- (skip-chars-backward " \t")
- (max comment-column (+ (current-column) (if (bolp) 0 1))))))
-
-(defun py-narrow-to-defun ()
- "Make text outside current def or class invisible.
-
-The defun visible is the one that contains point or follows point. "
- (interactive "P")
- (save-excursion
- (widen)
- (py-end-of-def-or-class)
- (let ((end (point)))
- (py-beginning-of-def-or-class)
- (narrow-to-region (point) end))))
-
-;; make general form below work also in these cases
-(defalias 'py-beginning-of-paragraph 'backward-paragraph)
-(defalias 'py-end-of-paragraph 'forward-paragraph)
-
-;;; Shifting
-(defalias 'py-shift-region-left 'py-shift-left)
-(defun py-shift-left (&optional count start end)
- "Dedent region according to `py-indent-offset' by COUNT times.
-
-If no region is active, current line is dedented.
-Returns indentation reached. "
- (interactive "p")
- (let ((erg (py-shift-intern (- count) start end)))
- (when (and (interactive-p) py-verbose-p) (message "%s" erg))
- erg))
-
-(defalias 'py-shift-region-right 'py-shift-right)
-(defun py-shift-right (&optional count beg end)
- "Indent region according to `py-indent-offset' by COUNT times.
-
-If no region is active, current line is indented.
-Returns indentation reached. "
- (interactive "p")
- (let ((erg (py-shift-intern count beg end)))
- (when (and (interactive-p) py-verbose-p) (message "%s" erg))
- erg))
-
-(defun py-shift-intern (count &optional start end)
- (save-excursion
- (let* ((inhibit-point-motion-hooks t)
- deactivate-mark
- (beg (cond (start)
- ((region-active-p)
- (save-excursion
- (goto-char
- (region-beginning))))
- (t (line-beginning-position))))
- (end (cond (end)
- ((region-active-p)
- (save-excursion
- (goto-char
- (region-end))))
- (t (line-end-position))))
- (orig end))
- (setq beg (copy-marker beg))
- (setq end (copy-marker end))
- ;; lp:962227
- ;; (dotimes (i (abs count))
- (if (< 0 count)
- (indent-rigidly beg end py-indent-offset)
- (indent-rigidly beg end (- py-indent-offset)))
- ;; )
- (push-mark beg t)
- (goto-char end)
- (skip-chars-backward " \t\r\n\f"))
- (py-indentation-of-statement)))
-
-(defun py-shift-forms-base (form arg &optional beg end)
- (let* ((begform (intern-soft (concat "py-beginning-of-" form)))
- (endform (intern-soft (concat "py-end-of-" form)))
- (orig (copy-marker (point)))
- (beg (cond (beg)
- ((region-active-p)
- (save-excursion
- (goto-char (region-beginning))
- (line-beginning-position)))
- (t (save-excursion
- (funcall begform)
- (line-beginning-position)))))
- (end (cond (end)
- ((region-active-p)
- (region-end))
- (t (funcall endform))))
- (erg (py-shift-intern arg beg end)))
- (goto-char orig)
- erg))
-
-(defun py-shift-paragraph-right (&optional arg)
- "Indent paragraph by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use \[universal-argument] to specify a different value.
-
-Returns outmost indentation reached. "
- (interactive "*P")
- (let ((erg (py-shift-forms-base "paragraph" (or arg py-indent-offset))))
- (when (and (interactive-p) py-verbose-p) (message "%s" erg))
- erg))
-
-(defun py-shift-paragraph-left (&optional arg)
- "Dedent paragraph by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use \[universal-argument] to specify a different value.
-
-Returns outmost indentation reached. "
- (interactive "*P")
- (let ((erg (py-shift-forms-base "paragraph" (- (or arg py-indent-offset)))))
- (when (and (interactive-p) py-verbose-p) (message "%s" erg))
- erg))
-
-(defun py-shift-block-right (&optional arg)
- "Indent block by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use \[universal-argument] to specify a different value.
-
-Returns outmost indentation reached. "
- (interactive "*P")
- (let ((erg (py-shift-forms-base "block" (or arg py-indent-offset))))
- (when (and (interactive-p) py-verbose-p) (message "%s" erg))
- erg))
-
-(defun py-shift-block-left (&optional arg)
- "Dedent block by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use \[universal-argument] to specify a different value.
-
-Returns outmost indentation reached. "
- (interactive "*P")
- (let ((erg (py-shift-forms-base "block" (- (or arg py-indent-offset)))))
- (when (and (interactive-p) py-verbose-p) (message "%s" erg))
- erg))
-
-(defun py-shift-clause-right (&optional arg)
- "Indent clause by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use \[universal-argument] to specify a different value.
-
-Returns outmost indentation reached. "
- (interactive "*P")
- (let ((erg (py-shift-forms-base "clause" (or arg py-indent-offset))))
- (when (and (interactive-p) py-verbose-p) (message "%s" erg))
- erg))
-
-(defun py-shift-clause-left (&optional arg)
- "Dedent clause by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use \[universal-argument] to specify a different value.
-
-Returns outmost indentation reached. "
- (interactive "*P")
- (let ((erg (py-shift-forms-base "clause" (- (or arg py-indent-offset)))))
- (when (and (interactive-p) py-verbose-p) (message "%s" erg))
- erg))
-
-(defun py-shift-def-right (&optional arg)
- "Indent def by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use \[universal-argument] to specify a different value.
-
-Returns outmost indentation reached. "
- (interactive "*P")
- (let ((erg (py-shift-forms-base "def" (or arg py-indent-offset))))
- (when (and (interactive-p) py-verbose-p) (message "%s" erg))
- erg))
-
-(defun py-shift-def-left (&optional arg)
- "Dedent def by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use \[universal-argument] to specify a different value.
-
-Returns outmost indentation reached. "
- (interactive "*P")
- (let ((erg (py-shift-forms-base "def" (- (or arg py-indent-offset)))))
- (when (and (interactive-p) py-verbose-p) (message "%s" erg))
- erg))
-
-(defun py-shift-class-right (&optional arg)
- "Indent class by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use \[universal-argument] to specify a different value.
-
-Returns outmost indentation reached. "
- (interactive "*P")
- (let ((erg (py-shift-forms-base "class" (or arg py-indent-offset))))
- (when (and (interactive-p) py-verbose-p) (message "%s" erg))
- erg))
-
-(defun py-shift-class-left (&optional arg)
- "Dedent class by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use \[universal-argument] to specify a different value.
-
-Returns outmost indentation reached. "
- (interactive "*P")
- (let ((erg (py-shift-forms-base "class" (- (or arg py-indent-offset)))))
- (when (and (interactive-p) py-verbose-p) (message "%s" erg))
- erg))
-
-(defun py-shift-line-right (&optional arg)
- "Indent line by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use \[universal-argument] to specify a different value.
-
-Returns outmost indentation reached. "
- (interactive "*P")
- (let ((erg (py-shift-forms-base "line" (or arg py-indent-offset))))
- (when (and (interactive-p) py-verbose-p) (message "%s" erg))
- erg))
-
-(defun py-shift-line-left (&optional arg)
- "Dedent line by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use \[universal-argument] to specify a different value.
-
-Returns outmost indentation reached. "
- (interactive "*P")
- (let ((erg (py-shift-forms-base "line" (- (or arg py-indent-offset)))))
- (when (and (interactive-p) py-verbose-p) (message "%s" erg))
- erg))
-
-(defun py-shift-statement-right (&optional arg)
- "Indent statement by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use \[universal-argument] to specify a different value.
-
-Returns outmost indentation reached. "
- (interactive "*P")
- (let ((erg (py-shift-forms-base "statement" (or arg py-indent-offset))))
- (when (and (interactive-p) py-verbose-p) (message "%s" erg))
- erg))
-
-(defun py-shift-statement-left (&optional arg)
- "Dedent statement by COUNT spaces.
-
-COUNT defaults to `py-indent-offset',
-use \[universal-argument] to specify a different value.
-
-Returns outmost indentation reached. "
- (interactive "*P")
- (let ((erg (py-shift-forms-base "statement" (- (or arg py-indent-offset)))))
- (when (and (interactive-p) py-verbose-p) (message "%s" erg))
- erg))
-
-(defun py-indent-and-forward ()
- "Indent current line according to mode, move one line forward. "
- (interactive "*")
- (beginning-of-line)
- (fixup-whitespace)
- (indent-to (py-compute-indentation))
- (if (eobp)
- (newline-and-indent)
- (forward-line 1))
- (back-to-indentation))
-
-(defun py-indent-region (start end &optional indent-offset)
- "Reindent a region of Python code.
-
-With optional INDENT-OFFSET specify a different value than `py-indent-offset' at place.
-
-Guesses the outmost reasonable indent
-Returns and keeps relative position "
- (interactive "*r\nP")
- (let ((orig (copy-marker (point)))
- (beg start)
- (end (copy-marker end))
- (py-indent-offset (prefix-numeric-value
- (or indent-offset py-indent-offset))))
- (goto-char beg)
- (while (< (line-end-position) end)
- (py-indent-and-forward))
- (unless (empty-line-p) (py-indent-line))
- (goto-char orig)))
-
-;;; Positions
-(defun py-beginning-of-paragraph-position ()
- "Returns beginning of paragraph position. "
- (interactive)
- (save-excursion
- (let ((erg (py-beginning-of-paragraph)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-end-of-paragraph-position ()
- "Returns end of paragraph position. "
- (interactive)
- (save-excursion
- (let ((erg (py-end-of-paragraph)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-beginning-of-block-position ()
- "Returns beginning of block position. "
- (interactive)
- (save-excursion
- (let ((erg (py-beginning-of-block)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-end-of-block-position ()
- "Returns end of block position. "
- (interactive)
- (save-excursion
- (let ((erg (py-end-of-block)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-beginning-of-clause-position ()
- "Returns beginning of clause position. "
- (interactive)
- (save-excursion
- (let ((erg (py-beginning-of-clause)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-end-of-clause-position ()
- "Returns end of clause position. "
- (interactive)
- (save-excursion
- (let ((erg (py-end-of-clause)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-beginning-of-block-or-clause-position ()
- "Returns beginning of block-or-clause position. "
- (interactive)
- (save-excursion
- (let ((erg (py-beginning-of-block-or-clause)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-end-of-block-or-clause-position ()
- "Returns end of block-or-clause position. "
- (interactive)
- (save-excursion
- (let ((erg (py-end-of-block-or-clause)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-beginning-of-def-position ()
- "Returns beginning of def position. "
- (interactive)
- (save-excursion
- (let ((erg (py-beginning-of-def)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-end-of-def-position ()
- "Returns end of def position. "
- (interactive)
- (save-excursion
- (let ((erg (py-end-of-def)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-beginning-of-class-position ()
- "Returns beginning of class position. "
- (interactive)
- (save-excursion
- (let ((erg (py-beginning-of-class)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-end-of-class-position ()
- "Returns end of class position. "
- (interactive)
- (save-excursion
- (let ((erg (py-end-of-class)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-beginning-of-def-or-class-position ()
- "Returns beginning of def-or-class position. "
- (interactive)
- (save-excursion
- (let ((erg (py-beginning-of-def-or-class)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-end-of-def-or-class-position ()
- "Returns end of def-or-class position. "
- (interactive)
- (save-excursion
- (let ((erg (py-end-of-def-or-class)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-beginning-of-line-position ()
- "Returns beginning of line position. "
- (interactive)
- (save-excursion
- (let ((erg (py-beginning-of-line)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-end-of-line-position ()
- "Returns end of line position. "
- (interactive)
- (save-excursion
- (let ((erg (py-end-of-line)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-beginning-of-statement-position ()
- "Returns beginning of statement position. "
- (interactive)
- (save-excursion
- (let ((erg (py-beginning-of-statement)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-end-of-statement-position ()
- "Returns end of statement position. "
- (interactive)
- (save-excursion
- (let ((erg (py-end-of-statement)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-beginning-of-expression-position ()
- "Returns beginning of expression position. "
- (interactive)
- (save-excursion
- (let ((erg (py-beginning-of-expression)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-end-of-expression-position ()
- "Returns end of expression position. "
- (interactive)
- (save-excursion
- (let ((erg (py-end-of-expression)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-beginning-of-partial-expression-position ()
- "Returns beginning of partial-expression position. "
- (interactive)
- (save-excursion
- (let ((erg (py-beginning-of-partial-expression)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-end-of-partial-expression-position ()
- "Returns end of partial-expression position. "
- (interactive)
- (save-excursion
- (let ((erg (py-end-of-partial-expression)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-;;; Bounds
-(defun py-bounds-of-statement (&optional position)
- "Returns bounds of statement at point.
-
-With optional POSITION, a number, report bounds of statement at POSITION.
-Returns a list, whose car is beg, cdr - end."
- (interactive)
- (save-excursion
- (save-restriction
- (widen)
- (when position (goto-char position))
- (let ((beg (py-beginning-of-statement-position))
- (end (py-end-of-statement-position)))
- (if (and beg end)
- (when (and py-verbose-p (interactive-p)) (message "%s" (list beg end)))
- (list beg end))))))
-
-(defun py-bounds-of-block (&optional position)
- "Returns bounds of block at point.
-
-With optional POSITION, a number, report bounds of block at POSITION.
-Returns a list, whose car is beg, cdr - end."
- (interactive)
- (save-excursion
- (save-restriction
- (widen)
- (when position (goto-char position))
- (let ((beg (py-beginning-of-block-position))
- (end (py-end-of-block-position)))
- (if (and beg end)
- (when (and py-verbose-p (interactive-p)) (message "%s" (list beg end)))
- (list beg end))))))
-
-(defun py-bounds-of-clause (&optional position)
- "Returns bounds of clause at point.
-
-With optional POSITION, a number, report bounds of clause at POSITION.
-Returns a list, whose car is beg, cdr - end."
- (interactive)
- (save-excursion
- (save-restriction
- (widen)
- (when position (goto-char position))
- (let ((beg (py-beginning-of-clause-position))
- (end (py-end-of-clause-position)))
- (if (and beg end)
- (when (and py-verbose-p (interactive-p)) (message "%s" (list beg end)))
- (list beg end))))))
-
-(defun py-bounds-of-block-or-clause (&optional position)
- "Returns bounds of block-or-clause at point.
-
-With optional POSITION, a number, report bounds of block-or-clause at POSITION.
-Returns a list, whose car is beg, cdr - end."
- (interactive)
- (save-excursion
- (save-restriction
- (widen)
- (when position (goto-char position))
- (let ((beg (py-beginning-of-block-or-clause-position))
- (end (py-end-of-block-or-clause-position)))
- (if (and beg end)
- (when (and py-verbose-p (interactive-p)) (message "%s" (list beg end)))
- (list beg end))))))
-
-(defun py-bounds-of-def (&optional position)
- "Returns bounds of def at point.
-
-With optional POSITION, a number, report bounds of def at POSITION.
-Returns a list, whose car is beg, cdr - end."
- (interactive)
- (save-excursion
- (save-restriction
- (widen)
- (when position (goto-char position))
- (let ((beg (py-beginning-of-def-position))
- (end (py-end-of-def-position)))
- (if (and beg end)
- (when (and py-verbose-p (interactive-p)) (message "%s" (list beg end)))
- (list beg end))))))
-
-(defun py-bounds-of-class (&optional position)
- "Returns bounds of class at point.
-
-With optional POSITION, a number, report bounds of class at POSITION.
-Returns a list, whose car is beg, cdr - end."
- (interactive)
- (save-excursion
- (save-restriction
- (widen)
- (when position (goto-char position))
- (let ((beg (py-beginning-of-class-position))
- (end (py-end-of-class-position)))
- (if (and beg end)
- (when (and py-verbose-p (interactive-p)) (message "%s" (list beg end)))
- (list beg end))))))
-
-(defun py-bounds-of-region ()
- "Returns bounds of region at point.
-
-Returns a list, whose car is beg, cdr - end."
- (interactive)
- (save-excursion
- (save-restriction
- (widen)
- (let ((beg (region-beginning))
- (end (region-end)))
- (if (and beg end)
- (when (and py-verbose-p (interactive-p)) (message "%s" (list beg end)))
- (list beg end))))))
-
-(defun py-beginning-of-buffer-position ()
- (point-min))
-
-(defun py-end-of-buffer-position ()
- (point-max))
-
-(defun py-bounds-of-buffer (&optional position)
- "Returns bounds of buffer at point.
-
-With optional POSITION, a number, report bounds of buffer at POSITION.
-Returns a list, whose car is beg, cdr - end."
- (interactive)
- (save-excursion
- (save-restriction
- (widen)
- (when position (goto-char position))
- (let ((beg (py-beginning-of-buffer-position))
- (end (py-end-of-buffer-position)))
- (if (and beg end)
- (when (and py-verbose-p (interactive-p)) (message "%s" (list beg end)))
- (list beg end))))))
-
-(defun py-bounds-of-expression (&optional position)
- "Returns bounds of expression at point.
-
-With optional POSITION, a number, report bounds of expression at POSITION.
-Returns a list, whose car is beg, cdr - end."
- (interactive)
- (save-excursion
- (save-restriction
- (widen)
- (when position (goto-char position))
- (let ((beg (py-beginning-of-expression-position))
- (end (py-end-of-expression-position)))
- (if (and beg end)
- (when (and py-verbose-p (interactive-p)) (message "%s" (list beg end)))
- (list beg end))))))
-
-(defun py-bounds-of-partial-expression (&optional position)
- "Returns bounds of partial-expression at point.
-
-With optional POSITION, a number, report bounds of partial-expression at POSITION.
-Returns a list, whose car is beg, cdr - end."
- (interactive)
- (save-excursion
- (save-restriction
- (widen)
- (when position (goto-char position))
- (let ((beg (py-beginning-of-partial-expression-position))
- (end (py-end-of-partial-expression-position)))
- (if (and beg end)
- (when (and py-verbose-p (interactive-p)) (message "%s" (list beg end)))
- (list beg end))))))
-
-;;; Declarations
-(defun py-bounds-of-declarations ()
- "Bounds of consecutive multitude of assigments resp. statements around point.
-
-Indented same level, which don't open blocks.
-Typically declarations resp. initialisations of variables following
-a class or function definition.
-See also py-bounds-of-statements "
- (interactive)
- (let* ((orig-indent (progn
- (back-to-indentation)
- (unless (py-beginning-of-statement-p)
- (py-beginning-of-statement))
- (unless (py-beginning-of-block-p)
- (current-indentation))))
- (orig (point))
- last beg end)
- (when orig-indent
- (setq beg (line-beginning-position))
- ;; look upward first
- (while (and
- (progn
- (unless (py-beginning-of-statement-p)
- (py-beginning-of-statement))
- (line-beginning-position))
- (py-beginning-of-statement)
- (not (py-beginning-of-block-p))
- (eq (current-indentation) orig-indent))
- (setq beg (line-beginning-position)))
- (goto-char orig)
- (while (and (setq last (line-end-position))
- (setq end (py-down-statement))
- (not (py-beginning-of-block-p))
- (eq (py-indentation-of-statement) orig-indent)))
- (setq end last)
- (goto-char beg)
- (if (and beg end)
- (progn
- (when (and py-verbose-p (interactive-p)) (message "%s %s" beg end))
- (cons beg end))
- (when (and py-verbose-p (interactive-p)) (message "%s" nil))
- nil))))
-
-(defalias 'py-backward-declarations 'py-beginning-of-declarations)
-(defun py-beginning-of-declarations ()
- "Got to the beginning of assigments resp. statements in current level which don't open blocks.
-"
- (interactive)
- (let* ((bounds (py-bounds-of-declarations))
- (erg (car bounds)))
- (when erg (goto-char erg))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defalias 'py-forward-of-declarations 'py-end-of-declarations)
-(defun py-end-of-declarations ()
- "Got to the end of assigments resp. statements in current level which don't open blocks. "
- (interactive)
- (let* ((bounds (py-bounds-of-declarations))
- (erg (cdr bounds)))
- (when erg (goto-char erg))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defalias 'py-copy-declarations 'py-declarations)
-(defun py-declarations ()
- "Copy and mark assigments resp. statements in current level which don't open blocks or start with a keyword.
-
-See also `py-statements', which is more general, taking also simple statements starting with a keyword. "
- (interactive)
- (let* ((bounds (py-bounds-of-declarations))
- (beg (car bounds))
- (end (cdr bounds)))
- (when (and beg end)
- (goto-char beg)
- (push-mark)
- (goto-char end)
- (kill-new (buffer-substring-no-properties beg end))
- (exchange-point-and-mark))))
-
-(defun py-kill-declarations ()
- "Delete variables declared in current level.
-
-Store deleted variables in kill-ring "
- (interactive "*")
- (let* ((bounds (py-bounds-of-declarations))
- (beg (car bounds))
- (end (cdr bounds)))
- (when (and beg end)
- (goto-char beg)
- (push-mark)
- (goto-char end)
- (kill-new (buffer-substring-no-properties beg end))
- (delete-region beg end))))
-
-;;; Statements
-(defun py-bounds-of-statements ()
- "Bounds of consecutive multitude of statements around point.
-
-Indented same level, which don't open blocks. "
- (interactive)
- (let* ((orig-indent (progn
- (back-to-indentation)
- (unless (py-beginning-of-statement-p)
- (py-beginning-of-statement))
- (unless (py-beginning-of-block-p)
- (current-indentation))))
- (orig (point))
- last beg end)
- (when orig-indent
- (setq beg (point))
- (while (and (setq last beg)
- (setq beg
- (when (py-beginning-of-statement)
- (line-beginning-position)))
- (not (py-in-string-p))
- (not (py-beginning-of-block-p))
- (eq (current-indentation) orig-indent)))
- (setq beg last)
- (goto-char orig)
- (setq end (line-end-position))
- (while (and (setq last (line-end-position))
- (setq end (py-down-statement))
- (not (py-beginning-of-block-p))
- ;; (not (looking-at py-keywords))
- ;; (not (looking-at "pdb\."))
- (not (py-in-string-p))
- (eq (py-indentation-of-statement) orig-indent)))
- (setq end last)
- (goto-char orig)
- (if (and beg end)
- (progn
- (when (and py-verbose-p (interactive-p)) (message "%s %s" beg end))
- (cons beg end))
- (when (and py-verbose-p (interactive-p)) (message "%s" nil))
- nil))))
-
-(defalias 'py-backward-statements 'py-beginning-of-statements)
-(defun py-beginning-of-statements ()
- "Got to the beginning of statements in current level which don't open blocks. "
- (interactive)
- (let* ((bounds (py-bounds-of-statements))
- (erg (car bounds)))
- (when erg (goto-char erg))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defalias 'py-forward-of-statements 'py-end-of-statements)
-(defun py-end-of-statements ()
- "Got to the end of statements in current level which don't open blocks. "
- (interactive)
- (let* ((bounds (py-bounds-of-statements))
- (erg (cdr bounds)))
- (when erg (goto-char erg))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defalias 'py-copy-statements 'py-statements)
-(defun py-statements ()
- "Copy and mark simple statements in current level which don't open blocks.
-
-More general than py-declarations, which would stop at keywords like a print-statement. "
- (interactive)
- (let* ((bounds (py-bounds-of-statements))
- (beg (car bounds))
- (end (cdr bounds)))
- (when (and beg end)
- (goto-char beg)
- (push-mark)
- (goto-char end)
- (kill-new (buffer-substring-no-properties beg end))
- (exchange-point-and-mark))))
-
-(defun py-kill-statements ()
- "Delete statements declared in current level.
-
-Store deleted statements in kill-ring "
- (interactive "*")
- (let* ((bounds (py-bounds-of-statements))
- (beg (car bounds))
- (end (cdr bounds)))
- (when (and beg end)
- (goto-char beg)
- (push-mark)
- (goto-char end)
- (kill-new (buffer-substring-no-properties beg end))
- (delete-region beg end))))
-
-;;; Comments, Filling
-(defun py-comment-region (beg end &optional arg)
- "Like `comment-region' but uses double hash (`#') comment starter."
- (interactive "r\nP")
- (let ((comment-start py-block-comment-prefix))
- (comment-region beg end arg)))
-
-(defun py-join-words-wrapping (words separator line-prefix line-length)
- (let ((lines ())
- (current-line line-prefix))
- (while words
- (let* ((word (car words))
- (maybe-line (concat current-line word separator)))
- (if (> (length maybe-line) line-length)
- (setq lines (cons (substring current-line 0 -1) lines)
- current-line (concat line-prefix word separator " "))
- (setq current-line (concat maybe-line " "))))
- (setq words (cdr words)))
- (setq lines (cons (substring
- current-line 0 (- 0 (length separator) 1)) lines))
- (mapconcat 'identity (nreverse lines) "\n")))
-
-(defun py-fill-comment (&optional justify)
- "Fill the comment paragraph at point"
- (let (;; Non-nil if the current line contains a comment.
- has-comment
-
- ;; If has-comment, the appropriate fill-prefix for the comment.
- comment-fill-prefix)
-
- ;; Figure out what kind of comment we are looking at.
- (save-excursion
- (beginning-of-line)
- (cond
- ;; A line with nothing but a comment on it?
- ((looking-at "[ \t]*#[# \t]*")
- (setq has-comment t
- comment-fill-prefix (buffer-substring (match-beginning 0)
- (match-end 0))))
-
- ;; A line with some code, followed by a comment? Remember that the hash
- ;; which starts the comment shouldn't be part of a string or character.
- ((progn
- (while (not (looking-at "#\\|$"))
- (skip-chars-forward "^#\n\"'\\")
- (cond
- ((eq (char-after (point)) ?\\) (forward-char 2))
- ((memq (char-after (point)) '(?\" ?')) (forward-sexp 1))))
- (looking-at "#+[\t ]*"))
- (setq has-comment t)
- (setq comment-fill-prefix
- (concat (make-string (current-column) ? )
- (buffer-substring (match-beginning 0) (match-end 0)))))))
-
- (if (not has-comment)
- (fill-paragraph justify)
-
- ;; Narrow to include only the comment, and then fill the region.
- (save-restriction
- (narrow-to-region
-
- ;; Find the first line we should include in the region to fill.
- (save-excursion
- (while (and (zerop (forward-line -1))
- (looking-at "^[ \t]*#")))
-
- ;; We may have gone to far. Go forward again.
- (or (looking-at "^[ \t]*#")
- (forward-line 1))
- (point))
-
- ;; Find the beginning of the first line past the region to fill.
- (save-excursion
- (while (progn (forward-line 1)
- (looking-at "^[ \t]*#")))
- (point)))
-
- ;; Lines with only hashes on them can be paragraph boundaries.
- (let ((paragraph-start (concat paragraph-start "\\|[ \t#]*$"))
- (paragraph-separate (concat paragraph-separate "\\|[ \t#]*$"))
- (fill-prefix comment-fill-prefix))
- ;;(message "paragraph-start %S paragraph-separate %S"
- ;;paragraph-start paragraph-separate)
- (fill-paragraph justify))))
- t))
-
-(defun py-fix-this-indent (indent)
- (unless (and (eq (current-indentation) (current-column))
- (eq (current-column) indent))
- (beginning-of-line)
- (indent-to-column indent)
- (delete-region
- (point)
- (progn (skip-chars-forward " \t") (point)))))
-
-(defun py-fill-string (start &optional justify)
- "Fill the paragraph around (point) in the string starting at start"
- ;; basic strategy: narrow to the string and call the default
- ;; implementation
- (let (;; the start of the string's contents
- string-start
- ;; the end of the string's contents
- string-end
- ;; length of the string's delimiter
- delim-length
- ;; The string delimiter
- delim)
-
- (save-excursion
- (goto-char start)
- (if (looking-at "\\([urbURB]*\\(?:'''\\|\"\"\"\\|'\\|\"\\)\\)\\\\?\n?")
- (setq string-start (match-end 0)
- delim-length (- (match-end 1) (match-beginning 1))
- delim (buffer-substring-no-properties (match-beginning 1)
- (match-end 1)))
- (error "The parameter start is not the beginning of a python string"))
-
- ;; if the string is the first token on a line and doesn't start with
- ;; a newline, fill as if the string starts at the beginning of the
- ;; line. this helps with one line docstrings
- (save-excursion
- (beginning-of-line)
- (and (/= (char-before string-start) ?\n)
- (looking-at (concat "[ \t]*" delim))
- (setq string-start (point))))
-
- ;; move until after end of string, then the end of the string's contents
- ;; is delim-length characters before that
- (forward-sexp)
- (setq string-end (- (point) delim-length)))
-
- ;; Narrow to the string's contents and fill the current paragraph
- (save-restriction
- (narrow-to-region string-start string-end)
- (let ((ends-with-newline (= (char-before (point-max)) ?\n)))
- (fill-paragraph justify)
- (if (and (not ends-with-newline)
- (= (char-before (point-max)) ?\n))
- ;; the default fill-paragraph implementation has inserted a
- ;; newline at the end. Remove it again.
- (save-excursion
- (goto-char (point-max))
- (delete-char -1)))))
-
- ;; return t to indicate that we've done our work
- t))
-
-(defun py-fill-paragraph (&optional justify)
- "Like \\[fill-paragraph], but handle Python comments and strings.
-
-If any of the current line is a comment, fill the comment or the
-paragraph of it that point is in, preserving the comment's indentation
-and initial `#'s.
-If point is inside a string, narrow to that string and fill.
-"
- (interactive "P")
- (save-excursion
- (save-restriction
- (widen)
- (let ((pps
- (if (featurep 'xemacs)
- (parse-partial-sexp (point-min) (point))
- (syntax-ppss))))
- (cond
- ;; inside a comment
- ((nth 4 pps)
- (py-fill-comment justify))
- ;; only whitespace before the comment start
- ((save-excursion (beginning-of-line) (looking-at "[ \t]*#"))
- (py-fill-comment justify))
- ;; inside a string
- ((nth 3 pps)
- (py-fill-string (nth 8 pps)))
- ;; opening quote of a string
- ((progn (save-excursion (forward-char 1)(nth 3 pps)))
- (save-excursion
- (forward-char 1)
- (py-fill-string (nth 8 pps)))))))))
-
-(defun py-insert-super ()
- "Insert a function \"super()\" from current environment.
-
-As example given in Python v3.1 documentation » The Python Standard Library »
-
-class C(B):
- def method(self, arg):
- super().method(arg) # This does the same thing as:
- # super(C, self).method(arg)
-
-Returns the string inserted. "
- (interactive "*")
- (let* ((orig (point))
- (funcname (progn
- (py-beginning-of-def)
- (when (looking-at (concat py-def-re " *\\([^(]+\\) *(\\(?:[^),]*\\),? *\\([^)]*\\))"))
- (match-string-no-properties 2))))
- (args (match-string-no-properties 3))
- (ver (py-which-python))
- classname erg)
- (if (< ver 3)
- (progn
- (py-beginning-of-class)
- (when (looking-at (concat py-class-re " *\\([^( ]+\\)"))
- (setq classname (match-string-no-properties 2)))
- (goto-char orig)
- (setq erg (concat "super(" classname ", self)." funcname "(" args ")"))
- ;; super(C, self).method(arg)"
- (insert erg))
- (goto-char orig)
- (setq erg (concat "super()." funcname "(" args ")"))
- (insert erg))
- erg))
-
-(defun py-nesting-level (&optional pps)
- "Accepts the output of `parse-partial-sexp'. "
- (interactive)
- (let* ((pps (or (ignore-errors (nth 0 pps))
- (if (featurep 'xemacs)
- (parse-partial-sexp (point-min) (point))
- (syntax-ppss))))
- (erg (nth 0 pps)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defalias 'py-count-indentation 'py-compute-indentation)
-(defun py-compute-indentation (&optional orig origline closing line inside repeat)
- "Compute Python indentation.
-
-When HONOR-BLOCK-CLOSE-P is non-nil, statements such as `return',
-`raise', `break', `continue', and `pass' force one level of dedenting."
- (interactive "P")
- (save-excursion
- (save-restriction
- (widen)
- (let* ((orig (or orig (point)))
- (origline (or origline (py-count-lines)))
- ;; closing indicates: when started, looked
- ;; at a single closing parenthesis
- (closing closing)
- ;; line: moved already a line backward
- (line line)
- (pps (syntax-ppss))
- ;; in a recursive call already
- (repeat repeat)
- ;; inside: started inside a list
- (inside inside)
- erg indent this-line)
- (unless repeat (setq inside (nth 1 pps))
- (setq repeat t))
- (setq indent
- (cond
- ((and (bobp)
- (eq origline (py-count-lines)))
- (current-indentation))
- ((and (bobp)(py-statement-opens-block-p))
- (+ (if py-smart-indentation (py-guess-indent-offset nil orig origline) py-indent-offset) (current-indentation)))
- ((and (bobp)(not (py-statement-opens-block-p)))
- (current-indentation))
- ;; (py-in-triplequoted-string-p)
- ((and (nth 3 pps)(nth 8 pps))
- (if (eq origline (py-count-lines))
- (progn
- (forward-line -1)
- (end-of-line)
- (skip-chars-backward " \t\r\n\f")
- (if (ignore-errors (< (nth 2 (syntax-ppss)) (line-beginning-position)))
- (current-indentation)
- (ignore-errors (goto-char (nth 2 pps)))
- (py-line-backward-maybe)
- (back-to-indentation)
- (py-compute-indentation orig origline closing line inside repeat)))
- (current-indentation)))
- ((and (looking-at "\"\"\"\\|'''")(not (bobp)))
- (py-beginning-of-statement)
- (py-compute-indentation orig origline closing line inside repeat))
- ;; comments
- ((nth 8 pps)
- (if (eq origline (py-count-lines))
- (progn
- (goto-char (nth 8 pps))
- (py-line-backward-maybe)
- (skip-chars-backward " \t")
- (py-compute-indentation orig origline closing line inside repeat))
- (goto-char (nth 8 pps))
- (if (and line (or py-indent-honors-inline-comment (looking-back "^[ \t]*")))
- (current-column)
- (forward-char -1)
- (py-compute-indentation orig origline closing line inside repeat))))
- ((and (looking-at "[ \t]*#") (looking-back "^[ \t]*")(not py-indent-comments)(eq origline (py-count-lines)))
- 0)
- ((and (looking-at "[ \t]*#") (looking-back "^[ \t]*")(not (eq (line-beginning-position) (point-min))))
- (forward-line -1)
- (end-of-line)
- (setq line t)
- (py-compute-indentation orig origline closing line inside repeat))
- ;; lists
- ((nth 1 pps)
- (cond ((and inside (not line))
- (when (and (eq (point) orig) (looking-at "[ \t]*\\()\\)[ \t]*$"))
- (setq closing (match-beginning 0)))
- (save-excursion
- (goto-char (nth 1 pps))
- (setq this-line (py-count-lines))
- (cond
- ((< 0 (- origline this-line))
- (if (< 1 (- origline this-line))
- (if closing
- (if py-closing-list-dedents-bos
- (current-indentation)
- (+ (current-indentation) py-indent-offset))
- (py-fetch-previous-indent orig))
- (cond ((looking-at "\\s([ \t]*$")
- (if
- (progn
- (save-excursion
- (back-to-indentation)
- (looking-at py-block-or-clause-re)))
- (progn
- (back-to-indentation)
- (+ (current-column) (* 2 py-indent-offset)))
- (back-to-indentation)
- (+ (current-column) py-indent-offset)))
- ((looking-at "\\s([ \t]*\\([^ \t]+.*\\)$")
- (goto-char (match-beginning 1))
- (current-column))
- (t (+ (current-column) (* (nth 0 pps)))))))
- (t (back-to-indentation)
- (py-beginning-of-statement)
- (py-compute-indentation orig origline closing line inside repeat)))))
- ((and (not inside) line)
- (py-beginning-of-statement)
- (py-compute-indentation orig origline closing line inside repeat))
- ((not inside)
- (progn (goto-char (+ py-lhs-inbound-indent (nth 1 pps)))
- (when (looking-at "[ \t]+")
- (goto-char (match-end 0)))
- (current-column)))
- (t
- (goto-char (nth 1 pps))
- (py-compute-indentation orig origline closing line inside repeat))))
- ((py-preceding-line-backslashed-p)
- (progn
- (py-beginning-of-statement)
- (setq this-line (py-count-lines))
- (if (< 1 (- origline this-line))
- (py-fetch-previous-indent orig)
- (if (looking-at "from +\\([^ \t\n]+\\) +import")
- 5
- (+ (current-indentation) py-continuation-offset)))))
- ((looking-at py-no-outdent-re)
- (if (eq (py-count-lines) origline)
- (progn
- (back-to-indentation)
- (py-line-backward-maybe)
- (py-compute-indentation orig origline closing line inside repeat))
- (current-indentation)))
- ((and (looking-at py-block-closing-keywords-re)(eq (py-count-lines) origline))
- (py-beginning-of-block-or-clause)
- (+
- (if py-smart-indentation (py-guess-indent-offset nil orig origline) py-indent-offset)
- ;; py-indent-offset
- (current-indentation)))
- ((looking-at py-block-closing-keywords-re)
- (py-beginning-of-block-or-clause (current-indentation))
- (current-indentation))
- ((and (looking-at py-elif-re) (eq (py-count-lines) origline))
- (py-line-backward-maybe)
- (car (py-clause-lookup-keyword py-elif-re -1 nil orig origline)))
- ((and (looking-at py-clause-re)(eq origline (py-count-lines)))
- (cond ((looking-at py-finally-re)
- (car (py-clause-lookup-keyword py-finally-re -1 nil orig origline)))
- ((looking-at py-except-re)
- (car (py-clause-lookup-keyword py-except-re -1 nil orig origline)))
- ((looking-at py-else-re)
- ;; (car (py-clause-lookup-keyword py-else-re -1 (current-indentation))))
- (car (py-clause-lookup-keyword py-else-re -1 nil orig origline)))
- ((looking-at py-elif-re)
- (car (py-clause-lookup-keyword py-elif-re -1 nil orig origline)))
- ;; maybe at if, try, with
- (t (car (py-clause-lookup-keyword py-block-or-clause-re -1 nil orig origline)))))
- ((looking-at py-block-or-clause-re)
- (cond ((eq origline (py-count-lines))
- (py-line-backward-maybe)
- (py-compute-indentation orig origline closing line inside t))
- (t (+ (if py-smart-indentation (py-guess-indent-offset nil orig origline) py-indent-offset)(current-indentation)))))
- ((looking-at py-block-closing-keywords-re)
- (py-beginning-of-block)
- (current-indentation))
- ((and (< (current-indentation) (current-column)))
- (back-to-indentation)
- (unless line
- (setq inside (nth 1 (syntax-ppss))))
- (py-compute-indentation orig origline closing line inside repeat))
- ((not (py-beginning-of-statement-p))
- (if (bobp)
- (current-column)
- (if (eq (point) orig)
- (progn
- (py-line-backward-maybe)
- (py-compute-indentation orig origline closing line inside repeat))
- (py-beginning-of-statement)
- (py-compute-indentation orig origline closing line inside repeat))))
- ((py-statement-opens-block-p)
- (if (< (py-count-lines) origline)
- (+ (if py-smart-indentation (py-guess-indent-offset nil orig origline) py-indent-offset) (current-indentation))
- (py-compute-indentation orig origline closing line inside t)))
- ((and (< (py-count-lines) origline)(looking-at py-assignment-re))
- (current-indentation))
- ((looking-at py-assignment-re)
- (py-beginning-of-statement)
- (py-compute-indentation orig origline closing line inside repeat))
- ((and (eq origline (py-count-lines))
- (save-excursion (and (setq erg (py-go-to-keyword py-block-or-clause-re))
- (ignore-errors (< orig (py-end-of-block-or-clause))))))
- (+ (car erg) (if py-smart-indentation (py-guess-indent-offset nil orig origline) py-indent-offset)))
- ((and (eq origline (py-count-lines))
- (py-beginning-of-statement-p))
- (py-beginning-of-statement)
- (py-compute-indentation orig origline closing line inside repeat))
- (t (current-indentation))))
- (when (and py-verbose-p (interactive-p)) (message "%s" indent))
- indent))))
-
-(defun py-line-backward-maybe ()
- (skip-chars-backward " \t\f" (line-beginning-position))
- (when (< 0 (abs (skip-chars-backward " \t\r\n\f")))
- (setq line t)))
-
-(defun py-fetch-previous-indent (orig)
- "Report the preceding indent. "
- (save-excursion
- (goto-char orig)
- (forward-line -1)
- (end-of-line)
- (skip-chars-backward " \t\r\n\f")
- (current-indentation)))
-
-(defun py-continuation-offset (&optional arg)
- "With numeric ARG different from 1 py-continuation-offset is set to that value; returns py-continuation-offset. "
- (interactive "p")
- (let ((erg (if (eq 1 arg)
- py-continuation-offset
- (when (numberp arg)
- (prog1
- arg
- (setq py-continuation-offset arg))))))
- (when (and py-verbose-p (interactive-p)) (message "%s" py-continuation-offset))
- py-continuation-offset))
-
-(defalias 'pios 'py-indentation-of-statement)
-(defalias 'ios 'py-indentation-of-statement)
-(defun py-indentation-of-statement ()
- "Returns the indenation of the statement at point. "
- (interactive)
- (let ((erg (save-excursion
- (back-to-indentation)
- (or (py-beginning-of-statement-p)
- (py-beginning-of-statement))
- (current-indentation))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defalias 'py-in-list-p 'py-list-beginning-position)
-(defun py-list-beginning-position (&optional start)
- "Return lists beginning position, nil if not inside.
-
-Optional ARG indicates a start-position for `parse-partial-sexp'."
- (interactive)
- (let* ((ppstart (or start (point-min)))
- (erg (nth 1 (syntax-ppss))))
- (when (interactive-p) (message "%s" erg))
- erg))
-
-(defun py-end-of-list-position (&optional arg)
- "Return end position, nil if not inside.
-
-Optional ARG indicates a start-position for `parse-partial-sexp'."
- (interactive)
- (let* ((ppstart (or arg (point-min)))
- (erg (syntax-ppss))
- (beg (nth 1 erg))
- end)
- (when beg
- (save-excursion
- (goto-char beg)
- (forward-list 1)
- (setq end (point))))
- (when (and py-verbose-p (interactive-p)) (message "%s" end))
- end))
-
-(defun py-in-comment-p ()
- "Return the beginning of current line's comment, if inside. "
- (save-restriction
- (widen)
- (let* ((pps (syntax-ppss))
- (erg (when (nth 4 pps) (nth 8 pps))))
- (unless erg
- (when (looking-at (concat "^[ \t]*" comment-start-skip))
- (setq erg (point))))
- erg)))
-
-(defun py-in-triplequoted-string-p ()
- "Returns character address of start tqs-string, nil if not inside. "
- (interactive)
- (let* ((pps (syntax-ppss))
- (erg (when (and (nth 3 pps) (nth 8 pps))(nth 2 pps))))
- (save-excursion
- (unless erg (setq erg
- (progn
- (when (looking-at "\"\"\"\\|''''")
- (goto-char (match-end 0))
- (setq pps (syntax-ppss))
- (when (and (nth 3 pps) (nth 8 pps)) (nth 2 pps)))))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-in-string-p ()
- "Returns character address of start of string, nil if not inside. "
- (interactive)
- (let* ((pps (syntax-ppss))
- (erg (when (nth 3 pps) (nth 8 pps))))
- (save-excursion
- (unless erg (setq erg
- (progn
- (when (looking-at "\"\\|'")
- (forward-char 1)
- (setq pps (syntax-ppss))
- (when (nth 3 pps) (nth 8 pps)))))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-in-statement-p ()
- "Returns list of beginning and end-position if inside.
-
-Result is useful for booleans too: (when (py-in-statement-p)...)
-will work.
-"
- (interactive)
- (let ((orig (point))
- beg end erg)
- (save-excursion
- (setq end (py-end-of-statement))
- (setq beg (py-beginning-of-statement))
- (when (and (<= beg orig)(<= orig end))
- (setq erg (cons beg end))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))))
-
-;;; Beginning-of- p
-(defun py-beginning-of-line-p ()
- "Returns position, if cursor is at the beginning of a line, nil otherwise. "
- (when (bolp)(point)))
-
-(defun py-beginning-of-buffer-p ()
- "Returns position, if cursor is at the beginning of buffer, nil otherwise. "
- (when (bobp)(point)))
-
-(defun py-beginning-of-paragraph-p ()
- "Returns position, if cursor is at the beginning of a paragraph, nil otherwise. "
- (let ((orig (point))
- erg)
- (if (and (bolp) (looking-at paragraph-separate))
- (setq erg (point))
- (save-excursion
- (py-end-of-paragraph)
- (py-beginning-of-paragraph)
- (when (eq orig (point))
- (setq erg orig)))
- erg)))
-
-(defun py-beginning-of-statement-p ()
- "Returns position, if cursor is at the beginning of a statement, nil otherwise. "
- (let ((orig (point))
- erg)
- (save-excursion
- (py-end-of-statement)
- (py-beginning-of-statement)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py-beginning-of-expression-p ()
- "Returns position, if cursor is at the beginning of a expression, nil otherwise. "
- (let ((orig (point))
- erg)
- (save-excursion
- (py-end-of-expression)
- (py-beginning-of-expression)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py-beginning-of-partial-expression-p ()
- "Returns position, if cursor is at the beginning of a partial-expression, nil otherwise. "
- (let ((orig (point))
- erg)
- (save-excursion
- (py-end-of-partial-expression)
- (py-beginning-of-partial-expression)
- (when (eq orig (point))
- (setq erg orig))
- erg)))
-
-(defun py-beginning-of-block-p ()
- "Returns position, if cursor is at the beginning of a block, nil otherwise. "
- (when (and (looking-at py-block-re)
- (not (py-in-string-or-comment-p)))
- (point)))
-
-(defun py-beginning-of-clause-p ()
- "Returns position, if cursor is at the beginning of a clause, nil otherwise. "
- (when (and (looking-at py-clause-re)
- (not (py-in-string-or-comment-p)))
- (point)))
-
-(defun py-beginning-of-block-or-clause-p ()
- "Returns position, if cursor is at the beginning of a block-or-clause, nil otherwise. "
- (when (and (looking-at py-block-or-clause-re)
- (not (py-in-string-or-comment-p)))
- (point)))
-
-(defun py-beginning-of-def-p ()
- "Returns position, if cursor is at the beginning of a def, nil otherwise. "
- (when (and (looking-at py-def-re)
- (not (py-in-string-or-comment-p)))
- (point)))
-
-(defun py-beginning-of-class-p ()
- "Returns position, if cursor is at the beginning of a class, nil otherwise. "
- (when (and (looking-at py-class-re)
- (not (py-in-string-or-comment-p)))
- (point)))
-
-(defun py-beginning-of-def-or-class-p ()
- "Returns position, if cursor is at the beginning of a def-or-class, nil otherwise. "
- (when (and (looking-at py-def-or-class-re)
- (not (py-in-string-or-comment-p)))
- (point)))
-
-;;; Opens- p
-(defun py-statement-opens-block-p (&optional regexp)
- "Return position if the current statement opens a block
-in stricter or wider sense.
-
-For stricter sense specify regexp. "
- (interactive)
- (let* ((regexp (or regexp py-block-re))
- (erg (py-statement-opens-base regexp)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-statement-opens-base (regexp)
- (let ((orig (point))
- erg)
- (save-excursion
- (back-to-indentation)
- (py-end-of-statement)
- (py-beginning-of-statement)
- (when (and
- (looking-back "^[ \t]*") (<= (line-beginning-position)(point))(looking-at regexp))
- (setq erg (point))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-statement-opens-clause-p ()
- "Return position if the current statement opens block or clause. "
- (interactive)
- (py-statement-opens-base py-clause-re))
-
-(defun py-statement-opens-block-or-clause-p ()
- "Return position if the current statement opens block or clause. "
- (interactive)
- (py-statement-opens-base py-block-or-clause-re))
-
-(defun py-statement-opens-class-p ()
- "Return `t' if the statement opens a functions or class definition, nil otherwise. "
- (interactive)
- (py-statement-opens-base py-class-re))
-
-(defun py-statement-opens-def-p ()
- "Return `t' if the statement opens a functions or class definition, nil otherwise. "
- (interactive)
- (py-statement-opens-base py-def-re))
-
-(defun py-statement-opens-def-or-class-p ()
- "Return `t' if the statement opens a functions or class definition, nil otherwise. "
- (interactive)
- (py-statement-opens-base py-def-or-class-re))
-
-(defun py-statement-closes-block-p ()
- "Return t iff the current statement closes a block.
-I.e., if the line starts with `return', `raise', `break', `continue',
-and `pass'. This doesn't catch embedded statements."
- (let ((here (point)))
- (unless (py-beginning-of-statement-p) (py-beginning-of-statement))
- (prog1
- (looking-at py-block-closing-keywords-re)
- (goto-char here))))
-
-(defun py-end-base (regexp &optional orig)
- "Used internal by functions going to the end forms. "
- (let ((orig (or orig (point)))
- (erg (if (py-statement-opens-block-p regexp)
- (point)
- (py-go-to-keyword regexp)
- (when (py-statement-opens-block-p regexp)
- (point))))
- ind)
- (if erg
- (progn
- (setq ind (+ py-indent-offset (current-indentation)))
- (py-end-of-statement)
- (forward-line 1)
- (setq erg (py-travel-current-indent ind)))
- (py-look-downward-for-beginning regexp)
- (unless (eobp)(py-end-base regexp orig)))
- (if (< orig (point))
- (setq erg (point))
- (setq erg (py-look-downward-for-beginning regexp))
- (when erg (py-end-base regexp orig)))
- erg))
-
-(defun py-look-downward-for-beginning (regexp)
- "When above any beginning of FORM, search downward. "
- (let ((erg (re-search-forward regexp nil (quote move) 1)))
- (if (and erg (not (py-in-string-or-comment-p))
- (not (py-in-list-p)))
- erg
- (unless (eobp)
- (py-look-downward-for-beginning regexp)))))
-
-(defun py-current-defun (&optional iact)
- "Go to the outermost method or class definition in current scope.
-
-Python value for `add-log-current-defun-function'.
-This tells add-log.el how to find the current function/method/variable.
-Returns name of class or methods definition, if found, nil otherwise.
-
-See customizable variables `py-current-defun-show' and `py-current-defun-delay'."
- (interactive "p")
- (save-restriction
- (widen)
- (save-excursion
- (let ((erg (when (py-beginning-of-def-or-class)
- (forward-word 1)
- (skip-chars-forward " \t")
- (prin1-to-string (symbol-at-point)))))
- (when (and erg py-current-defun-show (push-mark (point) t t) (skip-chars-forward "^ (")
- (exchange-point-and-mark)
- (sit-for py-current-defun-delay)))
- (when iact (message (prin1-to-string erg)))
- erg))))
-
-(defun py-outdent-p ()
- "Returns non-nil if the current line should dedent one level."
- (save-excursion
- (and (progn (back-to-indentation)
- (looking-at py-clause-re))
- ;; short circuit infloop on illegal construct
- (not (bobp))
- (progn (forward-line -1)
- (py-beginning-of-statement)
- (back-to-indentation)
- (when (looking-at py-blank-or-comment-re)
- (backward-to-indentation 1))
- (not (looking-at py-no-outdent-re))))))
-
-(defun py-sort-imports ()
- "Sort multiline imports.
-
-Put point inside the parentheses of a multiline import and hit
-\\[py-sort-imports] to sort the imports lexicographically"
- (interactive)
- (save-excursion
- (let ((open-paren (save-excursion (progn (up-list -1) (point))))
- (close-paren (save-excursion (progn (up-list 1) (point))))
- sorted-imports)
- (goto-char (1+ open-paren))
- (skip-chars-forward " \n\t")
- (setq sorted-imports
- (sort
- (delete-dups
- (split-string (buffer-substring
- (point)
- (save-excursion (goto-char (1- close-paren))
- (skip-chars-backward " \n\t")
- (point)))
- ", *\\(\n *\\)?"))
- ;; XXX Should this sort case insensitively?
- 'string-lessp))
- ;; Remove empty strings.
- (delete-region open-paren close-paren)
- (goto-char open-paren)
- (insert "(\n")
- (insert (py-join-words-wrapping (remove "" sorted-imports) "," " " 78))
- (insert ")"))))
-
-(defun py-in-literal (&optional lim)
- "Return non-nil if point is in a Python literal (a comment or string).
-Optional argument LIM indicates the beginning of the containing form,
-i.e. the limit on how far back to scan."
- (let* ((lim (or lim (point-min)))
- (state (syntax-ppss)))
- (cond
- ((nth 3 state) 'string)
- ((nth 4 state) 'comment))))
-
-(defun py-which-function ()
- "Return the name of the function or class, if curser is in, return nil otherwise. "
- (interactive)
- (save-excursion
- (save-restriction
- (widen)
- (let ((orig (point))
- (erg (if (and (looking-at (concat py-def-or-class-re " +\\([^(]+\\)(.+")) (not (py-in-string-or-comment-p)))
- (match-string-no-properties 2)
- (progn
- (py-beginning-of-def-or-class)
- (when (looking-at (concat py-def-or-class-re " +\\([^(]+\\)(.+"))
- (match-string-no-properties 2))))))
- (if (and erg (< orig (py-end-of-def-or-class)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- (setq erg nil)
- (when (and py-verbose-p (interactive-p)) (message "%s" "Not inside a function or class"))
- erg)))))
-
-(defconst py-help-address "python-mode@python.org"
- "List dealing with usage and developing python-mode.
-
-Also accepts submission of bug reports, whilst a ticket at
-http://launchpad.net/python-mode
-is preferable for that. ")
-
-;;; Beg-end forms
-(defun py-beginning-of-block (&optional indent)
- "Returns beginning of block if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html"
- (interactive)
- (let ((erg (ignore-errors (cdr (py-go-to-keyword py-block-re indent)))))
- erg))
-
-(defun py-end-of-block ()
- "Go to the end of block.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html"
- (interactive)
- (let* ((orig (point))
- (erg (py-end-base py-block-re orig)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-beginning-of-clause (&optional indent)
- "Returns beginning of clause if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html"
- (interactive)
- (let ((erg (ignore-errors (cdr (py-go-to-keyword py-clause-re indent)))))
- erg))
-
-(defun py-end-of-clause ()
- "Go to the end of clause.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html"
- (interactive)
- (let* ((orig (point))
- (erg (py-end-base py-clause-re orig)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-beginning-of-block-or-clause (&optional indent)
- "Returns beginning of block-or-clause if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html"
- (interactive)
- (let ((erg (ignore-errors (cdr (py-go-to-keyword py-block-or-clause-re indent)))))
- erg))
-
-(defun py-end-of-block-or-clause ()
- "Go to the end of block-or-clause.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html"
- (interactive)
- (let* ((orig (point))
- (erg (py-end-base py-block-or-clause-re orig)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-beginning-of-def (&optional indent)
- "Returns beginning of def if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html"
- (interactive)
- (let ((erg (ignore-errors (cdr (py-go-to-keyword py-def-re indent)))))
- erg))
-
-(defun py-end-of-def ()
- "Go to the end of def.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html"
- (interactive)
- (let* ((orig (point))
- (erg (py-end-base py-def-re orig)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-beginning-of-class (&optional indent)
- "Returns beginning of class if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html"
- (interactive)
- (let ((erg (ignore-errors (cdr (py-go-to-keyword py-class-re indent)))))
- erg))
-
-(defun py-end-of-class ()
- "Go to the end of class.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html"
- (interactive)
- (let* ((orig (point))
- (erg (py-end-base py-class-re orig)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-beginning-of-def-or-class (&optional indent)
- "Returns beginning of def-or-class if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html"
- (interactive)
- (let ((erg (ignore-errors (cdr (py-go-to-keyword py-def-or-class-re indent)))))
- erg))
-
-(defun py-end-of-def-or-class ()
- "Go to the end of def-or-class.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html"
- (interactive)
- (save-restriction
- (widen)
- (let* ((orig (point))
- (pps (syntax-ppss))
- ;; (origline (py-count-lines))
- (erg (if (and (not (nth 8 pps)) (looking-at py-def-or-class-re))
- (point)
- (py-go-to-keyword py-def-or-class-re)
- (when (and (not (nth 8 pps)) (looking-at py-def-or-class-re)) (point))))
- ind)
- (if erg
- (progn
- (setq ind
- (+ (if py-smart-indentation
- (save-excursion
- (goto-char orig)
- ;; (setq origline (py-count-lines))
- (py-end-of-statement)
- (py-end-of-statement)
- ;; (when (eq origline (py-count-lines)) (py-end-of-statement))
- (py-guess-indent-offset nil (point)))
- py-indent-offset)
- (current-indentation)))
- (py-end-of-statement)
- (forward-line 1)
- (setq erg (py-travel-current-indent ind)))
- (py-look-downward-for-beginning py-def-or-class-re)
- (unless (eobp)
- ;; (py-end-base py-def-or-class-re orig)
- (progn
- (setq ind
- (+ (if py-smart-indentation
- (save-excursion
- (goto-char orig)
- ;; (setq origline (py-count-lines))
- (py-end-of-statement)
- (py-end-of-statement)
- ;; (when (eq origline (py-count-lines)) (py-end-of-statement))
- (py-guess-indent-offset nil (point)))
- py-indent-offset)
- (current-indentation)))
- (py-end-of-statement)
- (forward-line 1)
- (setq erg (py-travel-current-indent ind)))
- ))
- (if (< orig (point))
- (setq erg (point))
- (setq erg (py-look-downward-for-beginning py-def-or-class-re))
- (when erg
- (progn
- (setq ind (+ py-indent-offset (current-indentation)))
- (py-end-of-statement)
- (forward-line 1)
- (setq erg (py-travel-current-indent ind)))
- ;; (py-end-base py-def-or-class-re orig)
- ))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-beginning-of-if-block (&optional indent)
- "Returns beginning of if-block if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html"
- (interactive)
- (let ((erg (ignore-errors (cdr (py-go-to-keyword py-if-re indent)))))
- erg))
-
-(defun py-end-of-if-block ()
- "Go to the end of if-block.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html"
- (interactive)
- (let* ((orig (point))
- (erg (py-end-base py-if-re orig)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-beginning-of-try-block (&optional indent)
- "Returns beginning of try-block if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html"
- (interactive)
- (let ((erg (ignore-errors (cdr (py-go-to-keyword py-try-block-re indent)))))
- erg))
-
-(defun py-end-of-try-block ()
- "Go to the end of try-block.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html"
- (interactive)
- (let* ((orig (point))
- (erg (py-end-base py-try-block-re orig)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-beginning-of-minor-block (&optional indent)
- "Returns beginning of minor-block if successful, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html"
- (interactive)
- (let ((erg (ignore-errors (cdr (py-go-to-keyword py-minor-block-re indent)))))
- erg))
-
-(defun py-end-of-minor-block ()
- "Go to the end of minor-block.
-
-Returns position reached, if any, nil otherwise.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html"
- (interactive)
- (let* ((orig (point))
- (erg (py-end-base py-minor-block-re orig)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-;; Buffer
-(defun py-beginning-of-buffer ()
- "Go to beginning-of-buffer, return position. "
- (let ((erg (unless (bobp)
- (goto-char (point-min)))))
- erg))
-
-(defun py-end-of-buffer ()
- "Go to end-of-buffer, return position.
-
-If already at end-of-buffer and not at EOB, go to end of next line. "
- (let ((erg (unless (eobp)
- (goto-char (point-max)))))
- erg))
-
-(defalias 'py-forward-block 'py-end-of-block)
-(defalias 'py-forward-block-or-clause 'py-end-of-block-or-clause)
-(defalias 'py-forward-class 'py-end-of-class)
-(defalias 'py-forward-clause 'py-end-of-clause)
-(defalias 'end-of-def-or-class 'py-end-of-def-or-class)
-(defalias 'py-forward-def-or-class 'py-end-of-def-or-class)
-(defalias 'py-previous-block 'py-beginning-of-block)
-(defalias 'py-goto-block-up 'py-beginning-of-block)
-(defalias 'py-backward-block 'py-beginning-of-block)
-(defalias 'py-previous-block-or-clause 'py-beginning-of-block-or-clause)
-(defalias 'py-goto-block-or-clause-up 'py-beginning-of-block-or-clause)
-(defalias 'py-backward-block-or-clause 'py-beginning-of-block-or-clause)
-(defalias 'beginning-of-class 'py-beginning-of-class)
-(defalias 'py-backward-class 'py-beginning-of-class)
-(defalias 'py-previous-class 'py-beginning-of-class)
-(defalias 'py-previous-clause 'py-beginning-of-clause)
-(defalias 'py-goto-clause-up 'py-beginning-of-clause)
-(defalias 'py-backward-clause 'py-beginning-of-clause)
-(defalias 'py-backward-def-or-class 'py-beginning-of-def-or-class)
-(defalias 'py-previous-def-or-class 'py-beginning-of-def-or-class)
-
-;;; Expression
-(defalias 'py-backward-expression 'py-beginning-of-expression)
-(defun py-beginning-of-expression (&optional orig done)
- "Go to the beginning of a compound python expression.
-
-A a compound python expression might be concatenated by \".\" operator, thus composed by minor python expressions.
-
-If already at the beginning or before a expression, go to next expression in buffer upwards
-
-Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference
-Operators however are left aside resp. limit py-expression designed for edit-purposes.
-"
- (interactive)
- (save-restriction
- (widen)
- (unless (bobp)
- (let ((orig (or orig (point)))
- (cui (current-indentation))
- (pps (syntax-ppss))
- erg)
- (cond
- ;; if in string
- ((and (nth 3 pps)(nth 8 pps)
- (goto-char (nth 8 pps)))
- (setq done t)
- (unless (looking-back "\\(=\\|:\\|+\\|-\\|*\\|/\\|//\\|&\\|%\\||\\|\^\\|>>\\|<<\\)[ \t]*")
- (when (nth 2 pps)
- (goto-char (nth 2 pps))))
- (py-beginning-of-expression orig done))
- ;; comments left, as strings are done
- ((nth 8 pps)
- (goto-char (1- (nth 8 pps)))
- (py-beginning-of-expression orig done))
- ((and (looking-at "[ \t]*#") (looking-back "^[ \t]*"))
- (forward-line -1)
- (unless (bobp)
- (end-of-line)
- (py-beginning-of-expression orig done)))
- ;; character address of start of innermost containing list; nil if none.
- ((nth 1 pps)
- (goto-char (nth 1 pps))
- (when
- (not (looking-back "[ \t]+"))
- (when (< 0 (abs (skip-chars-backward py-expression-skip-regexp)))
- (setq done t)))
- (py-beginning-of-expression orig done))
- ((looking-at "\\(=\\|:\\|+\\|-\\|*\\|/\\|//\\|&\\|%\\||\\|\^\\|>>\\|<<\\)")
- (goto-char (1- (match-beginning 0)))
- (skip-chars-backward " \t\r\n\f")
- (forward-char -1)
- (py-beginning-of-expression orig done))
- ((looking-back "[\])}]")
- (forward-char -1)
- (py-beginning-of-expression orig done))
-
- ;; inside expression
- ((and (eq (point) orig) (not (bobp)) (looking-back py-expression-looking-regexp))
- (skip-chars-backward py-expression-skip-regexp)
- (setq done t)
- (py-beginning-of-expression orig done))
- ((looking-at "[ \t\r\n\f]")
- (skip-chars-backward " \t\r\n\f")
- (unless (bobp) (forward-char -1))
- (unless (eq (abs (skip-chars-backward "^ \t\r\n\f")) 0)
- (py-beginning-of-expression orig done)))
- ((and (eq (point) orig) (not (bobp))(looking-back "[ \.\t\r\n\f]"))
- (skip-chars-backward "=:+-*/&%^><. \t\r\n\f")
- (unless (bobp) (forward-char -1))
- (unless (eq (abs (skip-chars-backward "^=:+-*/&%^>< \t\r\n\f")) 0)
- (setq done t)
- (py-beginning-of-expression orig done)))
- ((and (eq (point) orig) (not (bobp)) (looking-back py-expression-looking-regexp))
- (forward-char -1)
- (when (< 0 (abs (skip-chars-backward py-expression-skip-regexp)))
- (setq done t))
- (py-beginning-of-expression orig done))
- ((looking-at py-expression-looking-regexp)
- (setq done t)))
- (unless (or (eq (point) orig)(looking-at "[ \t]*#"))
- (setq erg (point)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))))
-
-(defun py-end-of-expression (&optional orig done)
- "Go to the end of a compound python expression.
-
-A a compound python expression might be concatenated by \".\" operator, thus composed by minor python expressions.
-
-Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference
-
-Operators however are left aside resp. limit py-expression designed for edit-purposes. "
- (interactive)
- (save-restriction
- (widen)
- (unless (eobp)
- (let*
- ((orig (or orig (point)))
- (pps (syntax-ppss))
- (done done)
- erg
- ;; use by scan-lists
- parse-sexp-ignore-comments)
- (cond
- ;; start of innermost containing list; nil if none.
- ((nth 1 pps)
- (goto-char (nth 1 pps))
- (let ((parse-sexp-ignore-comments t))
- (forward-list)
- (py-end-of-expression orig done)))
- ;; in comment
- ((nth 4 pps)
- (or (< (point) (progn (forward-comment 1)(point)))(forward-line 1))
- (py-end-of-expression orig done))
- ((and (empty-line-p)(not done)(not (eobp)))
- (while
- (and (empty-line-p)(not done)(not (eobp)))
- (forward-line 1))
- (py-end-of-expression orig done))
- ;; inside string
- ((py-in-string-p)
- (when (looking-at "\"\"\"\\|'''\\|\"\\|'")
- (goto-char (match-end 0)))
- (while
- (nth 3 (syntax-ppss))
- (forward-char 1))
- (when (looking-at "[ \t]*$")
- (setq done t))
- (py-end-of-expression orig done))
- ((and (looking-at "[ \t]*#")(looking-back "^[ \t]*")(not done))
- (while (and (looking-at "[ \t]*#") (forward-line 1)(not (eobp))
- (beginning-of-line)))
- (end-of-line)
- (skip-chars-backward " \t\r\n\f")
- (unless (bolp) (setq done t))
- (py-end-of-expression orig done))
- ((and (not done)(looking-at py-not-expression-regexp)(not (eobp)))
- (goto-char (match-end 0))
- (skip-chars-forward " \t\r\n\f")
- (py-end-of-expression orig done))
- ((and (not done)(looking-at py-expression-skip-regexp)(not (eobp)))
- (skip-chars-forward py-not-expression-regexp)
- (forward-char -1)
- (py-end-of-expression orig done))
- ((and
- ;; (not done)
- (not (eobp))(looking-at py-expression-looking-regexp))
- (goto-char (match-end 0))
- (setq done t)
- (unless (< 0 (skip-chars-forward py-expression-skip-regexp))
- (unless (looking-at "[ \t\r\n\f]") (forward-char 1)))
- (py-end-of-expression orig done))
- ((looking-at "\\(+\\|-\\|*\\|/\\|//\\|&\\|%\\||\\|\^\\|>>\\|<<\\)[ \t]*")
- (setq done t)
- (goto-char (match-end 0))
- (py-end-of-expression orig done)))
- (unless (eq (point) orig)
- (setq erg (point)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))))
-
-;;; Partial- or Minor Expression
-(defalias 'py-backward-partial-expression 'py-beginning-of-partial-expression)
-(defun py-beginning-of-partial-expression (&optional orig erg)
- "Go to the beginning of a minor python expression.
-
-\".\" operators delimit a minor expression on their level.
-Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference
-Operators however are left aside resp. limit py-expression designed for edit-purposes.
-
-If already at the beginning or before a partial-expression, go to next partial-expression in buffer upwards "
- (interactive)
- (save-restriction
- (widen)
- (unless (bobp)
- (let ((orig (or orig (point)))
- (cui (current-indentation))
- ;; (origline (or origline (py-count-lines)))
- (pps (syntax-ppss))
- (erg erg))
- (cond
- ((nth 1 pps)
- (goto-char (nth 1 pps))
- ;; (skip-chars-backward py-partial-expression-backward-regexp)
- (setq erg (point)))
- ((nth 8 pps)
- (when (nth 2 pps)
- (goto-char (nth 2 pps)))
- (goto-char (1- (nth 8 pps)))
- (setq erg (point))
- (py-beginning-of-partial-expression orig erg))
- ((and (looking-at "[ \t]*#") (looking-back "^[ \t]*"))
- (forward-line -1)
- (unless (bobp)
- (end-of-line)
- (setq erg (point))
- (py-beginning-of-partial-expression orig erg)))
-
- ((looking-at "\\(=\\|:\\|+\\|-\\|*\\|/\\|//\\|&\\|%\\||\\|\^\\|>>\\|<<\\)")
- (goto-char (1- (match-beginning 0)))
- (skip-chars-backward " \t\r\n\f")
- (unless (bobp) (forward-char -1))
- (py-beginning-of-partial-expression orig erg))
- ((looking-at "[ \t\r\n\f]")
- (skip-chars-backward " \t\r\n\f")
- (unless (bobp) (forward-char -1))
- (unless (eq (abs (skip-chars-backward "^ .\t\r\n\f")) 0)
- (py-beginning-of-partial-expression orig erg)))
- ((and (eq (point) orig) (not (bobp))(looking-back "[ \.\t\r\n\f]"))
- (skip-chars-backward "=:+-*/&%^><. \t\r\n\f")
- (unless (bobp) (forward-char -1))
- (unless (eq (abs (skip-chars-backward "^=:+-*/&%^><. \t\r\n\f")) 0)
- (py-beginning-of-partial-expression orig erg)))
- ((and (eq (point) orig) (not (bobp)) (looking-back py-partial-expression-looking-regexp))
- (forward-char -1)
- (when (< 0 (abs (skip-chars-backward py-partial-expression-skip-regexp)))
- (setq erg (point)))
- (py-beginning-of-partial-expression orig erg))
- ((looking-at py-partial-expression-looking-regexp)
- (setq erg (point)))
- ((and (eq (point) orig)(not (bobp)))
- (skip-chars-backward " \t\r\n\f")
- (py-beginning-of-partial-expression orig erg))
- (t (unless (and (looking-at "[ \t]*#") (looking-back "^[ \t]*"))(setq erg (point)))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))))
-
-(defalias 'py-forward-partial-expression 'py-end-of-partial-expression)
-(defun py-end-of-partial-expression (&optional orig origline done)
- "Go to the end of a minor python expression.
-
-\".\" operators delimit a minor expression on their level.
-Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference
-Operators however are left aside resp. limit py-expression designed for edit-purposes. "
- (interactive)
- (save-restriction
- (widen)
- (unless (eobp)
- (let*
- ((orig (or orig (point)))
- (origline (or origline (py-count-lines)))
- (pps (if (featurep 'xemacs)
- (parse-partial-sexp (point-min) (point))
- (syntax-ppss)))
- (done done)
- erg
- ;; use by scan-lists
- parse-sexp-ignore-comments)
- (cond
- ((and (empty-line-p)(not done)(not (eobp)))
- (while
- (and (empty-line-p)(not done)(not (eobp)))
- (forward-line 1))
- (py-end-of-partial-expression orig origline done))
- ;; inside string
- ((nth 3 pps)
- (when (looking-at "\"\"\"\\|'''\\|\"\\|'")
- (goto-char (match-end 0)))
- (while
- (and (re-search-forward "[^\\]\"\"\"\\|[^\\]'''\\|[^\\]\"\\|[^\\]'" nil (quote move) 1)
- (nth 3
- (if (featurep 'xemacs)
- (parse-partial-sexp (point-min) (point))
- (syntax-ppss)))))
- (py-end-of-partial-expression orig origline done))
- ;; in comment
- ((nth 4 pps)
- (forward-line 1)
- (py-end-of-partial-expression orig origline done))
- ((and (looking-at "[ \t]*#")(looking-back "^[ \t]*")(not done))
- (while (and (looking-at "[ \t]*#") (forward-line 1)(not (eobp))
- (beginning-of-line)))
- (end-of-line)
- ;; (setq done t)
- (skip-chars-backward " \t\r\n\f")
- (py-end-of-partial-expression orig origline done))
- ((and (nth 1 pps) (<= orig (nth 1 pps)))
- (goto-char (nth 1 pps))(forward-list)
- (point))
- ((and (not done)(ignore-errors (<= orig (nth 2 pps))))
- (goto-char (nth 2 pps))
- (setq done t)
- (skip-chars-forward py-partial-expression-forward-regexp)
- (py-end-of-partial-expression orig origline done))
- ((and (looking-at "\\.")(< orig (point)))
- (point))
- ((and (not done)(looking-at "\\.\\|=\\|:\\|+\\|-\\|*\\|/\\|//\\|&\\|%\\||\\|\^\\|>>\\|<<\\|<\\|<=\\|>\\|>=\\|==\\|!="))
- (goto-char (match-end 0))
- (when (< 0 (skip-chars-forward " \t\r\n\f"))
- (forward-char 1))
- (skip-chars-forward py-partial-expression-forward-regexp)
- (setq done t)
- (py-end-of-partial-expression orig origline done))
- ((and (not done)(looking-at py-partial-expression-looking-regexp)(not (eobp)))
- (skip-chars-forward py-partial-expression-forward-regexp)
- (setq done t)
- (py-end-of-partial-expression orig origline done))
- ((and (not done)(looking-at py-not-partial-expression-regexp)(not (eobp)))
- (skip-chars-forward py-not-partial-expression-skip-regexp)
- (skip-chars-forward py-partial-expression-forward-regexp)
- (setq done t)
- (py-end-of-partial-expression orig origline done))
- ((and (eq (point) orig) (not (eobp)))
- (forward-char 1)
- (py-end-of-partial-expression orig origline done)))
- (unless (eq (point) orig)
- (setq erg (point)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))))
-
-;;; Line
-(defun py-beginning-of-line ()
- "Go to beginning-of-line, return position.
-
-If already at beginning-of-line and not at BOB, go to beginning of previous line. "
- (interactive)
- (let ((erg (unless (bobp)
- (if (bolp)
- (progn
- (forward-line -1)
- (progn (beginning-of-line)(point)))
- (progn (beginning-of-line)(point))))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-end-of-line ()
- "Go to end-of-line, return position.
-
-If already at end-of-line and not at EOB, go to end of next line. "
- (interactive)
- (let ((erg (unless (eobp)
- (if (eolp)
- (progn
- (forward-line 1)
- (progn (end-of-line)(point)))
- (progn (end-of-line)(point))))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-;;; Statement
-(defalias 'py-backward-statement 'py-beginning-of-statement)
-(defalias 'py-previous-statement 'py-beginning-of-statement)
-(defalias 'py-statement-backward 'py-beginning-of-statement)
-(defun py-beginning-of-statement (&optional orig done)
- "Go to the initial line of a simple statement.
-
-For beginning of compound statement use py-beginning-of-block.
-For beginning of clause py-beginning-of-clause.
-
-Referring python program structures see for example:
-http://docs.python.org/reference/compound_stmts.html
-"
- (interactive)
- (unless (bobp)
- (let ((orig (or orig (point)))
- (cui (current-indentation))
- (pps (syntax-ppss))
- (done done)
- erg)
- (cond
- ((empty-line-p)
- (skip-chars-backward " \t\r\n\f")
- (py-beginning-of-statement orig done))
- ((nth 8 pps)
- (goto-char (1- (nth 8 pps)))
- (setq done t)
- (py-beginning-of-statement orig done))
- ((nth 1 pps)
- (goto-char (1- (nth 1 pps)))
- (setq done t)
- (py-beginning-of-statement orig done))
- ((and (not done) (not (eq 0 (skip-chars-backward " \t\r\n\f"))))
- (setq done t)
- (py-beginning-of-statement orig done))
- ((not (eq (current-column) (current-indentation)))
- (back-to-indentation)
- (setq done t)
- (py-beginning-of-statement orig done))
- ((looking-at "[ \t]*#")
- (skip-chars-backward " \t\r\n\f")
- (setq done t)
- (py-beginning-of-statement orig done))
- ((py-continuation-line-p)
- (forward-line -1)
- (setq done t)
- (py-beginning-of-statement orig done)))
- (unless (and (looking-at "[ \t]*#") (looking-back "^[ \t]*"))
- (when (< (point) orig)(setq erg (point))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-go-to-keyword (regexp &optional maxindent)
- "Returns a list, whose car is indentation, cdr position. "
- (let ((orig (point))
- (origline (py-count-lines))
- (maxindent maxindent)
- done erg cui)
- (while (and (not done) (not (bobp)))
- (py-beginning-of-statement)
- (when (and (looking-at regexp)(if maxindent
- (< (current-indentation) maxindent)t))
- (setq erg (point))
- (setq done t)))
- (when erg (setq erg (cons (current-indentation) erg)))
- erg))
-
-;; (defmacro py-go-to-keyword (regexp &optional maxindent)
-;; "Returns a list, whose car is indentation, cdr position. "
-;; `(let ((orig (point))
-;; (origline (py-count-lines))
-;; (maxindent maxindent)
-;; done erg)
-;; (while (and (not done) (not (bobp)))
-;; (py-beginning-of-statement)
-;; (when (and (looking-at ,regexp)(if maxindent
-;; (< (current-indentation) maxindent)t))
-;; (setq erg (point))
-;; (setq done t)))
-;; (when erg (cons (current-indentation) erg))))
-
-(defalias 'py-statement-forward 'py-end-of-statement)
-(defalias 'py-next-statement 'py-end-of-statement)
-(defalias 'py-forward-statement 'py-end-of-statement)
-(defun py-end-of-statement (&optional orig done)
- "Go to the last char of current statement.
-
-To go just beyond the final line of the current statement, use `py-down-statement-lc'. "
- (interactive)
- (unless (eobp)
- (let ((pps (syntax-ppss))
- (orig (point))
- ;; use by scan-lists
- parse-sexp-ignore-comments erg)
- (cond
- ((and (not done) (< 0 (skip-chars-forward " \t\r\n\f")))
- (end-of-line)
- (py-beginning-of-comment)
- (skip-chars-backward " \t\r\n\f" (line-beginning-position))
- (if (eq (point) orig)
- (progn
- (end-of-line)
- (forward-comment 99999)
- (py-end-of-statement orig done))
- (setq done t)
- (py-end-of-statement orig done)))
- ((nth 1 pps)
- (when (< orig (point))
- (setq orig (point)))
- (goto-char (nth 1 pps))
- (let ((parse-sexp-ignore-comments t))
- (if (ignore-errors (forward-list))
- (progn
- (when (looking-at ":[ \t]*$")
- (forward-char 1))
- (setq done t)
- (end-of-line)
- (skip-chars-backward " \t\r\n\f")
- (py-end-of-statement orig done))
- (goto-char orig))))
- ((and (nth 8 pps)(nth 3 pps))
- (goto-char (nth 8 pps))
- (if (looking-at "\"\"\"\\|'''")
- (goto-char (match-end 0))
- (forward-char 1))
- (while (and (re-search-forward (match-string-no-properties 0) nil (quote move) 1)
- (nth 3 (syntax-ppss))))
- (setq done t)
- (end-of-line)
- (skip-chars-backward " \t\r\n\f" (line-beginning-position))
- (py-end-of-statement orig done))
- ;; in comment
- ((nth 4 pps)
- (if (eobp)
- nil
- (setq done t)
- (forward-comment 99999)
- (end-of-line)
- (skip-chars-backward " \t\r\n\f" (line-beginning-position))
- (py-beginning-of-comment)
- (skip-chars-backward " \t\r\n\f")
- (py-end-of-statement orig done)))
- ((looking-at "#")
- ;; (skip-chars-forward "#")
- (end-of-line)
- (forward-comment 99999)
- (setq done t)
- (end-of-line)
- (skip-chars-backward " \t\r\n\f")
- (py-beginning-of-comment)
- (skip-chars-backward " \t\r\n\f")
- (py-end-of-statement orig done))
- ((py-current-line-backslashed-p)
- (skip-chars-forward " \t\r\n\f")
- (end-of-line)
- (skip-chars-backward " \t\r\n\f")
- (py-beginning-of-comment)
- (skip-chars-backward " \t\r\n\f")
- (setq done t)
- (py-end-of-statement orig done))
- ((and (not done) (eq (point) orig))
- (end-of-line)
- (skip-chars-backward " \t\r\n\f")
- (py-beginning-of-comment)
- (skip-chars-backward " \t\r\n\f")
- (setq done t)
- (py-end-of-statement orig done)))
- (unless
- (or
- (eq (point) orig)
- (eq 0 (current-column)))
- (setq erg (point)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-goto-statement-below ()
- "Goto beginning of next statement. "
- (interactive)
- (let ((orig (point))
- (erg (py-end-of-statement)))
- (py-beginning-of-statement)
- (when (< (point) orig)
- (goto-char erg)
- (py-end-of-statement)
- (py-beginning-of-statement))))
-
-;;; Mark forms
-(defun py-mark-base (form &optional py-mark-decorators)
- (let* ((begform (intern-soft (concat "py-beginning-of-" form)))
- (endform (intern-soft (concat "py-end-of-" form)))
- (begcheckform (intern-soft (concat "py-beginning-of-" form "-p")))
- (orig (point))
- beg end erg)
- (setq beg (if
- (setq beg (funcall begcheckform))
- beg
- (funcall begform)))
- (when py-mark-decorators
- (save-excursion
- (when (setq erg (py-beginning-of-decorator))
- (setq beg erg))))
- (setq end (funcall endform))
- (push-mark beg t t)
- (unless end (when (< beg (point))
- (setq end (point))))
- (when (interactive-p) (message "%s %s" beg end))
- (cons beg end)))
-
-(defun py-mark-paragraph ()
- "Mark paragraph at point.
-
-Returns beginning and end positions of marked area, a cons. "
- (interactive)
- (let (erg)
- (setq erg (py-mark-base "paragraph"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-mark-block ()
- "Mark block at point.
-
-Returns beginning and end positions of marked area, a cons. "
- (interactive)
- (let (erg)
- (setq erg (py-mark-base "block"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-mark-clause ()
- "Mark clause at point.
-
-Returns beginning and end positions of marked area, a cons. "
- (interactive)
- (let (erg)
- (setq erg (py-mark-base "clause"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-mark-block-or-clause ()
- "Mark block-or-clause at point.
-
-Returns beginning and end positions of marked area, a cons. "
- (interactive)
- (let (erg)
- (setq erg (py-mark-base "block-or-clause"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-mark-def (&optional arg)
- "Mark def at point.
-
-With \\[universal argument] or `py-mark-decorators' set to `t', decorators are marked too.
-Returns beginning and end positions of marked area, a cons. "
- (interactive "P")
- (let ((py-mark-decorators (or arg py-mark-decorators))
- erg)
- (py-mark-base "def" py-mark-decorators)
- (exchange-point-and-mark)
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-mark-class (&optional arg)
- "Mark class at point.
-
-With \\[universal argument] or `py-mark-decorators' set to `t', decorators are marked too.
-Returns beginning and end positions of marked area, a cons. "
- (interactive "P")
- (let ((py-mark-decorators (or arg py-mark-decorators))
- erg)
- (py-mark-base "class" py-mark-decorators)
- (exchange-point-and-mark)
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-mark-def-or-class (&optional arg)
- "Mark def-or-class at point.
-
-With \\[universal argument] or `py-mark-decorators' set to `t', decorators are marked too.
-Returns beginning and end positions of marked area, a cons. "
- (interactive "P")
- (let ((py-mark-decorators (or arg py-mark-decorators))
- erg)
- (py-mark-base "def-or-class" py-mark-decorators)
- (exchange-point-and-mark)
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-mark-line ()
- "Mark line at point.
-
-Returns beginning and end positions of marked area, a cons. "
- (interactive)
- (let (erg)
- (setq erg (py-mark-base "line"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-mark-statement ()
- "Mark statement at point.
-
-Returns beginning and end positions of marked area, a cons. "
- (interactive)
- (let (erg)
- (setq erg (py-mark-base "statement"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-mark-expression ()
- "Mark expression at point.
-
-Returns beginning and end positions of marked area, a cons. "
- (interactive)
- (let (erg)
- (setq erg (py-mark-base "expression"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-mark-partial-expression ()
- "Mark partial-expression at point.
-
-Returns beginning and end positions of marked area, a cons. "
- (interactive)
- (let (erg)
- (setq erg (py-mark-base "partial-expression"))
- (exchange-point-and-mark)
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-;;; Decorator
-(defun py-beginning-of-decorator ()
- "Go to the beginning of a decorator.
-
-Returns position if succesful "
- (interactive)
- (back-to-indentation)
- (while (and (not (looking-at "@\\w+"))(not (empty-line-p))(not (bobp))(forward-line -1))
- (back-to-indentation))
- (let ((erg (when (looking-at "@\\w+")(match-beginning 0))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-end-of-decorator ()
- "Go to the end of a decorator.
-
-Returns position if succesful "
- (interactive)
- (let ((orig (point)) erg)
- (unless (looking-at "@\\w+")
- (setq erg (py-beginning-of-decorator)))
- (when erg
- (if
- (re-search-forward py-def-or-class-re nil t)
- (progn
- (back-to-indentation)
- (skip-chars-backward " \t\r\n\f")
- (py-leave-comment-or-string-backward)
- (skip-chars-backward " \t\r\n\f")
- (setq erg (point)))
- (goto-char orig)
- (end-of-line)
- (skip-chars-backward " \t\r\n\f")
- (when (ignore-errors (goto-char (py-in-list-p)))
- (forward-list))
- (when (< orig (point))
- (setq erg (point))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-;;; Copying
-(defalias 'py-expression 'py-copy-expression)
-(defun py-copy-expression ()
- "Mark expression at point.
-
-Returns beginning and end positions of marked area, a cons. "
- (interactive)
- (let ((erg (py-mark-base "expression")))
- (kill-new (buffer-substring-no-properties (car erg) (cdr erg)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defalias 'py-partial-expression 'py-copy-partial-expression)
-(defun py-copy-partial-expression ()
- "Mark partial-expression at point.
-
-Returns beginning and end positions of marked area, a cons.
-
-\".\" operators delimit a partial-expression expression on it's level, that's the difference to compound expressions.
-
-Given the function below, `py-partial-expression'
-called at pipe symbol would copy and return:
-
-def usage():
- print \"\"\"Usage: %s
- ....\"\"\" % (
- os.path.basename(sys.argv[0]))
-------------|-------------------------
-==> path
-
- os.path.basename(sys.argv[0]))
-------------------|-------------------
-==> basename(sys.argv[0]))
-
- os.path.basename(sys.argv[0]))
---------------------------|-----------
-==> sys
-
- os.path.basename(sys.argv[0]))
-------------------------------|-------
-==> argv[0]
-
-while `py-expression' would copy and return
-
-\(
- os.path.basename(sys.argv[0]))
-
-\;;;;;
-
-Also for existing commands a shorthand is defined:
-
-\(defalias 'py-statement 'py-copy-statement)"
-
- (interactive)
- (let ((erg (py-mark-base "partial-expression")))
- (kill-new (buffer-substring-no-properties (car erg) (cdr erg)))))
-
-(defalias 'py-statement 'py-copy-statement)
-(defun py-copy-statement ()
- "Mark statement at point.
-
-Returns beginning and end positions of marked area, a cons. "
- (interactive)
- (let ((erg (py-mark-base "statement")))
- (kill-new (buffer-substring-no-properties (car erg) (cdr erg)))))
-
-(defalias 'py-block 'py-copy-block)
-(defun py-copy-block ()
- "Mark block at point.
-
-Returns beginning and end positions of marked area, a cons. "
- (interactive)
- (let ((erg (py-mark-base "block")))
- (kill-new (buffer-substring-no-properties (car erg) (cdr erg)))))
-
-(defalias 'py-block-or-clause 'py-copy-block-or-clause)
-(defun py-copy-block-or-clause ()
- "Mark block-or-clause at point.
-
-Returns beginning and end positions of marked area, a cons. "
- (interactive)
- (let ((erg (py-mark-base "block-or-clause")))
- (kill-new (buffer-substring-no-properties (car erg) (cdr erg)))))
-
-(defalias 'py-def 'py-copy-def)
-(defun py-copy-def (&optional arg)
- "Mark def at point.
-
-With universal argument or `py-mark-decorators' set to `t' decorators are copied too.
-Returns beginning and end positions of marked area, a cons."
-
- (interactive "P")
- (let ((py-mark-decorators (or arg py-mark-decorators))
- (erg (py-mark-base "def" py-mark-decorators)))
- (kill-new (buffer-substring-no-properties (car erg) (cdr erg)))))
-
-(defun py-copy-def-or-class (&optional arg)
- "Mark def-or-class at point.
-
-With universal argument or `py-mark-decorators' set to `t' decorators are copied too.
-Returns beginning and end positions of marked area, a cons."
- (interactive "P")
- (let ((py-mark-decorators (or arg py-mark-decorators))
- (erg (py-mark-base "def-or-class" py-mark-decorators)))
- (kill-new (buffer-substring-no-properties (car erg) (cdr erg)))))
-
-(defalias 'py-class 'py-copy-class)
-(defun py-copy-class (&optional arg)
- "Mark class at point.
-
-With universal argument or `py-mark-decorators' set to `t' decorators are copied too.
-Returns beginning and end positions of marked area, a cons."
-
- (interactive "P")
- (let ((py-mark-decorators (or arg py-mark-decorators))
- (erg (py-mark-base "class" py-mark-decorators)))
- (kill-new (buffer-substring-no-properties (car erg) (cdr erg)))))
-
-(defalias 'py-clause 'py-copy-clause)
-(defun py-copy-clause ()
- "Mark clause at point.
- Returns beginning and end positions of marked area, a cons. "
- (interactive)
- (let ((erg (py-mark-base "clause")))
- (kill-new (buffer-substring-no-properties (car erg) (cdr erg)))))
-
-;;; Deleting
-(defun py-kill-expression ()
- "Delete expression at point.
- Stores data in kill ring. Might be yanked back using `C-y'. "
- (interactive)
- (let ((erg (py-mark-base "expression")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-partial-expression ()
- "Delete partial-expression at point.
- Stores data in kill ring. Might be yanked back using `C-y'.
-
-\".\" operators delimit a partial-expression expression on it's level, that's the difference to compound expressions."
- (interactive)
- (let ((erg (py-mark-base "partial-expression")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-statement ()
- "Delete statement at point.
-
-Stores data in kill ring. Might be yanked back using `C-y'. "
- (interactive "*")
- (let ((erg (py-mark-base "statement")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-block ()
- "Delete block at point.
-
-Stores data in kill ring. Might be yanked back using `C-y'. "
- (interactive "*")
- (let ((erg (py-mark-base "block")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-block-or-clause ()
- "Delete block-or-clause at point.
-
-Stores data in kill ring. Might be yanked back using `C-y'. "
- (interactive "*")
- (let ((erg (py-mark-base "block-or-clause")))
- (kill-region (region-beginning) (region-end))))
-
-(defun py-kill-def-or-class ()
- "Delete def-or-class at point.
-
-Stores data in kill ring. Might be yanked back using `C-y'. "
- (interactive "*")
- (let ((erg (py-mark-base "def-or-class")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-class ()
- "Delete class at point.
-
-Stores data in kill ring. Might be yanked back using `C-y'. "
- (interactive "*")
- (let ((erg (py-mark-base "class")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-def ()
- "Delete def at point.
-
-Stores data in kill ring. Might be yanked back using `C-y'. "
- (interactive "*")
- (let ((erg (py-mark-base "def")))
- (kill-region (car erg) (cdr erg))))
-
-(defun py-kill-clause ()
- "Delete clause at point.
-
-Stores data in kill ring. Might be yanked back using `C-y'. "
- (interactive "*")
- (let ((erg (py-mark-base "clause")))
- (kill-region (car erg) (cdr erg))))
-
-;;; Helper functions
-(defun py-warn-tmp-files-left ()
- "Detect and warn about file of form \"py11046IoE\" in py-temp-directory. "
- (let ((erg1 (file-readable-p (concat py-temp-directory (char-to-string py-separator-char) (car (directory-files py-temp-directory nil "py[[:alnum:]]+$"))))))
- (when (and py-verbose-p erg1)
- (message "py-warn-tmp-files-left: %s ?" (concat py-temp-directory (char-to-string py-separator-char) (car (directory-files py-temp-directory nil "py[[:alnum:]]*$")))))))
-
-(defun py-forward-line (&optional arg)
- "Goes to end of line after forward move.
-
-Travels right-margin comments. "
- (interactive "p")
- (let ((arg (or arg 1)))
- (forward-line arg)
- (end-of-line)
- (skip-chars-backward " \t")
- (py-beginning-of-comment)
- (skip-chars-backward " \t")))
-
-(defun py-go-to-beginning-of-comment ()
- "Go to the beginning of current line's comment, if any.
-
-From a programm use `py-beginning-of-comment' instead "
- (interactive)
- (let ((erg (py-beginning-of-comment)))
- (when (and py-verbose-p (interactive-p))
- (message "%s" erg))))
-
-(defun py-beginning-of-comment ()
- "Go to the beginning of current line's comment, if any.
-
-Returns position if succesful. "
- (save-restriction
- (widen)
- (let ((pps
- (if (featurep 'xemacs)
- (parse-partial-sexp (line-beginning-position) (point))
- (syntax-ppss))))
- (when (nth 4 pps)
- (goto-char
- (nth 8 pps))))))
-
-(defun py-clause-lookup-keyword (regexp arg &optional indent orig origline)
- "Returns a list, whose car is indentation, cdr position. "
- (let* ((orig (or orig (point)))
- (origline (or origline (py-count-lines)))
- (stop (if (< 0 arg)'(eobp)'(bobp)))
- (function (if (< 0 arg) 'py-end-of-statement 'py-beginning-of-statement))
- (count 1)
- (maxindent (cond (indent indent)
- ((< (py-count-lines) origline)
- (current-indentation))
- (t 0)))
- (complement-re
- (cond ((or (string-match "finally" regexp)
- (string-match "except" regexp))
- py-try-re)
- ((string-match "elif" regexp)
- py-if-re)
- ((string-match "else" regexp)
- py-minor-block-re)))
- (first t)
- erg done strict)
- (while (and (not (eval stop))
- (< 0 count)
- (or done (setq erg (funcall function))))
- (setq done nil)
- (when (and first (< maxindent (current-indentation)))
- (setq maxindent (current-indentation))
- (setq first nil))
- (when (if strict
- (< (current-indentation) maxindent)
- (<= (current-indentation) maxindent))
- (unless (looking-at py-block-or-clause-re)
- (setq maxindent (current-indentation)))
- ;; (message "%s %s" count indent)
- ;; nesting
- (cond
- ((and (looking-at "\\_[: \n\t]")(save-match-data (string-match regexp "finally")))
- (setq indent (current-indentation))
- (while
- (and
- (not (eval stop))
- (funcall function)
- (setq done t)
- (not (and (eq indent (current-indentation)) (looking-at "try"))))))
- ;; ((and (looking-at "\\[: \n\t]")(save-match-data (string-match "else" regexp)))
- ;; (setq indent (current-indentation))
- ;; (setq count (1+ count))
- ;; (while
- ;; (and
- ;; (not (eval stop))
- ;; (funcall function)
- ;; (setq done t)
- ;; (not (and (eq indent (current-indentation)) (looking-at "try\\|if"))))))
- ((and (looking-at "\\[: \n\t]")(save-match-data (string-match "else" regexp)))
- (setq indent (current-indentation))
- (setq count (1+ count))
- (while
- (and
- (not (eval stop))
- (funcall function)
- (setq done t)
- (not (and (eq indent (current-indentation)) (looking-at "try\\|if"))))))
- ((and (looking-at "\\_[: \n\t]")(save-match-data (string-match "else" regexp)))
- (setq indent (current-indentation))
- (setq count (1+ count))
- (while
- (and
- (not (eval stop))
- (funcall function)
- (setq done t)
- (not (and (eq indent (current-indentation)) (looking-at "try\\|if"))))))
- ((and (looking-at "\\_[ \n\t]")(save-match-data (string-match "elif" regexp)))
- (setq indent (current-indentation))
- (while
- (and
- (not (eval stop))
- (funcall function)
- (setq done t)
- ;; doesn't mean nesting yet
- (setq count (1- count))
- (not (and (eq indent (current-indentation)) (looking-at "if"))))))
- ((and (looking-at complement-re)(<= (current-indentation) maxindent))
- (setq count (1- count)))
- (t (cond ((and (string-match "except" regexp)(looking-at py-block-re))
- (setq count (1- count)))
- ((and (string-match "else" regexp)(looking-at "except"))
- (current-indentation))
- (t
- (setq strict t)
- ))))))
- (when erg
- (if (looking-at py-def-or-class-re)
- (setq erg (cons (+ (current-indentation) py-indent-offset) erg))
- (setq erg (cons (current-indentation) erg))))
- erg))
-
-(defun py-leave-comment-or-string-backward (&optional pos)
- "If inside a comment or string, leave it backward. "
- (interactive)
- (let ((pps
- (if (featurep 'xemacs)
- (parse-partial-sexp (point-min) (point))
- (syntax-ppss))))
- (when (nth 8 pps)
- (goto-char (1- (nth 8 pps))))))
-
-(defun py-beginning-of-list-pps (&optional iact last ppstart orig done)
- "Go to the beginning of a list.
-Optional ARG indicates a start-position for `parse-partial-sexp'.
-Return beginning position, nil if not inside."
- (interactive "p")
- (let* ((orig (or orig (point)))
- (ppstart (or ppstart (re-search-backward "^[a-zA-Z]" nil t 1) (point-min)))
- erg)
- (unless done (goto-char orig))
- (setq done t)
- (if
- (setq erg (nth 1 (if (featurep 'xemacs)
- (parse-partial-sexp ppstart (point))
- (syntax-ppss))))
- (progn
- (setq last erg)
- (goto-char erg)
- (py-beginning-of-list-pps iact last ppstart orig done))
- (when iact (message "%s" last))
- last)))
-
-(when (featurep 'thing-at-point-utils)
- (defun py-beginning-of-list (&optional iact orig limit done last)
- "Go to beginning of any parentized, braced or bracketed expression in statement. "
- (interactive "p")
- (save-restriction
- (let ((orig (or orig (point)))
- (done done)
- (limit (or limit (re-search-backward "^[a-zA-Z]" nil t 1)))
- (last last))
- (unless (or done (not limit)) (narrow-to-region limit (point-max)))
- (setq done t)
- (goto-char orig)
- (let* ((pt (car-safe (ar-in-parentized-p-atpt)))
- (br (car-safe (ar-in-braced-p-atpt)))
- (bk (car-safe (ar-in-bracketed-p-atpt)))
- (erg (car (sort (delq nil (list pt br bk)) '<))))
- (if erg
- (progn
- (goto-char (1- erg))
- (setq last erg)
- (py-beginning-of-list iact (1- erg) limit done last))
- (when last
- (goto-char last))
- (when iact (message "%s" last))
- last)))))
-
- (defun py-end-of-list (&optional iact orig limit done last)
- "Go to end of any parentized, braced or bracketed expression in statement. "
- (interactive "p")
- (save-restriction
- (let ((orig (or orig (point)))
- (done done)
- (limit (or limit (re-search-backward "^[a-zA-Z]" nil t 1)))
- (last last))
- (unless (or done (not limit)) (narrow-to-region limit (point-max)))
- (setq done t)
- (goto-char orig)
- (let* ((pt (car-safe (ar-in-parentized-p-atpt)))
- (br (car-safe (ar-in-braced-p-atpt)))
- (bk (car-safe (ar-in-bracketed-p-atpt)))
- (erg (car (sort (delq nil (list pt br bk)) '<))))
- (if erg
- (progn
- (goto-char (1- erg))
- (setq last erg)
- (py-end-of-list iact (1- erg) limit done last))
- (when last
- (goto-char last)
- (match-paren)
- (setq last (1+ (point)))
- (when iact (message "%s" last))
- last)))))))
-
-;;; Down
-(defun py-down-block-lc ()
- "Goto beginning of line following end of block.
-
-Returns position reached, if successful, nil otherwise.
-
-\"-lc\" stands for \"left-corner\" - a complementary command travelling left, whilst `py-end-of-block' stops at right corner.
-
-See also `py-down-block': down from current definition to next beginning of block below. "
- (interactive)
- (let ((erg (py-end-of-block)))
- (when erg
- (unless (eobp)
- (forward-line 1)
- (beginning-of-line)
- (setq erg (point))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-down-clause-lc ()
- "Goto beginning of line following end of clause.
-
-Returns position reached, if successful, nil otherwise.
-
-\"-lc\" stands for \"left-corner\" - a complementary command travelling left, whilst `py-end-of-clause' stops at right corner.
-
-See also `py-down-clause': down from current definition to next beginning of clause below. "
- (interactive)
- (let ((erg (py-end-of-clause)))
- (when erg
- (unless (eobp)
- (forward-line 1)
- (beginning-of-line)
- (setq erg (point))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-down-def-lc ()
- "Goto beginning of line following end of def.
-
-Returns position reached, if successful, nil otherwise.
-
-\"-lc\" stands for \"left-corner\" - a complementary command travelling left, whilst `py-end-of-def' stops at right corner.
-
-See also `py-down-def': down from current definition to next beginning of def below. "
- (interactive)
- (let ((erg (py-end-of-def)))
- (when erg
- (unless (eobp)
- (forward-line 1)
- (beginning-of-line)
- (setq erg (point))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-down-class-lc ()
- "Goto beginning of line following end of class.
-
-Returns position reached, if successful, nil otherwise.
-
-\"-lc\" stands for \"left-corner\" - a complementary command travelling left, whilst `py-end-of-class' stops at right corner.
-
-See also `py-down-class': down from current definition to next beginning of class below. "
- (interactive)
- (let ((erg (py-end-of-class)))
- (when erg
- (unless (eobp)
- (forward-line 1)
- (beginning-of-line)
- (setq erg (point))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-down-statement-lc ()
- "Goto beginning of line following end of statement.
-
-Returns position reached, if successful, nil otherwise.
-
-\"-lc\" stands for \"left-corner\" - a complementary command travelling left, whilst `py-end-of-statement' stops at right corner.
-
-See also `py-down-statement': down from current definition to next beginning of statement below. "
- (interactive)
- (let ((erg (py-end-of-statement)))
- (when erg
- (unless (eobp)
- (forward-line 1)
- (beginning-of-line)
- (setq erg (point))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-down-statement ()
- "Go to the beginning of next statement below in buffer.
-
-Returns indentation if statement found, nil otherwise. "
- (interactive)
- (let* ((orig (point))
- erg)
- (if (eobp)
- (setq erg nil)
- (progn
- (when (setq erg (py-end-of-statement))
- (if (< orig (setq erg (py-beginning-of-statement-position)))
- (goto-char erg)
- (setq erg (py-end-of-statement))
- (when erg
- (py-beginning-of-statement))))
- (when erg
- (setq erg (current-column)))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-down-block ()
- "Go to the beginning of next block below in buffer.
-
-Returns indentation if block found, nil otherwise. "
- (interactive)
- (let* ((orig (point))
- erg)
- (if (eobp)
- (setq erg nil)
- (while (and (re-search-forward py-block-re nil (quote move))
- (nth 8 (if (featurep 'xemacs)
- (parse-partial-sexp ppstart (point))
- (syntax-ppss)))))
- (back-to-indentation)
- (when (looking-at py-block-re) (setq erg (current-indentation)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg)))
-
-(defun py-down-clause ()
- "Go to the beginning of next clause below in buffer.
-
-Returns indentation if clause found, nil otherwise. "
- (interactive)
- (let* ((orig (point))
- erg)
- (if (eobp)
- (setq erg nil)
- (while (and (setq erg (py-down-statement))(not (looking-at py-clause-re)))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-down-block-or-clause ()
- "Go to the beginning of next block-or-clause below in buffer.
-
-Returns indentation if block-or-clause found, nil otherwise. "
- (interactive)
- (let* ((orig (point))
- erg)
- (if (eobp)
- (setq erg nil)
- (while (and (setq erg (py-down-statement))(not (looking-at py-block-or-clause-re)))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-down-def ()
- "Go to the beginning of next def below in buffer.
-
-Returns indentation if def found, nil otherwise. "
- (interactive)
- (let* ((orig (point))
- erg)
- (if (eobp)
- (setq erg nil)
- (while (and (setq erg (py-down-statement))(not (looking-at py-def-re)))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-down-class ()
- "Go to the beginning of next class below in buffer.
-
-Returns indentation if class found, nil otherwise. "
- (interactive)
- (let* ((orig (point))
- erg)
- (if (eobp)
- (setq erg nil)
- (while (and (setq erg (py-down-statement))(not (looking-at py-class-re)))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-down-def-or-class ()
- "Go to the beginning of next def-or-class below in buffer.
-
-Returns indentation if def-or-class found, nil otherwise. "
- (interactive)
- (let* ((orig (point))
- erg)
- (if (eobp)
- (setq erg nil)
- (while (and (setq erg (py-down-statement))(not (looking-at py-def-or-class-re)))))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-;; Py-down commands end
-
-;; ripped from cc-mode
-(defun py-forward-into-nomenclature (&optional arg iact)
- "Move forward to end of a nomenclature section or word.
-
-With \\[universal-argument] (programmatically, optional argument ARG), do it that many times.
-
-A `nomenclature' is a fancy way of saying AWordWithMixedCaseNotUnderscores."
- (interactive "p")
- (or arg (setq arg 1))
- (let ((case-fold-search nil)
- (orig (point))
- erg)
- (if (> arg 0)
- (while (and (not (eobp)) (> arg 0))
- ;; (setq erg (re-search-forward "\\(\\W+[_[:lower:][:digit:]ß]+\\)" nil t 1))
- (cond
- ((or (not (eq 0 (skip-chars-forward "[[:blank:][:punct:]\n\r]")))
- (not (eq 0 (skip-chars-forward "_"))))
- (when (or
- (< 1 (skip-chars-forward "[:upper:]"))
- (not (eq 0 (skip-chars-forward "[[:lower:][:digit:]ß]")))
- (not (eq 0 (skip-chars-forward "[[:lower:][:digit:]]"))))
- (setq arg (1- arg))))
- ((or
- (< 1 (skip-chars-forward "[:upper:]"))
- (not (eq 0 (skip-chars-forward "[[:lower:][:digit:]ß]")))
- (not (eq 0 (skip-chars-forward "[[:lower:][:digit:]]"))))
- (setq arg (1- arg)))))
- (while (and (not (bobp)) (< arg 0))
- (when (not (eq 0 (skip-chars-backward "[[:blank:][:punct:]\n\r\f_]")))
-
- (forward-char -1))
- (or
- (not (eq 0 (skip-chars-backward "[:upper:]")))
- (not (eq 0 (skip-chars-backward "[[:lower:][:digit:]ß]")))
- (skip-chars-backward "[[:lower:][:digit:]ß]"))
- (setq arg (1+ arg))))
- (if (< (point) orig)
- (progn
- (when (looking-back "[[:upper:]]")
- ;; (looking-back "[[:blank:]]"
- (forward-char -1))
- (if (looking-at "[[:alnum:]ß]")
- (setq erg (point))
- (setq erg nil)))
- (if (and (< orig (point)) (not (eobp)))
- (setq erg (point))
- (setq erg nil)))
- (when (and py-report-position-p (or iact (interactive-p))) (message "%s" erg))
- erg))
-
-(defun py-backward-into-nomenclature (&optional arg)
- "Move backward to beginning of a nomenclature section or word.
-
-With optional ARG, move that many times. If ARG is negative, move
-forward.
-
-A `nomenclature' is a fancy way of saying AWordWithMixedCaseNotUnderscores."
- (interactive "p")
- (setq arg (or arg 1))
- (py-forward-into-nomenclature (- arg) arg))
-
-(defalias 'py-match-paren 'match-paren)
-
-(defun match-paren (&optional arg)
- "Go to the matching brace, bracket or parenthesis if on its counterpart.
-
-Otherwise insert the character, the key is assigned to, here `%'.
-With universal arg \C-u insert a `%'. "
- (interactive "P")
- (let ((parse-sexp-ignore-comments t))
- (if arg
- (self-insert-command (if (numberp arg) arg 1))
- (cond
- ((and (not match-paren-no-use-syntax-pps) (looking-at "\\s("))
- (forward-list 1)
- (backward-char 1))
- ((and (not match-paren-no-use-syntax-pps)(looking-at "\\s)"))
- (forward-char 1) (backward-list 1))
- ;; if match-paren-no-syntax-pps
- ((looking-at "(")
- (ar-parentized-end-atpt))
- ((looking-at ")")
- (ar-parentized-beginning-atpt))
- ((looking-at "\\\[")
- (ar-bracketed-end-atpt))
- ((looking-at "]")
- (ar-bracketed-beginning-atpt))
- ((looking-at "{")
- (ar-braced-end-atpt))
- ((looking-at "}")
- (ar-braced-beginning-atpt))
- (t (self-insert-command 1))))))
-
-(defun py-travel-current-indent (indent)
- "Moves down until clause is closed, i.e. current indentation is reached.
-
-Takes a list, INDENT and START position. "
- (let (last)
- (while (and (setq last (point))(not (eobp))(py-end-of-statement)
- (<= indent (progn (save-excursion (py-beginning-of-statement)(current-indentation))))))
- (when last (goto-char last))
- last))
-
-;;; python-mode-execute.el
-(defun py-toggle-execute-keep-temporary-file-p ()
- "Toggle py-execute-keep-temporary-file-p "
- (interactive)
- (setq py-execute-keep-temporary-file-p
- (not py-execute-keep-temporary-file-p))
- (when (and py-verbose-p (interactive-p)) (message "py-execute-keep-temporary-file-p: %s" py-execute-keep-temporary-file-p)))
-
-(defun py-comint-output-filter-function (string)
- "Watch output for Python prompt and exec next file waiting in queue.
-This function is appropriate for `comint-output-filter-functions'."
- ;; TBD: this should probably use split-string
- (when (and (or (string-equal string ">>> ")
- (and (>= (length string) 5)
- (string-equal (substring string -5) "\n>>> ")))
- (or (setq py-shell-input-lines nil)
- py-file-queue))
- (pop-to-buffer (current-buffer))
- (ignore-errors (delete-file (car py-file-queue)))
- (setq py-file-queue (cdr py-file-queue))
- (if py-file-queue
- (let ((pyproc (get-buffer-process (current-buffer))))
- (py-execute-file pyproc (car py-file-queue))))))
-
-(defun py-guess-default-python ()
- "Defaults to \"python\", if guessing didn't succeed. "
- (interactive)
- (let* ((cmd (or py-shell-name (py-choose-shell) "python"))
- (erg (if py-edit-only-p cmd (executable-find cmd))))
- (when (interactive-p)
- (if erg
- (message "%s" cmd)
- (message "%s" "Could not detect Python on your system")))))
-
-(defun py-separator-char ()
- "Return the file-path separator char from current machine.
-
-When `py-separator-char' is customized, its taken.
-Returns char found. "
- (let ((erg (cond ((characterp py-separator-char)
- (char-to-string py-separator-char))
- ;; epd hack
- ((and
- (string-match "[Ii][Pp]ython" py-shell-name)
- (string-match "epd\\|EPD" py-shell-name))
- (setq erg (shell-command-to-string (concat py-shell-name " -c \"import os; print(os.sep)\"")))
- (setq erg (replace-regexp-in-string "\n" "" erg))
- (when (string-match "^$" erg)
- (setq erg (substring erg (string-match "^$" erg)))))
- (t (setq erg (shell-command-to-string (concat py-shell-name " -W ignore" " -c \"import os; print(os.sep)\"")))))))
- (replace-regexp-in-string "\n" "" erg)))
-
-(unless py-separator-char (setq py-separator-char (py-separator-char)))
-
-(defun py-process-name (&optional name dedicated nostars sepchar)
- "Return the name of the running Python process, `get-process' willsee it. "
- (let* ((sepchar (or sepchar (char-to-string py-separator-char)))
- (thisname (if name
- (if (string-match sepchar name)
- (substring name (progn (string-match (concat "\\(.+\\)" sepchar "\\(.+\\)$") name) (match-beginning 2)))
-
- name)
- (substring py-shell-name (or (string-match (concat sepchar ".+$") py-shell-name) 0))))
- (nname (cond (dedicated
- (make-temp-name (concat thisname "-")))
- ;; ((string-match "\*" (buffer-name))
- ;; (replace-regexp-in-string "\*" "" (buffer-name)))
- (t thisname)))
- (erg (cond ((or (string-match "ipython" nname)
- (string-match "IPython" nname))
- "IPython")
- (nname))))
- (unless (or nostars (string-match "^\*" erg))(setq erg (concat "*" erg "*")))
- erg))
-
-
-(defvar ipython-completion-command-string nil
- "Either ipython0.10-completion-command-string or ipython0.11-completion-command-string.
-
-ipython0.11-completion-command-string also covers version 0.12")
-;; (make-variable-buffer-local 'ipython-completion-command-string)
-
-(defvar ipython0.10-completion-command-string
- "print(';'.join(__IP.Completer.all_completions('%s'))) #PYTHON-MODE SILENT\n"
- "The string send to ipython to query for all possible completions")
-
-;; (setq ipython0.10-completion-command-string "print(';'.join(__IP.Completer.all_completions('%s'))) #PYTHON-MODE SILENT\n")
-
-(defvar ipython0.11-completion-command-string
- "print(';'.join(get_ipython().Completer.all_completions('%s'))) #PYTHON-MODE SILENT\n"
- "The string send to ipython to query for all possible completions")
-
-;; from ipython.el
-(defun py-dirstack-hook ()
- ;; the following is to synchronize dir-changes
- (make-local-variable 'shell-dirstack)
- (setq shell-dirstack nil)
- (make-local-variable 'shell-last-dir)
- (setq shell-last-dir nil)
- (make-local-variable 'shell-dirtrackp)
- (setq shell-dirtrackp t)
- (add-hook 'comint-input-filter-functions 'shell-directory-tracker nil t))
-
-(defun py-set-ipython-completion-command-string (&optional pyshellname)
- "Set and return `ipython-completion-command-string'. "
- (interactive)
- (let* ((pyshellname (or pyshellname py-shell-name))
- (ipython-version
- (when (string-match "ipython" pyshellname)
- (string-to-number (substring (shell-command-to-string (concat pyshellname " -V")) 2 -1)))))
- (when ipython-version
- (setq ipython-completion-command-string (if (< ipython-version 11) ipython0.10-completion-command-string ipython0.11-completion-command-string))
- ipython-completion-command-string)))
-
-(defalias 'py-dedicated-shell 'py-shell-dedicated)
-(defun py-shell-dedicated (&optional argprompt)
- "Start an interactive Python interpreter in another window.
-
-With optional \\[universal-argument] user is prompted by
-`py-choose-shell' for command and options to pass to the Python
-interpreter.
-"
- (interactive "P")
- (py-shell argprompt t))
-
-(defun py-buffer-name-prepare (name &optional sepchar dedicated)
- "Return an appropriate name to display in modeline.
-SEPCHAR is the file-path separator of your system. "
- (let ((sepchar (or sepchar (char-to-string py-separator-char)))
- prefix erg suffix)
- (when (string-match (regexp-quote sepchar) name)
- (unless py-modeline-acronym-display-home-p
- (when (string-match (concat "^" (expand-file-name "~")) name)
- (setq name (replace-regexp-in-string (concat "^" (expand-file-name "~")) "" name))))
- (save-match-data
- (setq liste (split-string name sepchar)))
- (dolist (ele liste)
- (unless (string= "" ele)
- (setq prefix (concat prefix (char-to-string (aref ele 0))))))
- (unless py-modeline-display-full-path-p
-
- (setq name (substring name (1+ (string-match (concat sepchar "[^" sepchar "]+$") name))))))
- (setq erg
- (cond ((string= "ipython" name)
- (replace-regexp-in-string "ipython" "IPython" name))
- ((string= "jython" name)
- (replace-regexp-in-string "jython" "Jython" name))
- ((string= "python" name)
- (replace-regexp-in-string "python" "Python" name))
- ((string-match "python2" name)
- (replace-regexp-in-string "python2" "Python2" name))
- ((string-match "python3" name)
- (replace-regexp-in-string "python3" "Python3" name))
- (t name)))
- (when dedicated
- (setq erg (make-temp-name (concat erg "-"))))
- (cond ((and prefix (string-match "^\*" erg))
- (setq erg (replace-regexp-in-string "^\*" (concat "*" prefix " ") erg)))
- (prefix
- (setq erg (concat "*" prefix " " erg "*")))
-
- (t (setq erg (concat "*" erg "*"))))
- erg))
-
-(defun py-delete-numbers-and-stars-from-string (string)
- "Delete numbering and star chars from string, return result.
-
-Needed when file-path names are contructed from maybe numbered buffer names like \"\*Python\*<2> \""
- (replace-regexp-in-string
- "<\\([0-9]+\\)>" ""
- (replace-regexp-in-string
- "\*" ""
- string)))
-
-(defun py-shell-manage-windows (switch py-split-windows-on-execute-p py-switch-buffers-on-execute-p oldbuf py-buffer-name)
- (delete-other-windows)
- (window-configuration-to-register 213465889)
- (cond (;; split and switch
- (unless (eq switch 'noswitch)
- (and py-split-windows-on-execute-p
- (or (eq switch 'switch)
- py-switch-buffers-on-execute-p)))
- (unless (string-match "[Ii][Pp]ython" py-buffer-name) (delete-other-windows))
- (when (< (count-windows) 2)
- (funcall py-split-windows-on-execute-function))
- (pop-to-buffer py-buffer-name))
- ;; split, not switch
- ((and py-split-windows-on-execute-p
- (or (eq switch 'noswitch)
- (not (eq switch 'switch))))
- (if (< (count-windows) 2)
- (progn
- (funcall py-split-windows-on-execute-function)
- (display-buffer py-buffer-name)
- ;; avoids windows flip top-down - by side-effect?
- (window-configuration-to-register 213465889))
- (window-configuration-to-register 213465889))
- (jump-to-register 213465889)
- (display-buffer oldbuf)
- (pop-to-buffer oldbuf))
- ;; no split, switch
- ((or (eq switch 'switch)
- (and (not (eq switch 'noswitch))
- py-switch-buffers-on-execute-p))
- (pop-to-buffer py-buffer-name)
- (goto-char (point-max)))
- ;; no split, no switch
- ((or (eq switch 'noswitch)
- (not py-switch-buffers-on-execute-p))
- (set-buffer oldbuf)
- (switch-to-buffer (current-buffer)))))
-
-(defun py-report-executable (py-buffer-name)
- (let ((erg (downcase (replace-regexp-in-string
- "<\\([0-9]+\\)>" ""
- (replace-regexp-in-string
- "\*" ""
- (if
- (string-match " " py-buffer-name)
- (substring py-buffer-name (1+ (string-match " " py-buffer-name)))
- py-buffer-name))))))
- (when (string-match "-" erg)
- (setq erg (substring erg 0 (string-match "-" erg))))
- erg))
-
-(defun py-shell-send-setup-code (process)
- "Send all setup code for shell.
-This function takes the list of setup code to send from the
-`python-shell-setup-codes' list."
- (accept-process-output process 1)
- (dolist (code python-shell-setup-codes)
- (python-shell-send-string-no-output
- (symbol-value code) process)
- (sit-for 0.1)))
-
-(defun py-shell (&optional argprompt dedicated pyshellname switch sepchar py-buffer-name done)
- "Start an interactive Python interpreter in another window.
-
-Interactively, \\[universal-argument] 4 prompts for a buffer.
-\\[universal-argument] 2 prompts for `py-python-command-args'.
-If `default-directory' is a remote file name, it is also prompted
-to change if called with a prefix arg.
-
-Returns py-shell's buffer-name.
-Optional string PYSHELLNAME overrides default `py-shell-name'.
-Optional symbol SWITCH ('switch/'noswitch) precedes `py-switch-buffers-on-execute-p'
-When SEPCHAR is given, `py-shell' must not detect the file-separator.
-BUFFER allows specifying a name, the Python process is connected to
-When DONE is `t', `py-shell-manage-windows' is omitted
-"
- (interactive "P")
- (if (or argprompt dedicated pyshellname switch sepchar py-buffer-name done (interactive-p))
- (let* ((sepchar (or sepchar (char-to-string py-separator-char)))
- (args py-python-command-args)
- (oldbuf (current-buffer))
- (path (getenv "PYTHONPATH"))
- ;; make classic python.el forms usable, to import emacs.py
- (process-environment
- (cons (concat "PYTHONPATH="
- (if path (concat path path-separator))
- data-directory)
- process-environment))
- ;; proc
- (py-buffer-name
- (or py-buffer-name
- (when argprompt
- (cond
- ((eq 4 (prefix-numeric-value argprompt))
- (setq py-buffer-name
- (prog1
- (read-buffer "Py-Shell buffer: "
- (generate-new-buffer-name (py-buffer-name-prepare (or pyshellname py-shell-name) sepchar)))
- (if (file-remote-p default-directory)
- ;; It must be possible to declare a local default-directory.
- (setq default-directory
- (expand-file-name
- (read-file-name
- "Default directory: " default-directory default-directory
- t nil 'file-directory-p)))))))
- ((and (eq 2 (prefix-numeric-value argprompt))
- (fboundp 'split-string))
- (setq args (split-string
- (read-string "Py-Shell arguments: "
- (concat
- (mapconcat 'identity py-python-command-args " ") " ")))))))))
- (pyshellname (or pyshellname
- (if (or (null py-shell-name)(string= "" py-shell-name))
- (py-choose-shell)
- py-shell-name)))
- ;; If we use a pipe, Unicode characters are not printed
- ;; correctly (Bug#5794) and IPython does not work at
- ;; all (Bug#5390). python.el
- (process-connection-type t)
- ;; already in py-choose-shell
- (py-use-local-default
- (if (not (string= "" py-shell-local-path))
- (expand-file-name py-shell-local-path)
- (when py-use-local-default
- (error "Abort: `py-use-local-default' is set to `t' but `py-shell-local-path' is empty. Maybe call `py-toggle-local-default-use'"))))
- (py-buffer-name-prepare (unless py-buffer-name
- (py-buffer-name-prepare (or pyshellname py-shell-name) sepchar dedicated)))
- (py-buffer-name (or py-buffer-name py-buffer-name-prepare))
- (executable (cond (pyshellname)
- (py-buffer-name
- (py-report-executable py-buffer-name))))
- proc)
- (set-buffer (apply 'make-comint-in-buffer executable py-buffer-name executable nil args))
- (set (make-local-variable 'comint-prompt-regexp)
- (concat "\\("
- (mapconcat 'identity
- (delq nil (list py-shell-input-prompt-1-regexp py-shell-input-prompt-2-regexp ipython-de-input-prompt-regexp ipython-de-output-prompt-regexp py-pdbtrack-input-prompt py-pydbtrack-input-prompt))
- "\\|")
- "\\)"))
- (set (make-local-variable 'comint-input-filter) 'py-history-input-filter)
-
- (set (make-local-variable 'comint-use-prompt-regexp) t)
- (set (make-local-variable 'compilation-error-regexp-alist)
- python-compilation-regexp-alist)
- (setq completion-at-point-functions nil)
- ;; (py-set-shell-complete-function)
- ;; (if py-complete-function
- ;; (add-hook 'completion-at-point-functions
- ;; py-complete-function nil 'local)
- ;; (add-hook 'completion-at-point-functions
- ;; 'py-shell-complete nil 'local))
- (add-hook 'comint-preoutput-filter-functions #'python-preoutput-filter
- nil t)
- (if py-fontify-shell-buffer-p
- (progn
- (set (make-local-variable 'font-lock-defaults)
- '(python-font-lock-keywords nil nil nil nil
- (font-lock-syntactic-keywords
- . python-font-lock-syntactic-keywords)))
- (set (make-local-variable 'comment-start) "# ")
- (set (make-local-variable 'comment-start-skip) "^[ \t]*#+ *")
- (set (make-local-variable 'comment-column) 40)
- (set (make-local-variable 'comment-indent-function) #'py-comment-indent-function)
- (set (make-local-variable 'indent-region-function) 'py-indent-region)
- (set (make-local-variable 'indent-line-function) 'py-indent-line)
- (font-lock-fontify-buffer))
- (font-lock-unfontify-region (point-min) (line-beginning-position)))
- (setq python-buffer (current-buffer))
- ;; (accept-process-output (get-buffer-process python-buffer) 5)
- (setq proc (get-buffer-process (current-buffer)))
- (goto-char (point-max))
- (move-marker (process-mark proc) (point-max))
- ;; (funcall (process-filter proc) proc "")
- (py-shell-send-setup-code proc)
- ;; (accept-process-output proc 1)
- (compilation-shell-minor-mode 1)
- ;; (sit-for 0.1)
- (setq comint-input-sender 'py-shell-simple-send)
- (setq comint-input-ring-file-name
- (cond ((string-match "[iI][pP]ython[[:alnum:]]*$" py-buffer-name)
- (if (getenv "IPYTHONDIR")
- (concat (getenv "IPYTHONDIR") "/history")
- "~/.ipython/history"))
- ((getenv "PYTHONHISTORY")
- (concat (getenv "PYTHONHISTORY") "/" (py-report-executable py-buffer-name) "_history"))
- (dedicated
- (concat "~/." (substring py-buffer-name 0 (string-match "-" py-buffer-name)) "_history"))
- ;; .pyhistory might be locked from outside Emacs
- ;; (t "~/.pyhistory")
- (t (concat "~/." (py-report-executable py-buffer-name) "_history"))))
- (comint-read-input-ring t)
- (set-process-sentinel (get-buffer-process (current-buffer))
- #'shell-write-history-on-exit)
- ;; pdbtrack
- ;; (add-hook 'comint-output-filter-functions 'py-pdbtrack-track-stack-file)
- (setq py-pdbtrack-do-tracking-p t)
- ;;
- (set-syntax-table python-mode-syntax-table)
- (ansi-color-for-comint-mode-on)
- (use-local-map py-shell-map)
- ;; (add-hook 'py-shell-hook 'py-dirstack-hook)
- (when py-shell-hook (run-hooks 'py-shell-hook))
- (if (and (interactive-p) py-shell-switch-buffers-on-execute-p)
- (pop-to-buffer py-buffer-name)
- (unless done (py-shell-manage-windows switch py-split-windows-on-execute-p py-switch-buffers-on-execute-p oldbuf py-buffer-name)))
- py-buffer-name)
- (cond ((comint-check-proc (current-buffer))
- (buffer-name (current-buffer)))
- ((comint-check-proc py-buffer-name)
- py-buffer-name))))
-
-(defalias 'iyp 'ipython)
-(defalias 'ipy 'ipython)
-;;; Named shells
-(defun python (&optional argprompt dedicated switch)
- "Start an Python interpreter.
-
-Optional \\[universal-argument] prompts for options to pass to the Python interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs. "
- (interactive "P")
- (py-shell argprompt dedicated "python" switch))
-
-(defalias 'ipyhton 'ipython)
-(defalias 'iypthon 'ipython)
-(defun ipython (&optional argprompt dedicated switch)
- "Start an IPython interpreter.
-
-Optional \\[universal-argument] prompts for options to pass to the IPython interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs. "
- (interactive "P")
- (py-shell argprompt dedicated "ipython" switch))
-
-(defun python3 (&optional argprompt dedicated switch)
- "Start an Python3 interpreter.
-
-Optional \\[universal-argument] prompts for options to pass to the Python3 interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs. "
- (interactive "P")
- (py-shell argprompt dedicated "python3" switch))
-
-(defun python2 (&optional argprompt dedicated switch)
- "Start an Python2 interpreter.
-
-Optional \\[universal-argument] prompts for options to pass to the Python2 interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs. "
- (interactive "P")
- (py-shell argprompt dedicated "python2" switch))
-
-(defun python2.7 (&optional argprompt dedicated switch)
- "Start an Python2.7 interpreter.
-
-Optional \\[universal-argument] prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs. "
- (interactive "P")
- (py-shell argprompt dedicated "python2.7" switch))
-
-(defun jython (&optional argprompt dedicated switch)
- "Start an Jython interpreter.
-
-Optional \\[universal-argument] prompts for options to pass to the Jython interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs. "
- (interactive "P")
- (py-shell argprompt dedicated "jython" switch))
-
-(defun bpython (&optional argprompt dedicated switch)
- "Start an BPython interpreter.
-
-Optional \\[universal-argument] prompts for options to pass to the Jython interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs. "
- (interactive "P")
- (py-shell argprompt dedicated "bpython" switch))
-
-(defun python3.2 (&optional argprompt dedicated switch)
- "Start an Python3.2 interpreter.
-
-Optional \\[universal-argument] prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'.
- Optional DEDICATED SWITCH are provided for use from programs. "
- (interactive "P")
- (py-shell argprompt dedicated "python3.2" switch))
-
-;; dedicated
-(defun python-dedicated (&optional argprompt switch)
- "Start an unique Python interpreter in another window.
-
-Optional \\[universal-argument] prompts for options to pass to the Python interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt t "python" switch))
-
-(defun ipython-dedicated (&optional argprompt switch)
- "Start an unique IPython interpreter in another window.
-
-Optional \\[universal-argument] prompts for options to pass to the IPython interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt t "ipython" switch))
-
-(defun python3-dedicated (&optional argprompt switch)
- "Start an unique Python3 interpreter in another window.
-
-Optional \\[universal-argument] prompts for options to pass to the Python3 interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt t "python3" switch))
-
-(defun python2-dedicated (&optional argprompt switch)
- "Start an unique Python2 interpreter in another window.
-
-Optional \\[universal-argument] prompts for options to pass to the Python2 interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt t "python2" switch))
-
-(defun python2.7-dedicated (&optional argprompt switch)
- "Start an unique Python2.7 interpreter in another window.
-
-Optional \\[universal-argument] prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt t "python2.7" switch))
-
-(defun jython-dedicated (&optional argprompt switch)
- "Start an unique Jython interpreter in another window.
-
-Optional \\[universal-argument] prompts for options to pass to the Jython interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt t "jython" switch))
-
-(defun python3.2-dedicated (&optional argprompt switch)
- "Start an unique Python3.2 interpreter in another window.
-
-Optional \\[universal-argument] prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt t "python3.2" switch))
-
-;; switch
-(defun python-switch (&optional argprompt dedicated)
- "Switch to Python interpreter in another window.
-
-Optional \\[universal-argument] prompts for options to pass to the Python interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt dedicated "python" 'switch))
-
-(defun ipython-switch (&optional argprompt dedicated)
- "Switch to IPython interpreter in another window.
-
-Optional \\[universal-argument] prompts for options to pass to the IPython interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt dedicated "ipython" 'switch))
-
-(defun python3-switch (&optional argprompt dedicated)
- "Switch to Python3 interpreter in another window.
-
-Optional \\[universal-argument] prompts for options to pass to the Python3 interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt dedicated "python3" 'switch))
-
-(defun python2-switch (&optional argprompt dedicated)
- "Switch to Python2 interpreter in another window.
-
-Optional \\[universal-argument] prompts for options to pass to the Python2 interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt dedicated "python2" 'switch))
-
-(defun python2.7-switch (&optional argprompt dedicated)
- "Switch to Python2.7 interpreter in another window.
-
-Optional \\[universal-argument] prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt dedicated "python2.7" 'switch))
-
-(defun jython-switch (&optional argprompt dedicated)
- "Switch to Jython interpreter in another window.
-
-Optional \\[universal-argument] prompts for options to pass to the Jython interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt dedicated "jython" 'switch))
-
-(defun python3.2-switch (&optional argprompt dedicated)
- "Switch to Python3.2 interpreter in another window.
-
-Optional \\[universal-argument] prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt dedicated "python3.2" 'switch))
-
-(defun python-no-switch (&optional argprompt dedicated)
- "Open an Python interpreter in another window, but do not switch to it.
-
-Optional \\[universal-argument] prompts for options to pass to the Python interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt dedicated "python" 'noswitch))
-
-(defun ipython-no-switch (&optional argprompt dedicated)
- "Open an IPython interpreter in another window, but do not switch to it.
-
-Optional \\[universal-argument] prompts for options to pass to the IPython interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt dedicated "ipython" 'noswitch))
-
-(defun python3-no-switch (&optional argprompt dedicated)
- "Open an Python3 interpreter in another window, but do not switch to it.
-
-Optional \\[universal-argument] prompts for options to pass to the Python3 interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt dedicated "python3" 'noswitch))
-
-(defun python2-no-switch (&optional argprompt dedicated)
- "Open an Python2 interpreter in another window, but do not switch to it.
-
-Optional \\[universal-argument] prompts for options to pass to the Python2 interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt dedicated "python2" 'noswitch))
-
-(defun python2.7-no-switch (&optional argprompt dedicated)
- "Open an Python2.7 interpreter in another window, but do not switch to it.
-
-Optional \\[universal-argument] prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt dedicated "python2.7" 'noswitch))
-
-(defun jython-no-switch (&optional argprompt dedicated)
- "Open an Jython interpreter in another window, but do not switch to it.
-
-Optional \\[universal-argument] prompts for options to pass to the Jython interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt dedicated "jython" 'noswitch))
-
-(defun python3.2-no-switch (&optional argprompt dedicated)
- "Open an Python3.2 interpreter in another window, but do not switch to it.
-
-Optional \\[universal-argument] prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt dedicated "python3.2" 'noswitch))
-
-(defalias 'python-dedicated-switch 'python-switch-dedicated)
-(defun python-switch-dedicated (&optional argprompt)
- "Switch to an unique Python interpreter in another window.
-
-Optional \\[universal-argument] prompts for options to pass to the Python interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt t "python" 'switch))
-
-(defalias 'ipython-dedicated-switch 'ipython-switch-dedicated)
-(defun ipython-switch-dedicated (&optional argprompt)
- "Switch to an unique IPython interpreter in another window.
-
-Optional \\[universal-argument] prompts for options to pass to the IPython interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt t "ipython" 'switch))
-
-(defalias 'python3-dedicated-switch 'python3-switch-dedicated)
-(defun python3-switch-dedicated (&optional argprompt)
- "Switch to an unique Python3 interpreter in another window.
-
-Optional \\[universal-argument] prompts for options to pass to the Python3 interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt t "python3" 'switch))
-
-(defalias 'python2-dedicated-switch 'python2-switch-dedicated)
-(defun python2-switch-dedicated (&optional argprompt)
- "Switch to an unique Python2 interpreter in another window.
-
-Optional \\[universal-argument] prompts for options to pass to the Python2 interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt t "python2" 'switch))
-
-(defalias 'python2.7-dedicated-switch 'python2.7-switch-dedicated)
-(defun python2.7-switch-dedicated (&optional argprompt)
- "Switch to an unique Python2.7 interpreter in another window.
-
-Optional \\[universal-argument] prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt t "python2.7" 'switch))
-
-(defalias 'jython-dedicated-switch 'jython-switch-dedicated)
-(defun jython-switch-dedicated (&optional argprompt)
- "Switch to an unique Jython interpreter in another window.
-
-Optional \\[universal-argument] prompts for options to pass to the Jython interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt t "jython" 'switch))
-
-(defalias 'python3.2-dedicated-switch 'python3.2-switch-dedicated)
-(defun python3.2-switch-dedicated (&optional argprompt)
- "Switch to an unique Python3.2 interpreter in another window.
-
-Optional \\[universal-argument] prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'."
- (interactive "P")
- (py-shell argprompt t "python3.2" 'switch))
-
-
-;;; Code execution commands
-(declare-function compilation-shell-minor-mode "compile" (&optional arg))
-
-(defun py-which-execute-file-command (filename)
- "Return the command appropriate to Python version.
-
-Per default it's \"(format \"execfile(r'%s') # PYTHON-MODE\\n\" filename)\" for Python 2 series."
- (interactive)
- (let* ((erg (py-which-python))
- (cmd (if (< erg 3)
- (format "execfile(r'%s') # PYTHON-MODE\n" filename)
- (format "exec(compile(open('%s').read(), '%s', 'exec')) # PYTHON-MODE\n" filename filename))))
- (when (and py-verbose-p (interactive-p)) (message "%s" (prin1-to-string cmd)))
- cmd))
-
-(defun py-execute-region-no-switch (start end &optional shell dedicated)
- "Send the region to a Python interpreter.
-
-Ignores setting of `py-switch-buffers-on-execute-p', buffer with region stays current.
- "
- (interactive "r\nP")
- (py-execute-base start end py-shell-name dedicated 'noswitch))
-
-(defun py-execute-region-switch (start end &optional shell dedicated)
- "Send the region to a Python interpreter.
-
-Ignores setting of `py-switch-buffers-on-execute-p', output-buffer will being switched to.
-"
- (interactive "r\nP")
- (py-execute-base start end py-shell-name dedicated 'switch))
-
-(defun py-execute-region (start end &optional shell dedicated switch)
- "Send the region to a Python interpreter.
-
-When called with \\[univeral-argument], execution through `default-value' of `py-shell-name' is forced.
-When called with \\[univeral-argument] followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)
-"
- (interactive "r\nP")
- (let ((shell (cond ((and py-force-local-shell-p py-force-py-shell-name-p)
- py-shell-name)
- ((or py-force-py-shell-name-p (eq 4 (prefix-numeric-value shell))) (default-value 'py-shell-name))
- ((and (numberp shell) (not (eq 1 (prefix-numeric-value shell))))
- (read-from-minibuffer "(path-to-)shell-name: " (default-value 'py-shell-name)))
- (t shell))))
- (py-execute-base start end shell dedicated switch)))
-
-(defun py-execute-region-default (start end &optional dedicated)
- "Send the region to the systems default Python interpreter.
-See also `py-execute-region'. "
- (interactive "r\nP")
- (py-execute-base start end (default-value 'py-shell-name) dedicated))
-
-(defun py-execute-region-dedicated (start end &optional shell)
- "Get the region processed by an unique Python interpreter.
-
-When called with \\[univeral-argument], execution through `default-value' of `py-shell-name' is forced.
-When called with \\[univeral-argument] followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument. "
- (interactive "r\nP")
- (let ((shell (cond ((eq 4 (prefix-numeric-value shell)) (default-value 'py-shell-name))
- ((and (numberp shell) (not (eq 1 (prefix-numeric-value shell))))
- (read-from-minibuffer "(path-to-)shell-name: " (default-value 'py-shell-name)))
- (t shell))))
- (py-execute-base start end shell t)))
-
-(defalias 'py-execute-region-dedicated-default 'py-execute-region-default-dedicated)
-(defun py-execute-region-default-dedicated (start end)
- "Send the region to an unique shell of systems default Python. "
- (interactive "r")
- (py-execute-base start end (default-value 'py-shell-name) t))
-
-(defun py-execute-base (start end &optional pyshellname dedicated switch nostars sepchar)
- "Adapt the variables used in the process. "
- (let* ((oldbuf (current-buffer))
- (pyshellname (or pyshellname (py-choose-shell)))
- (py-execute-directory (or (ignore-errors (file-name-directory (buffer-file-name)))(getenv "WORKON_HOME")(getenv "HOME")))
- (strg (buffer-substring-no-properties start end))
- (sepchar (or sepchar (char-to-string py-separator-char)))
- (py-buffer-name (py-buffer-name-prepare pyshellname sepchar))
- (temp (make-temp-name
- (concat (replace-regexp-in-string (regexp-quote sepchar) "-" (replace-regexp-in-string (concat "^" (regexp-quote sepchar)) "" (replace-regexp-in-string ":" "-" pyshellname))) "-")))
- (file (concat (expand-file-name py-temp-directory) sepchar (replace-regexp-in-string (regexp-quote sepchar) "-" temp) ".py"))
- (filebuf (get-buffer-create file))
- (proc (if dedicated
- (get-buffer-process (py-shell nil dedicated pyshellname switch sepchar py-buffer-name t))
- (or (get-buffer-process (py-buffer-name-prepare pyshellname))
- (get-buffer-process (py-shell nil dedicated pyshellname switch sepchar py-buffer-name t)))))
- (procbuf (process-buffer proc))
- (pec (if (string-match "[pP]ython ?3" py-buffer-name)
- (format "exec(compile(open('%s').read(), '%s', 'exec')) # PYTHON-MODE\n" file file)
- (format "execfile(r'%s') # PYTHON-MODE\n" file)))
- (wholebuf (when (boundp 'wholebuf) wholebuf))
- (comint-scroll-to-bottom-on-output t)
- erg)
- (set-buffer filebuf)
- (erase-buffer)
- (insert strg)
- (py-fix-start (point-min)(point-max))
- (py-if-needed-insert-shell (prin1-to-string proc) sepchar)
- (unless wholebuf (py-insert-coding))
- (unless (string-match "[jJ]ython" pyshellname) (py-insert-execute-directory))
- (cond (python-mode-v5-behavior-p
-
- (let ((cmd (concat pyshellname (if (string-equal py-which-bufname
- "Jython")
- " -" " -c "))))
- (save-excursion
- (set-buffer filebuf)
- (shell-command-on-region (point-min) (point-max)
- cmd py-output-buffer))
- (if (not (get-buffer py-output-buffer))
- (message "No output.")
- (setq py-exception-buffer (current-buffer))
- (let ((err-p (py-postprocess-output-buffer py-output-buffer)))
- ;; (when py-switch-buffers-on-execute-p
- (pop-to-buffer py-output-buffer)
- ;; )
- (if err-p
- (pop-to-buffer py-exception-buffer))))))
- (t (set-buffer filebuf)
- (write-region (point-min) (point-max) file nil t nil 'ask)
- (set-buffer-modified-p 'nil)
- (kill-buffer filebuf)
- (if (file-readable-p file)
- (progn
- (when (string-match "ipython" (process-name proc))
- (sit-for py-ipython-execute-delay))
- (setq erg (py-execute-file-base proc file pec procbuf))
- (setq py-exception-buffer (cons file (current-buffer)))
- (py-shell-manage-windows switch py-split-windows-on-execute-p py-switch-buffers-on-execute-p oldbuf py-buffer-name)
- (unless (string= (buffer-name (current-buffer)) (buffer-name procbuf))
- (when py-verbose-p (message "Output buffer: %s" procbuf)))
- (sit-for 0.1)
- (unless py-execute-keep-temporary-file-p
- (delete-file file)
- (when (buffer-live-p file)
- (kill-buffer file)))
- erg)
- (message "%s not readable. %s" file "Do you have write permissions?"))))))
-
-(defun py-execute-string (&optional string shell dedicated)
- "Send the argument STRING to a Python interpreter.
-
-See also `py-execute-region'. "
- (interactive)
- (let ((string (or string (read-from-minibuffer "String: ")))
- (shell (or shell (default-value 'py-shell-name))))
- (with-temp-buffer
- (insert string)
- (py-execute-region (point-min) (point-max) shell dedicated))))
-
-(defun py-execute-string-dedicated (&optional string shell)
- "Send the argument STRING to an unique Python interpreter.
-
-See also `py-execute-region'. "
- (interactive)
- (let ((string (or string (read-from-minibuffer "String: ")))
- (shell (or shell (default-value 'py-shell-name))))
- (with-temp-buffer
- (insert string)
- (py-execute-region (point-min) (point-max) shell t))))
-
-(defun py-if-needed-insert-shell (&optional name sepchar)
- (let ((erg (or name
- (py-choose-shell-by-shebang)
- (py-choose-shell-by-import)
- py-shell-name))
- (sepchar (or sepchar (char-to-string py-separator-char))))
- (when (string-match " " erg) (setq erg (substring erg (1+ (string-match " " erg))))
- ;; closing ">"
- (setq erg (substring erg 0 (1- (length erg)))))
- (goto-char (point-min))
- (while (empty-line-p) (delete-region (point) (1+ (line-end-position))))
- (unless (looking-at py-shebang-regexp)
- (if (string-match (concat "^" erg) "ipython")
- (progn
- (shell-command "type ipython" t)
- (switch-to-buffer (current-buffer))
- (when (looking-at "[^/\n\r]+")
- (replace-match "#! ")))
- (if (string-match (regexp-quote sepchar) erg)
- (insert (concat "#! " erg "\n\n"))
- (insert (concat py-shebang-startstring " " erg "\n\n")))))))
-
-(defun py-insert-execute-directory ()
- (goto-char (point-min))
- (if (re-search-forward py-encoding-string-re nil (quote move))
- (progn
- (newline)
- (insert (concat "import os; os.chdir(\"" py-execute-directory "\")\n")))
- (goto-char (point-min))
- (forward-line 2)
- (newline)
- (insert (concat "import os; os.chdir(\"" py-execute-directory "\")\n"))))
-
-(defun py-insert-coding ()
- ;; (switch-to-buffer (current-buffer))
- (goto-char (point-min))
- (unless (re-search-forward py-encoding-string-re nil t)
- (goto-char (point-min))
- (if (re-search-forward py-shebang-regexp nil t 1)
- (progn
- (newline)
- (insert (concat py-encoding-string "\n")))
- (insert (concat py-encoding-string "\n")))))
-
-(defun py-if-needed-insert-if ()
- "Internal use by py-execute... functions.
-Inserts an incentive true form \"if 1:\\n.\" "
- (let ((needs-if (/= (py-point 'bol) (py-point 'boi))))
- (when needs-if
- (insert "if 1:\n")
- (setq py-line-number-offset (- py-line-number-offset 1)))))
-
-(defun py-fix-start (start end)
- "Internal use by py-execute... functions.
-Avoid empty lines at the beginning. "
- (goto-char start)
- (let ((beg (copy-marker start)))
- (while (empty-line-p)
- (delete-region (line-beginning-position) (1+ (line-end-position))))
- (back-to-indentation)
- (unless (eq (current-indentation) 0)
- (py-shift-left (current-indentation) start end))
- (setq py-line-number-offset (count-lines 1 start))
- beg))
-
-(defun py-fetch-py-master-file ()
- "Lookup if a `py-master-file' is specified.
-
-See also doku of variable `py-master-file' "
- (interactive)
- (save-excursion
- (save-restriction
- (widen)
- (goto-char (point-min))
- (when (re-search-forward "^ *# Local Variables:" nil (quote move) 1)
- (when
- (re-search-forward (concat "^\\( *# py-master-file: *\\)\"\\([^ \t]+\\)\" *$") nil t 1)
- (setq py-master-file (match-string-no-properties 2))))))
- (when (and py-verbose-p (interactive-p)) (message "%s" py-master-file)))
-
-(defun py-execute-import-or-reload (&optional argprompt shell dedicated)
- "Import the current buffer's file in a Python interpreter.
-
-If the file has already been imported, then do reload instead to get
-the latest version.
-
-If the file's name does not end in \".py\", then do execfile instead.
-
-If the current buffer is not visiting a file, do `py-execute-buffer'
-instead.
-
-If the file local variable `py-master-file' is non-nil, import or
-reload the named file instead of the buffer's file. The file may be
-saved based on the value of `py-execute-import-or-reload-save-p'.
-
-See also `\\[py-execute-region]'.
-
-This may be preferable to `\\[py-execute-buffer]' because:
-
- - Definitions stay in their module rather than appearing at top
- level, where they would clutter the global namespace and not affect
- uses of qualified names (MODULE.NAME).
-
- - The Python debugger gets line number information about the functions."
- (interactive "P")
- ;; Check file local variable py-master-file
- (if py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (let ((shell (or shell (py-choose-shell argprompt shell dedicated)))
- (file (buffer-file-name (current-buffer))))
- (if file
- (let ((proc (or
- (ignore-errors (get-process (file-name-directory shell)))
- (get-buffer-process (py-shell argprompt dedicated (or shell (default-value 'py-shell-name)))))))
- ;; Maybe save some buffers
- (save-some-buffers (not py-ask-about-save) nil)
- (py-execute-file-base proc file
- (if (string-match "\\.py$" file)
- (let ((m (py-qualified-module-name (expand-file-name file))))
- (if (string-match "python2" (file-name-nondirectory shell))
- (format "import sys\nif sys.modules.has_key('%s'):\n reload(%s)\nelse:\n import %s\n" m m m)
- (format "import sys,imp\nif'%s' in sys.modules:\n imp.reload(%s)\nelse:\n import %s\n" m m m)))
- ;; (format "execfile(r'%s')\n" file)
- (py-which-execute-file-command file))))
- (py-execute-buffer py-shell-name))))
-
-(defun py-qualified-module-name (file)
- "Find the qualified module name for filename FILE.
-
-Basically, this goes down the directory tree as long as there are __init__.py files there."
- (let ((rec #'(lambda (d f)
- (let* ((dir (file-name-directory d))
- (initpy (concat dir "__init__.py")))
- (if (file-exists-p initpy)
- (let ((d2 (directory-file-name d)))
- (funcall rec (file-name-directory d2)
- (concat (file-name-nondirectory d2) "." f)))
- f)))))
- (funcall rec (file-name-directory file)
- (file-name-sans-extension (file-name-nondirectory file)))))
-
-(defun py-execute-buffer-dedicated (&optional shell)
- "Send the contents of the buffer to a unique Python interpreter.
-
-If the file local variable `py-master-file' is non-nil, execute the
-named file instead of the buffer's file.
-
-If a clipping restriction is in effect, only the accessible portion of the buffer is sent. A trailing newline will be supplied if needed.
-
-With \\[univeral-argument] user is prompted to specify another then default shell.
-See also `\\[py-execute-region]'. "
- (interactive "P")
- (py-execute-buffer-base shell t))
-
-(defun py-execute-buffer-switch (&optional shell dedicated)
- "Send the contents of the buffer to a Python interpreter and switches to output.
-
-If the file local variable `py-master-file' is non-nil, execute the
-named file instead of the buffer's file.
-If there is a *Python* process buffer, it is used.
-If a clipping restriction is in effect, only the accessible portion of the buffer is sent. A trailing newline will be supplied if needed.
-
-With \\[univeral-argument] user is prompted to specify another then default shell.
-See also `\\[py-execute-region]'. "
- (interactive "P")
- (py-execute-buffer-base shell dedicated 'switch))
-
-(defalias 'py-execute-buffer-switch-dedicated 'py-execute-buffer-dedicated-switch)
-(defun py-execute-buffer-dedicated-switch (&optional shell)
- "Send the contents of the buffer to an unique Python interpreter.
-
-Ignores setting of `py-switch-buffers-on-execute-p'.
-If the file local variable `py-master-file' is non-nil, execute the
-named file instead of the buffer's file.
-
-If a clipping restriction is in effect, only the accessible portion of the buffer is sent. A trailing newline will be supplied if needed.
-
-With \\[univeral-argument] user is prompted to specify another then default shell.
-See also `\\[py-execute-region]'. "
- (interactive "P")
- (py-execute-buffer-base shell t 'switch))
-
-(defun py-execute-buffer (&optional shell dedicated switch)
- "Send the contents of the buffer to a Python interpreter.
-
-When called with \\[univeral-argument], execution through `default-value' of `py-shell-name' is forced.
-When called with \\[univeral-argument] followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-If the file local variable `py-master-file' is non-nil, execute the
-named file instead of the buffer's file.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch) "
- (interactive "P")
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end shell dedicated switch))))
-
-(defun py-execute-buffer-base (&optional shell dedicated switch)
- "Honor `py-master-file'. "
- (save-excursion
- (let ((py-master-file (or py-master-file (py-fetch-py-master-file))))
- (if py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (py-execute-region (point-min) (point-max) shell dedicated switch))))
-
-(defun py-execute-buffer-no-switch (&optional shell dedicated)
- "Send the contents of the buffer to a Python interpreter but don't switch to output.
-
-If the file local variable `py-master-file' is non-nil, execute the
-named file instead of the buffer's file.
-If there is a *Python* process buffer, it is used.
-If a clipping restriction is in effect, only the accessible portion of the buffer is sent. A trailing newline will be supplied if needed.
-
-With \\[univeral-argument] user is prompted to specify another then default shell.
-See also `\\[py-execute-region]'. "
- (interactive "P")
- (py-execute-buffer-base shell dedicated 'noswitch))
-
-;; Fixme: Try to define the function or class within the relevant
-;; module, not just at top level.
-(defun py-execute-defun ()
- "Send the current defun (class or method) to the inferior Python process."
- (interactive)
- (save-excursion (py-execute-region (progn (beginning-of-defun) (point))
- (progn (end-of-defun) (point)))))
-
-(defun py-process-file (filename &optional output-buffer error-buffer)
- "Process \"python filename\".
-
-Optional OUTPUT-BUFFER and ERROR-BUFFER might be given. "
- (interactive "fDatei:")
- (let ((coding-system-for-read 'utf-8)
- (coding-system-for-write 'utf-8)
- (output-buffer (or output-buffer (make-temp-name "py-process-file-output")))
- (cmd (py-choose-shell)))
- (unless (buffer-live-p output-buffer)
- (set-buffer (get-buffer-create output-buffer)))
- (shell-command (concat cmd " " filename) output-buffer error-buffer)
- (when (interactive-p) (switch-to-buffer output-buffer))))
-
-;;;
-(defun py-exec-execfile-region (start end &optional shell)
- "Execute the region in a Python interpreter. "
- (interactive "r\nP")
- (let ((shell (if (eq 4 (prefix-numeric-value shell))
- (read-from-minibuffer "Shell: " (default-value 'py-shell-name))
- py-shell-name)))
- (let ((strg (buffer-substring-no-properties start end)))
- (py-exec-execfile-base strg shell (interactive-p)))))
-
-(defun py-exec-execfile-base (strg shell iact)
- (let* ((temp (make-temp-name (concat (buffer-name) "-")))
- (file (concat (expand-file-name temp) py-temp-directory ".py"))
- (imports (py-find-imports))
- (shell shell)
- cmd header)
- (with-temp-buffer
- (insert imports)
- (insert strg)
- ;; (py-if-needed-insert-if)
- (or shell (setq shell (py-choose-shell)))
- (py-insert-coding)
- (py-if-needed-insert-shell shell)
- (setq header (buffer-substring-no-properties (point-min) (point)))
- (switch-to-buffer (current-buffer))
- (setq cmd (py-which-execute-file-command file))
- (write-file file))
- (py-exec-execfile file cmd header (concat temp "-output"))
- (set-buffer (concat temp "-output"))
- (when iact (switch-to-buffer (current-buffer)))
- (when (file-readable-p file)
- (delete-file file))
- (when iact (message "Output goes to buffer: %s" temp))
- (concat temp "-output")))
-
-(defun py-exec-execfile (filename cmd header &optional output-buffer error-buffer)
- "Process \"python filename\",
-Optional OUTPUT-BUFFER and ERROR-BUFFER might be given.')
-"
- (interactive "fDatei:")
- (let* ((coding-system-for-read 'utf-8)
- (coding-system-for-write 'utf-8)
- (exec-execfile (concat (make-temp-name (concat filename "-exec-execfile.py")))))
- (set-buffer (get-buffer-create exec-execfile))
- (insert header)
- (insert cmd)
- (write-file exec-execfile)
- (if output-buffer
- (progn
- (set-buffer (get-buffer-create output-buffer))
- (erase-buffer)
- (switch-to-buffer (current-buffer))
- (shell-command (concat "python " exec-execfile) output-buffer error-buffer))
- (with-temp-buffer
- (shell-command (concat "python " exec-execfile) output-buffer error-buffer)))))
-
-;;; Execute forms
-(defun py-execute-statement (&optional shell dedicated switch)
- "Send statement at point to a Python interpreter.
-
-When called with \\[univeral-argument], execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with \\[univeral-argument] followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)"
- (interactive "P")
- (save-excursion
- (let ((beg (prog1
- (or (py-beginning-of-statement-p)
- (py-beginning-of-statement))))
- (end (py-end-of-statement)))
- (py-execute-region beg end shell dedicated switch))))
-
-(defun py-execute-block (&optional shell dedicated switch)
- "Send block at point to a Python interpreter.
-
-When called with \\[univeral-argument], execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with \\[univeral-argument] followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)"
- (interactive "P")
- (save-excursion
- (let ((beg (or (py-beginning-of-block-p)
- (py-beginning-of-block)))
- (end (py-end-of-block)))
- (py-execute-region beg end shell dedicated switch))))
-
-(defun py-execute-block-or-clause (&optional shell dedicated switch)
- "Send block-or-clause at point to a Python interpreter.
-
-When called with \\[univeral-argument], execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with \\[univeral-argument] followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)"
- (interactive "P")
- (save-excursion
- (let ((beg (or (py-beginning-of-block-or-clause-p)
- (py-beginning-of-block-or-clause)))
- (end (py-end-of-block-or-clause)))
- (py-execute-region beg end shell dedicated switch))))
-
-(defun py-execute-def (&optional shell dedicated switch)
- "Send def at point to a Python interpreter.
-
-When called with \\[univeral-argument], execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with \\[univeral-argument] followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)"
- (interactive "P")
- (save-excursion
- (let ((beg (or (py-beginning-of-def-p)
- (py-beginning-of-def)))
- (end (py-end-of-def)))
- (py-execute-region beg end shell dedicated switch))))
-
-(defun py-execute-class (&optional shell dedicated switch)
- "Send class at point to a Python interpreter.
-
-When called with \\[univeral-argument], execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with \\[univeral-argument] followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)"
- (interactive "P")
- (save-excursion
- (let ((beg (or (py-beginning-of-class-p)
- (py-beginning-of-class)))
- (end (py-end-of-class)))
- (py-execute-region beg end shell dedicated switch))))
-
-(defun py-execute-def-or-class (&optional shell dedicated switch)
- "Send def-or-class at point to a Python interpreter.
-
-When called with \\[univeral-argument], execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with \\[univeral-argument] followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)"
- (interactive "P")
- (save-excursion
- (let ((beg (or (py-beginning-of-def-or-class-p)
- (py-beginning-of-def-or-class)))
- (end (py-end-of-def-or-class)))
- (py-execute-region beg end shell dedicated switch))))
-
-(defun py-execute-expression (&optional shell dedicated switch)
- "Send expression at point to a Python interpreter.
-
-When called with \\[univeral-argument], execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with \\[univeral-argument] followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)"
- (interactive "P")
- (save-excursion
- (let ((beg (or (py-beginning-of-expression-p)
- (py-beginning-of-expression)))
- (end (py-end-of-expression)))
- (py-execute-region beg end shell dedicated switch))))
-
-(defun py-execute-partial-expression (&optional shell dedicated switch)
- "Send partial-expression at point to a Python interpreter.
-
-When called with \\[univeral-argument], execution through `default-value' of `py-shell-name' is forced.
-See also `py-force-py-shell-name-p'.
-
-When called with \\[univeral-argument] followed by a number different from 4 and 1, user is prompted to specify a shell. This might be the name of a system-wide shell or include the path to a virtual environment.
-
-When called from a programm, it accepts a string specifying a shell which will be forced upon execute as argument.
-
-Optional arguments DEDICATED (boolean) and SWITCH (symbols 'noswitch/'switch)"
- (interactive "P")
- (save-excursion
- (let ((beg (or (py-beginning-of-partial-expression-p)
- (py-beginning-of-partial-expression)))
- (end (py-end-of-partial-expression)))
- (py-execute-region beg end shell dedicated switch))))
-
-;;;
-(defun py-execute-line ()
- "Send current line from beginning of indent to Python interpreter. "
- (interactive)
- (save-excursion
- (let ((beg (progn (back-to-indentation)
- (point))))
- (py-execute-region beg (line-end-position)))))
-
-(defun py-execute-file (&optional filename shell dedicated switch)
- "When called interactively, user is prompted for filename. "
- (interactive "fFile: ")
- (let* ((regbuf (current-buffer))
- (file (or (expand-file-name filename) (when (ignore-errors (file-readable-p (buffer-file-name))) (buffer-file-name))))
- (shell (or shell (progn (with-temp-buffer (insert-file-contents file)(py-choose-shell)))))
- (name (py-process-name shell dedicated))
- (proc (get-buffer-process (py-shell nil dedicated (or shell (downcase name)))))
- (procbuf (if dedicated
- (buffer-name (get-buffer (current-buffer)))
- (buffer-name (get-buffer (concat "*" name "*")))))
- (pec (if (string-match "Python3" name)
- (format "exec(compile(open('%s').read(), '%s', 'exec')) # PYTHON-MODE\n" file file)
- (format "execfile(r'%s') # PYTHON-MODE\n" file)))
- (comint-scroll-to-bottom-on-output t))
- (if (file-readable-p file)
- (progn
- (setq erg (py-execute-file-base proc file pec))
- (setq py-exception-buffer (cons file (current-buffer)))
- (if (or (eq switch 'switch)
- (and (not (eq switch 'noswitch)) py-switch-buffers-on-execute-p))
- (progn
- (pop-to-buffer procbuf)
- (goto-char (point-max)))
- (when (buffer-live-p regbuf) (pop-to-buffer regbuf))
- (when py-verbose-p (message "Output buffer: %s" procbuf)))
- (sit-for 0.1)
- erg)
- (message "File not readable: %s" "Do you have write permissions?"))))
-
-(defun py-execute-file-base (proc filename &optional cmd procbuf)
- "Send to Python interpreter process PROC, in Python version 2.. \"execfile('FILENAME')\".
-
-Make that process's buffer visible and force display. Also make
-comint believe the user typed this string so that
-`kill-output-from-shell' does The Right Thing.
-Returns position where output starts. "
- (let ((procbuf (or procbuf (process-buffer proc)))
- (comint-scroll-to-bottom-on-output t)
- (msg (format "## executing %s...\n" filename))
- (cmd (cond (cmd)
- (py-exec-command)
- (t (py-which-execute-file-command filename))))
- erg)
- (when py-verbose-p
- (unwind-protect
- (save-excursion
- (set-buffer procbuf)
- (funcall (process-filter proc) proc msg))))
- (set-buffer procbuf)
- (process-send-string proc cmd)
- (setq erg (goto-char (process-mark proc)))
- erg))
-
-;;: Subprocess utilities and filters
-(defvar py-last-exeption-buffer nil
- "Internal use only - when `py-up-exception' is called in
-source-buffer, this will deliver the exception-buffer again. ")
-
-(defun py-postprocess-output-buffer (buf)
- "Highlight exceptions found in BUF.
-If an exception occurred return t, otherwise return nil. BUF must exist."
- (let (line file bol err-p)
- (save-excursion
- (set-buffer buf)
- (goto-char (point-min))
- (while (re-search-forward py-traceback-line-re nil t)
- (setq file (match-string 1)
- line (string-to-number (match-string 2))
- bol (py-point 'bol))
- (overlay-put (make-overlay (match-beginning 0) (match-end 0))
- 'face 'highlight)))
- (when (and py-jump-on-exception line)
- (beep)
- (py-jump-to-exception file line py-line-number-offset)
- (setq err-p t))
- err-p))
-
-(defun py-jump-to-exception (file line py-line-number-offset)
- "Jump to the Python code in FILE at LINE."
- (let ((buffer (cond ((string-equal file "")
- (if (consp py-exception-buffer)
- (cdr py-exception-buffer)
- py-exception-buffer))
- ((and (consp py-exception-buffer)
- (string-equal file (car py-exception-buffer)))
- (cdr py-exception-buffer))
- ((ignore-errors (find-file-noselect file)))
- ;; could not figure out what file the exception
- ;; is pointing to, so prompt for it
- (t (find-file (read-file-name "Exception file: "
- nil
- file t))))))
- ;; Fiddle about with line number
- (setq line (+ py-line-number-offset line))
-
- (pop-to-buffer buffer)
- ;; Force Python mode
- (unless(eq major-mode 'python-mode)
- (python-mode))
- (goto-char (point-min))
- (forward-line (1- line))
- (message "Jumping to exception in file %s on line %d" file line)))
-
-(defun py-down-exception (&optional bottom)
- "Go to the next line down in the traceback.
-
-With \\[univeral-argument] (programmatically, optional argument
-BOTTOM), jump to the bottom (innermost) exception in the exception
-stack."
- (interactive "P")
- (py-find-next-exception-prepare 'down (when (eq 4 (prefix-numeric-value bottom)) "BOTTOM")))
-
-(defun py-up-exception (&optional top)
- "Go to the previous line up in the traceback.
-
-With \\[universal-argument] (programmatically, optional argument TOP)
-jump to the top (outermost) exception in the exception stack."
- (interactive "P")
- (unless py-last-exeption-buffer (setq py-last-exeption-buffer (current-buffer)))
- (py-find-next-exception-prepare 'up (when (eq 4 (prefix-numeric-value top)) "TOP")))
-
-(defun py-find-next-exception-prepare (direction start)
- "Setup exception regexps depending from kind of Python shell. "
- (let* ((name (get-process (substring (buffer-name (current-buffer)) 1 -1)))
- (buffer (cond (name (buffer-name (current-buffer)))
- ((buffer-live-p (get-buffer py-output-buffer))
- py-output-buffer)
- (py-last-exeption-buffer (buffer-name py-last-exeption-buffer))
- (t (error "Don't see exeption buffer")))))
- (when buffer (set-buffer (get-buffer buffer)))
- (switch-to-buffer (current-buffer))
- (if (eq direction 'up)
- (if (string= start "TOP")
- (py-find-next-exception 'bob buffer 're-search-forward "Top")
- (py-find-next-exception 'bol buffer 're-search-backward "Top"))
- (if (string= start "BOTTOM")
- (py-find-next-exception 'eob buffer 're-search-backward "Bottom")
- (py-find-next-exception 'eol buffer 're-search-forward "Bottom")))))
-
-(defun py-find-next-exception (start buffer searchdir errwhere)
- "Find the next Python exception and jump to the code that caused it.
-START is the buffer position in BUFFER from which to begin searching
-for an exception. SEARCHDIR is a function, either
-`re-search-backward' or `re-search-forward' indicating the direction
-to search. ERRWHERE is used in an error message if the limit (top or
-bottom) of the trackback stack is encountered."
- (let ((orig (point))
- (origline (py-count-lines))
- file line pos)
- (goto-char (py-point start))
- (if (funcall searchdir py-traceback-line-re nil t)
- (if (save-match-data (eq (py-count-lines) origline))
- (progn
- (forward-line (if (string= errwhere "Top") -1 1))
- (py-find-next-exception start buffer searchdir errwhere))
- (if (not (save-match-data (string-match "^IPython\\|^In \\[[0-9]+\\]: *\\|^>>>" (match-string-no-properties 0))))
- (progn
- (setq py-last-exeption-buffer (current-buffer))
- (if (save-match-data (string-match "File" (match-string-no-properties 0)))
- (progn
- (setq file (match-string-no-properties 2)
- pos (point)
- line (string-to-number (match-string-no-properties 3))))
- (save-excursion
- ;; file and line-number are in different lines
- (setq line (string-to-number (match-string-no-properties 1))
- pos (point)
- file (progn
- (when (and (re-search-backward "\\(^IPython\\|^In \\[[0-9]+\\]: *\\|^>>>\\|^[^\t >]+\\)>?[ \t]+in[ \t]+\\([^ \t\n]+\\)" nil t 1)
- (not (save-match-data (string-match "<\\|^IPython\\|^In \\[[0-9]+\\]: *\\|^>>>" (match-string-no-properties 1)))))
- (match-string-no-properties 1))))))
- (if file
- (when (string-match ".+\.pyc" file)
- (setq file (substring file 0 -1)))
- (error "%s of traceback" errwhere))
- (if (and file line)
- (if
- (and (string= "" file) (eq 1 line))
- (error "%s of traceback" errwhere)
- (py-jump-to-exception file line py-line-number-offset))
- (error "%s of traceback" errwhere)))
- (goto-char orig)
- (error "%s of traceback" errwhere))))))
-
-;;; python-mode-send.el
-
-(defun py-output-buffer-filter (&optional beg end)
- "Clear output buffer from py-shell-input prompt etc. "
- (interactive "*")
- (let ((beg (cond (beg)
- ((region-active-p)
- (region-beginning))
- (t (point-min))))
- (end (cond (end (copy-marker end))
- ((region-active-p)
- (copy-marker (region-end)))
- (t (copy-marker (point-max))))))
- (goto-char beg)
- (while (re-search-forward (concat "\\(" py-shell-input-prompt-1-regexp "\\|" py-shell-input-prompt-2-regexp "\\|" "^In \\[[0-9]+\\]: *" "\\)") nil (quote move) 1)
- (replace-match ""))
- (goto-char beg)))
-
-(defun py-send-string (string &optional process)
- "Evaluate STRING in inferior Python process."
- (interactive "sPython command: ")
- (let ((proc (or process (py-shell))))
- (comint-send-string proc string)
- (unless (string-match "\n\\'" string)
- ;; Make sure the text is properly LF-terminated.
- (comint-send-string proc "\n"))
- (when (string-match "\n[ \t].*\n?\\'" string)
- ;; If the string contains a final indented line, add a second newline so
- ;; as to make sure we terminate the multiline instruction.
- (comint-send-string proc "\n"))))
-
-;;; python-components-pdb.el
-
-;;; Pdbtrack
-
-(defun py-pdbtrack-overlay-arrow (activation)
- "Activate or de arrow at beginning-of-line in current buffer."
- ;; This was derived/simplified from edebug-overlay-arrow
- (cond (activation
- (setq overlay-arrow-position (make-marker))
- (setq overlay-arrow-string "=>")
- (set-marker overlay-arrow-position (line-beginning-position) (current-buffer))
- (setq py-pdbtrack-is-tracking-p t))
- (overlay-arrow-position
- (setq overlay-arrow-position nil)
- (setq py-pdbtrack-is-tracking-p nil))))
-
-(defun py-pdbtrack-track-stack-file (text)
- "Show the file indicated by the pdb stack entry line, in a separate window.
-
-Activity is disabled if the buffer-local variable
-`py-pdbtrack-do-tracking-p' is nil.
-
-We depend on the pdb input prompt matching `py-pdbtrack-input-prompt'
-at the beginning of the line.
-
-If the traceback target file path is invalid, we look for the most
-recently visited python-mode buffer which either has the name of the
-current function \(or class) or which defines the function \(or
-class). This is to provide for remote scripts, eg, Zope's 'Script
-\(Python)' - put a _copy_ of the script in a buffer named for the
-script, and set to python-mode, and pdbtrack will find it.)"
- ;; Instead of trying to piece things together from partial text
- ;; (which can be almost useless depending on Emacs version), we
- ;; monitor to the point where we have the next pdb prompt, and then
- ;; check all text from comint-last-input-end to process-mark.
- ;;
- ;; Also, we're very conservative about clearing the overlay arrow,
- ;; to minimize residue. This means, for instance, that executing
- ;; other pdb commands wipe out the highlight. You can always do a
- ;; 'where' (aka 'w') command to reveal the overlay arrow.
- (let* ((origbuf (current-buffer))
- (currproc (get-buffer-process origbuf)))
-
- (if (not (and currproc py-pdbtrack-do-tracking-p))
- (py-pdbtrack-overlay-arrow nil)
-
- (let* ((procmark (process-mark currproc))
- (block (buffer-substring (max comint-last-input-end
- (- procmark
- py-pdbtrack-track-range))
- procmark))
- target target_fname target_lineno target_buffer)
-
- (if (not (string-match (concat py-pdbtrack-input-prompt "$") block))
- (py-pdbtrack-overlay-arrow nil)
-
- (setq target (py-pdbtrack-get-source-buffer block))
-
- (if (stringp target)
- (message "pdbtrack: %s" target)
-
- (setq target_lineno (car target))
- (setq target_buffer (cadr target))
- (setq target_fname (buffer-file-name target_buffer))
- (switch-to-buffer-other-window target_buffer)
- (goto-char (point-min))
- (forward-line (1- target_lineno))
- (message "pdbtrack: line %s, file %s" target_lineno target_fname)
- (py-pdbtrack-overlay-arrow t)
- (pop-to-buffer origbuf t)))))))
-
-(defun py-pdbtrack-map-filename (filename)
-
- (let
- ((replacement-val (assoc-default
- filename py-pdbtrack-filename-mapping
- (lambda (mapkey path)
- (string-match
- (concat "^" (regexp-quote mapkey))
- path)))
- ))
- (if (not (eq replacement-val nil))
- (replace-match replacement-val 't 't filename)
- filename)))
-
-(defun py-pdbtrack-get-source-buffer (block)
- "Return line number and buffer of code indicated by block's traceback text.
-
-We look first to visit the file indicated in the trace.
-
-Failing that, we look for the most recently visited python-mode buffer
-with the same name or having the named function.
-
-If we're unable find the source code we return a string describing the
-problem as best as we can determine."
-
- (if (and (not (string-match py-pdbtrack-stack-entry-regexp block))
- ;; pydb integration still to be done
- ;; (not (string-match py-pydbtrack-stack-entry-regexp block))
- )
- "Traceback cue not found"
- (let* ((filename (match-string
- py-pdbtrack-marker-regexp-file-group block))
- (lineno (string-to-number (match-string
- py-pdbtrack-marker-regexp-line-group
- block)))
- (funcname (match-string py-pdbtrack-marker-regexp-funcname-group
- block))
- funcbuffer)
-
- (cond ((file-exists-p filename)
- (list lineno (find-file-noselect filename)))
-
- ((file-exists-p (py-pdbtrack-map-filename filename))
- (list lineno (find-file-noselect (py-pdbtrack-map-filename filename))))
-
- ((setq funcbuffer (py-pdbtrack-grub-for-buffer funcname lineno))
- (if (string-match "/Script (Python)$" filename)
- ;; Add in number of lines for leading '##' comments:
- (setq lineno
- (+ lineno
- (save-excursion
- (set-buffer funcbuffer)
- (count-lines
- (point-min)
- (max (point-min)
- (string-match "^\\([^#]\\|#[^#]\\|#$\\)"
- (buffer-substring (point-min)
- (point-max)))))))))
- (list lineno funcbuffer))
-
- ((= (elt filename 0) ?\<)
- (format "(Non-file source: '%s')" filename))
-
- (t (format "Not found: %s(), %s" funcname filename))))))
-
-(defun py-pdbtrack-grub-for-buffer (funcname lineno)
- "Find most recent buffer itself named or having function funcname.
-
-We walk the buffer-list history for python-mode buffers that are
-named for funcname or define a function funcname."
- (let ((buffers (buffer-list))
- buf
- got)
- (while (and buffers (not got))
- (setq buf (car buffers)
- buffers (cdr buffers))
- (if (and (save-excursion (set-buffer buf)
- (string= major-mode "python-mode"))
- (or (string-match funcname (buffer-name buf))
- (string-match (concat "^\\s-*\\(def\\|class\\)\\s-+"
- funcname "\\s-*(")
- (save-excursion
- (set-buffer buf)
- (buffer-substring (point-min)
- (point-max))))))
- (setq got buf)))
- got))
-
-
-;; pdbtrack functions
-(defun py-pdbtrack-toggle-stack-tracking (arg)
- "Set variable `py-pdbtrack-do-tracking-p'. "
- (interactive "P")
- (if (not (get-buffer-process (current-buffer)))
- (error "No process associated with buffer '%s'" (current-buffer)))
- ;; missing or 0 is toggle, >0 turn on, <0 turn off
- (if (or (not arg)
- (zerop (setq arg (prefix-numeric-value arg))))
- (setq py-pdbtrack-do-tracking-p (not py-pdbtrack-do-tracking-p))
- (setq py-pdbtrack-do-tracking-p (> arg 0)))
- (message "%sabled Python's pdbtrack"
- (if py-pdbtrack-do-tracking-p "En" "Dis")))
-
-(defun turn-on-pdbtrack ()
- (interactive)
- (py-pdbtrack-toggle-stack-tracking 1))
-
-(defun turn-off-pdbtrack ()
- (interactive)
- (py-pdbtrack-toggle-stack-tracking 0))
-
-;;; python-components-help.el
-
-(defun py-fetch-docu ()
- "Lookup in current buffer for the doku for the symbol at point.
-
-Useful for newly defined symbol, not known to python yet. "
- (interactive)
- (let* ((symb (prin1-to-string (symbol-at-point)))
- (args (py-expression))
- erg)
- (save-restriction
- (widen)
- (goto-char (point-min))
- (when (re-search-forward (concat py-def-or-class-re " *" symb) nil (quote move) 1)
- (forward-line 1)
- (when (looking-at "[ \t]*\"\"\"\\|[ \t]*'''\\|[ \t]*'[^]+\\|[ \t]*\"[^\"]+")
- (goto-char (match-end 0))
- (setq erg (buffer-substring-no-properties (match-beginning 0) (re-search-forward "\"\"\"\\|'''" nil 'move)))
- (when erg
- (set-buffer (get-buffer-create "*Python-Help*"))
- (erase-buffer)
- (when (and py-verbose-p (interactive-p)) (switch-to-buffer (current-buffer)))
- (insert erg)))))))
-
-(defun py-find-imports ()
- "Find top-level imports, updating `python-imports'."
- (interactive)
- (let* (imports)
- (save-excursion
- (goto-char (point-min))
- (while (re-search-forward
- "^import *[A-Za-z_][A-Za-z_0-9].*\\|^from +[A-Za-z_][A-Za-z_0-9]+ +import .*" nil t)
- (setq imports
- (concat
- imports
- (buffer-substring-no-properties (match-beginning 0) (match-end 0)) ";"))))
- (when (and py-verbose-p (interactive-p)) (message "%s" imports))
- imports))
-
-(defun py-eldoc-function ()
- "Print help on symbol at point. "
- (interactive)
- (if (unless (looking-at " ")
- (or
-
- (eq (get-char-property (point) 'face) 'font-lock-keyword-face)
- (eq (get-char-property (point) 'face) 'py-builtins-face)
- (eq (get-char-property (point) 'face) 'py-exception-name-face)
- (eq (get-char-property (point) 'face) 'py-class-name-face)
-
- ))
-
- (lexical-let* ((sym (prin1-to-string (symbol-at-point)))
- (origfile (buffer-file-name))
- (temp (make-temp-name (buffer-name)))
- (file (concat (expand-file-name temp py-temp-directory) ".py"))
- (cmd (py-find-imports))
- (no-quotes (save-excursion
- (skip-chars-backward "A-Za-z_0-9.")
- (and (looking-at "[A-Za-z_0-9.]+")
- (string-match "\\." (match-string-no-properties 0))))))
- (setq cmd (concat "import pydoc\n"
- cmd))
- (if no-quotes
- (setq cmd (concat cmd
- "try: pydoc.help(" sym ")\n"))
- (setq cmd (concat cmd "try: pydoc.help('" sym "')\n")))
- (setq cmd (concat cmd
- "except:
- print 'No help available on:', \"" sym "\""))
- (with-temp-buffer
- (insert cmd)
- (write-file file))
- (py-process-file file "*Python-Help*")
- (when (file-readable-p file)
- (delete-file file)))
- (delete-other-windows)))
-
-(defalias 'py-help-at-point 'py-describe-symbol)
-(defun py-describe-symbol (&optional arg)
- "Print help on symbol at point.
-
-Optional \\[universal-argument] used for debugging, will prevent deletion of temp file. "
- (interactive "P")
- (let* ((orig (point))
- (beg (progn (when (and (looking-back "(")(not (looking-at "\\sw"))) (forward-char -1)) (skip-chars-backward "a-zA-Z0-9_." (line-beginning-position))(point)))
- (end (progn (skip-chars-forward "a-zA-Z0-9_." (line-end-position))(point)))
- (sym (buffer-substring-no-properties beg end))
- (origfile (buffer-file-name))
- (temp (make-temp-name (buffer-name)))
- (file (concat (expand-file-name temp py-temp-directory) ".py"))
- (cmd (py-find-imports)))
- (goto-char orig)
- (setq cmd (concat "import pydoc\n"
- cmd))
- (setq cmd (concat cmd "pydoc.help('" sym "')\n"))
- (with-temp-buffer
- (insert cmd)
- (write-file file))
- (py-process-file file "*Python-Help*")
- (when (file-readable-p file)
- (unless (eq 4 (prefix-numeric-value arg)) (delete-file file)))))
-
-
-;;; Documentation
-(defun py-dump-help-string (str)
- (with-output-to-temp-buffer "*Help*"
- (let ((locals (buffer-local-variables))
- funckind funcname func funcdoc
- (start 0) mstart end
- keys)
- (while (string-match "^%\\([vc]\\):\\(.+\\)\n" str start)
- (setq mstart (match-beginning 0) end (match-end 0)
- funckind (substring str (match-beginning 1) (match-end 1))
- funcname (substring str (match-beginning 2) (match-end 2))
- func (intern funcname))
- (princ (substitute-command-keys (substring str start mstart)))
- (cond
- ((equal funckind "c") ; command
- (setq funcdoc (documentation func)
- keys (concat
- "Key(s): "
- (mapconcat 'key-description
- (where-is-internal func python-mode-map)
- ", "))))
- ((equal funckind "v") ; variable
- (setq funcdoc (documentation-property func 'variable-documentation)
- keys (if (assq func locals)
- (concat
- "Local/Global values: "
- (prin1-to-string (symbol-value func))
- " / "
- (prin1-to-string (default-value func)))
- (concat
- "Value: "
- (prin1-to-string (symbol-value func))))))
- (t ; unexpected
- (error "Error in py-dump-help-string, tag `%s'" funckind)))
- (princ (format "\n-> %s:\t%s\t%s\n\n"
- (if (equal funckind "c") "Command" "Variable")
- funcname keys))
- (princ funcdoc)
- (terpri)
- (setq start end))
- (princ (substitute-command-keys (substring str start))))
- (if (featurep 'xemacs) (print-help-return-message)
- (help-print-return-message))))
-
-(add-hook 'python-mode-hook
- (lambda ()
- (setq indent-tabs-mode py-indent-tabs-mode)
- (set (make-local-variable 'beginning-of-defun-function) 'py-beginning-of-def-or-class)
- (set (make-local-variable 'end-of-defun-function) 'py-end-of-def-or-class)
- ;; (orgstruct-mode 1)
- ))
-
-(defun py-describe-mode ()
- "Dump long form of `python-mode' docs."
- (interactive)
- (py-dump-help-string "Major mode for editing Python files.
-Knows about Python indentation, tokens, comments and continuation lines.
-Paragraphs are separated by blank lines only.
-
-Major sections below begin with the string `@'; specific function and
-variable docs begin with `->'.
-
-@EXECUTING PYTHON CODE
-
-\\[py-execute-import-or-reload]\timports or reloads the file in the Python interpreter
-\\[py-execute-buffer]\tsends the entire buffer to the Python interpreter
-\\[py-execute-region]\tsends the current region
-\\[py-execute-def-or-class]\tsends the current function or class definition
-\\[py-execute-string]\tsends an arbitrary string
-\\[py-shell]\tstarts a Python interpreter window; this will be used by
-\tsubsequent Python execution commands
-%c:py-execute-import-or-reload
-%c:py-execute-buffer
-%c:py-execute-region
-%c:py-execute-def-or-class
-%c:py-execute-string
-%c:py-shell
-
-@VARIABLES
-
-py-install-directory\twherefrom `python-mode' looks for extensions
-py-indent-offset\tindentation increment
-py-block-comment-prefix\tcomment string used by comment-region
-
-py-shell-name\tshell command to invoke Python interpreter
-py-temp-directory\tdirectory used for temp files (if needed)
-
-py-beep-if-tab-change\tring the bell if tab-width is changed
-%v:py-install-directory
-%v:py-indent-offset
-%v:py-block-comment-prefix
-%v:py-shell-name
-%v:py-temp-directory
-%v:py-beep-if-tab-change
-
-@KINDS OF LINES
-
-Each physical line in the file is either a `continuation line' (the
-preceding line ends with a backslash that's not part of a comment, or
-the paren/bracket/brace nesting level at the start of the line is
-non-zero, or both) or an `initial line' (everything else).
-
-An initial line is in turn a `blank line' (contains nothing except
-possibly blanks or tabs), a `comment line' (leftmost non-blank
-character is `#'), or a `code line' (everything else).
-
-Comment Lines
-
-Although all comment lines are treated alike by Python, Python mode
-recognizes two kinds that act differently with respect to indentation.
-
-An `indenting comment line' is a comment line with a blank, tab or
-nothing after the initial `#'. The indentation commands (see below)
-treat these exactly as if they were code lines: a line following an
-indenting comment line will be indented like the comment line. All
-other comment lines (those with a non-whitespace character immediately
-following the initial `#') are `non-indenting comment lines', and
-their indentation is ignored by the indentation commands.
-
-Indenting comment lines are by far the usual case, and should be used
-whenever possible. Non-indenting comment lines are useful in cases
-like these:
-
-\ta = b # a very wordy single-line comment that ends up being
-\t #... continued onto another line
-
-\tif a == b:
-##\t\tprint 'panic!' # old code we've `commented out'
-\t\treturn a
-
-Since the `#...' and `##' comment lines have a non-whitespace
-character following the initial `#', Python mode ignores them when
-computing the proper indentation for the next line.
-
-Continuation Lines and Statements
-
-The `python-mode' commands generally work on statements instead of on
-individual lines, where a `statement' is a comment or blank line, or a
-code line and all of its following continuation lines (if any)
-considered as a single logical unit. The commands in this mode
-generally (when it makes sense) automatically move to the start of the
-statement containing point, even if point happens to be in the middle
-of some continuation line.
-
-@INDENTATION
-
-Primarily for entering new code:
-\t\\[indent-for-tab-command]\t indent line appropriately
-\t\\[py-newline-and-indent]\t insert newline, then indent
-\t\\[py-electric-backspace]\t reduce indentation, or delete single character
-
-Primarily for reindenting existing code:
-\t\\[py-guess-indent-offset]\t guess py-indent-offset from file content; change locally
-\t\\[universal-argument] \\[py-guess-indent-offset]\t ditto, but change globally
-
-\t\\[py-indent-region]\t reindent region to match its context
-\t\\[py-shift-left]\t shift line or region left by py-indent-offset
-\t\\[py-shift-right]\t shift line or region right by py-indent-offset
-
-Unlike most programming languages, Python uses indentation, and only
-indentation, to specify block structure. Hence the indentation supplied
-automatically by `python-mode' is just an educated guess: only you know
-the block structure you intend, so only you can supply correct
-indentation.
-
-The \\[indent-for-tab-command] and \\[py-newline-and-indent] keys try to suggest plausible indentation, based on
-the indentation of preceding statements. E.g., assuming
-py-indent-offset is 4, after you enter
-\tif a > 0: \\[py-newline-and-indent]
-the cursor will be moved to the position of the `_' (_ is not a
-character in the file, it's just used here to indicate the location of
-the cursor):
-\tif a > 0:
-\t _
-If you then enter `c = d' \\[py-newline-and-indent], the cursor will move
-to
-\tif a > 0:
-\t c = d
-\t _
-`python-mode' cannot know whether that's what you intended, or whether
-\tif a > 0:
-\t c = d
-\t_
-was your intent. In general, `python-mode' either reproduces the
-indentation of the (closest code or indenting-comment) preceding
-statement, or adds an extra py-indent-offset blanks if the preceding
-statement has `:' as its last significant (non-whitespace and non-
-comment) character. If the suggested indentation is too much, use
-\\[py-electric-backspace] to reduce it.
-
-Continuation lines are given extra indentation. If you don't like the
-suggested indentation, change it to something you do like, and Python-
-mode will strive to indent later lines of the statement in the same way.
-
-If a line is a continuation line by virtue of being in an unclosed
-paren/bracket/brace structure (`list', for short), the suggested
-indentation depends on whether the current line contains the first item
-in the list. If it does, it's indented py-indent-offset columns beyond
-the indentation of the line containing the open bracket. If you don't
-like that, change it by hand. The remaining items in the list will mimic
-whatever indentation you give to the first item.
-
-If a line is a continuation line because the line preceding it ends with
-a backslash, the third and following lines of the statement inherit their
-indentation from the line preceding them. The indentation of the second
-line in the statement depends on the form of the first (base) line: if
-the base line is an assignment statement with anything more interesting
-than the backslash following the leftmost assigning `=', the second line
-is indented two columns beyond that `='. Else it's indented to two
-columns beyond the leftmost solid chunk of non-whitespace characters on
-the base line.
-
-Warning: indent-region should not normally be used! It calls \\[indent-for-tab-command]
-repeatedly, and as explained above, \\[indent-for-tab-command] can't guess the block
-structure you intend.
-%c:indent-for-tab-command
-%c:py-newline-and-indent
-%c:py-electric-backspace
-
-The next function may be handy when editing code you didn't write:
-%c:py-guess-indent-offset
-
-The remaining `indent' functions apply to a region of Python code. They
-assume the block structure (equals indentation, in Python) of the region
-is correct, and alter the indentation in various ways while preserving
-the block structure:
-%c:py-indent-region
-%c:py-shift-left
-%c:py-shift-right
-
-@MARKING & MANIPULATING REGIONS OF CODE
-
-\\[py-mark-block]\t mark block of lines
-\\[py-mark-def-or-class]\t mark smallest enclosing def
-\\[universal-argument] \\[py-mark-def-or-class]\t mark smallest enclosing class
-\\[comment-region]\t comment out region of code
-\\[universal-argument] \\[comment-region]\t uncomment region of code
-%c:py-mark-block
-%c:py-mark-def-or-class
-%c:comment-region
-
-@MOVING POINT
-
-\\[py-previous-statement]\t move to statement preceding point
-\\[py-next-statement]\t move to statement following point
-\\[py-goto-block-up]\t move up to start of current block
-\\[py-beginning-of-def-or-class]\t move to start of def
-\\[universal-argument] \\[py-beginning-of-def-or-class]\t move to start of class
-\\[py-end-of-def-or-class]\t move to end of def
-\\[universal-argument] \\[py-end-of-def-or-class]\t move to end of class
-
-The first two move to one statement beyond the statement that contains
-point. A numeric prefix argument tells them to move that many
-statements instead. Blank lines, comment lines, and continuation lines
-do not count as `statements' for these commands. So, e.g., you can go
-to the first code statement in a file by entering
-\t\\[beginning-of-buffer]\t to move to the top of the file
-\t\\[py-next-statement]\t to skip over initial comments and blank lines
-Or do `\\[py-previous-statement]' with a huge prefix argument.
-%c:py-previous-statement
-%c:py-next-statement
-%c:py-goto-block-up
-%c:py-beginning-of-def-or-class
-%c:py-end-of-def-or-class
-
-@LITTLE-KNOWN EMACS COMMANDS PARTICULARLY USEFUL IN PYTHON MODE
-
-`\\[indent-new-comment-line]' is handy for entering a multi-line comment.
-
-`\\[set-selective-display]' with a `small' prefix arg is ideally suited for viewing the
-overall class and def structure of a module.
-
-`\\[back-to-indentation]' moves point to a line's first non-blank character.
-
-`\\[indent-relative]' is handy for creating odd indentation.
-
-@OTHER EMACS HINTS
-
-If you don't like the default value of a variable, change its value to
-whatever you do like by putting a `setq' line in your .emacs file.
-E.g., to set the indentation increment to 4, put this line in your
-.emacs:
-\t(setq py-indent-offset 4)
-To see the value of a variable, do `\\[describe-variable]' and enter the variable
-name at the prompt.
-
-When entering a key sequence like `C-c C-n', it is not necessary to
-release the CONTROL key after doing the `C-c' part -- it suffices to
-press the CONTROL key, press and release `c' (while still holding down
-CONTROL), press and release `n' (while still holding down CONTROL), &
-then release CONTROL.
-
-Entering Python mode calls with no arguments the value of the variable
-`python-mode-hook', if that value exists and is not nil; for backward
-compatibility it also tries `py-mode-hook'; see the `Hooks' section of
-the Elisp manual for details.
-
-Obscure: When python-mode is first loaded, it looks for all bindings
-to newline-and-indent in the global keymap, and shadows them with
-local bindings to py-newline-and-indent."))
-
-;; (require 'info-look)
-;; The info-look package does not always provide this function (it
-;; appears this is the case with XEmacs 21.1)
-(when (fboundp 'info-lookup-maybe-add-help)
- (info-lookup-maybe-add-help
- :mode 'python-mode
- :regexp "[a-zA-Z0-9_]+"
- :doc-spec '(("(python-lib)Module Index")
- ("(python-lib)Class-Exception-Object Index")
- ("(python-lib)Function-Method-Variable Index")
- ("(python-lib)Miscellaneous Index"))))
-
-(defvar python-preoutput-result nil
- "Data from last `_emacs_out' line seen by the preoutput filter.")
-
-(defun py-send-receive (string)
- "Send STRING to inferior Python (if any) and return result.
-
-The result is what follows `_emacs_out' in the output.
-This is a no-op if `python-check-comint-prompt' returns nil."
- (python-shell-send-string-no-output string)
- (let ((proc (py-proc)))
- (with-current-buffer (process-buffer proc)
- (when (python-check-comint-prompt proc)
- (set (make-local-variable 'python-preoutput-result) nil)
- (accept-process-output proc 5)
- (prog1 python-preoutput-result
- (kill-local-variable 'python-preoutput-result))))))
-
-(defun py-find-function (name)
- "Find source of definition of function NAME.
-
-Interactively, prompt for name."
- (interactive
- (let ((symbol (with-syntax-table py-dotted-expression-syntax-table
- (current-word)))
- (enable-recursive-minibuffers t))
- (list (read-string (if symbol
- (format "Find location of (default %s): " symbol)
- "Find location of: ")
- nil nil symbol))))
- (unless python-imports
- (error "Not called from buffer visiting Python file"))
- (let* ((loc (py-send-receive (format "emacs.location_of (%S, %s)"
- name python-imports)))
- (loc (car (read-from-string loc)))
- (file (car loc))
- (line (cdr loc)))
- (unless file (error "Don't know where `%s' is defined" name))
- (pop-to-buffer (find-file-noselect file))
- (when (integerp line)
- (goto-char (point-min))
- (forward-line (1- line)))))
-
-(defun py-update-imports ()
- "Returns `python-imports'.
-
-Imports done are displayed in message buffer. "
- (interactive)
- (save-excursion
- (let ((oldbuf (current-buffer))
- (orig (point))
- erg)
- (mapc 'py-execute-string (split-string (car (read-from-string (py-find-imports))) "\n" t))
- (setq erg (car (read-from-string python-imports)))
- (set-buffer oldbuf)
- (goto-char orig)
- (when (interactive-p)
- (switch-to-buffer (current-buffer))
- (when py-verbose-p (message "%s" erg)))
- erg)))
-
-;;; python-components-extensions.el
-
-(defun py-indent-forward-line (&optional arg)
- "Indent and move one line forward to next indentation.
-Returns column of line reached.
-
-If `py-kill-empty-line' is non-nil, delete an empty line.
-When closing a form, use py-close-block et al, which will move and indent likewise.
-With \\[universal argument] just indent.
-"
- (interactive "*P")
- (let ((orig (point))
- erg)
- (unless (eobp)
- (if (and (py-in-comment-p)(not py-indent-comments))
- (forward-line 1)
- (py-indent-line-outmost)
- (unless (eq 4 (prefix-numeric-value arg))
- (if (eobp) (newline)
- (progn (forward-line 1))
- (when (and py-kill-empty-line (empty-line-p) (not (looking-at "[ \t]*\n[[:alpha:]]")) (not (eobp)))
- (delete-region (line-beginning-position) (line-end-position)))))))
- (back-to-indentation)
- (when (or (eq 4 (prefix-numeric-value arg)) (< orig (point))) (setq erg (current-column)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-dedent-forward-line (&optional arg)
- "Dedent line and move one line forward. "
- (interactive "*p")
- (py-dedent arg)
- (forward-line 1)
- (end-of-line)
- (skip-chars-backward " \t\r\n\f"))
-
-(defun py-dedent (&optional arg)
- "Dedent line according to `py-indent-offset'.
-
-With arg, do it that many times.
-If point is between indent levels, dedent to next level.
-Return indentation reached, if dedent done, nil otherwise.
-
-Affected by `py-dedent-keep-relative-column'. "
- (interactive "*p")
- (let ((orig (copy-marker (point)))
- erg)
- (dotimes (i arg)
- (let* ((cui (current-indentation))
- (remain (% cui py-indent-offset))
- (indent (* py-indent-offset (/ cui py-indent-offset))))
- (beginning-of-line)
- (fixup-whitespace)
- (if (< 0 remain)
- (indent-to-column indent)
- (indent-to-column (- cui py-indent-offset)))))
- (when (< (point) orig)
- (setq erg (current-column)))
- (if py-dedent-keep-relative-column
- (goto-char orig)
- (end-of-line)
- (skip-chars-backward " \t\r\n\f"))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-close-intern (regexp)
- "Core function, internal used only. "
- (let ((cui (ignore-errors (car (py-go-to-keyword regexp)))))
- (py-end-base regexp (point))
- (forward-line 1)
- (if py-close-provides-newline
- (unless (empty-line-p) (split-line))
- (fixup-whitespace))
- (indent-to-column cui)
- cui))
-
-(defun py-close-def ()
- "Set indent level to that of beginning of function definition.
-
-If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline. "
- (interactive "*")
- (let ((erg (py-close-intern py-def-re)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-close-class ()
- "Set indent level to that of beginning of class definition.
-
-If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline. "
- (interactive "*")
- (let ((erg (py-close-intern py-class-re)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-close-clause ()
- "Set indent level to that of beginning of clause definition.
-
-If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline. "
- (interactive "*")
- (let ((erg (py-close-intern py-clause-re)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-close-block ()
- "Set indent level to that of beginning of block definition.
-
-If final line isn't empty and `py-close-block-provides-newline' non-nil, insert a newline. "
- (interactive "*")
- (let ((erg (py-close-intern py-block-re)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-class-at-point ()
- "Return class definition as string.
-
-With interactive call, send it to the message buffer too. "
- (interactive)
- (save-excursion
- (let* ((beg (py-beginning-of-class))
- (end (py-end-of-class))
- (res (when (and (numberp beg)(numberp end)(< beg end)) (buffer-substring-no-properties beg end))))
- (when (and py-verbose-p (interactive-p)) (message "%s" res))
- res)))
-
-(defun py-line-at-point ()
- "Return line as string.
- With interactive call, send it to the message buffer too. "
- (interactive)
- (let* ((beg (line-beginning-position))
- (end (line-end-position))
- (res (when (and (numberp beg)(numberp end)(< beg end)) (buffer-substring-no-properties beg end))))
- (when (and py-verbose-p (interactive-p)) (message "%s" res))
- res))
-
-(defun py-looking-at-keywords-p ()
- "If looking at a python keyword. Returns t or nil. "
- (interactive)
- (let* ((kwds1 (car (nth 1 (eval (eval (quote (car font-lock-defaults)))))))
- (kwds3 (car (nth 3 (eval (eval (quote (car font-lock-defaults)))))))
- (res
- (or
- (looking-at kwds1)
- (looking-at kwds3))))
- (when (and py-verbose-p (interactive-p)) (message "looking-at keywords: %s" res))
- res))
-
-(defun py-match-paren-mode (&optional arg)
- "py-match-paren-mode nil oder t"
- (interactive "P")
- (if (or (eq 4 (prefix-numeric-value arg)) (not py-match-paren-mode))
- (setq py-match-paren-mode t)
- (setq py-match-paren-mode nil)))
-
-(defun py-match-paren ()
- "Goto to the opening or closing of block before or after point.
-
-With arg, do it that many times.
- Closes unclosed block if jumping from beginning. "
- (interactive)
- (let ((cuc (current-column))
- (cid (current-indentation)))
- (py-beginning-of-block-or-clause)
- (if (< cuc (current-indentation))
- (goto-char cuc)
- (back-to-indentation)
- (when (eq (point) cuc)
- (py-end-of-block)))))
-
-;;; from string-strip.el --- Strip CHARS from STRING
-
-;; (setq strip-chars-before "[ \t\r\n]*")
-(defcustom strip-chars-before "[ \t\r\n]*"
- "Regexp indicating which chars shall be stripped before STRING - which is defined by `string-chars-preserve'."
-
- :type 'string
- :group 'convenience)
-
-;; (setq strip-chars-after "[ \t\r\n]*")
-(defcustom strip-chars-after "[ \t\r\n]*\\'"
- "Regexp indicating which chars shall be stripped after STRING - which is defined by `string-chars-preserve'."
-
- :type 'string
- :group 'convenience)
-
-(defcustom string-chars-preserve "\\(.*?\\)"
- "Chars preserved of STRING.
-`strip-chars-after' and
-`strip-chars-before' indicate what class of chars to strip."
- :type 'string
- :group 'convenience)
-
-(defun string-strip (str &optional chars-before chars-after chars-preserve)
- "Return a copy of STR, CHARS removed.
-`CHARS-BEFORE' and `CHARS-AFTER' default is \"[ \t\r\n]*\",
-i.e. spaces, tabs, carriage returns, newlines and newpages.
-`CHARS-PRESERVE' must be a parentized expression,
-it defaults to \"\\(.*?\\)\""
- (let ((s-c-b (or chars-before
- strip-chars-before))
- (s-c-a (or chars-after
- strip-chars-after))
- (s-c-p (or chars-preserve
- string-chars-preserve)))
- (string-match
- (concat "\\`[" s-c-b"]*" s-c-p "[" s-c-a "]*\\'") str)
- (match-string 1 str)))
-
-;;;
-
-(defalias 'druck 'py-printform-insert)
-(defun py-printform-insert (&optional arg)
- "Inserts a print statement out of current `(car kill-ring)' by default, inserts ARG instead if delivered. "
- (interactive "*")
- (let* ((name (string-strip (or arg (car kill-ring))))
- (form (cond ((or (eq major-mode 'python-mode)(eq major-mode 'inferior-python-mode))
- (concat "print \"" name ": %s \" % " name)))))
- (insert form)))
-
-(defun py-documentation (w)
- "Launch PyDOC on the Word at Point"
- (interactive
- (list (let* ((word (thing-at-point 'word))
- (input (read-string
- (format "pydoc entry%s: "
- (if (not word) "" (format " (default %s)" word))))))
- (if (string= input "")
- (if (not word) (error "No pydoc args given")
- word) ;sinon word
- input)))) ;sinon input
- (shell-command (concat py-shell-name " -c \"from pydoc import help;help(\'" w "\')\"") "*PYDOCS*")
- (view-buffer-other-window "*PYDOCS*" t 'kill-buffer-and-window))
-
-(defun eva ()
- "Put \"eval(...)\" forms around strings at point. "
- (interactive "*")
- (skip-chars-forward " \t\r\n\f")
- (let* ((bounds (ar-bounds-of-word-atpt))
- (beg (car bounds))
- (end (cdr bounds)))
- (goto-char end)
- (insert ")")
- (goto-char beg)
- (insert "eval(")))
-
-(defun pst-here ()
- "Kill previous \"pdb.set_trace()\" and insert it at point. "
- (interactive "*")
- (let ((orig (copy-marker (point))))
- (search-backward "pdb.set_trace()")
- (replace-match "")
- (when (empty-line-p)
- (delete-region (line-beginning-position) (line-end-position)))
- (goto-char orig)
- (insert "pdb.set_trace()")))
-
-(defun py-line-to-printform-python2 (&optional arg)
- "Transforms the item on current in a print statement. "
- (interactive "*")
- (let* ((name (thing-at-point 'word))
- (form (cond ((or (eq major-mode 'python-mode)(eq major-mode 'inferior-python-mode))
- (concat "print \"" name ": %s \" % " name)))))
- (delete-region (line-beginning-position) (line-end-position))
- (insert form))
- (forward-line 1)
- (back-to-indentation))
-
-;;; python-components-imenu.el
-
-;; Imenu definitions
-(defvar py-imenu-class-regexp
- (concat ; <>
- "\\(" ;
- "^[ \t]*" ; newline and maybe whitespace
- "\\(class[ \t]+[a-zA-Z0-9_]+\\)" ; class name
- ; possibly multiple superclasses
- "\\([ \t]*\\((\\([a-zA-Z0-9_,. \t\n]\\)*)\\)?\\)"
- "[ \t]*:" ; and the final :
- "\\)" ; >>classes<<
- )
- "Regexp for Python classes for use with the Imenu package.")
-
-(defvar py-imenu-method-regexp
- (concat ; <>
- "\\(" ;
- "^[ \t]*" ; new line and maybe whitespace
- "\\(def[ \t]+" ; function definitions start with def
- "\\([a-zA-Z0-9_]+\\)" ; name is here
- ; function arguments...
- ;; "[ \t]*(\\([-+/a-zA-Z0-9_=,\* \t\n.()\"'#]*\\))"
- "[ \t]*(\\([^:#]*\\))"
- "\\)" ; end of def
- "[ \t]*:" ; and then the :
- "\\)" ; >>methods and functions<<
- )
- "Regexp for Python methods/functions for use with the Imenu package.")
-
-(defvar py-imenu-method-no-arg-parens '(2 8)
- "Indices into groups of the Python regexp for use with Imenu.
-
-Using these values will result in smaller Imenu lists, as arguments to
-functions are not listed.
-
-See the variable `py-imenu-show-method-args-p' for more
-information.")
-
-(defvar py-imenu-method-arg-parens '(2 7)
- "Indices into groups of the Python regexp for use with imenu.
-Using these values will result in large Imenu lists, as arguments to
-functions are listed.
-
-See the variable `py-imenu-show-method-args-p' for more
-information.")
-
-;; Note that in this format, this variable can still be used with the
-;; imenu--generic-function. Otherwise, there is no real reason to have
-;; it.
-(defvar py-imenu-generic-expression
- (cons
- (concat
- py-imenu-class-regexp
- "\\|" ; or...
- py-imenu-method-regexp)
- py-imenu-method-no-arg-parens)
- "Generic Python expression which may be used directly with Imenu.
-Used by setting the variable `imenu-generic-expression' to this value.
-Also, see the function \\[py-imenu-create-index] for a better
-alternative for finding the index.")
-
-;; These next two variables are used when searching for the Python
-;; class/definitions. Just saving some time in accessing the
-;; generic-python-expression, really.
-(defvar py-imenu-generic-regexp nil)
-(defvar py-imenu-generic-parens nil)
-
-(defun py-switch-imenu-index-function ()
- "For development only. Good old renamed `py-imenu-create-index'-function hangs with medium size files already. Working `py-imenu-create-index-new' is active by default.
-
-Switch between classic index machine `py-imenu-create-index'-function and new `py-imenu-create-index-new'.
-
-The former may provide a more detailed report, thus delivering two different index-machines is considered. "
- (interactive)
- (if (eq major-mode 'python-mode)
- (progn
- (if (eq imenu-create-index-function 'py-imenu-create-index-new)
- (setq imenu-create-index-function #'py-imenu-create-index)
- (setq imenu-create-index-function #'py-imenu-create-index-new))
- (when (and py-verbose-p (interactive-p)) (message "imenu-create-index-function: %s" (prin1-to-string imenu-create-index-function))))
- (error "%s" "Only available in buffers set to python-mode")))
-
-(defun py-imenu-create-index-function ()
- "Python interface function for the Imenu package.
-Finds all Python classes and functions/methods. Calls function
-\\[py-imenu-create-index-engine]. See that function for the details
-of how this works."
- (setq py-imenu-generic-regexp (car py-imenu-generic-expression)
- py-imenu-generic-parens (if py-imenu-show-method-args-p
- py-imenu-method-arg-parens
- py-imenu-method-no-arg-parens))
- (goto-char (point-min))
- ;; Warning: When the buffer has no classes or functions, this will
- ;; return nil, which seems proper according to the Imenu API, but
- ;; causes an error in the XEmacs port of Imenu. Sigh.
- (py-imenu-create-index-engine nil))
-
-(defun py-imenu-create-index-engine (&optional start-indent)
- "Function for finding Imenu definitions in Python.
-
-Finds all definitions (classes, methods, or functions) in a Python
-file for the Imenu package.
-
-Returns a possibly nested alist of the form
-
- (INDEX-NAME . INDEX-POSITION)
-
-The second element of the alist may be an alist, producing a nested
-list as in
-
- (INDEX-NAME . INDEX-ALIST)
-
-This function should not be called directly, as it calls itself
-recursively and requires some setup. Rather this is the engine for
-the function \\[py-imenu-create-index-function].
-
-It works recursively by looking for all definitions at the current
-indention level. When it finds one, it adds it to the alist. If it
-finds a definition at a greater indentation level, it removes the
-previous definition from the alist. In its place it adds all
-definitions found at the next indentation level. When it finds a
-definition that is less indented then the current level, it returns
-the alist it has created thus far.
-
-The optional argument START-INDENT indicates the starting indentation
-at which to continue looking for Python classes, methods, or
-functions. If this is not supplied, the function uses the indentation
-of the first definition found."
- (let (index-alist
- sub-method-alist
- looking-p
- def-name prev-name
- cur-indent def-pos
- (class-paren (first py-imenu-generic-parens))
- (def-paren (second py-imenu-generic-parens)))
- (setq looking-p
- (re-search-forward py-imenu-generic-regexp (point-max) t))
- (while looking-p
- (save-excursion
- ;; used to set def-name to this value but generic-extract-name
- ;; is new to imenu-1.14. this way it still works with
- ;; imenu-1.11
- ;;(imenu--generic-extract-name py-imenu-generic-parens))
- (let ((cur-paren (if (match-beginning class-paren)
- class-paren def-paren)))
- (setq def-name
- (buffer-substring-no-properties (match-beginning cur-paren)
- (match-end cur-paren))))
- (save-match-data
- (py-beginning-of-def-or-class))
- (beginning-of-line)
- (setq cur-indent (current-indentation)))
- ;; HACK: want to go to the next correct definition location. We
- ;; explicitly list them here but it would be better to have them
- ;; in a list.
- (setq def-pos
- (or (match-beginning class-paren)
- (match-beginning def-paren)))
- ;; if we don't have a starting indent level, take this one
- (or start-indent
- (setq start-indent cur-indent))
- ;; if we don't have class name yet, take this one
- (or prev-name
- (setq prev-name def-name))
- ;; what level is the next definition on? must be same, deeper
- ;; or shallower indentation
- (cond
- ;; Skip code in comments and strings
- ((py-in-literal))
- ;; at the same indent level, add it to the list...
- ((= start-indent cur-indent)
- (push (cons def-name def-pos) index-alist))
- ;; deeper indented expression, recurse
- ((< start-indent cur-indent)
- ;; the point is currently on the expression we're supposed to
- ;; start on, so go back to the last expression. The recursive
- ;; call will find this place again and add it to the correct
- ;; list
- (re-search-backward py-imenu-generic-regexp (point-min) 'move)
- (setq sub-method-alist (py-imenu-create-index-engine cur-indent))
- (if sub-method-alist
- ;; we put the last element on the index-alist on the start
- ;; of the submethod alist so the user can still get to it.
- (let ((save-elmt (pop index-alist)))
- (push (cons prev-name
- (cons save-elmt sub-method-alist))
- index-alist))))
- ;; found less indented expression, we're done.
- (t
- (setq looking-p nil)
- (re-search-backward py-imenu-generic-regexp (point-min) t)))
- ;; end-cond
- (setq prev-name def-name)
- (and looking-p
- (setq looking-p
- (re-search-forward py-imenu-generic-regexp
- (point-max) 'move))))
- (nreverse index-alist)))
-
-(defvar imenu-max-items)
-(defun py-imenu-create-index-new-intern (&optional thisend)
- (let* ((pos (match-beginning 0))
- (name (match-string-no-properties 2))
- (classname (concat "class " name))
- (thisend (or thisend (save-match-data (py-end-of-def-or-class-position))))
- sublist)
- (while (and (re-search-forward "^[ \t]*\\(?:\\(def\\|class\\)\\)[ \t]+\\(?:\\(\\sw+\\)\\)" (or thisend end) t 1)(not (nth 8 (syntax-ppss))))
- (let* ((pos (match-beginning 0))
- (name (match-string-no-properties 2))
- (classname (concat "class " name))
- (thisend (or thisend (save-match-data (py-end-of-def-or-class-position)))))
- (if (string= "class" (match-string-no-properties 1))
- (py-imenu-create-index-new-intern (save-match-data (py-end-of-def-or-class-position)))
- (push (cons (concat " " name) pos) sublist))))
- (if classname
- (progn
- (setq sublist (nreverse sublist))
- (push (cons classname pos) sublist)
- (push (cons classname sublist) index-alist))
- (push sublist index-alist))))
-
-(defun py-imenu-create-index-new (&optional beg end)
- "`imenu-create-index-function' for Python. "
- (set (make-local-variable 'imenu-max-items) 99)
- (let ((orig (point))
- (beg (or beg (point-min)))
- (end (or end (point-max)))
- index-alist vars thisend sublist classname)
- (goto-char beg)
- (while (and (re-search-forward "^[ \t]*\\(def\\|class\\)[ \t]+\\(\\sw+\\)" end t 1)(not (nth 8 (syntax-ppss))))
- (if (save-match-data (string= "class" (match-string-no-properties 1)))
- (progn
- (setq pos (match-beginning 0)
- name (match-string-no-properties 2)
- classname (concat "class " name)
- thisend (save-match-data (py-end-of-def-or-class-position))
- sublist '())
- (while (and (re-search-forward "^[ \t]*\\(def\\|class\\)[ \t]+\\(\\sw+\\)" (or thisend end) t 1)(not (nth 8 (syntax-ppss))))
- (let* ((pos (match-beginning 0))
- (name (match-string-no-properties 2))
- (classname (concat "class " name))
- (thisend (or thisend (save-match-data (py-end-of-def-or-class-position)))))
- (if (string= "class" (match-string-no-properties 1))
- (py-imenu-create-index-new-intern (save-match-data (py-end-of-def-or-class-position)))
- (push (cons (concat " " name) pos) sublist))))
- (if classname
- (progn
- (setq sublist (nreverse sublist))
- (push (cons classname pos) sublist)
- (push (cons classname sublist) index-alist))
- (push sublist index-alist)))
-
- (let ((pos (match-beginning 0))
- (name (match-string-no-properties 2)))
- (push (cons name pos) index-alist))))
- ;; Look for module variables.
- (goto-char (point-min))
- (while (re-search-forward "^\\(\\sw+\\)[ \t]*=" end t)
- (unless (nth 8 (syntax-ppss))
- (let ((pos (match-beginning 1))
- (name (match-string-no-properties 1)))
- (push (cons name pos) vars))))
- (setq index-alist (nreverse index-alist))
- (when vars
- (push (cons "Module variables"
- (nreverse vars))
- index-alist))
- (goto-char orig)
- index-alist))
-
-;;; python-components-completion.el
-(defun python-symbol-completions (symbol)
- "Return a list of completions of the string SYMBOL from Python process.
-The list is sorted.
-Uses `python-imports' to load modules against which to complete."
- (when (stringp symbol)
- (let ((completions
- (condition-case ()
- (car (read-from-string
- (python-send-receive
- (format "emacs.complete(%S,%s)"
- (substring-no-properties symbol)
- python-imports))))
- (error nil))))
- (sort
- ;; We can get duplicates from the above -- don't know why.
- (delete-dups completions)
- #'string<))))
-
-(defvar py-mode-output-map nil
- "Keymap used in *Python Output* buffers.")
-(if py-mode-output-map
- nil
- (setq py-mode-output-map (make-sparse-keymap))
- (define-key py-mode-output-map [button2] 'py-mouseto-exception)
- (define-key py-mode-output-map "\C-c\C-c" 'py-goto-exception)
- ;; TBD: Disable all self-inserting keys. This is bogus, we should
- ;; really implement this as *Python Output* buffer being read-only
- (mapc #' (lambda (key)
- (define-key py-mode-output-map key
- #'(lambda () (interactive) (beep))))
- (where-is-internal 'self-insert-command)))
-
-(setq py-shell-map
- (let ((map (copy-keymap comint-mode-map)))
- (define-key map (kbd "RET") 'comint-send-input)
- (define-key map "\C-c-" 'py-up-exception)
- (define-key map "\C-c=" 'py-down-exception)
- ;; defined three times... one should succed
- (define-key map (kbd "TAB") 'py-shell-complete)
- (define-key map [(meta tab)] 'py-shell-complete)
- map))
-
-(defun py-choose-shell-by-path (&optional file-separator-char)
- "Select Python executable according to version desplayed in path, current buffer-file is selected from.
-
-Returns versioned string, nil if nothing appropriate found "
- (interactive)
- (lexical-let ((path (buffer-file-name))
- (file-separator-char (or file-separator-char (char-to-string py-separator-char)))
- erg)
- (when (and path file-separator-char
- (string-match (concat file-separator-char "[iI]?[pP]ython[0-9.]+" file-separator-char) path))
- (setq erg (substring path
- (1+ (string-match (concat file-separator-char "[iI]?[pP]ython[0-9.]+" file-separator-char) path)) (1- (match-end 0)) )))
- (when (interactive-p) (message "%s" erg))
- erg))
-
-(defun py-choose-shell-by-shebang ()
- "Choose shell by looking at #! on the first line.
-
-Returns the specified Python resp. Jython shell command name. "
- (interactive)
- ;; look for an interpreter specified in the first line
- (let* (erg res)
- (save-excursion
- (goto-char (point-min))
- (when (looking-at py-shebang-regexp)
- (setq erg (split-string (match-string-no-properties 0) "[#! \t]"))
- (dolist (ele erg)
- (when (string-match "[bijp]+ython" ele)
- (setq res ele)))))
- (when (and py-verbose-p (interactive-p)) (message "%s" res))
- res))
-
-(defun py-choose-shell-by-import ()
- "Choose CPython or Jython mode based imports.
-
-If a file imports any packages in `py-jython-packages', within
-`py-import-check-point-max' characters from the start of the file,
-return `jython', otherwise return nil."
- (let (mode)
- (save-excursion
- (goto-char (point-min))
- (while (and (not mode)
- (search-forward-regexp
- "^\\(\\(from\\)\\|\\(import\\)\\) \\([^ \t\n.]+\\)"
- py-import-check-point-max t))
- (setq mode (and (member (match-string 4) py-jython-packages)
- 'jython))))
- mode))
-
-(defalias 'py-version 'py-which-python)
-(defun py-which-python ()
- "Returns version of Python of current environment, a number. "
- (interactive)
- (let* ((cmd (py-choose-shell))
- (erg (shell-command-to-string (concat cmd " --version")))
- ;; Result: "bpython version 0.9.7.1 on top of Python 2.7\n(C) 2008-2010 Bob Farrell, Andreas Stuehrk et al. See AUTHORS for detail.\n"
-
- (version (cond ((string-match (concat "\\(on top of Python \\)" "\\([0-9]\\.[0-9]+\\)") erg)
- (match-string-no-properties 2 erg))
- ((string-match "\\([0-9]\\.[0-9]+\\)" erg)
- (substring erg 7 (1- (length erg)))))))
- (when (interactive-p)
- (if erg
- (when py-verbose-p (message "%s" erg))
- (message "%s" "Could not detect Python on your system")))
- (string-to-number version)))
-
-(defun py-python-current-environment ()
- "Returns path of current Python installation. "
- (interactive)
- (let* ((cmd (py-choose-shell))
- (denv (shell-command-to-string (concat "type " cmd)))
- (erg (substring denv (string-match "/" denv))))
- (when (interactive-p)
- (if erg
- (when py-verbose-p (message "%s" erg))
- (message "%s" "Could not detect Python on your system")))
- erg))
-
-(defalias 'python-toggle-shells 'py-switch-shell)
-(defalias 'py-toggle-shell 'py-switch-shell)
-(defun py-switch-shell (&optional arg)
- "Toggles between the interpreter customized in `py-shell-toggle-1' resp. `py-shell-toggle-2'. Was hard-coded CPython and Jython in earlier versions, now starts with Python2 and Python3 by default.
-
-ARG might be a python-version string to set to.
-
-\\[universal-argument] `py-toggle-shell' prompts to specify a reachable Python command.
-\\[universal-argument] followed by numerical arg 2 or 3, `py-toggle-shell' opens a respective Python shell.
-\\[universal-argument] followed by numerical arg 5 opens a Jython shell.
-
-Should you need more shells to select, extend this command by adding inside the first cond:
-
- ((eq NUMBER (prefix-numeric-value arg))
- \"MY-PATH-TO-SHELL\")
-"
- (interactive "P")
- (let ((name (cond ((eq 2 (prefix-numeric-value arg))
- "python2")
- ((eq 3 (prefix-numeric-value arg))
- "python3")
- ((eq 4 (prefix-numeric-value arg))
- (string-strip
- (read-from-minibuffer "Python Shell: " py-shell-name) "\" " "\" "
- ))
- ((eq 5 (prefix-numeric-value arg))
- "jython")
- (t (if (string-match py-shell-name
- py-shell-toggle-1)
- py-shell-toggle-2
- py-shell-toggle-1))))
- erg)
- (cond ((or (string= "ipython" name)
- (string= "IPython" name))
- (setq py-shell-name name
- py-which-bufname "IPython"
- msg "IPython"
- mode-name "IPython"))
- ((string-match "python3" name)
- (setq py-shell-name name
- py-which-bufname (py-buffer-name-prepare name)
- msg "CPython"
- mode-name (py-buffer-name-prepare name)))
- ((string-match "jython" name)
- (setq py-shell-name name
- py-which-bufname (py-buffer-name-prepare name)
- msg "Jython"
- mode-name (py-buffer-name-prepare name)))
- ((string-match "python" name)
- (setq py-shell-name name
- py-which-bufname (py-buffer-name-prepare name)
- msg "CPython"
- mode-name py-which-bufname))
- (t
- (setq py-shell-name name
- py-which-bufname name
- msg name
- mode-name name)))
- ;; py-edit-only-p has no interpreter
- ;; (if py-edit-only-p
- ;; (setq erg py-shell-name)
- (setq erg (executable-find py-shell-name))
- ;;)
- (if erg
- (progn
- (force-mode-line-update)
- (when (interactive-p)
- (message "Using the %s shell, %s" msg erg))
- (setq py-output-buffer (format "*%s Output*" py-which-bufname)))
- (error (concat "Could not detect " py-shell-name " on your sys
-tem")))))
-
-(defalias 'py-which-shell 'py-choose-shell)
-(defun py-choose-shell (&optional arg pyshell dedicated)
- "Return an appropriate executable as a string.
-
-Returns nil, if no executable found.
-
-This does the following:
- - look for an interpreter with `py-choose-shell-by-shebang'
- - examine imports using `py-choose-shell-by-import'
- - look if Path/To/File indicates a Python version
- - if not successful, return default value of `py-shell-name'
-
-When interactivly called, messages the shell name, Emacs would in the given circtumstances.
-
-With \\[universal-argument] 4 is called `py-switch-shell' see docu there.
-"
- (interactive "P")
- (if (eq 4 (prefix-numeric-value arg))
- (py-switch-shell '(4))
- (let* ((erg (cond (py-force-py-shell-name-p
- py-shell-name)
- (py-use-local-default
- (if (not (string= "" py-shell-local-path))
- (expand-file-name py-shell-local-path)
- (message "Abort: `py-use-local-default' is set to `t' but `py-shell-local-path' is empty. Maybe call `py-toggle-local-default-use'")))
- ((comint-check-proc (current-buffer))
- (process-name (get-buffer-process (current-buffer))))
- ((py-choose-shell-by-shebang))
- ((py-choose-shell-by-import))
- ((py-choose-shell-by-path))
- (py-shell-name py-shell-name)
- (t (default-value 'py-shell-name))))
- (cmd (if py-edit-only-p erg
- (executable-find erg))))
- (if cmd
- (when (interactive-p)
- (message "%s" cmd))
- (when (interactive-p) (message "%s" "Could not detect Python on your system. Maybe set `py-edit-only-p'?")))
- erg)))
-
-(defalias 'toggle-py-smart-indentation 'py-toggle-smart-indentation)
-(defun py-toggle-smart-indentation (&optional arg)
- "If `py-smart-indentation' should be on or off.
-
-Returns value of `py-smart-indentation' switched to. "
- (interactive)
- (let ((arg (or arg (if py-smart-indentation -1 1))))
- (if (< 0 arg)
- (setq py-smart-indentation t)
- (setq py-smart-indentation nil)
- (setq py-indent-offset (default-value 'py-indent-offset)))
- (when (and py-verbose-p (interactive-p)) (message "py-smart-indentation: %s" py-smart-indentation))
- py-smart-indentation))
-
-(defun py-smart-indentation-on (&optional arg)
- "Make sure, `py-smart-indentation' is on.
-
-Returns value of `py-smart-indentation'. "
- (interactive "p")
- (let ((arg (or arg 1)))
- (toggle-py-smart-indentation arg))
- (when (interactive-p) (message "py-smart-indentation: %s" py-smart-indentation))
- py-smart-indentation)
-
-(defun py-smart-indentation-off (&optional arg)
- "Make sure, `py-smart-indentation' is off.
-
-Returns value of `py-smart-indentation'. "
- (interactive "p")
- (let ((arg (if arg (- arg) -1)))
- (toggle-py-smart-indentation arg))
- (when (interactive-p) (message "py-smart-indentation: %s" py-smart-indentation))
- py-smart-indentation)
-
-;;; Split-Windows-On-Execute forms
-(defalias 'toggle-py-split-windows-on-execute 'py-toggle-split-windows-on-execute)
-(defun py-toggle-split-windows-on-execute (&optional arg)
- "If `py-split-windows-on-execute-p' should be on or off.
-
- Returns value of `py-split-windows-on-execute-p' switched to. "
- (interactive)
- (let ((arg (or arg (if py-split-windows-on-execute-p -1 1))))
- (if (< 0 arg)
- (setq py-split-windows-on-execute-p t)
- (setq py-split-windows-on-execute-p nil))
- (when (interactive-p) (message "py-split-windows-on-execute-p: %s" py-split-windows-on-execute-p))
- py-split-windows-on-execute-p))
-
-(defun py-split-windows-on-execute-on (&optional arg)
- "Make sure, `py-split-windows-on-execute-p' is on.
-
-Returns value of `py-split-windows-on-execute-p'. "
- (interactive "p")
- (let ((arg (or arg 1)))
- (toggle-py-split-windows-on-execute arg))
- (when (interactive-p) (message "py-split-windows-on-execute-p: %s" py-split-windows-on-execute-p))
- py-split-windows-on-execute-p)
-
-(defun py-split-windows-on-execute-off ()
- "Make sure, `py-split-windows-on-execute-p' is off.
-
-Returns value of `py-split-windows-on-execute-p'. "
- (interactive)
- (toggle-py-split-windows-on-execute -1)
- (when (interactive-p) (message "py-split-windows-on-execute-p: %s" py-split-windows-on-execute-p))
- py-split-windows-on-execute-p)
-
-;;; Flymake
-(defun clear-flymake-allowed-file-name-masks (&optional suffix)
- "Remove entries with SUFFIX from `flymake-allowed-file-name-masks'.
-
-Default is \"\\.py\\'\" "
- (interactive "P")
- (let ((suffix (cond ((eq 4 (prefix-numeric-value suffix))
- (read-from-minibuffer "Suffix: " "\\\\.py\\\\'"))
- (suffix suffix)
- (t "\\\\.py\\\\'")))
- (erg flymake-allowed-file-name-masks)
- (newlist '()))
- (dolist (ele flymake-allowed-file-name-masks)
- (unless
- ;; (string-match "\\\\.py\\\\'" (car ele))
- (string-match suffix (car ele))
- (add-to-list 'newlist ele t)))
- (setq flymake-allowed-file-name-masks newlist)
- (when (and py-verbose-p (interactive-p)) (message "%s" flymake-allowed-file-name-masks))
- flymake-allowed-file-name-masks))
-
-(defun py-toggle-flymake-intern (name command)
- ;; (clear-flymake-allowed-file-name-masks)
- (unless (string-match "pyflakespep8" name)
- (unless (executable-find name)
- (when py-verbose-p (message "Don't see %s. Use `easy_install' %s? " name name))))
- (let* ((temp-file (flymake-init-create-temp-buffer-copy
- 'flymake-create-temp-inplace))
- (local-file (file-relative-name
- temp-file
- (file-name-directory buffer-file-name))))
- (add-to-list 'flymake-allowed-file-name-masks (car (read-from-string (concat "(\"\\.py\\'\" flymake-" name ")"))))
- (list command (list local-file))))
-
-(defun pylint-flymake-mode ()
- "Toggle `pylint' `flymake-mode'. "
- (interactive)
- (if flymake-mode
- ;; switch off
- (flymake-mode)
- (py-toggle-flymake-intern "pylint" "pylint")
- (flymake-mode)))
-
-(defun pyflakes-flymake-mode ()
- "Toggle `pyflakes' `flymake-mode'. "
- (interactive)
- (if flymake-mode
- ;; switch off
- (flymake-mode)
- (py-toggle-flymake-intern "pyflakes" "pyflakes")
- (flymake-mode)))
-
-(defun pychecker-flymake-mode ()
- "Toggle `pychecker' `flymake-mode'. "
- (interactive)
- (if flymake-mode
- ;; switch off
- (flymake-mode)
- (py-toggle-flymake-intern "pychecker" "pychecker")
- (flymake-mode)))
-
-(defun pep8-flymake-mode ()
- "Toggle `pep8' `flymake-mode'. "
- (interactive)
- (if flymake-mode
- ;; switch off
- (flymake-mode)
- (py-toggle-flymake-intern "pep8" "pep8")
- (flymake-mode)))
-
-(defun pyflakespep8-flymake-mode ()
- "Toggle `pyflakespep8' `flymake-mode'.
-
-Joint call to pyflakes and pep8 as proposed by
-
-Keegan Carruthers-Smith
-
-"
- (interactive)
- (if flymake-mode
- ;; switch off
- (flymake-mode)
- (py-toggle-flymake-intern "pyflakespep8" "pyflakespep8")
- (flymake-mode)))
-
-;;; Shell-Switch-Buffers-On-Execute forms
-(defalias 'toggle-py-shell-switch-buffers-on-execute 'py-toggle-shell-switch-buffers-on-execute)
-(defun py-toggle-shell-switch-buffers-on-execute (&optional arg)
- "If `py-switch-buffers-on-execute-p' should be on or off.
-
- Returns value of `py-switch-buffers-on-execute-p' switched to. "
- (interactive)
- (let ((arg (or arg (if py-switch-buffers-on-execute-p -1 1))))
- (if (< 0 arg)
- (setq py-switch-buffers-on-execute-p t)
- (setq py-switch-buffers-on-execute-p nil))
- (when (interactive-p) (message "py-shell-switch-buffers-on-execute: %s" py-switch-buffers-on-execute-p))
- py-switch-buffers-on-execute-p))
-
-(defun py-shell-switch-buffers-on-execute-on (&optional arg)
- "Make sure, `py-switch-buffers-on-execute-p' is on.
-
-Returns value of `py-switch-buffers-on-execute-p'. "
- (interactive "p")
- (let ((arg (or arg 1)))
- (toggle-py-shell-switch-buffers-on-execute arg))
- (when (interactive-p) (message "py-shell-switch-buffers-on-execute: %s" py-switch-buffers-on-execute-p))
- py-switch-buffers-on-execute-p)
-
-(defun py-shell-switch-buffers-on-execute-off ()
- "Make sure, `py-switch-buffers-on-execute-p' is off.
-
-Returns value of `py-switch-buffers-on-execute-p'. "
- (interactive)
- (toggle-py-shell-switch-buffers-on-execute -1)
- (when (interactive-p) (message "py-shell-switch-buffers-on-execute: %s" py-switch-buffers-on-execute-p))
- py-switch-buffers-on-execute-p)
-
-;;;
-(defvar inferior-python-mode-map
- (let ((map (make-sparse-keymap)))
- ;; This will inherit from comint-mode-map.
- (define-key map "\C-c\C-l" 'py-load-file)
- (define-key map "\C-c\C-v" 'python-check)
- ;; Note that we _can_ still use these commands which send to the
- ;; Python process even at the prompt iff we have a normal prompt,
- ;; i.e. '>>> ' and not '... '. See the comment before
- ;; py-send-region. Fixme: uncomment these if we address that.
- map))
-
-(defun py-normalize-directory (directory &optional file-separator-char)
- "Make sure DIRECTORY ends with a file-path separator char.
-
-Returns DIRECTORY"
- (let* ((file-separator-char (or file-separator-char (char-to-string py-separator-char)))
- (erg (cond ((string-match (concat file-separator-char "$") directory)
- directory)
- ((not (string= "" directory))
- (concat directory file-separator-char)))))
- (unless erg (when py-verbose-p (message "Warning: directory is empty")))
- erg))
-
-(defun py-install-directory-check ()
- "Do some sanity check for `py-install-directory'.
-
-Returns `t' if successful. "
- (interactive)
- (let ((erg (and (boundp 'py-install-directory) (stringp py-install-directory) (< 1 (length py-install-directory)))))
- (when (interactive-p) (message "py-install-directory-check: %s" erg))
- erg))
-
-(defun py-guess-py-install-directory ()
- "Takes value of user directory aka $HOME
-if `(locate-library \"python-mode\")' is not succesful. "
- (interactive)
- (let ((erg (file-name-directory (locate-library "python-mode"))))
- (if erg
- (progn
- (setq py-install-directory erg)
- (when (and py-verbose-p (interactive-p)) (message "Setting py-install-directory to: %s" erg)))
- (setq py-install-directory (expand-file-name "~/")))
- py-install-directory ))
-
-(defun py-set-load-path ()
- "Include needed subdirs of python-mode directory. "
- (interactive)
- (let ((py-install-directory (py-normalize-directory py-install-directory (char-to-string py-separator-char))))
- (cond ((and (not (string= "" py-install-directory))(stringp py-install-directory))
- (add-to-list 'load-path (expand-file-name py-install-directory))
- (add-to-list 'load-path (concat (expand-file-name py-install-directory) "completion"))
- (add-to-list 'load-path (concat (expand-file-name py-install-directory) "test"))
- (add-to-list 'load-path (concat (expand-file-name py-install-directory) "tools")))
- ((when py-guess-py-install-directory-p
- (let ((guessed-py-install-directory (py-guess-py-install-directory)))
- (when guessed-py-install-directory
- (add-to-list 'load-path guessed-py-install-directory)))))
- (t (error "Please set `py-install-directory', see INSTALL"))
- (when (interactive-p) (message "%s" load-path)))))
-
-;;; Autopair
-;; Original author: Joao Tavora
-;; X-URL: http://autopair.googlecode.com
-
-;; variables
-(defvar autopair-pair-criteria 'help-balance
- "How to decide whether to pair opening brackets or quotes.
-
-Set this to 'always to always pair, or 'help-balance to be more
-criterious when pairing.")
-
-(defvar autopair-skip-criteria 'help-balance
- "How to decide whether to skip closing brackets or quotes.
-
-Set this to 'always to always skip, or 'help-balance to be more
-criterious when skipping.")
-
-(defvar autopair-emulation-alist nil
- "A dinamic keymap for autopair set mostly from the current
- syntax table.")
-
-(unless (> emacs-major-version 23)
- (defvar autopair-dont-activate nil
- "Control activation of `autopair-global-mode'.
-
-Set this to a non-nil value to skip activation of `autopair-mode'
-in certain contexts. If however the value satisfies `functionp'
-and is a function of no arguments, the function is called and it is
-the return value that decides.")
- (make-variable-buffer-local 'autopair-dont-activate))
-
-(defvar autopair-extra-pairs nil
- "Extra pairs for which to use pairing.
-
-It's a Common-lisp-style even-numbered property list, each pair
-of elements being of the form (TYPE , PAIRS). PAIRS is a mixed
-list whose elements are cons cells, which look like cells look
-like (OPENING . CLOSING). Autopair pairs these like
-parenthesis.
-
-TYPE can be one of:
-
-:string : whereby PAIRS will be considered only when inside a
- string literal
-
-:comment : whereby PAIRS will be considered only when inside a comment
-
-:code : whereby PAIRS will be considered only when outisde a
- string and a comment.
-
-:everywhere : whereby PAIRS will be considered in all situations
-
-In Emacs-lisp, this might be useful
-
-(add-hook 'emacs-lisp-mode-hook
- #'(lambda ()
- (setq autopair-extra-pairs `(:comment ((?`. ?'))))))
-
-Note that this does *not* work for single characters,
-e.x. characters you want to behave as quotes. See the
-docs/source comments for more details.")
-
-(make-variable-buffer-local 'autopair-extra-pairs)
-
-(defvar autopair-dont-pair `(:string (?') :comment (?'))
- "Characters for which to skip any pairing behaviour.
-
-This variable overrides `autopair-pair-criteria' and
-`autopair-extra-pairs'. It does not
- (currently) affect the skipping behaviour.
-
-It's a Common-lisp-style even-numbered property list, each pair
-of elements being of the form (TYPE , CHARS). CHARS is a list of
-characters and TYPE can be one of:
-
-:string : whereby characters in CHARS will not be autopaired when
- inside a string literal
-
-:comment : whereby characters in CHARS will not be autopaired when
- inside a comment
-
-:never : whereby characters in CHARS won't even have their
- bindings replaced by autopair's. This particular option
- should be used for troubleshooting and requires
- `autopair-mode' to be restarted to have any effect.")
-(make-variable-buffer-local 'autopair-dont-pair)
-
-(defvar autopair-action nil
- "Autopair action decided on by last interactive autopair command, or nil.
-
-When autopair decides on an action this is a list whose first
-three elements are (ACTION PAIR POS-BEFORE).
-
-ACTION is one of `opening', `insert-quote', `skip-quote',
-`backspace', `newline' or `paired-delimiter'. PAIR is the pair of
-the `autopair-inserted' character, if applicable. POS-BEFORE is
-value of point before action command took place .")
-
-(defvar autopair-wrap-action nil
- "Autowrap action decided on by autopair, if any.
-
-When autopair decides on an action this is a list whose first
-three elements are (ACTION PAIR POS-BEFORE REGION-BEFORE).
-
-ACTION can only be `wrap' currently. PAIR and POS-BEFORE
-delimiter are as in `autopair-action'. REGION-BEFORE is a cons
-cell with the bounds of the region before the command takes
-place")
-
-(defvar autopair-handle-action-fns '()
- "Autopair handlers to run *instead* of the default handler.
-
-Each element is a function taking three arguments (ACTION, PAIR
-and POS-BEFORE), which are the three elements of the
-`autopair-action' variable, which see.
-
-If non-nil, these functions are called *instead* of the single
-function `autopair-default-handle-action', so use this variable
-to specify special behaviour. To also run the default behaviour,
-be sure to include `autopair-default-handle-action' in the
-list, or call it from your handlers.")
-(make-variable-buffer-local 'autopair-handle-action-fns)
-
-(defvar autopair-handle-wrap-action-fns '()
- "Autopair wrap handlers to run *instead* of the default handler.
-
-Each element is a function taking four arguments (ACTION, PAIR,
-POS-BEFORE and REGION-BEFORE), which are the three elements of the
-`autopair-wrap-action' variable, which see.
-
-If non-nil, these functions are called *instead* of the single
-function `autopair-default-handle-wrap-action', so use this
-variable to specify special behaviour. To also run the default
-behaviour, be sure to include `autopair-default-handle-wrap-action' in
-the list, or call it in your handlers.")
-(make-variable-buffer-local 'autopair-handle-wrap-action-fns)
-
-(defvar autopair-inserted nil
- "Delimiter inserted by last interactive autopair command.
-
-This is calculated with `autopair-calculate-inserted', which see.")
-
-(defun autopair-calculate-inserted ()
- "Attempts to guess the delimiter the current command is inserting.
-
-For now, simply returns `last-command-event'"
- last-command-event)
-
-;; minor mode and global mode
-;;
-(define-globalized-minor-mode autopair-global-mode autopair-mode autopair-on)
-
-(defun autopair-on ()
- (unless (or buffer-read-only
- (and (not (minibufferp))
- (string-match "^ \\*" (buffer-name)))
- (eq major-mode 'sldb-mode)
- (and (boundp 'autopair-dont-activate)
- autopair-dont-activate))
- (autopair-mode 1)))
-
-(define-minor-mode autopair-mode
- "Automagically pair braces and quotes. "
- nil " pair" nil
- (cond (autopair-mode
- ;; Setup the dynamic emulation keymap
- ;;
- (let ((map (make-sparse-keymap)))
- (define-key map [remap delete-backward-char] 'autopair-backspace)
- (define-key map [remap backward-delete-char-untabify] 'autopair-backspace)
- (define-key map (kbd "") 'autopair-backspace)
- (define-key map [backspace] 'autopair-backspace)
- (define-key map (kbd "DEL") 'autopair-backspace)
- (define-key map [return] 'autopair-newline)
- (define-key map (kbd "RET") 'autopair-newline)
- (dotimes (char 256) ;; only searches the first 256 chars,
- ;; TODO: is this enough/toomuch/stupid?
- (unless (member char
- (getf autopair-dont-pair :never))
- (let* ((syntax-entry (aref (syntax-table) char))
- (class (and syntax-entry
- (syntax-class syntax-entry)))
- (pair (and syntax-entry
- (cdr syntax-entry))))
- (cond ((eq class (car (string-to-syntax "(")))
- ;; syntax classes "opening parens" and "close parens"
- (define-key map (string char) 'autopair-insert-opening)
- (define-key map (string pair) 'autopair-skip-close-maybe))
- ((eq class (car (string-to-syntax "\"")))
- ;; syntax class "string quote
- (define-key map (string char) 'autopair-insert-or-skip-quote))
- ((eq class (car (string-to-syntax "$")))
- ;; syntax class "paired-delimiter"
- ;;
- ;; Apropos this class, see Issues 18, 25 and
- ;; elisp info node "35.2.1 Table of Syntax
- ;; Classes". The fact that it supresses
- ;; syntatic properties in the delimited region
- ;; dictates that deciding to autopair/autoskip
- ;; can't really be as clean as the string
- ;; delimiter.
- ;;
- ;; Apparently, only `TeX-mode' uses this, so
- ;; the best is to bind this to
- ;; `autopair-insert-or-skip-paired-delimiter'
- ;; which defers any decision making to
- ;; mode-specific post-command handler
- ;; functions.
- ;;
- (define-key map (string char) 'autopair-insert-or-skip-paired-delimiter))))))
- ;; read `autopair-extra-pairs'
- (dolist (pairs-list (remove-if-not #'listp autopair-extra-pairs))
- (dolist (pair pairs-list)
- (define-key map (string (car pair)) 'autopair-extra-insert-opening)
- (define-key map (string (cdr pair)) 'autopair-extra-skip-close-maybe)))
-
- (set (make-local-variable 'autopair-emulation-alist) (list (cons t map)))
- (add-hook 'python-mode-hook
- #'(lambda ()
- (setq autopair-handle-action-fns
- (list #'autopair-default-handle-action
- #'autopair-python-triple-quote-action)))))
- (setq autopair-action nil)
- (setq autopair-wrap-action nil)
- (add-hook 'emulation-mode-map-alists 'autopair-emulation-alist 'append)
- (add-hook 'post-command-hook 'autopair-post-command-handler nil 'local))
- (t
- (remove-hook 'python-mode-hook
- #'(lambda ()
- (setq autopair-handle-action-fns
- (list #'autopair-default-handle-action
- #'autopair-python-triple-quote-action))))
- (setq autopair-emulation-alist nil)
- (remove-hook 'emulation-mode-map-alists 'autopair-emulation-alist)
- (remove-hook 'post-command-hook 'autopair-post-command-handler 'local))))
-
-;; helper functions
-;;
-(defun autopair-syntax-ppss ()
- "Calculate syntax info relevant to autopair.
-
-A list of four elements is returned:
-
-- SYNTAX-INFO is either the result `syntax-ppss' or the result of
- calling `parse-partial-sexp' with the appropriate
- bounds (previously calculated with `syntax-ppss'.
-
-- WHERE-SYM can be one of the symbols :string, :comment or :code.
-
-- QUICK-SYNTAX-INFO is always the result returned by `syntax-ppss'.
-
-- BOUNDS are the boudaries of the current string or comment if
- we're currently inside one."
- (let* ((quick-syntax-info (syntax-ppss))
- (string-or-comment-start (nth 8 quick-syntax-info)))
- (cond (;; inside a string, recalculate
- (nth 3 quick-syntax-info)
- (list (parse-partial-sexp (1+ string-or-comment-start) (point))
- :string
- quick-syntax-info
- (cons string-or-comment-start
- (condition-case nil
- (scan-sexps string-or-comment-start 1)
- (error nil)))))
- ((nth 4 quick-syntax-info)
- (list (parse-partial-sexp (1+ (nth 8 quick-syntax-info)) (point))
- :comment
- quick-syntax-info))
- (t
- (list quick-syntax-info
- :code
- quick-syntax-info)))))
-
-(defun autopair-find-pair (delim &optional closing)
- (when (and delim
- (integerp delim))
- (let ((syntax-entry (aref (syntax-table) delim)))
- (cond ((eq (syntax-class syntax-entry) (car (string-to-syntax "(")))
- (cdr syntax-entry))
- ((or (eq (syntax-class syntax-entry) (car (string-to-syntax "\"")))
- (eq (syntax-class syntax-entry) (car (string-to-syntax "$"))))
- delim)
- ((and (not closing)
- (eq (syntax-class syntax-entry) (car (string-to-syntax ")"))))
- (cdr syntax-entry))
- (autopair-extra-pairs
- (some #'(lambda (pair-list)
- (some #'(lambda (pair)
- (cond ((eq (cdr pair) delim) (car pair))
- ((eq (car pair) delim) (cdr pair))))
- pair-list))
- (remove-if-not #'listp autopair-extra-pairs)))))))
-
-(defun autopair-calculate-wrap-action ()
- (when (and transient-mark-mode mark-active)
- (when (> (point) (mark))
- (exchange-point-and-mark))
- (save-excursion
- (let* ((region-before (cons (region-beginning)
- (region-end)))
- (point-before (point))
- (start-syntax (syntax-ppss (car region-before)))
- (end-syntax (syntax-ppss (cdr region-before))))
- (when (or (not (eq autopair-autowrap 'help-balance))
- (and (eq (nth 0 start-syntax) (nth 0 end-syntax))
- (eq (nth 3 start-syntax) (nth 3 end-syntax))))
- (list 'wrap (or (second autopair-action)
- (autopair-find-pair autopair-inserted))
- point-before
- region-before))))))
-
-(defun autopair-original-binding (fallback-keys)
- (or (key-binding `[,autopair-inserted])
- (key-binding (this-single-command-keys))
- (key-binding fallback-keys)))
-
-(defun autopair-fallback (&optional fallback-keys)
- (let* ((autopair-emulation-alist nil)
- (beyond-cua (let ((cua--keymap-alist nil))
- (autopair-original-binding fallback-keys)))
- (beyond-autopair (autopair-original-binding fallback-keys)))
- (when autopair-autowrap
- (setq autopair-wrap-action (autopair-calculate-wrap-action)))
-
- (setq this-original-command beyond-cua)
- ;; defer to "paredit-mode" if that is installed and running
- (when (and (featurep 'paredit)
- (string-match "paredit" (symbol-name beyond-cua)))
- (setq autopair-action nil))
- (let ((cua-delete-selection (not autopair-autowrap))
- (blink-matching-paren (not autopair-action)))
- (call-interactively beyond-autopair))))
-
-(defvar autopair-autowrap 'help-balance
- "If non-nil autopair attempts to wrap the selected region.
-
-This is also done in an optimistic \"try-to-balance\" fashion.
-Set this to to 'help-balance to be more criterious when wrapping.")
-
-(defvar autopair-skip-whitespace nil
- "If non-nil also skip over whitespace when skipping closing delimiters.
-
-If set to 'chomp, this will be most useful in lisp-like languages where you want
-lots of )))))....")
-
-(defvar autopair-blink (if (boundp 'blink-matching-paren)
- blink-matching-paren
- t)
- "If non-nil autopair blinks matching delimiters.")
-
-(defvar autopair-blink-delay 0.1
- "Autopair's blink-the-delimiter delay.")
-
-(defun autopair-document-bindings (&optional fallback-keys)
- (concat
- "Works by scheduling possible autopair behaviour, then calls
-original command as if autopair didn't exist"
- (when (eq this-command 'describe-key)
- (let* ((autopair-emulation-alist nil)
- (command (or (key-binding (this-single-command-keys))
- (key-binding fallback-keys))))
- (when command
- (format ", which in this case is `%s'" command))))
- "."))
-
-(defun autopair-escaped-p (syntax-info)
- (nth 5 syntax-info))
-
-(defun autopair-exception-p (where-sym exception-where-sym blacklist &optional fn)
- (and (or (eq exception-where-sym :everywhere)
- (eq exception-where-sym where-sym))
- (member autopair-inserted
- (if fn
- (mapcar fn (getf blacklist exception-where-sym))
- (getf blacklist exception-where-sym)))))
-
-(defun autopair-up-list (syntax-info &optional closing)
- "Try to uplist as much as possible, moving point.
-
-Return nil if something prevented uplisting.
-
-Otherwise return a cons of char positions of the starting
-delimiter and end delimiters of the last list we just came out
-of. If we aren't inside any lists return a cons of current point.
-
-If inside nested lists of mixed parethesis types, finding a
-matching parenthesis of a mixed-type is considered OK (non-nil is
-returned) and uplisting stops there."
- (condition-case nil
- (let ((howmany (car syntax-info))
- (retval (cons (point)
- (point))))
- (while (and (> howmany 0)
- (condition-case err
- (progn
- (scan-sexps (point) (- (point-max)))
- (error err))
- (error (let ((opening (and closing
- (autopair-find-pair closing))))
- (setq retval (cons (fourth err)
- (point)))
- (or (not opening)
- (eq opening (char-after (fourth err))))))))
- (goto-char (scan-lists (point) 1 1))
- (decf howmany))
- retval)
- (error nil)))
-
-;; interactive commands and their associated predicates
-;;
-(defun autopair-insert-or-skip-quote ()
- (interactive)
- (setq autopair-inserted (autopair-calculate-inserted))
- (let* ((syntax-triplet (autopair-syntax-ppss))
- (syntax-info (first syntax-triplet))
- (where-sym (second syntax-triplet))
- (orig-info (third syntax-triplet))
- ;; inside-string may the quote character itself or t if this
- ;; is a "generically terminated string"
- (inside-string (and (eq where-sym :string)
- (fourth orig-info)))
- (escaped-p (autopair-escaped-p syntax-info))
-
- )
- (cond (;; decides whether to skip the quote...
- ;;
- (and (not escaped-p)
- (eq autopair-inserted (char-after (point)))
- (or
- ;; ... if we're already inside a string and the
- ;; string starts with the character just inserted,
- ;; or it's a generically terminated string
- (and inside-string
- (or (eq inside-string t)
- (eq autopair-inserted inside-string)))
- ;; ... if we're in a comment and ending a string
- ;; (the inside-string criteria does not work
- ;; here...)
- (and (eq where-sym :comment)
- (condition-case nil
- (eq autopair-inserted (char-after (scan-sexps (1+ (point)) -1)))
- (error nil)))))
- (setq autopair-action (list 'skip-quote autopair-inserted (point))))
- (;; decides whether to pair, i.e do *not* pair the quote if...
- ;;
- (not
- (or
- escaped-p
- ;; ... inside a generic string
- (eq inside-string t)
- ;; ... inside an unterminated string started by this char
- (autopair-in-unterminated-string-p syntax-triplet)
- ;; ... uplisting forward causes an error which leaves us
- ;; inside an unterminated string started by this char
- (condition-case err
- (progn (save-excursion (up-list)) nil)
- (error
- (autopair-in-unterminated-string-p (save-excursion
- (goto-char (fourth err))
- (autopair-syntax-ppss)))))
- (autopair-in-unterminated-string-p (save-excursion
- (goto-char (point-max))
- (autopair-syntax-ppss)))
- ;; ... comment-disable or string-disable are true here.
- ;; The latter is only useful if we're in a string
- ;; terminated by a character other than
- ;; `autopair-inserted'.
- (some #'(lambda (sym)
- (autopair-exception-p where-sym sym autopair-dont-pair))
- '(:comment :string))))
- (setq autopair-action (list 'insert-quote autopair-inserted (point)))))
- (autopair-fallback)))
-
-(put 'autopair-insert-or-skip-quote 'function-documentation
- '(concat "Insert or possibly skip over a quoting character.\n\n"
- (autopair-document-bindings)))
-
-(defun autopair-in-unterminated-string-p (autopair-triplet)
- (and (eq autopair-inserted (fourth (third autopair-triplet)))
- (condition-case nil (progn (scan-sexps (ninth (third autopair-triplet)) 1) nil) (error t))))
-
-(defun autopair-insert-opening ()
- (interactive)
- (setq autopair-inserted (autopair-calculate-inserted))
- (when (autopair-pair-p)
- (setq autopair-action (list 'opening (autopair-find-pair autopair-inserted) (point))))
- (autopair-fallback))
-(put 'autopair-insert-opening 'function-documentation
- '(concat "Insert opening delimiter and possibly automatically close it.\n\n"
- (autopair-document-bindings)))
-
-(defun autopair-skip-close-maybe ()
- (interactive)
- (setq autopair-inserted (autopair-calculate-inserted))
- (when (autopair-skip-p)
- (setq autopair-action (list 'closing (autopair-find-pair autopair-inserted) (point))))
- (autopair-fallback))
-(put 'autopair-skip-close-maybe 'function-documentation
- '(concat "Insert or possibly skip over a closing delimiter.\n\n"
- (autopair-document-bindings)))
-
-(defun autopair-backspace ()
- (interactive)
- (setq autopair-inserted (autopair-calculate-inserted))
- (when (char-before)
- (setq autopair-action (list 'backspace (autopair-find-pair (char-before) 'closing) (point))))
- (autopair-fallback (kbd "DEL")))
-(put 'autopair-backspace 'function-documentation
- '(concat "Possibly delete a pair of paired delimiters.\n\n"
- (autopair-document-bindings (kbd "DEL"))))
-
-(defun autopair-newline ()
- (interactive)
- (setq autopair-inserted (autopair-calculate-inserted))
- (let ((pair (autopair-find-pair (char-before))))
- (when (and pair
- (eq (char-syntax pair) ?\))
- (eq (char-after) pair))
- (setq autopair-action (list 'newline pair (point))))
- (autopair-fallback (kbd "RET"))))
-(put 'autopair-newline 'function-documentation
- '(concat "Do a smart newline when right between parenthesis.\n
-In other words, insert an extra newline along with the one inserted normally
-by this command. Then place point after the first, indented.\n\n"
- (autopair-document-bindings (kbd "RET"))))
-
-(defun autopair-skip-p ()
- (let* ((syntax-triplet (autopair-syntax-ppss))
- (syntax-info (first syntax-triplet))
- (orig-point (point)))
- (cond ((eq autopair-skip-criteria 'help-balance)
- (save-excursion
- (let ((pos-pair (autopair-up-list syntax-info autopair-inserted)))
- ;; if `autopair-up-list' returned something valid, we
- ;; probably want to skip but only if on of the following is true.
- ;;
- ;; 1. it returned a cons of equal values (we're not inside any list
- ;;
- ;; 2. up-listing stopped at a list that contains our original point
- ;;
- ;; 3. up-listing stopped at a list that does not
- ;; contain out original point but its starting
- ;; delimiter matches the one we expect.
- (and pos-pair
- (or (eq (car pos-pair) (cdr pos-pair))
- (< orig-point (cdr pos-pair))
- (eq (char-after (car pos-pair))
- (autopair-find-pair autopair-inserted)))))))
- ((eq autopair-skip-criteria 'need-opening)
- (save-excursion
- (condition-case err
- (progn
- (backward-list)
- t)
- (error nil))))
- (t
- t))))
-
-(defun autopair-pair-p ()
- (let* ((syntax-triplet (autopair-syntax-ppss))
- (syntax-info (first syntax-triplet))
- (where-sym (second syntax-triplet))
- (orig-point (point)))
- (and (not (some #'(lambda (sym)
- (autopair-exception-p where-sym sym autopair-dont-pair))
- '(:string :comment :code :everywhere)))
- (cond ((eq autopair-pair-criteria 'help-balance)
- (and (not (autopair-escaped-p syntax-info))
- (save-excursion
- (let ((pos-pair (autopair-up-list syntax-info))
- (prev-point (point-max))
- (expected-closing (autopair-find-pair autopair-inserted)))
- (condition-case err
- (progn
- (while (not (eq prev-point (point)))
- (setq prev-point (point))
- (forward-sexp))
- t)
- (error
- ;; if `forward-sexp' (called byp
- ;; `autopair-forward') returned an error.
- ;; typically we don't want to autopair,
- ;; unless one of the following occurs:
- ;;
- (cond (;; 1. The error is *not* of type "containing
- ;; expression ends prematurely", which means
- ;; we're in the "too-many-openings" situation
- ;; and thus want to autopair.
- (not (string-match "prematurely" (second err)))
- t)
- (;; 2. We stopped at a closing parenthesis. Do
- ;; autopair if we're in a mixed parens situation,
- ;; i.e. the last list jumped over was started by
- ;; the paren we're trying to match
- ;; (`autopair-inserted') and ended by a different
- ;; parens, or the closing paren we stopped at is
- ;; also different from the expected. The second
- ;; `scan-lists' places point at the closing of the
- ;; last list we forwarded over.
- ;;
- (condition-case err
- (prog1
- (eq (char-after (scan-lists (point) -1 0))
- autopair-inserted)
- (goto-char (scan-lists (point) -1 -1)))
- (error t))
-
- (or
- ;; mixed () ] for input (, yes autopair
- (not (eq expected-closing (char-after (third err))))
- ;; mixed (] ) for input (, yes autopair
- (not (eq expected-closing (char-after (point))))
- ;; ()) for input (, not mixed
- ;; hence no autopair
- ))
- (t
- nil))
- ;; (eq (fourth err) (point-max))
- ))))))
- ((eq autopair-pair-criteria 'always)
- t)
- (t
- (not (autopair-escaped-p syntax-info)))))))
-
-;; post-command-hook stuff
-;;
-(defun autopair-post-command-handler ()
- "Performs pairing and wrapping based on `autopair-action' and
-`autopair-wrap-action'. "
- (when (and autopair-wrap-action
- (notany #'null autopair-wrap-action))
-
- (if autopair-handle-wrap-action-fns
- (condition-case err
- (mapc #'(lambda (fn)
- (apply fn autopair-wrap-action))
- autopair-handle-wrap-action-fns)
- (error (progn
- (message "[autopair] error running custom `autopair-handle-wrap-action-fns', switching autopair off")
- (autopair-mode -1))))
- (apply #'autopair-default-handle-wrap-action autopair-wrap-action))
- (setq autopair-wrap-action nil))
-
- (when (and autopair-action
- (notany #'null autopair-action))
- (if autopair-handle-action-fns
- (condition-case err
- (mapc #'(lambda (fn)
- (funcall fn (first autopair-action) (second autopair-action) (third autopair-action)))
- autopair-handle-action-fns)
- (error (progn
- (message "[autopair] error running custom `autopair-handle-action-fns', switching autopair off")
- (autopair-mode -1))))
- (apply #'autopair-default-handle-action autopair-action))
- (setq autopair-action nil)))
-
-(defun autopair-blink-matching-open ()
- (let ((blink-matching-paren autopair-blink)
- (show-paren-mode nil)
- (blink-matching-delay autopair-blink-delay))
- (blink-matching-open)))
-
-(defun autopair-blink (&optional pos)
- (when autopair-blink
- (if pos
- (save-excursion
- (goto-char pos)
- (sit-for autopair-blink-delay))
- (sit-for autopair-blink-delay))))
-
-(defun autopair-default-handle-action (action pair pos-before)
- ;;(message "action is %s" action)
- (condition-case err
- (cond (;; automatically insert closing delimiter
- (and (eq 'opening action)
- (not (eq pair (char-before))))
- (insert pair)
- (autopair-blink)
- (backward-char 1))
- (;; automatically insert closing quote delimiter
- (eq 'insert-quote action)
- (insert pair)
- (autopair-blink)
- (backward-char 1))
- (;; automatically skip oper closer quote delimiter
- (and (eq 'skip-quote action)
- (eq pair (char-after (point))))
- (delete-char 1)
- (autopair-blink-matching-open))
- (;; skip over newly-inserted-but-existing closing delimiter
- ;; (normal case)
- (eq 'closing action)
- (let ((skipped 0))
- (when autopair-skip-whitespace
- (setq skipped (save-excursion (skip-chars-forward "\s\n\t"))))
- (when (eq autopair-inserted (char-after (+ (point) skipped)))
- (backward-delete-char 1)
- (unless (zerop skipped) (autopair-blink (+ (point) skipped)))
- (if (eq autopair-skip-whitespace 'chomp)
- (delete-char skipped)
- (forward-char skipped))
- (forward-char))
- (autopair-blink-matching-open)))
- (;; autodelete closing delimiter
- (and (eq 'backspace action)
- (eq pair (char-after (point))))
- (delete-char 1))
- (;; opens an extra line after point, then indents
- (and (eq 'newline action)
- (eq pair (char-after (point))))
- (save-excursion
- (newline-and-indent))
- (indent-according-to-mode)
- (when (or (and (boundp 'global-hl-line-mode)
- global-hl-line-mode)
- (and (boundp 'hl-line-mode)
- hl-line-mode))
- (hl-line-unhighlight) (hl-line-highlight))))
- (error
- (message "[autopair] Ignored error in `autopair-default-handle-action'"))))
-
-(defun autopair-default-handle-wrap-action (action pair pos-before region-before)
- "Default handler for the wrapping action in `autopair-wrap'"
- (condition-case err
- (when (eq 'wrap action)
- (let ((delete-active-region nil))
- (cond
- ((eq 'opening (first autopair-action))
- (goto-char (1+ (cdr region-before)))
- (insert pair)
- (autopair-blink)
- (goto-char (1+ (car region-before))))
- (;; wraps
- (eq 'closing (first autopair-action))
- (delete-backward-char 1)
- (insert pair)
- (goto-char (1+ (cdr region-before)))
- (insert autopair-inserted))
- ((eq 'insert-quote (first autopair-action))
- (goto-char (1+ (cdr region-before)))
- (insert pair)
- (autopair-blink))
- (t
- (delete-backward-char 1)
- (goto-char (cdr region-before))
- (insert autopair-inserted)))
- (setq autopair-action nil)))
- (error
- (message "[autopair] Ignored error in `autopair-default-handle-wrap-action'"))))
-
-;; example python triple quote helper
-;;
-(defun autopair-python-triple-quote-action (action pair pos-before)
- (cond ((and (eq 'insert-quote action)
- (>= (point) 3)
- (string= (buffer-substring (- (point) 3)
- (point))
- (make-string 3 pair)))
- (save-excursion (insert (make-string 2 pair))))
- ((and (eq 'backspace action)
- (>= (point) 2)
- (<= (point) (- (point-max) 2))
- (string= (buffer-substring (- (point) 2)
- (+ (point) 2))
- (make-string 4 pair)))
- (delete-region (- (point) 2)
- (+ (point) 2)))
- ((and (eq 'skip-quote action)
- (<= (point) (- (point-max) 2))
- (string= (buffer-substring (point)
- (+ (point) 2))
- (make-string 2 pair)))
- (forward-char 2))
- (t
- t)))
-
-;; example latex paired-delimiter helper
-;;
-(defun autopair-latex-mode-paired-delimiter-action (action pair pos-before)
- "Pair or skip latex's \"paired delimiter\" syntax in math mode. Added AucText support, thanks Massimo Lauria"
- (when (eq action 'paired-delimiter)
- (when (eq (char-before) pair)
- (if (and (or
- (eq (get-text-property pos-before 'face) 'tex-math)
- (eq (get-text-property (- pos-before 1) 'face) 'font-latex-math-face)
- (member 'font-latex-math-face (get-text-property (- pos-before 1) 'face)))
- (eq (char-after) pair))
- (cond ((and (eq (char-after) pair)
- (eq (char-after (1+ (point))) pair))
- ;; double skip
- (delete-char 1)
- (forward-char))
- ((eq (char-before pos-before) pair)
- ;; doube insert
- (insert pair)
- (backward-char))
- (t
- ;; simple skip
- (delete-char 1)))
- (insert pair)
- (backward-char)))))
-
-;; Commands and predicates for the autopair-extra* feature
-;;
-
-(defun autopair-extra-insert-opening ()
- (interactive)
- (setq autopair-inserted (autopair-calculate-inserted))
- (when (autopair-extra-pair-p)
- (setq autopair-action (list 'opening (autopair-find-pair autopair-inserted) (point))))
- (autopair-fallback))
-(put 'autopair-extra-insert-opening 'function-documentation
- '(concat "Insert (an extra) opening delimiter and possibly automatically close it.\n\n"
- (autopair-document-bindings)))
-
-(defun autopair-extra-skip-close-maybe ()
- (interactive)
- (setq autopair-inserted (autopair-calculate-inserted))
- (when (autopair-extra-skip-p)
- (setq autopair-action (list 'closing autopair-inserted (point))))
- (autopair-fallback))
-(put 'autopair-extra-skip-close-maybe 'function-documentation
- '(concat "Insert or possibly skip over a (and extra) closing delimiter.\n\n"
- (autopair-document-bindings)))
-
-(defun autopair-extra-pair-p ()
- (let* ((syntax-triplet (autopair-syntax-ppss))
- (syntax-info (first syntax-triplet))
- (where-sym (second syntax-triplet)))
- (some #'(lambda (sym)
- (autopair-exception-p where-sym sym autopair-extra-pairs #'car))
- '(:everywhere :comment :string :code))))
-
-(defun autopair-extra-skip-p ()
- (let* ((syntax-triplet (autopair-syntax-ppss))
- (syntax-info (first syntax-triplet))
- (where-sym (second syntax-triplet))
- (orig-point (point)))
- (and (eq (char-after (point)) autopair-inserted)
- (some #'(lambda (sym)
- (autopair-exception-p where-sym sym autopair-extra-pairs #'cdr))
- '(:comment :string :code :everywhere))
- (save-excursion
- (condition-case err
- (backward-sexp (point-max))
- (error
- (goto-char (third err))))
- (search-forward (make-string 1 (autopair-find-pair autopair-inserted))
- orig-point
- 'noerror)))))
-
-;; Commands and tex-mode specific handler functions for the "paired
-;; delimiter" syntax class.
-;;
-(defun autopair-insert-or-skip-paired-delimiter ()
- " insert or skip a character paired delimiter"
- (interactive)
- (setq autopair-inserted (autopair-calculate-inserted))
- (setq autopair-action (list 'paired-delimiter autopair-inserted (point)))
- (autopair-fallback))
-
-(put 'autopair-insert-or-skip-paired-delimiter 'function-documentation
- '(concat "Insert or possibly skip over a character with a syntax-class of \"paired delimiter\"."
- (autopair-document-bindings)))
-
-
-;; monkey-patching: Compatibility with delete-selection-mode and cua-mode
-;;
-;; Ideally one would be able to use functions as the value of the
-;; 'delete-selection properties of the autopair commands. The function
-;; would return non-nil when no wrapping should/could be performed.
-;;
-;; Until then use some `defadvice' i.e. monkey-patching, which relies
-;; on these features' implementation details.
-;;
-(put 'autopair-insert-opening 'delete-selection t)
-(put 'autopair-skip-close-maybe 'delete-selection t)
-(put 'autopair-insert-or-skip-quote 'delete-selection t)
-(put 'autopair-extra-insert-opening 'delete-selection t)
-(put 'autopair-extra-skip-close-maybe 'delete-selection t)
-(put 'autopair-backspace 'delete-selection 'supersede)
-(put 'autopair-newline 'delete-selection t)
-
-(defun autopair-should-autowrap ()
- (let ((name (symbol-name this-command)))
- (and autopair-mode
- (not (eq this-command 'autopair-backspace))
- (string-match "^autopair" (symbol-name this-command))
- (autopair-calculate-wrap-action))))
-
-(defadvice cua--pre-command-handler-1 (around autopair-override activate)
- "Don't actually do anything if autopair is about to autowrap. "
- (unless (autopair-should-autowrap) ad-do-it))
-
-(defadvice delete-selection-pre-hook (around autopair-override activate)
- "Don't actually do anything if autopair is about to autowrap. "
- (unless (autopair-should-autowrap) ad-do-it))
-
-;;;
-(defvar py-menu)
-(defvar python-mode-map)
-(setq python-mode-map
- (let ((map (make-sparse-keymap)))
- ;; electric keys
- (define-key map [(:)] 'py-electric-colon)
- (define-key map [(\#)] 'py-electric-comment)
- (define-key map [(delete)] 'py-electric-delete)
- (define-key map [(backspace)] 'py-electric-backspace)
- (define-key map [(control backspace)] 'py-hungry-delete-backwards)
- (define-key map [(control c) (delete)] 'py-hungry-delete-forward)
- (define-key map [(control c)(control a)] 'py-mark-statement)
- ;; moving point
- (define-key map [(control c)(control p)] 'py-beginning-of-statement)
- (define-key map [(control c)(control n)] 'py-end-of-statement)
- (define-key map [(control c)(control u)] 'py-beginning-of-block)
- (define-key map [(control c)(control q)] 'py-end-of-block)
- (define-key map [(control meta a)] 'py-beginning-of-def-or-class)
- (define-key map [(control meta e)] 'py-end-of-def-or-class)
-
- ;; (define-key map [(meta i)] 'py-indent-forward-line)
- (define-key map [(control j)] 'py-newline-and-indent)
- ;; Most Pythoneers expect RET `py-newline-and-indent'
- ;; (define-key map (kbd "RET") 'py-newline-and-dedent)
- (define-key map (kbd "RET") 'py-newline-and-indent)
- ;; (define-key map (kbd "RET") 'newline)
- (define-key map [(super backspace)] 'py-dedent)
- ;; (define-key map [(control return)] 'py-newline-and-dedent)
- ;; indentation level modifiers
- (define-key map [(control c)(control l)] 'py-shift-left)
- (define-key map [(control c)(control r)] 'py-shift-right)
- (define-key map [(control c)(<)] 'py-shift-left)
- (define-key map [(control c)(>)] 'py-shift-right)
- (define-key map [(control c)(tab)] 'py-indent-region)
- (define-key map [(control c)(:)] 'py-guess-indent-offset)
- ;; subprocess commands
- (define-key map [(control c)(control c)] 'py-execute-buffer)
- (define-key map [(control c)(control m)] 'py-execute-import-or-reload)
- (define-key map [(control c)(control s)] 'py-execute-string)
- (define-key map [(control c)(|)] 'py-execute-region)
- (define-key map [(control meta x)] 'py-execute-def-or-class)
- (define-key map [(control c)(!)] 'py-shell)
- (define-key map [(control c)(control t)] 'py-toggle-shell)
- (define-key map [(control meta h)] 'py-mark-def-or-class)
- (define-key map [(control c)(control k)] 'py-mark-block-or-clause)
- (define-key map [(control c)(.)] 'py-expression)
- ;; Miscellaneous
- (define-key map [(control c)(control d)] 'py-pdbtrack-toggle-stack-tracking)
- (define-key map [(control c)(control f)] 'py-sort-imports)
- (define-key map [(control c)(\#)] 'py-comment-region)
- (define-key map [(control c)(\?)] 'py-describe-mode)
- (define-key map [(control c)(control e)] 'py-describe-symbol)
- (define-key map [(control c)(-)] 'py-up-exception)
- (define-key map [(control c)(=)] 'py-down-exception)
- (define-key map [(control x) (n) (d)] 'py-narrow-to-defun)
- ;; information
- (define-key map [(control c)(control b)] 'py-submit-bug-report)
- (define-key map [(control c)(control v)] 'py-version)
- (define-key map [(control c)(control w)] 'py-pychecker-run)
- (define-key map (kbd "TAB") 'py-indent-line)
- (if py-complete-function
- (define-key map [(meta tab)] py-complete-function)
- (define-key map [(meta tab)] 'py-shell-complete))
- ;; (substitute-key-definition 'complete-symbol 'completion-at-point
- ;; map global-map)
- (easy-menu-define py-menu map "Python Tools"
- `("PyTools"
- :help "Python mode tools"
-
- ["Customize Python mode" (customize-group 'python-mode)
- :help "Open the customization buffer for Python mode"]
-
- "-"
-
- ["pychecker-run" py-pychecker-run
- :help "`py-pychecker-run'
-Run pychecker"]
-
- ("Pylint ... "
- :help "Extendet report options
-call `easy_install pylint' if not available"
-
- ["pylint-run" py-pylint-run
- :help "`pylint-run'
-Pylint will display a number of messages as it analyzes the code,
-as well as some statistics about the number of warnings and
-errors found in different files - unless called with arg \"--errors-only\". The messages are classified
-under various categories such as errors and warnings
-
-Pylint checks length of lines of code, if variable names are
-well-formed according to your coding standard, if declared
-interfaces are truly implemented, and much more. Additionally, it
-is possible to write plugins.
-
-call `easy_install pylint' if not available
-"]
-
- ["pylint-help" pylint-help
- :help "`pylint-help'
-List extendet report options
-"]
- ["pylint-flymake-mode" pylint-flymake-mode
- :help "`pylint-flymake-mode'
-Toggle flymake-mode running `pylint'
-"])
-
- ("pep8 ... "
- :help "Check formatting
-call `easy_install pep8' if not available"
-
- ["pep8-run" py-pep8-run
- :help "`py-pep8-run'
-Check formatting (default on the file currently visited)
-call `easy_install pep8' if not available
-"]
-
- ["pep8-help" py-pep8-help
- :help "`py-pep8-help'
-Display help for pep8 format checker)
-"]
-
- ["pep8-flymake-mode" pep8-flymake-mode
- :help "`pep8-flymake-mode'
-Toggle flymake-mode running `pep8'
-"])
-
- ("Pyflakes ... " :help "Non intrusive code
- checker call `easy_install pyflakes' if
- not available"
-
- ["pyflakes-run" py-pyflakes-run :help
- "`py-pyflakes-run' Run pyflakes call
- `easy_install pyflakes' if not
- available"]
-
- ["pyflakes-help" py-pyflakes-help :help
- "`py-pyflakes-help' Display help for
- Pyflakes "]
-
- ["pyflakes-flymake-mode" pyflakes-flymake-mode :help
- "`pyflakes-flymake-mode'
-Toggle flymake-mode running `pyflakes' "])
-
- ("Pyflakes-pep8 ... " :help
- "Non intrusive code checker running `pyflakes' and `pep8'
-call `easy_install pyflakes' and `easy_install pep8' if basics not available"
-
- ["pyflakespep8-run" py-pyflakespep8-run :help
- "`py-pyflakespep8-run' Run `pyflakespep8'
-call `easy_install pyflakes' if not available"]
-
- ["pyflakespep8-help" py-pyflakespep8-help :help
- "`py-pyflakespep8-help' Display help for
- Pyflakespep8 "]
-
- ["pyflakespep8-flymake-mode" pyflakespep8-flymake-mode :help
- "`pyflakespep8-flymake-mode'
-Toggle flymake-mode running `pyflakespep8' "])
-
- "-"
- ("Abbrevs"
- :help "see also `py-add-abbrev'"
- :filter (lambda (&rest junk)
- (abbrev-table-menu python-mode-abbrev-table)))
- ["add-abbrev" py-add-abbrev
- :help "Defines python-mode specific abbrev for last expressions before point.
-Argument is how many `py-partial-expression's form the expansion; or zero means the region is the expansion. "]
-
- ("Skeletons"
- :help "See also templates in YASnippet"
-
- ["if" py-if
- :help "Inserts if-statement"]
- ["py-else" py-else
- :help "Inserts else-statement"]
- ["py-while" py-while
- :help "Inserts while-statement"]
- ["py-for" py-for
- :help "Inserts for-statement"]
- ["py-try/finally" py-try/finally
- :help "Inserts py-try/finally-statement"]
- ["py-try/except" py-try/except
- :help "Inserts py-try/except-statement"])
-
- "-"
-
- ["Import/reload file" py-execute-import-or-reload
- :help "`py-execute-import-or-reload'
-Load into inferior Python session"]
-
- ["Debugger" pdb
- :help "`pdb'
-Run pdb under GUD"]
- "-"
-
- ["Toggle autopair-mode" autopair-mode
- :help "When `py-prepare-autopair-mode-p' is `t', this toggles `autopair-mode' "]
-
- ["Toggle py-smart-indentation" toggle-py-smart-indentation
- :help "See also `py-smart-indentation-on', `-off' "]
-
- ["Toggle indent-tabs-mode" py-toggle-indent-tabs-mode
- :help "See also `py-indent-tabs-mode-on', `-off' "]
-
- ["Help on symbol" py-describe-symbol
- :help "`py-describe-symbol'
-Use pydoc on symbol at point"]
- ["Complete symbol" py-shell-complete
- :help "`py-shell-complete'
-Complete (qualified) symbol before point"]
- ["Find function" py-find-function
- :help "`py-find-function'
-Try to find source definition of function at point"]
- ["Update imports" py-update-imports
- :help "`py-update-imports'
-Update list of top-level imports for completion"]
- "-"
- ))
- ;; Menu py-execute forms
- (easy-menu-define py-menu map "Execute Python"
- `("PyExec"
- :help "Python-specific features"
-
- ["Execute statement" py-execute-statement
- :help "`py-execute-statement'
- Send statement at point to Python interpreter. "]
-
- ["Execute block" py-execute-block
- :help "`py-execute-block'
- Send block at point to Python interpreter. "]
-
- ["Execute block-or-clause" py-execute-block-or-clause
- :help "`py-execute-block-or-clause'
- Send block-or-clause at point to Python interpreter. "]
-
- ["Execute def" py-execute-def
- :help "`py-execute-def'
- Send def at point to Python interpreter. "]
-
- ["Execute class" py-execute-class
- :help "`py-execute-class'
- Send class at point to Python interpreter. "]
-
- ["Execute region" py-execute-region
- :help "`py-execute-region'
- Send region at point to Python interpreter. "]
-
- ["Execute buffer" py-execute-buffer
- :help "`py-execute-buffer'
- Send buffer at point to Python interpreter. "]
-
- ["Execute file" py-execute-file
- :help "`py-execute-file'
- Send file at point to Python interpreter. "]
- ["Execute line" py-execute-line
- :help "`py-execute-line'
- Send current line from beginning of indent to Python interpreter. "]
-
- ["Execute expression" py-execute-expression
- :help "`py-execute-expression'
- Send expression at point to Python interpreter. "]
-
- ["Execute partial-expression" py-execute-partial-expression
- :help "`py-execute-partial-expression'
- Send partial-expression at point to Python interpreter. "]
-
- ["Execute line" py-execute-line
- :help "`py-execute-line'
- Send line at point to Python interpreter. "]
-
- ;; statement
- ("Execute statement ... "
- :help "Execute statement functions"
- ["py-execute-statement-python" py-execute-statement-python
- :help "Execute statement through a Python interpreter.
- With \\[universal-argument] use an unique Python interpreter. "]
- ["py-execute-statement-ipython" py-execute-statement-ipython
- :help "Execute statement through an IPython interpreter.
- With \\[universal-argument] use an unique IPython interpreter. "]
- ["py-execute-statement-python3" py-execute-statement-python3
- :help "Execute statement through a Python3 interpreter.
- With \\[universal-argument] use an unique Python3 interpreter. "]
- ["py-execute-statement-python2" py-execute-statement-python2
- :help "Execute statement through a Python2 interpreter.
- With \\[universal-argument] use an unique Python2 interpreter. "]
- ["py-execute-statement-python2.7" py-execute-statement-python2.7
- :help "Execute statement through a Python2.7 interpreter.
- With \\[universal-argument] use an unique Python2.7 interpreter. "]
- ["py-execute-statement-jython" py-execute-statement-jython
- :help "Execute statement through a Jython interpreter.
- With \\[universal-argument] use an unique Jython interpreter. "]
- ["py-execute-statement-python3.2" py-execute-statement-python3.2
- :help "Execute statement through a Python3.2 interpreter.
- With \\[universal-argument] use an unique Python3.2 interpreter. "]
- ;; dedicated
- ["py-execute-statement-python-dedicated" py-execute-statement-python-dedicated
- :help "Execute statement through a unique Python interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-statement-ipython-dedicated" py-execute-statement-ipython-dedicated
- :help "Execute statement through a unique IPython interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-statement-python3-dedicated" py-execute-statement-python3-dedicated
- :help "Execute statement through a unique Python3 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-statement-python2-dedicated" py-execute-statement-python2-dedicated
- :help "Execute statement through a unique Python2 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-statement-python2.7-dedicated" py-execute-statement-python2.7-dedicated
- :help "Execute statement through a unique Python2.7 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-statement-jython-dedicated" py-execute-statement-jython-dedicated
- :help "Execute statement through a unique Jython interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-statement-python3.2-dedicated" py-execute-statement-python3.2-dedicated
- :help "Execute statement through a unique Python3.2 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ;; switch
- ["py-execute-statement-python-switch" py-execute-statement-python-switch
- :help "Execute statement through a Python interpreter.
-With \\[universal-argument] use an unique Python interpreter. "]
- ["py-execute-statement-ipython-switch" py-execute-statement-ipython-switch
- :help "Execute statement through an IPython interpreter.
-With \\[universal-argument] use an unique IPython interpreter. "]
- ["py-execute-statement-python3-switch" py-execute-statement-python3-switch
- :help "Execute statement through a Python3 interpreter.
-With \\[universal-argument] use an unique Python3 interpreter. "]
- ["py-execute-statement-python2-switch" py-execute-statement-python2-switch
- :help "Execute statement through a Python2 interpreter.
-With \\[universal-argument] use an unique Python2 interpreter. "]
- ["py-execute-statement-python2.7-switch" py-execute-statement-python2.7-switch
- :help "Execute statement through a Python2.7 interpreter.
-With \\[universal-argument] use an unique Python2.7 interpreter. "]
- ["py-execute-statement-jython-switch" py-execute-statement-jython-switch
- :help "Execute statement through a Jython interpreter.
-With \\[universal-argument] use an unique Jython interpreter. "]
- ["py-execute-statement-python3.2-switch" py-execute-statement-python3.2-switch
- :help "Execute statement through a Python3.2 interpreter.
-With \\[universal-argument] use an unique Python3.2 interpreter. "]
- ;; dedicated-switch
- ["py-execute-statement-python-dedicated-switch" py-execute-statement-python-dedicated-switch
- :help "Execute statement through a unique Python interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-statement-ipython-dedicated-switch" py-execute-statement-ipython-dedicated-switch
- :help "Execute statement through a uniquen IPython interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-statement-python3-dedicated-switch" py-execute-statement-python3-dedicated-switch
- :help "Execute statement through a unique Python3 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-statement-python2-dedicated-switch" py-execute-statement-python2-dedicated-switch
- :help "Execute statement through a unique Python2 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-statement-python2.7-dedicated-switch" py-execute-statement-python2.7-dedicated-switch
- :help "Execute statement through a unique Python2.7 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-statement-jython-dedicated-switch" py-execute-statement-jython-dedicated-switch
- :help "Execute statement through a unique Jython interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-statement-python3.2-dedicated-switch" py-execute-statement-python3.2-dedicated-switch
- :help "Execute statement through a unique Python3.2 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- )
-
- ;; block
- ("Execute block ... "
- :help "Execute block functions"
- ["py-execute-block-python" py-execute-block-python
- :help "Execute block through a Python interpreter.
- With \\[universal-argument] use an unique Python interpreter. "]
- ["py-execute-block-ipython" py-execute-block-ipython
- :help "Execute block through an IPython interpreter.
- With \\[universal-argument] use an unique IPython interpreter. "]
- ["py-execute-block-python3" py-execute-block-python3
- :help "Execute block through a Python3 interpreter.
- With \\[universal-argument] use an unique Python3 interpreter. "]
- ["py-execute-block-python2" py-execute-block-python2
- :help "Execute block through a Python2 interpreter.
- With \\[universal-argument] use an unique Python2 interpreter. "]
- ["py-execute-block-python2.7" py-execute-block-python2.7
- :help "Execute block through a Python2.7 interpreter.
- With \\[universal-argument] use an unique Python2.7 interpreter. "]
- ["py-execute-block-jython" py-execute-block-jython
- :help "Execute block through a Jython interpreter.
- With \\[universal-argument] use an unique Jython interpreter. "]
- ["py-execute-block-python3.2" py-execute-block-python3.2
- :help "Execute block through a Python3.2 interpreter.
- With \\[universal-argument] use an unique Python3.2 interpreter. "]
- ;; dedicated
- ["py-execute-block-python-dedicated" py-execute-block-python-dedicated
- :help "Execute block through a unique Python interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-ipython-dedicated" py-execute-block-ipython-dedicated
- :help "Execute block through a unique IPython interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-python3-dedicated" py-execute-block-python3-dedicated
- :help "Execute block through a unique Python3 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-python2-dedicated" py-execute-block-python2-dedicated
- :help "Execute block through a unique Python2 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-python2.7-dedicated" py-execute-block-python2.7-dedicated
- :help "Execute block through a unique Python2.7 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-jython-dedicated" py-execute-block-jython-dedicated
- :help "Execute block through a unique Jython interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-python3.2-dedicated" py-execute-block-python3.2-dedicated
- :help "Execute block through a unique Python3.2 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ;; switch
- ["py-execute-block-python-switch" py-execute-block-python-switch
- :help "Execute block through a Python interpreter.
-With \\[universal-argument] use an unique Python interpreter. "]
- ["py-execute-block-ipython-switch" py-execute-block-ipython-switch
- :help "Execute block through an IPython interpreter.
-With \\[universal-argument] use an unique IPython interpreter. "]
- ["py-execute-block-python3-switch" py-execute-block-python3-switch
- :help "Execute block through a Python3 interpreter.
-With \\[universal-argument] use an unique Python3 interpreter. "]
- ["py-execute-block-python2-switch" py-execute-block-python2-switch
- :help "Execute block through a Python2 interpreter.
-With \\[universal-argument] use an unique Python2 interpreter. "]
- ["py-execute-block-python2.7-switch" py-execute-block-python2.7-switch
- :help "Execute block through a Python2.7 interpreter.
-With \\[universal-argument] use an unique Python2.7 interpreter. "]
- ["py-execute-block-jython-switch" py-execute-block-jython-switch
- :help "Execute block through a Jython interpreter.
-With \\[universal-argument] use an unique Jython interpreter. "]
- ["py-execute-block-python3.2-switch" py-execute-block-python3.2-switch
- :help "Execute block through a Python3.2 interpreter.
-With \\[universal-argument] use an unique Python3.2 interpreter. "]
- ;; dedicated-switch
- ["py-execute-block-python-dedicated-switch" py-execute-block-python-dedicated-switch
- :help "Execute block through a unique Python interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-ipython-dedicated-switch" py-execute-block-ipython-dedicated-switch
- :help "Execute block through a uniquen IPython interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-python3-dedicated-switch" py-execute-block-python3-dedicated-switch
- :help "Execute block through a unique Python3 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-python2-dedicated-switch" py-execute-block-python2-dedicated-switch
- :help "Execute block through a unique Python2 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-python2.7-dedicated-switch" py-execute-block-python2.7-dedicated-switch
- :help "Execute block through a unique Python2.7 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-jython-dedicated-switch" py-execute-block-jython-dedicated-switch
- :help "Execute block through a unique Jython interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-python3.2-dedicated-switch" py-execute-block-python3.2-dedicated-switch
- :help "Execute block through a unique Python3.2 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- )
-
- ;; block-or-clause
- ("Execute block-or-clause ... "
- :help "Execute block-or-clause functions"
- ["py-execute-block-or-clause-python" py-execute-block-or-clause-python
- :help "Execute block-or-clause through a Python interpreter.
- With \\[universal-argument] use an unique Python interpreter. "]
- ["py-execute-block-or-clause-ipython" py-execute-block-or-clause-ipython
- :help "Execute block-or-clause through an IPython interpreter.
- With \\[universal-argument] use an unique IPython interpreter. "]
- ["py-execute-block-or-clause-python3" py-execute-block-or-clause-python3
- :help "Execute block-or-clause through a Python3 interpreter.
- With \\[universal-argument] use an unique Python3 interpreter. "]
- ["py-execute-block-or-clause-python2" py-execute-block-or-clause-python2
- :help "Execute block-or-clause through a Python2 interpreter.
- With \\[universal-argument] use an unique Python2 interpreter. "]
- ["py-execute-block-or-clause-python2.7" py-execute-block-or-clause-python2.7
- :help "Execute block-or-clause through a Python2.7 interpreter.
- With \\[universal-argument] use an unique Python2.7 interpreter. "]
- ["py-execute-block-or-clause-jython" py-execute-block-or-clause-jython
- :help "Execute block-or-clause through a Jython interpreter.
- With \\[universal-argument] use an unique Jython interpreter. "]
- ["py-execute-block-or-clause-python3.2" py-execute-block-or-clause-python3.2
- :help "Execute block-or-clause through a Python3.2 interpreter.
- With \\[universal-argument] use an unique Python3.2 interpreter. "]
- ;; dedicated
- ["py-execute-block-or-clause-python-dedicated" py-execute-block-or-clause-python-dedicated
- :help "Execute block-or-clause through a unique Python interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-or-clause-ipython-dedicated" py-execute-block-or-clause-ipython-dedicated
- :help "Execute block-or-clause through a unique IPython interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-or-clause-python3-dedicated" py-execute-block-or-clause-python3-dedicated
- :help "Execute block-or-clause through a unique Python3 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-or-clause-python2-dedicated" py-execute-block-or-clause-python2-dedicated
- :help "Execute block-or-clause through a unique Python2 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-or-clause-python2.7-dedicated" py-execute-block-or-clause-python2.7-dedicated
- :help "Execute block-or-clause through a unique Python2.7 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-or-clause-jython-dedicated" py-execute-block-or-clause-jython-dedicated
- :help "Execute block-or-clause through a unique Jython interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-or-clause-python3.2-dedicated" py-execute-block-or-clause-python3.2-dedicated
- :help "Execute block-or-clause through a unique Python3.2 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ;; switch
- ["py-execute-block-or-clause-python-switch" py-execute-block-or-clause-python-switch
- :help "Execute block-or-clause through a Python interpreter.
-With \\[universal-argument] use an unique Python interpreter. "]
- ["py-execute-block-or-clause-ipython-switch" py-execute-block-or-clause-ipython-switch
- :help "Execute block-or-clause through an IPython interpreter.
-With \\[universal-argument] use an unique IPython interpreter. "]
- ["py-execute-block-or-clause-python3-switch" py-execute-block-or-clause-python3-switch
- :help "Execute block-or-clause through a Python3 interpreter.
-With \\[universal-argument] use an unique Python3 interpreter. "]
- ["py-execute-block-or-clause-python2-switch" py-execute-block-or-clause-python2-switch
- :help "Execute block-or-clause through a Python2 interpreter.
-With \\[universal-argument] use an unique Python2 interpreter. "]
- ["py-execute-block-or-clause-python2.7-switch" py-execute-block-or-clause-python2.7-switch
- :help "Execute block-or-clause through a Python2.7 interpreter.
-With \\[universal-argument] use an unique Python2.7 interpreter. "]
- ["py-execute-block-or-clause-jython-switch" py-execute-block-or-clause-jython-switch
- :help "Execute block-or-clause through a Jython interpreter.
-With \\[universal-argument] use an unique Jython interpreter. "]
- ["py-execute-block-or-clause-python3.2-switch" py-execute-block-or-clause-python3.2-switch
- :help "Execute block-or-clause through a Python3.2 interpreter.
-With \\[universal-argument] use an unique Python3.2 interpreter. "]
- ;; dedicated-switch
- ["py-execute-block-or-clause-python-dedicated-switch" py-execute-block-or-clause-python-dedicated-switch
- :help "Execute block-or-clause through a unique Python interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-or-clause-ipython-dedicated-switch" py-execute-block-or-clause-ipython-dedicated-switch
- :help "Execute block-or-clause through a uniquen IPython interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-or-clause-python3-dedicated-switch" py-execute-block-or-clause-python3-dedicated-switch
- :help "Execute block-or-clause through a unique Python3 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-or-clause-python2-dedicated-switch" py-execute-block-or-clause-python2-dedicated-switch
- :help "Execute block-or-clause through a unique Python2 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-or-clause-python2.7-dedicated-switch" py-execute-block-or-clause-python2.7-dedicated-switch
- :help "Execute block-or-clause through a unique Python2.7 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-or-clause-jython-dedicated-switch" py-execute-block-or-clause-jython-dedicated-switch
- :help "Execute block-or-clause through a unique Jython interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-block-or-clause-python3.2-dedicated-switch" py-execute-block-or-clause-python3.2-dedicated-switch
- :help "Execute block-or-clause through a unique Python3.2 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- )
-
- ;; def
- ("Execute def ... "
- :help "Execute def functions"
- ["py-execute-def-python" py-execute-def-python
- :help "Execute def through a Python interpreter.
- With \\[universal-argument] use an unique Python interpreter. "]
- ["py-execute-def-ipython" py-execute-def-ipython
- :help "Execute def through an IPython interpreter.
- With \\[universal-argument] use an unique IPython interpreter. "]
- ["py-execute-def-python3" py-execute-def-python3
- :help "Execute def through a Python3 interpreter.
- With \\[universal-argument] use an unique Python3 interpreter. "]
- ["py-execute-def-python2" py-execute-def-python2
- :help "Execute def through a Python2 interpreter.
- With \\[universal-argument] use an unique Python2 interpreter. "]
- ["py-execute-def-python2.7" py-execute-def-python2.7
- :help "Execute def through a Python2.7 interpreter.
- With \\[universal-argument] use an unique Python2.7 interpreter. "]
- ["py-execute-def-jython" py-execute-def-jython
- :help "Execute def through a Jython interpreter.
- With \\[universal-argument] use an unique Jython interpreter. "]
- ["py-execute-def-python3.2" py-execute-def-python3.2
- :help "Execute def through a Python3.2 interpreter.
- With \\[universal-argument] use an unique Python3.2 interpreter. "]
- ;; dedicated
- ["py-execute-def-python-dedicated" py-execute-def-python-dedicated
- :help "Execute def through a unique Python interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-def-ipython-dedicated" py-execute-def-ipython-dedicated
- :help "Execute def through a unique IPython interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-def-python3-dedicated" py-execute-def-python3-dedicated
- :help "Execute def through a unique Python3 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-def-python2-dedicated" py-execute-def-python2-dedicated
- :help "Execute def through a unique Python2 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-def-python2.7-dedicated" py-execute-def-python2.7-dedicated
- :help "Execute def through a unique Python2.7 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-def-jython-dedicated" py-execute-def-jython-dedicated
- :help "Execute def through a unique Jython interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-def-python3.2-dedicated" py-execute-def-python3.2-dedicated
- :help "Execute def through a unique Python3.2 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ;; switch
- ["py-execute-def-python-switch" py-execute-def-python-switch
- :help "Execute def through a Python interpreter.
-With \\[universal-argument] use an unique Python interpreter. "]
- ["py-execute-def-ipython-switch" py-execute-def-ipython-switch
- :help "Execute def through an IPython interpreter.
-With \\[universal-argument] use an unique IPython interpreter. "]
- ["py-execute-def-python3-switch" py-execute-def-python3-switch
- :help "Execute def through a Python3 interpreter.
-With \\[universal-argument] use an unique Python3 interpreter. "]
- ["py-execute-def-python2-switch" py-execute-def-python2-switch
- :help "Execute def through a Python2 interpreter.
-With \\[universal-argument] use an unique Python2 interpreter. "]
- ["py-execute-def-python2.7-switch" py-execute-def-python2.7-switch
- :help "Execute def through a Python2.7 interpreter.
-With \\[universal-argument] use an unique Python2.7 interpreter. "]
- ["py-execute-def-jython-switch" py-execute-def-jython-switch
- :help "Execute def through a Jython interpreter.
-With \\[universal-argument] use an unique Jython interpreter. "]
- ["py-execute-def-python3.2-switch" py-execute-def-python3.2-switch
- :help "Execute def through a Python3.2 interpreter.
-With \\[universal-argument] use an unique Python3.2 interpreter. "]
- ;; dedicated-switch
- ["py-execute-def-python-dedicated-switch" py-execute-def-python-dedicated-switch
- :help "Execute def through a unique Python interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-def-ipython-dedicated-switch" py-execute-def-ipython-dedicated-switch
- :help "Execute def through a uniquen IPython interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-def-python3-dedicated-switch" py-execute-def-python3-dedicated-switch
- :help "Execute def through a unique Python3 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-def-python2-dedicated-switch" py-execute-def-python2-dedicated-switch
- :help "Execute def through a unique Python2 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-def-python2.7-dedicated-switch" py-execute-def-python2.7-dedicated-switch
- :help "Execute def through a unique Python2.7 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-def-jython-dedicated-switch" py-execute-def-jython-dedicated-switch
- :help "Execute def through a unique Jython interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-def-python3.2-dedicated-switch" py-execute-def-python3.2-dedicated-switch
- :help "Execute def through a unique Python3.2 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- )
-
- ;; class
- ("Execute class ... "
- :help "Execute class functions"
- ["py-execute-class-python" py-execute-class-python
- :help "Execute class through a Python interpreter.
- With \\[universal-argument] use an unique Python interpreter. "]
- ["py-execute-class-ipython" py-execute-class-ipython
- :help "Execute class through an IPython interpreter.
- With \\[universal-argument] use an unique IPython interpreter. "]
- ["py-execute-class-python3" py-execute-class-python3
- :help "Execute class through a Python3 interpreter.
- With \\[universal-argument] use an unique Python3 interpreter. "]
- ["py-execute-class-python2" py-execute-class-python2
- :help "Execute class through a Python2 interpreter.
- With \\[universal-argument] use an unique Python2 interpreter. "]
- ["py-execute-class-python2.7" py-execute-class-python2.7
- :help "Execute class through a Python2.7 interpreter.
- With \\[universal-argument] use an unique Python2.7 interpreter. "]
- ["py-execute-class-jython" py-execute-class-jython
- :help "Execute class through a Jython interpreter.
- With \\[universal-argument] use an unique Jython interpreter. "]
- ["py-execute-class-python3.2" py-execute-class-python3.2
- :help "Execute class through a Python3.2 interpreter.
- With \\[universal-argument] use an unique Python3.2 interpreter. "]
- ;; dedicated
- ["py-execute-class-python-dedicated" py-execute-class-python-dedicated
- :help "Execute class through a unique Python interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-class-ipython-dedicated" py-execute-class-ipython-dedicated
- :help "Execute class through a unique IPython interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-class-python3-dedicated" py-execute-class-python3-dedicated
- :help "Execute class through a unique Python3 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-class-python2-dedicated" py-execute-class-python2-dedicated
- :help "Execute class through a unique Python2 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-class-python2.7-dedicated" py-execute-class-python2.7-dedicated
- :help "Execute class through a unique Python2.7 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-class-jython-dedicated" py-execute-class-jython-dedicated
- :help "Execute class through a unique Jython interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-class-python3.2-dedicated" py-execute-class-python3.2-dedicated
- :help "Execute class through a unique Python3.2 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ;; switch
- ["py-execute-class-python-switch" py-execute-class-python-switch
- :help "Execute class through a Python interpreter.
-With \\[universal-argument] use an unique Python interpreter. "]
- ["py-execute-class-ipython-switch" py-execute-class-ipython-switch
- :help "Execute class through an IPython interpreter.
-With \\[universal-argument] use an unique IPython interpreter. "]
- ["py-execute-class-python3-switch" py-execute-class-python3-switch
- :help "Execute class through a Python3 interpreter.
-With \\[universal-argument] use an unique Python3 interpreter. "]
- ["py-execute-class-python2-switch" py-execute-class-python2-switch
- :help "Execute class through a Python2 interpreter.
-With \\[universal-argument] use an unique Python2 interpreter. "]
- ["py-execute-class-python2.7-switch" py-execute-class-python2.7-switch
- :help "Execute class through a Python2.7 interpreter.
-With \\[universal-argument] use an unique Python2.7 interpreter. "]
- ["py-execute-class-jython-switch" py-execute-class-jython-switch
- :help "Execute class through a Jython interpreter.
-With \\[universal-argument] use an unique Jython interpreter. "]
- ["py-execute-class-python3.2-switch" py-execute-class-python3.2-switch
- :help "Execute class through a Python3.2 interpreter.
-With \\[universal-argument] use an unique Python3.2 interpreter. "]
- ;; dedicated-switch
- ["py-execute-class-python-dedicated-switch" py-execute-class-python-dedicated-switch
- :help "Execute class through a unique Python interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-class-ipython-dedicated-switch" py-execute-class-ipython-dedicated-switch
- :help "Execute class through a uniquen IPython interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-class-python3-dedicated-switch" py-execute-class-python3-dedicated-switch
- :help "Execute class through a unique Python3 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-class-python2-dedicated-switch" py-execute-class-python2-dedicated-switch
- :help "Execute class through a unique Python2 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-class-python2.7-dedicated-switch" py-execute-class-python2.7-dedicated-switch
- :help "Execute class through a unique Python2.7 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-class-jython-dedicated-switch" py-execute-class-jython-dedicated-switch
- :help "Execute class through a unique Jython interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-class-python3.2-dedicated-switch" py-execute-class-python3.2-dedicated-switch
- :help "Execute class through a unique Python3.2 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- )
-
- ;; region
- ("Execute region ... "
- :help "Execute region functions"
- ["py-execute-region-python" py-execute-region-python
- :help "Execute region through a Python interpreter.
- With \\[universal-argument] use an unique Python interpreter. "]
- ["py-execute-region-ipython" py-execute-region-ipython
- :help "Execute region through an IPython interpreter.
- With \\[universal-argument] use an unique IPython interpreter. "]
- ["py-execute-region-python3" py-execute-region-python3
- :help "Execute region through a Python3 interpreter.
- With \\[universal-argument] use an unique Python3 interpreter. "]
- ["py-execute-region-python2" py-execute-region-python2
- :help "Execute region through a Python2 interpreter.
- With \\[universal-argument] use an unique Python2 interpreter. "]
- ["py-execute-region-python2.7" py-execute-region-python2.7
- :help "Execute region through a Python2.7 interpreter.
- With \\[universal-argument] use an unique Python2.7 interpreter. "]
- ["py-execute-region-jython" py-execute-region-jython
- :help "Execute region through a Jython interpreter.
- With \\[universal-argument] use an unique Jython interpreter. "]
- ["py-execute-region-python3.2" py-execute-region-python3.2
- :help "Execute region through a Python3.2 interpreter.
- With \\[universal-argument] use an unique Python3.2 interpreter. "]
- ;; dedicated
- ["py-execute-region-python-dedicated" py-execute-region-python-dedicated
- :help "Execute region through a unique Python interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-region-ipython-dedicated" py-execute-region-ipython-dedicated
- :help "Execute region through a unique IPython interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-region-python3-dedicated" py-execute-region-python3-dedicated
- :help "Execute region through a unique Python3 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-region-python2-dedicated" py-execute-region-python2-dedicated
- :help "Execute region through a unique Python2 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-region-python2.7-dedicated" py-execute-region-python2.7-dedicated
- :help "Execute region through a unique Python2.7 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-region-jython-dedicated" py-execute-region-jython-dedicated
- :help "Execute region through a unique Jython interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-region-python3.2-dedicated" py-execute-region-python3.2-dedicated
- :help "Execute region through a unique Python3.2 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ;; switch
- ["py-execute-region-python-switch" py-execute-region-python-switch
- :help "Execute region through a Python interpreter.
-With \\[universal-argument] use an unique Python interpreter. "]
- ["py-execute-region-ipython-switch" py-execute-region-ipython-switch
- :help "Execute region through an IPython interpreter.
-With \\[universal-argument] use an unique IPython interpreter. "]
- ["py-execute-region-python3-switch" py-execute-region-python3-switch
- :help "Execute region through a Python3 interpreter.
-With \\[universal-argument] use an unique Python3 interpreter. "]
- ["py-execute-region-python2-switch" py-execute-region-python2-switch
- :help "Execute region through a Python2 interpreter.
-With \\[universal-argument] use an unique Python2 interpreter. "]
- ["py-execute-region-python2.7-switch" py-execute-region-python2.7-switch
- :help "Execute region through a Python2.7 interpreter.
-With \\[universal-argument] use an unique Python2.7 interpreter. "]
- ["py-execute-region-jython-switch" py-execute-region-jython-switch
- :help "Execute region through a Jython interpreter.
-With \\[universal-argument] use an unique Jython interpreter. "]
- ["py-execute-region-python3.2-switch" py-execute-region-python3.2-switch
- :help "Execute region through a Python3.2 interpreter.
-With \\[universal-argument] use an unique Python3.2 interpreter. "]
- ;; dedicated-switch
- ["py-execute-region-python-dedicated-switch" py-execute-region-python-dedicated-switch
- :help "Execute region through a unique Python interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-region-ipython-dedicated-switch" py-execute-region-ipython-dedicated-switch
- :help "Execute region through a uniquen IPython interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-region-python3-dedicated-switch" py-execute-region-python3-dedicated-switch
- :help "Execute region through a unique Python3 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-region-python2-dedicated-switch" py-execute-region-python2-dedicated-switch
- :help "Execute region through a unique Python2 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-region-python2.7-dedicated-switch" py-execute-region-python2.7-dedicated-switch
- :help "Execute region through a unique Python2.7 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-region-jython-dedicated-switch" py-execute-region-jython-dedicated-switch
- :help "Execute region through a unique Jython interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-region-python3.2-dedicated-switch" py-execute-region-python3.2-dedicated-switch
- :help "Execute region through a unique Python3.2 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- )
-
- ;; buffer
- ("Execute buffer ... "
- :help "Execute buffer functions"
- ["py-execute-buffer-python" py-execute-buffer-python
- :help "Execute buffer through a Python interpreter.
- With \\[universal-argument] use an unique Python interpreter. "]
- ["py-execute-buffer-ipython" py-execute-buffer-ipython
- :help "Execute buffer through an IPython interpreter.
- With \\[universal-argument] use an unique IPython interpreter. "]
- ["py-execute-buffer-python3" py-execute-buffer-python3
- :help "Execute buffer through a Python3 interpreter.
- With \\[universal-argument] use an unique Python3 interpreter. "]
- ["py-execute-buffer-python2" py-execute-buffer-python2
- :help "Execute buffer through a Python2 interpreter.
- With \\[universal-argument] use an unique Python2 interpreter. "]
- ["py-execute-buffer-python2.7" py-execute-buffer-python2.7
- :help "Execute buffer through a Python2.7 interpreter.
- With \\[universal-argument] use an unique Python2.7 interpreter. "]
- ["py-execute-buffer-jython" py-execute-buffer-jython
- :help "Execute buffer through a Jython interpreter.
- With \\[universal-argument] use an unique Jython interpreter. "]
- ["py-execute-buffer-python3.2" py-execute-buffer-python3.2
- :help "Execute buffer through a Python3.2 interpreter.
- With \\[universal-argument] use an unique Python3.2 interpreter. "]
- ;; dedicated
- ["py-execute-buffer-python-dedicated" py-execute-buffer-python-dedicated
- :help "Execute buffer through a unique Python interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-buffer-ipython-dedicated" py-execute-buffer-ipython-dedicated
- :help "Execute buffer through a unique IPython interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-buffer-python3-dedicated" py-execute-buffer-python3-dedicated
- :help "Execute buffer through a unique Python3 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-buffer-python2-dedicated" py-execute-buffer-python2-dedicated
- :help "Execute buffer through a unique Python2 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-buffer-python2.7-dedicated" py-execute-buffer-python2.7-dedicated
- :help "Execute buffer through a unique Python2.7 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-buffer-jython-dedicated" py-execute-buffer-jython-dedicated
- :help "Execute buffer through a unique Jython interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-buffer-python3.2-dedicated" py-execute-buffer-python3.2-dedicated
- :help "Execute buffer through a unique Python3.2 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ;; switch
- ["py-execute-buffer-python-switch" py-execute-buffer-python-switch
- :help "Execute buffer through a Python interpreter.
-With \\[universal-argument] use an unique Python interpreter. "]
- ["py-execute-buffer-ipython-switch" py-execute-buffer-ipython-switch
- :help "Execute buffer through an IPython interpreter.
-With \\[universal-argument] use an unique IPython interpreter. "]
- ["py-execute-buffer-python3-switch" py-execute-buffer-python3-switch
- :help "Execute buffer through a Python3 interpreter.
-With \\[universal-argument] use an unique Python3 interpreter. "]
- ["py-execute-buffer-python2-switch" py-execute-buffer-python2-switch
- :help "Execute buffer through a Python2 interpreter.
-With \\[universal-argument] use an unique Python2 interpreter. "]
- ["py-execute-buffer-python2.7-switch" py-execute-buffer-python2.7-switch
- :help "Execute buffer through a Python2.7 interpreter.
-With \\[universal-argument] use an unique Python2.7 interpreter. "]
- ["py-execute-buffer-jython-switch" py-execute-buffer-jython-switch
- :help "Execute buffer through a Jython interpreter.
-With \\[universal-argument] use an unique Jython interpreter. "]
- ["py-execute-buffer-python3.2-switch" py-execute-buffer-python3.2-switch
- :help "Execute buffer through a Python3.2 interpreter.
-With \\[universal-argument] use an unique Python3.2 interpreter. "]
- ;; dedicated-switch
- ["py-execute-buffer-python-dedicated-switch" py-execute-buffer-python-dedicated-switch
- :help "Execute buffer through a unique Python interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-buffer-ipython-dedicated-switch" py-execute-buffer-ipython-dedicated-switch
- :help "Execute buffer through a uniquen IPython interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-buffer-python3-dedicated-switch" py-execute-buffer-python3-dedicated-switch
- :help "Execute buffer through a unique Python3 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-buffer-python2-dedicated-switch" py-execute-buffer-python2-dedicated-switch
- :help "Execute buffer through a unique Python2 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-buffer-python2.7-dedicated-switch" py-execute-buffer-python2.7-dedicated-switch
- :help "Execute buffer through a unique Python2.7 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-buffer-jython-dedicated-switch" py-execute-buffer-jython-dedicated-switch
- :help "Execute buffer through a unique Jython interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-buffer-python3.2-dedicated-switch" py-execute-buffer-python3.2-dedicated-switch
- :help "Execute buffer through a unique Python3.2 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- )
-
- ;; expression
- ("Execute expression ... "
- :help "Execute expression functions"
- ["py-execute-expression-python" py-execute-expression-python
- :help "Execute expression through a Python interpreter.
- With \\[universal-argument] use an unique Python interpreter. "]
- ["py-execute-expression-ipython" py-execute-expression-ipython
- :help "Execute expression through an IPython interpreter.
- With \\[universal-argument] use an unique IPython interpreter. "]
- ["py-execute-expression-python3" py-execute-expression-python3
- :help "Execute expression through a Python3 interpreter.
- With \\[universal-argument] use an unique Python3 interpreter. "]
- ["py-execute-expression-python2" py-execute-expression-python2
- :help "Execute expression through a Python2 interpreter.
- With \\[universal-argument] use an unique Python2 interpreter. "]
- ["py-execute-expression-python2.7" py-execute-expression-python2.7
- :help "Execute expression through a Python2.7 interpreter.
- With \\[universal-argument] use an unique Python2.7 interpreter. "]
- ["py-execute-expression-jython" py-execute-expression-jython
- :help "Execute expression through a Jython interpreter.
- With \\[universal-argument] use an unique Jython interpreter. "]
- ["py-execute-expression-python3.2" py-execute-expression-python3.2
- :help "Execute expression through a Python3.2 interpreter.
- With \\[universal-argument] use an unique Python3.2 interpreter. "]
- ;; dedicated
- ["py-execute-expression-python-dedicated" py-execute-expression-python-dedicated
- :help "Execute expression through a unique Python interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-expression-ipython-dedicated" py-execute-expression-ipython-dedicated
- :help "Execute expression through a unique IPython interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-expression-python3-dedicated" py-execute-expression-python3-dedicated
- :help "Execute expression through a unique Python3 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-expression-python2-dedicated" py-execute-expression-python2-dedicated
- :help "Execute expression through a unique Python2 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-expression-python2.7-dedicated" py-execute-expression-python2.7-dedicated
- :help "Execute expression through a unique Python2.7 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-expression-jython-dedicated" py-execute-expression-jython-dedicated
- :help "Execute expression through a unique Jython interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-expression-python3.2-dedicated" py-execute-expression-python3.2-dedicated
- :help "Execute expression through a unique Python3.2 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ;; switch
- ["py-execute-expression-python-switch" py-execute-expression-python-switch
- :help "Execute expression through a Python interpreter.
-With \\[universal-argument] use an unique Python interpreter. "]
- ["py-execute-expression-ipython-switch" py-execute-expression-ipython-switch
- :help "Execute expression through an IPython interpreter.
-With \\[universal-argument] use an unique IPython interpreter. "]
- ["py-execute-expression-python3-switch" py-execute-expression-python3-switch
- :help "Execute expression through a Python3 interpreter.
-With \\[universal-argument] use an unique Python3 interpreter. "]
- ["py-execute-expression-python2-switch" py-execute-expression-python2-switch
- :help "Execute expression through a Python2 interpreter.
-With \\[universal-argument] use an unique Python2 interpreter. "]
- ["py-execute-expression-python2.7-switch" py-execute-expression-python2.7-switch
- :help "Execute expression through a Python2.7 interpreter.
-With \\[universal-argument] use an unique Python2.7 interpreter. "]
- ["py-execute-expression-jython-switch" py-execute-expression-jython-switch
- :help "Execute expression through a Jython interpreter.
-With \\[universal-argument] use an unique Jython interpreter. "]
- ["py-execute-expression-python3.2-switch" py-execute-expression-python3.2-switch
- :help "Execute expression through a Python3.2 interpreter.
-With \\[universal-argument] use an unique Python3.2 interpreter. "]
- ;; dedicated-switch
- ["py-execute-expression-python-dedicated-switch" py-execute-expression-python-dedicated-switch
- :help "Execute expression through a unique Python interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-expression-ipython-dedicated-switch" py-execute-expression-ipython-dedicated-switch
- :help "Execute expression through a uniquen IPython interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-expression-python3-dedicated-switch" py-execute-expression-python3-dedicated-switch
- :help "Execute expression through a unique Python3 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-expression-python2-dedicated-switch" py-execute-expression-python2-dedicated-switch
- :help "Execute expression through a unique Python2 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-expression-python2.7-dedicated-switch" py-execute-expression-python2.7-dedicated-switch
- :help "Execute expression through a unique Python2.7 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-expression-jython-dedicated-switch" py-execute-expression-jython-dedicated-switch
- :help "Execute expression through a unique Jython interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-expression-python3.2-dedicated-switch" py-execute-expression-python3.2-dedicated-switch
- :help "Execute expression through a unique Python3.2 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ) ;; partial-expression
-
- ("Execute partial-expression ... "
- :help "Execute partial-expression functions"
- ["py-execute-partial-expression-python" py-execute-partial-expression-python
- :help "Execute minor-expression through a Python interpreter.
- With \\[universal-argument] use an unique Python interpreter. "]
- ["py-execute-minor-expression-ipython" py-execute-minor-expression-ipython
- :help "Execute minor-expression through an IPython interpreter.
- With \\[universal-argument] use an unique IPython interpreter. "]
- ["py-execute-minor-expression-python3" py-execute-minor-expression-python3
- :help "Execute minor-expression through a Python3 interpreter.
- With \\[universal-argument] use an unique Python3 interpreter. "]
- ["py-execute-minor-expression-python2" py-execute-minor-expression-python2
- :help "Execute minor-expression through a Python2 interpreter.
- With \\[universal-argument] use an unique Python2 interpreter. "]
- ["py-execute-minor-expression-python2.7" py-execute-minor-expression-python2.7
- :help "Execute minor-expression through a Python2.7 interpreter.
- With \\[universal-argument] use an unique Python2.7 interpreter. "]
- ["py-execute-minor-expression-jython" py-execute-minor-expression-jython
- :help "Execute minor-expression through a Jython interpreter.
- With \\[universal-argument] use an unique Jython interpreter. "]
- ["py-execute-minor-expression-python3.2" py-execute-minor-expression-python3.2
- :help "Execute minor-expression through a Python3.2 interpreter.
- With \\[universal-argument] use an unique Python3.2 interpreter. "]
- ;; dedicated
- ["py-execute-minor-expression-python-dedicated" py-execute-minor-expression-python-dedicated
- :help "Execute minor-expression through a unique Python interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-minor-expression-ipython-dedicated" py-execute-minor-expression-ipython-dedicated
- :help "Execute minor-expression through a unique IPython interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-minor-expression-python3-dedicated" py-execute-minor-expression-python3-dedicated
- :help "Execute minor-expression through a unique Python3 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-minor-expression-python2-dedicated" py-execute-minor-expression-python2-dedicated
- :help "Execute minor-expression through a unique Python2 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-minor-expression-python2.7-dedicated" py-execute-minor-expression-python2.7-dedicated
- :help "Execute minor-expression through a unique Python2.7 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-minor-expression-jython-dedicated" py-execute-minor-expression-jython-dedicated
- :help "Execute minor-expression through a unique Jython interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-minor-expression-python3.2-dedicated" py-execute-minor-expression-python3.2-dedicated
- :help "Execute minor-expression through a unique Python3.2 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ;; switch
- ["py-execute-minor-expression-python-switch" py-execute-minor-expression-python-switch
- :help "Execute minor-expression through a Python interpreter.
-With \\[universal-argument] use an unique Python interpreter. "]
- ["py-execute-minor-expression-ipython-switch" py-execute-minor-expression-ipython-switch
- :help "Execute minor-expression through an IPython interpreter.
-With \\[universal-argument] use an unique IPython interpreter. "]
- ["py-execute-minor-expression-python3-switch" py-execute-minor-expression-python3-switch
- :help "Execute minor-expression through a Python3 interpreter.
-With \\[universal-argument] use an unique Python3 interpreter. "]
- ["py-execute-minor-expression-python2-switch" py-execute-minor-expression-python2-switch
- :help "Execute minor-expression through a Python2 interpreter.
-With \\[universal-argument] use an unique Python2 interpreter. "]
- ["py-execute-minor-expression-python2.7-switch" py-execute-minor-expression-python2.7-switch
- :help "Execute minor-expression through a Python2.7 interpreter.
-With \\[universal-argument] use an unique Python2.7 interpreter. "]
- ["py-execute-minor-expression-jython-switch" py-execute-minor-expression-jython-switch
- :help "Execute minor-expression through a Jython interpreter.
-With \\[universal-argument] use an unique Jython interpreter. "]
- ["py-execute-minor-expression-python3.2-switch" py-execute-minor-expression-python3.2-switch
- :help "Execute minor-expression through a Python3.2 interpreter.
-With \\[universal-argument] use an unique Python3.2 interpreter. "]
- ;; dedicated-switch
- ["py-execute-minor-expression-python-dedicated-switch" py-execute-minor-expression-python-dedicated-switch
- :help "Execute minor-expression through a unique Python interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-minor-expression-ipython-dedicated-switch" py-execute-minor-expression-ipython-dedicated-switch
- :help "Execute minor-expression through a uniquen IPython interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-minor-expression-python3-dedicated-switch" py-execute-minor-expression-python3-dedicated-switch
- :help "Execute minor-expression through a unique Python3 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-minor-expression-python2-dedicated-switch" py-execute-minor-expression-python2-dedicated-switch
- :help "Execute minor-expression through a unique Python2 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-minor-expression-python2.7-dedicated-switch" py-execute-minor-expression-python2.7-dedicated-switch
- :help "Execute minor-expression through a unique Python2.7 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-minor-expression-jython-dedicated-switch" py-execute-minor-expression-jython-dedicated-switch
- :help "Execute minor-expression through a unique Jython interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-minor-expression-python3.2-dedicated-switch" py-execute-minor-expression-python3.2-dedicated-switch
- :help "Execute minor-expression through a unique Python3.2 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ) ;; line
-
- ("Execute line ... "
- :help "Execute line functions"
- ["py-execute-line-python" py-execute-line-python
- :help "Execute line through a Python interpreter.
- With \\[universal-argument] use an unique Python interpreter. "]
- ["py-execute-line-ipython" py-execute-line-ipython
- :help "Execute line through an IPython interpreter.
- With \\[universal-argument] use an unique IPython interpreter. "]
- ["py-execute-line-python3" py-execute-line-python3
- :help "Execute line through a Python3 interpreter.
- With \\[universal-argument] use an unique Python3 interpreter. "]
- ["py-execute-line-python2" py-execute-line-python2
- :help "Execute line through a Python2 interpreter.
- With \\[universal-argument] use an unique Python2 interpreter. "]
- ["py-execute-line-python2.7" py-execute-line-python2.7
- :help "Execute line through a Python2.7 interpreter.
- With \\[universal-argument] use an unique Python2.7 interpreter. "]
- ["py-execute-line-jython" py-execute-line-jython
- :help "Execute line through a Jython interpreter.
- With \\[universal-argument] use an unique Jython interpreter. "]
- ["py-execute-line-python3.2" py-execute-line-python3.2
- :help "Execute line through a Python3.2 interpreter.
- With \\[universal-argument] use an unique Python3.2 interpreter. "]
- ;; dedicated
- ["py-execute-line-python-dedicated" py-execute-line-python-dedicated
- :help "Execute line through a unique Python interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-line-ipython-dedicated" py-execute-line-ipython-dedicated
- :help "Execute line through a unique IPython interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-line-python3-dedicated" py-execute-line-python3-dedicated
- :help "Execute line through a unique Python3 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-line-python2-dedicated" py-execute-line-python2-dedicated
- :help "Execute line through a unique Python2 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-line-python2.7-dedicated" py-execute-line-python2.7-dedicated
- :help "Execute line through a unique Python2.7 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-line-jython-dedicated" py-execute-line-jython-dedicated
- :help "Execute line through a unique Jython interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-line-python3.2-dedicated" py-execute-line-python3.2-dedicated
- :help "Execute line through a unique Python3.2 interpreter.
-Optional \\[universal-argument] forces switch to output buffer, ignores `py-switch-buffers-on-execute-p'. "]
- ;; switch
- ["py-execute-line-python-switch" py-execute-line-python-switch
- :help "Execute line through a Python interpreter.
-With \\[universal-argument] use an unique Python interpreter. "]
- ["py-execute-line-ipython-switch" py-execute-line-ipython-switch
- :help "Execute line through an IPython interpreter.
-With \\[universal-argument] use an unique IPython interpreter. "]
- ["py-execute-line-python3-switch" py-execute-line-python3-switch
- :help "Execute line through a Python3 interpreter.
-With \\[universal-argument] use an unique Python3 interpreter. "]
- ["py-execute-line-python2-switch" py-execute-line-python2-switch
- :help "Execute line through a Python2 interpreter.
-With \\[universal-argument] use an unique Python2 interpreter. "]
- ["py-execute-line-python2.7-switch" py-execute-line-python2.7-switch
- :help "Execute line through a Python2.7 interpreter.
-With \\[universal-argument] use an unique Python2.7 interpreter. "]
- ["py-execute-line-jython-switch" py-execute-line-jython-switch
- :help "Execute line through a Jython interpreter.
-With \\[universal-argument] use an unique Jython interpreter. "]
- ["py-execute-line-python3.2-switch" py-execute-line-python3.2-switch
- :help "Execute line through a Python3.2 interpreter.
-With \\[universal-argument] use an unique Python3.2 interpreter. "]
- ;; dedicated-switch
- ["py-execute-line-python-dedicated-switch" py-execute-line-python-dedicated-switch
- :help "Execute line through a unique Python interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-line-ipython-dedicated-switch" py-execute-line-ipython-dedicated-switch
- :help "Execute line through a uniquen IPython interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-line-python3-dedicated-switch" py-execute-line-python3-dedicated-switch
- :help "Execute line through a unique Python3 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-line-python2-dedicated-switch" py-execute-line-python2-dedicated-switch
- :help "Execute line through a unique Python2 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-line-python2.7-dedicated-switch" py-execute-line-python2.7-dedicated-switch
- :help "Execute line through a unique Python2.7 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-line-jython-dedicated-switch" py-execute-line-jython-dedicated-switch
- :help "Execute line through a unique Jython interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- ["py-execute-line-python3.2-dedicated-switch" py-execute-line-python3.2-dedicated-switch
- :help "Execute line through a unique Python3.2 interpreter.
-Switch to output buffer; ignores `py-switch-buffers-on-execute-p'. "]
- )))
-
- ;; Menu command forms
- (easy-menu-define py-menu map "Python Mode Commands"
- `("PyEdit"
- :help "Python-specific features"
- ["Copy block" py-copy-block
- :help "`py-copy-block'
-Copy innermost compound statement at point"]
-
- ["Copy clause" py-copy-clause
- :help "`py-copy-clause'
-Copy clause at point"]
-
- ["Copy def-or-class" py-copy-def-or-class
- :help "`py-copy-def-or-class'
-Copy innermost definition at point"]
-
- ["Copy def" py-copy-def
- :help "`py-copy-def'
-Copy method/function definition at point"]
-
- ["Copy class" py-copy-class
- :help "`py-copy-class'
-Copy class definition at point"]
-
- ["Copy statement" py-copy-statement
- :help "`py-copy-statement'
-Copy statement at point"]
- ["Copy expression" py-copy-expression
- :help "`py-copy-expression'
-Copy expression at point"]
-
- ["Copy partial expression" py-copy-partial-expression
- :help "`py-copy-partial-expression'
-\".\" operators delimit a partial-expression expression on it's level"]
- "-"
- ["Beginning of block" py-beginning-of-block
- :help "`py-beginning-of-block'
-Go to start of innermost compound statement at point"]
- ["End of block" py-end-of-block
- :help "`py-end-of-block'
-Go to end of innermost compound statement at point"]
- ["Beginning of Def-or-Class" py-beginning-of-def-or-class
- :help "`py-beginning-of-def-or-class'
-Go to start of innermost definition at point"]
- ["End of Def-or-Class" py-end-of-def-or-class
- :help "`py-end-of-def-or-class'
-Go to end of innermost function definition at point"]
- ["Beginning of class" py-beginning-of-class
- :help "`py-beginning-of-class'
-Go to start of class definition "]
- ["End of class" py-end-of-class
- :help "`py-end-of-class'
-Go to end of class definition "]
- ["Beginning of statement" py-beginning-of-statement
- :help "`py-beginning-of-statement'
-Go to start of a Python statement"]
- ["End of statement" py-end-of-statement
- :help "`py-end-of-statement'
-Go to end of a Python statement"]
- ["Beginning of expression" py-beginning-of-expression
- :help "Go to the beginning of a compound python expression.
-
-A a compound python expression might be concatenated by \".\" operator, thus composed by minor python expressions.
-
-Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference
-Operators however are left aside resp. limit py-expression designed for edit-purposes."]
- ["End of expression" py-end-of-expression
- :help "`py-end-of-expression'
-Go to the end of a compound python expression.
-
-A a compound python expression might be concatenated by \".\" operator, thus composed by minor python expressions.
-
-Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference
-Operators however are left aside resp. limit py-expression designed for edit-purposes."]
- ["Beginning of minor expression" py-beginning-of-partial-expression
- :help "`py-beginning-of-partial-expression'
-Go to start of an minor expression
-
-Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference
-Operators however are left aside resp. limit py-expression designed for edit-purposes."]
- ["End of partial-expression" py-end-of-partial-expression
- :help "`py-end-of-partial-expression'
-Go to end of an partial-expression
-
-Expression here is conceived as the syntactical component of a statement in Python. See http://docs.python.org/reference
-Operators however are left aside resp. limit py-expression designed for edit-purposes."]
- ["Backward into nomenclature" py-backward-into-nomenclature
- :help " `py-backward-into-nomenclature'
-Go backward into nomenclature
-
-A nomenclature is a fancy way of saying AWordWithMixedCaseNotUnderscores. "]
- ["Forward into nomenclature" py-forward-into-nomenclature
- :help " `py-forward-into-nomenclature'
-Go forward into nomenclature
-
-A nomenclature is a fancy way of saying AWordWithMixedCaseNotUnderscores. "]
- "-"
- ["Down statement lc" py-down-statement-lc
- :help "`py-down-statement-lc'
-Goto beginning of line following end of statement.
-
-Returns position reached, if successful, nil otherwise.
-
-\"-lc\" stands for \"left-corner\" - a complementary command travelling left, whilst `py-end-of-statement' stops at right corner.
-
-See also `py-down-statement': down from current definition to next beginning of statement below. "]
- ["Down block lc" py-down-block-lc
- :help "`py-down-block-lc'
-Goto beginning of line following end of block.
-
-Returns position reached, if successful, nil otherwise.
-
-\"-lc\" stands for \"left-corner\" - a complementary command travelling left, whilst `py-end-of-block' stops at right corner.
-
-See also `py-down-block': down from current definition to next beginning of block below. "]
- ["Down def lc" py-down-def-lc
- :help "`py-down-def-lc'
-Goto beginning of line following end of def.
-
-Returns position reached, if successful, nil otherwise.
-
-\"-lc\" stands for \"left-corner\" - a complementary command travelling left, whilst `py-end-of-def' stops at right corner.
-
-See also `py-down-def': down from current definition to next beginning of def below.
- "]
- ["Down statement" py-down-statement
- :help "`py-down-statement'
-
-Go to the beginning of next statement below in buffer.
-
-Returns indentation if statement found, nil otherwise. "]
- ["Down block" py-down-block
- :help "`py-down-block'
-
-Go to the beginning of next block below in buffer.
-
-Returns indentation if block found, nil otherwise. "]
- ["Down def" py-down-def
- :help "`py-down-def'
-
-Go to the beginning of next function definition below in buffer.
-
-Returns indentation if found, nil otherwise. "]))
- ;; Python shell menu
- (easy-menu-define py-menu map "Python Shells"
- `("PyShell"
- :help "Python Shells"
- ["Default interpreter" py-shell
- :help "`py-shell'
-Switch to `inferior' Python in separate buffer"]
-
- ;; ["Toggle enforcement of default interpreter" toggle-force-py-shell-name-p
- ;; :help "If customized default `py-shell-name' should be enforced upon execution. "]
-
- ["Enforce py-shell-name" force-py-shell-name-p-on
- :help "Enforce customized default `py-shell-name' should upon execution. "]
-
- ["Don't enforce default interpreter" force-py-shell-name-p-off
- :help "Make execute commands guess interpreter from environment"]
-
- ;; ["Enforce locally Python shell sessions interpreter " toggle-force-local-shell
- ;; :help "If locally indicated Python shell should be taken and
- ;; enforced upon sessions execute commands. "]
-
- ["Enforce local Python shell " py-force-local-shell-on
- :help "Locally indicated Python being enforced upon sessions execute commands. "]
-
- ["Remove local Python shell enforcement, restore default" py-force-local-shell-off
- :help "Restore `py-shell-name' default value and `behaviour'. "]
-
- "-"
-
- ["python" python
- :help "`python'
-Start an Python interpreter.
-
-Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'."]
- ["ipython" ipython
- :help "`ipython'
-Start an IPython interpreter.
-
-Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'."]
- ["python3" python3
- :help "`python3'
-Start an Python3 interpreter.
-
-Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'."]
- ["python2" python2
- :help "`python2'
-Start an Python2 interpreter.
-
-Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'."]
- ["python2.7" python2.7
- :help "`python2.7'
-Start an Python2.7 interpreter.
-
-Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'."]
- ["jython" jython
- :help "`jython'
-Start an Jython interpreter.
-
-Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'."]
- ["python3.2" python3.2
- :help "`python3.2'
-Start an Python3.2 interpreter.
-
-Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'."]
- "-"
- ["python-dedicated" python-dedicated
- :help "`python-dedicated'
-Start an unique Python interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python interpreter. See `py-python-command-args'."]
- ["ipython-dedicated" ipython-dedicated
- :help "`ipython-dedicated'
-Start an unique IPython interpreter in another window.
-
-Optional C-u prompts for options to pass to the IPython interpreter. See `py-python-command-args'."]
- ["python3-dedicated" python3-dedicated
- :help "`python3-dedicated'
-Start an unique Python3 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python3 interpreter. See `py-python-command-args'."]
- ["python2-dedicated" python2-dedicated
- :help "`python2-dedicated'
-Start an unique Python2 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python2 interpreter. See `py-python-command-args'."]
- ["python2.7-dedicated" python2.7-dedicated
- :help "`python2'.7-dedicated
-Start an unique Python2.7 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python2.7 interpreter. See `py-python-command-args'."]
- ["jython-dedicated" jython-dedicated
- :help "`jython-dedicated'
-Start an unique Jython interpreter in another window.
-
-Optional C-u prompts for options to pass to the Jython interpreter. See `py-python-command-args'."]
- ["python3.2-dedicated" python3.2-dedicated
- :help "`python3.2-dedicated'
-Start an unique Python3.2 interpreter in another window.
-
-Optional C-u prompts for options to pass to the Python3.2 interpreter. See `py-python-command-args'."]
- "-"
-
- ["Toggle split-windows-on-execute" py-toggle-split-windows-on-execute
- :help "Switch boolean `py-split-windows-on-execute-p'."]
- ["Switch split-windows-on-execute ON" py-split-windows-on-execute-on
- :help "Switch `py-split-windows-on-execute-p' ON. "]
- ["Switch split-windows-on-execute OFF" py-split-windows-on-execute-off
- :help "Switch `py-split-windows-on-execute-p' OFF. "]
-
- ["Toggle shell-switch-buffers-on-execute" py-toggle-shell-switch-buffers-on-execute
- :help "Switch boolean `py-switch-buffers-on-execute-p'."]
- ["Switch shell-switch-buffers-on-execute ON" py-shell-switch-buffers-on-execute-on
- :help "Switch `py-switch-buffers-on-execute-p' ON. "]
- ["Switch shell-switch-buffers-on-execute OFF" py-shell-switch-buffers-on-execute-off
- :help "Switch `py-switch-buffers-on-execute-p' OFF. "]))
- map))
-
-;;; Abbrevs
-(defun py-edit-abbrevs ()
- "Jumps to `python-mode-abbrev-table' in a buffer containing lists of abbrev definitions.
-You can edit them and type \\\\[edit-abbrevs-redefine] to redefine abbrevs
-according to your editing.
-Buffer contains a header line for each abbrev table,
- which is the abbrev table name in parentheses.
-This is followed by one line per abbrev in that table:
-NAME USECOUNT EXPANSION HOOK
-where NAME and EXPANSION are strings with quotes,
-USECOUNT is an integer, and HOOK is any valid function
-or may be omitted (it is usually omitted). "
- (interactive)
- (save-excursion
- (let ((mat (abbrev-table-name local-abbrev-table)))
- (prepare-abbrev-list-buffer)
- (set-buffer "*Abbrevs*")
- (switch-to-buffer (current-buffer))
- (goto-char (point-min))
- (search-forward (concat "(" (format "%s" mat))))))
-
-(defun py-add-abbrev-propose (table type arg &optional dont-ask)
- (save-excursion
- (let ((orig (point))
- proposal exp)
- (if (= arg 0)
- (setq exp
- (buffer-substring-no-properties
- (point)
- (mark)))
- (while (< 0 arg)
- (py-beginning-of-partial-expression)
- (when (looking-at "[[:alpha:]]")
- (setq proposal (concat (downcase (match-string-no-properties 0)) proposal)))
- (setq arg (1- arg)))
- (setq exp (buffer-substring-no-properties (point) orig)))
- (setq name
- ;; ask only when interactive
- (if dont-ask
- proposal
- (read-string (format (if exp "%s abbrev for \"%s\": "
- "Undefine %s abbrev: ")
- type exp) proposal)))
- (set-text-properties 0 (length name) nil name)
- (when (or (null exp)
- (not (abbrev-expansion name table))
- (y-or-n-p (format "%s expands to \"%s\"; redefine? "
- name (abbrev-expansion name table))))
- (define-abbrev table (downcase name) exp)))))
-
-(defun py-add-abbrev (arg)
- "Defines python-mode specific abbrev for last expressions before point.
-Argument is how many `py-partial-expression's form the expansion; or zero means the region is the expansion.
-
-Reads the abbreviation in the minibuffer; with numeric arg it displays a proposal for an abbrev.
-Proposal is composed from the initial character(s) of the
-expansion.
-
-Don't use this function in a Lisp program; use `define-abbrev' instead."
- (interactive "p")
- (save-excursion
- (py-add-abbrev-propose
- (if only-global-abbrevs
- global-abbrev-table
- (or local-abbrev-table
- (error "No per-mode abbrev table")))
- "Mode" arg)))
-
-;;; Hooks
-;; arrange to kill temp files when Emacs exists
-(add-hook 'kill-emacs-hook 'py-kill-emacs-hook)
-(add-hook 'comint-output-filter-functions 'py-pdbtrack-track-stack-file)
-
-(add-hook 'inferior-python-mode-hook 'py-send-shell-setup-code)
-
-(remove-hook 'python-mode-hook 'python-setup-brm)
-(add-hook 'python-mode-hook
- #'(lambda ()
- (when py-smart-indentation
- (if (bobp)
- (save-excursion
- (save-restriction
- (widen)
- (while (and (not (eobp))
- (or
- (let ((erg (syntax-ppss)))
- (or (nth 1 erg) (nth 8 erg)))
- (eq 0 (current-indentation))))
- (forward-line 1))
- (back-to-indentation)
- (py-guess-indent-offset)))
- (py-guess-indent-offset)))))
-
-(add-hook 'which-func-functions 'python-which-func nil t)
-
-(add-hook 'comint-output-filter-functions
- 'py-comint-output-filter-function)
-
-(add-hook 'python-mode-hook
- (lambda ()
- (setq indent-tabs-mode py-indent-tabs-mode)
- (set (make-local-variable 'beginning-of-defun-function) 'py-beginning-of-def-or-class)
- (set (make-local-variable 'end-of-defun-function) 'py-end-of-def-or-class)
- ;; (orgstruct-mode 1)
- ))
-(when py-warn-tmp-files-left-p
- (add-hook 'python-mode-hook 'py-warn-tmp-files-left))
-
-;; FixMe: for unknown reasons this is not done by mode
-(if (file-readable-p abbrev-file-name)
- (add-hook 'python-mode-hook '(lambda () (load abbrev-file-name nil t)))
- (message "Warning: %s" "no abbrev-file found, customize `abbrev-file-name' in order to make mode-specific abbrevs work. "))
-
-;;;
-
-(add-to-list 'hs-special-modes-alist
- (list
- 'python-mode
- ;; start regex
- (concat (if py-hide-show-hide-docstrings
- "^\\s-*\"\"\"\\|" "")
- (mapconcat 'identity
- (mapcar #'(lambda (x) (concat "^\\s-*" x "\\_>"))
- py-hide-show-keywords)
- "\\|"))
- ;; end regex
- nil
- ;; comment-start regex
- "#"
- ;; forward-sexp function
- (lambda (arg)
- (py-down-block-lc)
- (skip-chars-backward " \t\n"))
- nil))
-
-(setq imenu-generic-expression 'py-imenu-generic-regexp)
-;;;
-(defvar skeleton-further-elements)
-(define-derived-mode python-mode fundamental-mode python-mode-modeline-display
- "Major mode for editing Python files.
-
-To submit a problem report, enter `\\[py-submit-bug-report]' from a
-`python-mode' buffer. Do `\\[py-describe-mode]' for detailed
-documentation. To see what version of `python-mode' you are running,
-enter `\\[py-version]'.
-
-This mode knows about Python indentation, tokens, comments and
-continuation lines. Paragraphs are separated by blank lines only.
-
-COMMANDS
-
-VARIABLES
-
-py-indent-offset\t\tindentation increment
-py-block-comment-prefix\t\tcomment string used by `comment-region'
-py-shell-name\t\tshell command to invoke Python interpreter
-py-temp-directory\t\tdirectory used for temp files (if needed)
-py-beep-if-tab-change\t\tring the bell if `tab-width' is changed
-
-\\{python-mode-map}"
- :group 'python-mode
-;;; Local vars
- (set (make-local-variable 'outline-regexp)
- (concat (mapconcat 'identity
- (mapcar #'(lambda (x) (concat "^\\s-*" x "\\_>"))
- py-outline-mode-keywords)
- "\\|")))
- (set (make-local-variable 'font-lock-defaults)
- '(python-font-lock-keywords nil nil nil nil
- (font-lock-syntactic-keywords
- . python-font-lock-syntactic-keywords)
- ;; This probably isn't worth it.
- ;; (font-lock-syntactic-face-function
- ;; . python-font-lock-syntactic-face-function)
- ))
- (set (make-local-variable 'parse-sexp-lookup-properties) t)
- (set (make-local-variable 'parse-sexp-ignore-comments) t)
- (set (make-local-variable 'comment-start) "# ")
- (set (make-local-variable 'comment-start-skip) "^[ \t]*#+ *")
- (set (make-local-variable 'comment-column) 40)
- (set (make-local-variable 'comment-indent-function) #'py-comment-indent-function)
- (set (make-local-variable 'indent-region-function) 'py-indent-region)
- (set (make-local-variable 'indent-line-function) 'py-indent-line)
- (set (make-local-variable 'hs-hide-comments-when-hiding-all) 'py-hide-comments-when-hiding-all)
- (set (make-local-variable 'outline-heading-end-regexp) ":\\s-*\n")
- (set (make-local-variable 'outline-level) #'python-outline-level)
- (set (make-local-variable 'open-paren-in-column-0-is-defun-start) nil)
- (set (make-local-variable 'add-log-current-defun-function) 'py-current-defun)
- (set (make-local-variable 'paragraph-start) "\\s-*$")
- (set (make-local-variable 'fill-paragraph-function) 'py-fill-paragraph)
- (set (make-local-variable 'require-final-newline) mode-require-final-newline)
- (make-local-variable 'python-saved-check-command)
- (set (make-local-variable 'tab-width) py-indent-offset)
- (set (make-local-variable 'eldoc-documentation-function)
- #'py-eldoc-function)
- (set (make-local-variable 'skeleton-further-elements)
- '((< '(backward-delete-char-untabify (min py-indent-offset
- (current-column))))
- (^ '(- (1+ (current-indentation))))))
-
- (when py-prepare-autopair-mode-p
- (add-hook 'python-mode-hook
- #'(lambda ()
- (setq autopair-handle-action-fns
- (list #'autopair-default-handle-action
- #'autopair-python-triple-quote-action)))))
-
- (when (and py-imenu-create-index-p (fboundp 'imenu-add-to-menubar)(ignore-errors (require 'imenu)))
- (setq imenu-create-index-function #'py-imenu-create-index-new)
- (imenu-add-to-menubar "PyIndex"))
- ;; (when py-imenu-create-index-p (imenu-add-to-menubar "PyIndex"))
-
- ;; Now guess `py-indent-offset'
-
- ;; add the menu
- (if py-menu
- (easy-menu-add py-menu))
- (when py-hide-show-minor-mode-p (hs-minor-mode 1))
- ;; (py-send-string "import emacs")
-
- (when py-start-run-py-shell
- ;; py-shell may split window, provide restore
- (window-configuration-to-register 213465879)
- (unless (get-process (py-process-name))
- (let ((oldbuf (current-buffer)))
- (save-excursion
- (py-shell)
- (set-buffer oldbuf))))
- (jump-to-register 213465879))
- ;; (run-mode-hooks 'python-mode-hook)
- (when py-outline-minor-mode-p (outline-minor-mode 1))
- (when (interactive-p) (message "python-mode loaded from: %s" "python-mode.el")))
-
-(defadvice pdb (before gud-query-cmdline activate)
- "Provide a better default command line when called interactively."
- (interactive
- (list (gud-query-cmdline pdb-path
- (file-name-nondirectory buffer-file-name)))))
-
-(defalias 'py-hungry-delete-forward 'c-hungry-delete-forward)
-(defalias 'py-hungry-delete-backwards 'c-hungry-delete-backwards)
-
-(define-derived-mode python2-mode python-mode "Python2"
- "Edit and run code used by Python version 2 series. "
- :group 'Python
- :abbrev nil
- (set (make-local-variable 'py-exec-command) '(format "execfile(r'%s') # PYTHON-MODE\n" filename))
- (set (make-local-variable 'py-exec-string-command) '(format "exec(r'%s') # PYTHON-MODE\n" string))
- (py-toggle-shell "python2"))
-
-(define-derived-mode python3-mode python-mode "Python3"
- "Edit and run code used by Python version 3 series. "
- :group 'Python
- :abbrev nil
- (set (make-local-variable 'py-exec-command) '(format "exec(compile(open('%s').read(), '%s', 'exec')) # PYTHON-MODE\n" file file))
- (set (make-local-variable 'py-exec-string-command) '(format "exec(r'(%s)') # PYTHON-MODE\n" string))
- (py-toggle-shell "python3"))
-
-;; Utilities
-
-(defun py-def-or-class-beginning-position ()
- "Returns beginning position of function or class definition. "
- (interactive)
- (let ((here (point))
- (pos (progn (py-beginning-of-def-or-class)(point))))
- (prog1
- (point)
- (when (and py-verbose-p (interactive-p)) (message "%s" pos))
- (goto-char here))))
-
-(defun py-def-or-class-end-position ()
- "Returns end position of function or class definition. "
- (interactive)
- (let ((here (point))
- (pos (progn (py-end-of-def-or-class) (point))))
- (prog1
- (point)
- (when (and py-verbose-p (interactive-p)) (message "%s" pos))
- (goto-char here))))
-
-(defun py-statement-beginning-position ()
- "Returns beginning position of statement. "
- (interactive)
- (let ((here (point))
- (pos (progn (py-beginning-of-statement)(point))))
- (prog1
- (point)
- (when (and py-verbose-p (interactive-p)) (message "%s" pos))
- (goto-char here))))
-
-(defun py-statement-end-position ()
- "Returns end position of statement. "
- (interactive)
- (let (erg)
- (save-excursion
- (setq erg (py-end-of-statement)))
- (when (and py-verbose-p (interactive-p)) (message "%s" erg))
- erg))
-
-(defun py-current-indentation ()
- "Returns beginning position of code in line. "
- (interactive)
- (let ((here (point))
- (pos (progn (back-to-indentation)(point))))
- (prog1
- (point)
- (when (and py-verbose-p (interactive-p)) (message "%s" pos))
- (goto-char here))))
-
-(make-obsolete 'jpython-mode 'jython-mode nil)
-(define-derived-mode jython-mode python-mode "Jython"
- "Major mode for editing Jython files.
-Like `python-mode', but sets up parameters for Jython subprocesses.
-Runs `jython-mode-hook' after `python-mode-hook'."
- :group 'python-mode
- (py-toggle-shell "jython"))
-
-;; It's handy to add recognition of Python files to the
-;; interpreter-mode-alist and to auto-mode-alist. With the former, we
-;; can specify different `derived-modes' based on the #! line, but
-;; with the latter, we can't. So we just won't add them if they're
-;; already added.
-
-(let ((modes '(("jython" . jython-mode)
- ("python" . python-mode)
- ("python3" . python-mode))))
- (while modes
- (when (not (assoc (car modes) interpreter-mode-alist))
- (push (car modes) interpreter-mode-alist))
- (setq modes (cdr modes))))
-
-(when (not (or (rassq 'python-mode auto-mode-alist)
- (rassq 'jython-mode auto-mode-alist)))
- (push '("\\.py$" . python-mode) auto-mode-alist))
-
-(defun py-kill-emacs-hook ()
- "Delete files in `py-file-queue'.
-These are Python temporary files awaiting execution."
- (mapc #'(lambda (filename)
- (ignore-errors (delete-file filename)))
- py-file-queue))
-
-;; arrange to kill temp files when Emacs exists
-(add-hook 'kill-emacs-hook 'py-kill-emacs-hook)
-(add-hook 'comint-output-filter-functions 'py-pdbtrack-track-stack-file)
-
-;; inside python-mode already
-;; (add-hook 'python-mode-hook
-;; (lambda ()
-;; (defvar py-mode-map python-mode-map))
-;; (set (make-local-variable 'beginning-o1f-defun-function) 'py-beginning-of-def-or-class)
-;; (set (make-local-variable 'end-of-defun-function) 'py-end-of-def-or-class))
-
-;; Add a designator to the minor mode strings
-(or (assq 'py-pdbtrack-is-tracking-p minor-mode-alist)
- (push '(py-pdbtrack-is-tracking-p py-pdbtrack-minor-mode-string)
- minor-mode-alist))
-
-(defun py-python-version (&optional executable verbose)
- "Returns versions number of a Python EXECUTABLE, string.
-
-If no EXECUTABLE given, `py-shell-name' is used.
-Interactively output of `--version' is displayed. "
- (interactive)
- (let* ((executable (or executable py-shell-name))
- (erg (string-strip (shell-command-to-string (concat executable " --version")))))
- (when (interactive-p) (message "%s" erg))
- (unless verbose (setq erg (cadr (split-string erg))))
- erg))
-
-(defun py-version ()
- "Echo the current version of `python-mode' in the minibuffer."
- (interactive)
- (message "Using `python-mode' version %s" py-version)
- (py-keep-region-active))
-
-(defun py-install-search-local ()
- (interactive)
- (let ((erg (split-string (shell-command-to-string (concat "find " default-directory " -maxdepth 9 -type f -name \"*python\"")))))))
-
-;; (defun py-install-local-epdfree ()
-;; (interactive)
-;; (py-install-local-shells "MY-PATH/epdfree"))
-
-(defun py-install-local-shells (&optional local path-prefix)
- "Builds Python-shell commands from executable found in LOCAL.
-
-If LOCAL is empty, shell-command `find' searches beneath current directory.
-Eval resulting buffer to install it, see customizable `py-extensions'. "
- (interactive)
- (let* ((local-dir (if local
- (expand-file-name local)
- (read-from-minibuffer "Virtualenv directory: " default-directory)))
- (path-separator (if (string-match "/" local-dir)
- "/"
- "\\" t))
- (shells (split-string (shell-command-to-string (concat "find " local-dir " -maxdepth 9 -type f -executable -name \"*python\""))))
- erg newshell prefix akt end orig)
- (set-buffer (get-buffer-create py-extensions))
- (erase-buffer)
- (switch-to-buffer (current-buffer))
- (dolist (elt shells)
- (setq prefix "")
- (setq curexe (substring elt (1+ (string-match "/[^/]+$" elt))))
- (setq aktpath (substring elt 0 (1+ (string-match "/[^/]+$" elt))))
- (dolist (prf (split-string aktpath (regexp-quote path-separator)))
- (unless (string= "" prf)
- (setq prefix (concat prefix (substring prf 0 1)))))
- (setq orig (point))
- (insert py-shell-template)
- (setq end (point))
- (goto-char orig)
- (when (re-search-forward "\\" end t 1)
- (replace-match (concat prefix "-" (substring elt (1+ (save-match-data (string-match "/[^/]+$" elt)))))t))
- (goto-char orig)
- (while (search-forward "DOCNAME" end t 1)
- (replace-match (if (string= "ipython" curexe)
- "IPython"
- (capitalize curexe)) t))
- (goto-char orig)
- (when (search-forward "FULLNAME" end t 1)
- (replace-match elt t))
- (goto-char (point-max)))
- (emacs-lisp-mode)
- (if (file-readable-p (concat py-install-directory "/" py-extensions))
- (find-file (concat py-install-directory "/" py-extensions)))))
-
-;;; Utility stuff
-
-;; for toggling between CPython and JPython
-(defvar python-which-shell nil)
-(defvar python-which-args python-python-command-args)
-(defvar python-which-bufname "Python")
-(make-variable-buffer-local 'python-which-shell)
-(make-variable-buffer-local 'python-which-args)
-(make-variable-buffer-local 'python-which-bufname)
-
-;; Add a designator to the minor mode strings
-(or (assq 'python-pdbtrack-is-tracking-p minor-mode-alist)
- (push '(python-pdbtrack-is-tracking-p python-pdbtrack-minor-mode-string)
- minor-mode-alist))
-
-;; Bind python-file-queue before installing the kill-emacs-hook.
-(defvar python-file-queue nil
- "Queue of Python temp files awaiting execution.
-Currently-active file is at the head of the list.")
-
-(defvar python-pdbtrack-is-tracking-p nil)
-
-(defconst python-pdbtrack-stack-entry-regexp
- "^> \\(.*\\)(\\([0-9]+\\))\\([?a-zA-Z0-9_<>]+\\)()"
- "Regular expression pdbtrack uses to find a stack trace entry.")
-
-(defconst python-pdbtrack-input-prompt "\n[(<]*[Ii]?[Pp]db[>)]+ "
- "Regular expression pdbtrack uses to recognize a pdb prompt.")
-
-(defconst python-pdbtrack-track-range 10000
- "Max number of characters from end of buffer to search for stack entry.")
-
-;;;; Inferior mode stuff (following cmuscheme).
-
-(defconst python-compilation-regexp-alist
- ;; FIXME: maybe these should move to compilation-error-regexp-alist-alist.
- ;; The first already is (for CAML), but the second isn't. Anyhow,
- ;; these are specific to the inferior buffer. -- fx
- `((,(rx line-start (1+ (any " \t")) "File \""
- (group (1+ (not (any "\"<")))) ; avoid `' &c
- "\", line " (group (1+ digit)))
- 1 2)
- (,(rx " in file " (group (1+ not-newline)) " on line "
- (group (1+ digit)))
- 1 2)
- ;; pdb stack trace
- (,(rx line-start "> " (group (1+ (not (any "(\"<"))))
- "(" (group (1+ digit)) ")" (1+ (not (any "("))) "()")
- 1 2))
- "`compilation-error-regexp-alist' for inferior Python.")
-
-(defvar inferior-python-mode-syntax-table
- (let ((st (make-syntax-table py-mode-syntax-table)))
- ;; Don't get confused by apostrophes in the process's output (e.g. if
- ;; you execute "help(os)").
- (modify-syntax-entry ?\' "." st)
- ;; Maybe we should do the same for double quotes?
- ;; (modify-syntax-entry ?\" "." st)
- st))
-
-;; Autoloaded.
-(declare-function compilation-shell-minor-mode "compile" (&optional arg))
-
-;; Fixme: This should inherit some stuff from `python-mode', but I'm
-;; not sure how much: at least some keybindings, like C-c C-f;
-;; syntax?; font-locking, e.g. for triple-quoted strings?
-(define-derived-mode inferior-python-mode comint-mode "Inferior Python"
- "Major mode for interacting with an inferior Python process.
-A Python process can be started with \\[py-shell].
-
-Hooks `comint-mode-hook' and `inferior-python-mode-hook' are run in
-that order.
-
-You can send text to the inferior Python process from other buffers
-containing Python source.
- * \\[python-switch-to-python] switches the current buffer to the Python
- process buffer.
- * \\[python-send-region] sends the current region to the Python process.
- * \\[python-send-region-and-go] switches to the Python process buffer
- after sending the text.
-For running multiple processes in multiple buffers, see `run-python' and
-`python-buffer'.
-
-\\{inferior-python-mode-map}"
- :group 'python-mode
- (setq mode-line-process '(":%s")))
-
-(defvar python-preoutput-leftover nil)
-(defvar python-preoutput-skip-next-prompt nil)
-
-;; Using this stops us getting lines in the buffer like
-;; >>> ... ... >>>
-;; Also look for (and delete) an `_emacs_ok' string and call
-;; `python-preoutput-continuation' if we get it.
-
-(defun py-send-region (start end)
- "Send the region to the inferior Python process."
- ;; The region is evaluated from a temporary file. This avoids
- ;; problems with blank lines, which have different semantics
- ;; interactively and in files. It also saves the inferior process
- ;; buffer filling up with interpreter prompts. We need a Python
- ;; function to remove the temporary file when it has been evaluated
- ;; (though we could probably do it in Lisp with a Comint output
- ;; filter). This function also catches exceptions and truncates
- ;; tracebacks not to mention the frame of the function itself.
- ;;
- ;; The `compilation-shell-minor-mode' parsing takes care of relating
- ;; the reference to the temporary file to the source.
- ;;
- ;; Fixme: Write a `coding' header to the temp file if the region is
- ;; non-ASCII.
- (interactive "r")
- (let* ((f (make-temp-file "py"))
- (command
- ;; IPython puts the FakeModule module into __main__ so
- ;; emacs.eexecfile becomes useless.
- (if (string-match "^ipython" py-shell-name)
- (format "execfile %S" f)
- (format "emacs.eexecfile(%S)" f)))
- (orig-start (copy-marker start)))
- (when (save-excursion
- (goto-char start)
- (/= 0 (current-indentation))) ; need dummy block
- (save-excursion
- (goto-char orig-start)
- ;; Wrong if we had indented code at buffer start.
- (set-marker orig-start (line-beginning-position 0)))
- (write-region "if True:\n" nil f nil 'nomsg))
- (write-region start end f t 'nomsg)
- (python-send-command command)
- (with-current-buffer (process-buffer (py-proc))
- ;; Tell compile.el to redirect error locations in file `f' to
- ;; positions past marker `orig-start'. It has to be done *after*
- ;; `python-send-command''s call to `compilation-forget-errors'.
- (compilation-fake-loc orig-start f))))
-
-(defun py-send-buffer ()
- "Send the current buffer to the inferior Python process."
- (interactive)
- (py-send-region (point-min) (point-max)))
-
-(defun py-switch-to-python (eob-p)
- "Switch to the Python process buffer, maybe starting new process.
-
-With prefix arg, position cursor at end of buffer."
- (interactive "P")
- (pop-to-buffer (process-buffer (py-proc)) t) ;Runs python if needed.
- (when eob-p
- (push-mark)
- (goto-char (point-max))))
-
-(defun py-send-region-and-go (start end)
- "Send the region to the inferior Python process.
-
-Then switch to the process buffer."
- (interactive "r")
- (py-send-region start end)
- (py-switch-to-python t))
-
-(defvar python-prev-dir/file nil
- "Caches (directory . file) pair used in the last `py-load-file' command.
-Used for determining the default in the next one.")
-
-(defun py-load-file (file-name)
- "Load a Python file FILE-NAME into the inferior Python process.
-
-If the file has extension `.py' import or reload it as a module.
-Treating it as a module keeps the global namespace clean, provides
-function location information for debugging, and supports users of
-module-qualified names."
- (interactive (comint-get-source "Load Python file: " python-prev-dir/file
- python-source-modes
- t)) ; because execfile needs exact name
- (comint-check-source file-name) ; Check to see if buffer needs saving.
- (setq python-prev-dir/file (cons (file-name-directory file-name)
- (file-name-nondirectory file-name)))
- (with-current-buffer (process-buffer (py-proc)) ;Runs python if needed.
- ;; Fixme: I'm not convinced by this logic from python-mode.el.
- (python-send-command
- (if (string-match "\\.py\\'" file-name)
- (let ((module (file-name-sans-extension
- (file-name-nondirectory file-name))))
- (format "emacs.eimport(%S,%S)"
- module (file-name-directory file-name)))
- (format "execfile(%S)" file-name)))
- (message "%s loaded" file-name)))
-
-;;; Python-el completion and help
-
-(defvar view-return-to-alist)
-(defvar python-imports) ; forward declaration
-
-;; Called from `python-mode', this causes a recursive call of the
-;; mode. See logic there to break out of the recursion.
-
-;; pdb tracking is alert once this file is loaded, but takes no action if
-;; `python-pdbtrack-do-tracking-p' is nil.
-(add-hook 'comint-output-filter-functions 'python-pdbtrack-track-stack-file)
-
-
-
-(defun python-comint-output-filter-function (string)
- "Watch output for Python prompt and exec next file waiting in queue.
-This function is appropriate for `comint-output-filter-functions'."
- ;; TBD: this should probably use split-string
- (when (and (string-match python--prompt-regexp string)
- python-file-queue)
- (condition-case nil
- (delete-file (car python-file-queue))
- (error nil))
- (setq python-file-queue (cdr python-file-queue))
- (if python-file-queue
- (let ((pyproc (get-buffer-process (current-buffer))))
- (python-execute-file pyproc (car python-file-queue))))))
-
-(defun python-pdbtrack-overlay-arrow (activation)
- "Activate or deactivate arrow at beginning-of-line in current buffer."
- (if activation
- (progn
- (setq overlay-arrow-position (make-marker)
- overlay-arrow-string "=>"
- python-pdbtrack-is-tracking-p t)
- (set-marker overlay-arrow-position
- (save-excursion (beginning-of-line) (point))
- (current-buffer)))
- (setq overlay-arrow-position nil
- python-pdbtrack-is-tracking-p nil)))
-
-(defun python-pdbtrack-track-stack-file (text)
- "Show the file indicated by the pdb stack entry line, in a separate window.
-
-Activity is disabled if the buffer-local variable
-`python-pdbtrack-do-tracking-p' is nil.
-
-We depend on the pdb input prompt being a match for
-`python-pdbtrack-input-prompt'.
-
-If the traceback target file path is invalid, we look for the
-most recently visited python-mode buffer which either has the
-name of the current function or class, or which defines the
-function or class. This is to provide for scripts not in the
-local filesytem (e.g., Zope's 'Script \(Python)', but it's not
-Zope specific). If you put a copy of the script in a buffer
-named for the script and activate python-mode, then pdbtrack will
-find it."
- ;; Instead of trying to piece things together from partial text
- ;; (which can be almost useless depending on Emacs version), we
- ;; monitor to the point where we have the next pdb prompt, and then
- ;; check all text from comint-last-input-end to process-mark.
- ;;
- ;; Also, we're very conservative about clearing the overlay arrow,
- ;; to minimize residue. This means, for instance, that executing
- ;; other pdb commands wipe out the highlight. You can always do a
- ;; 'where' (aka 'w') PDB command to reveal the overlay arrow.
-
- (let* ((origbuf (current-buffer))
- (currproc (get-buffer-process origbuf)))
-
- (if (not (and currproc python-pdbtrack-do-tracking-p))
- (python-pdbtrack-overlay-arrow nil)
-
- (let* ((procmark (process-mark currproc))
- (block (buffer-substring (max comint-last-input-end
- (- procmark
- python-pdbtrack-track-range))
- procmark))
- target target_fname target_lineno target_buffer)
-
- (if (not (string-match (concat python-pdbtrack-input-prompt "$") block))
- (python-pdbtrack-overlay-arrow nil)
-
- (setq target (python-pdbtrack-get-source-buffer block))
-
- (if (stringp target)
- (progn
- (python-pdbtrack-overlay-arrow nil)
- (message "pdbtrack: %s" target))
-
- (setq target_lineno (car target)
- target_buffer (cadr target)
- target_fname (buffer-file-name target_buffer))
- (switch-to-buffer-other-window target_buffer)
- (goto-char (point-min))
- (forward-line (1- target_lineno))
- (message "pdbtrack: line %s, file %s" target_lineno target_fname)
- (python-pdbtrack-overlay-arrow t)
- (pop-to-buffer origbuf t)
- ;; in large shell buffers, above stuff may cause point to lag output
- (goto-char procmark)))))))
-
-(defun python-pdbtrack-get-source-buffer (block)
- "Return line number and buffer of code indicated by block's traceback text.
-
-We look first to visit the file indicated in the trace.
-
-Failing that, we look for the most recently visited python-mode buffer
-with the same name or having the named function.
-
-If we're unable find the source code we return a string describing the
-problem."
-
- (if (not (string-match python-pdbtrack-stack-entry-regexp block))
-
- "Traceback cue not found"
-
- (let* ((filename (match-string 1 block))
- (lineno (string-to-number (match-string 2 block)))
- (funcname (match-string 3 block))
- funcbuffer)
-
- (cond ((file-exists-p filename)
- (list lineno (find-file-noselect filename)))
-
- ((setq funcbuffer (python-pdbtrack-grub-for-buffer funcname lineno))
- (if (string-match "/Script (Python)$" filename)
- ;; Add in number of lines for leading '##' comments:
- (setq lineno
- (+ lineno
- (with-current-buffer funcbuffer
- (if (equal (point-min)(point-max))
- 0
- (count-lines
- (point-min)
- (max (point-min)
- (string-match "^\\([^#]\\|#[^#]\\|#$\\)"
- (buffer-substring
- (point-min) (point-max))))))))))
- (list lineno funcbuffer))
-
- ((= (elt filename 0) ?\<)
- (format "(Non-file source: '%s')" filename))
-
- (t (format "Not found: %s(), %s" funcname filename))))))
-
-(defun python-pdbtrack-grub-for-buffer (funcname lineno)
- "Find recent python-mode buffer named, or having function named funcname."
- (let ((buffers (buffer-list))
- buf
- got)
- (while (and buffers (not got))
- (setq buf (car buffers)
- buffers (cdr buffers))
- (if (and (with-current-buffer buf
- (string= major-mode "python-mode"))
- (or (string-match funcname (buffer-name buf))
- (string-match (concat "^\\s-*\\(def\\|class\\)\\s-+"
- funcname "\\s-*(")
- (with-current-buffer buf
- (buffer-substring (point-min)
- (point-max))))))
- (setq got buf)))
- got))
-
-;; Python subprocess utilities and filters
-(defun python-execute-file (proc filename)
- "Send to Python interpreter process PROC \"execfile('FILENAME')\".
-Make that process's buffer visible and force display. Also make
-comint believe the user typed this string so that
-`kill-output-from-shell' does The Right Thing."
- (let ((curbuf (current-buffer))
- (procbuf (process-buffer proc))
- ; (comint-scroll-to-bottom-on-output t)
- (msg (format "## working on region in file %s...\n" filename))
- ;; add some comment, so that we can filter it out of history
- (cmd (format "execfile(r'%s') # PYTHON-MODE\n" filename)))
- (unwind-protect
- (with-current-buffer procbuf
- (goto-char (point-max))
- (move-marker (process-mark proc) (point))
- (funcall (process-filter proc) proc msg))
- (set-buffer curbuf))
- (process-send-string proc cmd)))
-
-;; from pycomplete.el
-(defun py-find-global-imports ()
- (save-excursion
- (let (first-class-or-def imports)
- (goto-char (point-min))
- (setq first-class-or-def
- (re-search-forward "^ *\\(def\\|class\\) " nil t))
- (goto-char (point-min))
- (while (re-search-forward
- "^\\(import \\|from \\([A-Za-z_][A-Za-z_0-9]*\\) import \\).*"
- nil t)
- (setq imports (append imports
- (list (buffer-substring
- (match-beginning 0)
- (match-end 0))))))
- imports)))
-
-;;; Code Completion.
-
-;; http://lists.gnu.org/archive/html/bug-gnu-emacs/2008-01/msg00076.html
-(defalias
- 'py-shell-redirect-send-command-to-process
- 'comint-redirect-send-command-to-process)
-(defalias
- 'py-shell-dynamic-simple-complete
- 'comint-dynamic-simple-complete)
-
-(defvar python-imports "None"
- "String of top-level import statements updated by `py-find-imports'.")
-(make-variable-buffer-local 'python-imports)
-
-;;; Python Shell Complete
-;; Author: Lukasz Pankowski
-(defun py-shell-simple-send (proc string)
- (comint-simple-send proc string))
-
-(defun py-shell-execute-string-now (string &optional shell buffer)
- "Send to Python interpreter process PROC \"exec STRING in {}\".
-and return collected output"
- (let* ((procbuf (or buffer (py-shell nil nil shell)))
-
- (proc (get-buffer-process procbuf))
- (cmd (format "exec '''%s''' in {}"
- (mapconcat 'identity (split-string string "\n") "\\n")))
- (outbuf (get-buffer-create " *pyshellcomplete-output*"))
- ;; (lines (reverse py-shell-input-lines))
- )
- ;; (when proc
- (unwind-protect
- (condition-case nil
- (progn
- ;; (if lines
- ;; (with-current-buffer procbuf
- ;; (comint-redirect-send-command-to-process
- ;; "\C-c" outbuf proc nil t)
- ;; ;; wait for output
- ;; (while (not comint-redirect-completed)
- ;; (accept-process-output proc 1))))
- (with-current-buffer outbuf
- (delete-region (point-min) (point-max)))
- (with-current-buffer procbuf
- (comint-redirect-send-command-to-process
- cmd outbuf proc nil t)
- (while (not comint-redirect-completed) ; wait for output
- (accept-process-output proc 1)))
- (with-current-buffer outbuf
- (buffer-substring (point-min) (point-max))))
- (quit (with-current-buffer procbuf
- (interrupt-process proc comint-ptyp)
- (while (not comint-redirect-completed) ; wait for output
- (accept-process-output proc 1)))
- (signal 'quit nil)))
- ;; (if (with-current-buffer procbuf comint-redirect-completed)
- ;; (while lines
- ;; (with-current-buffer procbuf
- ;; (comint-redirect-send-command-to-process
- ;; (car lines) outbuf proc nil t))
- ;; (accept-process-output proc 1)
- ;; (setq lines (cdr lines))))
- )))
-
-(defun py-dot-word-before-point ()
- (buffer-substring
- (save-excursion (skip-chars-backward "a-zA-Z0-9_.") (point))
- (point)))
-
-(defun py-completion-at-point ()
- "An alternative completion, similar the way python.el does it. "
- (interactive "*")
- (let* ((start (when (skip-chars-backward "[[:alnum:]_]")(point)))
- (end (progn (skip-chars-forward "[[:alnum:]_]")(point)))
- (completion (when start
- (py-symbol-completions (buffer-substring-no-properties start end)))))
- (if completion
- (progn
- (delete-region start end)
- (insert (car completion)))
- (tab-to-tab-stop))))
-
-;; started from python.el's python-completion-at-point
-(defun py-script-complete ()
- (interactive "*")
- (let ((end (point))
- (start (save-excursion
- (and (re-search-backward
- (rx (or buffer-start (regexp "[^[:alnum:]._]"))
- (group (1+ (regexp "[[:alnum:]._]"))) point)
- nil t)
- (match-beginning 1)))))
- (when start
- (list start end
- (completion-table-dynamic 'py-symbol-completions)))))
-
-(defun py-symbol-completions (symbol)
- "Return a list of completions of the string SYMBOL from Python process.
-The list is sorted.
-Uses `python-imports' to load modules against which to complete."
- (when (stringp symbol)
- (let ((completions
- (condition-case ()
- (car (read-from-string
- (python-send-receive
- (format "emacs.complete(%S,%s)"
- (substring-no-properties symbol)
- python-imports))))
- (error nil))))
- (sort
- ;; We can get duplicates from the above -- don't know why.
- (delete-dups completions)
- #'string<))))
-
-(defun py-python-script-complete (&optional shell imports beg end word)
- "Complete word before point, if any. Otherwise insert TAB. "
- (interactive)
- (let* (py-split-windows-on-execute-p
- py-switch-buffers-on-execute-p
- (orig (point))
- (shell (or shell py-local-versioned-command (py-choose-shell)))
- (beg (or beg (save-excursion (skip-chars-backward "a-zA-Z0-9_.") (point))))
- (end (or end (point)))
- (word (or word (buffer-substring-no-properties beg end)))
- (imports (or imports (py-find-imports)))
- )
- (cond ((string= word "")
- (message "%s" "Nothing to complete. ")
- (tab-to-tab-stop))
- (t (or (setq proc (get-buffer-process (py-buffer-name-prepare shell)))
- (setq proc (get-buffer-process (py-shell nil nil shell))))
- (if (processp proc)
- (progn
- ;; when completing instances, make them known
- (when (string-match "^\\(^[a-zA-Z0-9_]+\\)\\.\\([a-zA-Z0-9_]+\\)$" word)
- ;; (message "%s" (match-string 1 word))
- (save-excursion
- (save-match-data
- (goto-char (point-min))
- (when (re-search-forward (concat "^[ \t]*" (match-string-no-properties 1 word) "[ \t]*=[ \t]*[^ \n\r\f\t]+") nil t 1)))
- (if imports
- (unless (string-match (concat "import " (match-string-no-properties 1 word) ";") imports)
- (setq imports
- (concat imports (concat "import" (match-string-no-properties 1 word) ";"))))
- (setq imports (match-string-no-properties 0 word)))))
- (python-shell-completion--do-completion-at-point proc imports word)
- ;; (unless (python-shell-completion--do-completion-at-point proc imports word)
- (when (eq (point) orig)
- (if (and (not (window-full-height-p))
- (buffer-live-p (get-buffer "*Python Completions*")))
- (progn
- (set-buffer "*Python Completions*")
- (switch-to-buffer (current-buffer))
- (delete-other-windows)
- (search-forward word))
- (dabbrev-expand nil)))
- nil)
- (error "No completion process at proc"))))))
-
-(defun py-python2-shell-complete (&optional shell)
- (interactive)
- (let* (py-split-windows-on-execute-p
- py-switch-buffers-on-execute-p
- (shell (or shell py-local-versioned-command))
- (orig (point))
- (beg (save-excursion (skip-chars-backward "a-zA-Z0-9_.") (point)))
- (end (point))
- (word (buffer-substring-no-properties beg end)))
- (cond ((string= word "")
- (message "%s" "Nothing to complete. ")
- (tab-to-tab-stop))
- (t (or (setq proc (get-buffer-process shell))
- (setq proc (get-buffer-process (py-shell nil nil shell))))
- (message "%s" (processp proc))
- (python-shell-completion--do-completion-at-point proc nil word))))
- nil)
-
-(defun py-python3-shell-complete (&optional shell)
- "Complete word before point, if any. Otherwise insert TAB. "
- (interactive)
- (let* ((shell (or shell py-local-versioned-command))
- (orig (point))
- (beg (save-excursion (skip-chars-backward "a-zA-Z0-9_.") (point)))
- (end (point))
- (word (buffer-substring-no-properties beg end)))
- (cond ((string= word "")
- (message "%s" "Nothing to complete. ")
- (tab-to-tab-stop))
- (t
- (python-shell-completion--do-completion-at-point (get-buffer-process (current-buffer)) nil word)
- nil))))
-
-(defun py-shell-complete (&optional shell)
- "Complete word before point, if any. Otherwise insert TAB. "
- (interactive)
- ;; (window-configuration-to-register 313465889)
- ;; (save-window-excursion
- (if (or (eq major-mode 'comint-mode)(eq major-mode 'inferior-python-mode))
- ;; kind of completion resp. to shell
- (let (py-fontify-shell-buffer-p
- (shell (or shell (py-report-executable (buffer-name (current-buffer))))))
- (if (string-match "[iI][pP]ython" shell)
- (ipython-complete)
- (let* ((orig (point))
- (beg (save-excursion (skip-chars-backward "a-zA-Z0-9_.") (point)))
- (end (point))
- (word (buffer-substring-no-properties beg end)))
- (cond ((string= word "")
- (tab-to-tab-stop))
- ((string-match "[pP]ython3[^[:alpha:]]*$" shell)
- (python-shell-completion--do-completion-at-point (get-buffer-process (current-buffer)) "" word))
- (t (py-shell-complete-intern word beg end shell))))))
- ;; complete in script buffer
- (let* ((shell (or shell (py-choose-shell)))
- py-split-windows-on-execute-p
- py-switch-buffers-on-execute-p
- (proc (or (get-buffer-process shell)
- (get-buffer-process (py-shell nil nil shell 'noswitch nil))))
- (beg (save-excursion (skip-chars-backward "a-zA-Z0-9_.") (point)))
- (end (point))
- (word (buffer-substring-no-properties beg end))
- (imports (py-find-imports)))
- (cond ((string= word "")
- (tab-to-tab-stop))
- ((string-match "[iI][pP]ython" shell)
- (ipython-complete))
- ((string-match "[pP]ython3[^[:alpha:]]*$" shell)
- (python-shell-completion--do-completion-at-point proc (buffer-substring-no-properties beg end) word))
- (imports
- (py-python-script-complete shell imports beg end word))
- (t (py-shell-complete-intern word beg end shell imports))))))
-
-(defun py-shell-complete-intern (word &optional beg end shell imports)
- (let (result)
- (if imports
- (setq result (py-shell-execute-string-now (format (concat imports "
-def print_completions(namespace, text, prefix=''):
- for name in namespace:
- if name.startswith(text):
- print(prefix + name)
-
-def complete(text):
- import __builtin__
- import __main__
- if '.' in text:
- terms = text.split('.')
- try:
- if hasattr(__main__, terms[0]):
- obj = getattr(__main__, terms[0])
- else:
- obj = getattr(__builtin__, terms[0])
- for term in terms[1:-1]:
- obj = getattr(obj, term)
- print_completions(dir(obj), terms[-1], text[:text.rfind('.') + 1])
- except AttributeError:
- pass
- else:
- import keyword
- print_completions(keyword.kwlist, text)
- print_completions(dir(__builtin__), text)
- print_completions(dir(__main__), text)
-complete('%s')") word) shell))
- (setq result (py-shell-execute-string-now (format "
-def print_completions(namespace, text, prefix=''):
- for name in namespace:
- if name.startswith(text):
- print(prefix + name)
-
-def complete(text):
- import __builtin__
- import __main__
- if '.' in text:
- terms = text.split('.')
- try:
- if hasattr(__main__, terms[0]):
- obj = getattr(__main__, terms[0])
- else:
- obj = getattr(__builtin__, terms[0])
- for term in terms[1:-1]:
- obj = getattr(obj, term)
- print_completions(dir(obj), terms[-1], text[:text.rfind('.') + 1])
- except AttributeError:
- pass
- else:
- import keyword
- print_completions(keyword.kwlist, text)
- print_completions(dir(__builtin__), text)
- print_completions(dir(__main__), text)
-complete('%s')" word) shell (when (comint-check-proc (current-buffer)) (current-buffer)))))
- (if (or (eq result nil)(string= "" result))
- (message "Can't complete")
- (setq result (replace-regexp-in-string comint-prompt-regexp "" result))
- (let ((comint-completion-addsuffix nil)
- (completions
- (sort
- (delete-dups (if (split-string "\n" "\n")
- (split-string result "\n" t) ; XEmacs
- (split-string result "\n")))
- #'string<)))
- (if (string= (car completions) word)
- (tab-to-tab-stop)
- (delete-region beg end)
- (insert (car completions))))
- ;; list-typ return required by `completion-at-point'
- (point))))
-
-;;; IPython Shell Complete
-
-;; see also
-;; http://lists.gnu.org/archive/html/bug-gnu-emacs/2008-01/msg00076.html
-
-(defun ipython-complete (&optional done completion-command-string beg end word)
- "Complete the python symbol before point.
-
-If no completion available, insert a TAB.
-Returns the completed symbol, a string, if successful, nil otherwise. "
-
- (interactive "*")
- (let* (py-split-windows-on-execute-p
- py-switch-buffers-on-execute-p
- (beg (or beg (progn (save-excursion (skip-chars-backward "a-z0-9A-Z_." (point-at-bol))
- (point)))))
- (end (or end (point)))
- (pattern (or word (buffer-substring-no-properties beg end)))
- (sep ";")
- (pyshellname "ipython")
- (processlist (process-list))
- done
- (process
- (if ipython-complete-use-separate-shell-p
- (unless (and (buffer-live-p "*IPython-Complete*")
- (comint-check-proc (process-name (get-buffer-process "*IPython-Complete*"))))
- (get-buffer-process (py-shell nil nil pyshellname 'noswitch nil "*IPython-Complete*")))
- (progn
- (while (and processlist (not done))
- (when (and
- (string= pyshellname (process-name (car processlist)))
- (processp (car processlist))
- (setq done (car processlist))))
- (setq processlist (cdr processlist)))
- done)))
- (python-process (or process
- (get-buffer-process (py-shell nil nil (if (string-match "[iI][pP]ython[^[:alpha:]]*$" pyshellname) pyshellname "ipython") 'noswitch nil))))
- (comint-output-filter-functions
- (delq 'py-comint-output-filter-function comint-output-filter-functions))
- (comint-output-filter-functions
- (append comint-output-filter-functions
- '(ansi-color-filter-apply
- (lambda (string)
- (setq ugly-return (concat ugly-return string))
- (delete-region comint-last-output-start
- (process-mark (get-buffer-process (current-buffer))))))))
-
- (ccs (or completion-command-string (py-set-ipython-completion-command-string
- (process-name python-process))))
- completion completions completion-table ugly-return)
- (if (string= pattern "")
- (tab-to-tab-stop)
- (process-send-string python-process (format ccs pattern))
- (accept-process-output python-process 5)
- (setq completions
- (split-string (substring ugly-return 0 (position ?\n ugly-return)) sep))
- (setq completion-table (loop for str in completions
- collect (list str nil)))
- (setq completion (try-completion pattern completion-table))
- (cond ((eq completion t)
- (tab-to-tab-stop))
- ((null completion)
- ;; if an (I)Python shell didn't run
- ;; before, first completion are not delivered
- ;; (if done (ipython-complete done)
- (message "Can't find completion for \"%s\"" pattern)
- (ding)
- nil)
- ((not (string= pattern completion))
- (delete-region beg end)
- (insert completion)
- nil)
- (t
- (when py-verbose-p (message "Making completion list..."))
- (with-output-to-temp-buffer "*Python Completions*"
- (display-completion-list (all-completions pattern completion-table)))
- nil)))))
-
-(defun ipython-complete-py-shell-name (&optional done)
- "Complete the python symbol before point.
-
-If no completion available, insert a TAB.
-Returns the completed symbol, a string, if successful, nil otherwise.
-
-Bug: if no IPython-shell is running, fails first time due to header returned, which messes up the result. Please repeat once then. "
- (interactive "*")
- (let* (py-split-windows-on-execute-p
- py-switch-buffers-on-execute-p
- (beg (progn (save-excursion (skip-chars-backward "a-z0-9A-Z_." (point-at-bol))
- (point))))
- (end (point))
- (pattern (buffer-substring-no-properties beg end))
- (sep ";")
- (py-process (or (get-buffer-process (current-buffer))
- (get-buffer-process (py-shell))
- (get-buffer-process (py-shell nil nil "ipython" 'noswitch nil))))
-
- (comint-output-filter-functions
- (delq 'py-comint-output-filter-function comint-output-filter-functions))
- (comint-output-filter-functions
- (append comint-output-filter-functions
- '(ansi-color-filter-apply
- (lambda (string)
- (setq ugly-return (concat ugly-return string))
- (delete-region comint-last-output-start
- (process-mark (get-buffer-process (current-buffer))))))))
- completion completions completion-table ugly-return)
- (if (string= pattern "")
- (tab-to-tab-stop)
- (process-send-string py-process
- (format (py-set-ipython-completion-command-string (downcase (process-name py-process))) pattern))
- (accept-process-output py-process)
- (setq completions
- (split-string (substring ugly-return 0 (position ?\n ugly-return)) sep))
- (setq completion-table (loop for str in completions
- collect (list str nil)))
- (setq completion (try-completion pattern completion-table))
- (cond ((eq completion t))
- ((null completion)
- ;; if an (I)Python shell didn't run
- ;; before, first completion are not delivered
- ;; (if done (ipython-complete done)
- (message "Can't find completion for \"%s\"" pattern)
- (ding))
- ((not (string= pattern completion))
- (delete-region beg end)
- (insert completion))
- (t
- (message "Making completion list...")
- (with-output-to-temp-buffer "*Python Completions*"
- (display-completion-list (all-completions pattern completion-table)))
- (message "Making completion list...%s" "done"))))
- completion))
-
-;;; pep8
-(defun py-pep8-run (command)
- "*Run pep8, check formatting (default on the file currently visited).
-"
- (interactive
- (let ((default
- (if (buffer-file-name)
- (format "%s %s %s" py-pep8-command
- (mapconcat 'identity py-pep8-command-args " ")
- (buffer-file-name))
- (format "%s %s" py-pep8-command
- (mapconcat 'identity py-pep8-command-args " "))))
- (last (when py-pep8-history
- (let* ((lastcmd (car py-pep8-history))
- (cmd (cdr (reverse (split-string lastcmd))))
- (newcmd (reverse (cons (buffer-file-name) cmd))))
- (mapconcat 'identity newcmd " ")))))
-
- (list
- (if (fboundp 'read-shell-command)
- (read-shell-command "Run pep8 like this: "
- (if last
- last
- default)
- 'py-pep8-history)
- (read-string "Run pep8 like this: "
- (if last
- last
- default)
- 'py-pep8-history)))))
- (save-some-buffers (not py-ask-about-save) nil)
- (if (fboundp 'compilation-start)
- ;; Emacs.
- (compilation-start command)
- ;; XEmacs.
- (when (featurep 'xemacs)
- (compile-internal command "No more errors"))))
-
-(defun py-pep8-help ()
- "Display pep8 command line help messages. "
- (interactive)
- (set-buffer (get-buffer-create "*pep8-Help*"))
- (erase-buffer)
- (shell-command "pep8 --help" "*pep8-Help*"))
-
-;;; Pylint
-(defalias 'pylint 'py-pylint-run)
-(defun py-pylint-run (command)
- "*Run pylint (default on the file currently visited).
-
-For help see M-x pylint-help resp. M-x pylint-long-help.
-Home-page: http://www.logilab.org/project/pylint "
- (interactive
- (let ((default
- (if (buffer-file-name)
- (format "%s %s %s" py-pylint-command
- (mapconcat 'identity py-pylint-command-args " ")
- (buffer-file-name))
- (format "%s %s" py-pylint-command
- (mapconcat 'identity py-pylint-command-args " "))))
- (last (when py-pylint-history
- (let* ((lastcmd (car py-pylint-history))
- (cmd (cdr (reverse (split-string lastcmd))))
- (newcmd (reverse (cons (buffer-file-name) cmd))))
- (mapconcat 'identity newcmd " ")))))
-
- (list
- (if (fboundp 'read-shell-command)
- (read-shell-command "Run pylint like this: "
- (if last
- last
- default)
- 'py-pylint-history)
- (read-string "Run pylint like this: "
- (if last
- last
- default)
- 'py-pylint-history)))))
- (save-some-buffers (not py-ask-about-save) nil)
- (if (fboundp 'compilation-start)
- ;; Emacs.
- (compilation-start command)
- ;; XEmacs.
- (when (featurep 'xemacs)
- (compile-internal command "No more errors"))))
-
-(defalias 'pylint-help 'py-pylint-help)
-(defun py-pylint-help ()
- "Display Pylint command line help messages.
-
-Let's have this until more Emacs-like help is prepared "
- (interactive)
- (set-buffer (get-buffer-create "*Pylint-Help*"))
- (erase-buffer)
- (shell-command "pylint --long-help" "*Pylint-Help*"))
-
-(defalias 'pylint-doku 'py-pylint-doku)
-(defun py-pylint-doku ()
- "Display Pylint Documentation.
-
-Calls `pylint --full-documentation'"
- (interactive)
- (set-buffer (get-buffer-create "*Pylint-Documentation*"))
- (erase-buffer)
- (shell-command "pylint --full-documentation" "*Pylint-Documentation*"))
-
-;;; Pyflakes
-(defalias 'pyflakes 'py-pyflakes-run)
-(defun py-pyflakes-run (command)
- "*Run pyflakes (default on the file currently visited).
-
-For help see M-x pyflakes-help resp. M-x pyflakes-long-help.
-Home-page: http://www.logilab.org/project/pyflakes "
- (interactive
- (let ((default
- (if (buffer-file-name)
- (format "%s %s %s" py-pyflakes-command
- (mapconcat 'identity py-pyflakes-command-args " ")
- (buffer-file-name))
- (format "%s %s" py-pyflakes-command
- (mapconcat 'identity py-pyflakes-command-args " "))))
- (last (when py-pyflakes-history
- (let* ((lastcmd (car py-pyflakes-history))
- (cmd (cdr (reverse (split-string lastcmd))))
- (newcmd (reverse (cons (buffer-file-name) cmd))))
- (mapconcat 'identity newcmd " ")))))
-
- (list
- (if (fboundp 'read-shell-command)
- (read-shell-command "Run pyflakes like this: "
- (if last
- last
- default)
- 'py-pyflakes-history)
- (read-string "Run pyflakes like this: "
- (if last
- last
- default)
- 'py-pyflakes-history)))))
- (save-some-buffers (not py-ask-about-save) nil)
- (if (fboundp 'compilation-start)
- ;; Emacs.
- (compilation-start command)
- ;; XEmacs.
- (when (featurep 'xemacs)
- (compile-internal command "No more errors"))))
-
-(defalias 'pyflakes-help 'py-pyflakes-help)
-(defun py-pyflakes-help ()
- "Display Pyflakes command line help messages.
-
-Let's have this until more Emacs-like help is prepared "
- (interactive)
- ;; (set-buffer (get-buffer-create "*Pyflakes-Help*"))
- ;; (erase-buffer)
- (with-help-window "*Pyflakes-Help*"
- (with-current-buffer standard-output
- (insert " pyflakes [file-or-directory ...]
-
- Pyflakes is a simple program which checks Python
- source files for errors. It is similar to
- PyChecker in scope, but differs in that it does
- not execute the modules to check them. This is
- both safer and faster, although it does not
- perform as many checks. Unlike PyLint, Pyflakes
- checks only for logical errors in programs; it
- does not perform any checks on style.
-
- All commandline arguments are checked, which
- have to be either regular files or directories.
- If a directory is given, every .py file within
- will be checked.
-
- When no commandline arguments are given, data
- will be read from standard input.
-
- The exit status is 0 when no warnings or errors
- are found. When errors are found the exit status
- is 2. When warnings (but no errors) are found
- the exit status is 1.
-
-Extracted from http://manpages.ubuntu.com/manpages/natty/man1/pyflakes.1.html
-"))))
-
-;;; Pyflakes-pep8
-(defalias 'pyflakespep8 'py-pyflakespep8-run)
-(defun py-pyflakespep8-run (command)
- "*Run pyflakespep8, check formatting (default on the file currently visited).
-"
- (interactive
- (let ((default
- (if (buffer-file-name)
- (format "%s %s %s" py-pyflakespep8-command
- (mapconcat 'identity py-pyflakespep8-command-args " ")
- (buffer-file-name))
- (format "%s %s" py-pyflakespep8-command
- (mapconcat 'identity py-pyflakespep8-command-args " "))))
- (last (when py-pyflakespep8-history
- (let* ((lastcmd (car py-pyflakespep8-history))
- (cmd (cdr (reverse (split-string lastcmd))))
- (newcmd (reverse (cons (buffer-file-name) cmd))))
- (mapconcat 'identity newcmd " ")))))
-
- (list
- (if (fboundp 'read-shell-command)
- (read-shell-command "Run pyflakespep8 like this: "
- (if last
- last
- default)
- 'py-pyflakespep8-history)
- (read-string "Run pyflakespep8 like this: "
- (if last
- last
- default)
- 'py-pyflakespep8-history)))))
- (save-some-buffers (not py-ask-about-save) nil)
- (if (fboundp 'compilation-start)
- ;; Emacs.
- (compilation-start command)
- ;; XEmacs.
- (when (featurep 'xemacs)
- (compile-internal command "No more errors"))))
-
-(defun py-pyflakespep8-help ()
- "Display pyflakespep8 command line help messages. "
- (interactive)
- (set-buffer (get-buffer-create "*pyflakespep8-Help*"))
- (erase-buffer)
- (shell-command "pyflakespep8 --help" "*pyflakespep8-Help*"))
-
-;;; Pychecker
-(defun py-pychecker-run (command)
- "*Run pychecker (default on the file currently visited)."
- (interactive
- (let ((default
- (if (buffer-file-name)
- (format "%s %s %s" py-pychecker-command
- (mapconcat 'identity py-pychecker-command-args " ")
- (buffer-file-name))
- (format "%s %s" py-pychecker-command
- (mapconcat 'identity py-pychecker-command-args " "))))
- (last (when py-pychecker-history
- (let* ((lastcmd (car py-pychecker-history))
- (cmd (cdr (reverse (split-string lastcmd))))
- (newcmd (reverse (cons (buffer-file-name) cmd))))
- (mapconcat 'identity newcmd " ")))))
-
- (list
- (if (fboundp 'read-shell-command)
- (read-shell-command "Run pychecker like this: "
- (if last
- last
- default)
- 'py-pychecker-history)
- (read-string "Run pychecker like this: "
- (if last
- last
- default)
- 'py-pychecker-history)))))
- (save-some-buffers (not py-ask-about-save) nil)
- (if (fboundp 'compilation-start)
- ;; Emacs.
- (compilation-start command)
- ;; XEmacs.
- (when (featurep 'xemacs)
- (compile-internal command "No more errors"))))
-
-;;; python-mode skeletons
-;; Derived from python.el, where it's instrumented as abbrev
-;; Original code authored by Dave Love AFAIK
-
-(define-skeleton py-else
- "Auxiliary skeleton."
- nil
- (unless (eq ?y (read-char "Add `else' clause? (y for yes or RET for no) "))
- (signal 'quit t))
- < "else:" \n)
-
-(define-skeleton py-if
- "If condition "
- "if " "if " str ":" \n
- _ \n
- ("other condition, %s: "
- < "elif " str ":" \n
- > _ \n nil)
- '(py-else) | ^)
-
-(define-skeleton py-else
- "Auxiliary skeleton."
- nil
- (unless (eq ?y (read-char "Add `else' clause? (y for yes or RET for no) "))
- (signal 'quit t))
- "else:" \n
- > _ \n)
-
-(define-skeleton py-while
- "Condition: "
- "while " "while " str ":" \n
- > -1 _ \n
- '(py-else) | ^)
-
-(define-skeleton py-for
- "Target, %s: "
- "for " "for " str " in " (skeleton-read "Expression, %s: ") ":" \n
- > -1 _ \n
- '(py-else) | ^)
-
-(define-skeleton py-try/except
- "Py-try/except skeleton "
- "try:" "try:" \n
- > -1 _ \n
- ("Exception, %s: "
- < "except " str '(python-target) ":" \n
- > _ \n nil)
- < "except:" \n
- > _ \n
- '(py-else) | ^)
-
-(define-skeleton py-target
- "Auxiliary skeleton."
- "Target, %s: " ", " str | -2)
-
-(define-skeleton py-try/finally
- "Py-try/finally skeleton "
- "try:" \n
- > -1 _ \n
- < "finally:" \n
- > _ \n)
-
-(define-skeleton py-def
- "Name: "
- "def " str " (" ("Parameter, %s: " (unless (equal ?\( (char-before)) ", ")
- str) "):" \n
- "\"\"\"" - "\"\"\"" \n ; Fixme: extra space inserted -- why?).
- > _ \n)
-
-(define-skeleton py-class
- "Name: "
- "class " str " (" ("Inheritance, %s: "
- (unless (equal ?\( (char-before)) ", ")
- str)
- & ")" | -2 ; close list or remove opening
- ":" \n
- "\"\"\"" - "\"\"\"" \n
- > _ \n)
-
-;;; Virtualenv --- Switching virtual python enviroments seamlessly
-;; Thanks Gabriele Lanaro and all working on that
-;; Url: http://github.com/gabrielelanaro/emacs-starter-kit
-;; The installation is fairly easy, you have the load option, put this
-;; in your .emacs:
-
-;; (load-file "/path/to/virtualenv.el")
-;;
-;; Otherwise you can do it with the load path:
-
-;; (add-to-list 'load-path "Path/to/virtualenv.el/containing/directory/"
-;; (require 'virtualenv)
-
-;; The usage is very intuitive, to activate a virtualenv use
-
-;; M-x virtualenv-activate
-
-;; It will prompt you for the virtual environment path.
-;; If you want to deactivate a virtual environment, use:
-
-;; M-x virtualenv-deactivate
-
-(defvar virtualenv-workon-home nil)
-
-(if (getenv "WORKON_HOME")
- (setq virtualenv-workon-home (getenv "WORKON_HOME"))
- (setq virtualenv-workon-home "~/.virtualenvs"))
-
-(defvar virtualenv-name nil)
-(setq virtualenv-name nil)
-
-;;TODO: Move to a generic UTILITY or TOOL package
-(defun virtualenv-filter (predicate sequence)
- "Apply to each element of SEQUENCE the PREDICATE, if FUNCTION
- returns non-nil append the element to the return value of
- virtualenv-filter: a list"
- (let ((retlist '()))
- (dolist (element sequence)
- (when (funcall predicate element)
- (push element retlist)))
- (nreverse retlist)))
-
-(defun virtualenv-append-path (dir var)
- "Append DIR to a path-like varibale VAR, for example:
- (virtualenv-append-path /usr/bin:/bin /home/test/bin) -> /home/test/bin:/usr/bin:/bin"
- (concat (expand-file-name dir)
- path-separator
- var))
-
-(defun virtualenv-add-to-path (dir)
- "Add the specified path element to the Emacs PATH"
- (setenv "PATH"
- (virtualenv-append-path dir
- (getenv "PATH"))))
-
-(defun virtualenv-current ()
- "barfs the current activated virtualenv"
- (interactive)
- (message virtualenv-name))
-
-(defun virtualenv-activate (dir)
- "Activate the virtualenv located in DIR"
- (interactive "DVirtualenv Directory: ")
-
- ;; Eventually deactivate previous virtualenv
- (when virtualenv-name
- (virtualenv-deactivate))
-
- ;; Storing old variables
- (setq virtualenv-old-path (getenv "PATH"))
- (setq virtualenv-old-exec-path exec-path)
-
- (setenv "VIRTUAL_ENV" dir)
- (virtualenv-add-to-path (concat dir "bin"))
- (add-to-list 'exec-path (concat dir "bin"))
-
- (setq virtualenv-name dir)
-
- (message (concat "Virtualenv '" virtualenv-name "' activated.")))
-
-(defun virtualenv-deactivate ()
- "Deactivate the current virtual enviroment"
- (interactive)
-
- ;; Restoring old variables
- (setenv "PATH" virtualenv-old-path)
- (setq exec-path virtualenv-old-exec-path)
-
- (message (concat "Virtualenv '" virtualenv-name "' deactivated."))
-
- (setq virtualenv-name nil))
-
-(defun virtualenvp (dir)
- "Check if a directory is a virtualenv"
- (file-exists-p (concat dir "/bin/activate")))
-
-(defun virtualenv-workon-complete ()
- "return available completions for virtualenv-workon"
- (let
- ;;Varlist
- ((filelist (directory-files virtualenv-workon-home t)))
- ;; Get only the basename from the list of the virtual environments
- ;; paths
- (mapcar 'file-name-nondirectory
- ;; Filter the directories and then the virtual environments
- (virtualenv-filter 'virtualenvp
- (virtualenv-filter 'file-directory-p filelist)))))
-
-(defun virtualenv-workon (name)
- "Issue a virtualenvwrapper-like virtualenv-workon command"
- (interactive (list (completing-read "Virtualenv: " (virtualenv-workon-complete))))
- (virtualenv-activate (concat (getenv "WORKON_HOME") "/" name)))
-
-(defun py-toggle-local-default-use ()
- (interactive)
- "Toggle boolean value of `py-use-local-default'.
-
-Returns `py-use-local-default'
-
-See also `py-install-local-shells'
-Installing named virualenv shells is the preffered way,
-as it leaves your system default unchanged."
- (setq py-use-local-default (not py-use-local-default))
- (when (interactive-p) (message "py-use-local-default set to %s" py-use-local-default))
- py-use-local-default)
-
-;;; Extended executes
-;; created by `write-extended-execute-forms'
-(defun py-execute-prepare (form &optional shell dedicated switch)
- "Used by python-extended-executes ."
- (save-excursion
- (let ((beg (prog1
- (or (funcall (intern-soft (concat "py-beginning-of-" form "-p")))
-
- (funcall (intern-soft (concat "py-beginning-of-" form)))
- (push-mark))))
- (end (funcall (intern-soft (concat "py-end-of-" form)))))
- (py-execute-base beg end shell dedicated switch))))
-
-(defun py-execute-statement-python ()
- "Send statement at point to Python interpreter. "
- (interactive)
- (py-execute-prepare "statement" "python" nil nil))
-
-(defun py-execute-statement-python-switch ()
- "Send statement at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "statement" "python" nil 'switch))
-
-(defun py-execute-statement-python-noswitch ()
- "Send statement at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "statement" "python" nil 'noswitch))
-
-(defun py-execute-statement-python-dedicated ()
- "Send statement at point to Python unique interpreter. "
- (interactive)
- (py-execute-prepare "statement" "python" t nil))
-
-(defun py-execute-statement-python-dedicated-switch ()
- "Send statement at point to Python unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "statement" "python" t 'switch))
-
-(defun py-execute-statement-ipython ()
- "Send statement at point to IPython interpreter. "
- (interactive)
- (py-execute-prepare "statement" "ipython" nil nil))
-
-(defun py-execute-statement-ipython-switch ()
- "Send statement at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "statement" "ipython" nil 'switch))
-
-(defun py-execute-statement-ipython-noswitch ()
- "Send statement at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "statement" "ipython" nil 'noswitch))
-
-(defun py-execute-statement-ipython-dedicated ()
- "Send statement at point to IPython unique interpreter. "
- (interactive)
- (py-execute-prepare "statement" "ipython" t nil))
-
-(defun py-execute-statement-ipython-dedicated-switch ()
- "Send statement at point to IPython unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "statement" "ipython" t 'switch))
-
-(defun py-execute-statement-python3 ()
- "Send statement at point to Python3 interpreter. "
- (interactive)
- (py-execute-prepare "statement" "python3" nil nil))
-
-(defun py-execute-statement-python3-switch ()
- "Send statement at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "statement" "python3" nil 'switch))
-
-(defun py-execute-statement-python3-noswitch ()
- "Send statement at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "statement" "python3" nil 'noswitch))
-
-(defun py-execute-statement-python3-dedicated ()
- "Send statement at point to Python3 unique interpreter. "
- (interactive)
- (py-execute-prepare "statement" "python3" t nil))
-
-(defun py-execute-statement-python3-dedicated-switch ()
- "Send statement at point to Python3 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "statement" "python3" t 'switch))
-
-(defun py-execute-statement-python2 ()
- "Send statement at point to Python2 interpreter. "
- (interactive)
- (py-execute-prepare "statement" "python2" nil nil))
-
-(defun py-execute-statement-python2-switch ()
- "Send statement at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "statement" "python2" nil 'switch))
-
-(defun py-execute-statement-python2-noswitch ()
- "Send statement at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "statement" "python2" nil 'noswitch))
-
-(defun py-execute-statement-python2-dedicated ()
- "Send statement at point to Python2 unique interpreter. "
- (interactive)
- (py-execute-prepare "statement" "python2" t nil))
-
-(defun py-execute-statement-python2-dedicated-switch ()
- "Send statement at point to Python2 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "statement" "python2" t 'switch))
-
-(defun py-execute-statement-python2.7 ()
- "Send statement at point to Python2.7 interpreter. "
- (interactive)
- (py-execute-prepare "statement" "python2.7" nil nil))
-
-(defun py-execute-statement-python2.7-switch ()
- "Send statement at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "statement" "python2.7" nil 'switch))
-
-(defun py-execute-statement-python2.7-noswitch ()
- "Send statement at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "statement" "python2.7" nil 'noswitch))
-
-(defun py-execute-statement-python2.7-dedicated ()
- "Send statement at point to Python2.7 unique interpreter. "
- (interactive)
- (py-execute-prepare "statement" "python2.7" t nil))
-
-(defun py-execute-statement-python2.7-dedicated-switch ()
- "Send statement at point to Python2.7 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "statement" "python2.7" t 'switch))
-
-(defun py-execute-statement-jython ()
- "Send statement at point to Jython interpreter. "
- (interactive)
- (py-execute-prepare "statement" "jython" nil nil))
-
-(defun py-execute-statement-jython-switch ()
- "Send statement at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "statement" "jython" nil 'switch))
-
-(defun py-execute-statement-jython-noswitch ()
- "Send statement at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "statement" "jython" nil 'noswitch))
-
-(defun py-execute-statement-jython-dedicated ()
- "Send statement at point to Jython unique interpreter. "
- (interactive)
- (py-execute-prepare "statement" "jython" t nil))
-
-(defun py-execute-statement-jython-dedicated-switch ()
- "Send statement at point to Jython unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "statement" "jython" t 'switch))
-
-(defun py-execute-statement-python3.2 ()
- "Send statement at point to Python3.2 interpreter. "
- (interactive)
- (py-execute-prepare "statement" "python3.2" nil nil))
-
-(defun py-execute-statement-python3.2-switch ()
- "Send statement at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "statement" "python3.2" nil 'switch))
-
-(defun py-execute-statement-python3.2-noswitch ()
- "Send statement at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "statement" "python3.2" nil 'noswitch))
-
-(defun py-execute-statement-python3.2-dedicated ()
- "Send statement at point to Python3.2 unique interpreter. "
- (interactive)
- (py-execute-prepare "statement" "python3.2" t nil))
-
-(defun py-execute-statement-python3.2-dedicated-switch ()
- "Send statement at point to Python3.2 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "statement" "python3.2" t 'switch))
-
-(defun py-execute-block-python ()
- "Send block at point to Python interpreter. "
- (interactive)
- (py-execute-prepare "block" "python" nil nil))
-
-(defun py-execute-block-python-switch ()
- "Send block at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "block" "python" nil 'switch))
-
-(defun py-execute-block-python-noswitch ()
- "Send block at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "block" "python" nil 'noswitch))
-
-(defun py-execute-block-python-dedicated ()
- "Send block at point to Python unique interpreter. "
- (interactive)
- (py-execute-prepare "block" "python" t nil))
-
-(defun py-execute-block-python-dedicated-switch ()
- "Send block at point to Python unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "block" "python" t 'switch))
-
-(defun py-execute-block-ipython ()
- "Send block at point to IPython interpreter. "
- (interactive)
- (py-execute-prepare "block" "ipython" nil nil))
-
-(defun py-execute-block-ipython-switch ()
- "Send block at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "block" "ipython" nil 'switch))
-
-(defun py-execute-block-ipython-noswitch ()
- "Send block at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "block" "ipython" nil 'noswitch))
-
-(defun py-execute-block-ipython-dedicated ()
- "Send block at point to IPython unique interpreter. "
- (interactive)
- (py-execute-prepare "block" "ipython" t nil))
-
-(defun py-execute-block-ipython-dedicated-switch ()
- "Send block at point to IPython unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "block" "ipython" t 'switch))
-
-(defun py-execute-block-python3 ()
- "Send block at point to Python3 interpreter. "
- (interactive)
- (py-execute-prepare "block" "python3" nil nil))
-
-(defun py-execute-block-python3-switch ()
- "Send block at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "block" "python3" nil 'switch))
-
-(defun py-execute-block-python3-noswitch ()
- "Send block at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "block" "python3" nil 'noswitch))
-
-(defun py-execute-block-python3-dedicated ()
- "Send block at point to Python3 unique interpreter. "
- (interactive)
- (py-execute-prepare "block" "python3" t nil))
-
-(defun py-execute-block-python3-dedicated-switch ()
- "Send block at point to Python3 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "block" "python3" t 'switch))
-
-(defun py-execute-block-python2 ()
- "Send block at point to Python2 interpreter. "
- (interactive)
- (py-execute-prepare "block" "python2" nil nil))
-
-(defun py-execute-block-python2-switch ()
- "Send block at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "block" "python2" nil 'switch))
-
-(defun py-execute-block-python2-noswitch ()
- "Send block at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "block" "python2" nil 'noswitch))
-
-(defun py-execute-block-python2-dedicated ()
- "Send block at point to Python2 unique interpreter. "
- (interactive)
- (py-execute-prepare "block" "python2" t nil))
-
-(defun py-execute-block-python2-dedicated-switch ()
- "Send block at point to Python2 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "block" "python2" t 'switch))
-
-(defun py-execute-block-python2.7 ()
- "Send block at point to Python2.7 interpreter. "
- (interactive)
- (py-execute-prepare "block" "python2.7" nil nil))
-
-(defun py-execute-block-python2.7-switch ()
- "Send block at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "block" "python2.7" nil 'switch))
-
-(defun py-execute-block-python2.7-noswitch ()
- "Send block at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "block" "python2.7" nil 'noswitch))
-
-(defun py-execute-block-python2.7-dedicated ()
- "Send block at point to Python2.7 unique interpreter. "
- (interactive)
- (py-execute-prepare "block" "python2.7" t nil))
-
-(defun py-execute-block-python2.7-dedicated-switch ()
- "Send block at point to Python2.7 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "block" "python2.7" t 'switch))
-
-(defun py-execute-block-jython ()
- "Send block at point to Jython interpreter. "
- (interactive)
- (py-execute-prepare "block" "jython" nil nil))
-
-(defun py-execute-block-jython-switch ()
- "Send block at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "block" "jython" nil 'switch))
-
-(defun py-execute-block-jython-noswitch ()
- "Send block at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "block" "jython" nil 'noswitch))
-
-(defun py-execute-block-jython-dedicated ()
- "Send block at point to Jython unique interpreter. "
- (interactive)
- (py-execute-prepare "block" "jython" t nil))
-
-(defun py-execute-block-jython-dedicated-switch ()
- "Send block at point to Jython unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "block" "jython" t 'switch))
-
-(defun py-execute-block-python3.2 ()
- "Send block at point to Python3.2 interpreter. "
- (interactive)
- (py-execute-prepare "block" "python3.2" nil nil))
-
-(defun py-execute-block-python3.2-switch ()
- "Send block at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "block" "python3.2" nil 'switch))
-
-(defun py-execute-block-python3.2-noswitch ()
- "Send block at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "block" "python3.2" nil 'noswitch))
-
-(defun py-execute-block-python3.2-dedicated ()
- "Send block at point to Python3.2 unique interpreter. "
- (interactive)
- (py-execute-prepare "block" "python3.2" t nil))
-
-(defun py-execute-block-python3.2-dedicated-switch ()
- "Send block at point to Python3.2 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "block" "python3.2" t 'switch))
-
-(defun py-execute-clause-python ()
- "Send clause at point to Python interpreter. "
- (interactive)
- (py-execute-prepare "clause" "python" nil nil))
-
-(defun py-execute-clause-python-switch ()
- "Send clause at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "clause" "python" nil 'switch))
-
-(defun py-execute-clause-python-noswitch ()
- "Send clause at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "clause" "python" nil 'noswitch))
-
-(defun py-execute-clause-python-dedicated ()
- "Send clause at point to Python unique interpreter. "
- (interactive)
- (py-execute-prepare "clause" "python" t nil))
-
-(defun py-execute-clause-python-dedicated-switch ()
- "Send clause at point to Python unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "clause" "python" t 'switch))
-
-(defun py-execute-clause-ipython ()
- "Send clause at point to IPython interpreter. "
- (interactive)
- (py-execute-prepare "clause" "ipython" nil nil))
-
-(defun py-execute-clause-ipython-switch ()
- "Send clause at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "clause" "ipython" nil 'switch))
-
-(defun py-execute-clause-ipython-noswitch ()
- "Send clause at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "clause" "ipython" nil 'noswitch))
-
-(defun py-execute-clause-ipython-dedicated ()
- "Send clause at point to IPython unique interpreter. "
- (interactive)
- (py-execute-prepare "clause" "ipython" t nil))
-
-(defun py-execute-clause-ipython-dedicated-switch ()
- "Send clause at point to IPython unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "clause" "ipython" t 'switch))
-
-(defun py-execute-clause-python3 ()
- "Send clause at point to Python3 interpreter. "
- (interactive)
- (py-execute-prepare "clause" "python3" nil nil))
-
-(defun py-execute-clause-python3-switch ()
- "Send clause at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "clause" "python3" nil 'switch))
-
-(defun py-execute-clause-python3-noswitch ()
- "Send clause at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "clause" "python3" nil 'noswitch))
-
-(defun py-execute-clause-python3-dedicated ()
- "Send clause at point to Python3 unique interpreter. "
- (interactive)
- (py-execute-prepare "clause" "python3" t nil))
-
-(defun py-execute-clause-python3-dedicated-switch ()
- "Send clause at point to Python3 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "clause" "python3" t 'switch))
-
-(defun py-execute-clause-python2 ()
- "Send clause at point to Python2 interpreter. "
- (interactive)
- (py-execute-prepare "clause" "python2" nil nil))
-
-(defun py-execute-clause-python2-switch ()
- "Send clause at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "clause" "python2" nil 'switch))
-
-(defun py-execute-clause-python2-noswitch ()
- "Send clause at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "clause" "python2" nil 'noswitch))
-
-(defun py-execute-clause-python2-dedicated ()
- "Send clause at point to Python2 unique interpreter. "
- (interactive)
- (py-execute-prepare "clause" "python2" t nil))
-
-(defun py-execute-clause-python2-dedicated-switch ()
- "Send clause at point to Python2 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "clause" "python2" t 'switch))
-
-(defun py-execute-clause-python2.7 ()
- "Send clause at point to Python2.7 interpreter. "
- (interactive)
- (py-execute-prepare "clause" "python2.7" nil nil))
-
-(defun py-execute-clause-python2.7-switch ()
- "Send clause at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "clause" "python2.7" nil 'switch))
-
-(defun py-execute-clause-python2.7-noswitch ()
- "Send clause at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "clause" "python2.7" nil 'noswitch))
-
-(defun py-execute-clause-python2.7-dedicated ()
- "Send clause at point to Python2.7 unique interpreter. "
- (interactive)
- (py-execute-prepare "clause" "python2.7" t nil))
-
-(defun py-execute-clause-python2.7-dedicated-switch ()
- "Send clause at point to Python2.7 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "clause" "python2.7" t 'switch))
-
-(defun py-execute-clause-jython ()
- "Send clause at point to Jython interpreter. "
- (interactive)
- (py-execute-prepare "clause" "jython" nil nil))
-
-(defun py-execute-clause-jython-switch ()
- "Send clause at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "clause" "jython" nil 'switch))
-
-(defun py-execute-clause-jython-noswitch ()
- "Send clause at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "clause" "jython" nil 'noswitch))
-
-(defun py-execute-clause-jython-dedicated ()
- "Send clause at point to Jython unique interpreter. "
- (interactive)
- (py-execute-prepare "clause" "jython" t nil))
-
-(defun py-execute-clause-jython-dedicated-switch ()
- "Send clause at point to Jython unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "clause" "jython" t 'switch))
-
-(defun py-execute-clause-python3.2 ()
- "Send clause at point to Python3.2 interpreter. "
- (interactive)
- (py-execute-prepare "clause" "python3.2" nil nil))
-
-(defun py-execute-clause-python3.2-switch ()
- "Send clause at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "clause" "python3.2" nil 'switch))
-
-(defun py-execute-clause-python3.2-noswitch ()
- "Send clause at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "clause" "python3.2" nil 'noswitch))
-
-(defun py-execute-clause-python3.2-dedicated ()
- "Send clause at point to Python3.2 unique interpreter. "
- (interactive)
- (py-execute-prepare "clause" "python3.2" t nil))
-
-(defun py-execute-clause-python3.2-dedicated-switch ()
- "Send clause at point to Python3.2 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "clause" "python3.2" t 'switch))
-
-(defun py-execute-block-or-clause-python ()
- "Send block-or-clause at point to Python interpreter. "
- (interactive)
- (py-execute-prepare "block-or-clause" "python" nil nil))
-
-(defun py-execute-block-or-clause-python-switch ()
- "Send block-or-clause at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "block-or-clause" "python" nil 'switch))
-
-(defun py-execute-block-or-clause-python-noswitch ()
- "Send block-or-clause at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "block-or-clause" "python" nil 'noswitch))
-
-(defun py-execute-block-or-clause-python-dedicated ()
- "Send block-or-clause at point to Python unique interpreter. "
- (interactive)
- (py-execute-prepare "block-or-clause" "python" t nil))
-
-(defun py-execute-block-or-clause-python-dedicated-switch ()
- "Send block-or-clause at point to Python unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "block-or-clause" "python" t 'switch))
-
-(defun py-execute-block-or-clause-ipython ()
- "Send block-or-clause at point to IPython interpreter. "
- (interactive)
- (py-execute-prepare "block-or-clause" "ipython" nil nil))
-
-(defun py-execute-block-or-clause-ipython-switch ()
- "Send block-or-clause at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "block-or-clause" "ipython" nil 'switch))
-
-(defun py-execute-block-or-clause-ipython-noswitch ()
- "Send block-or-clause at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "block-or-clause" "ipython" nil 'noswitch))
-
-(defun py-execute-block-or-clause-ipython-dedicated ()
- "Send block-or-clause at point to IPython unique interpreter. "
- (interactive)
- (py-execute-prepare "block-or-clause" "ipython" t nil))
-
-(defun py-execute-block-or-clause-ipython-dedicated-switch ()
- "Send block-or-clause at point to IPython unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "block-or-clause" "ipython" t 'switch))
-
-(defun py-execute-block-or-clause-python3 ()
- "Send block-or-clause at point to Python3 interpreter. "
- (interactive)
- (py-execute-prepare "block-or-clause" "python3" nil nil))
-
-(defun py-execute-block-or-clause-python3-switch ()
- "Send block-or-clause at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "block-or-clause" "python3" nil 'switch))
-
-(defun py-execute-block-or-clause-python3-noswitch ()
- "Send block-or-clause at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "block-or-clause" "python3" nil 'noswitch))
-
-(defun py-execute-block-or-clause-python3-dedicated ()
- "Send block-or-clause at point to Python3 unique interpreter. "
- (interactive)
- (py-execute-prepare "block-or-clause" "python3" t nil))
-
-(defun py-execute-block-or-clause-python3-dedicated-switch ()
- "Send block-or-clause at point to Python3 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "block-or-clause" "python3" t 'switch))
-
-(defun py-execute-block-or-clause-python2 ()
- "Send block-or-clause at point to Python2 interpreter. "
- (interactive)
- (py-execute-prepare "block-or-clause" "python2" nil nil))
-
-(defun py-execute-block-or-clause-python2-switch ()
- "Send block-or-clause at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "block-or-clause" "python2" nil 'switch))
-
-(defun py-execute-block-or-clause-python2-noswitch ()
- "Send block-or-clause at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "block-or-clause" "python2" nil 'noswitch))
-
-(defun py-execute-block-or-clause-python2-dedicated ()
- "Send block-or-clause at point to Python2 unique interpreter. "
- (interactive)
- (py-execute-prepare "block-or-clause" "python2" t nil))
-
-(defun py-execute-block-or-clause-python2-dedicated-switch ()
- "Send block-or-clause at point to Python2 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "block-or-clause" "python2" t 'switch))
-
-(defun py-execute-block-or-clause-python2.7 ()
- "Send block-or-clause at point to Python2.7 interpreter. "
- (interactive)
- (py-execute-prepare "block-or-clause" "python2.7" nil nil))
-
-(defun py-execute-block-or-clause-python2.7-switch ()
- "Send block-or-clause at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "block-or-clause" "python2.7" nil 'switch))
-
-(defun py-execute-block-or-clause-python2.7-noswitch ()
- "Send block-or-clause at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "block-or-clause" "python2.7" nil 'noswitch))
-
-(defun py-execute-block-or-clause-python2.7-dedicated ()
- "Send block-or-clause at point to Python2.7 unique interpreter. "
- (interactive)
- (py-execute-prepare "block-or-clause" "python2.7" t nil))
-
-(defun py-execute-block-or-clause-python2.7-dedicated-switch ()
- "Send block-or-clause at point to Python2.7 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "block-or-clause" "python2.7" t 'switch))
-
-(defun py-execute-block-or-clause-jython ()
- "Send block-or-clause at point to Jython interpreter. "
- (interactive)
- (py-execute-prepare "block-or-clause" "jython" nil nil))
-
-(defun py-execute-block-or-clause-jython-switch ()
- "Send block-or-clause at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "block-or-clause" "jython" nil 'switch))
-
-(defun py-execute-block-or-clause-jython-noswitch ()
- "Send block-or-clause at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "block-or-clause" "jython" nil 'noswitch))
-
-(defun py-execute-block-or-clause-jython-dedicated ()
- "Send block-or-clause at point to Jython unique interpreter. "
- (interactive)
- (py-execute-prepare "block-or-clause" "jython" t nil))
-
-(defun py-execute-block-or-clause-jython-dedicated-switch ()
- "Send block-or-clause at point to Jython unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "block-or-clause" "jython" t 'switch))
-
-(defun py-execute-block-or-clause-python3.2 ()
- "Send block-or-clause at point to Python3.2 interpreter. "
- (interactive)
- (py-execute-prepare "block-or-clause" "python3.2" nil nil))
-
-(defun py-execute-block-or-clause-python3.2-switch ()
- "Send block-or-clause at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "block-or-clause" "python3.2" nil 'switch))
-
-(defun py-execute-block-or-clause-python3.2-noswitch ()
- "Send block-or-clause at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "block-or-clause" "python3.2" nil 'noswitch))
-
-(defun py-execute-block-or-clause-python3.2-dedicated ()
- "Send block-or-clause at point to Python3.2 unique interpreter. "
- (interactive)
- (py-execute-prepare "block-or-clause" "python3.2" t nil))
-
-(defun py-execute-block-or-clause-python3.2-dedicated-switch ()
- "Send block-or-clause at point to Python3.2 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "block-or-clause" "python3.2" t 'switch))
-
-(defun py-execute-def-python ()
- "Send def at point to Python interpreter. "
- (interactive)
- (py-execute-prepare "def" "python" nil nil))
-
-(defun py-execute-def-python-switch ()
- "Send def at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "def" "python" nil 'switch))
-
-(defun py-execute-def-python-noswitch ()
- "Send def at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "def" "python" nil 'noswitch))
-
-(defun py-execute-def-python-dedicated ()
- "Send def at point to Python unique interpreter. "
- (interactive)
- (py-execute-prepare "def" "python" t nil))
-
-(defun py-execute-def-python-dedicated-switch ()
- "Send def at point to Python unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "def" "python" t 'switch))
-
-(defun py-execute-def-ipython ()
- "Send def at point to IPython interpreter. "
- (interactive)
- (py-execute-prepare "def" "ipython" nil nil))
-
-(defun py-execute-def-ipython-switch ()
- "Send def at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "def" "ipython" nil 'switch))
-
-(defun py-execute-def-ipython-noswitch ()
- "Send def at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "def" "ipython" nil 'noswitch))
-
-(defun py-execute-def-ipython-dedicated ()
- "Send def at point to IPython unique interpreter. "
- (interactive)
- (py-execute-prepare "def" "ipython" t nil))
-
-(defun py-execute-def-ipython-dedicated-switch ()
- "Send def at point to IPython unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "def" "ipython" t 'switch))
-
-(defun py-execute-def-python3 ()
- "Send def at point to Python3 interpreter. "
- (interactive)
- (py-execute-prepare "def" "python3" nil nil))
-
-(defun py-execute-def-python3-switch ()
- "Send def at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "def" "python3" nil 'switch))
-
-(defun py-execute-def-python3-noswitch ()
- "Send def at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "def" "python3" nil 'noswitch))
-
-(defun py-execute-def-python3-dedicated ()
- "Send def at point to Python3 unique interpreter. "
- (interactive)
- (py-execute-prepare "def" "python3" t nil))
-
-(defun py-execute-def-python3-dedicated-switch ()
- "Send def at point to Python3 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "def" "python3" t 'switch))
-
-(defun py-execute-def-python2 ()
- "Send def at point to Python2 interpreter. "
- (interactive)
- (py-execute-prepare "def" "python2" nil nil))
-
-(defun py-execute-def-python2-switch ()
- "Send def at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "def" "python2" nil 'switch))
-
-(defun py-execute-def-python2-noswitch ()
- "Send def at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "def" "python2" nil 'noswitch))
-
-(defun py-execute-def-python2-dedicated ()
- "Send def at point to Python2 unique interpreter. "
- (interactive)
- (py-execute-prepare "def" "python2" t nil))
-
-(defun py-execute-def-python2-dedicated-switch ()
- "Send def at point to Python2 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "def" "python2" t 'switch))
-
-(defun py-execute-def-python2.7 ()
- "Send def at point to Python2.7 interpreter. "
- (interactive)
- (py-execute-prepare "def" "python2.7" nil nil))
-
-(defun py-execute-def-python2.7-switch ()
- "Send def at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "def" "python2.7" nil 'switch))
-
-(defun py-execute-def-python2.7-noswitch ()
- "Send def at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "def" "python2.7" nil 'noswitch))
-
-(defun py-execute-def-python2.7-dedicated ()
- "Send def at point to Python2.7 unique interpreter. "
- (interactive)
- (py-execute-prepare "def" "python2.7" t nil))
-
-(defun py-execute-def-python2.7-dedicated-switch ()
- "Send def at point to Python2.7 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "def" "python2.7" t 'switch))
-
-(defun py-execute-def-jython ()
- "Send def at point to Jython interpreter. "
- (interactive)
- (py-execute-prepare "def" "jython" nil nil))
-
-(defun py-execute-def-jython-switch ()
- "Send def at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "def" "jython" nil 'switch))
-
-(defun py-execute-def-jython-noswitch ()
- "Send def at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "def" "jython" nil 'noswitch))
-
-(defun py-execute-def-jython-dedicated ()
- "Send def at point to Jython unique interpreter. "
- (interactive)
- (py-execute-prepare "def" "jython" t nil))
-
-(defun py-execute-def-jython-dedicated-switch ()
- "Send def at point to Jython unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "def" "jython" t 'switch))
-
-(defun py-execute-def-python3.2 ()
- "Send def at point to Python3.2 interpreter. "
- (interactive)
- (py-execute-prepare "def" "python3.2" nil nil))
-
-(defun py-execute-def-python3.2-switch ()
- "Send def at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "def" "python3.2" nil 'switch))
-
-(defun py-execute-def-python3.2-noswitch ()
- "Send def at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "def" "python3.2" nil 'noswitch))
-
-(defun py-execute-def-python3.2-dedicated ()
- "Send def at point to Python3.2 unique interpreter. "
- (interactive)
- (py-execute-prepare "def" "python3.2" t nil))
-
-(defun py-execute-def-python3.2-dedicated-switch ()
- "Send def at point to Python3.2 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "def" "python3.2" t 'switch))
-
-(defun py-execute-class-python ()
- "Send class at point to Python interpreter. "
- (interactive)
- (py-execute-prepare "class" "python" nil nil))
-
-(defun py-execute-class-python-switch ()
- "Send class at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "class" "python" nil 'switch))
-
-(defun py-execute-class-python-noswitch ()
- "Send class at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "class" "python" nil 'noswitch))
-
-(defun py-execute-class-python-dedicated ()
- "Send class at point to Python unique interpreter. "
- (interactive)
- (py-execute-prepare "class" "python" t nil))
-
-(defun py-execute-class-python-dedicated-switch ()
- "Send class at point to Python unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "class" "python" t 'switch))
-
-(defun py-execute-class-ipython ()
- "Send class at point to IPython interpreter. "
- (interactive)
- (py-execute-prepare "class" "ipython" nil nil))
-
-(defun py-execute-class-ipython-switch ()
- "Send class at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "class" "ipython" nil 'switch))
-
-(defun py-execute-class-ipython-noswitch ()
- "Send class at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "class" "ipython" nil 'noswitch))
-
-(defun py-execute-class-ipython-dedicated ()
- "Send class at point to IPython unique interpreter. "
- (interactive)
- (py-execute-prepare "class" "ipython" t nil))
-
-(defun py-execute-class-ipython-dedicated-switch ()
- "Send class at point to IPython unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "class" "ipython" t 'switch))
-
-(defun py-execute-class-python3 ()
- "Send class at point to Python3 interpreter. "
- (interactive)
- (py-execute-prepare "class" "python3" nil nil))
-
-(defun py-execute-class-python3-switch ()
- "Send class at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "class" "python3" nil 'switch))
-
-(defun py-execute-class-python3-noswitch ()
- "Send class at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "class" "python3" nil 'noswitch))
-
-(defun py-execute-class-python3-dedicated ()
- "Send class at point to Python3 unique interpreter. "
- (interactive)
- (py-execute-prepare "class" "python3" t nil))
-
-(defun py-execute-class-python3-dedicated-switch ()
- "Send class at point to Python3 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "class" "python3" t 'switch))
-
-(defun py-execute-class-python2 ()
- "Send class at point to Python2 interpreter. "
- (interactive)
- (py-execute-prepare "class" "python2" nil nil))
-
-(defun py-execute-class-python2-switch ()
- "Send class at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "class" "python2" nil 'switch))
-
-(defun py-execute-class-python2-noswitch ()
- "Send class at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "class" "python2" nil 'noswitch))
-
-(defun py-execute-class-python2-dedicated ()
- "Send class at point to Python2 unique interpreter. "
- (interactive)
- (py-execute-prepare "class" "python2" t nil))
-
-(defun py-execute-class-python2-dedicated-switch ()
- "Send class at point to Python2 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "class" "python2" t 'switch))
-
-(defun py-execute-class-python2.7 ()
- "Send class at point to Python2.7 interpreter. "
- (interactive)
- (py-execute-prepare "class" "python2.7" nil nil))
-
-(defun py-execute-class-python2.7-switch ()
- "Send class at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "class" "python2.7" nil 'switch))
-
-(defun py-execute-class-python2.7-noswitch ()
- "Send class at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "class" "python2.7" nil 'noswitch))
-
-(defun py-execute-class-python2.7-dedicated ()
- "Send class at point to Python2.7 unique interpreter. "
- (interactive)
- (py-execute-prepare "class" "python2.7" t nil))
-
-(defun py-execute-class-python2.7-dedicated-switch ()
- "Send class at point to Python2.7 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "class" "python2.7" t 'switch))
-
-(defun py-execute-class-jython ()
- "Send class at point to Jython interpreter. "
- (interactive)
- (py-execute-prepare "class" "jython" nil nil))
-
-(defun py-execute-class-jython-switch ()
- "Send class at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "class" "jython" nil 'switch))
-
-(defun py-execute-class-jython-noswitch ()
- "Send class at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "class" "jython" nil 'noswitch))
-
-(defun py-execute-class-jython-dedicated ()
- "Send class at point to Jython unique interpreter. "
- (interactive)
- (py-execute-prepare "class" "jython" t nil))
-
-(defun py-execute-class-jython-dedicated-switch ()
- "Send class at point to Jython unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "class" "jython" t 'switch))
-
-(defun py-execute-class-python3.2 ()
- "Send class at point to Python3.2 interpreter. "
- (interactive)
- (py-execute-prepare "class" "python3.2" nil nil))
-
-(defun py-execute-class-python3.2-switch ()
- "Send class at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "class" "python3.2" nil 'switch))
-
-(defun py-execute-class-python3.2-noswitch ()
- "Send class at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "class" "python3.2" nil 'noswitch))
-
-(defun py-execute-class-python3.2-dedicated ()
- "Send class at point to Python3.2 unique interpreter. "
- (interactive)
- (py-execute-prepare "class" "python3.2" t nil))
-
-(defun py-execute-class-python3.2-dedicated-switch ()
- "Send class at point to Python3.2 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "class" "python3.2" t 'switch))
-
-(defun py-execute-region-python (beg end)
- "Send region at point to Python interpreter. "
- (interactive "r")
- (py-execute-base beg end "python" nil nil))
-
-(defun py-execute-region-python-switch (beg end)
- "Send region at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive "r")
- (py-execute-base beg end "python" nil 'switch))
-
-(defun py-execute-region-python-noswitch (beg end)
- "Send region at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive "r")
- (py-execute-base beg end "python" nil 'noswitch))
-
-(defun py-execute-region-python-dedicated (beg end)
- "Send region at point to Python unique interpreter. "
- (interactive "r")
- (py-execute-base beg end "python" t nil))
-
-(defun py-execute-region-python-dedicated-switch (beg end)
- "Send region at point to Python unique interpreter and switch to result. "
- (interactive "r")
- (py-execute-base beg end "python" t 'switch))
-
-(defun py-execute-region-ipython (beg end)
- "Send region at point to IPython interpreter. "
- (interactive "r")
- (py-execute-base beg end "ipython" nil nil))
-
-(defun py-execute-region-ipython-switch (beg end)
- "Send region at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive "r")
- (py-execute-base beg end "ipython" nil 'switch))
-
-(defun py-execute-region-ipython-noswitch (beg end)
- "Send region at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive "r")
- (py-execute-base beg end "ipython" nil 'noswitch))
-
-(defun py-execute-region-ipython-dedicated (beg end)
- "Send region at point to IPython unique interpreter. "
- (interactive "r")
- (py-execute-base beg end "ipython" t nil))
-
-(defun py-execute-region-ipython-dedicated-switch (beg end)
- "Send region at point to IPython unique interpreter and switch to result. "
- (interactive "r")
- (py-execute-base beg end "ipython" t 'switch))
-
-(defun py-execute-region-python3 (beg end)
- "Send region at point to Python3 interpreter. "
- (interactive "r")
- (py-execute-base beg end "python3" nil nil))
-
-(defun py-execute-region-python3-switch (beg end)
- "Send region at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive "r")
- (py-execute-base beg end "python3" nil 'switch))
-
-(defun py-execute-region-python3-noswitch (beg end)
- "Send region at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive "r")
- (py-execute-base beg end "python3" nil 'noswitch))
-
-(defun py-execute-region-python3-dedicated (beg end)
- "Send region at point to Python3 unique interpreter. "
- (interactive "r")
- (py-execute-base beg end "python3" t nil))
-
-(defun py-execute-region-python3-dedicated-switch (beg end)
- "Send region at point to Python3 unique interpreter and switch to result. "
- (interactive "r")
- (py-execute-base beg end "python3" t 'switch))
-
-(defun py-execute-region-python2 (beg end)
- "Send region at point to Python2 interpreter. "
- (interactive "r")
- (py-execute-base beg end "python2" nil nil))
-
-(defun py-execute-region-python2-switch (beg end)
- "Send region at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive "r")
- (py-execute-base beg end "python2" nil 'switch))
-
-(defun py-execute-region-python2-noswitch (beg end)
- "Send region at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive "r")
- (py-execute-base beg end "python2" nil 'noswitch))
-
-(defun py-execute-region-python2-dedicated (beg end)
- "Send region at point to Python2 unique interpreter. "
- (interactive "r")
- (py-execute-base beg end "python2" t nil))
-
-(defun py-execute-region-python2-dedicated-switch (beg end)
- "Send region at point to Python2 unique interpreter and switch to result. "
- (interactive "r")
- (py-execute-base beg end "python2" t 'switch))
-
-(defun py-execute-region-python2.7 (beg end)
- "Send region at point to Python2.7 interpreter. "
- (interactive "r")
- (py-execute-base beg end "python2.7" nil nil))
-
-(defun py-execute-region-python2.7-switch (beg end)
- "Send region at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive "r")
- (py-execute-base beg end "python2.7" nil 'switch))
-
-(defun py-execute-region-python2.7-noswitch (beg end)
- "Send region at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive "r")
- (py-execute-base beg end "python2.7" nil 'noswitch))
-
-(defun py-execute-region-python2.7-dedicated (beg end)
- "Send region at point to Python2.7 unique interpreter. "
- (interactive "r")
- (py-execute-base beg end "python2.7" t nil))
-
-(defun py-execute-region-python2.7-dedicated-switch (beg end)
- "Send region at point to Python2.7 unique interpreter and switch to result. "
- (interactive "r")
- (py-execute-base beg end "python2.7" t 'switch))
-
-(defun py-execute-region-jython (beg end)
- "Send region at point to Jython interpreter. "
- (interactive "r")
- (py-execute-base beg end "jython" nil nil))
-
-(defun py-execute-region-jython-switch (beg end)
- "Send region at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive "r")
- (py-execute-base beg end "jython" nil 'switch))
-
-(defun py-execute-region-jython-noswitch (beg end)
- "Send region at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive "r")
- (py-execute-base beg end "jython" nil 'noswitch))
-
-(defun py-execute-region-jython-dedicated (beg end)
- "Send region at point to Jython unique interpreter. "
- (interactive "r")
- (py-execute-base beg end "jython" t nil))
-
-(defun py-execute-region-jython-dedicated-switch (beg end)
- "Send region at point to Jython unique interpreter and switch to result. "
- (interactive "r")
- (py-execute-base beg end "jython" t 'switch))
-
-(defun py-execute-region-python3.2 (beg end)
- "Send region at point to Python3.2 interpreter. "
- (interactive "r")
- (py-execute-base beg end "python3.2" nil nil))
-
-(defun py-execute-region-python3.2-switch (beg end)
- "Send region at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive "r")
- (py-execute-base beg end "python3.2" nil 'switch))
-
-(defun py-execute-region-python3.2-noswitch (beg end)
- "Send region at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive "r")
- (py-execute-base beg end "python3.2" nil 'noswitch))
-
-(defun py-execute-region-python3.2-dedicated (beg end)
- "Send region at point to Python3.2 unique interpreter. "
- (interactive "r")
- (py-execute-base beg end "python3.2" t nil))
-
-(defun py-execute-region-python3.2-dedicated-switch (beg end)
- "Send region at point to Python3.2 unique interpreter and switch to result. "
- (interactive "r")
- (py-execute-base beg end "python3.2" t 'switch))
-
-(defun py-execute-buffer-python ()
- "Send buffer at point to Python interpreter. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python" nil nil))))
-
-(defun py-execute-buffer-python-switch ()
- "Send buffer at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python" nil 'switch))))
-
-(defun py-execute-buffer-python-noswitch ()
- "Send buffer at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python" nil 'noswitch))))
-
-(defun py-execute-buffer-python-dedicated ()
- "Send buffer at point to Python unique interpreter. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python" t nil))))
-
-(defun py-execute-buffer-python-dedicated-switch ()
- "Send buffer at point to Python unique interpreter and switch to result. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python" t 'switch))))
-
-(defun py-execute-buffer-ipython ()
- "Send buffer at point to IPython interpreter. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "ipython" nil nil))))
-
-(defun py-execute-buffer-ipython-switch ()
- "Send buffer at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "ipython" nil 'switch))))
-
-(defun py-execute-buffer-ipython-noswitch ()
- "Send buffer at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "ipython" nil 'noswitch))))
-
-(defun py-execute-buffer-ipython-dedicated ()
- "Send buffer at point to IPython unique interpreter. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "ipython" t nil))))
-
-(defun py-execute-buffer-ipython-dedicated-switch ()
- "Send buffer at point to IPython unique interpreter and switch to result. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "ipython" t 'switch))))
-
-(defun py-execute-buffer-python3 ()
- "Send buffer at point to Python3 interpreter. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python3" nil nil))))
-
-(defun py-execute-buffer-python3-switch ()
- "Send buffer at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python3" nil 'switch))))
-
-(defun py-execute-buffer-python3-noswitch ()
- "Send buffer at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python3" nil 'noswitch))))
-
-(defun py-execute-buffer-python3-dedicated ()
- "Send buffer at point to Python3 unique interpreter. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python3" t nil))))
-
-(defun py-execute-buffer-python3-dedicated-switch ()
- "Send buffer at point to Python3 unique interpreter and switch to result. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python3" t 'switch))))
-
-(defun py-execute-buffer-python2 ()
- "Send buffer at point to Python2 interpreter. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python2" nil nil))))
-
-(defun py-execute-buffer-python2-switch ()
- "Send buffer at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python2" nil 'switch))))
-
-(defun py-execute-buffer-python2-noswitch ()
- "Send buffer at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python2" nil 'noswitch))))
-
-(defun py-execute-buffer-python2-dedicated ()
- "Send buffer at point to Python2 unique interpreter. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python2" t nil))))
-
-(defun py-execute-buffer-python2-dedicated-switch ()
- "Send buffer at point to Python2 unique interpreter and switch to result. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python2" t 'switch))))
-
-(defun py-execute-buffer-python2.7 ()
- "Send buffer at point to Python2.7 interpreter. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python2.7" nil nil))))
-
-(defun py-execute-buffer-python2.7-switch ()
- "Send buffer at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python2.7" nil 'switch))))
-
-(defun py-execute-buffer-python2.7-noswitch ()
- "Send buffer at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python2.7" nil 'noswitch))))
-
-(defun py-execute-buffer-python2.7-dedicated ()
- "Send buffer at point to Python2.7 unique interpreter. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python2.7" t nil))))
-
-(defun py-execute-buffer-python2.7-dedicated-switch ()
- "Send buffer at point to Python2.7 unique interpreter and switch to result. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python2.7" t 'switch))))
-
-(defun py-execute-buffer-jython ()
- "Send buffer at point to Jython interpreter. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "jython" nil nil))))
-
-(defun py-execute-buffer-jython-switch ()
- "Send buffer at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "jython" nil 'switch))))
-
-(defun py-execute-buffer-jython-noswitch ()
- "Send buffer at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "jython" nil 'noswitch))))
-
-(defun py-execute-buffer-jython-dedicated ()
- "Send buffer at point to Jython unique interpreter. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "jython" t nil))))
-
-(defun py-execute-buffer-jython-dedicated-switch ()
- "Send buffer at point to Jython unique interpreter and switch to result. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "jython" t 'switch))))
-
-(defun py-execute-buffer-python3.2 ()
- "Send buffer at point to Python3.2 interpreter. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python3.2" nil nil))))
-
-(defun py-execute-buffer-python3.2-switch ()
- "Send buffer at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python3.2" nil 'switch))))
-
-(defun py-execute-buffer-python3.2-noswitch ()
- "Send buffer at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python3.2" nil 'noswitch))))
-
-(defun py-execute-buffer-python3.2-dedicated ()
- "Send buffer at point to Python3.2 unique interpreter. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python3.2" t nil))))
-
-(defun py-execute-buffer-python3.2-dedicated-switch ()
- "Send buffer at point to Python3.2 unique interpreter and switch to result. "
- (interactive)
- (save-excursion
- (let ((wholebuf t)
- (py-master-file (or py-master-file (py-fetch-py-master-file)))
- beg end)
- (when py-master-file
- (let* ((filename (expand-file-name py-master-file))
- (buffer (or (get-file-buffer filename)
- (find-file-noselect filename))))
- (set-buffer buffer)))
- (setq beg (point-min))
- (setq end (point-max))
- (py-execute-region beg end "python3.2" t 'switch))))
-
-(defun py-execute-expression-python ()
- "Send expression at point to Python interpreter. "
- (interactive)
- (py-execute-prepare "expression" "python" nil nil))
-
-(defun py-execute-expression-python-switch ()
- "Send expression at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "expression" "python" nil 'switch))
-
-(defun py-execute-expression-python-noswitch ()
- "Send expression at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "expression" "python" nil 'noswitch))
-
-(defun py-execute-expression-python-dedicated ()
- "Send expression at point to Python unique interpreter. "
- (interactive)
- (py-execute-prepare "expression" "python" t nil))
-
-(defun py-execute-expression-python-dedicated-switch ()
- "Send expression at point to Python unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "expression" "python" t 'switch))
-
-(defun py-execute-expression-ipython ()
- "Send expression at point to IPython interpreter. "
- (interactive)
- (py-execute-prepare "expression" "ipython" nil nil))
-
-(defun py-execute-expression-ipython-switch ()
- "Send expression at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "expression" "ipython" nil 'switch))
-
-(defun py-execute-expression-ipython-noswitch ()
- "Send expression at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "expression" "ipython" nil 'noswitch))
-
-(defun py-execute-expression-ipython-dedicated ()
- "Send expression at point to IPython unique interpreter. "
- (interactive)
- (py-execute-prepare "expression" "ipython" t nil))
-
-(defun py-execute-expression-ipython-dedicated-switch ()
- "Send expression at point to IPython unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "expression" "ipython" t 'switch))
-
-(defun py-execute-expression-python3 ()
- "Send expression at point to Python3 interpreter. "
- (interactive)
- (py-execute-prepare "expression" "python3" nil nil))
-
-(defun py-execute-expression-python3-switch ()
- "Send expression at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "expression" "python3" nil 'switch))
-
-(defun py-execute-expression-python3-noswitch ()
- "Send expression at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "expression" "python3" nil 'noswitch))
-
-(defun py-execute-expression-python3-dedicated ()
- "Send expression at point to Python3 unique interpreter. "
- (interactive)
- (py-execute-prepare "expression" "python3" t nil))
-
-(defun py-execute-expression-python3-dedicated-switch ()
- "Send expression at point to Python3 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "expression" "python3" t 'switch))
-
-(defun py-execute-expression-python2 ()
- "Send expression at point to Python2 interpreter. "
- (interactive)
- (py-execute-prepare "expression" "python2" nil nil))
-
-(defun py-execute-expression-python2-switch ()
- "Send expression at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "expression" "python2" nil 'switch))
-
-(defun py-execute-expression-python2-noswitch ()
- "Send expression at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "expression" "python2" nil 'noswitch))
-
-(defun py-execute-expression-python2-dedicated ()
- "Send expression at point to Python2 unique interpreter. "
- (interactive)
- (py-execute-prepare "expression" "python2" t nil))
-
-(defun py-execute-expression-python2-dedicated-switch ()
- "Send expression at point to Python2 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "expression" "python2" t 'switch))
-
-(defun py-execute-expression-python2.7 ()
- "Send expression at point to Python2.7 interpreter. "
- (interactive)
- (py-execute-prepare "expression" "python2.7" nil nil))
-
-(defun py-execute-expression-python2.7-switch ()
- "Send expression at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "expression" "python2.7" nil 'switch))
-
-(defun py-execute-expression-python2.7-noswitch ()
- "Send expression at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "expression" "python2.7" nil 'noswitch))
-
-(defun py-execute-expression-python2.7-dedicated ()
- "Send expression at point to Python2.7 unique interpreter. "
- (interactive)
- (py-execute-prepare "expression" "python2.7" t nil))
-
-(defun py-execute-expression-python2.7-dedicated-switch ()
- "Send expression at point to Python2.7 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "expression" "python2.7" t 'switch))
-
-(defun py-execute-expression-jython ()
- "Send expression at point to Jython interpreter. "
- (interactive)
- (py-execute-prepare "expression" "jython" nil nil))
-
-(defun py-execute-expression-jython-switch ()
- "Send expression at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "expression" "jython" nil 'switch))
-
-(defun py-execute-expression-jython-noswitch ()
- "Send expression at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "expression" "jython" nil 'noswitch))
-
-(defun py-execute-expression-jython-dedicated ()
- "Send expression at point to Jython unique interpreter. "
- (interactive)
- (py-execute-prepare "expression" "jython" t nil))
-
-(defun py-execute-expression-jython-dedicated-switch ()
- "Send expression at point to Jython unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "expression" "jython" t 'switch))
-
-(defun py-execute-expression-python3.2 ()
- "Send expression at point to Python3.2 interpreter. "
- (interactive)
- (py-execute-prepare "expression" "python3.2" nil nil))
-
-(defun py-execute-expression-python3.2-switch ()
- "Send expression at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "expression" "python3.2" nil 'switch))
-
-(defun py-execute-expression-python3.2-noswitch ()
- "Send expression at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "expression" "python3.2" nil 'noswitch))
-
-(defun py-execute-expression-python3.2-dedicated ()
- "Send expression at point to Python3.2 unique interpreter. "
- (interactive)
- (py-execute-prepare "expression" "python3.2" t nil))
-
-(defun py-execute-expression-python3.2-dedicated-switch ()
- "Send expression at point to Python3.2 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "expression" "python3.2" t 'switch))
-
-(defun py-execute-partial-expression-python ()
- "Send partial-expression at point to Python interpreter. "
- (interactive)
- (py-execute-prepare "partial-expression" "python" nil nil))
-
-(defun py-execute-partial-expression-python-switch ()
- "Send partial-expression at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "partial-expression" "python" nil 'switch))
-
-(defun py-execute-partial-expression-python-noswitch ()
- "Send partial-expression at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "partial-expression" "python" nil 'noswitch))
-
-(defun py-execute-partial-expression-python-dedicated ()
- "Send partial-expression at point to Python unique interpreter. "
- (interactive)
- (py-execute-prepare "partial-expression" "python" t nil))
-
-(defun py-execute-partial-expression-python-dedicated-switch ()
- "Send partial-expression at point to Python unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "partial-expression" "python" t 'switch))
-
-(defun py-execute-partial-expression-ipython ()
- "Send partial-expression at point to IPython interpreter. "
- (interactive)
- (py-execute-prepare "partial-expression" "ipython" nil nil))
-
-(defun py-execute-partial-expression-ipython-switch ()
- "Send partial-expression at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "partial-expression" "ipython" nil 'switch))
-
-(defun py-execute-partial-expression-ipython-noswitch ()
- "Send partial-expression at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "partial-expression" "ipython" nil 'noswitch))
-
-(defun py-execute-partial-expression-ipython-dedicated ()
- "Send partial-expression at point to IPython unique interpreter. "
- (interactive)
- (py-execute-prepare "partial-expression" "ipython" t nil))
-
-(defun py-execute-partial-expression-ipython-dedicated-switch ()
- "Send partial-expression at point to IPython unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "partial-expression" "ipython" t 'switch))
-
-(defun py-execute-partial-expression-python3 ()
- "Send partial-expression at point to Python3 interpreter. "
- (interactive)
- (py-execute-prepare "partial-expression" "python3" nil nil))
-
-(defun py-execute-partial-expression-python3-switch ()
- "Send partial-expression at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "partial-expression" "python3" nil 'switch))
-
-(defun py-execute-partial-expression-python3-noswitch ()
- "Send partial-expression at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "partial-expression" "python3" nil 'noswitch))
-
-(defun py-execute-partial-expression-python3-dedicated ()
- "Send partial-expression at point to Python3 unique interpreter. "
- (interactive)
- (py-execute-prepare "partial-expression" "python3" t nil))
-
-(defun py-execute-partial-expression-python3-dedicated-switch ()
- "Send partial-expression at point to Python3 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "partial-expression" "python3" t 'switch))
-
-(defun py-execute-partial-expression-python2 ()
- "Send partial-expression at point to Python2 interpreter. "
- (interactive)
- (py-execute-prepare "partial-expression" "python2" nil nil))
-
-(defun py-execute-partial-expression-python2-switch ()
- "Send partial-expression at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "partial-expression" "python2" nil 'switch))
-
-(defun py-execute-partial-expression-python2-noswitch ()
- "Send partial-expression at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "partial-expression" "python2" nil 'noswitch))
-
-(defun py-execute-partial-expression-python2-dedicated ()
- "Send partial-expression at point to Python2 unique interpreter. "
- (interactive)
- (py-execute-prepare "partial-expression" "python2" t nil))
-
-(defun py-execute-partial-expression-python2-dedicated-switch ()
- "Send partial-expression at point to Python2 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "partial-expression" "python2" t 'switch))
-
-(defun py-execute-partial-expression-python2.7 ()
- "Send partial-expression at point to Python2.7 interpreter. "
- (interactive)
- (py-execute-prepare "partial-expression" "python2.7" nil nil))
-
-(defun py-execute-partial-expression-python2.7-switch ()
- "Send partial-expression at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "partial-expression" "python2.7" nil 'switch))
-
-(defun py-execute-partial-expression-python2.7-noswitch ()
- "Send partial-expression at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "partial-expression" "python2.7" nil 'noswitch))
-
-(defun py-execute-partial-expression-python2.7-dedicated ()
- "Send partial-expression at point to Python2.7 unique interpreter. "
- (interactive)
- (py-execute-prepare "partial-expression" "python2.7" t nil))
-
-(defun py-execute-partial-expression-python2.7-dedicated-switch ()
- "Send partial-expression at point to Python2.7 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "partial-expression" "python2.7" t 'switch))
-
-(defun py-execute-partial-expression-jython ()
- "Send partial-expression at point to Jython interpreter. "
- (interactive)
- (py-execute-prepare "partial-expression" "jython" nil nil))
-
-(defun py-execute-partial-expression-jython-switch ()
- "Send partial-expression at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "partial-expression" "jython" nil 'switch))
-
-(defun py-execute-partial-expression-jython-noswitch ()
- "Send partial-expression at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "partial-expression" "jython" nil 'noswitch))
-
-(defun py-execute-partial-expression-jython-dedicated ()
- "Send partial-expression at point to Jython unique interpreter. "
- (interactive)
- (py-execute-prepare "partial-expression" "jython" t nil))
-
-(defun py-execute-partial-expression-jython-dedicated-switch ()
- "Send partial-expression at point to Jython unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "partial-expression" "jython" t 'switch))
-
-(defun py-execute-partial-expression-python3.2 ()
- "Send partial-expression at point to Python3.2 interpreter. "
- (interactive)
- (py-execute-prepare "partial-expression" "python3.2" nil nil))
-
-(defun py-execute-partial-expression-python3.2-switch ()
- "Send partial-expression at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "partial-expression" "python3.2" nil 'switch))
-
-(defun py-execute-partial-expression-python3.2-noswitch ()
- "Send partial-expression at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "partial-expression" "python3.2" nil 'noswitch))
-
-(defun py-execute-partial-expression-python3.2-dedicated ()
- "Send partial-expression at point to Python3.2 unique interpreter. "
- (interactive)
- (py-execute-prepare "partial-expression" "python3.2" t nil))
-
-(defun py-execute-partial-expression-python3.2-dedicated-switch ()
- "Send partial-expression at point to Python3.2 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "partial-expression" "python3.2" t 'switch))
-
-(defun py-execute-line-python ()
- "Send line at point to Python interpreter. "
- (interactive)
- (py-execute-prepare "line" "python" nil nil))
-
-(defun py-execute-line-python-switch ()
- "Send line at point to Python interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "line" "python" nil 'switch))
-
-(defun py-execute-line-python-noswitch ()
- "Send line at point to Python interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "line" "python" nil 'noswitch))
-
-(defun py-execute-line-python-dedicated ()
- "Send line at point to Python unique interpreter. "
- (interactive)
- (py-execute-prepare "line" "python" t nil))
-
-(defun py-execute-line-python-dedicated-switch ()
- "Send line at point to Python unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "line" "python" t 'switch))
-
-(defun py-execute-line-ipython ()
- "Send line at point to IPython interpreter. "
- (interactive)
- (py-execute-prepare "line" "ipython" nil nil))
-
-(defun py-execute-line-ipython-switch ()
- "Send line at point to IPython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "line" "ipython" nil 'switch))
-
-(defun py-execute-line-ipython-noswitch ()
- "Send line at point to IPython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "line" "ipython" nil 'noswitch))
-
-(defun py-execute-line-ipython-dedicated ()
- "Send line at point to IPython unique interpreter. "
- (interactive)
- (py-execute-prepare "line" "ipython" t nil))
-
-(defun py-execute-line-ipython-dedicated-switch ()
- "Send line at point to IPython unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "line" "ipython" t 'switch))
-
-(defun py-execute-line-python3 ()
- "Send line at point to Python3 interpreter. "
- (interactive)
- (py-execute-prepare "line" "python3" nil nil))
-
-(defun py-execute-line-python3-switch ()
- "Send line at point to Python3 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "line" "python3" nil 'switch))
-
-(defun py-execute-line-python3-noswitch ()
- "Send line at point to Python3 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "line" "python3" nil 'noswitch))
-
-(defun py-execute-line-python3-dedicated ()
- "Send line at point to Python3 unique interpreter. "
- (interactive)
- (py-execute-prepare "line" "python3" t nil))
-
-(defun py-execute-line-python3-dedicated-switch ()
- "Send line at point to Python3 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "line" "python3" t 'switch))
-
-(defun py-execute-line-python2 ()
- "Send line at point to Python2 interpreter. "
- (interactive)
- (py-execute-prepare "line" "python2" nil nil))
-
-(defun py-execute-line-python2-switch ()
- "Send line at point to Python2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "line" "python2" nil 'switch))
-
-(defun py-execute-line-python2-noswitch ()
- "Send line at point to Python2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "line" "python2" nil 'noswitch))
-
-(defun py-execute-line-python2-dedicated ()
- "Send line at point to Python2 unique interpreter. "
- (interactive)
- (py-execute-prepare "line" "python2" t nil))
-
-(defun py-execute-line-python2-dedicated-switch ()
- "Send line at point to Python2 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "line" "python2" t 'switch))
-
-(defun py-execute-line-python2.7 ()
- "Send line at point to Python2.7 interpreter. "
- (interactive)
- (py-execute-prepare "line" "python2.7" nil nil))
-
-(defun py-execute-line-python2.7-switch ()
- "Send line at point to Python2.7 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "line" "python2.7" nil 'switch))
-
-(defun py-execute-line-python2.7-noswitch ()
- "Send line at point to Python2.7 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "line" "python2.7" nil 'noswitch))
-
-(defun py-execute-line-python2.7-dedicated ()
- "Send line at point to Python2.7 unique interpreter. "
- (interactive)
- (py-execute-prepare "line" "python2.7" t nil))
-
-(defun py-execute-line-python2.7-dedicated-switch ()
- "Send line at point to Python2.7 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "line" "python2.7" t 'switch))
-
-(defun py-execute-line-jython ()
- "Send line at point to Jython interpreter. "
- (interactive)
- (py-execute-prepare "line" "jython" nil nil))
-
-(defun py-execute-line-jython-switch ()
- "Send line at point to Jython interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "line" "jython" nil 'switch))
-
-(defun py-execute-line-jython-noswitch ()
- "Send line at point to Jython interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "line" "jython" nil 'noswitch))
-
-(defun py-execute-line-jython-dedicated ()
- "Send line at point to Jython unique interpreter. "
- (interactive)
- (py-execute-prepare "line" "jython" t nil))
-
-(defun py-execute-line-jython-dedicated-switch ()
- "Send line at point to Jython unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "line" "jython" t 'switch))
-
-(defun py-execute-line-python3.2 ()
- "Send line at point to Python3.2 interpreter. "
- (interactive)
- (py-execute-prepare "line" "python3.2" nil nil))
-
-(defun py-execute-line-python3.2-switch ()
- "Send line at point to Python3.2 interpreter.
-
-Switch to output buffer. Ignores `py-shell-switch-buffers-on-execute-p'. "
- (interactive)
- (py-execute-prepare "line" "python3.2" nil 'switch))
-
-(defun py-execute-line-python3.2-noswitch ()
- "Send line at point to Python3.2 interpreter.
-
-Keep current buffer. Ignores `py-shell-switch-buffers-on-execute-p' "
- (interactive)
- (py-execute-prepare "line" "python3.2" nil 'noswitch))
-
-(defun py-execute-line-python3.2-dedicated ()
- "Send line at point to Python3.2 unique interpreter. "
- (interactive)
- (py-execute-prepare "line" "python3.2" t nil))
-
-(defun py-execute-line-python3.2-dedicated-switch ()
- "Send line at point to Python3.2 unique interpreter and switch to result. "
- (interactive)
- (py-execute-prepare "line" "python3.2" t 'switch))
-
-;;; Column-marker - highlight columns
-;; merged from column-marker.el,
-;; Created: Tue Nov 22 10:26:03 2005
-;; Last-Updated: Fri Jan 22 11:28:48 2010 (-0800) By: dradams
-;; original Author: Rick Bielawski
-
-(defface column-marker-1 '((t (:background "gray")))
- "Face used for a column marker. Usually a background color."
- :group 'faces)
-
-(defvar column-marker-1-face 'column-marker-1
- "Face used for a column marker. Usually a background color.
-Changing this directly affects only new markers.")
-
-(defface column-marker-2 '((t (:background "cyan3")))
- "Face used for a column marker. Usually a background color."
- :group 'faces)
-
-(defvar column-marker-2-face 'column-marker-2
- "Face used for a column marker. Usually a background color.
-Changing this directly affects only new markers." )
-
-(defface column-marker-3 '((t (:background "orchid3")))
- "Face used for a column marker. Usually a background color."
- :group 'faces)
-
-(defvar column-marker-3-face 'column-marker-3
- "Face used for a column marker. Usually a background color.
-Changing this directly affects only new markers." )
-
-(defvar column-marker-vars ()
- "List of all internal column-marker variables")
-(make-variable-buffer-local 'column-marker-vars) ; Buffer local in all buffers.
-
-(defmacro column-marker-create (var &optional face)
- "Define a column marker named VAR.
-FACE is the face to use. If nil, then face `column-marker-1' is used."
- (setq face (or face 'column-marker-1))
- `(progn
- ;; define context variable ,VAR so marker can be removed if desired
- (defvar ,var ()
- "Buffer local. Used internally to store column marker spec.")
- ;; context must be buffer local since font-lock is
- (make-variable-buffer-local ',var)
- ;; Define wrapper function named ,VAR to call `column-marker-internal'
- (defun ,var (arg)
- ,(concat "Highlight column with face `" (symbol-name face)
- "'.\nWith no prefix argument, highlight current column.\n"
- "With non-negative numeric prefix arg, highlight that column number.\n"
- "With plain `C-u' (no number), turn off this column marker.\n"
- "With `C-u C-u' or negative prefix arg, turn off all column-marker highlighting.")
- (interactive "P")
- (unless (memq ',var column-marker-vars) (push ',var column-marker-vars))
- (cond ((null arg) ; Default: highlight current column.
- (column-marker-internal ',var (1+ (current-column)) ,face))
- ((consp arg)
- (if (= 4 (car arg))
- (column-marker-internal ',var nil) ; `C-u': Remove this column highlighting.
- (dolist (var column-marker-vars)
- (column-marker-internal var nil)))) ; `C-u C-u': Remove all column highlighting.
- ((and (integerp arg) (>= arg 0)) ; `C-u 70': Highlight that column.
- (column-marker-internal ',var (1+ (prefix-numeric-value arg)) ,face))
- (t ; `C-u -40': Remove all column highlighting.
- (dolist (var column-marker-vars)
- (column-marker-internal var nil)))))))
-
-(defun column-marker-find (col)
- "Defines a function to locate a character in column COL.
-Returns the function symbol, named `column-marker-move-to-COL'."
- (let ((fn-symb (intern (format "column-marker-move-to-%d" col))))
- (fset `,fn-symb
- `(lambda (end)
- (let ((start (point)))
- (when (> end (point-max)) (setq end (point-max)))
-
- ;; Try to keep `move-to-column' from going backward, though it still can.
- (unless (< (current-column) ,col) (forward-line 1))
-
- ;; Again, don't go backward. Try to move to correct column.
- (when (< (current-column) ,col) (move-to-column ,col))
-
- ;; If not at target column, try to move to it.
- (while (and (< (current-column) ,col) (< (point) end)
- (= 0 (+ (forward-line 1) (current-column)))) ; Should be bol.
- (move-to-column ,col))
-
- ;; If at target column, not past end, and not prior to start,
- ;; then set match data and return t. Otherwise go to start
- ;; and return nil.
- (if (and (= ,col (current-column)) (<= (point) end) (> (point) start))
- (progn (set-match-data (list (1- (point)) (point)))
- t) ; Return t.
- (goto-char start)
- nil)))) ; Return nil.
- fn-symb))
-
-(defun column-marker-internal (sym col &optional face)
- "SYM is the symbol for holding the column marker context.
-COL is the column in which a marker should be set.
-Supplying nil or 0 for COL turns off the marker.
-FACE is the face to use. If nil, then face `column-marker-1' is used."
- (setq face (or face 'column-marker-1))
- (when (symbol-value sym) ; Remove any previously set column marker
- (font-lock-remove-keywords nil (symbol-value sym))
- (set sym nil))
- (when (or (listp col) (< col 0)) (setq col nil)) ; Allow nonsense stuff to turn off the marker
- (when col ; Generate a new column marker
- (set sym `((,(column-marker-find col) (0 ',face prepend t))))
- (font-lock-add-keywords nil (symbol-value sym) t))
- (font-lock-fontify-buffer))
-
-;; If you need more markers you can create your own similarly.
-;; All markers can be in use at once, and each is buffer-local,
-;; so there is no good reason to define more unless you need more
-;; markers in a single buffer.
-(column-marker-create column-marker-1 column-marker-1-face)
-(column-marker-create column-marker-2 column-marker-2-face)
-(column-marker-create column-marker-3 column-marker-3-face)
-
-;; (autoload 'column-marker-1 "column-marker" "Highlight a column." t)
-
-(defalias 'ipython-send-and-indent 'py-execute-line-ipython)
-(defalias 'py-execute-region-in-shell 'py-execute-region)
-(defalias 'py-shell-command-on-region 'py-execute-region-region)
-(defalias 'py-send-region-ipython 'py-execute-region-ipython)
-(defalias 'py-ipython-shell-command-on-region 'py-execute-region-ipython)
-(provide 'python-mode)
-;;; python-mode.el ends here
diff --git a/elpa/python-mode-6.0.10/setup.py b/elpa/python-mode-6.0.10/setup.py
deleted file mode 100644
index 4382b297..00000000
--- a/elpa/python-mode-6.0.10/setup.py
+++ /dev/null
@@ -1,14 +0,0 @@
-#! /usr/bin/env python
-# -*- coding: utf-8 -*-
-
-from distutils.core import setup
-
-setup(name='python-mode.el',
- version='6.0.10',
- url='http://launchpad.net/python-mode',
- maintainer_email='andreas.roehler@online.de',
- maintainer='Andreas Roehler',
- description='Major mode for editing Python programs',
- download_url='http://launchpad.net/python-mode/trunk/6.0.10/+download/python-mode.el-6.0.10.tar.gz',
- license='GNU GPLv3, Python License',
- )
diff --git a/elpa/python-mode-6.0.10/test/doctest-mode.el b/elpa/python-mode-6.0.10/test/doctest-mode.el
deleted file mode 100644
index 75bd9cd6..00000000
--- a/elpa/python-mode-6.0.10/test/doctest-mode.el
+++ /dev/null
@@ -1,2061 +0,0 @@
-;;; doctest-mode.el --- Major mode for editing Python doctest files
-
-;; Copyright (C) 2004-2007 Edward Loper
-
-;; Author: Edward Loper
-;; Maintainer: edloper@alum.mit.edu
-;; Created: Aug 2004
-;; Keywords: python doctest unittest test docstring
-
-(defconst doctest-version "0.5 alpha"
- "`doctest-mode' version number.")
-
-;; This software is provided as-is, without express or implied
-;; warranty. Permission to use, copy, modify, distribute or sell this
-;; software, without fee, for any purpose and by any individual or
-;; organization, is hereby granted, provided that the above copyright
-;; notice and this paragraph appear in all copies.
-
-;; This is a major mode for editing text files that contain Python
-;; doctest examples. Doctest is a testing framework for Python that
-;; emulates an interactive session, and checks the result of each
-;; command. For more information, see the Python library reference:
-;;
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Table of Contents
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; 1. Customization: use-editable variables to customize
-;; doctest-mode.
-;;
-;; 2. Fonts: defines new font-lock faces.
-;;
-;; 3. Constants: various consts (mainly regexps) used by the rest
-;; of the code.
-;;
-;; 4. Syntax Highlighting: defines variables and functions used by
-;; font-lock-mode to perform syntax highlighting.
-;;
-;; 5. Source code editing & indentation: commands used to
-;; automatically indent, dedent, & handle prompts.
-;;
-;; 6. Code Execution: commands used to start doctest processes,
-;; and handle their output.
-;;
-;; 7. Markers: functions used to insert markers at the start of
-;; doctest examples. These are used to keep track of the
-;; correspondence between examples in the source buffer and
-;; results in the output buffer.
-;;
-;; 8. Navigation: commands used to navigate between failed examples.
-;;
-;; 9. Replace Output: command used to replace a doctest example's
-;; expected output with its actual output.
-;;
-;; 10. Helper functions: various helper functions used by the rest
-;; of the code.
-;;
-;; 11. Emacs compatibility functions: defines compatible versions of
-;; functions that are defined for some versions of emacs but not
-;; others.
-;;
-;; 12. Doctest Results Mode: defines doctest-results-mode, which is
-;; used for the output generated by doctest.
-;;
-;; 13. Doctest Mode: defines doctest-mode itself.
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Customizable Constants
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defgroup doctest nil
- "Support for the Python doctest framework"
- :group 'languages
- :prefix "doctest-")
-
-(defcustom doctest-default-margin 4
- "The default pre-prompt margin for doctest examples."
- :type 'integer
- :group 'doctest)
-
-(defcustom doctest-avoid-trailing-whitespace t
- "If true, then delete trailing whitespace when inserting a newline."
- :type 'boolean
- :group 'doctest)
-
-(defcustom doctest-temp-directory
- (let ((ok '(lambda (x)
- (and x
- (setq x (expand-file-name x)) ; always true
- (file-directory-p x)
- (file-writable-p x)
- x))))
- (or (funcall ok (getenv "TMPDIR"))
- (funcall ok "/usr/tmp")
- (funcall ok "/tmp")
- (funcall ok "/var/tmp")
- (funcall ok ".")
- (error (concat "Couldn't find a usable temp directory -- "
- "set `doctest-temp-directory'"))))
- "Directory used for temporary files created when running doctest.
-By default, the first directory from this list that exists and that you
-can write into: the value (if any) of the environment variable TMPDIR,
-/usr/tmp, /tmp, /var/tmp, or the current directory."
- :type 'string
- :group 'doctest)
-
-(defcustom doctest-hide-example-source nil
- "If true, then don't display the example source code for each
-failure in the results buffer."
- :type 'boolean
- :group 'doctest)
-
-(defcustom doctest-python-command "python"
- "Shell command used to start the python interpreter"
- :type 'string
- :group 'doctest)
-
-(defcustom doctest-results-buffer-name "*doctest-output (%N)*"
- "The name of the buffer used to store the output of the doctest
-command. This name can contain the following special sequences:
- %n -- replaced by the doctest buffer's name.
- %N -- replaced by the doctest buffer's name, with '.doctest'
- stripped off.
- %f -- replaced by the doctest buffer's filename."
- :type 'string
- :group 'doctest)
-
-(defcustom doctest-optionflags '()
- "Option flags for doctest"
- :group 'doctest
- :type '(repeat (choice (const :tag "Select an option..." "")
- (const :tag "Normalize whitespace"
- "NORMALIZE_WHITESPACE")
- (const :tag "Ellipsis"
- "ELLIPSIS")
- (const :tag "Don't accept True for 1"
- "DONT_ACCEPT_TRUE_FOR_1")
- (const :tag "Don't accept "
- "DONT_ACCEPT_BLANKLINE")
- (const :tag "Ignore Exception detail"
- "IGNORE_EXCEPTION_DETAIL")
- (const :tag "Report only first failure"
- "REPORT_ONLY_FIRST_FAILURE")
- )))
-
-(defcustom doctest-async t
- "If true, then doctest will be run asynchronously."
- :type 'boolean
- :group 'doctest)
-
-(defcustom doctest-trim-exceptions t
- "If true, then any exceptions inserted by doctest-replace-output
-will have the stack trace lines trimmed."
- :type 'boolean
- :group 'doctest)
-
-(defcustom doctest-highlight-strings t
- "If true, then highlight strings. If you find that doctest-mode
-is responding slowly when you type, turning this off might help."
- :type 'boolean
- :group 'doctest)
-
-(defcustom doctest-follow-output t
- "If true, then when doctest is run asynchronously, the output buffer
-will scroll to display its output as it is generated. If false, then
-the output buffer not scroll."
- :type 'boolean
- :group 'doctest)
-
-(defvar doctest-mode-hook nil
- "Hook called by `doctest-mode'.")
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Fonts
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defface doctest-prompt-face
- '((((class color) (background dark))
- (:foreground "#68f"))
- (t (:foreground "#226")))
- "Face for Python prompts in doctest examples."
- :group 'doctest)
-
-(defface doctest-output-face
- '((((class color) (background dark))
- (:foreground "#afd"))
- (t (:foreground "#262")))
- "Face for the output of doctest examples."
- :group 'doctest)
-
-(defface doctest-output-marker-face
- '((((class color) (background dark))
- (:foreground "#0f0"))
- (t (:foreground "#080")))
- "Face for markers in the output of doctest examples."
- :group 'doctest)
-
-(defface doctest-output-traceback-face
- '((((class color) (background dark))
- (:foreground "#f88"))
- (t (:foreground "#622")))
- "Face for traceback headers in the output of doctest examples."
- :group 'doctest)
-
-(defface doctest-results-divider-face
- '((((class color) (background dark))
- (:foreground "#08f"))
- (t (:foreground "#00f")))
- "Face for dividers in the doctest results window."
- :group 'doctest)
-
-(defface doctest-results-loc-face
- '((((class color) (background dark))
- (:foreground "#0f8"))
- (t (:foreground "#084")))
- "Face for location headers in the doctest results window."
- :group 'doctest)
-
-(defface doctest-results-header-face
- '((((class color) (background dark))
- (:foreground "#8ff"))
- (t (:foreground "#088")))
- "Face for sub-headers in the doctest results window."
- :group 'doctest)
-
-(defface doctest-results-selection-face
- '((((class color) (background dark))
- (:foreground "#ff0" :background "#008"))
- (t (:background "#088" :foreground "#fff")))
- "Face for selected failure's location header in the results window."
- :group 'doctest)
-
-(defface doctest-selection-face
- '((((class color) (background dark))
- (:foreground "#ff0" :background "#00f" :bold t))
- (t (:foreground "#f00")))
- "Face for selected example's prompt"
- :group 'doctest)
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Constants
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defconst doctest-prompt-re
- "^\\(?:\\([ \t]*\\)\\(>>> ?\\|[.][.][.] ?\\)\\([ \t]*\\)\\)"
- "Regular expression for doctest prompts. It defines three groups:
-the pre-prompt margin; the prompt; and the post-prompt indentation.")
-
-(defconst doctest-open-block-re
- "[^\n]+:[ \t]*\\(#.*\\)?$"
- "Regular expression for a line that opens a block")
-
-(defconst doctest-close-block-re
- "\\(return\\|raise\\|break\\|continue\\|pass\\)\\b"
- "Regular expression for a line that closes a block")
-
-(defconst doctest-example-source-re
- "^Failed example:\n\\(\n\\| [^\n]*\n\\)+"
- "Regular expression for example source in doctest's output.")
-
-(defconst doctest-results-divider-re
- "^\\([*]\\{60,\\}\\)$"
- "Regular expression for example dividers in doctest's output.")
-
-(defconst doctest-py24-results-loc-re
- "^File \"[^\"]+\", line \\([0-9]+\\), in [^\n]+"
- "Regular expression for example location markers in doctest's output.")
-
-(defconst doctest-py21-results-loc-re
- "^from line #\\([0-9]+\\) of [^\n]*"
- "Regular expression for example location markers in doctest's output,
-when the output was generated by an old version of doctest.")
-
-(defconst doctest-results-header-re
- "^\\([^ \n\t].+:\\|Expected nothing\\|Got nothing\\)$"
- "Regular expression for example headers in doctest's output.")
-
-(defconst doctest-traceback-header-re
- "^[ \t]*Traceback (\\(most recent call last\\|innermost last\\)):"
- "Regular expression for Python traceback headers.")
-
-(defconst doctest-py21-results-re
- "^from line #"
- "Regular expression used to test which version of doctest was used.")
-
-;; nb: There's a bug in Python's traceback.print_exception function
-;; which causes SyntaxError exceptions to be displayed incorrectly;
-;; which prevents this regexp from matching. But there shouldn't be
-;; too many people testing for SyntaxErrors, so I won't worry about
-;; it.
-(defconst doctest-traceback-re
- (let ((nonprompt
- ;; This matches any non-blank line that doesn't start with
- ;; a prompt (... or >>>).
- (concat
- "\\(?:[.][.][^.\n]\\|[>][>][^>\n]\\|"
- "[.][^.\n]\\|[>][^>\n]\\|[^.>\n \t]\\)[^\n]*")))
- (concat
- "^\\(\\([ \t]*\\)Traceback "
- "(\\(?:most recent call last\\|innermost last\\)):\n\\)"
- "\\(?:\\2[ \t]+[^ \t\n][^\n]*\n\\)*"
- "\\(\\(?:\\2" nonprompt "\n\\)"
- "\\(?:\\2[ \t]*" nonprompt "\n\\)*\\)"))
- "Regular expression that matches a complete exception traceback.
-It contains three groups: group 1 is the header line; group 2 is
-the indentation; and group 3 is the exception message.")
-
-(defconst doctest-blankline-re
- "^[ \t]*"
- "Regular expression that matches blank line markers in doctest
-output.")
-
-(defconst doctest-outdent-re
- (concat "\\(" (mapconcat 'identity
- '("else:"
- "except\\(\\s +.*\\)?:"
- "finally:"
- "elif\\s +.*:")
- "\\|")
- "\\)")
- "Regular expression for a line that should be outdented. Any line
-that matches `doctest-outdent-re', but does not follow a line matching
-`doctest-no-outdent-re', will be outdented.")
-
-;; It's not clear to me *why* the behavior given by this definition of
-;; doctest-no-outdent-re is desirable; but it's basically just copied
-;; from python-mode.
-(defconst doctest-no-outdent-re
- (concat
- "\\("
- (mapconcat 'identity
- (list "try:"
- "except\\(\\s +.*\\)?:"
- "while\\s +.*:"
- "for\\s +.*:"
- "if\\s +.*:"
- "elif\\s +.*:"
- "\\(return\\|raise\\|break\\|continue\\|pass\\)[ \t\n]"
- )
- "\\|")
- "\\)")
- "Regular expression matching lines not to outdent after. Any line
-that matches `doctest-outdent-re', but does not follow a line matching
-`doctest-no-outdent-re', will be outdented.")
-
-(defconst doctest-script
- "\
-from doctest import *
-import sys
-if '%m':
- import imp
- try:
- m = imp.load_source('__imported__', '%m')
- globs = m.__dict__
- except Exception, e:
- print ('doctest-mode encountered an error while importing '
- 'the current buffer:\\n\\n %s' % e)
- sys.exit(1)
-else:
- globs = {}
-doc = open('%t').read()
-if sys.version_info[:2] >= (2,4):
- test = DocTestParser().get_doctest(doc, globs, '%n', '%f', 0)
- r = DocTestRunner(optionflags=%l)
- r.run(test)
-else:
- Tester(globs=globs).runstring(doc, '%f')"
- ;; Docstring:
- "Python script used to run doctest.
-The following special sequences are defined:
- %n -- replaced by the doctest buffer's name.
- %f -- replaced by the doctest buffer's filename.
- %l -- replaced by the doctest flags string.
- %t -- replaced by the name of the tempfile containing the doctests."
- )
-
-(defconst doctest-keyword-re
- (let* ((kw1 (mapconcat 'identity
- '("and" "assert" "break" "class"
- "continue" "def" "del" "elif"
- "else" "except" "exec" "for"
- "from" "global" "if" "import"
- "in" "is" "lambda" "not"
- "or" "pass" "print" "raise"
- "return" "while" "yield"
- )
- "\\|"))
- (kw2 (mapconcat 'identity
- '("else:" "except:" "finally:" "try:")
- "\\|"))
- (kw3 (mapconcat 'identity
- '("ArithmeticError" "AssertionError"
- "AttributeError" "DeprecationWarning" "EOFError"
- "Ellipsis" "EnvironmentError" "Exception" "False"
- "FloatingPointError" "FutureWarning" "IOError"
- "ImportError" "IndentationError" "IndexError"
- "KeyError" "KeyboardInterrupt" "LookupError"
- "MemoryError" "NameError" "None" "NotImplemented"
- "NotImplementedError" "OSError" "OverflowError"
- "OverflowWarning" "PendingDeprecationWarning"
- "ReferenceError" "RuntimeError" "RuntimeWarning"
- "StandardError" "StopIteration" "SyntaxError"
- "SyntaxWarning" "SystemError" "SystemExit"
- "TabError" "True" "TypeError" "UnboundLocalError"
- "UnicodeDecodeError" "UnicodeEncodeError"
- "UnicodeError" "UnicodeTranslateError"
- "UserWarning" "ValueError" "Warning"
- "ZeroDivisionError" "__debug__"
- "__import__" "__name__" "abs" "apply" "basestring"
- "bool" "buffer" "callable" "chr" "classmethod"
- "cmp" "coerce" "compile" "complex" "copyright"
- "delattr" "dict" "dir" "divmod"
- "enumerate" "eval" "execfile" "exit" "file"
- "filter" "float" "getattr" "globals" "hasattr"
- "hash" "hex" "id" "input" "int" "intern"
- "isinstance" "issubclass" "iter" "len" "license"
- "list" "locals" "long" "map" "max" "min" "object"
- "oct" "open" "ord" "pow" "property" "range"
- "raw_input" "reduce" "reload" "repr" "round"
- "setattr" "slice" "staticmethod" "str" "sum"
- "super" "tuple" "type" "unichr" "unicode" "vars"
- "xrange" "zip")
- "\\|"))
- (pseudokw (mapconcat 'identity
- '("self" "None" "True" "False" "Ellipsis")
- "\\|"))
- (string (concat "'\\(?:\\\\[^\n]\\|[^\n']*\\)'" "\\|"
- "\"\\(?:\\\\[^\n]\\|[^\n\"]*\\)\""))
- (brk "\\(?:[ \t(]\\|$\\)"))
- (concat
- ;; Comments (group 1)
- "\\(#.*\\)"
- ;; Function & Class Definitions (groups 2-3)
- "\\|\\b\\(class\\|def\\)"
- "[ \t]+\\([a-zA-Z_][a-zA-Z0-9_]*\\)"
- ;; Builtins preceeded by '.'(group 4)
- "\\|[.][\t ]*\\(" kw3 "\\)"
- ;; Keywords & builtins (group 5)
- "\\|\\b\\(" kw1 "\\|" kw2 "\\|"
- kw3 "\\|" pseudokw "\\)" brk
- ;; Decorators (group 6)
- "\\|\\(@[a-zA-Z_][a-zA-Z0-9_]*\\)"
- ))
- "A regular expression used for syntax highlighting of Python
-source code.")
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Syntax Highlighting (font-lock mode)
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;; Define the font-lock keyword table.
-(defconst doctest-font-lock-keywords
- `(
- ;; The following pattern colorizes source lines. In particular,
- ;; it first matches prompts, and then looks for any of the
- ;; following matches *on the same line* as the prompt. It uses
- ;; the form:
- ;;
- ;; (MATCHER MATCH-HIGHLIGHT
- ;; (ANCHOR-MATCHER nil nil MATCH-HIGHLIGHT))
- ;;
- ;; See the variable documentation for font-lock-keywords for a
- ;; description of what each of those means.
- ("^[ \t]*\\(>>>\\|\\.\\.\\.\\)"
- (1 'doctest-prompt-face)
- (doctest-source-matcher
- nil nil
- (1 'font-lock-comment-face t t) ; comments
- (2 'font-lock-keyword-face t t) ; def/class
- (3 'font-lock-type-face t t) ; func/class name
- ;; group 4 (builtins preceeded by '.') gets no colorization.
- (5 'font-lock-keyword-face t t) ; keywords & builtins
- (6 'font-lock-preprocessor-face t t) ; decorators
- (7 'font-lock-string-face t t) ; strings
- ))
-
- ;; The following pattern colorizes output lines. In particular,
- ;; it uses doctest-output-line-matcher to check if this is an
- ;; output line, and if so, it colorizes it, and any special
- ;; markers it contains.
- (doctest-output-line-matcher
- (0 'doctest-output-face t)
- ("\\.\\.\\." (beginning-of-line) (end-of-line)
- (0 'doctest-output-marker-face t))
- (,doctest-blankline-re (beginning-of-line) (end-of-line)
- (0 'doctest-output-marker-face t))
- (doctest-traceback-line-matcher (beginning-of-line) (end-of-line)
- (0 'doctest-output-traceback-face t))
- (,doctest-traceback-header-re (beginning-of-line) (end-of-line)
- (0 'doctest-output-traceback-face t))
- )
-
- ;; A PS1 prompt followed by a non-space is an error.
- ("^[ \t]*\\(>>>[^ \t\n][^\n]*\\)" (1 'font-lock-warning-face t))
- )
- "Expressions to highlight in doctest-mode.")
-
-(defconst doctest-results-font-lock-keywords
- `((,doctest-results-divider-re
- (0 'doctest-results-divider-face))
- (,doctest-py24-results-loc-re
- (0 'doctest-results-loc-face))
- (,doctest-results-header-re
- (0 'doctest-results-header-face))
- (doctest-results-selection-matcher
- (0 'doctest-results-selection-face t)))
- "Expressions to highlight in doctest-results-mode.")
-
-(defun doctest-output-line-matcher (limit)
- "A `font-lock-keyword' MATCHER that returns t if the current
-line is the expected output for a doctest example, and if so,
-sets `match-data' so that group 0 spans the current line."
- ;; The real work is done by doctest-find-output-line.
- (when (doctest-find-output-line limit)
- ;; If we found one, then mark the entire line.
- (beginning-of-line)
- (re-search-forward "[^\n]*" limit)))
-
-(defun doctest-traceback-line-matcher (limit)
- "A `font-lock-keyword' MATCHER that returns t if the current line is
-the beginning of a traceback, and if so, sets `match-data' so that
-group 0 spans the entire traceback. n.b.: limit is ignored."
- (beginning-of-line)
- (when (looking-at doctest-traceback-re)
- (goto-char (match-end 0))
- t))
-
-(defun doctest-source-matcher (limit)
- "A `font-lock-keyword' MATCHER that returns t if the current line
-contains a Python source expression that should be highlighted
-after the point. If so, it sets `match-data' to cover the string
-literal. The groups in `match-data' should be interpreted as follows:
-
- Group 1: comments
- Group 2: def/class
- Group 3: function/class name
- Group 4: builtins preceeded by '.'
- Group 5: keywords & builtins
- Group 6: decorators
- Group 7: strings
-"
- (let ((matchdata nil))
- ;; First, look for string literals.
- (when doctest-highlight-strings
- (save-excursion
- (when (doctest-string-literal-matcher limit)
- (setq matchdata
- (list (match-beginning 0) (match-end 0)
- nil nil nil nil nil nil nil nil nil nil nil nil
- (match-beginning 0) (match-end 0))))))
- ;; Then, look for other keywords. If they occur before the
- ;; string literal, then they take precedence.
- (save-excursion
- (when (and (re-search-forward doctest-keyword-re limit t)
- (or (null matchdata)
- (< (match-beginning 0) (car matchdata))))
- (setq matchdata (match-data))))
- (when matchdata
- (set-match-data matchdata)
- (goto-char (match-end 0))
- t)))
-
-(defun doctest-string-literal-matcher (limit &optional debug)
- "A `font-lock-keyword' MATCHER that returns t if the current line
-contains a string literal starting at or after the point. If so, it
-expands `match-data' to cover the string literal. This matcher uses
-`doctest-statement-info' to collect information about strings that
-continue over multiple lines. It therefore might be a little slow for
-very large statements."
- (let* ((stmt-info (doctest-statement-info))
- (quotes (reverse (nth 5 stmt-info)))
- (result nil))
- (if debug (doctest-debug "quotes %s" quotes))
- (while (and quotes (null result))
- (let* ((quote (pop quotes))
- (start (car quote))
- (end (min limit (or (cdr quote) limit))))
- (if debug (doctest-debug "quote %s-%s pt=%s lim=%s"
- start end (point) limit))
- (when (or (and (<= (point) start) (< start limit))
- (and (< start (point)) (< (point) end)))
- (setq start (max start (point)))
- (set-match-data (list start end))
- (if debug (doctest-debug "marking string %s" (match-data)))
- (goto-char end)
- (setq result t))))
- result))
-
-(defun doctest-results-selection-matcher (limit)
- "Matches from `doctest-selected-failure' to the end of the
-line. This is used to highlight the currently selected failure."
- (when (and doctest-selected-failure
- (<= (point) doctest-selected-failure)
- (< doctest-selected-failure limit))
- (goto-char doctest-selected-failure)
- (re-search-forward "[^\n]+" limit)))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Source code editing & indentation
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun doctest-indent-source-line (&optional dedent-only)
- "Re-indent the current line, as doctest source code. I.e., add a
-prompt to the current line if it doesn't have one, and re-indent the
-source code (to the right of the prompt). If `dedent-only' is true,
-then don't increase the indentation level any."
- (interactive "*")
- (let ((indent-end nil))
- (save-excursion
- (beginning-of-line)
- (let ((new-indent (doctest-current-source-line-indentation dedent-only))
- (new-margin (doctest-current-source-line-margin))
- (line-had-prompt (looking-at doctest-prompt-re)))
- ;; Delete the old prompt (if any).
- (when line-had-prompt
- (goto-char (match-beginning 2))
- (delete-char (- (match-end 2) (match-beginning 2))))
- ;; Delete the old indentation.
- (delete-backward-char (skip-chars-forward " \t"))
- ;; If it's a continuation line, or a new PS1 prompt,
- ;; then copy the margin.
- (when (or new-indent (not line-had-prompt))
- (beginning-of-line)
- (delete-backward-char (skip-chars-forward " \t"))
- (insert-char ?\ new-margin))
- ;; Add the new prompt.
- (insert-string (if new-indent "... " ">>> "))
- ;; Add the new indentation
- (if new-indent (insert-char ?\ new-indent))
- (setq indent-end (point))))
- ;; If we're left of the indentation end, then move up to the
- ;; indentation end.
- (if (< (point) indent-end) (goto-char indent-end))))
-
-(defun doctest-current-source-line-indentation (&optional dedent-only)
- "Return the post-prompt indent to use for this line. This is an
-integer for a continuation lines, and nil for non-continuation lines."
- (save-excursion
- ;; Examine the previous doctest line (if present).
- (let* ((prev-stmt-info (doctest-prev-statement-info))
- (prev-stmt-indent (nth 0 prev-stmt-info))
- (continuation-indent (nth 1 prev-stmt-info))
- (prev-stmt-opens-block (nth 2 prev-stmt-info))
- (prev-stmt-closes-block (nth 3 prev-stmt-info))
- (prev-stmt-blocks-outdent (nth 4 prev-stmt-info))
- )
- ;; Examine this doctest line.
- (let* ((curr-line-indent 0)
- (curr-line-outdented nil))
- (beginning-of-line)
- (when (looking-at doctest-prompt-re)
- (setq curr-line-indent (- (match-end 3) (match-beginning 3)))
- (goto-char (match-end 3)))
- (setq curr-line-outdented (and (looking-at doctest-outdent-re)
- (not prev-stmt-blocks-outdent)))
- ;; Compute the overall indent.
- (let ((indent (or continuation-indent
- (+ prev-stmt-indent
- (if curr-line-outdented -4 0)
- (if prev-stmt-opens-block 4 0)
- (if prev-stmt-closes-block -4 0)))))
- ;; If dedent-only is true, then make sure we don't indent.
- (when dedent-only
- (setq indent (min indent curr-line-indent)))
- ;; If indent=0 and we're not outdented, then set indent to
- ;; nil (to signify the start of a new source example).
- (when (and (= indent 0)
- (not (or curr-line-outdented continuation-indent)))
- (setq indent nil))
- ;; Return the indentation.
- indent)))))
-
-(defun doctest-prev-statement-info (&optional debug)
- (save-excursion
- (forward-line -1)
- (doctest-statement-info debug)))
-
-(defun doctest-statement-info (&optional debug)
- "Collect info about the previous statement, and return it as a list:
-
- (INDENT, CONTINUATION, OPENS-BLOCK, CLOSES-BLOCK, BLOCKS-OUTDENT,
- QUOTES)
-
-INDENT -- The indentation of the previous statement (after the prompt)
-
-CONTINUATION -- If the previous statement is incomplete (e.g., has an
-open paren or quote), then this is the appropriate indentation
-level; otherwise, it's nil.
-
-OPENS-BLOCK -- True if the previous statement opens a Python control
-block.
-
-CLOSES-BLOCK -- True if the previous statement closes a Python control
-block.
-
-BLOCKS-OUTDENT -- True if the previous statement should 'block the
-next statement from being considered an outdent.
-
-QUOTES -- A list of (START . END) pairs for all quotation strings.
-"
- (save-excursion
- (end-of-line)
- (let ((end (point)))
- (while (and (doctest-on-source-line-p "...") (= (forward-line -1) 0)))
- (cond
- ;; If there's no previous >>> line, then give up.
- ((not (doctest-on-source-line-p ">>>"))
- '(0 nil nil nil nil))
-
- ;; If there is a previous statement, walk through the source
- ;; code, checking for operators that may be of interest.
- (t
- (beginning-of-line)
- (let* ((quote-mark nil) (nesting 0) (indent-stack '())
- (stmt-indent 0)
- (stmt-opens-block nil)
- (stmt-closes-block nil)
- (stmt-blocks-outdent nil)
- (quotes '())
- (elt-re (concat "\\\\[^\n]\\|"
- "(\\|)\\|\\[\\|\\]\\|{\\|}\\|"
- "\"\"\"\\|\'\'\'\\|\"\\|\'\\|"
- "#[^\n]*\\|" doctest-prompt-re)))
- (while (re-search-forward elt-re end t)
- (let* ((elt (match-string 0))
- (elt-first-char (substring elt 0 1)))
- (if debug (doctest-debug "Debug: %s" elt))
- (cond
- ;; Close quote -- set quote-mark back to nil. The
- ;; second case is for cases like: ' '''
- (quote-mark
- (cond
- ((equal quote-mark elt)
- (setq quote-mark nil)
- (setcdr (car quotes) (point)))
- ((equal quote-mark elt-first-char)
- (setq quote-mark nil)
- (setcdr (car quotes) (point))
- (backward-char 2))))
- ;; Prompt -- check if we're starting a new stmt. If so,
- ;; then collect various info about it.
- ((string-match doctest-prompt-re elt)
- (when (and (null quote-mark) (= nesting 0))
- (let ((indent (- (match-end 3) (match-end 2))))
- (unless (looking-at "[ \t]*\n")
- (setq stmt-indent indent)
- (setq stmt-opens-block
- (looking-at doctest-open-block-re))
- (setq stmt-closes-block
- (looking-at doctest-close-block-re))
- (setq stmt-blocks-outdent
- (looking-at doctest-no-outdent-re))))))
- ;; Open paren -- increment nesting, and update indent-stack.
- ((string-match "(\\|\\[\\|{" elt-first-char)
- (let ((elt-pos (point))
- (at-eol (looking-at "[ \t]*\n"))
- (indent 0))
- (save-excursion
- (re-search-backward doctest-prompt-re)
- (if at-eol
- (setq indent (+ 4 (- (match-end 3) (match-end 2))))
- (setq indent (- elt-pos (match-end 2))))
- (push indent indent-stack)))
- (setq nesting (+ nesting 1)))
- ;; Close paren -- decrement nesting, and pop indent-stack.
- ((string-match ")\\|\\]\\|}" elt-first-char)
- (setq indent-stack (cdr indent-stack))
- (setq nesting (max 0 (- nesting 1))))
- ;; Open quote -- set quote-mark.
- ((string-match "\"\\|\'" elt-first-char)
- (push (cons (- (point) (length elt)) nil) quotes)
- (setq quote-mark elt)))))
-
- (let* ((continuation-indent
- (cond
- (quote-mark 0)
- ((> nesting 0) (if (null indent-stack) 0 (car indent-stack)))
- (t nil)))
- (result
- (list stmt-indent continuation-indent
- stmt-opens-block stmt-closes-block
- stmt-blocks-outdent quotes)))
- (if debug (doctest-debug "Debug: %s" result))
- result)))))))
-
-(defun doctest-current-source-line-margin ()
- "Return the pre-prompt margin to use for this source line. This is
-copied from the most recent source line, or set to
-`doctest-default-margin' if there are no preceeding source lines."
- (save-excursion
- (save-restriction
- (when (doctest-in-mmm-docstring-overlay)
- (doctest-narrow-to-mmm-overlay))
- (beginning-of-line)
- (forward-line -1)
- (while (and (not (doctest-on-source-line-p))
- (re-search-backward doctest-prompt-re nil t))))
- (cond ((looking-at doctest-prompt-re)
- (- (match-end 1) (match-beginning 1)))
- ((doctest-in-mmm-docstring-overlay)
- (doctest-default-margin-in-mmm-docstring-overlay))
- (t
- doctest-default-margin))))
-
-(defun doctest-electric-backspace ()
- "Delete the preceeding character, level of indentation, or
-prompt.
-
-If point is at the leftmost column, delete the preceding newline.
-
-Otherwise, if point is at the first non-whitespace character
-following an indented source line's prompt, then reduce the
-indentation to the next multiple of 4; and update the source line's
-prompt, when necessary.
-
-Otherwise, if point is at the first non-whitespace character
-following an unindented source line's prompt, then remove the
-prompt (converting the line to an output line or text line).
-
-Otherwise, if point is at the first non-whitespace character of a
-line, the delete the line's indentation.
-
-Otherwise, delete the preceeding character.
-"
- (interactive "*")
- (cond
- ;; Beginning of line: delete preceeding newline.
- ((bolp) (backward-delete-char 1))
-
- ;; First non-ws char following prompt: dedent or remove prompt.
- ((and (looking-at "[^ \t\n]\\|$") (doctest-looking-back doctest-prompt-re))
- (let* ((prompt-beg (match-beginning 2))
- (indent-beg (match-beginning 3)) (indent-end (match-end 3))
- (old-indent (- indent-end indent-beg))
- (new-indent (* (/ (- old-indent 1) 4) 4)))
- (cond
- ;; Indented source line: dedent it.
- ((> old-indent 0)
- (goto-char indent-beg)
- (delete-region indent-beg indent-end)
- (insert-char ?\ new-indent)
- ;; Change prompt to PS1, when appropriate.
- (when (and (= new-indent 0) (not (looking-at doctest-outdent-re)))
- (delete-backward-char 4)
- (insert-string ">>> ")))
- ;; Non-indented source line: remove prompt.
- (t
- (goto-char indent-end)
- (delete-region prompt-beg indent-end)))))
-
- ;; First non-ws char of a line: delete all indentation.
- ((and (looking-at "[^ \n\t]\\|$") (doctest-looking-back "^[ \t]+"))
- (delete-region (match-beginning 0) (match-end 0)))
-
- ;; Otherwise: delete a character.
- (t
- (backward-delete-char 1))))
-
-(defun doctest-newline-and-indent ()
- "Insert a newline, and indent the new line appropriately.
-
-If the current line is a source line containing a bare prompt,
-then clear the current line, and insert a newline.
-
-Otherwise, if the current line is a source line, then insert a
-newline, and add an appropriately indented prompt to the new
-line.
-
-Otherwise, if the current line is an output line, then insert a
-newline and indent the new line to match the example's margin.
-
-Otherwise, insert a newline.
-
-If `doctest-avoid-trailing-whitespace' is true, then clear any
-whitespace to the left of the point before inserting a newline.
-"
- (interactive "*")
- ;; If we're avoiding trailing spaces, then delete WS before point.
- (if doctest-avoid-trailing-whitespace
- (delete-char (- (skip-chars-backward " \t"))))
- (cond
- ;; If we're on an empty prompt, delete it.
- ((doctest-on-empty-source-line-p)
- (delete-region (match-beginning 0) (match-end 0))
- (insert-char ?\n 1))
- ;; If we're on a doctest line, add a new prompt.
- ((doctest-on-source-line-p)
- (insert-char ?\n 1)
- (doctest-indent-source-line))
- ;; If we're in doctest output, indent to the margin.
- ((doctest-on-output-line-p)
- (insert-char ?\n 1)
- (insert-char ?\ (doctest-current-source-line-margin)))
- ;; Otherwise, just add a newline.
- (t (insert-char ?\n 1))))
-
-(defun doctest-electric-colon ()
- "Insert a colon, and dedent the line when appropriate."
- (interactive "*")
- (insert-char ?: 1)
- (when (doctest-on-source-line-p)
- (doctest-indent-source-line t)))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Code Execution
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun doctest-execute ()
- "Run doctest on the current buffer, or on the current docstring
-if the point is inside an `mmm-mode' `doctest-docstring' region.
-Display the results in the *doctest-output* buffer."
- (interactive)
- (doctest-execute-region (point-min) (point-max) nil t))
-
-(defun doctest-execute-with-diff ()
- "Run doctest on the current buffer, or on the current docstring
-if the point is inside an `mmm-mode' `doctest-docstring' region.
-Display the results in the *doctest-output* buffer, using diff format."
- (interactive)
- (doctest-execute-region (point-min) (point-max) t t))
-
-(defun doctest-execute-buffer-with-diff ()
- "Run doctest on the current buffer, and display the results in the
-*doctest-output* buffer, using the diff format."
- (interactive)
- (doctest-execute-region (point-min) (point-max) t nil))
-
-(defun doctest-execute-buffer ()
- "Run doctest on the current buffer, and display the results in the
-*doctest-output* buffer."
- (interactive)
- (doctest-execute-region (point-min) (point-max) nil nil))
-
-(defun doctest-execute-region (start end &optional diff
- check-for-mmm-docstring-overlay)
- "Run doctest on the current buffer, and display the results in the
-*doctest-output* buffer."
- (interactive "r")
- ;; If it's already running, give the user a chance to restart it.
- (when (doctest-process-live-p doctest-async-process)
- (when (y-or-n-p "Doctest is already running. Restart it? ")
- (doctest-cancel-async-process)
- (message "Killing doctest...")))
- (cond
- ((and doctest-async (doctest-process-live-p doctest-async-process))
- (message "Can't run two doctest processes at once!"))
- (t
- (let* ((results-buf-name (doctest-results-buffer-name))
- (in-docstring (and check-for-mmm-docstring-overlay
- (doctest-in-mmm-docstring-overlay)))
- (temp (doctest-temp-name)) (dir doctest-temp-directory)
- (input-file (expand-file-name (concat temp ".py") dir))
- (globs-file (when in-docstring
- (expand-file-name (concat temp "-globs.py") dir)))
- (cur-buf (current-buffer))
- (in-buf (get-buffer-create "*doctest-input*"))
- (script (doctest-script input-file globs-file diff)))
- ;; If we're in a docstring, narrow start & end.
- (when in-docstring
- (let ((bounds (doctest-mmm-overlay-bounds)))
- (setq start (max start (car bounds))
- end (min end (cdr bounds)))))
- ;; Write the doctests to a file.
- (save-excursion
- (goto-char (min start end))
- (let ((lineno (doctest-line-number)))
- (set-buffer in-buf)
- ;; Add blank lines, to keep line numbers the same:
- (dotimes (n (- lineno 1)) (insert-string "\n"))
- ;; Add the selected region
- (insert-buffer-substring cur-buf start end)
- ;; Write it to a file
- (write-file input-file)))
- ;; If requested, write the buffer to a file for use as globs.
- (when globs-file
- (let ((cur-buf-start (point-min)) (cur-buf-end (point-max)))
- (save-excursion
- (set-buffer in-buf)
- (delete-region (point-min) (point-max))
- (insert-buffer-substring cur-buf cur-buf-start cur-buf-end)
- (write-file globs-file))))
- ;; Dispose of in-buf (we're done with it now.
- (kill-buffer in-buf)
- ;; Prepare the results buffer. Clear it, if it contains
- ;; anything, and set its mode.
- (setq doctest-results-buffer (get-buffer-create results-buf-name))
- (save-excursion
- (set-buffer doctest-results-buffer)
- (toggle-read-only 0)
- (delete-region (point-min) (point-max))
- (doctest-results-mode)
- (setq doctest-source-buffer cur-buf)
- )
- ;; Add markers to examples, and record what line number each one
- ;; starts at. That way, if the input buffer is edited, we can
- ;; still find corresponding examples in the output.
- (doctest-mark-examples)
-
- ;; Run doctest
- (cond (doctest-async
- ;; Asynchronous mode:
- (let ((process (start-process "*doctest*" doctest-results-buffer
- doctest-python-command
- "-c" script)))
- ;; Store some information about the process.
- (setq doctest-async-process-buffer cur-buf)
- (setq doctest-async-process process)
- (push input-file doctest-async-process-tempfiles)
- (when globs-file
- (push globs-file doctest-async-process-tempfiles))
- ;; Set up a sentinel to respond when it's done running.
- (set-process-sentinel process 'doctest-async-process-sentinel)
-
- ;; Show the output window.
- (let ((w (display-buffer doctest-results-buffer)))
- (when doctest-follow-output
- ;; Insert a newline, which will move the buffer's
- ;; point past the process's mark -- this causes the
- ;; window to scroll as new output is generated.
- (save-current-buffer
- (set-buffer doctest-results-buffer)
- (insert-string "\n")
- (set-window-point w (point)))))
-
- ;; Let the user know the process is running.
- (doctest-update-mode-line ":running")
- (message "Running doctest...")))
- (t
- ;; Synchronous mode:
- (call-process doctest-python-command nil
- doctest-results-buffer t "-c" script)
- (doctest-handle-output)
- (delete-file input-file)
- (when globs-file
- (delete-file globs-file))))))))
-
-(defun doctest-handle-output ()
- "This function, which is called after the 'doctest' process spawned
-by doctest-execute-buffer has finished, checks the doctest results
-buffer. If that buffer is empty, it reports no errors and hides it;
-if that buffer is not empty, it reports that errors occured, displays
-the buffer, and runs doctest-postprocess-results."
- ;; If any tests failed, display them.
- (cond ((not (buffer-live-p doctest-results-buffer))
- (doctest-warn "Results buffer not found!"))
- ((> (buffer-size doctest-results-buffer) 1)
- (display-buffer doctest-results-buffer)
- (doctest-postprocess-results)
- (let ((num (length doctest-example-markers)))
- (message "%d doctest example%s failed!" num
- (if (= num 1) "" "s"))))
- (t
- (display-buffer doctest-results-buffer)
- (delete-windows-on doctest-results-buffer)
- (message "All doctest examples passed!"))))
-
-(defun doctest-async-process-sentinel (process state)
- "A process sentinel, called when the asynchronous doctest process
-completes, which calls doctest-handle-output."
- ;; Check to make sure we got the process we're expecting. On
- ;; some operating systems, this will end up getting called twice
- ;; when we use doctest-cancel-async-process; this check keeps us
- ;; from trying to clean up after the same process twice (since we
- ;; set doctest-async-process to nil when we're done).
- (when (and (equal process doctest-async-process)
- (buffer-live-p doctest-async-process-buffer))
- (save-current-buffer
- (set-buffer doctest-async-process-buffer)
- (cond ((not (buffer-live-p doctest-results-buffer))
- (doctest-warn "Results buffer not found!"))
- ((equal state "finished\n")
- (doctest-handle-output)
- (let ((window (get-buffer-window
- doctest-async-process-buffer t)))
- (when window (set-window-point window (point)))))
- ((equal state "killed\n")
- (message "Doctest killed."))
- (t
- (message "Doctest failed -- %s" state)
- (display-buffer doctest-results-buffer)))
- (doctest-update-mode-line "")
- (while doctest-async-process-tempfiles
- (delete-file (pop doctest-async-process-tempfiles)))
- (setq doctest-async-process nil))))
-
-(defun doctest-cancel-async-process ()
- "If a doctest process is running, then kill it."
- (interactive "")
- (when (doctest-process-live-p doctest-async-process)
- ;; Update the modeline
- (doctest-update-mode-line ":killing")
- ;; Kill the process.
- (kill-process doctest-async-process)
- ;; Run the sentinel. (Depending on what OS we're on, the sentinel
- ;; may end up getting called once or twice.)
- (doctest-async-process-sentinel doctest-async-process "killed\n")
- ))
-
-(defun doctest-postprocess-results ()
- "Post-process the doctest results buffer: check what version of
-doctest was used, and set doctest-results-py-version accordingly;
-turn on read-only mode; filter the example markers; hide the example
-source (if `doctest-hide-example-source' is non-nil); and select the
-first failure."
- (save-excursion
- (set-buffer doctest-results-buffer)
- ;; Check if we're using an old doctest version.
- (goto-char (point-min))
- (if (re-search-forward doctest-py21-results-re nil t)
- (setq doctest-results-py-version 'py21)
- (setq doctest-results-py-version 'py24))
- ;; Turn on read-only mode.
- (toggle-read-only t))
-
- (doctest-filter-example-markers)
- (if doctest-hide-example-source
- (doctest-hide-example-source))
- (doctest-next-failure 1))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Markers
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun doctest-mark-examples ()
- "Add a marker at the beginning of every (likely) example in the
-input buffer; and create a list, `doctest-example-markers',
-which maps from markers to the line numbers they originally occured
-on. This will allow us to find the corresponding example in the
-doctest output, even if the input buffer is edited."
- (dolist (marker-info doctest-example-markers)
- (set-marker (car marker-info) nil))
- (setq doctest-example-markers '())
- (save-excursion
- (goto-char (point-min))
- (while (re-search-forward "^ *>>> " nil t)
- (backward-char 4)
- (push (cons (point-marker) (doctest-line-number))
- doctest-example-markers)
- (forward-char 4))))
-
-(defun doctest-filter-example-markers ()
- "Remove any entries from `doctest-example-markers' that do not
-correspond to a failed example."
- (let ((filtered nil) (markers doctest-example-markers))
- (save-excursion
- (set-buffer doctest-results-buffer)
- (goto-char (point-max))
- (while (re-search-backward (doctest-results-loc-re) nil t)
- (let ((lineno (string-to-int (match-string 1))))
- (when (equal doctest-results-py-version 'py21)
- (setq lineno (+ lineno 1)))
- (while (and markers (< lineno (cdar markers)))
- (set-marker (caar markers) nil)
- (setq markers (cdr markers)))
- (if (and markers (= lineno (cdar markers)))
- (push (pop markers) filtered)
- (doctest-warn "Example expected on line %d but not found %s"
- lineno markers)))))
- (dolist (marker-info markers)
- (set-marker (car marker-info) nil))
- (setq doctest-example-markers filtered)))
-
-(defun doctest-prev-example-marker ()
- "Helper for doctest-replace-output: move to the preceeding example
-marker, and return the corresponding 'original' lineno. If none is
-found, return nil."
- (let ((lineno nil)
- (pos nil))
- (save-excursion
- (end-of-line)
- (when (re-search-backward "^\\( *\\)>>> " nil t)
- (goto-char (match-end 1))
- (dolist (marker-info doctest-example-markers)
- (when (= (marker-position (car marker-info)) (point))
- (setq lineno (cdr marker-info))
- (setq pos (point))))))
- (unless (null lineno)
- (goto-char pos)
- lineno)))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Navigation
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun doctest-next-failure (count)
- "Move to the top of the next failing example, and highlight the
-example's failure description in *doctest-output*."
- (interactive "p")
- (cond
- ((and doctest-async (doctest-process-live-p doctest-async-process))
- (message "Wait for doctest to finish running!"))
- ((not (doctest-results-buffer-valid-p))
- (message "Run doctest first! (C-c C-c)"))
- ((equal count 0)
- t)
- (t
- (let ((marker nil) (example-markers doctest-example-markers)
- (results-window (display-buffer doctest-results-buffer)))
- (save-excursion
- (set-buffer doctest-results-buffer)
- ;; Pick up where we left off.
- ;; (nb: doctest-selected-failure is buffer-local)
- (goto-char (or doctest-selected-failure (point-min)))
- ;; Skip past anything on *this* line.
- (if (>= count 0) (end-of-line) (beginning-of-line))
- ;; Look for the next failure
- (when
- (if (>= count 0)
- (re-search-forward (doctest-results-loc-re) nil t count)
- (re-search-backward (doctest-results-loc-re) nil t (- count)))
- ;; We found a failure:
- (let ((old-selected-failure doctest-selected-failure))
- (beginning-of-line)
- ;; Extract the line number for the doctest file.
- (let ((orig-lineno (string-to-int (match-string 1))))
- (when (equal doctest-results-py-version 'py21)
- (setq orig-lineno (+ orig-lineno 1)))
- (dolist (marker-info example-markers)
- (when (= orig-lineno (cdr marker-info))
- (setq marker (car marker-info)))))
-
- ;; Update the window cursor.
- (beginning-of-line)
- (set-window-point results-window (point))
- ;; Store our position for next time.
- (setq doctest-selected-failure (point))
- ;; Update selection.
- (doctest-fontify-line old-selected-failure)
- (doctest-fontify-line doctest-selected-failure))))
-
- (cond
- ;; We found a failure -- move point to the selected failure.
- (marker
- (goto-char (marker-position marker))
- (beginning-of-line))
- ;; We didn't find a failure, but there is one -- wrap.
- ((> (length doctest-example-markers) 0)
- (if (>= count 0) (doctest-first-failure) (doctest-last-failure)))
- ;; We didn't find a failure -- alert the user.
- (t (message "No failures found!")))))))
-
-(defun doctest-prev-failure (count)
- "Move to the top of the previous failing example, and highlight
-the example's failure description in *doctest-output*."
- (interactive "p")
- (doctest-next-failure (- count)))
-
-(defun doctest-first-failure ()
- "Move to the top of the first failing example, and highlight
-the example's failure description in *doctest-output*."
- (interactive)
- (if (buffer-live-p doctest-results-buffer)
- (save-excursion
- (set-buffer doctest-results-buffer)
- (let ((old-selected-failure doctest-selected-failure))
- (setq doctest-selected-failure (point-min))
- (doctest-fontify-line old-selected-failure))))
- (doctest-next-failure 1))
-
-(defun doctest-last-failure ()
- "Move to the top of the last failing example, and highlight
-the example's failure description in *doctest-output*."
- (interactive)
- (if (buffer-live-p doctest-results-buffer)
- (save-excursion
- (set-buffer doctest-results-buffer)
- (let ((old-selected-failure doctest-selected-failure))
- (setq doctest-selected-failure (point-max))
- (doctest-fontify-line old-selected-failure))))
- (doctest-next-failure -1))
-
-(defun doctest-select-failure ()
- "Move to the top of the currently selected example, and select that
-example in the source buffer. Intended for use in the results
-buffer."
- (interactive)
- (re-search-backward doctest-results-divider-re)
- (let ((old-selected-failure doctest-selected-failure))
- (setq doctest-selected-failure (point))
- (doctest-fontify-line doctest-selected-failure)
- (doctest-fontify-line old-selected-failure))
- (pop-to-buffer doctest-source-buffer)
- (doctest-next-failure 1))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Replace Output
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun doctest-replace-output ()
- "Move to the top of the closest example, and replace its output
-with the 'got' output from the *doctest-output* buffer. An error is
-displayed if the chosen example is not listed in *doctest-output*, or
-if the 'expected' output for the example does not exactly match the
-output listed in the source buffer. The user is asked to confirm the
-replacement."
- (interactive)
- ;; Move to the beginning of the example.
- (cond
- ((and doctest-async (doctest-process-live-p doctest-async-process))
- (message "Wait for doctest to finish running!"))
- ((not (doctest-results-buffer-valid-p))
- (message "Run doctest first! (C-c C-c)"))
- ((save-excursion (set-buffer doctest-results-buffer)
- (equal doctest-results-py-version 'py21))
- (error "doctest-replace-output requires python 2.4+"))
- (t
- (save-excursion
- (save-restriction
- (when (doctest-in-mmm-docstring-overlay)
- (doctest-narrow-to-mmm-overlay))
-
- (let* ((orig-buffer (current-buffer))
- ;; Find an example, and look up its original lineno.
- (lineno (doctest-prev-example-marker))
- ;; Find the example's indentation.
- (prompt-indent (doctest-line-indentation)))
-
- ;; Switch to the output buffer, and look for the example.
- ;; If we don't find one, complain.
- (cond
- ((null lineno) (message "Doctest example not found"))
- (t
- (set-buffer doctest-results-buffer)
- (goto-char (point-min))
- (let ((output-re (format "^File .*, line %s," lineno)))
- (when (not (re-search-forward output-re nil t))
- (message "This doctest example did not fail")
- (setq lineno nil)))))
-
- ;; If we didn't find an example, give up.
- (when (not (null lineno))
- ;; Get the output's 'expected' & 'got' texts.
- (let ((doctest-got nil) (doctest-expected nil) (header nil))
- (while (setq header (doctest-results-next-header))
- (cond
- ((equal header "Failed example:")
- t)
- ((equal header "Expected nothing")
- (setq doctest-expected ""))
- ((equal header "Expected:")
- (unless (re-search-forward "^\\(\\( \\).*\n\\)*" nil t)
- (error "Error parsing doctest output"))
- (setq doctest-expected (doctest-replace-regexp-in-string
- "^ " prompt-indent
- (match-string 0))))
- ((equal header "Got nothing")
- (setq doctest-got ""))
- ((or (equal header "Got:") (equal header "Exception raised:"))
- (unless (re-search-forward "^\\(\\( \\).*\n\\)*" nil t)
- (error "Error parsing doctest output"))
- (setq doctest-got (doctest-replace-regexp-in-string
- "^ " prompt-indent (match-string 0))))
- ((string-match "^Differences" header)
- (error (concat "doctest-replace-output can not be used "
- "with diff style output")))
- (t (error "Unexpected header %s" header))))
-
- ;; Go back to the source buffer.
- (set-buffer orig-buffer)
-
- ;; Skip ahead to the output.
- (beginning-of-line)
- (unless (re-search-forward "^ *>>>.*")
- (error "Error parsing doctest output"))
- (re-search-forward "\\(\n *\\.\\.\\..*\\)*\n?")
- (when (looking-at "\\'") (insert-char ?\n))
-
- ;; Check that the output matches.
- (let ((start (point)) end)
- (cond ((re-search-forward "^ *\\(>>>.*\\|$\\)" nil t)
- (setq end (match-beginning 0)))
- (t
- (goto-char (point-max))
- (insert-string "\n")
- (setq end (point-max))))
- (when (and doctest-expected
- (not (equal (buffer-substring start end)
- doctest-expected)))
- (warn "{%s} {%s}" (buffer-substring start end)
- doctest-expected)
- (error (concat "This example's output has been modified "
- "since doctest was last run")))
- (setq doctest-expected (buffer-substring start end))
- (goto-char end))
-
- ;; Trim exceptions
- (when (and doctest-trim-exceptions
- (string-match doctest-traceback-re
- doctest-got))
- (let ((s1 0) (e1 (match-end 1))
- (s2 (match-beginning 2)) (e2 (match-end 2))
- (s3 (match-beginning 3)) (e3 (length doctest-got)))
- (setq doctest-got
- (concat (substring doctest-got s1 e1)
- (substring doctest-got s2 e2) " . . .\n"
- (substring doctest-got s3 e3)))))
-
- ;; Confirm it with the user.
- (let ((confirm-buffer (get-buffer-create "*doctest-confirm*")))
- (set-buffer confirm-buffer)
- ;; Erase anything left over in the buffer.
- (delete-region (point-min) (point-max))
- ;; Write a confirmation message
- (if (equal doctest-expected "")
- (insert-string "Replace nothing\n")
- (insert-string (concat "Replace:\n" doctest-expected)))
- (if (equal doctest-got "")
- (insert-string "With nothing\n")
- (insert-string (concat "With:\n" doctest-got)))
- (let ((confirm-window (display-buffer confirm-buffer)))
- ;; Shrink the confirm window.
- (shrink-window-if-larger-than-buffer confirm-window)
- ;; Return to the original buffer.
- (set-buffer orig-buffer)
- ;; Match the old expected region.
- (when doctest-expected
- (search-backward doctest-expected))
- (when (equal doctest-expected "") (backward-char 1))
- ;; Get confirmation & do the replacement
- (widen)
- (cond ((y-or-n-p "Ok to replace? ")
- (when (equal doctest-expected "") (forward-char 1))
- (replace-match doctest-got t t)
- (message "Replaced."))
- (t
- (message "Replace cancelled.")))
- ;; Clean up our confirm window
- (kill-buffer confirm-buffer)
- (delete-window confirm-window)))))))))))
-
-(defun doctest-results-next-header ()
- "Move to the next header in the doctest results buffer, and return
-the string contents of that header. If no header is found, return
-nil."
- (if (re-search-forward (concat doctest-results-header-re "\\|"
- doctest-results-divider-re) nil t)
- (let ((result (match-string 0)))
- (if (string-match doctest-results-header-re result)
- result
- nil))
- nil))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; mmm-mode support
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; MMM Mode is a minor mode for Emacs which allows Multiple Major
-;; Modes to coexist in a single buffer.
-
-;;;###autoload
-(defun doctest-register-mmm-classes (&optional add-mode-ext-classes
- fix-mmm-fontify-region-bug)
- "Register doctest's mmm classes, allowing doctest to be used as a
-submode region in other major modes, such as python-mode and rst-mode.
-Two classes are registered:
-
-`doctest-docstring'
-
- Used to edit docstrings containing doctest examples in python-
- mode. Docstring submode regions start and end with triple-quoted
- strings (\"\"\"). In order to avoid confusing start-string
- markers and end-string markers, all triple-quote strings in the
- buffer are treated as submode regions (even if they're not
- actually docstrings). Use (C-c % C-d) to insert a new doctest-
- docstring region. When `doctest-execute' (C-c C-c) is called
- inside a doctest-docstring region, it executes just the current
- docstring. The globals for this execution are constructed by
- importing the current buffer's contents in Python.
-
-`doctest-example'
-
- Used to edit doctest examples in text-editing modes, such as
- `rst-mode' or `text-mode'. Docstring submode regions start with
- optionally indented prompts (>>>) and end with blank lines. Use
- (C-c % C-e) to insert a new doctest-example region. When
- `doctest-execute' (C-c C-c) is called inside a doctest-example
- region, it executes all examples in the buffer.
-
-If ADD-MODE-EXT-CLASSES is true, then register the new classes in
-`mmm-mode-ext-classes-alist', which will cause them to be used by
-default in the following modes:
-
- doctest-docstring: python-mode
- doctest-example: rst-mode
-
-If FIX-MMM-FONTIFY-REGION-BUG is true, then register a hook that will
-fix a bug in `mmm-fontify-region' that affects some (but not all)
-versions of emacs. (See `doctest-fixed-mmm-fontify-region' for more
-info.)"
- (interactive)
- (require 'mmm-auto)
- (mmm-add-classes
- '(
- ;; === doctest-docstring ===
- (doctest-docstring :submode doctest-mode
-
- ;; The front is any triple-quote. Include it in the submode region,
- ;; to prevent clashes between the two syntax tables over quotes.
- :front "\\(\"\"\"\\|'''\\)" :include-front t
-
- ;; The back matches the front. Include just the first character
- ;; of the quote. If we didn't include at least one quote, then
- ;; the outer modes quote-counting would be thrown off. But if
- ;; we include all three, we run into a bug in mmm-mode. See
- ;; for more info about the bug.
- :save-matches t :back "~1" :back-offset 1 :end-not-begin t
-
- ;; Define a skeleton for entering new docstrings.
- :insert ((?d docstring nil @ "\"\"" @ "\"" \n
- _ \n "\"" @ "\"\"" @)))
-
- ;; === doctest-example ===
- (doctest-example
- :submode doctest-mode
- ;; The front is an optionally indented prompt.
- :front "^[ \t]*>>>" :include-front t
- ;; The back is a blank line.
- :back "^[ \t]*$"
- ;; Define a skeleton for entering new docstrings.
- :insert ((?e doctest-example nil
- @ @ " >>> " _ "\n\n" @ @)))))
-
- ;; Register some local variables that need to be saved.
- (add-to-list 'mmm-save-local-variables
- '(doctest-results-buffer buffer))
- (add-to-list 'mmm-save-local-variables
- '(doctest-example-markers buffer))
-
- ;; Register association with modes, if requested.
- (when add-mode-ext-classes
- (mmm-add-mode-ext-class 'python-mode nil 'doctest-docstring)
- (mmm-add-mode-ext-class 'rst-mode nil 'doctest-example))
-
- ;; Fix the buggy mmm-fontify-region, if requested.
- (when fix-mmm-fontify-region-bug
- (add-hook 'mmm-mode-hook 'doctest-fix-mmm-fontify-region-bug)))
-
-(defvar doctest-old-mmm-fontify-region 'nil
- "Used to hold the original definition of `mmm-fontify-region' when it
-is rebound by `doctest-fix-mmm-fontify-region-bug'.")
-
-(defun doctest-fix-mmm-fontify-region-bug ()
- "A function for `mmm-mode-hook' which fixes a potential bug in
-`mmm-fontify-region' by using `doctest-fixed-mmm-fontify-region'
-instead. (See `doctest-fixed-mmm-fontify-region' for more info.)"
- (setq font-lock-fontify-region-function
- 'doctest-fixed-mmm-fontify-region))
-
-(defun doctest-fixed-mmm-fontify-region (start stop &optional loudly)
- "A replacement for `mmm-fontify-region', which fixes a bug caused by
-versions of emacs where post-command-hooks are run *before*
-fontification. `mmm-mode' assumes that its post-command-hook will be
-run after fontification; and if it's not, then mmm-mode can end up
-with the wrong local variables, keymap, etc. after fontification. We
-fix that here by redefining `mmm-fontify-region' to remember what
-submode overlay it started in; and to return to that overlay after
-fontification is complete. The original definition of
-`mmm-fontify-region' is stored in `doctest-old-mmm-fontify-region'."
- (let ((overlay mmm-current-overlay))
- (mmm-fontify-region start stop loudly)
- (if (and overlay (or (< (point) (overlay-start overlay))
- (> (point) (overlay-end overlay))))
- (goto-char (overlay-start overlay)))
- (mmm-update-submode-region)))
-
-(defun doctest-in-mmm-docstring-overlay ()
- (and (featurep 'mmm-auto)
- (mmm-overlay-at (point))
- (save-excursion
- (goto-char (overlay-start (mmm-overlay-at (point))))
- (looking-at "\"\"\"\\|\'\'\'"))))
-
-(defun doctest-narrow-to-mmm-overlay ()
- "If we're in an mmm-mode overlay, then narrow to that overlay.
-This is useful, e.g., to keep from interpreting the close-quote of a
-docstring as part of the example's output."
- (let ((bounds (doctest-mmm-overlay-bounds)))
- (when bounds (narrow-to-region (car bounds) (cdr bounds)))))
-
-(defun doctest-default-margin-in-mmm-docstring-overlay ()
- (save-excursion
- (let ((pos (car (doctest-mmm-overlay-bounds))))
- (goto-char pos)
- (when (doctest-looking-back "\"\"\"\\|\'\'\'")
- (setq pos (- pos 3)))
- (beginning-of-line)
- (- pos (point)))))
-
-(defun doctest-mmm-overlay-bounds ()
- (when (featurep 'mmm-auto)
- (let ((overlay (mmm-overlay-at (point))))
- (when overlay
- (let ((start (overlay-start overlay))
- (end (overlay-end overlay)))
- (when (doctest-in-mmm-docstring-overlay)
- (save-excursion
- (goto-char start)
- (re-search-forward "[\"\']*")
- (setq start (point))
- (goto-char end)
- (while (doctest-looking-back "[\"\']")
- (backward-char 1))
- (setq end (point))))
- (cons start end))))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Helper functions
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-(defun doctest-on-source-line-p (&optional prompt)
- "Return true if the current line is a source line. The optional
-argument prompt can be used to specify which type of source
-line (... or >>>)."
- (save-excursion
- (beginning-of-line)
- ;; Check if we're looking at a prompt (of the right type).
- (when (and (looking-at doctest-prompt-re)
- (or (null prompt)
- (equal prompt (substring (match-string 2) 0 3))))
- ;; Scan backwards to make sure there's a >>> somewhere. Otherwise,
- ;; this might be a '...' in the text or in an example's output.
- (while (looking-at "^[ \t]*[.][.][.]")
- (forward-line -1))
- (looking-at "^[ \t]*>>>"))))
-
-(defun doctest-on-empty-source-line-p ()
- "Return true if the current line contains a bare prompt."
- (save-excursion
- (beginning-of-line)
- (and (doctest-on-source-line-p)
- (looking-at (concat doctest-prompt-re "$")))))
-
-(defun doctest-on-output-line-p ()
- "Return true if the current line is an output line."
- (save-excursion
- (beginning-of-line)
- ;; The line must not be blank or a source line.
- (when (not (or (doctest-on-source-line-p) (looking-at "[ \t]*$")))
- ;; The line must follow a source line, with no intervening blank
- ;; lines.
- (while (not (or (doctest-on-source-line-p) (looking-at "[ \t]*$")
- (= (point) (point-min))))
- (forward-line -1))
- (doctest-on-source-line-p))))
-
-(defun doctest-find-output-line (&optional limit)
- "Move forward to the next doctest output line (staying within
-the given bounds). Return the character position of the doctest
-output line if one was found, and false otherwise."
- (let ((found-it nil) ; point where we found an output line
- (limit (or limit (point-max)))) ; default value for limit
- (save-excursion
- ;; Keep moving forward, one line at a time, until we find a
- ;; doctest output line.
- (while (and (not found-it) (< (point) limit) (not (eobp)))
- (if (and (not (eolp)) (doctest-on-output-line-p))
- (setq found-it (point))
- (forward-line))))
- ;; If we found a doctest output line, then go to it.
- (if found-it (goto-char found-it))))
-
-(defun doctest-line-indentation ()
- "Helper for doctest-replace-output: return the whitespace indentation
-at the beginning of this line."
- (save-excursion
- (end-of-line)
- (re-search-backward "^\\( *\\)" nil t)
- (match-string 1)))
-
-(defun doctest-optionflags (&optional diff)
- "Return a string describing the optionflags that should be used
-by doctest. If DIFF is non-nil, then add the REPORT_UDIFF flag."
- (let ((flags "0"))
- (dolist (flag doctest-optionflags)
- (setq flags (concat flags "|" flag)))
- (if diff (concat flags "|" "REPORT_UDIFF") flags)))
-
-(defun doctest-results-loc-re ()
- "Return the regexp that should be used to look for doctest example
-location markers in doctest's output (based on which version of
-doctest was used"
- (cond
- ((equal doctest-results-py-version 'py21)
- doctest-py21-results-loc-re)
- ((equal doctest-results-py-version 'py24)
- doctest-py24-results-loc-re)
- (t (error "bad value for doctest-results-py-version"))))
-
-(defun doctest-results-buffer-name ()
- "Return the buffer name that should be used for the doctest results
-buffer. This is computed from the variable
-`doctest-results-buffer-name'."
- (doctest-replace-regexp-in-string
- "%[nfN]"
- (lambda (sym)
- (cond ((equal sym "%n") (buffer-name))
- ((equal sym "%N") (doctest-replace-regexp-in-string
- "[.]doctest$" "" (buffer-name) t))
- ((equal sym "%f") (buffer-file-name))))
- doctest-results-buffer-name t))
-
-(defun doctest-script (input-file globs-file diff)
- "..."
- (doctest-replace-regexp-in-string
- "%[tnflm]"
- (lambda (sym)
- (cond ((equal sym "%n") (buffer-name))
- ((equal sym "%f") (buffer-file-name))
- ((equal sym "%l") (doctest-optionflags diff))
- ((equal sym "%t") input-file)
- ((equal sym "%m") (or globs-file ""))))
- doctest-script t))
-
-(defun doctest-hide-example-source ()
- "Delete the source code listings from the results buffer (since it's
-easy enough to see them in the original buffer)"
- (save-excursion
- (set-buffer doctest-results-buffer)
- (toggle-read-only 0)
- (goto-char (point-min))
- (while (re-search-forward doctest-example-source-re nil t)
- (replace-match "" nil nil))
- (toggle-read-only t)))
-
-(defun doctest-results-buffer-valid-p ()
- "Return true if this buffer has a live results buffer; and that
-results buffer reports this buffer as its source buffer. (Two
-buffers in doctest-mode might point to the same results buffer;
-but only one of them will be equal to that results buffer's
-source buffer."
- (let ((cur-buf (current-buffer)))
- (and (buffer-live-p doctest-results-buffer)
- (save-excursion
- (set-buffer doctest-results-buffer)
- (equal cur-buf doctest-source-buffer)))))
-
-(defun doctest-update-mode-line (value)
- "Update the doctest mode line with the given string value. This
-is used to display information about asynchronous processes that
-are run by doctest-mode."
- (setq doctest-mode-line-process
- value)
- (force-mode-line-update t))
-
-(defun doctest-version ()
- "Echo the current version of `doctest-mode' in the minibuffer."
- (interactive)
- (message "Using `doctest-mode' version %s" doctest-version))
-
-(defun doctest-warn (msg &rest args)
- "Display a doctest warning message."
- (if (fboundp 'display-warning)
- (display-warning 'doctest (apply 'format msg args))
- (apply 'message msg args)))
-
-(defun doctest-debug (msg &rest args)
- "Display a doctest debug message."
- (if (fboundp 'display-warning)
- (display-warning 'doctest (apply 'format msg args) 'debug)
- (apply 'message msg args)))
-
-(defvar doctest-serial-number 0) ;used if broken-temp-names.
-(defun doctest-temp-name ()
- "Return a new temporary filename, for use in calling doctest."
- (if (memq 'broken-temp-names features)
- (let
- ((sn doctest-serial-number)
- (pid (and (fboundp 'emacs-pid) (emacs-pid))))
- (setq doctest-serial-number (1+ doctest-serial-number))
- (if pid
- (format "doctest-%d-%d" sn pid)
- (format "doctest-%d" sn)))
- (make-temp-name "doctest-")))
-
-(defun doctest-fontify-line (charpos)
- "Run font-lock-fontify-region on the line containing the given
-position."
- (if (and charpos (functionp 'font-lock-fontify-region))
- (save-excursion
- (goto-char charpos)
- (let ((beg (progn (beginning-of-line) (point)))
- (end (progn (end-of-line) (point))))
- (font-lock-fontify-region beg end)))))
-
-(defun doctest-do-auto-fill ()
- "If the current line is a soucre line or an output line, do nothing.
-Otherwise, call (do-auto-fill)."
- (cond
- ;; Don't wrap source lines.
- ((doctest-on-source-line-p) nil)
- ;; Don't wrap output lines
- ((doctest-on-output-line-p) nil)
- ;; Wrap all other lines
- (t (do-auto-fill))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Emacs Compatibility Functions
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Define compatible versions of functions that are defined
-;; for some versions of emacs but not others.
-
-;; Backwards compatibility: looking-back
-(cond ((fboundp 'looking-back) ;; Emacs 22.x
- (defalias 'doctest-looking-back 'looking-back))
- (t
- (defun doctest-looking-back (regexp)
- "Return true if text before point matches REGEXP."
- (save-excursion
- (let ((orig-pos (point)))
- ;; Search backwards for the regexp.
- (if (re-search-backward regexp nil t)
- ;; Check if it ends at the original point.
- (= orig-pos (match-end 0))))))))
-
-;; Backwards compatibility: replace-regexp-in-string
-(cond ((fboundp 'replace-regexp-in-string)
- (defalias 'doctest-replace-regexp-in-string 'replace-regexp-in-string))
- (t ;; XEmacs 21.x or Emacs 20.x
- (defun doctest-replace-regexp-in-string
- (regexp rep string &optional fixedcase literal)
- "Replace all matches for REGEXP with REP in STRING."
- (let ((start 0))
- (while (and (< start (length string))
- (string-match regexp string start))
- (setq start (+ (match-end 0) 1))
- (let ((newtext (if (functionp rep)
- (save-match-data
- (funcall rep (match-string 0 string)))
- rep)))
- (setq string (replace-match newtext fixedcase
- literal string)))))
- string)))
-
-;; Backwards compatibility: line-number
-(cond ((fboundp 'line-number) ;; XEmacs
- (defalias 'doctest-line-number 'line-number))
- ((fboundp 'line-number-at-pos) ;; Emacs 22.x
- (defalias 'doctest-line-number 'line-number-at-pos))
- (t ;; Emacs 21.x
- (defun doctest-line-number (&optional pos)
- "Return the line number of POS (default=point)."
- (1+ (count-lines 1
- (save-excursion (progn (beginning-of-line)
- (or pos (point)))))))))
-
-;; Backwards compatibility: process-live-p
-(cond ((fboundp 'process-live-p) ;; XEmacs
- (defalias 'doctest-process-live-p 'process-live-p))
- (t ;; Emacs
- (defun doctest-process-live-p (process)
- (and (processp process)
- (equal (process-status process) 'run)))))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Doctest Results Mode (output of doctest-execute-buffer)
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;; Register the font-lock keywords (xemacs)
-(put 'doctest-results-mode 'font-lock-defaults
- '(doctest-results-font-lock-keywords))
-
-;; Register the font-lock keywords (older versions of gnu emacs)
-(when (boundp 'font-lock-defaults-alist)
- (add-to-list 'font-lock-defaults-alist
- '(doctest-results-mode doctest-results-font-lock-keywords
- nil nil nil nil)))
-
-(defvar doctest-selected-failure nil
- "The location of the currently selected failure.
-This variable is uffer-local to doctest-results-mode buffers.")
-
-(defvar doctest-source-buffer nil
- "The buffer that spawned this one.
-This variable is uffer-local to doctest-results-mode buffers.")
-
-(defvar doctest-results-py-version nil
- "A symbol indicating which version of Python was used to generate
-the results in a doctest-results-mode buffer. Can be either the
-symbol `py21' or the symbol `py24'.
-This variable is uffer-local to doctest-results-mode buffers.")
-
-;; Keymap for doctest-results-mode.
-(defconst doctest-results-mode-map
- (let ((map (make-keymap)))
- (define-key map [return] 'doctest-select-failure)
- map)
- "Keymap for doctest-results-mode.")
-
-;; Syntax table for doctest-results-mode.
-(defvar doctest-results-mode-syntax-table nil
- "Syntax table used in `doctest-results-mode' buffers.")
-(when (not doctest-results-mode-syntax-table)
- (setq doctest-results-mode-syntax-table (make-syntax-table))
- (dolist (entry '(("(" . "()") ("[" . "(]") ("{" . "(}")
- (")" . ")(") ("]" . ")[") ("}" . "){")
- ("$%&*+-/<=>|'\"`" . ".") ("_" . "w")))
- (dolist (char (string-to-list (car entry)))
- (modify-syntax-entry char (cdr entry)
- doctest-results-mode-syntax-table))))
-
-;; Define the mode
-(defun doctest-results-mode ()
- "A major mode used to display the results of running doctest.
-See `doctest-mode'.
-
-\\{doctest-results-mode-map}"
- (interactive)
-
- ;; Declare local variables.
- (kill-all-local-variables)
- (make-local-variable 'font-lock-defaults)
- (make-local-variable 'doctest-selected-failure)
- (make-local-variable 'doctest-source-buffer)
- (make-local-variable 'doctest-results-py-version)
-
- ;; Define local variables.
- (setq major-mode 'doctest-results-mode
- mode-name "Doctest-Results"
- mode-line-process 'doctest-mode-line-process
- font-lock-defaults '(doctest-results-font-lock-keywords
- nil nil nil nil))
- ;; Define keymap.
- (use-local-map doctest-results-mode-map)
-
- ;; Define the syntax table.
- (set-syntax-table doctest-results-mode-syntax-table)
-
- ;; Enable font-lock mode.
- (if (featurep 'font-lock) (font-lock-mode 1)))
-
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; Doctest Mode
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-;; Register the font-lock keywords (xemacs)
-(put 'doctest-mode 'font-lock-defaults '(doctest-font-lock-keywords
- nil nil nil nil))
-
-;; Register the font-lock keywords (older versions of gnu emacs)
-(when (boundp 'font-lock-defaults-alist)
- (add-to-list 'font-lock-defaults-alist
- '(doctest-mode doctest-font-lock-keywords
- nil nil nil nil)))
-
-(defvar doctest-results-buffer nil
- "The output buffer for doctest-mode.
-This variable is buffer-local to doctest-mode buffers.")
-
-(defvar doctest-example-markers nil
- "A list mapping markers to the line numbers at which they appeared
-in the buffer at the time doctest was last run. This is used to find
-'original' line numbers, which can be used to search the doctest
-output buffer. It's encoded as a list of (MARKER . POS) tuples, in
-reverse POS order.
-This variable is buffer-local to doctest-mode buffers.")
-
-;; These are global, since we only one run process at a time:
-(defvar doctest-async-process nil
- "The process object created by the asynchronous doctest process")
-(defvar doctest-async-process-tempfiles nil
- "A list of tempfile names created by the asynchronous doctest process")
-(defvar doctest-async-process-buffer nil
- "The source buffer for the asynchronous doctest process")
-(defvar doctest-mode-line-process ""
- "A string displayed on the modeline, to indicate when doctest is
-running asynchronously.")
-
-;; Keymap for doctest-mode. n.b.: we intentionally define [tab]
-;; rather than overriding indent-line-function, since we don't want
-;; doctest-indent-source-line to be called by do-auto-fill.
-(defconst doctest-mode-map
- (let ((map (make-keymap)))
- (define-key map [backspace] 'doctest-electric-backspace)
- (define-key map [return] 'doctest-newline-and-indent)
- (define-key map [tab] 'doctest-indent-source-line)
- (define-key map ":" 'doctest-electric-colon)
- (define-key map "\C-c\C-v" 'doctest-version)
- (define-key map "\C-c\C-c" 'doctest-execute)
- (define-key map "\C-c\C-d" 'doctest-execute-with-diff)
- (define-key map "\C-c\C-n" 'doctest-next-failure)
- (define-key map "\C-c\C-p" 'doctest-prev-failure)
- (define-key map "\C-c\C-a" 'doctest-first-failure)
- (define-key map "\C-c\C-e" 'doctest-last-failure)
- (define-key map "\C-c\C-z" 'doctest-last-failure)
- (define-key map "\C-c\C-r" 'doctest-replace-output)
- (define-key map "\C-c|" 'doctest-execute-region)
- map)
- "Keymap for doctest-mode.")
-
-;; Syntax table for doctest-mode.
-(defvar doctest-mode-syntax-table nil
- "Syntax table used in `doctest-mode' buffers.")
-(when (not doctest-mode-syntax-table)
- (setq doctest-mode-syntax-table (make-syntax-table))
- (dolist (entry '(("(" . "()") ("[" . "(]") ("{" . "(}")
- (")" . ")(") ("]" . ")[") ("}" . "){")
- ("$%&*+-/<=>|'\"`" . ".") ("_" . "w")))
- (dolist (char (string-to-list (car entry)))
- (modify-syntax-entry char (cdr entry) doctest-mode-syntax-table))))
-
-;; Use doctest mode for files ending in .doctest
-;;;###autoload
-(add-to-list 'auto-mode-alist '("\\.doctest$" . doctest-mode))
-
-;;;###autoload
-(defun doctest-mode ()
- "A major mode for editing text files that contain Python
-doctest examples. Doctest is a testing framework for Python that
-emulates an interactive session, and checks the result of each
-command. For more information, see the Python library reference:
-
-
-`doctest-mode' defines three kinds of line, each of which is
-treated differently:
-
- - 'Source lines' are lines consisting of a Python prompt
- ('>>>' or '...'), followed by source code. Source lines are
- colored (similarly to `python-mode') and auto-indented.
-
- - 'Output lines' are non-blank lines immediately following
- source lines. They are colored using several doctest-
- specific output faces.
-
- - 'Text lines' are any other lines. They are not processed in
- any special way.
-
-\\{doctest-mode-map}"
- (interactive)
-
- ;; Declare local variables.
- (kill-all-local-variables)
- (make-local-variable 'font-lock-defaults)
- (make-local-variable 'doctest-results-buffer)
- (make-local-variable 'doctest-example-markers)
-
- ;; Define local variables.
- (setq major-mode 'doctest-mode
- mode-name "Doctest"
- mode-line-process 'doctest-mode-line-process
- font-lock-defaults '(doctest-font-lock-keywords
- nil nil nil nil))
-
- ;; Define keymap.
- (use-local-map doctest-mode-map)
-
- ;; Define the syntax table.
- (set-syntax-table doctest-mode-syntax-table)
-
- ;; Enable auto-fill mode.
- (auto-fill-mode 1)
- (setq auto-fill-function 'doctest-do-auto-fill)
-
- ;; Enable font-lock mode.
- (if (featurep 'font-lock) (font-lock-mode 1))
-
- ;; Run the mode hook.
- (run-hooks 'doctest-mode-hook))
-
-(provide 'doctest-mode)
-;;; doctest-mode.el ends here
diff --git a/elpa/python-mode-6.0.10/test/test-triple-strings.py b/elpa/python-mode-6.0.10/test/test-triple-strings.py
deleted file mode 100644
index d16cd157..00000000
--- a/elpa/python-mode-6.0.10/test/test-triple-strings.py
+++ /dev/null
@@ -1,78 +0,0 @@
-# Source:
-# http://launchpadlibrarian.net/22565844/test-triple-strings.py
-# Author: Ed Loper
-
-# This file tests python-mode's ability to handle triple-quoted
-# string. Here's how to tell if python-mode's doing the right thing:
-#
-# - All dashes (-) should *not* be marked as strings.
-# - All Os, Xs, s should be marked as strings.
-# - None of the quote marks around O's should be marked as strings.
-# - Quote marks that are between angle brackets (<...>) should be
-# marked as strings. Think of "X" as a pair of angle brackets
-# right next to one another. Also, quotes to the left of >s
-# and the right of with other characters should not affect
-# the fontificatin any; these characters were just used to make it
-# easier to see what the intended colorization is.)
-
-# Some easy cases:
-"O" 'O' "<'>" '<">'
- "O" 'O' "<'>" '<">'
- " O " ' O ' " < ' > " ' < " > '
-"""O""" '''O''' "<<<'>>>" '''<">'''
-
-# Some harder cases:
-"""<">""" '''<'>'''
-
-# Some tricky cases with backslashes.
-'''<'>''' '''<\'''>''' '''<\\'''
-
-# Some tricky cases with more than 3 quotes in a row.
-"O""" "O"
-"""">"""
-"""">>"""
-""""X">"""
-""""X"">"""
-"""O""""O" ""
-"""O""""" "O"
-"""O""""""<">"""
-"""O"""""""X">"""
-"""O""""""""X">"""
-"""O""" "<<<>>>>"
-"""""""""O""" "O"
-"""O""""O""O""O"""
-"""">""" """">>""" """">>>"""
-""""">""" """"">>""" """"">>>"""
-""""">>>""""O" """"">>>"""""
-"""""""""<""X"X"">"""
-
-# One version had a bug with comments ending in string markers: "
-"""O"""
-
- "" ""
-
-"""<">""" '''<'>'''
-
-# Spanning multiple lines:
-
-"<
->"
-
-'<
->'
-
-"""
-<
-<
-<
-<
-'
-X
-X
-X
-"
->
->
-"""
diff --git a/init.el b/init.el
index b52211cc..24dd0783 100644
--- a/init.el
+++ b/init.el
@@ -82,8 +82,6 @@
;; Python
;; =============================================================================
-(require 'python-mode)
-
;; Multi-lining for python.
(require 'multi-line-it)
@@ -100,10 +98,10 @@
(pymacs-load "ropemacs" "rope-")))
(defun python-tabs ()
- (setq tab-width 4,
+ (setq tab-width 4
indent-tabs-mode t
- py-smart-indentation nil
- python-indent 4))
+ python-indent-offset 4))
+(python-tabs)
;; Yelp always uses tabs.
(add-hook 'python-mode-hook 'python-tabs)