«Ричард Столмен Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and ...»
Руководство по GNU Emacs
Руководство по GNU Emacs
Тринадцатая редакция, обновлено для Emacs версии 20.7
Ричард Столмен
Permission is granted to make and distribute verbatim copies of this manual provided the
copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modied versions of this manual under the conditions for verbatim copying, provided also that the sections entitled “The GNU Manifesto”, “Distribution” and “GNU General Public License” are included exactly as in the original, and provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modied versions, except that the sections entitled “The GNU Manifesto”, “Distribution” and “GNU General Public License” may be included in a translation approved by the Free Software Foundation instead of in the original English.
Тринадцатая редакция обновлено для Emacs версии 20.7, июль c Free Software Foundation, Inc., 1985-1987, 1993- c Перевод. Н. Ю. Иванова, c Перевод. А. Я. Отт, О. С. Тихонов, ISBN 5-85593-133- Ричард Столмен "Руководство по GNU Emacs" Издано АНО"ИЛКиРЛ" Лицензия ЛР N 066121 от 22.09.1998г.
Подписано к печати 25.11.1999г.
Формат 70х100 1/ Тираж 1000 экз. Тип.зак.
ОАО "АСТРА СЕМЬ" Москва, Филипповский пер., Предисловие Предисловие Это руководство описывает использование и простую настройку редактора Emacs. От читателя не требуется быть программистом; для простой настройки не надо обладать навыками в программировании. Те пользователи, которые не интересуются настройкой, могут пропускать рассыпанные по тексту краткие советы по ней.
Это, главным образом, справочное руководство, но его также можно использовать в качестве учебника. Для тех, кто еще совсем не знаком с Emacs, неплохой идеей будет начать с обучающей диалоговой программы. Чтобы вызвать ее, запустите Emacs и наберите C-h t. Тогда вы сможете изучить Emacs, используя его в специально разработанном файле, который описывает команды, говорит, когда их использовать, а затем объясняет полученные с помощью этих команд результаты.
При первом чтении просто бегло просмотрите первую и вторую главы, в которых описана принятая в этом руководстве система обозначений и общий вид экрана в Emacs. Обратите внимание, на какие вопросы есть ответы в этих главах, чтобы вы могли вернуться к ним позже. После прочтения четвертой главы вы должны попрактиковаться с рассмотренными в ней командами. Следующие несколько глав описывают часто используемые фундаментальные методы и понятия. Вам нужно понять их до конца, экспериментируя с ними, если это необходимо.
Главы с четырнадцатой по девятнадцатую описывают средства среднего уровня, полезные в любых видах редактирования. Глава 20 и последующие описывают возможности, которые вы можете захотеть использовать, а можете и не захотеть; причитайте эти главы, когда эти возможности вам понадобятся.
Если вам кажется, что Emacs работает неправильно, прочтите главу о решении проблем. Она объясняет, как справиться с некоторыми часто возникающими трудностями (см. Раздел 32.2 [Неполадки], с. 372), а также когда и как нужно сообщать об ошибках в Emacs (см. Раздел 32.3 [Ошибки в Emacs], с. 375).
Чтобы отыскать документацию на отдельную команду, загляните в именной указатель.
Ключи (литеральные команды) и имена команд перечислены в отдельных именных указателях. Также имеется словарь с перекрестными ссылками на каждый термин.
Данное руководство доступно в печатной форме и в виде Info-файла. Info-файл служит для диалогового чтения с программой Info; это будет первичным способом просмотра интерактивной документации в системе GNU. И этот Info-файл, и сама программа Info распространяются вместе с GNU Emacs. Печатная книга и Info-файл содержат по сути один тот же текст и создаются из общего исходного файла, который также распространяется вместе с GNU Emacs.
GNU Emacs — член семейства Emacs-редакторов, насчитывающего большое число редакторов, построенных на общих организационных принципах. Чтобы почитать о философии, лежащей в основе Emacs, и уроках, полученных из его развития, выпишите копию AI memo 519a "Emacs, the Extensible, customizable Self-Documenting Display Editor", в Publication Department, Articial Intelligence Lab, 545 Tech Square, Cambridge, MA 02139, USA. По последним сообщениям они стоили $2.25 за копию. Другая полезная публикация — это LCS TM-165, "A Cookbook for an Emacs", Craig Finseth, доступная из Publication Department, Laboratory for Computer Seince, 543 Tech Square, Cambridge, MA 02139, USA. Сегодняшняя цена $3.
Эта редакция руководства предназначена для использования с GNU Emacs, установленном в системах GNU и Unix. GNU Emacs также можно использовать в системах VMS, MS-DOS (иначе называемой MS-DOG), Windows NT и Windows 95. Эти системы придерживаются другого синтаксиса имен файлов; кроме того, VMS и MS-DOS не поддерживают всех возможностей GNU Emacs. В этом руководстве мы не пытаемся описать применение Emacs в системе VMS. Для получения информации об использовании Emacs в MS-DOS смотрите Приложение C [MS-DOS], с. 403.
4 Руководство по GNU Emacs Распространение Распространение GNU Emacs — свободная программа; это значит, что всякий может свободно использовать и повторно распространять его при соблюдении определенных условий. GNU Emacs не является общественным достоянием; на него действуют авторские права, и на его распространение есть ограничения, но эти ограничения разработаны так, чтобы позволить все, что может захотеть хороший благонамеренный гражданин. Что не разрешается, так это пытаться мешать другим и далее совместно пользоваться любой версией GNU Emacs, которую они могли бы от вас получить. Точные условия находятся в Универсальной Общественной Лицензии GNU, которая поставляется с Emacs и также идет в следующем разделе.
Один из способов получить копию GNU Emacs — взять ее кого-то, у кого Emacs уже есть. Вам не нужно просить нашего разрешения либо что-то еще, просто скопируйте ее.
Если вы имеете доступ к Internet, вы можете получить последнюю версию дистрибутива GNU Emacs по анонимному FTP; подробности смотрите в файле ‘etc/FTP’ в поставке Emacs.
Вы можете также получить GNU Emacs, когда покупаете компьютер. Производители компьютеров могут распространять копии на тех же самых условиях, что и все остальные.
Эти условия требуют от них дать вам полные исходные тексты, включая любые изменения, сделанные ими, и разрешить вам распространять полученный от них GNU Emacs согласно обычным условиям Универсальной Общественной Лицензии. Другими словами, эта программа должна быть свободной для вас, когда вы ее получаете, а не только свободной для производителей.
Вы также можете заказать копии GNU Emacs у Фонда Свободного ПО на компактдиске. Это удобный и надежный способ получить копию; это также хороший способ помочь средствами нашей работе. (Фонд всегда получал большую часть средств таким способом.) Форма заказа включена в файл ‘etc/ORDERS’ в поставке Emacs, она есть и на нашем Web-сайте http://www.gnu.org/order/order.html. Для получения дополнительной информации пишите по адресу Free Software Foundation 59 Temple Place, Suite Boston, MA 02111-1307 USA Доход от платы за распространение идет на поддержку целей фонда: разработки нового свободного программного обеспечения и развития наших существующих программ, включая GNU Emacs.
Если вы находите GNU Emacs полезным, пожалуйста пришлите взнос в Фонд Свободного программного обеспечения, чтобы поддержать нашу работу. Пожертвования в Фонд Свободного ПО в США обладают налоговой скидкой. Если вы используете GNU Emacs на работе, пожалуйста, предложите вашей компании сделать взнос. Если политика компании недружелюбно относится к идее пожертвования благотворительной организации, вы можете вместо этого предложить время от времени заказывать у Фонда Свободного ПО компакт-диски или подписаться на регулярные обновления.
В разработке GNU Emacs принимали участие Пер Абрахамсен, Джей К. Адамс, Джо Арсено, Боаз Бен-Цви, Джим Блэнди, Дэвид М. Браун, Теренс М. Бренон, Питер Бретон, Фрэнк Брец, Кевин Броди, Винсент Броман, Нейл В. Ван Дайк, Мортен Велиндер, Ульрик Виет, Майк Вильямс, Родни Витби, Феликс С. Т. Ву, Стивен А. Вуд, Барри Ворсо, Джоан Вроманс, Том Вурглер, Кейт Габриэльски, Кевин Галахер, Кевин Галло, Дуг Гвин, Говард Гейл, Анри Гийом, Дэвид Гиллеспи, Стивен Гильди, Боб Гликстайн, Борис Голдовски, Микеланджело Григни, Майкл Гшвинд, Матье Девин, Майкл ДеКорте, Гари Делп, Кайл Джонс, Майкл К. Джонсон, Эрик Динг, Карстен Доминик, Скотт Дрейвс, Виктор Духовни, Джеми Завински, Эли Зарецкий, Нил Зиринг, Вильям Зоммерфельд, Ларс Ингебригтсен, Эндрю Иннес, Джон Итон, Томодзи Кагатани, Говард Кайе, Майкл Кайфер, Брюстер Кале, Билл Карпентер, Дуг Катинг, Давид Кауфман, Генри Кауц, Джеф Кёнинг, Ричард Кинг, Джеймс Кларк, Майк Кларксон, Глин Клементс, Дэвид Когедал, Ларри К.
Колодни, Роберт Кравиц, Себастиан Кремер, Эндрю Ксилаг, Даниель ЛаЛиберт, Аарон Ларсон, Джеймс Р. Ларус, Фредерик Лепье, Ларс Линдберг, Эрик Лудлам, Роланд МакГрат, Билл Манн, Кен Манхаймер, Брайан Марик, Бенгт Мартенсон, Чарли Мартин, Саймон Маршалл, Дэвид Меггинсон, Томас Мей, Нейл М. Мейгер, Вейн Месард, Ричард Млинарик, Кейт Мур, Эрик Наггум, Юрген Никельсен, Томас Нойман, Джефф Норден, Эндрю Норман, Майк Ньютон, Джефф Пек, Дамон Антон Пермезель, Том Перрин, Йенс Петерсен, Кристиан Плонт, Франческо Поторти, Майкл Д. Прандж, Дэниел Пфайфер, Фред Пьерестегай, Эшвин Рам, Пол Рейли, Эрик С. Реймонд, Эдвард М. Рейнгольд, Роб Рипел, Роланд Б. Робертс, Джон Робинсон, Гилермо Х. Розас, Вильям Розенблат, Денни Розендаль, Ивар Руммелхоф, Вольфганг Рупрехт, Масахико Сато, Мануэль Серрано, Эспен Скоглунд, Рик Сладки, Линн Слейтер, Дэвид Смит, Крис Смит, Пол Д. Смит, Майкл Статс, Аке Стенхофф, Питер Стефенсон, Джонатан Стигельман, Стив Страссман, Джеймс Б. Сэлем, Йенс Т. Бергер Тиэльман, Спенсер Томас, Джим Томпсон, Эд Уилкинсон, Масанобу Умеда, Дейл Р. Уорли, Джозеф Брайан Уэллс, Фредерик Фернбак, Фред Фиш, Карл Фогель, Джефри Фолькер, Гари Фостер, Ной Фридмен, Джон Хайдеман, Кеничи Ханда, К. Шейн Хартман, Маркус Херич, Манабу Хигасида, Карл Хойер, Андерс Холст, Курт Хорник, Том Хулдер, Крис Хэнсон, Рето Циммерман, Ян Т. Циммерман, Станислав Шалунов, Марк Шапиро, Рэндел Шварц, Вильям Шелтер, Ричард Шерман, Олин Шиверс, Ральф Шлайхер, Грегор Шмид, Майкл Шмидт, Рональд С. Шнель, Филипп Шнобелен, Стефан Шоэф, Сема Штейнгольд, Ганс Чалупски, Боб Чассел, Рольф Эберт, Стивен Эглен, Торбьорн Эйнарсон, Цугутомо Энами, Ганс Генрик Эриксен, Майкл Эрнст и Ата Этемади.
GNU GENERAL PUBLIC LICENSE
GNU GENERAL PUBLIC LICENSE
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software—to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation’s software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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.
We protect your rights with two steps: (1) copyright the software, and (2) oer you this license which gives you legal permission to copy, distribute and/or modify the software.
Also, for each author’s protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modied by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reect on the original authors’ reputations.
Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in eect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone’s free use or not licensed at all.
The precise terms and conditions for copying, distribution and modication follow.
TERMS AND CONDITIONS FOR COPYING,
DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The “Program”, below, refers to any such program or work, and a “work based on the Program” means either the Program or any derivative work under copyright law:that is to say, a work containing the Program or a portion of it, either verbatim or with modications and/or translated into another language. (Hereinafter, translation is included without limitation in the term “modication”.) Each licensee is addressed as “you”.
Activities other than copying, distribution and modication are not covered by this License;
they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
You may charge a fee for the physical act of transferring a copy, and you may at your option oer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
a. You must cause the modied les to carry prominent notices stating that you changed b. You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
c. If the modied program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modied work as a whole. If identiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
a. Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b. Accompany it with a written oer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed
GNU GENERAL PUBLIC LICENSE
under the terms of Sections 1 and 2 above on a medium customarily used for software c. Accompany it with the information you received as to the oer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an oer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface denition les, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.If distribution of executable or object code is made by oering access to copy from a designated place, then oering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works.
These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients’ exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded.
In such case, this License incorporates the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may dier in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program species a version number of this License which applies to it and “any later version”, you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are dierent, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation;
we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
MODIFY AND/OR REDISTRIBUTE 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.
END OF TERMS AND CONDITIONS
GNU GENERAL PUBLIC LICENSE
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 le to most eectively convey the exclusion of warranty; and each le should have at least the “copyright” line and a pointer to where the full notice is found.
one line to give the program’s name and an idea of what it does.
Copyright (C) 19yy name of author This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 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, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision 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’ The hypothetical commands ‘show w’ and ‘show c’ should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than ‘show w’ and ‘show c’; they could even be mouse-clicks or menu items—whatever suits your program.
You should also get your employer (if you work as a programmer) or your school, if any, to sign a “copyright disclaimer” for the program, if necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program ‘Gnomovision’ (which makes passes at compilers) written by James Hacker.
signature of Ty Coon, 1 April Ty Coon, President of Vice This 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 Library General Public License instead of this License.
12 Руководство по GNU Emacs
УНИВЕРСАЛЬНАЯ ОБЩЕСТВЕННАЯ ЛИЦЕНЗИЯ GNU
УНИВЕРСАЛЬНАЯ ОБЩЕСТВЕННАЯ
ЛИЦЕНЗИЯ GNU
Copyright c 1989, 1991 Free Software Foundation, Inc.59 Temple Place, Suite 330, Boston, MA 02111-1307 USA c Перевод. О.В. Кузина, В.М. Юфа, c Перевод. О.С. Тихонов, Этот документ можно копировать, а также распространять его дословные копии, однако вносить в него изменения запрещено.
Преамбула Лицензии на большую часть программного обеспечения (ПО) составлены так, чтобы лишить вас свободы совместно использовать и изменять его. В противоположность этому, предназначение Универсальной Общественной Лицензии GNU состоит в том, чтобы гарантировать вашу свободу совместно использовать и изменять свободное ПО, т.е. обеспечить свободу ПО для всех его пользователей. Данная Универсальная Общественная Лицензия применима к большей части ПО Фонда Свободного ПО и ко всем другим программам, чьи авторы принимают на себя обязательство ее использовать. (Для некоторых программ Фонда Свободного ПО вместо нее применяется Универсальная Общественная Лицензия GNU для библиотек.) Вы тоже можете применить ее к своим программам.
Когда мы говорим о свободном ПО, мы имеем в виду свободу, а не бесплатность. Наши Универсальные Общественные Лицензии разрабатывались для того, чтобы гарантировать, что вы пользуетесь свободой распространять копии свободного ПО (и при желании получать за это вознаграждение); что вы получаете исходный код или можете получить его, если захотите; что вы можете изменять ПО или использовать его части в новых свободных программах; и что вы знаете обо всех этих правах.
Чтобы защитить ваши права, нам нужно ввести некоторые ограничения, которые запретят кому бы то ни было отказывать вам в этих правах или потребовать от вас отказаться от этих прав. Эти ограничения накладывают на вас некоторые обязательства, если вы распространяете копии ПО или изменяете его.
Например, если вы распространяете копии такой программы бесплатно или за вознаграждение, вы должны предоставить получателям все права, которыми обладаете вы сами. Вы должны гарантировать, что они тоже получат или смогут получить исходный код. Наконец, вы должны показать им текст данных условий, чтобы они знали о своих правах.
Мы защищаем ваши права в два этапа: (1) сохраняем авторские права на ПО и (2) предлагаем вам эту лицензию, которая дает вам законное право копировать, распространять и/или модифицировать ПО.
Кроме того, в целях защиты как каждого автора, так и нас, мы хотим удостовериться, что каждый понимает, что гарантий на это свободное ПО нет. Если ПО модифицируется и передается кем-то еще, мы хотим, чтобы получатели ПО знали, что то, что у них есть, — это не оригинал, чтобы любые проблемы, созданные другими, не отразились на репутации первоначальных авторов.
И наконец, каждой свободной программе постоянно угрожают патенты на ПО. Мы хотим избежать той опасности, что повторные распространители свободной программы самостоятельно получат патенты, делая программу таким образом частной собственностью. Чтобы предотвратить это, мы со всей определенностью заявляем, что любой патент должен быть либо предоставлен всем для свободного использования, либо не предоставлен никому.
Ниже следуют точные определения и условия для копирования, распространения и модификации.
ОПРЕДЕЛЕНИЯ И УСЛОВИЯ ДЛЯ КОПИРОВАНИЯ,
РАСПРОСТРАНЕНИЯ И МОДИФИКАЦИИ
0. Эта Лицензия применима к любой программе или другому произведению, содержащему уведомление, помещенное держателем авторских прав и сообщающее о том, что оно может распространяться при условиях, оговоренных в данной Универсальной Общественной Лицензии. В дальнейшем термин “Программа” относится к любой такой программе или произведению, а термин “произведение, основанное на Программе” означает Программу или любое произведение, содержащее Программу или ее часть, дословную, или модифицированную, и/или переведенную на другой язык. (Здесь и далее перевод включается без ограничений в понятие “модификация”.) Каждый обладатель лицензии адресуется как “вы”.Виды деятельности, не являющиеся копированием, распространением или модификацией, не охватываются данной Лицензией; они лежат за пределами ее влияния. Использование Программы по ее функциональному назначению не ограничено, а выходные данные Программы охватываются этой Лицензией, только если их содержание является произведением, основанным на Программе (вне зависимости от того, были ли они получены в процессе использования Программы). Являются ли они таковыми, зависит от того, что именно делает Программа.
1. Вы можете копировать и распространять дословные копии исходного кода Программы по его получении на любом носителе, при условии что вы соответствующим образом помещаете на видном месте в каждой копии соответствующее уведомление об авторских правах и отказ от предоставления гарантий; оставляете нетронутыми все уведомления, относящиеся к данной Лицензии и к отсутствию каких-либо гарантий;
и передаете всем другим получателям Программы копию данной Лицензии вместе с Программой.
Вы можете назначить плату за физический акт передачи копии и можете по своему усмотрению предоставлять гарантии за вознаграждение.
2. Вы можете изменять свою копию или копии Программы или любой ее части, создавая таким образом произведение, основанное на Программе, и копировать и распространять эти модификации или произведение в соответствии с Разделом 1, приведенным выше, при условии, что вы выполните все нижеследующие условия:
a. Вы обязаны снабдить модифицированные файлы заметными уведомлениями, содержащими указания на то, что вы изменили файлы, и дату каждого изменения.
b. Вы обязаны предоставить всем третьим лицам лицензию на бесплатное использование каждого произведения, которое вы распространяете или публикуете, целиком, и которое полностью или частично содержит Программу или какую-либо ее часть, на условиях, оговоренных в данной Лицензии.
c. Если модифицированная программа обычно читает команды в интерактивном режиме работы, вы должны сделать так, чтобы при запуске для работы в таком интерактивном режиме обычным для нее способом она печатала или выводила на экран объявление, содержащее соответствующее уведомление об авторских правах и уведомление о том, что гарантий нет (или, наоборот, сообщающее о том, что вы обеспечиваете гарантии), и что пользователи могут повторно распространять программу при этих условиях, и указывающее пользователю, как просмотреть копию данной Лицензии. (Исключение: если сама Программа работает в интерактивном режиме, но обычно не выводит подобных сообщений, то ваше произведение, основанное на Программе, не обязано выводить объявление.)
УНИВЕРСАЛЬНАЯ ОБЩЕСТВЕННАЯ ЛИЦЕНЗИЯ GNU
Эти требования применяются к модифицированному произведению в целом. Если известные части этого произведения не были основаны на Программе и могут обоснованно считаться независимыми и самостоятельными произведениями, то эта Лицензия и ее условия не распространяются на эти части, если вы распространяете их как отдельные произведения. Но если вы распространяете эти части как часть целого произведения, основанного на Программе, то вы обязаны делать это в соответствии с условиями данной Лицензии, распространяя права получателей лицензии на все произведение и, таким образом, на каждую часть, вне зависимости от того, кто ее написал.Таким образом, содержание этого раздела не имеет цели претендовать на ваши права на произведение, написанное полностью вами, или оспаривать их; цель скорее в том, чтобы реализовать право управлять распространением производных или коллективных произведений, основанных на Программе.
Кроме того, простое нахождение другого произведения, не основанного на этой Программе, совместно с Программой (или с произведением, основанным на этой Программе) на одном носителе для постоянного хранения или распространяемом носителе не распространяет действие этой Лицензии на другое произведение.
3. Вы можете копировать и распространять Программу (или произведение, основанное на ней) согласно Разделу 2) в объектном коде или в выполнимом виде в соответствии с Разделами 1 и 2, приведенными выше, при условии, что вы также выполните одно из следующих требований:
a. Сопроводите ее полным соответствующим машиночитаемым исходным кодом, который должен распространяться в соответствии с Разделами 1 и 2, приведенными выше, на носителе, который обычно используется для обмена ПО; или, b. Сопроводите ее письменным предложением, действительным по крайней мере в течение трех лет, предоставить любому третьему лицу за вознаграждение, не превышающее стоимость физического акта изготовления копии, полную машиночитаемую копию соответствующего исходного кода, подлежащую распространению в соответствии с Разделами 1 и 2, приведенными выше; или c. Сопроводите ее информацией, полученной вами в качестве предложения распространить соответствующий исходный код. (Эта возможность допустима только для некоммерческого распространения, и только если вы получили программу в объектном коде или в исполняемом виде с предложением в соответствии с Пунктом Исходный код для произведения означает его вид, предпочтительный для выполнения в нем модификаций. Для исполняемого произведения полный исходный код означает все исходные коды для всех модулей, которые он содержит, плюс любые связанные с произведением файлы определения интерфейса, плюс сценарии, используемые для управления компиляцией и установкой исполняемого произведения. Однако, в виде особого исключения распространяемый исходный код не обязан включать то, что обычно предоставляется (как в объектных, так и в исходных кодах) с основными компонентами (компилятор, ядро и так далее) операционной системы, под управлением которой работает исполняемое произведение, за исключением случая, когда сам компонент сопровождает исполняемое произведение.
Если распространение исполняемого произведения или объектного кода происходит путем предоставления доступа для копирования с обозначенного места, то предоставление доступа для копирования исходного кода с того же места считается распространением исходного кода, даже если третьи лица не принуждаются к копированию исходного кода вместе с объектным кодом.
4. Вы не можете копировать, изменять, повторно лицензировать, или распространять Программу никаким иным способом, кроме явно предусмотренных данной Лицензией. Любая попытка копировать, изменять или распространять Программу каким-либо другим способом или с измененной лицензией неправомерна и автоматически прекращает ваши права, данные вам этой Лицензией. Однако лицензии лиц, получивших от вас копии или права согласно данной Универсальной Общественной Лицензии, не прекращают своего действия, если эти лица полностью соблюдают условия.
5. Вы не обязаны соглашаться с этой Лицензией, так как вы не подписывали ее. Однако, ничто, кроме этой Лицензии, не дает вам право изменять или распространять эту Программу или основанные на ней произведения. Эти действия запрещены законом, если вы не принимаете к соблюдению эту Лицензию. А значит, изменяя или распространяя Программу (или произведение, основанное на Программе), вы изъявляете свое согласие с этой Лицензией и всеми ее условиями о копировании, распространении или модификации Программы или основанных на ней произведений.
6. Каждый раз, когда вы повторно распространяете Программу (или любое произведение, основанное на Программе), получатель этого произведения автоматически получает от первоначального выдавшего лицензию лица свою лицензию на копирование, распространение или модификацию Программы, обсуждаемую в этих определениях и условиях. Вы не можете налагать каких-либо дополнительных ограничений на осуществление получателем прав, предоставленных данным документом. Вы не несете ответственности за соблюдение третьими лицами условий этой Лицензии.
7. Если в результате судебного разбирательства, или обвинения в нарушении патента или по любой другой причине (не обязательно связанной с патентами), вам навязаны условия, противоречащие данной Лицензии (по постановлению суда, по соглашению или иным способом), это не освобождает вас от соблюдения Лицензии. Если вы не можете заниматься распространением так, чтобы одновременно удовлетворить требованиям и этой Лицензии, и всем другим требованиям, то вы не должны заниматься распространением Программы. Например, если патент не позволяет безвозмездное повторное распространение Программы всем, кто получил копии от вас непосредственно или через посредников, то единственным способом удовлетворить и патенту, и этой Лицензии будет ваш полный отказ от распространения Программы.
Если какая-либо часть этого раздела не имеет силы или не может быть исполнена при некоторых конкретных обстоятельствах, то подразумевается, что имеет силу остальная часть раздела, а при других обстоятельствах имеет силу весь Раздел.
Цель этого раздела — не побудить вас делать заявления о нарушениях прав на патент, или заявлять о других претензиях на право собственности или оспаривать правильность подобных претензий; единственная цель этого раздела — защита целостности системы распространения свободного ПО, которая реализуется использованием общественных лицензий. Многие люди внесли щедрый вклад в широкий спектр ПО, распространяемого по этой системе, полагаясь на ее согласованное применение; только автору принадлежит право решать, хочет ли он или она распространять ПО в этой системе или в какой-то другой, и получатель лицензии не может влиять на принятие этого решения.
Этот раздел предназначен для того, чтобы тщательно прояснить, что полагается следствием из остальной части данной Лицензии.
8. Если распространение и/или применение Программы ограничено в ряде стран либо патентами, либо авторскими правами на интерфейсы, первоначальный обладатель авторских прав, выпускающий Программу с этой Лицензией, может добавить явное ограничение на географическое распространение, исключив такие страны, так что распространение разрешается только в тех странах, которые не были исключены. В этом случае данная Лицензия включает в себя это ограничение, как если бы оно было написано в тексте данной Лицензии.
9. Фонд Свободного ПО может время от времени публиковать пересмотренные и/или новые версии Универсальной Общественной Лицензии. Такие новые версии будут
УНИВЕРСАЛЬНАЯ ОБЩЕСТВЕННАЯ ЛИЦЕНЗИЯ GNU
сходны по духу с настоящей версией, но могут отличаться в деталях, направленных на новые проблемы или обстоятельства.Каждой версии придается отличительный номер. Если в Программе указывается, что к ней относится некоторый номер версии данной Лицензии и “любая последующая версия”, вы можете по выбору следовать определениям и условиям либо данной версии, либо любой последующей версии, опубликованной Фондом Свободного ПО. Если в Программе не указан номер версии данной Лицензии, вы можете выбрать любую версию, когда-либо опубликованную Фондом Свободного ПО.
10. Если вы хотите встроить части Программы в другие свободные программы с иными условиями распространения, напишите автору с просьбой о разрешении. Для ПО, которое охраняется авторскими правами Фонда Свободного ПО, напишите в Фонд Свободного ПО; мы иногда делаем такие исключения. Наше решение будет руководствоваться двумя целями: сохранения свободного статуса всех производных нашего свободного ПО и содействия совместному и повторному использованию ПО вообще.
НИКАКИХ ГАРАНТИЙ
11. ПОСКОЛЬКУ ПРОГРАММА ПРЕДОСТАВЛЯЕТСЯ БЕСПЛАТНО, НА ПРОГРАММУ НЕТ ГАРАНТИЙ В ТОЙ МЕРЕ, КАКАЯ ДОПУСТИМА ПРИМЕНИМЫМ ЗАКОНОМ. ЗА ИСКЛЮЧЕНИЕМ ТЕХ СЛУЧАЕВ, КОГДА ОБРАТНОЕ ЗАЯВЛЕНО В ПИСЬМЕННОЙ ФОРМЕ, ДЕРЖАТЕЛИ АВТОРСКИХ ПРАВ И/ИЛИ ДРУГИЕ СТОРОНЫ ПОСТАВЛЯЮТ ПРОГРАММУ "КАК ОНА ЕСТЬ" БЕЗ КАКОГОЛИБО ВИДА ГАРАНТИЙ, ВЫРАЖЕННЫХ ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ,
ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ, ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. ВЕСЬ РИСК В ОТНОШЕНИИ КАЧЕСТВА И ПРОИЗВОДИТЕЛЬНОСТИ ПРОГРАММЫ ОСТАЕТСЯ ПРИ ВАС. ЕСЛИ ПРОГРАММА ОКАЖЕТСЯ ДЕФЕКТНОЙ, ВЫ ПРИНИМАЕТЕ НА СЕБЯ СТОИМОСТЬ ВСЕГО НЕОБХОДИМОГО ОБСЛУЖИВАНИЯ, ВОССТАНОВЛЕНИЯ ИЛИ ИСПРАВЛЕНИЯ.
12. НИ В КОЕМ СЛУЧАЕ, ЕСЛИ НЕ ТРЕБУЕТСЯ СООТВЕТСТВУЮЩИМ ЗАКОНОМ, ИЛИ НЕ УСЛОВЛЕНО В ПИСЬМЕННОЙ ФОРМЕ, НИ ОДИН ДЕРЖАТЕЛЬ
АВТОРСКИХ ПРАВ И НИ ОДНО ДРУГОЕ ЛИЦО, КОТОРОЕ МОЖЕТ ИЗМЕНЯТЬ
И/ИЛИ ПОВТОРНО РАСПРОСТРАНЯТЬ ПРОГРАММУ, КАК БЫЛО РАЗРЕШЕНО ВЫШЕ, НЕ ОТВЕТСТВЕННЫ ПЕРЕД ВАМИ ЗА УБЫТКИ, ВКЛЮЧАЯ ЛЮБЫЕ ОБЩИЕ, СПЕЦИАЛЬНЫЕ, СЛУЧАЙНЫЕ ИЛИ ПОСЛЕДОВАВШИЕ УБЫТКИ, ПРОИСТЕКАЮЩИЕ ИЗ ИСПОЛЬЗОВАНИЯ ИЛИ НЕВОЗМОЖНОСТИ ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ПОТЕРЕЙ ДАННЫХ, ИЛИ ДАННЫМИ, СТАВШИМИ НЕПРАВИЛЬНЫМИ, ИЛИ ПОТЕРЯМИ, ПОНЕСЕННЫМИ ИЗ-ЗА ВАС ИЛИ ТРЕТЬИХ ЛИЦ, ИЛИ ОТКАЗОМ ПРОГРАММЫ РАБОТАТЬ СОВМЕСТНО С ЛЮБЫМИ ДРУГИМИ ПРОГРАММАМИ),
ДАЖЕ ЕСЛИ ТАКОЙ ДЕРЖАТЕЛЬ ИЛИ ДРУГОЕ ЛИЦО БЫЛИ ИЗВЕЩЕНЫ О
ВОЗМОЖНОСТИ ТАКИХ УБЫТКОВ.
КОНЕЦ ОПРЕДЕЛЕНИЙ И УСЛОВИЙ
Как применять эти условия к вашим новым программам Если вы разрабатываете новую программу и хотите, чтобы она принесла максимально возможную пользу обществу, лучший способ достичь этого — включить ее в свободное ПО, которое каждый может повторно распространять и изменять согласно данным условиям.Чтобы сделать это, добавьте в программу следующие уведомления. Надежнее всего будет добавить их в начало каждого исходного файла, чтобы наиболее эффективно передать сообщение об отсутствии гарантий; каждый файл должен содержать по меньшей мере строку, содержащую знак охраны авторского права и указание на то, где находится полное уведомление.
одна строка, содержащая название программы и краткое описание того, что она делает.
(C) наименование (имя) автора 19гг Это свободная программа; вы можете повторно распространять ее и/или модифицировать ее в соответствии с Универсальной Общественной Лицензией GNU, опубликованной Фондом Свободного ПО; либо версии 2, либо (по вашему выбору) любой более поздней версии.
Эта программа распространяется в надежде, что она будет полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемых гарантий
КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. Для
получения подробных сведений смотрите Универсальную Общественную Лицензию GNU.Вы должны были получить копию Универсальной Общественной Лицензии GNU вместе с этой программой; если нет, напишите по адресу: Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Добавьте также сведения о том, как связаться с вами по электронной и обычной почте.
Если программа интерактивная, сделайте так, чтобы при запуске в интерактивном режиме она выдавала краткое уведомление вроде следующего:
Гномовизор, версия 69, (C) имя автора 19гг Гномовизор поставляется АБСОЛЮТНО БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ;
для получения подробностей напечатайте ’show w’. Это свободная программа, и вы приглашаетесь повторно распространять ее при определенных условиях; для получения подробностей введите ’show c’.
Гипотетические команды ‘show w’ и ‘show c’ должны показывать соответствующие части Универсальной Общественной Лицензии. Конечно, используемые вами команды могут называться как-нибудь иначе, нежели ‘show w’ и ‘show c’; они даже могут выбираться с помощью мыши или быть пунктами меню — как больше подходит для вашей программы.
Вы также должны добиться того, чтобы ваш работодатель (если вы работаете программистом) или ваше учебное заведение, если таковое имеется, подписали в случае необходимости “отказ от имущественных прав” на эту программу. Вот образец; замените фамилии:
Компания Братья Ёёдины настоящим отказывается от всех имущественных прав на программу ’Гномовизор’ (которая делает пассы в сторону компиляторов), написанную Абстрактным К.И.
подпись Мага Ната, 1 апреля 1989 г Маг Нат, Президент фирмы Вице.
УНИВЕРСАЛЬНАЯ ОБЩЕСТВЕННАЯ ЛИЦЕНЗИЯ GNU
Данная Универсальная Общественная Лицензия не позволяет вам включать вашу программу в программы, являющиеся частной собственностью. Если ваша программа — это библиотека процедур, вам стоит подумать, не будет ли лучше разрешить программам, являющимся частной собственностью, связываться с вашей библиотекой. Если это то, чего вы хотите, используйте вместо этой Лицензии Универсальную Общественную Лицензию GNU для библиотек.20 Руководство по GNU Emacs Введение Введение Вы читаете о GNU Emacs, GNU-инкарнации развитого, самодокументированного, настраиваемого, расширяемого экранного редактора реального времени Emacs. (‘G’ в ‘GNU’ читается.) Мы говорим, что Emacs — это экранный редактор, так как редактируемый текст обычно виден на экране и автоматически обновляется, когда вы вводите команды. См. Глава [Экран], с. 23.
Мы называем его редактором реального времени, так как экран обновляется очень часто, обычно после каждого набранного вами знака или пары знаков. Это уменьшает количество информации, которую вы должны удерживать в памяти, когда редактируете. См.
Глава 4 [Основы редактирования], с. 35.
Мы называем Emacs развитым, так как он предоставляет средства, которые дают нечто большее, чем простая вставка или удаление: управление подпроцессами, автоматическое создание отступов в программах, просмотр двух или более файлов сразу, редактирование форматированного текста и действия в терминах символов, слов, строк, предложений, абзацев и страниц, а также выражений и комментариев в нескольких разных языках программирования.
Самодокументированность означает, что в любое время вы можете набрать специальный символ, Control-h, чтобы узнать, что вы можете сделать. Вы также можете использовать его, чтобы выяснить, что делает произвольная команда, или найти все команды, имеющие отношение к какой-либо теме. См. Глава 7 [Справка], с. 55.
Настраиваемость означает, что вы можете легко изменить определения команд Emacs.
Например, если вы используете язык программирования, в котором комментарии начинаются с ‘’, вы можете велеть командам Emacs для работы с комментариями использовать именно такие строки (см. Раздел 22.7 [Комментарии], с. 219).
Другой вид настройки — это перерасположение установленных команд. Например, если вы предпочитаете, чтобы четыре основные команды движения курсора (вверх, вниз, вправо, влево) находились на клавишах, расположенных крестообразно на клавиатуре, вы можете перепривязать эти клавиши. См. Глава 31 [Настройка], с. 341.
Расширяемость означает, что вы можете пойти дальше простой настройки и написать совершенно новые команды, программы на языке Лисп, предназначенные для запуска в собственном Лисп-интерпретаторе Emacs. Emacs является “интерактивно расширяемой” системой, что значит, что он делится на много функций, которые вызывают друг друга; каждая из них может быть переопределена во время сеанса редактирования. Почти любая часть Emacs может быть заменена без копирования всего Emacs. Большинство команд редактирования Emacs уже написаны на Лиспе; несколько исключений могли бы быть написаны на Лиспе, но написаны на Си для эффективности. Хотя только программист может написать расширение, любой может использовать его после. Если вы хотите научиться программированию на Emacs Lisp, мы рекомендуем вам книгу Introduction to Emacs Lisp, написанную Робертом Дж. Часселом, также опубликованную Фондом Свободного Программного Обеспечения.
Когда Emacs запущен под системой X Windows, он предоставляет собственные меню и удобные привязки для кнопок мыши. Но Emacs может дать многие преимущества оконной системы и на текстовом терминале. Например, вы можете видеть одновременно несколько файлов, перемещать текст между файлами и редактировать во время работы команд оболочки.
22 Руководство по GNU Emacs 1 Организация экрана На текстовом терминале Emacs занимает весь экран. В системе X Windows Emacs создает для себя свои X-окна. Мы используем термин фрейм для обозначения всего текстового экрана или всего X-окна, используемого Emacs. Оба вида фреймов используются в Emacs одинаково для отображения вашего текста. Обычно Emacs запускается только с одним фреймом, но при желании вы можете создать дополнительные. См. Глава [Фреймы], с. 147.
Когда вы запускаете Emacs, весь фрейм, за исключением первой и последней строки, отводится для редактируемого текста. Эта область называется окном. Первая строка называется полоской меню, а последняя — это особая эхо-область или окно минибуфера, где появляются запросы, и куда вы можете ввести ответы. Дальнейшие сведения об этих специальных строках смотрите ниже.
Текстовое окно может быть поделено по горизонтали или вертикали на несколько других окон, каждое из которых может быть использовано для отдельного файла (см. Глава [Окна], с. 141). В данном руководстве слово “окно” всегда обозначает часть фрейма внутри Emacs.
То окно, в котором находится курсор, называется выбранным окном; в нем идет редактирование. Большинство команд Emacs неявно относятся в тексту в выбранном окне (хотя команды мыши как правило действуют в том окне, в котором вы щелкнули, вне зависимости от того, выбрано оно или нет). Остальные окна существуют просто для справки, пока вы не выберете одно из них. Если вы используете несколько фреймов в системе X Windows, то передача фокуса ввода некоторому фрейму выбирает окно в этом фрейме.
Последняя строка каждого текстового окна называется строкой режима, которая описывает происходящее в этом окне. Она выводится в инверсном виде, если терминал поддерживает это, и содержит текст, который начинается при старте Emacs со строки ‘-:- *scratch*’. Строка режима показывает сведения о текущем состоянии, например, какой буфер показан в окне над ней, какие основные и второстепенные режимы в нем используются, и содержит ли этот буфер несохраненные изменения.
1.1 Точка Курсор терминала внутри Emacs показывает позицию, в которой будет выполняться команда редактирования. Это позиция именуется точкой. Многие команды Emacs перемещают точку по тексту, так что вы имеете возможность редактировать в любом месте. Вы также можете установить точку, щелкнув первой кнопкой мыши.
Когда курсор указывает на знак, то следует думать, что точка находится между двумя знаками; она расположена перед знаком, над которым появляется курсор. Например, если ваш текст выглядит как ‘frob’, а курсор находится над ‘b’, то точка расположена между ‘o’ и ‘b’. Если вы вставите в этой позиции знак ‘!’, то получите ‘fro!b’, с точкой между ‘!’ и ‘b’. Таким образом, курсор останется над ‘b’, как и раньше.
Иногда говорят “курсор”, имея в виду точку, или говорят о командах движения точки как о командах “движения курсора”.
Терминалы имеют только один курсор, и когда происходит процесс вывода, курсор должен находиться там, где идет набор. Это не означает, что точка перемещается. Это значит лишь то, что Emacs может показать вам позицию точки, только когда терминал не работает.
Если вы редактируете в Emacs несколько файлов, каждый в своем буфере, то всякий буфер имеет свою собственную позицию точки. Буфер, который не показывается в данное время, запоминает, где находится точка, на случай, если вы снова выведете его на экран.
Когда фрейм разбит на несколько окон, каждое из них имеет свою собственную позицию точки. Курсор же показывает позицию точки в выбранном окне. Этим способом вы также можете узнать, которое из окон выбрано. Если один и тот же буфер появляется более чем в одном окне, то каждое из них имеет свою позицию точки.
Если есть несколько фреймов, каждый из них может отобразить один курсор. Курсор в выбранном фрейме заполнен цветом; курсор в других фреймах — это пустая клетка, которая появляется в том окне, которое было бы выбранным, если бы вы передали фокус ввода этому фрейму.
Термин ‘точка’ происходит от названия знака ‘.’, который был командой TECO (язык, на котором был написан первоначальный Emacs) для получения значения величины, называемой теперь ‘точкой’.
1.2 Эхо-область Строка внизу фрейма (под строкой режима) называется эхо-областью. Она используется для показа небольших фрагментов текста в нескольких целях.
Эхо обозначает отображение набираемых вами знаков. Вне Emacs, операционная система обычно отображает весь ваш ввод. Emacs управляет эхо иначе.
Emacs никогда не повторяет команды, состоящие из одиночного знака, а команды, состоящие из нескольких, повторяются, только если вы останавливаетесь в процессе их набора. Как только вы останавливаетесь более чем на секунду в середине команды, все знаки этой команды сразу же отображаются. Это служит подсказкой для окончания команды.
Как только включается эхо, окончание команды отображается немедленно в процессе набора. Такое поведение предназначено для того, чтобы уверенный пользователь получал быстрый результат, в то же время это позволяет неуверенным пользователям получить максимум обратной связи. Вы можете изменить это поведение, установив особую переменную (см. Раздел 11.7 [Переменные изображения], с. 84).
Если команда не может быть выполнена, она в печатает эхо-области сообщение об ошибке. Сообщение об ошибке сопровождается звуковым сигналом или миганием экрана.
Кроме того, когда произошла ошибка, любой набранный перед этим ввод сбрасывается.
Некоторые команды печатают в эхо-области информационные сообщения. Они похожи на сообщения об ошибках, но без звукового сигнала, и набранная ранее информация не сбрасывается. Иногда эти сообщения говорят вам, что команда выполнена, в случае, если это явно не наблюдается при просмотре редактируемого текста. Иногда единственной целью команды является печать сообщения, дающего вам специфическую информацию. Например, команда С-х = используется, чтобы напечатать сообщение, описывающее позицию точки в тексте и ее текущий столбец в окне. Команды, требующие для своего выполнения длительное время, часто выводят во время работы сообщения, заканчивающиеся на ‘...’, а в конце, когда они закончились, слово ‘done’.
Информативные сообщения из эхо-области сохраняются в буфере, называемом ‘*Messages*’. (Мы еще не объяснили, что такое буфер; для получения большей информации о них смотрите Глава 15 [Буферы], с. 135.) Если вы пропустили сообщение, которое недолго отображалось на экране, вы можете переключиться в буфер ‘*Messages*’ и снова посмотреть его. (Последовательные сообщения о промежуточных результатах часто сворачиваются в этом буфере в одно.) Размер буфера ‘*Messages*’ ограничен определенным числом строк, это число задает переменная message-log-max. Как только буфер дорастает до этого размера, каждая новая строка удаляет одну строку из начала. См. Раздел 31.2 [Переменные], с. 343, чтобы узнать, как установить переменные, такие как message-log-max.
Эхо-область используется также для отображения минибуфера: окна, которое используется для считывания аргументов для команд, например, имени файла для редактирования. Когда используется минибуфер, эхо-область начинается со строки подсказки, которая обычно кончается двоеточием; кроме того, в этой строке появляется курсор, так как она становится выбранным окном. Вы всегда можете выйти из минибуфера, набрав C-g. См.
Глава 5 [Минибуфер], с. 45.
1.3 Строка режима Последняя строка в каждом окне называется строкой режима, она описывает происходящее в этом окне. Когда имеется только одно текстовое окно, строка режима находится непосредственно над эхо-областью; это предпоследняя строка фрейма. Строка режима показывается в инверсном изображении, если терминал поддерживает это, и начинается и кончается дефисами.
Обычно строка режима выглядит так:
-ск:из буф (основной второстепенные)-стр-поз---Это дает информацию о буфере, отображенном в окне: его имя, используемые основной и второстепенный режимы, изменялся ли текст буфера, и как далеко вниз по буферу вы сейчас находитесь.
из содержит две звездочки ‘**’, если текст в буфере редактировался (буфер “изменен”), или ‘-’, если буфер не редактировался. Для буферов, доступных только для чтения, это ‘%*’, если буфер изменен, и ‘%%’ в противном случае.
буф — это имя буфера данного окна. Чаще всего оно совпадает с именем файла, который вы редактируете. См. Глава 15 [Буферы], с. 135.
Буфер, находящийся в выбранном окне (в том окне, в котором находится курсор), является также выбранным буфером Emacs — тем буфером, где происходит редактирование.
Когда мы говорим, что некоторые команды выполняются “для буфера”, мы говорим о текущем выбранном буфере.
стр — это ‘L’, за которой следует текущей номер строки, где находится точка. Этот номер выводится, когда включен режим Line Number (обычно это так). Вы можете по желанию показать также и номер текущего столбца, включив режим Column Number (он не включается по умолчанию, потому что работает несколько медленнее). См. Раздел 11. [Возможности строки режима], с. 83.
поз говорит вам, есть ли еще текст сверху от начала либо ниже конца окна. Если буфер небольшой и умещается в окне целиком, то поз имеет значение ‘All’. Иначе он имеет значение ‘Top’, если вы смотрите начало файла, ‘Bot’, если конец, либо ‘nn%’, где nn означает количество процентов файла, находящееся над верхом окна.
основной — имя основного режима, действующего в этом буфере. В любой момент каждый буфер находится в одном и только одном из возможных основных режимов. Существующие основные режимы включают режим Fundamental (наименее специализированный), режим Text, режим Lisp, режим С, режим Texinfo и многие другие. См. Глава [Основные режимы], с. 175, чтобы подробнее узнать о том, чем режимы отличаются, и как выбрать один из них.
Некоторые основные режимы показывают после имени дополнительные сведения. Например, буферы Rmail показывают номер текущего сообщения и общее число сообщений.
Буферы Compilation и Shell отображают состояние подпроцесса.
второстепенные — это список некоторых второстепенных режимов, которые включены в данный момент в буфере выбранного окна. Например, ‘Fill’ значит, что включен режим Auto ll. ‘Abbrev’ означает, что включен режим Word Abbrev. ‘Ovwrt’ означает, что включен режим Overwrite. См. Раздел 31.1 [Второстепенные режимы], с. 341, для более подробной информации. ‘Narrow’ означает, что область редактирования отображаемого буфера ограничена только частью его текста. На самом деле это не второстепенный режим, но действует похоже. См. Раздел 30.8 [Сужение], с. 335. ‘Def’ означает, что сейчас определяется макрос клавиатуры. См. Раздел 31.3 [Макросы клавиатуры], с. 353.
Кроме того, если в данный момент Emacs находится внутри уровня рекурсивного редактирования, то внутри круглых скобок, которые окружают имена режимов, появляются квадратные скобки (‘[...]’). Если Emacs находится на некотором уровне рекурсивного редактирования внутри другого, то появляются двойные квадратные скобки, и так далее.
Так как уровень рекурсивного редактирования относится ко всему Emacs, а не к каждому буферу в отдельности, то квадратные скобки появляются или в строках режима всех окон или ни в одной из них. См. Раздел 30.12 [Рекурсивное редактирование], с. 338.
Неоконные терминалы могут показать только один фрейм Emacs в одно время (см. Глава 17 [Фреймы], с. 147). На таких терминалах строка режима отображает имя выбранного фрейма, после из. Начальный фрейм называется ‘F1’.
ск обозначает систему кодирования, которая используется в редактируемом файле. Дефис указывает на состояние, устанавливаемое по умолчанию: отсутствие преобразования, за исключением преобразования конца строки, если содержимое файла требует этого. ‘=’ обозначает полное отсутствие преобразований. Не столь простые преобразования представляются различными буквами — например, ‘1’ относится к ISO Latin-1. См. Раздел 18.7 [Системы кодирования], с. 165, для подробной информации. Если вы используете метод ввода, к началу ск добавляется строка в форме ‘в>’; в идентифицирует метод ввода.
(Некоторые методы ввода показывают вместо ‘>’ знак ‘+’ или ‘@’.) См. Раздел 18.4 [Методы ввода], с. 163.
Когда вы пользуетесь текстовым терминалом (не оконной системой), ск использует три знака для описания, соответственно, системы кодирования для ввода с клавиатуры, системы кодирования для терминального вывода и системы кодирования, применяемой в редактируемом файле.
Когда выключена поддержка многобайтных знаков, ск не появляется совсем. См. Раздел 18.2 [Включение многобайтных знаков], с. 161.
Двоеточие после ск может меняться в некоторых обстоятельствах на другой знак. Emacs использует для разделения строк в буфере перевод строки. Некоторые файлы используют другое соглашение о разделении строк: возврат каретки и перевод строки (соглашение MSDOS) или просто возврат каретки (соглашение Macintosh). Если файл в буфере использует возврат каретки и перевод строки, двоеточие заменяется на обратную косую черту (‘\’) или ‘(DOS)’, в зависимости от вашей операционной системы. Если в этом файле применяется просто возврат каретки, то двоеточие заменяется на косую черту (‘/’) или ‘(Mac)’. На некоторых системах Emacs позывает вместо двоеточия строку ‘(Unix)’, даже для файлов, использующих для разделения строк перевод строки.
Вы можете настроить способ отображения в строке режима каждого из форматов разделения строк, устанавливая переменные eol-mnemonic-unix, eol-mnemonic-dos, eolmnemonic-mac и eol-mnemonic-undecided равными строкам, которые вы находите подходящими. См. Раздел 31.2 [Переменные], с. 343, где объясняется, как устанавливать переменные.
См. Раздел 11.5 [Возможности строки режима], с. 83, подробности о возможностях добавления в строку режима другой полезной информации, например номера текущего столбца в точке, текущего времени и сообщения о приходе почты.
1.4 Полоска меню Каждый фрейм Emacs обычно имеет сверху полоску меню, которую вы можете использовать для произведения определенных действий. Нет необходимости перечислять их здесь, потому что вам проще посмотреть самим.
Когда вы используете оконную систему, вы можете выбирать команды из полоски меню при помощи мыши. Направленная вправо стрелка после пункта меню указывает, что этот пункт ведет ко вторичному меню; ‘...’ в конце означает, что до начала работы эта команда считает аргументы с клавиатуры.
Чтобы просмотреть полное имя команды и документацию к пункту меню, напечатайте C-h k и затем выберите нужный пункт с помощью мыши обычным способом. (см. Раздел 7.1 [Справка о ключах], с. 56).
На текстовых терминалах, где нет мыши, вы можете использовать меню, напечатав M-‘ или F10 (они запускают команду tmm-menubar). Эта команда входит в режим, где вы можете выбрать пункт меню с помощью клавиатуры. Предварительный выбор показывается в эхо-области. Вы можете использовать правую и левую курсорные стрелки для движения по меню к разным пунктам. Когда вы нашли нужный вам пункт, напечатайте RET, чтобы выбрать его.
К каждому пункту меню также приписывается буква или цифра; обычно это первая первая буква какого-то слова из имени пункта. Эта буква или цифра отделяется от имени значком ‘=>’. Для выбора пункта вы можете напечатать его букву или цифру.
Некоторые команды в меню имеют также обычные привязки к ключу; в таком случае после самого пункта перечисляется один эквивалентный ключ в круглых скобках.
28 Руководство по GNU Emacs 2 Знаки, ключи и команды Эта глава рассказывает о наборах знаков, используемых в Emacs для ввода команд и внутри файлов, а также объясняет концепции ключей и команд, которые необходимы для понимания того, как Emacs воспринимает ввод с клавиатуры и мыши.
2.1 Виды пользовательского ввода GNU Emacs использует для ввода с клавиатуры расширение набора знаков ASCII; он также воспринимает незнаковые события, включая функциональные клавиши и действия с клавишами мыши.
ASCII состоит из 128 знаковых кодов. Некоторым из этих кодов приписаны графические обозначения, такие как ‘а’ и ‘=’; остальные являются управляющими знаками, например Cоntrol-a (также именуется С-а для краткости). C-a получил свое имя из-за того, что вы набираете его, зажав клавишу CTRL и затем нажав а.
У некоторых управляющих знаков ASCII есть специальные названия, и большинство терминалов имеют специальные клавиши, с помощью которых их можно набрать, например: RET, TAB, DEL и ESC. Знак пробела обычно обозначается ниже как SPC, хотя строго говоря, он является графическим знаком, чье изображение должно быть пустым.
На некоторых клавиатурах есть клавиша “linefeed”; это другое название для C-j.
Emacs расширяет множество знаков ASCII тысячами других печатных знаков (см. Глава 18 [MULE], с. 161), дополнительными управляющими знаками и несколькими модификаторами, которые можно комбинировать с любым другим знаком.
На ASCII-терминалах существует только 32 управляющих знака. Это варианты с модификатором control для букв и знаков ‘@[]\^_’. Кроме того, клавиша shift не имеет смысла с управляющими знаками: C-a и C-A — это одно и то же, и Emacs не может их различить.
Но во множестве знаков Emacs есть место для вариантов с control для всех печатных знаков и для различения между C-a и C-A. X Windows позволяет ввести все эти знаки.
Например, C- (то есть Control-минус) и C-5 — допустимые команды Emacs в системе X.
Еще одно расширение множества знаков Emacs — это дополнительные биты модификаторов. Чаще всего используется только один бит-модификатор, он называется Meta. Для любого знака есть его Meta-вариант; примеры включают Meta-а (для краткости М-а), М-А (это не то же самое, что М-а, но эти два знака имеют обычно одно и то же значение в Emacs), M- RET и M-C-a. По традиции мы обычно пишем С-М-а, а не М-С-а; но логично говоря, порядок набора клавиш CTRL и META не имеет значения.
Некоторые терминалы имеют клавишу META и позволяют набирать Meta-знаки, нажав эту клавишу. Таким образом, Meta-а набирается путем одновременного нажатия клавиш META и а. Клавиша META работает очень похоже на SHIFT. Подобные клавиши не всегда метятся META, так как эти функции часто присваиваются специальными клавишам с каким-то другим первоначальным значением.
Если у вас нет клавиши META, вы все же можете набрать Meta-знаки, используя последовательность двух знаков, начинающуюся с ESC. Таким образом, чтобы ввести M-а, вы можете набрать ESC a. Чтобы ввести С-М-а, вы должны набрать ESC C-a. ESC разрешена также и на терминалах с клавишами META, на случай, если вы привыкли использовать ее.
X Windows предоставляет несколько других клавиш-модификаторов, которые могут быть применены к любому вводимому знаку. Эти клавиши называются SUPER, HYPER и ALT. Мы пишем ‘s-’, ‘H-’ и ‘A-’, чтобы сказать, что знак использует эти модификаторы. Таким образом, s-H-C-x — это сокращение для Super-Hyper-Control-x. Не все X-терминалы в действительности предоставляют клавиши для этих модификаторов — фактически многие терминалы имеют клавишу, помеченную ALT, которая на самом деле является клавишей META. Стандартные привязки ключей Emacs не содержат каких-либо знаков с этими модификаторами. Но вы можете придать им свои значения, настраивая Emacs.
Ввод с клавиатуры включает клавиши, не являющие знаками: например функциональные клавиши и курсорные стрелки. Кнопки мыши также выпадают из гаммы знаков. Вы можете модифицировать эти события с помощью клавиш-модификаторов CTRL, META, SUPER, HYPER и ALT точно так же, как и знаки клавиатуры.
Вводимые знаки и незнаковый ввод вместе называются событиями. См. раздел “Input Events” в The Emacs Lisp Reference Manual, для дальнейшей информации. Если вы не программируете на Лиспе, а просто хотите переопределить значения некоторых знаков и незнаковых событий, смотрите Глава 31 [Настройка], с. 341.
ASCII-терминалы в действительности не могут посылать ничего, кроме знаков ASCII.
Такие терминалы используют для представления каждой функциональной клавиши последовательность знаков. Но это невидимо для пользователя Emacs, потому что процедуры обработки ввода с клавиатуры распознают эти особые последовательности и преобразуют их в события функциональных клавиш до того, как любые другие части Emacs могут их увидеть.
2.2 Ключи Последовательность ключей, (или коротко, ключ) есть последовательность вводимых событий, которая воспринимается как целое, как “единая команда”. Некоторые командные последовательности Emacs — это просто одиночный знак или одно событие; например, просто C-f достаточно для перемещения вперед на один знак. Но в Emacs также есть команды, которые вызываются двумя или более событиями.
Если последовательность событий достаточна для вызова команды, она является законченным ключом. Примером законченных ключей могут быть C-a, X, RET, NEXT (функциональная клавиша), DOWN (стрелка), C-x C-f и C-x 4 C-f. Если последовательность недостаточна, чтобы составить законченный ключ, она называется префиксным ключом.
В примерах выше C-x и C-x 4 являются префиксными ключами. Любая последовательность ключей — это либо законченный, либо префиксный ключ.
Большинство одиночных знаков являются законченными ключами в стандартных привязках команд Emacs. Немногие из них являются префиксными ключами. Префиксный ключ объединяется со следующим событием в более длинную последовательность ключей, которая сама может быть законченной или префиксной. Например, C-x — это префиксный ключ, поэтому C-x и следующее событие объединяются в двухзнаковую последовательность ключей. Большинство этих последовательностей являются законченными ключами, в том числе C-x C-f и C-x b. Некоторые, например C-x 4 и C-x r, сами являются префиксными ключами, приводящими к трехзнаковым последовательностям ключей. Нет ограничения на длину последовательности ключей, но на практике люди редко используют последовательности длиннее четырех событий.
Напротив, добавить события к законченному ключу вы не можете. Например, двухзнаковая последовательность C-f C-k не является ключом, так как C-f является законченным ключом сама по себе. Невозможно дать C-f C-k независимое значение как команде. C-f C-k — это две команды, а не одна.
Из всего сказанного следует, что префиксными ключами в Emacs являются C-c, C-h, C-x, C-x RET, C-x @, C-x a, C-x n, C-x r, C-x v, C-x 4, C-x 5, C-x 6, ESC, M-g и M-j. Но этот список не встроен; это просто стандартная привязка ключей в Emacs. В процессе настройки Emacs вы можете сделать новые префиксные ключи или уничтожить эти. См.
Раздел 31.4 [Привязки ключей], с. 356.
Если вы в самом деле создаете или удаляете префиксные ключи, это изменяет набор возможных последовательностей ключей. Например, если вы переопределяете C-f как префикс, C-f C-k автоматически становятся ключом (законченным, если вы не определите его тоже как префикс). Наоборот, если вы уничтожите определение префикса C-x 4, то С-х 4 f (или С-х 4 что-нибудь) не будет в дальнейшем ключом.
Напечатав знак вызова справки (C-h или F1 ) после префиксного знака, вы получите список команд, начинающихся с этого префикса. Есть несколько префиксных знаков, для которых C-h не работает — по историческим причинам у них есть другое значение для C-h, которое непросто изменить. Но F1 должна работать для всех префиксных знаков.
2.3 Ключи и команды В этом руководстве много отрывков, которые говорят вам, что делают отдельные ключи. Но Emacs не определяет значение ключей непосредственно. Вместо этого Emacs присваивает значение именованным командам и затем придает ключам значения путем привязки их к командам.
Каждая команда имеет имя, выбранное для нее программистом. Обычно это имя составляется из нескольких английских слов, разделенных дефисами; например, next-line или forward-word. У команды также есть определение, являющееся программой на Лиспе; она заставляет функцию делать то, что она делает. На самом деле, команда в языке Emacs Lisp — это особая разновидность лисповской функции; это такая функция, которая указывает, как читать аргументы при интерактивном вызове. Для получения большей информации о командах и функциях смотрите раздел “What Is a Function” в The Emacs Lisp Reference Manual. (Определение, которое мы использовали в данном руководстве, слегка упрощено.) Связь между ключами и функциями записывается в различных таблицах, называемых таблицами ключей. См. Раздел 31.4.1 [Таблицы ключей], с. 356.
Когда мы говорим, что “C-n сдвигает вертикально вниз на одну строку”, мы замалчиваем отличие, которое не относится к делу при обычном использовании, но существенно для понимания того, как настраивается Emacs. Это команда next-line, которая запрограммирована на сдвиг вниз. Ключ C-n имеет такое действие, так как он привязан к этой команде. Если вы перепривяжете С-n к команде forward-word, то он будет перемещать на одно слово вперед. Перепривязка клавиш — обычный метод настройки.
В остальной части этого руководства мы обычно будем игнорировать эту тонкость, чтобы сохранить простоту. Чтобы дать необходимую для настройки информацию, мы ставим имя команды, которая в действительности выполняет работу, в круглых скобках после ссылки на ключ, который ее запускает. Например, мы будем говорить: “Команда С-n (next-line) передвигает точку вниз”, имея в виду, что next-line — это команда, которая двигает вниз, а С-n — это ключ, который стандартно привязан к ней.
Раз уж мы говорим сейчас только об информации для настройки, то это подходящий момент, чтобы рассказать вам о переменных. Часто описание команд будет говорить: “Чтобы изменить это, установите переменную mumble-foo”. Переменная — это имя, используемое для запоминания значения. Многие описанные в этом руководстве переменные существуют просто для облегчения настройки: некоторая команда или другая часть Emacs проверяет переменную и ведет себя по-разному в зависимости от ее значения. Пока вы не интересуетесь настройкой, вы можете пропустить информацию о переменных. Когда вы будете готовы, чтобы заинтересоваться, прочитайте базовые сведения о переменных, и тогда информация об отдельных переменных будет иметь смысл. См. Раздел 31.2 [Переменные], с. 343.
2.4 Наборы знаков для текста Текст в буферах Emacs — это последовательность восьмибитных байт. Каждый байт может содержать один знак ASCII. Допустимы как управляющие знаки ASCII (с восьмеРуководство по GNU Emacs ричными кодами от 000 до 037, и 0177), так и печатные ASCII-знаки (с кодами от до 0176); однако, управляющие знаки не из ASCII не могут появиться в буфере. Другие флаги-модификаторы, используемые при вводе с клавиатуры, такие как Meta, также недопустимы в буферах.
Некоторые управляющие знаки ASCII служат в тексте для особых целей и имеют особые названия. Например, знак новой строки (восьмеричный код 012) используется в буфере для завершения строки, а символ табуляции (восьмеричный код 011) используется для создания отступа до следующей позиции табуляции (обычно через каждые 8 столбцов). См.
Раздел 11.6 [Отображение текста], с. 84.
Печатные знаки, не входящие в ASCII, также могут появляться в буферах. Когда включены многобайтные знаки, вы можете использовать любые печатные не-ASCII-знаки, которые Emacs поддерживает. Они имеют коды, начинающиеся от 256, или восьмеричного 0400, и каждый из них представляется как последовательность двух или более байт. См.
Глава 18 [MULE], с. 161.
Если вы выключите поддержку многобайтных знаков, то сможете использовать только один алфавит не-ASCII-знаков, каждый из которых вмещается в один байт. Для них используются коды от 0200 до 0377. См. Раздел 18.12 [Однобайтные европейские знаки], с. 172.
3 Вход и выход из Emacs Обычно для вызова Emacs достаточно просто набрать ‘emacs’ в оболочке. Emacs очищает экран и отображает начальные справочные сведения и уведомление об авторских правах. Некоторые операционные системы сбрасывают все набранное перед тем, как Emacs стартует; они не дают Emacs возможности предотвратить это. Поэтому рекомендуется подождать, пока Emacs очистит экран, и только потом набрать вашу первую команду редактирования.
Если вы запускаете Emacs из окна с оболочкой в системе X Windows, запускайте его в фоновом режиме с помощью ‘emacs&’. Тогда Emacs не свяжет окно оболочки, и вы сможете выполнять другие команды, пока Emacs работает в своих X-окнах. Вы можете начинать печатать команды, как только направите ввод с клавиатуры во фрейм Emacs.
Когда Emacs начинает работу, он создает буфер, называемый ‘*scratch*’. Это буфер, который предоставляется вам первоначально. Буфер ‘*scratch*’ использует режим Lisp Interaction; вы можете набирать в нем Лисп-выражения и вычислять их, либо вы можете проигнорировать такую возможность и просто писать в нем заметки. (Вы можете задать для этого буфера другой основной режим, установив в вашем файле инициализации переменную initial-major-mode. См. Раздел 31.7 [Файл инициализации], с. 366.) Из аргументов в командной строке оболочки можно указать файлы, к которым вы хотите обратиться, Лисп-файлы для загрузки и функции, которые будут вызваны. См. Приложение A [Аргументы командной строки], с. 385. Но мы не рекомендуем так делать. Эта возможность существует преимущественно для совместимости с другими редакторами.
Многие редакторы спроектированы так, что запускаются снова каждый раз, когда вы хотите редактировать. Вы редактируете один файл и затем выходите из редактора. В следующий раз, когда вы хотите редактировать другой файл или тот же самый, вы должны запустить редактор снова. С такими редакторами имеет смысл использовать аргумент командной строки, чтобы сообщить, какой файл будет редактироваться.
Но не имеет смысла запускать новый Emacs каждый раз, когда вы хотите редактировать другой файл. С одной стороны, это было бы раздражающе медленно. С другой стороны, при этом не использовалась бы способность Emacs обращаться к нескольким файлам за один сеанс редактирования. И при этом терялись бы накопленные сведения о контексте: регистры, история отмены изменений, список пометок и другие.
Рекомендуемый способ использования GNU Emacs — запускать его только один раз сразу после входа в систему и делать все ваши редакции в одном и том же процессе Emacs. Каждый раз, когда вы хотите редактировать другой файл, вы вызываете его в уже существующий Emacs, который в конце концов предназначен, чтобы хранить много файлов, готовых для редактирования. Обычно вы не уничтожаете Emacs до тех пор, пока не решите выйти из системы. См. Глава 14 [Файлы], с. 105, для получения информации о редактировании нескольких файлов одновременно.
3.1 Выход из Emacs Существует две команды выхода из Emacs, так как существует два вида выхода: приостановка Emacs и уничтожение Emacs.
Приостановка означает временную остановку Emacs и возврат управления его родительскому процессу (обычно это оболочка), она позволяет вам позднее возобновить редактирование в том же задании Emacs, с теми же буферами, с тем же списком уничтожений, с той же историей отмены и так далее. Это обычный способ выхода.
Уничтожение Emacs подразумевает уничтожение задания Emacs. Вы снова можете запустить Emacs позднее, но вы получите новый Emacs. Нет способа возобновить тот же сеанс редактирования после его уничтожения.
Приостановить Emacs (suspend-emacs) или минимизировать текущий фрейм C-z (iconify-or-deiconify-frame).
Уничтожить Emacs (save-buffers-kill-emacs).
C-x C-c Чтобы приостановить Emacs, наберите C-z (suspend-emacs). Это вернет вас обратно в оболочку, из которой вы вызывали Emacs. Вы можете возобновить Emacs с помощью команды ‘%еmacs’ в большинстве обычных оболочек.
В системах, которые не позволяют программам приостанавливаться, C-z запускает подчиненную оболочку, которая связана прямо с терминалом, и Emacs ждет, пока вы не покинете подоболочку. (Скорее всего, вы можете сделать это с помощью C-d или ‘exit’, но это зависит от используемой оболочки.) В этих системах единственный способ вернуться в оболочку, из которой Emacs был запущен (чтобы выйти из системы, например), — это уничтожить Emacs.
Приостановка также невозможна, если вы запустили Emacs из оболочки, не поддерживающей приостановку программ, даже если система ее поддеривает. В таком случае вы можете установить переменную cannot-suspend в отличное от nil значение, чтобы принудить C-z запускать подчиненную оболочку. (Можно было бы назвать родительскую оболочку Emacs тоже “подчиненной” за неумение правильно управлять заданиями, но это вопрос вкуса.) Когда Emacs напрямую общается с X-сервером и создает собственные выделенные Xокна, C-z имеет другой смысл. Приостановка приложения, используещего собственные X-окна, бессмысленна и бесполезна. Вместо этого, C-z запускает команду iconify-ordeiconify-frame, которая временно закрывает выбранный фрейм Emacs (см. Глава [Фреймы], с. 147). Снова получить доступ к этому фрейму можно с помощью программы управления окнами.
Чтобы уничтожить Emacs, наберите C-x C-c (save-buffer-kill-emacs). Двухзнаковый ключ используется для того, чтобы его было труднее набрать. Эта команда сначала предлагает сохранить все модифицированные обращающиеся к файлам буферы. Если вы не сохраняете их все, она запрашивает новое подтверждение с помощью yes перед уничтожением Emacs, так как любые незаписанные изменения будут потеряны навсегда. Также, если остаются запущенными какие-либо подпроцессы, то С-х С-с запрашивает подтверждение и для них, так как уничтожение Emacs немедленно уничтожит подпроцессы.
Невозможно перезапустить сеанс Emacs, когда вы его уже уничтожили. Однако, вы можете указать Emacs записывать определенные сведения о сеансе, например, к каким файлам обращались, когда Emacs был уничтожен; тогда в следующий раз, когда вы перезапустите Emacs, он попытается обратиться к тем же файлам. См. Раздел 30.11 [Сохранение сеансов Emacs], с. 337.
Операционная система обычно улавливает определенные специальные символы, которые могут мгновенно приостанавливать или уничтожать программу. Это свойство операционной системы отключается в то время, когда вы находитесь в Emacs. Значения C-z и С-с как ключей в Emacs были вдохновлены стандартными значениями C-z и С-с в некоторых операционных системах как символов останова и уничтожения программы, но это единственная их связь с этими операционными системами. Вы можете настроить эти ключи для запуска любых команд по вашему выбору (см. Раздел 31.4.1 [Таблицы ключей], с. 356).
4 Основные команды редактирования Здесь мы рассказываем основы о том, как ввести текст, сделать изменения и записать текст в файл. Если эти сведения новы для вас, вы можете изучить это более легким способом, запустив самоучитель по Emacs. Чтобы сделать так, запустите Emacs и наберите Control-h t (help-with-tutorial).
Чтобы очистить экран и перерисовать изображение, напечатайте C-l (recenter).
4.1 Вставка текста Чтобы вставить печатные знаки в редактируемый вами текст, достаточно просто набрать их. Таким образом, вводимые вами знаки вставляются в буфер в позиции курсора (то есть в точке; см. Раздел 1.1 [Точка], с. 23). Курсор двигается вперед, и весь текст после курсора тоже сдвигается вперед. Если в буфере был текст ‘FOOBAR’, и курсор стоял перед ‘B’, то если вы наберете XX, вы получите ‘FOOXXBAR’ c курсором, оставшимся перед ‘B’.
Чтобы удалить текст, который вы только что вставили, используйте DEL. DEL удаляет знак перед курсором (а не знак под курсором; этот знак стоит после курсора). Курсор и все знаки, стоящие после него, сдвигаются назад. Поэтому, если вы набрали печатные знаки и затем набираете DEL, набранное отменяется.
Чтобы закончить строку и начать набирать новую, нажмите RET. Это вставит в буфер знак перехода на новую строку. Если точка находится в середине строки, RET разбивает эту строку. Набор DEL, когда курсор находится в начале строки, удаляет предшествующий символ новой строки, соединяя таким образом эту и предшествующую строки.
Emacs может разбивать строки автоматически, когда они становятся слишком длинными, если вы включите специальный второстепенный режим, называемый режимом Auto Fill. См. Раздел 21.5 [Заполнение], с. 185, для информации об использовании режима Auto Fill.
Если вы предпочитаете, чтобы знаки текста замещали (перезаписывали) существующий текст, а не сдвигали его вправо, вы можете включить второстепенный режим Overwrite. См. Раздел 31.1 [Второстепенные режимы], с. 341.
Непосредственная вставка работает для печатных знаков и SPC, но другие знаки действуют как команды редактирования и не вставляют сами себя. Если вам требуется вставить управляющий знак или знак, код которого превышает восьмиричное 200, вы должны отменить их особый смысл, набрав перед ними Control-q (quoted-insert). (Название этого знака обычно записывается как C-q для краткости.) Существует два способа использования C-q:
• C-q, за которым следует любой неграфический знак (даже C-g), вставляет этот знак.
• C-q, за которым идет последовательность восьмиричных цифр, вставляет знак с заданным знаковым кодом. Вы можете использовать любое число восьмиричных цифр;
любой знак, не являющийся цифрой, обрывает последовательность. Если завершающий знак — это RET, он служит только для завершения последовательности; любой другой нецифровой знак сам используется в качестве ввода после завершения последовательности. (Использование восьмиричных последовательностей запрещено в обычном недвоичном режиме Overwrite, чтобы дать вам удобный способ вставить цифру вместо замещения ей.) Когда включена поддержка многобайтных знаков, восьмиричные коды от 0200 до 0377 не являются верными знаками; если вы задаете код из этого промежутка, C-q считает, что вы собираетесь использовать какой-то из наборов знаков ISO Latin-n, и преобразует заданный код к соответствующему коду знаков Emacs. См. Раздел 18.2 [Включение многобайтных знаков], с. 161. Какой именно набор знаков ISO Latin следует использовать, определяется выбранной вами языковой средой (см. Раздел 18.3 [Языковые среды], с. 162).
Чтобы использовать вместо восьмиричных цифр десятичные или шестнадцатиричные, установите переменную read-quoted-char-radix равной 10 или 16. Если основание больше десяти, некоторые буквы, начиная с a, служат частью знакового кода, так же, как и цифры.
Числовой аргумент для C-q указывает, сколько копий знаков с отмененным особым смыслом необходимо вставить (см. Раздел 4.10 [Аргументы], с. 42).
Информация для настройки: DEL в большинстве режимов запускает команду deletebackward-char; RET запускает команду newline, а самовставляющиеся печатные знаки запускают команду self-insert, которая вставляет тот знак, который был набран при ее вызове. Некоторые основные режимы перепривязывают DEL к другим командам.
4.2 Изменение положения точки Чтобы сделать что-то большее, чем просто вставка знаков, вы должны знать, как двигается точка (см. Раздел 1.1 [Точка], с. 23). Простейший способ переместить точку — воспользоваться курсорными стрелками или щелкнуть левой кнопкой мыши в том месте, куда вы хотите передвинуть точку.
Есть также Control- и Meta-знаки для перемещения курсора. Некоторые из них эквивалентны курсорным стрелкам (они были придуманы в те дни, когда у терминалов еще не было курсорных стрелок, их можно использовать на таких терминалах). Другие делают более сложные вещи.
Передвинуться в начало строки (beginning-of-line).
C-a Передвинуться в конец строки (end-of-line).
C-e Сдвинуться на один знак вперед (forward-char).
C-f Сдвинуться на один знак назад (backward-char).
C-b Сдвинуться на одно слово вперед (forward-word).
M-f Сдвинуться на одно слово назад (backward-word).
M-b Сдвинуться вертикально вниз на одну строку (next-line). Эта команда стаC-n рается оставить горизонтальную позицию неизменной, чтобы если вначале вы находились в середине одной строки, то в конце оказались бы в середине следующей. В случае, если вы находитесь на последней строке текста, C-n создает новую строку и передвигается на нее.
Сдвинуться вертикально вверх на одну строку (previous-line).
C-p Сдвинуть точку к левому краю на строку в середине окна (move-to-windowM-r line). Текст при этом не перемещается по экрану.