From a68ac22b64eafe1e1b8790a8a9490db1d407f818 Mon Sep 17 00:00:00 2001 From: Milan Zamazal Date: Fri, 6 May 2022 23:13:52 +0200 Subject: [PATCH] Initial version --- LICENSE | 674 +++++++++++++++++++++++++++++++++++++++++++++++++ README.org | 101 ++++++++ pip-frame.el | 172 +++++++++++++ screenshot.jpg | Bin 0 -> 48893 bytes 4 files changed, 947 insertions(+) create mode 100644 LICENSE create mode 100644 README.org create mode 100644 pip-frame.el create mode 100644 screenshot.jpg diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.org b/README.org new file mode 100644 index 0000000..ae76b35 --- /dev/null +++ b/README.org @@ -0,0 +1,101 @@ +#+TITLE: pip-frame.el + +pip-frame.el allows displaying a floating Emacs frame with Emacs +buffers in [[https://github.com/ch11ng/exwm][EXWM]] (and possibly other) environments. + +* Why? + +[[https://github.com/ch11ng/exwm][EXWM]], an Emacs window manager, supports floating windows, placed above +the tiled windows. But this doesn’t apply to Emacs buffers, there is +no way known to me to display an Emacs buffer in a floating window. + +Having floating Emacs buffers looking like Picture-In-Picture is still +useful. Imagine you start a long compilation and do other work in the +meantime. You must poll the compilation status regularly. Maybe the +compilation fails early and you don’t notice it until the next polling +interval. Or you run an upgrade and forget about it, only to discover +a couple of hours later that the upgrade has hung on an interactive +question. With a PIP frame displaying the compilation and upgrade +buffers, you always know what’s happening. + +People often use secondary monitors for such overviews. But this is +often overkill. It’s often hard to use all the space on contemporary +wide or even very wide monitors. I typically run Emacs with two +windows side by side, focusing mostly on the left one. The area close +to the right bottom screen corner is the least one used and it’s a +good place to place a PIP frame there. And it’s often better than +connecting a secondary monitor. + +In theory, it’s possible to create such a window in a standard Emacs +frame. But having a corner window is impractical, considering +applications changing window layouts (e.g. [[http://www.gnus.org][Gnus]]). And if workspaces +are used, e.g. [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Tab-Bars.html][Emacs tabs]], the window is still hidden when working in +a different workspace. Similar problems are experienced when using +tiling window managers other than EXWM. + +** Screenshot + +This is an example of an Emacs buffer displayed in a PIP frame using +this utility: + +#+ATTR_HTML: :alt An Emacs frame with a PIP frame +[[./screenshot.jpg]] + +* How? + +** Commands + +The PIP frame is created using =M-x pip-frame-add-buffer= command. You +can use the command repeatedly to add more buffers to the PIP frame. + +A buffer can be removed from the PIP frame using +=M-x pip-frame-remove-buffer= command. If the last buffer is removed +from the PIP frame, the frame is deleted. The frame can also be +deleted any time using =M-x pip-frame-delete-frame=. + +If the frame obscures anything important, you can move it elsewhere +with =M-x pip-frame-move=. + +There are no key bindings. Feel free to add them to your +configuration if needed. But these commands are not very frequent and +tools such as [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Icomplete.html][Icomplete mode]] or [[https://github.com/nonsequitur/smex][smex]] are likely to serve better than +tons of key shortcuts. + +** Customization + +Use =M-x customize-group RET pip-frame RET= to customize pip-frame.el. + +Some customization examples: + +- To place the PIP frame to right top rather than to right bottom: + + #+begin_src elisp + (setq pip-frame-parameters '((left . 0.9) (top . 0.1))) + #+end_src + +- To better distinguish the PIP frame from the rest of the screen (the + frame is intentionally kept out of EXWM hands and no window manager + borders are displayed), you can show it in inverse colors: + + #+begin_src elisp + (setq pip-frame-face-attributes '((:inverse-video . t))) + #+end_src + + Or with a different background: + + #+begin_src elisp + (setq pip-frame-face-attributes '((:background . "light gray"))) + #+end_src + +- To add internal borders to the PIP frame and make it resizable with + a mouse: + + #+begin_src elisp + (setq pip-frame-parameters (append pip-frame-parameters + '((drag-internal-border . t) + (internal-border-width . 20)))) + #+end_src + +----- + +/To Petr./ diff --git a/pip-frame.el b/pip-frame.el new file mode 100644 index 0000000..a68c0c1 --- /dev/null +++ b/pip-frame.el @@ -0,0 +1,172 @@ +;;; pip-frame.el --- PIP frame support -*- lexical-binding: t -*- + +;; Copyright (C) 2022 Milan Zamazal + +;; COPYRIGHT NOTICE +;; +;; 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 . + +;; Display a floating Emacs frame with selected buffers. +;; Similar to PIP on screens. Probably most useful in EXWM. +;; +;; Use `M-x pip-frame-add-buffer' to create the frame and add +;; additional buffers to it and remove the buffers with +;; `M-x pip-frame-remove-buffer' or close the whole frame with +;; `M-x pip-frame-delete-frame'. + +(require 'cl-lib) + +(defgroup pip-frame () + "Display PIP frame.") + +(defcustom pip-frame-scale 4 + "How many times to shrink the PIP frame relative to the display size." + :type 'number + :group 'pip-frame) + +(defcustom pip-frame-font-scale 2 + "How many times to reduce the font size in the PIP frame." + :type 'number + :group 'pip-frame) + +(defcustom pip-frame-move-step 0.1 + "Movement step relative to the display size in the given direction. + +Usually, the value should be larger than 0 and much smaller than 1." + :type 'number + :group 'pip-frame) + +(defcustom pip-frame-parameters + '((left . 0.9) + (top . 0.9)) + "Alist of frame parameters to use for the PIP frame. +The frame size is determined automatically using `pip-frame-scale' +custom option but it can be overriden here." + :type '(alist :key-type symbol :value-type sexp) + :group 'pip-frame) + +(defcustom pip-frame-face-attributes '() + "Alist of face attributes to modify `default' face in the PIP frame." + :type '(alist :key-type symbol :value-type sexp) + :group 'pip-frame) + +(defvar pip-frame--name "PIP-frame") + +(defun pip-frame--get-frame (&optional no-error) + (let ((frame (cl-find pip-frame--name (frame-list) + :key #'(lambda (f) (frame-parameter f 'name))))) + (or frame + (unless no-error + (error "No PIP frame"))))) + +(defun pip-frame--make-frame () + (let ((frame (make-frame `((name . ,pip-frame--name) + (unsplittable . t) + ,@pip-frame-parameters + (width . ,(/ 1.0 pip-frame-scale)) + (height . ,(/ 1.0 pip-frame-scale))))) + (frame-inhibit-implied-resize t) + (face-height (round (/ (face-attribute 'default :height) pip-frame-font-scale)))) + (set-face-attribute 'default frame :height face-height) + (mapc #'(lambda (p) (set-face-attribute 'default frame (car p) (cdr p))) + pip-frame-face-attributes) + frame)) + +(defun pip-frame-delete-frame () + "" + (interactive) + (delete-frame (pip-frame--get-frame))) + +(defun pip-frame--buffers () + (mapcar #'window-buffer (window-list (pip-frame--get-frame)))) + +(defun pip-frame--add-additional-buffer () + (let* ((windows (window-list (pip-frame--get-frame))) + (sizes (mapcar #'(lambda (w) + (let ((width (window-body-width w t)) + (height (window-body-height w t))) + (cons (+ (* width width) (* height height)) + w))) + windows)) + (largest (cdr (cl-first (cl-sort sizes #'> :key #'car)))) + (side (if (> (window-body-width largest t) (* 2 (window-body-height largest t))) + 'right + 'below)) + (new-window (split-window largest nil side))) + (set-window-buffer new-window (current-buffer)))) + +;;;###autoload +(defun pip-frame-add-buffer () + "" + (interactive) + (let ((frame (or (pip-frame--get-frame t)))) + (if frame + (pip-frame--add-additional-buffer) + (pip-frame--make-frame)))) + +(defun pip-frame-remove-buffer (buffer-name) + "" + (interactive (list (completing-read "Remove PIP buffer: " + (mapcar #'buffer-name (pip-frame--buffers)) + nil t))) + (let* ((windows (window-list (pip-frame--get-frame))) + (windows-to-delete (cl-remove buffer-name windows + :key #'(lambda (w) (buffer-name (window-buffer w))) + :test-not #'string=))) + (if (= (length windows-to-delete) (length windows)) + (pip-frame-delete-frame) + (mapc #'delete-window windows-to-delete)))) + +(defun pip-frame--move (x y) + (let ((frame (pip-frame--get-frame))) + (set-frame-parameter frame 'left (+ (frame-parameter frame 'left) x)) + (set-frame-parameter frame 'top (+ (frame-parameter frame 'top) y)))) + +(defun pip-frame--move-step (vertical) + (if (integerp pip-frame-move-step) + pip-frame-move-step + (let ((workarea (cdr (assoc 'workarea (cl-first (display-monitor-attributes-list)))))) + (round (* pip-frame-move-step (nth (if vertical 3 2) workarea)))))) + +(defun pip-frame-move-left () + (interactive) + (pip-frame--move (- (pip-frame--move-step nil)) 0)) + +(defun pip-frame-move-right () + (interactive) + (pip-frame--move (pip-frame--move-step nil) 0)) + +(defun pip-frame-move-up () + (interactive) + (pip-frame--move 0 (- (pip-frame--move-step t)))) + +(defun pip-frame-move-down () + (interactive) + (pip-frame--move 0 (pip-frame--move-step t))) + +(defvar pip-frame-move-map + (let ((map (make-sparse-keymap))) + (define-key map (kbd "") 'pip-frame-move-left) + (define-key map (kbd "") 'pip-frame-move-right) + (define-key map (kbd "") 'pip-frame-move-up) + (define-key map (kbd "") 'pip-frame-move-down) + map)) + +(defun pip-frame-move () + "" + (interactive) + (message "Use arrow keys to move the frame, any other key to quit") + (set-transient-map pip-frame-move-map t)) + +(provide 'pip-frame) diff --git a/screenshot.jpg b/screenshot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..953984fa16460d7e5c79e8442fe63eb007ab788f GIT binary patch literal 48893 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 literal 0 HcmV?d00001