|
|
1.1 ! root 1: This is Info file ../info/emacs, produced by Makeinfo-1.49 from the ! 2: input file emacs.texi. ! 3: ! 4: This file documents the GNU Emacs editor. ! 5: ! 6: Copyright (C) 1985, 1986, 1988, 1992 Richard M. Stallman. ! 7: ! 8: Permission is granted to make and distribute verbatim copies of this ! 9: manual provided the copyright notice and this permission notice are ! 10: preserved on all copies. ! 11: ! 12: Permission is granted to copy and distribute modified versions of ! 13: this manual under the conditions for verbatim copying, provided also ! 14: that the sections entitled "The GNU Manifesto", "Distribution" and "GNU ! 15: General Public License" are included exactly as in the original, and ! 16: provided that the entire resulting derived work is distributed under the ! 17: terms of a permission notice identical to this one. ! 18: ! 19: Permission is granted to copy and distribute translations of this ! 20: manual into another language, under the above conditions for modified ! 21: versions, except that the sections entitled "The GNU Manifesto", ! 22: "Distribution" and "GNU General Public License" may be included in a ! 23: translation approved by the author instead of in the original English. ! 24: ! 25: ! 26: File: emacs, Node: Top, Next: Distrib, Up: (DIR) ! 27: ! 28: The Emacs Editor ! 29: **************** ! 30: ! 31: Emacs is the extensible, customizable, self-documenting real-time ! 32: display editor. This Info file describes how to edit with Emacs and ! 33: some of how to customize it, but not how to extend it. ! 34: ! 35: * Menu: ! 36: ! 37: * Distrib:: How to get the latest Emacs distribution. ! 38: * License:: The GNU General Public License gives you permission ! 39: to redistribute GNU Emacs on certain terms; and also ! 40: explains that there is no warranty. ! 41: * Intro:: An introduction to Emacs concepts. ! 42: * Glossary:: The glossary. ! 43: * Version 19:: Changes coming in Emacs version 19, to be released. ! 44: * Manifesto:: What's GNU? Gnu's Not Unix! ! 45: ! 46: Indexes, nodes containing large menus ! 47: * Key Index:: An item for each standard Emacs key sequence. ! 48: * Command Index:: An item for each command name. ! 49: * Variable Index:: An item for each documented variable. ! 50: * Concept Index:: An item for each concept. ! 51: ! 52: Important General Concepts ! 53: * Screen:: How to interpret what you see on the screen. ! 54: * Characters:: Emacs's character sets for file contents and for keyboard. ! 55: * Keys:: Key sequences: what you type to request one editing action. ! 56: * Commands:: Commands: named functions run by key sequences to do editing. ! 57: * Entering Emacs:: Starting Emacs from the shell. ! 58: * Command Switches:: Hairy startup options. ! 59: * Exiting:: Stopping or killing Emacs. ! 60: * Basic:: The most basic editing commands. ! 61: * Undo:: Undoing recently made changes in the text. ! 62: * Minibuffer:: Entering arguments that are prompted for. ! 63: * M-x:: Invoking commands by their names. ! 64: * Help:: Commands for asking Emacs about its commands. ! 65: ! 66: Important Text-Changing Commands ! 67: * Mark:: The mark: how to delimit a "region" of text. ! 68: * Killing:: Killing text. ! 69: * Yanking:: Recovering killed text. Moving text. ! 70: * Accumulating Text:: ! 71: Other ways of copying text. ! 72: * Rectangles:: Operating on the text inside a rectangle on the screen. ! 73: * Registers:: Saving a text string or a location in the buffer. ! 74: * Display:: Controlling what text is displayed. ! 75: * Search:: Finding or replacing occurrences of a string. ! 76: * Fixit:: Commands especially useful for fixing typos. ! 77: ! 78: Larger Units of Text ! 79: * Files:: All about handling files. ! 80: * Buffers:: Multiple buffers; editing several files at once. ! 81: * Windows:: Viewing two pieces of text at once. ! 82: ! 83: Advanced Features ! 84: * Major Modes:: Text mode vs. Lisp mode vs. C mode ... ! 85: * Indentation:: Editing the white space at the beginnings of lines. ! 86: * Text:: Commands and modes for editing English. ! 87: * Programs:: Commands and modes for editing programs. ! 88: * Compiling/Testing:: ! 89: Compiling, running and debugging programs. ! 90: * Abbrevs:: How to define text abbreviations to reduce ! 91: the number of characters you must type. ! 92: * Picture:: Editing pictures made up of characters ! 93: using the quarter-plane screen model. ! 94: * Sending Mail::Sending mail in Emacs. ! 95: * Rmail:: Reading mail in Emacs. ! 96: * Recursive Edit:: ! 97: A command can allow you to do editing ! 98: "within the command". This is called a ! 99: `recursive editing level'. ! 100: * Narrowing:: Restricting display and editing to a portion ! 101: of the buffer. ! 102: * Sorting:: Sorting lines, paragraphs or pages within Emacs. ! 103: * Shell:: Executing shell commands from Emacs. ! 104: * Hardcopy:: Printing buffers or regions. ! 105: * Dissociated Press:: Dissociating text for fun. ! 106: * Amusements:: Various games and hacks. ! 107: * Emulation:: Emulating some other editors with Emacs. ! 108: * Customization:: Modifying the behavior of Emacs. ! 109: ! 110: Recovery from Problems. ! 111: * Quitting:: Quitting and aborting. ! 112: * Lossage:: What to do if Emacs is hung or malfunctioning. ! 113: * Bugs:: How and when to report a bug. ! 114: ! 115: Here are some other nodes which are really inferiors of the ones ! 116: already listed, mentioned here so you can get to them in one step: ! 117: ! 118: Subnodes of Screen ! 119: * Point:: The place in the text where editing commands operate. ! 120: * Echo Area:: Short messages appear at the bottom of the screen. ! 121: * Mode Line:: Interpreting the mode line. ! 122: ! 123: Subnodes of Basic ! 124: * Blank Lines:: Commands to make or delete blank lines. ! 125: * Continuation Lines:: Lines too wide for the screen. ! 126: * Position Info:: What page, line, row, or column is point on? ! 127: * Arguments:: Giving numeric arguments to commands. ! 128: ! 129: Subnodes of Minibuffer ! 130: * Minibuffer File:: Entering file names with the minibuffer. ! 131: * Minibuffer Edit:: How to edit in the minibuffer. ! 132: * Completion:: An abbreviation facility for minibuffer input. ! 133: * Repetition:: Re-executing previous commands that used the minibuffer. ! 134: ! 135: Subnodes of Mark ! 136: * Setting Mark:: Commands to set the mark. ! 137: * Using Region:: Summary of ways to operate on contents of the region. ! 138: * Marking Objects:: Commands to put region around textual units. ! 139: * Mark Ring:: Previous mark positions saved so you can go back there. ! 140: ! 141: Subnodes of Yanking ! 142: * Kill Ring:: Where killed text is stored. Basic yanking. ! 143: * Appending Kills:: Several kills in a row all yank together. ! 144: * Earlier Kills:: Yanking something killed some time ago. ! 145: ! 146: Subnodes of Registers ! 147: * RegPos:: Saving positions in registers. ! 148: * RegText:: Saving text in registers. ! 149: * RegRect:: Saving rectangles in registers. ! 150: ! 151: Subnodes of Display ! 152: * Scrolling:: Moving text up and down in a window. ! 153: * Horizontal Scrolling:: Moving text left and right in a window. ! 154: * Selective Display:: Hiding lines with lots of indentation. ! 155: * Display Vars:: Information on variables for customizing display. ! 156: ! 157: Subnodes of Search ! 158: * Incremental Search:: Search happens as you type the string. ! 159: * Nonincremental Search:: Specify entire string and then search. ! 160: * Word Search:: Search for sequence of words. ! 161: * Regexp Search:: Search for match for a regexp. ! 162: * Regexps:: Syntax of regular expressions. ! 163: * Search Case:: To ignore case while searching, or not. ! 164: * Replace:: Search, and replace some or all matches. ! 165: * Unconditional Replace:: Everything about replacement except for querying. ! 166: * Query Replace:: How to use querying. ! 167: * Other Repeating Search:: Operating on all matches for some regexp. ! 168: ! 169: Subnodes of Fixit ! 170: * Kill Errors:: Commands to kill a batch of recently entered text. ! 171: * Transpose:: Exchanging two characters, words, lines, lists... ! 172: * Fixing Case:: Correcting case of last word entered. ! 173: * Spelling:: Apply spelling checker to a word, or a whole file. ! 174: ! 175: Subnodes of Files ! 176: * File Names:: How to type and edit file name arguments. ! 177: * Visiting:: Visiting a file prepares Emacs to edit the file. ! 178: * Saving:: Saving makes your changes permanent. ! 179: * Backup:: How Emacs saves the old version of your file. ! 180: * Interlocking::How Emacs protects against simultaneous editing ! 181: of one file by two users. ! 182: * Reverting:: Reverting cancels all the changes not saved. ! 183: * Auto Save:: Auto Save periodically protects against loss of data. ! 184: * ListDir:: Listing the contents of a file directory. ! 185: * Dired:: "Editing" a directory to delete, rename, etc. ! 186: the files in it. ! 187: * Misc File Ops:: Other things you can do on files. ! 188: ! 189: Subnodes of Buffers ! 190: * Select Buffer:: Creating a new buffer or reselecting an old one. ! 191: * List Buffers:: Getting a list of buffers that exist. ! 192: * Misc Buffer:: Renaming; changing read-only status. ! 193: * Kill Buffer:: Killing buffers you no longer need. ! 194: * Several Buffers:: How to go through the list of all buffers ! 195: and operate variously on several of them. ! 196: ! 197: Subnodes of Windows ! 198: * Basic Window:: Introduction to Emacs windows. ! 199: * Split Window:: New windows are made by splitting existing windows. ! 200: * Other Window:: Moving to another window or doing something to it. ! 201: * Pop Up Window:: Finding a file or buffer in another window. ! 202: * Change Window:: Deleting windows and changing their sizes. ! 203: ! 204: Subnodes of Indentation ! 205: * Indentation Commands:: Various commands and techniques for indentation. ! 206: * Tab Stops:: You can set arbitrary "tab stops" and then ! 207: indent to the next tab stop when you want to. ! 208: * Just Spaces:: You can request indentation using just spaces. ! 209: ! 210: Subnodes of Text ! 211: * Text Mode:: The major mode for editing text files. ! 212: * Nroff Mode:: The major mode for editing input to the formatter nroff. ! 213: * TeX Mode:: The major mode for editing input to the formatter TeX. ! 214: * Texinfo Mode::The major mode for editing input to the formatter Texinfo. ! 215: * Outline Mode::The major mode for editing outlines. ! 216: * Words:: Moving over and killing words. ! 217: * Sentences:: Moving over and killing sentences. ! 218: * Paragraphs:: Moving over paragraphs. ! 219: * Pages:: Moving over pages. ! 220: * Filling:: Filling or justifying text ! 221: * Case:: Changing the case of text ! 222: ! 223: Subnodes of Programs ! 224: * Program Modes:: Major modes for editing programs. ! 225: * Lists:: Expressions with balanced parentheses. ! 226: There are editing commands to operate on them. ! 227: * Defuns:: Each program is made up of separate functions. ! 228: There are editing commands to operate on them. ! 229: * Grinding:: Adjusting indentation to show the nesting. ! 230: * Matching:: Insertion of a close-delimiter flashes matching open. ! 231: * Comments:: Inserting, killing and aligning comments. ! 232: * Balanced Editing:: Inserting two matching parentheses at once, etc. ! 233: * Lisp Completion:: Completion on symbol names in Lisp code. ! 234: * Documentation:: Getting documentation of functions you plan to call. ! 235: * Change Log:: Maintaining a change history for your program. ! 236: * Tags:: Go direct to any function in your program in one ! 237: command. Tags remembers which file it is in. ! 238: * Fortran:: Fortran mode and its special features. ! 239: ! 240: Subnodes of Compiling/Testing ! 241: * Compilation:: Compiling programs in languages other than Lisp ! 242: (C, Pascal, etc.) ! 243: * Lisp Modes:: Various modes for editing Lisp programs, with ! 244: different facilities for running the Lisp programs. ! 245: * Lisp Libraries:: Creating Lisp programs to run in Emacs. ! 246: * Lisp Interaction:: Executing Lisp in an Emacs buffer. ! 247: * Lisp Eval:: Executing a single Lisp expression in Emacs. ! 248: * Lisp Debug:: Debugging Lisp programs running in Emacs. ! 249: * External Lisp:: Communicating through Emacs with a separate Lisp. ! 250: ! 251: Subnodes of Abbrevs ! 252: * Defining Abbrevs:: Defining an abbrev, so it will expand when typed. ! 253: * Expanding Abbrevs:: Controlling expansion: prefixes, canceling expansion. ! 254: * Editing Abbrevs:: Viewing or editing the entire list of defined abbrevs. ! 255: * Saving Abbrevs:: Saving the entire list of abbrevs for another session. ! 256: * Dynamic Abbrevs:: Abbreviations for words already in the buffer. ! 257: ! 258: Subnodes of Picture ! 259: * Basic Picture:: Basic concepts and simple commands of Picture mode. ! 260: * Insert in Picture:: Controlling direction of cursor motion ! 261: after "self-inserting" characters. ! 262: * Tabs in Picture:: Various features for tab stops and indentation. ! 263: * Rectangles in Picture:: Clearing and superimposing rectangles. ! 264: ! 265: Subnodes of Sending Mail ! 266: * Mail Format:: Format of the mail being composed. ! 267: * Mail Headers:: Details of allowed mail header fields. ! 268: * Mail Mode:: Special commands for editing mail being composed. ! 269: ! 270: Subnodes of Rmail ! 271: * Rmail Scrolling:: Scrolling through a message. ! 272: * Rmail Motion:: Moving to another message. ! 273: * Rmail Deletion:: Deleting and expunging messages. ! 274: * Rmail Inbox:: How mail gets into the Rmail file. ! 275: * Rmail Files:: Using multiple Rmail files. ! 276: * Rmail Output:: Copying message out to files. ! 277: * Rmail Labels:: Classifying messages by labeling them. ! 278: * Rmail Summary:: Summaries show brief info on many messages. ! 279: * Rmail Reply:: Sending replies to messages you are viewing. ! 280: * Rmail Editing:: Editing message text and headers in Rmail. ! 281: * Rmail Digest:: Extracting the messages from a digest message. ! 282: ! 283: Subnodes of Shell ! 284: * Single Shell:: Commands to run one shell command and return. ! 285: * Interactive Shell:: Permanent shell taking input via Emacs. ! 286: * Shell Mode:: Special Emacs commands used with permanent shell. ! 287: ! 288: Subnodes of Customization ! 289: * Minor Modes:: Each minor mode is one feature you can turn on ! 290: independently of any others. ! 291: * Variables:: Many Emacs commands examine Emacs variables ! 292: to decide what to do; by setting variables, ! 293: you can control their functioning. ! 294: * Examining:: Examining or setting one variable's value. ! 295: * Edit Options:: Examining or editing list of all variables' values. ! 296: * Locals:: Per-buffer values of variables. ! 297: * File Variables:: How files can specify variable values. ! 298: * Keyboard Macros:: A keyboard macro records a sequence of keystrokes ! 299: to be replayed with a single command. ! 300: * Key Bindings:: The keymaps say what command each key runs. ! 301: By changing them, you can "redefine keys". ! 302: * Keymaps:: Definition of the keymap data structure. ! 303: * Rebinding:: How to redefine one key's meaning conveniently. ! 304: * Disabling:: Disabling a command means confirmation is required ! 305: before it can be executed. This is done to protect ! 306: beginners from surprises. ! 307: * Syntax:: The syntax table controls how words and expressions ! 308: are parsed. ! 309: * Init File:: How to write common customizations in the `.emacs' file. ! 310: ! 311: Subnodes of Lossage (and recovery) ! 312: * Stuck Recursive:: `[...]' in mode line around the parentheses. ! 313: * Screen Garbled:: Garbage on the screen. ! 314: * Text Garbled:: Garbage in the text. ! 315: * Unasked-for Search::Spontaneous entry to incremental search. ! 316: * Emergency Escape:: Emergency escape-- ! 317: What to do if Emacs stops responding. ! 318: * Total Frustration:: When you are at your wits' end. ! 319: ! 320: ! 321: File: emacs, Node: Distrib, Next: License, Prev: Top, Up: Top ! 322: ! 323: Distribution ! 324: ************ ! 325: ! 326: GNU Emacs is "free"; this means that everyone is free to use it and ! 327: free to redistribute it on a free basis. GNU Emacs is not in the public ! 328: domain; it is copyrighted and there are restrictions on its ! 329: distribution, but these restrictions are designed to permit everything ! 330: that a good cooperating citizen would want to do. What is not allowed ! 331: is to try to prevent others from further sharing any version of GNU ! 332: Emacs that they might get from you. The precise conditions are found in ! 333: the GNU General Public License that comes with Emacs and also appears ! 334: following this section. ! 335: ! 336: The easiest way to get a copy of GNU Emacs is from someone else who ! 337: has it. You need not ask for permission to do so, or tell any one else; ! 338: just copy it. ! 339: ! 340: If you have access to the Internet, you can get the latest ! 341: distribution version of GNU Emacs from host `prep.ai.mit.edu' using ! 342: anonymous login. See the file `/u2/emacs/GETTING.GNU.SOFTWARE' on that ! 343: host to find out about your options for copying and which files to use. ! 344: ! 345: You may also receive GNU Emacs when you buy a computer. Computer ! 346: manufacturers are free to distribute copies on the same terms that ! 347: apply to everyone else. These terms require them to give you the full ! 348: sources, including whatever changes they may have made, and to permit ! 349: you to redistribute the GNU Emacs received from them under the usual ! 350: terms of the General Public License. In other words, the program must ! 351: be free for you when you get it, not just free for the manufacturer. ! 352: ! 353: If you cannot get a copy in any of those ways, you can order one ! 354: from the Free Software Foundation. Though Emacs itself is free, our ! 355: distribution service is not. An order form is included at the end of ! 356: manuals printed by the Foundation. It is also included in the file ! 357: `etc/DISTRIB' in the Emacs distribution. For further information, ! 358: write to ! 359: ! 360: Free Software Foundation ! 361: 675 Mass Ave ! 362: Cambridge, MA 02139 ! 363: USA ! 364: ! 365: The income from distribution fees goes to support the foundation's ! 366: purpose: the development of more free software to distribute just like ! 367: GNU Emacs. ! 368: ! 369: If you find GNU Emacs useful, please send a donation to the Free ! 370: Software Foundation. This will help support development of the rest of ! 371: the GNU system, and other useful software beyond that. Your donation ! 372: is tax deductible. ! 373: ! 374: ! 375: File: emacs, Node: License, Next: Intro, Prev: Distrib, Up: Top ! 376: ! 377: GNU GENERAL PUBLIC LICENSE ! 378: ************************** ! 379: ! 380: Version 1, February 1989 ! 381: ! 382: Copyright (C) 1989 Free Software Foundation, Inc. ! 383: 675 Mass Ave, Cambridge, MA 02139, USA ! 384: ! 385: Everyone is permitted to copy and distribute verbatim copies ! 386: of this license document, but changing it is not allowed. ! 387: ! 388: Preamble ! 389: ======== ! 390: ! 391: The license agreements of most software companies try to keep users ! 392: at the mercy of those companies. By contrast, our General Public ! 393: License is intended to guarantee your freedom to share and change free ! 394: software--to make sure the software is free for all its users. The ! 395: General Public License applies to the Free Software Foundation's ! 396: software and to any other program whose authors commit to using it. You ! 397: can use it for your programs, too. ! 398: ! 399: When we speak of free software, we are referring to freedom, not ! 400: price. Specifically, the General Public License is designed to make ! 401: sure that you have the freedom to give away or sell copies of free ! 402: software, that you receive source code or can get it if you want it, ! 403: that you can change the software or use pieces of it in new free ! 404: programs; and that you know you can do these things. ! 405: ! 406: To protect your rights, we need to make restrictions that forbid ! 407: anyone to deny you these rights or to ask you to surrender the rights. ! 408: These restrictions translate to certain responsibilities for you if you ! 409: distribute copies of the software, or if you modify it. ! 410: ! 411: For example, if you distribute copies of a such a program, whether ! 412: gratis or for a fee, you must give the recipients all the rights that ! 413: you have. You must make sure that they, too, receive or can get the ! 414: source code. And you must tell them their rights. ! 415: ! 416: We protect your rights with two steps: (1) copyright the software, ! 417: and (2) offer you this license which gives you legal permission to copy, ! 418: distribute and/or modify the software. ! 419: ! 420: Also, for each author's protection and ours, we want to make certain ! 421: that everyone understands that there is no warranty for this free ! 422: software. If the software is modified by someone else and passed on, we ! 423: want its recipients to know that what they have is not the original, so ! 424: that any problems introduced by others will not reflect on the original ! 425: authors' reputations. ! 426: ! 427: The precise terms and conditions for copying, distribution and ! 428: modification follow. ! 429: ! 430: TERMS AND CONDITIONS ! 431: ! 432: 1. This License Agreement applies to any program or other work which ! 433: contains a notice placed by the copyright holder saying it may be ! 434: distributed under the terms of this General Public License. The ! 435: "Program", below, refers to any such program or work, and a "work ! 436: based on the Program" means either the Program or any work ! 437: containing the Program or a portion of it, either verbatim or with ! 438: modifications. Each licensee is addressed as "you". ! 439: ! 440: 2. You may copy and distribute verbatim copies of the Program's source ! 441: code as you receive it, in any medium, provided that you ! 442: conspicuously and appropriately publish on each copy an ! 443: appropriate copyright notice and disclaimer of warranty; keep ! 444: intact all the notices that refer to this General Public License ! 445: and to the absence of any warranty; and give any other recipients ! 446: of the Program a copy of this General Public License along with ! 447: the Program. You may charge a fee for the physical act of ! 448: transferring a copy. ! 449: ! 450: 3. You may modify your copy or copies of the Program or any portion of ! 451: it, and copy and distribute such modifications under the terms of ! 452: Paragraph 1 above, provided that you also do the following: ! 453: ! 454: * cause the modified files to carry prominent notices stating ! 455: that you changed the files and the date of any change; and ! 456: ! 457: * cause the whole of any work that you distribute or publish, ! 458: that in whole or in part contains the Program or any part ! 459: thereof, either with or without modifications, to be licensed ! 460: at no charge to all third parties under the terms of this ! 461: General Public License (except that you may choose to grant ! 462: warranty protection to some or all third parties, at your ! 463: option). ! 464: ! 465: * If the modified program normally reads commands interactively ! 466: when run, you must cause it, when started running for such ! 467: interactive use in the simplest and most usual way, to print ! 468: or display an announcement including an appropriate copyright ! 469: notice and a notice that there is no warranty (or else, ! 470: saying that you provide a warranty) and that users may ! 471: redistribute the program under these conditions, and telling ! 472: the user how to view a copy of this General Public License. ! 473: ! 474: * You may charge a fee for the physical act of transferring a ! 475: copy, and you may at your option offer warranty protection in ! 476: exchange for a fee. ! 477: ! 478: Mere aggregation of another independent work with the Program (or ! 479: its derivative) on a volume of a storage or distribution medium ! 480: does not bring the other work under the scope of these terms. ! 481: ! 482: 4. You may copy and distribute the Program (or a portion or ! 483: derivative of it, under Paragraph 2) in object code or executable ! 484: form under the terms of Paragraphs 1 and 2 above provided that you ! 485: also do one of the following: ! 486: ! 487: * accompany it with the complete corresponding machine-readable ! 488: source code, which must be distributed under the terms of ! 489: Paragraphs 1 and 2 above; or, ! 490: ! 491: * accompany it with a written offer, valid for at least three ! 492: years, to give any third party free (except for a nominal ! 493: charge for the cost of distribution) a complete ! 494: machine-readable copy of the corresponding source code, to be ! 495: distributed under the terms of Paragraphs 1 and 2 above; or, ! 496: ! 497: * accompany it with the information you received as to where the ! 498: corresponding source code may be obtained. (This alternative ! 499: is allowed only for noncommercial distribution and only if you ! 500: received the program in object code or executable form alone.) ! 501: ! 502: Source code for a work means the preferred form of the work for ! 503: making modifications to it. For an executable file, complete ! 504: source code means all the source code for all modules it contains; ! 505: but, as a special exception, it need not include source code for ! 506: modules which are standard libraries that accompany the operating ! 507: system on which the executable file runs, or for standard header ! 508: files or definitions files that accompany that operating system. ! 509: ! 510: 5. You may not copy, modify, sublicense, distribute or transfer the ! 511: Program except as expressly provided under this General Public ! 512: License. Any attempt otherwise to copy, modify, sublicense, ! 513: distribute or transfer the Program is void, and will automatically ! 514: terminate your rights to use the Program under this License. ! 515: However, parties who have received copies, or rights to use ! 516: copies, from you under this General Public License will not have ! 517: their licenses terminated so long as such parties remain in full ! 518: compliance. ! 519: ! 520: 6. By copying, distributing or modifying the Program (or any work ! 521: based on the Program) you indicate your acceptance of this license ! 522: to do so, and all its terms and conditions. ! 523: ! 524: 7. Each time you redistribute the Program (or any work based on the ! 525: Program), the recipient automatically receives a license from the ! 526: original licensor to copy, distribute or modify the Program ! 527: subject to these terms and conditions. You may not impose any ! 528: further restrictions on the recipients' exercise of the rights ! 529: granted herein. ! 530: ! 531: 8. The Free Software Foundation may publish revised and/or new ! 532: versions of the General Public License from time to time. Such ! 533: new versions will be similar in spirit to the present version, but ! 534: may differ in detail to address new problems or concerns. ! 535: ! 536: Each version is given a distinguishing version number. If the ! 537: Program specifies a version number of the license which applies to ! 538: it and "any later version", you have the option of following the ! 539: terms and conditions either of that version or of any later ! 540: version published by the Free Software Foundation. If the Program ! 541: does not specify a version number of the license, you may choose ! 542: any version ever published by the Free Software Foundation. ! 543: ! 544: 9. If you wish to incorporate parts of the Program into other free ! 545: programs whose distribution conditions are different, write to the ! 546: author to ask for permission. For software which is copyrighted ! 547: by the Free Software Foundation, write to the Free Software ! 548: Foundation; we sometimes make exceptions for this. Our decision ! 549: will be guided by the two goals of preserving the free status of ! 550: all derivatives of our free software and of promoting the sharing ! 551: and reuse of software generally. ! 552: ! 553: NO WARRANTY ! 554: ! 555: 10. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO ! 556: WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE ! 557: LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT ! 558: HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT ! 559: WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT ! 560: NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND ! 561: FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE ! 562: QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE ! 563: PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY ! 564: SERVICING, REPAIR OR CORRECTION. ! 565: ! 566: 11. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN ! 567: WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY ! 568: MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE ! 569: LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, ! 570: INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR ! 571: INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF ! 572: DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU ! 573: OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY ! 574: OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ! 575: ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. ! 576: ! 577: END OF TERMS AND CONDITIONS ! 578: ! 579: How to Apply These Terms to Your New Programs ! 580: ============================================= ! 581: ! 582: If you develop a new program, and you want it to be of the greatest ! 583: possible use to humanity, the best way to achieve this is to make it ! 584: free software which everyone can redistribute and change under these ! 585: terms. ! 586: ! 587: To do so, attach the following notices to the program. It is safest ! 588: to attach them to the start of each source file to most effectively ! 589: convey the exclusion of warranty; and each file should have at least the ! 590: "copyright" line and a pointer to where the full notice is found. ! 591: ! 592: ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. ! 593: Copyright (C) 19YY NAME OF AUTHOR ! 594: ! 595: This program is free software; you can redistribute it and/or modify ! 596: it under the terms of the GNU General Public License as published by ! 597: the Free Software Foundation; either version 1, or (at your option) ! 598: any later version. ! 599: ! 600: This program is distributed in the hope that it will be useful, ! 601: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 602: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 603: GNU General Public License for more details. ! 604: ! 605: You should have received a copy of the GNU General Public License ! 606: along with this program; if not, write to the Free Software ! 607: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ! 608: ! 609: Also add information on how to contact you by electronic and paper ! 610: mail. ! 611: ! 612: If the program is interactive, make it output a short notice like ! 613: this when it starts in an interactive mode: ! 614: ! 615: Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR ! 616: Gnomovision comes with ABSOLUTELY NO WARRANTY; for details ! 617: type `show w'. This is free software, and you are welcome ! 618: to redistribute it under certain conditions; type `show c' ! 619: for details. ! 620: ! 621: The hypothetical commands `show w' and `show c' should show the ! 622: appropriate parts of the General Public License. Of course, the ! 623: commands you use may be called something other than `show w' and `show ! 624: c'; they could even be mouse-clicks or menu items--whatever suits your ! 625: program. ! 626: ! 627: You should also get your employer (if you work as a programmer) or ! 628: your school, if any, to sign a "copyright disclaimer" for the program, ! 629: if necessary. Here is a sample; alter the names: ! 630: ! 631: Yoyodyne, Inc., hereby disclaims all copyright ! 632: interest in the program `Gnomovision' ! 633: (a program to direct compilers to make passes ! 634: at assemblers) written by James Hacker. ! 635: ! 636: SIGNATURE OF TY COON, 1 April 1989 ! 637: Ty Coon, President of Vice ! 638: ! 639: That's all there is to it! ! 640: ! 641: ! 642: File: emacs, Node: Intro, Next: Glossary, Prev: License, Up: Top ! 643: ! 644: Introduction ! 645: ************ ! 646: ! 647: You are reading about GNU Emacs, the GNU incarnation of the advanced, ! 648: self-documenting, customizable, extensible real-time display editor ! 649: Emacs. (The `G' in `GNU' is not silent.) ! 650: ! 651: We say that Emacs is a "display" editor because normally the text ! 652: being edited is visible on the screen and is updated automatically as ! 653: you type your commands. *Note Display: Screen. ! 654: ! 655: We call it a "real-time" editor because the display is updated very ! 656: frequently, usually after each character or pair of characters you ! 657: type. This minimizes the amount of information you must keep in your ! 658: head as you edit. *Note Real-time: Basic. ! 659: ! 660: We call Emacs advanced because it provides facilities that go beyond ! 661: simple insertion and deletion: filling of text; automatic indentation of ! 662: programs; viewing two or more files at once; and dealing in terms of ! 663: characters, words, lines, sentences, paragraphs, and pages, as well as ! 664: expressions and comments in several different programming languages. ! 665: It is much easier to type one command meaning "go to the end of the ! 666: paragraph" than to find that spot with simple cursor keys. ! 667: ! 668: "Self-documenting" means that at any time you can type a special ! 669: character, `Control-h', to find out what your options are. You can ! 670: also use it to find out what any command does, or to find all the ! 671: commands that pertain to a topic. *Note Help::. ! 672: ! 673: "Customizable" means that you can change the definitions of Emacs ! 674: commands in little ways. For example, if you use a programming ! 675: language in which comments start with `<**' and end with `**>', you can ! 676: tell the Emacs comment manipulation commands to use those strings ! 677: (*note Comments::.). Another sort of customization is rearrangement of ! 678: the command set. For example, if you prefer the four basic cursor ! 679: motion commands (up, down, left and right) on keys in a diamond pattern ! 680: on the keyboard, you can have it. *Note Customization::. ! 681: ! 682: "Extensible" means that you can go beyond simple customization and ! 683: write entirely new commands, programs in the Lisp language to be run by ! 684: Emacs's own Lisp interpreter. Emacs is an "on-line extensible" system, ! 685: which means that it is divided into many functions that call each other, ! 686: any of which can be redefined in the middle of an editing session. Any ! 687: part of Emacs can be replaced without making a separate copy of all of ! 688: Emacs. Most of the editing commands of Emacs are written in Lisp ! 689: already; the few exceptions could have been written in Lisp but are ! 690: written in C for efficiency. Although only a programmer can write an ! 691: extension, anybody can use it afterward. ! 692: ! 693: ! 694: File: emacs, Node: Screen, Next: Characters, Prev: Concept Index, Up: Top ! 695: ! 696: The Organization of the Screen ! 697: ****************************** ! 698: ! 699: Emacs divides the screen into several areas, each of which contains ! 700: its own sorts of information. The biggest area, of course, is the one ! 701: in which you usually see the text you are editing. ! 702: ! 703: When you are using Emacs, the screen is divided into a number of ! 704: "windows". Initially there is one text window occupying all but the ! 705: last line, plus the special "echo area" or "minibuffer window" in the ! 706: last line. The text window can be subdivided horizontally or ! 707: vertically into multiple text windows, each of which can be used for a ! 708: different file (*note Windows::.). The window that the cursor is in is ! 709: the "selected window", in which editing takes place. The other windows ! 710: are just for reference unless you select one of them. ! 711: ! 712: Each text window's last line is a "mode line" which describes what is ! 713: going on in that window. It is in inverse video if the terminal ! 714: supports that, and contains text that starts like `-----Emacs: ! 715: SOMETHING'. Its purpose is to indicate what buffer is being displayed ! 716: above it in the window; what major and minor modes are in use; and ! 717: whether the buffer's text has been changed. ! 718: ! 719: * Menu: ! 720: ! 721: * Point:: The place in the text where editing commands operate. ! 722: * Echo Area:: Short messages appear at the bottom of the screen. ! 723: * Mode Line:: Interpreting the mode line. ! 724: ! 725: ! 726: File: emacs, Node: Point, Next: Echo Area, Prev: Screen, Up: Screen ! 727: ! 728: Point ! 729: ===== ! 730: ! 731: When Emacs is running, the terminal's cursor shows the location at ! 732: which editing commands will take effect. This location is called ! 733: "point". Other commands move point through the text, so that you can ! 734: edit at different places in it. ! 735: ! 736: While the cursor appears to point AT a character, point should be ! 737: thought of as BETWEEN two characters; it points BEFORE the character ! 738: that the cursor appears on top of. Sometimes people speak of "the ! 739: cursor" when they mean "point", or speak of commands that move point as ! 740: "cursor motion" commands. ! 741: ! 742: Terminals have only one cursor, and when output is in progress it ! 743: must appear where the typing is being done. This does not mean that ! 744: point is moving. It is only that Emacs has no way to show you the ! 745: location of point except when the terminal is idle. ! 746: ! 747: If you are editing several files in Emacs, each file has its own ! 748: point location. A file that is not being displayed remembers where ! 749: point is so that it can be seen when you look at that file again. ! 750: ! 751: When there are multiple text windows, each window has its own point ! 752: location. The cursor shows the location of point in the selected ! 753: window. This also is how you can tell which window is selected. If the ! 754: same buffer appears in more than one window, point can be moved in each ! 755: window independently. ! 756: ! 757: The term `point' comes from the character `.', which was the command ! 758: in TECO (the language in which the original Emacs was written) for ! 759: accessing the value now called `point'. ! 760: ! 761: ! 762: File: emacs, Node: Echo Area, Next: Mode Line, Prev: Point, Up: Screen ! 763: ! 764: The Echo Area ! 765: ============= ! 766: ! 767: The line at the bottom of the screen (below the mode line) is the ! 768: "echo area". It is used to display small amounts of text for several ! 769: purposes. ! 770: ! 771: "Echoing" means printing out the characters that you type. Emacs ! 772: never echoes single-character commands, and multi-character commands are ! 773: echoed only if you pause while typing them. As soon as you pause for ! 774: more than a second in the middle of a command, all the characters of ! 775: the command so far are echoed. This is intended to "prompt" you for ! 776: the rest of the command. Once echoing has started, the rest of the ! 777: command is echoed immediately when you type it. This behavior is ! 778: designed to give confident users fast response, while giving hesitant ! 779: users maximum feedback. You can change this behavior by setting a ! 780: variable (*note Display Vars::.). ! 781: ! 782: If a command cannot be executed, it may print an "error message" in ! 783: the echo area. Error messages are accompanied by a beep or by flashing ! 784: the screen. Also, any input you have typed ahead is thrown away when ! 785: an error happens. ! 786: ! 787: Some commands print informative messages in the echo area. These ! 788: messages look much like error messages, but they are not announced with ! 789: a beep and do not throw away input. Sometimes the message tells you ! 790: what the command has done, when this is not obvious from looking at the ! 791: text being edited. Sometimes the sole purpose of a command is to print ! 792: a message giving you specific information. For example, the command ! 793: `C-x =' is used to print a message describing the character position of ! 794: point in the text and its current column in the window. Commands that ! 795: take a long time often display messages ending in `...' while they are ! 796: working, and add `done' at the end when they are finished. ! 797: ! 798: The echo area is also used to display the "minibuffer", a window that ! 799: is used for reading arguments to commands, such as the name of a file ! 800: to be edited. When the minibuffer is in use, the echo area begins with ! 801: a prompt string that usually ends with a colon; also, the cursor ! 802: appears in that line because it is the selected window. You can always ! 803: get out of the minibuffer by typing `C-g'. *Note Minibuffer::. ! 804: ! 805: ! 806: File: emacs, Node: Mode Line, Prev: Echo Area, Up: Screen ! 807: ! 808: The Mode Line ! 809: ============= ! 810: ! 811: Each text window's last line is a "mode line" which describes what is ! 812: going on in that window. When there is only one text window, the mode ! 813: line appears right above the echo area. The mode line is in inverse ! 814: video if the terminal supports that, starts and ends with dashes, and ! 815: contains text like `Emacs: SOMETHING'. ! 816: ! 817: If a mode line has something else in place of `Emacs: SOMETHING', ! 818: then the window above it is in a special subsystem such as Dired. The ! 819: mode line then indicates the status of the subsystem. ! 820: ! 821: Normally, the mode line has the following appearance: ! 822: ! 823: --CH-Emacs: BUF (MAJOR MINOR)----POS------ ! 824: ! 825: This gives information about the buffer being displayed in the window: ! 826: the buffer's name, what major and minor modes are in use, whether the ! 827: buffer's text has been changed, and how far down the buffer you are ! 828: currently looking. ! 829: ! 830: CH contains two stars `**' if the text in the buffer has been edited ! 831: (the buffer is "modified"), or `--' if the buffer has not been edited. ! 832: Exception: for a read-only buffer, it is `%%'. ! 833: ! 834: BUF is the name of the window's chosen "buffer". The chosen buffer ! 835: in the selected window (the window that the cursor is in) is also ! 836: Emacs's selected buffer, the one that editing takes place in. When we ! 837: speak of what some command does to "the buffer", we are talking about ! 838: the currently selected buffer. *Note Buffers::. ! 839: ! 840: POS tells you whether there is additional text above the top of the ! 841: screen, or below the bottom. If your file is small and it is all on the ! 842: screen, POS is `All'. Otherwise, it is `Top' if you are looking at the ! 843: beginning of the file, `Bot' if you are looking at the end of the file, ! 844: or `NN%', where NN is the percentage of the file above the top of the ! 845: screen. ! 846: ! 847: MAJOR is the name of the "major mode" in effect in the buffer. At ! 848: any time, each buffer is in one and only one of the possible major ! 849: modes. The major modes available include Fundamental mode (the least ! 850: specialized), Text mode, Lisp mode, and C mode. *Note Major Modes::, ! 851: for details of how the modes differ and how to select one. ! 852: ! 853: MINOR is a list of some of the "minor modes" that are turned on at ! 854: the moment in the window's chosen buffer. `Fill' means that Auto Fill ! 855: mode is on. `Abbrev' means that Word Abbrev mode is on. `Ovwrt' means ! 856: that Overwrite mode is on. *Note Minor Modes::, for more information. ! 857: `Narrow' means that the buffer being displayed has editing restricted ! 858: to only a portion of its text. This is not really a minor mode, but is ! 859: like one. *Note Narrowing::. `Def' means that a keyboard macro is ! 860: being defined. *Note Keyboard Macros::. ! 861: ! 862: Some buffers display additional information after the minor modes. ! 863: For example, Rmail buffers display the current message number and the ! 864: total number of messages. Compilation buffers and Shell mode display ! 865: the status of the subprocess. ! 866: ! 867: In addition, if Emacs is currently inside a recursive editing level, ! 868: square brackets (`[...]') appear around the parentheses that surround ! 869: the modes. If Emacs is in one recursive editing level within another, ! 870: double square brackets appear, and so on. Since this information ! 871: pertains to Emacs in general and not to any one buffer, the square ! 872: brackets appear in every mode line on the screen or not in any of them. ! 873: *Note Recursive Edit::. ! 874: ! 875: Emacs can optionally display the time and system load in all mode ! 876: lines. To enable this feature, type `M-x display-time'. The ! 877: information added to the mode line usually appears after the file name, ! 878: before the mode names and their parentheses. It looks like this: ! 879: ! 880: HH:MMpm L.LL [D] ! 881: ! 882: (Some fields may be missing if your operating system cannot support ! 883: them.) HH and MM are the hour and minute, followed always by `am' or ! 884: `pm'. L.LL is the average number of running processes in the whole ! 885: system recently. D is an approximate index of the ratio of disk ! 886: activity to cpu activity for all users. ! 887: ! 888: The word `Mail' appears after the load level if there is mail for ! 889: you that you have not read yet. ! 890: ! 891: Customization note: the user variable `mode-line-inverse-video' ! 892: controls whether the mode line is displayed in inverse video (assuming ! 893: the terminal supports it); `nil' means no inverse video. The default ! 894: is `t'. ! 895: ! 896: ! 897: File: emacs, Node: Characters, Next: Keys, Prev: Screen, Up: Top ! 898: ! 899: The Emacs Character Set ! 900: ======================= ! 901: ! 902: GNU Emacs uses the ASCII character set, which defines 128 different ! 903: character codes. Some of these codes are assigned graphic symbols such ! 904: as `a' and `='; the rest are control characters, such as `Control-a' ! 905: (also called `C-a' for short). `C-a' gets its name from the fact that ! 906: you type it by holding down the CTRL key and then pressing `a'. There ! 907: is no distinction between `C-a' and `C-A'; they are the same character. ! 908: ! 909: Some control characters have special names, and special keys you can ! 910: type them with: RET, TAB, LFD, DEL and ESC. The space character is ! 911: usually referred to below as SPC, even though strictly speaking it is a ! 912: graphic character whose graphic happens to be blank. ! 913: ! 914: Emacs extends the 7-bit ASCII code to an 8-bit code by adding an ! 915: extra bit to each character. This makes 256 possible command ! 916: characters. The additional bit is called Meta. Any ASCII character ! 917: can be made Meta; examples of Meta characters include `Meta-a' (`M-a', ! 918: for short), `M-A' (not the same character as `M-a', but those two ! 919: characters normally have the same meaning in Emacs), `M-RET', and ! 920: `M-C-a'. For traditional reasons, `M-C-a' is usually called `C-M-a'; ! 921: logically speaking, the order in which the modifier keys CTRL and META ! 922: are mentioned does not matter. ! 923: ! 924: Some terminals have a META key, and allow you to type Meta ! 925: characters by holding this key down. Thus, `Meta-a' is typed by ! 926: holding down META and pressing `a'. The META key works much like the ! 927: SHIFT key. Such a key is not always labeled META, however, as this ! 928: function is often a special option for a key with some other primary ! 929: purpose. ! 930: ! 931: If there is no META key, you can still type Meta characters using ! 932: two-character sequences starting with ESC. Thus, to enter `M-a', you ! 933: could type `ESC a'. To enter `C-M-a', you would type `ESC C-a'. ESC is ! 934: allowed on terminals with Meta keys, too, in case you have formed a ! 935: habit of using it. ! 936: ! 937: Emacs believes the terminal has a META key if the variable ! 938: `meta-flag' is non-`nil'. Normally this is set automatically according ! 939: to the termcap entry for your terminal type. However, sometimes the ! 940: termcap entry is wrong, and then it is useful to set this variable ! 941: yourself. *Note Variables::, for how to do this. ! 942: ! 943: Emacs buffers also use an 8-bit character set, because bytes have 8 ! 944: bits, but only the ASCII characters are considered meaningful. ASCII ! 945: graphic characters in Emacs buffers are displayed with their graphics. ! 946: LFD is the same as a newline character; it is displayed by starting a ! 947: new line. TAB is displayed by moving to the next tab stop column ! 948: (usually every 8 columns). Other control characters are displayed as a ! 949: caret (`^') followed by the non-control version of the character; thus, ! 950: `C-a' is displayed as `^A'. Non-ASCII characters 128 and up are ! 951: displayed with octal escape sequences; thus, character code 243 ! 952: (octal), also called `M-#' when used as an input character, is ! 953: displayed as `\243'. ! 954: ! 955: ! 956: File: emacs, Node: Keys, Next: Commands, Prev: Characters, Up: Top ! 957: ! 958: Keys ! 959: ==== ! 960: ! 961: A "complete key"--where `key' is short for "key sequence"--is a ! 962: sequence of keystrokes that are understood by Emacs as a unit, as a ! 963: single command (possibly undefined). Most single characters constitute ! 964: complete keys in the standard Emacs command set; there are also some ! 965: multi-character keys. Examples of complete keys are `C-a', `X', RET, ! 966: `C-x C-f' and `C-x 4 C-f'. ! 967: ! 968: A "prefix key" is a sequence of keystrokes that are the beginning of ! 969: a complete key, but not a whole one. Prefix keys and complete keys are ! 970: collectively called "keys". ! 971: ! 972: A prefix key is the beginning of a series of longer sequences that ! 973: are valid keys; adding any single character to the end of the prefix ! 974: gives a valid key, which could be defined as an Emacs command, or could ! 975: be a prefix itself. For example, `C-x' is standardly defined as a ! 976: prefix, so `C-x' and the next input character combine to make a ! 977: two-character key. There are 256 different two-character keys starting ! 978: with `C-x', one for each possible second character. Many of these ! 979: two-character keys starting with `C-x' are standardly defined as Emacs ! 980: commands. Notable examples include `C-x C-f' and `C-x s' (*note ! 981: Files::.). ! 982: ! 983: Adding one character to a prefix key does not have to form a complete ! 984: key. It could make another, longer prefix. For example, `C-x 4' is ! 985: itself a prefix that leads to 256 different three-character keys, ! 986: including `C-x 4 f', `C-x 4 b' and so on. It would be possible to ! 987: define one of those three-character sequences as a prefix, creating a ! 988: series of four-character keys, but we did not define any of them this ! 989: way. ! 990: ! 991: By contrast, the two-character sequence `C-f C-k' is not a key, ! 992: because the `C-f' is a complete key in itself. It's impossible to give ! 993: `C-f C-k' an independent meaning as a command as long as `C-f' retains ! 994: its meaning. `C-f C-k' is two commands. ! 995: ! 996: All told, the prefix keys in Emacs are `C-c', `C-x', `C-h', `C-x 4', ! 997: and ESC. But this is not built in; it is just a matter of Emacs's ! 998: standard key bindings. In customizing Emacs, you could make new prefix ! 999: keys, or eliminate these. *Note Key Bindings::. ! 1000: ! 1001: Whether a sequence is a key can be changed by customization. For ! 1002: example, if you redefine `C-f' as a prefix, `C-f C-k' automatically ! 1003: becomes a key (complete, unless you define it too as a prefix). ! 1004: Conversely, if you remove the prefix definition of `C-x 4', then `C-x 4 ! 1005: f' (or `C-x 4 ANYTHING') is no longer a key. ! 1006: ! 1007:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.