This commit is contained in:
Dave Love 1999-10-03 12:39:42 +00:00
parent a7bfd66f45
commit a933dad155
56 changed files with 40220 additions and 0 deletions

2
etc/.gitignore vendored
View file

@ -1 +1,3 @@
fns-*
*.ps
*.log

75
etc/3B-MAXMEM Normal file
View file

@ -0,0 +1,75 @@
Date: Mon, 16 Feb 87 15:04:41 EST
From: katinsky@gauss.rutgers.edu (David Katinsky)
To: rms@prep.ai.mit.edu
Subject: 3b2 procedure to raise MAXMEM
Below is the procedure I followed to allow enough memory for GnuEmacs to run
on my 3b2/400. The end result of this is that a process can snarf up to 2Mb
of memory. This can be a bit dangerous on a 2Mb machine, but I tried it and
it worked ok.
-------------------------------------------------------------------------------
In the simplest case, these are the procedures to reconfigure a 3bx kernel.
1] cd /etc/master.d
`ls` shows the files to be:
README ctc* hdelog idisk ipc iuart kernel mau
mem msg ports* prf sem shm stubs sxt
sys xt
2] Edit the file which contains the parameter[s] you wish to change.
In the following excerpt from /etc/master.d/kernel the value MAXMEM
was raised from 256 to 1024.
In V.3.0 and later releases, the parameter in question is MAXUMEM
instead of MAXMEM.
*
* The following entries form the tunable parameter table.
*
NCALL = 30
NPROC = 60
NTEXT = 58
NCLIST = 188
* maxmem is number of pages (2K) was 256 --dmk
MAXMEM = 1024
MAXUP = 25
* hashbuf must be a power of 2
NHBUF = 128
NPBUF = 8
3] cd /boot
4] mkboot -k KERNEL
5] shutdown -i5 -g0 -y
This will take the machine down and bring it back up into firmware
mode. When you see that the machine has reached this state, type the
firmware password (default=mcp). The machine will ask for the name of
a program to execute. At this prompt enter /etc/system . The machine
should start to boot and display its configuration data.
8701271222 dmk
[katinsky@topaz.rutgers.edu]
-------------------------------------------------------------------------------
I do not feel that having the default firmware password is a
problem... but if you wish to edit it out, feel free.
dmk


221
etc/AIX.DUMP Normal file
View file

@ -0,0 +1,221 @@
The following text was written by someone at IBM to describe an older
version of the code for dumping on AIX. It does NOT apply to
the current version of Emacs. It is included in case someone
is curious.
I (rms) couldn't understand the code, and I can't fully understand
this text either. I rewrote the code to use the same basic
principles, as far as I understood them, but more cleanly. This
rewritten code does not always work. In fact, the basic method
seems to be intrinsically flawed.
Since then, someone else implemented a different way of dumping on
the RS/6000, which does seem to work. None of the following
applies to the way Emacs now dumps on the 6000. However, the
current method fails to use shared libraries. Anyone who might be
interested in trying to resurrect the previous method might still
find the following information useful.
It seems that the IBM dumping code was simply set up to detect when
the dumped data cannot be used, and in that case to act approximately
as if CANNOT_DUMP had been defined all along. (This is buried in
paragraph 1.) It seems simpler just to define CANNOT_DUMP, since
Emacs is not set up to decide at run time whether there is dumping or
not, and doing so correctly would be a lot of work.
Note that much of the other information, such as the name and format
of the dumped data file, has been changed.
--rms
A different approach has been taken to implement the
"dump/load" feature of GNU Emacs for AIX 3.1. Traditionally the
unexec function creates a new a.out executable file which contains
preloaded Lisp code. Executing the new a.out file (normally called
xemacs) provides rapid startup since the standard suite of Lisp code
is preloaded as part of the executable file.
AIX 3.1 architecture precludes the use of this technique
because the dynamic loader cannot guarantee a fixed starting location
for the process data section. The loader loads all shared library
data BEFORE process data. When a shared library changes its data
space, the process initial data section address (_data) will change
and all global process variables are automatically relocated to new
addresses. This invalidates the "dumped" Emacs executable which has
data addresses which are not relocatable and now corrupt. Emacs would
fail to execute until rebuilt with the new libraries.
To circumvent the dynamic loader feature of AIX 3.1, the dump process
has been modified as follows:
1) A new executable file is NOT created. Instead, both pure and
impure data are saved by the dump function and automatically
reloaded during process initialization. If any of the saved data
is unavailable or invalid, loadup.el will be automatically loaded.
2) Pure data is defined as a shared memory segment and attached
automatically as read-only data during initialization. This
allows the pure data to be a shared resource among all Emacs
processes. The shared memory segment size is PURESIZE bytes.
If the shared memory segment is unavailable or invalid, a new
shared memory segment is created and the impure data save file
is destroyed, forcing loadup.el to be reloaded.
3) The ipc key used to create and access Emacs shared memory is
SHMKEY and can be overridden by the environment symbol EMACSSHMKEY.
Only one ipc key is allowed per system. The environment symbol
is provided in case the default ipc key has already been used.
4) Impure data is written to the ../bin/.emacs.data file by the
dump function. This file contains the process' impure data
at the moment of load completion. During Emacs initialization,
the process' data section is expanded and overwritten
with the .emacs.data file contents.
The following are software notes concerning the GNU Emacs dump function under AIX 3.1:
1) All of the new dump/load code is activated by the #ifdef SHMKEY
conditional.
2) The automatic loading of loadup.el does NOT cause the dump function
to be performed. Therefore once the pure/impure data is discarded,
someone must remake Emacs to create the saved data files. This
should only be necessary when Emacs is first installed or whenever
AIX is upgraded.
3) Emacs will exit with an error if executed in a non-X environment
and the dump function was performed within a X window. Therefore
the dump function should always be performed in a non-X
environment unless the X environment will ALWAYS be available.
4) Emacs only maintains the lower 24 bits of any data address. The
remaining upper 8 bits are reset by the XPNTR macro whenever any
Lisp object is referenced. This poses a serious problem because
pure data is stored in segment 3 (shared memory) and impure data
is stored in segment 2 (data). To reset the upper 8 address bits
correctly, XPNTR must guess as to which type of data is represented
by the lower 24 address bits. The technique chosen is based upon
the fact that pure data offsets in segment 3 range from
0 -> PURESIZE-1, which are relatively small offsets. Impure data
offsets in segment 2 are relatively large (> 0x40000) because they
must follow all shared library data. Therefore XPNTR adds segment
3 to each data offset which is small (below PURESIZE) and adds
segment 2 to all other offsets. This algorithm will remain valid
as long as a) pure data size remains relatively small and b) process
data is loaded after shared library data.
To eliminate this guessing game, Emacs must preserve the 32-bit
address and add additional data object overhead for the object type
and garbage collection mark bit.
5) The data section written to .emacs.data is divided into three
areas as shown below. The file header contains four character
pointers which are used during automatic data loading. The file's
contents will only be used if the first three addresses match
their counterparts in the current process. The fourth address is
the new data segment address required to hold all of the preloaded
data.
.emacs.data file format
+---------------------------------------+ \
| address of _data | \
+---------------------------------------+ \
| address of _end | \
+---------------------------------------+ file header
| address of initial sbrk(0) | /
+---------------------------------------+ /
| address of final sbrk(0) | /
+---------------------------------------+ /
\ \
\ \
all data to be loaded from
_data to _end
\ \
\ \
+---------------------------------------+
\ \
\ \
all data to be loaded from
initial to final sbrk(0)
\ \
+---------------------------------------+
Sections two and three contain the preloaded data which is
restored at locations _data and initial sbrk(0) respectively.
The reason two separate sections are needed is that process
initialization allocates data (via malloc) prior to main()
being called. Therefore _end is several kbytes lower than
the address returned by an initial sbrk(0). This creates a
hole in the process data space and malloc will abort if this
region is overwritten during the load function.
One further complication with the malloc'd space is that it
is partially empty and must be "consumed" so that data space
malloc'd in the future is not assigned to this region. The malloc
function distributed with Emacs anticipates this problem but the
AIX 3.1 version does not. Therefore, repeated malloc calls are
needed to exhaust this initial malloc space. How do you know
when malloc has exhausted its free memory? You don't! So the
code must repeatedly call malloc for each buffer size and
detect when a new memory page has been allocated. Once the new
memory page is allocated, you can calculate the number of free
buffers in that page and request exactly that many more. Future
malloc requests will now be added at the top of a new memory page.
One final point - the initial sbrk(0) is the value of sbrk(0)
after all of the above malloc hacking has been performed.
The following Emacs dump/load issues need to be addressed:
1) Loadup.el exits with an error message because the xemacs and
emacs-xxx files are not created during the dump function.
Loadup.el should be changed to check for the new .emacs.data
file.
2) Dump will only support one .emacs.data file for the entire
system. This precludes the ability to allow each user to
define his/her own "dumped" Emacs.
Add an environment symbol to override the default .emacs.data
path.
3) An error message "error in init file" is displayed out of
startup.el when the dumped Emacs is invoked by a non-root user.
Although all of the preloaded Lisp code is present, the important
purify-flag has not been set back to Qnil - precluding the
loading of any further Lisp code until the flag is manually
reset.
The problem appears to be an access violation which will go
away if the read-write access modes to all of the files are
changed to rw-.
4) In general, all file access modes should be changed from
rw-r--r-- to rw-rw-rw-. They are currently setup to match
standard AIX access modes.
5) The dump function is not invoked when the automatic load of
loadup.el is performed.
Perhaps the command arguments array should be expanded with
"dump" added to force an automatic dump.
6) The automatic initialization function alloc_shm will delete
the shared memory segment and .emacs.data file if the "dump"
command argument is found in ANY argument position. The
dump function will only take place in loadup.el if "dump"
is the third or fourth command argument.
Change alloc_shm to live by loadup.el rules.

176
etc/BABYL Normal file
View file

@ -0,0 +1,176 @@
Format of Version 5 Babyl Files:
Warning:
This was written Tuesday, 12 April 1983 (by Eugene Ciccarelli),
based on looking at a particular Babyl file and recalling various
issues. Therefore it is not guaranteed to be complete, but it is a
start, and I will try to point the reader to various Babyl functions
that will serve to clarify certain format questions.
Also note that this file will not contain control-characters,
but instead have two-character sequences starting with Uparrow.
Unless otherwise stated, an Uparrow <character> is to be read as
Control-<character>, e.g. ^L is a Control-L.
Versions:
First, note that each Babyl file contains in its BABYL OPTIONS
section the version for the Babyl file format. In principle, the
format can be changed in any way as long as we increment the format
version number; then programs can support both old and new formats.
In practice, version 5 is the only format version used, and the
previous versions have been obsolete for so long that Emacs does not
support them.
Overall Babyl File Structure:
A Babyl file consists of a BABYL OPTIONS section followed by
0 or more message sections. The BABYL OPTIONS section starts
with the line "BABYL OPTIONS:". Message sections start with
Control-Underscore Control-L Newline. Each section ends
with a Control-Underscore. (That is also the first character
of the starter for the next section, if any.) Thus, a three
message Babyl file looks like:
BABYL OPTIONS:
...the stuff within the Babyl Options section...
^_^L
...the stuff within the 1st message section...
^_^L
...the stuff within the 2nd message section...
^_^L
...the stuff within the last message section...
^_
Babyl is tolerant about some whitespace at the end of the
file -- the file may end with the final ^_ or it may have some
whitespace, e.g. a newline, after it.
The BABYL OPTIONS Section:
Each Babyl option is specified on one line (thus restricting
string values these options can currently have). Values are
either numbers or strings. The format is name, colon, and the
value, with whitespace after the colon ignored, e.g.:
Mail: ~/special-inbox
Unrecognized options are ignored.
Here are those options and the kind of values currently expected:
MAIL Filename, the input mail file for this
Babyl file. You may also use several file names
separated by commas.
Version Number. This should always be 5.
Labels String, list of labels, separated by commas.
Message Sections:
A message section contains one message and information
associated with it. The first line is the "status line", which
contains a bit (0 or 1 character) saying whether the message has
been reformed yet, and a list of the labels attached to this
message. Certain labels, called basic labels, are built into
Babyl in a fundamental way, and are separated in the status line
for convenience of operation. For example, consider the status
line:
1, answered,, zval, bug,
The 1 means this message has been reformed. This message is
labeled "answered", "zval", and "bug". The first, "answered", is
a basic label, and the other two are user labels. The basic
labels come before the double-comma in the line. Each label is
preceded by ", " and followed by ",". (The last basic label is
in fact followed by ",,".) If this message had no labels at all,
it would look like:
1,,
Or, if it had two basic labels, "answered" and "deleted", it
would look like:
1, answered, deleted,, zval, bug,
The & Label Babyl Message knows which are the basic labels.
Currently they are: deleted, unseen, recent, and answered.
After the status line comes the original header if any.
Following that is the EOOH line, which contains exactly the
characters "*** EOOH ***" (which stands for "end of original
header"). Note that the original header, if a network format
header, includes the trailing newline. And finally, following the
EOOH line is the visible message, header and text. For example,
here is a complete message section, starting with the message
starter, and ending with the terminator:
^_^L
1,, wordab, eccmacs,
Date: 11 May 1982 21:40-EDT
From: Eugene C. Ciccarelli <ECC at MIT-AI>
Subject: notes
To: ECC at MIT-AI
*** EOOH ***
Date: Tuesday, 11 May 1982 21:40-EDT
From: Eugene C. Ciccarelli <ECC>
To: ECC
Re: notes
Remember to pickup check at cashier's office, and deposit it
soon. Pay rent.
^_
;;; Babyl File BNF:
;;; Overall Babyl file structure:
Babyl-File ::= Babyl-Options-Section (Message-Section)*
;;; Babyl Options section:
Babyl-Options-Section
::= "BABYL OPTIONS:" newline (Babyl-Option)* Terminator
Babyl-Option ::= Option-Name ":" Horiz-Whitespace BOptValue newline
BOptValue ::= Number | 1-Line-String
;;; Message section:
Message-Section ::= Message-Starter Status-Line Orig-Header
EOOH-Line Message Terminator
Message-Starter ::= "^L" newline
Status-Line ::= Bit-Char "," (Basic-Label)* "," (User-Label)* newline
Basic-Label ::= Space BLabel-Name ","
User-Label ::= Space ULabel-Name ","
EOOH-Line ::= "*** EOOH ***" newline
Message ::= Visible-Header Message-Text
;;; Utilities:
Terminator ::= "^_"
Horiz-Whitespace
::= (Space | Tab)*
Bit-Char ::= "0" | "1"

88
etc/CENSORSHIP Normal file
View file

@ -0,0 +1,88 @@
Censoring my Software
Richard Stallman
[From Datamation, 1 March 1996]
Last summer, a few clever legislators proposed a bill to "prohibit
pornography" on the Internet. Last fall, right-wing Christians made
this cause their own. Last week, President Clinton signed the bill,
and we lost the freedom of the press for the public library of the
future. This week, I'm censoring GNU Emacs.
No, GNU Emacs does not contain pornography. It is a software package,
an award-winning extensible and programmable text editor. But the law
that was passed applies to far more than pornography. It prohibits
"indecent" speech, which can include anything from famous poems, to
masterpieces hanging in the Louvre, to advice about safe sex...to
software.
Naturally, there was a lot of opposition to this bill. Not only from
people who use the Internet, and people who appreciate erotica, but
from everyone who cares about freedom of the press.
But every time we tried to tell the public what was at stake, the
forces of censorship responded with a lie: they told the public that
the issue was simply pornography. By embedding this lie as a
presupposition in their statements about the issue, they succeeded in
misinforming the public. So here I am, censoring my software.
You see, Emacs contains a version of the famous "doctor program",
a.k.a. Eliza, originally developed by Professor Weizenbaum at MIT.
This is the program that imitates a Rogerian psychotherapist. The
user talks to the program, and the program responds--by playing back
the user's own statements, and by recognizing a long list of
particular words.
The Emacs doctor program was set up to recognize many common curse
words, and respond with an appropriately cute message such as, "Would
you please watch your tongue?" or "Let's not be vulgar." In order to
do this, it had to have a list of curse words. That means the source
code for the program was indecent.
Because of the censorship law, I had to remove this feature. (I
replaced it with a message announcing that the program has been
censored for your protection.) The new version of the doctor doesn't
recognize the indecent words. If you curse at it, it curses right
back to you--for lack of knowing better.
Now that people are facing the threat of two years in prison for
indecent network postings, it would be helpful if they could access
precise rules via the Internet for how to avoid imprisonment.
However, this is impossible. The rules would have to mention the
forbidden words, so posting them on the Internet would be against the
rules.
Of course, I'm making an assumption about just what "indecent" means.
I have to do this, because nobody knows for sure. The most obvious
possibile meaning is the meaning it has for television, so I'm using
that as a tentative assumption. However, there is a good chance that
our courts will reject that interpretation of the law as
unconstitutional.
We can hope that the courts will recognize the Internet as a medium of
publication like books and magazines. If they do, they will entirely
reject any law prohibiting "indecent" publications on the Internet.
What really worries me is that the courts might take a muddled
in-between escape route--by choosing another interpretation of
"indecent", one that permits the doctor program or a statement of the
decency rules, but prohibits some of the books that children can
browse through in the public library and the bookstore. Over the
years, as the Internet replaces the public library and the bookstore,
some of our freedom of the press will be lost.
Just a few weeks ago, another country imposed censorship on the
Internet. That was China. We don't think well of China in this
country--its government doesn't respect basic freedoms. But how well
does our government respect them? And do you care enough to preserve
them here?
If you care, stay in touch with the Voters Telecommunications Watch.
Look in their Web site http://www.vtw.org/ for background information
and political action recommendations. Censorship won in February, but
we can beat it in November.
Copyright 1996 Richard Stallman
Verbatim copying and distribution is permitted in any medium
provided this notice is preserved.

57
etc/CHARSETS Normal file
View file

@ -0,0 +1,57 @@
#########################
## LIST OF CHARSETS
## Each line corresponds to one charset.
## The following attributes are listed in this order
## separated by a colon `:' in one line.
## CHARSET-SYMBOL-NAME,
## CHARSET-ID,
## DIMENSION (1 or 2)
## CHARS (94 or 96)
## BYTES (of multibyte form: 1, 2, 3, or 4),
## WIDTH (occupied column numbers: 1 or 2),
## DIRECTION (0:left-to-right, 1:right-to-left),
## ISO-FINAL-CHAR (character code of ISO-2022's final character)
## ISO-GRAPHIC-PLANE (ISO-2022's graphic plane, 0:GL, 1:GR)
## DESCRIPTION (describing string of the charset)
tibetan-1-column:241:2:94:4:1:0:56:0:Tibetan 1 column glyph
tibetan:252:2:94:4:2:0:55:0:Tibetan characters
lao:167:1:94:3:1:0:49:0:Lao characters (ISO10646 0E80..0EDF)
indian-1-column:240:2:94:4:1:0:54:0:Indian charset for 2-column width glypps
indian-2-column:251:2:94:4:2:0:53:0:Indian charset for 2-column width glyphs
indian-is13194:225:1:94:3:2:0:53:1:Generic Indian charset for data exchange with IS 13194
ascii-right-to-left:166:1:94:3:1:1:66:0:ASCII (left half of ISO8859-1) with right-to-left direction
chinese-cns11643-7:250:2:94:4:2:0:77:0:CNS11643 Plane 7 Chinese Traditional
chinese-cns11643-6:249:2:94:4:2:0:76:0:CNS11643 Plane 6 Chinese Traditional
chinese-cns11643-5:248:2:94:4:2:0:75:0:CNS11643 Plane 5 Chinese Traditional
chinese-cns11643-4:247:2:94:4:2:0:74:0:CNS11643 Plane 4 Chinese Traditional
chinese-cns11643-3:246:2:94:4:2:0:73:0:CNS11643 Plane 3 Chinese Traditional
ethiopic:245:2:94:4:2:0:51:0:Ethiopic characters
arabic-2-column:224:1:94:3:2:1:52:0:Arabic 2-column
arabic-1-column:165:1:94:3:1:1:51:0:Arabic 1-column
arabic-digit:164:1:94:3:1:0:50:0:Arabic digit
vietnamese-viscii-upper:163:1:96:3:1:0:50:1:VISCII1.1 upper-case
vietnamese-viscii-lower:162:1:96:3:1:0:49:1:VISCII1.1 lower-case
ipa:161:1:96:3:1:0:48:1:IPA (International Phonetic Association)
chinese-sisheng:160:1:94:3:1:0:48:0:SiSheng characters for PinYin/ZhuYin
chinese-big5-2:153:2:94:3:2:0:49:0:Big5 Level-2 Chinese traditional
chinese-big5-1:152:2:94:3:2:0:48:0:Big5 Level-1 Chinese traditional
chinese-cns11643-2:150:2:94:3:2:0:72:0:CNS11643 Plane 2 Chinese traditional
chinese-cns11643-1:149:2:94:3:2:0:71:0:CNS11643 Plane 1 Chinese traditional
japanese-jisx0212:148:2:94:3:2:0:68:0:JISX0212 Japanese supplement
korean-ksc5601:147:2:94:3:2:0:67:0:KSC5601 Korean Hangul and Hanja
japanese-jisx0208:146:2:94:3:2:0:66:0:JISX0208.1983/1990 Japanese Kanji
chinese-gb2312:145:2:94:3:2:0:65:0:GB2312 Chinese simplified
japanese-jisx0208-1978:144:2:94:3:2:0:64:0:JISX0208.1978 Japanese Kanji (so called "old JIS")
latin-iso8859-9:141:1:96:2:1:0:77:1:ISO8859-9 (Latin-5)
cyrillic-iso8859-5:140:1:96:2:1:0:76:1:ISO8859-5 (Cyrillic)
latin-jisx0201:138:1:94:2:1:0:74:0:JISX0201.1976 Japanese Roman
katakana-jisx0201:137:1:94:2:1:0:73:1:JISX0201.1976 Japanese Kana
hebrew-iso8859-8:136:1:96:2:1:1:72:1:ISO8859-8 (Hebrew)
arabic-iso8859-6:135:1:96:2:1:1:71:1:ISO8859-6 (Arabic)
greek-iso8859-7:134:1:96:2:1:0:70:1:ISO8859-7 (Greek)
thai-tis620:133:1:96:2:1:0:84:1:TIS620.2529 (Thai)
latin-iso8859-4:132:1:96:2:1:0:68:1:ISO8859-4 (Latin-4)
latin-iso8859-3:131:1:96:2:1:0:67:1:ISO8859-3 (Latin-3)
latin-iso8859-2:130:1:96:2:1:0:66:1:ISO8859-2 (Latin-2)
latin-iso8859-1:129:1:96:2:1:0:65:1:ISO8859-1 (Latin-1)
ascii:000:1:94:1:1:0:66:0:ASCII (ISO646 IRV)

74
etc/CODINGS Normal file
View file

@ -0,0 +1,74 @@
#########################
## LIST OF CODING SYSTEMS
## Each line corresponds to one coding system
## Format of a line is:
## NAME:TYPE:MNEMONIC:EOL:FLAGS:DOCSTRING,
## where
## TYPE = nil (no conversion), t (auto conversion),
## 0 (Mule internal), 1 (SJIS), 2 (ISO2022), 3 (BIG5), or 4 (CCL)
## EOL = 0 (LF), 1 (CRLF), 2 (CR), or 3 (Automatic detection)
## FLAGS =
## if TYPE = 2 then
## comma (`,') separated data of the followings:
## G0, G1, G2, G3, SHORT-FORM, ASCII-EOL, ASCII-CNTL, SEVEN,
## LOCKING-SHIFT, SINGLE-SHIFT, USE-ROMAN, USE-OLDJIS, NO-ISO6429
## else if TYPE = 4 then
## comma (`,') separated CCL programs for read and write
## else
## 0
##
no-conversion:nil:=:0:0:Do no conversion
undecided:t:+:3:0:Detect coding-system automatically
hz:0:z:3:0:Codins-system of Hz/ZW used for Chinese (GB).
emacs-mule:0:=:3:0:Internal coding system used in a buffer.
shift_jis:1:S:3:0:Coding-system of Shift-JIS used in Japan.
sjis:1:S:3:0:Coding-system of Shift-JIS used in Japan.
euc-japan-1990:2:E:3:ascii,japanese-jisx0208,katakana-jisx0201,japanese-jisx0212,1,1,1,0,0,1,0,0,0:Coding-system of Japanese EUC (Extended Unix Code).
iso-2022-lock:2:i:3:(ascii,t),-2,-1,-1,0,1,1,1,0,0,0,0,0:ISO-2022 coding system using Locking-Shift for 96-charset.
iso-2022-ss2-7:2:I:3:(ascii,t),-1,-2,-1,1,1,1,1,0,1,0,0,0:ISO-2022 coding system using SS2 for 96-charset in 7-bit code.
iso-2022-ss2-8:2:I:3:(ascii,t),-1,-2,-1,0,1,1,0,0,1,0,0,0:ISO-2022 coding system using SS2 for 96-charset in 8-bit code.
iso-2022-cjk:2:I:3:(ascii,t),(nil,korean-ksc5601,chinese-gb2312,chinese-cns11643-1,t),(nil,chinese-cns11643-2),(nil,chinese-cns11643-3,chinese-cns11643-4,chinese-cns11643-5,chinese-cns11643-6,chinese-cns11643-7),1,1,1,1,1,1,0,0,0:Mixture of ISO-2022-JP, ISO-2022-KR, and ISO-2022-CN
cn-gb-2312:2:C:3:(ascii,t),chinese-gb2312,chinese-sisheng,-1,0,1,1,0,0,1,0,0,0:Coding-system of Chinese EUC (so called GB Encoding).
lao:2:T:3:(ascii,t),(lao,t),-1,-1,0,1,0,0,0,0,0,0,0:Coding-system used for ASCII(MSB=0) & LAO(MSB=1).
iso-2022-jp-1978-irv:2:J:3:(ascii,t),-1,-1,-1,1,1,1,1,0,0,1,1,0:Coding-system used for old jis terminal.
junet:2:J:3:(ascii,t),-1,-1,-1,1,1,1,1,0,0,0,0,0:Coding system based on ISO2022 7-bit encoding.
tis620:2:T:3:(ascii,t),(thai-tis620,t),-1,-1,0,1,0,0,0,0,0,0,0:Coding-system used for ASCII(MSB=0) & TIS620(MSB=1).
euc-japan:2:E:3:ascii,japanese-jisx0208,katakana-jisx0201,japanese-jisx0212,1,1,1,0,0,1,0,0,0:Coding-system of Japanese EUC (Extended Unix Code).
iso-2022-int-1:2:I:3:(ascii,t),(korean-ksc5601,t),-1,-1,1,1,1,1,1,0,0,0,0:ISO-2022-INT-1
euc-china:2:C:3:(ascii,t),chinese-gb2312,chinese-sisheng,-1,0,1,1,0,0,1,0,0,0:Coding-system of Chinese EUC (so called GB Encoding).
old-jis:2:J:3:(ascii,t),-1,-1,-1,1,1,1,1,0,0,1,1,0:Coding-system used for old jis terminal.
iso-2022-7:2:J:3:(ascii,t),-1,-1,-1,1,1,1,1,0,0,0,0,0:Coding system based on ISO2022 7-bit encoding.
iso-2022-cn:2:C:3:ascii,(nil,chinese-gb2312,chinese-cns11643-1),(nil,chinese-cns11643-2),(nil,chinese-cns11643-3,chinese-cns11643-4,chinese-cns11643-5,chinese-cns11643-6,chinese-cns11643-7),0,1,1,1,1,1,0,0,0:Coding system ISO-2022-CN for Chinese (GB and CNS character sets).
ctext:2:X:3:(ascii,t),(latin-iso8859-1,t),-1,-1,0,1,1,0,0,0,0,0,0:MIME ISO-8859-1 Compound Text Encoding.
iso-2022-jp:2:J:3:(ascii,t),-1,-1,-1,1,1,1,1,0,0,0,0,0:Coding system based on ISO2022 7-bit encoding.
iso-2022-kr:2:k:3:ascii,(nil,korean-ksc5601),-1,-1,0,1,1,1,1,0,0,0,0:MIME ISO-2022-KR
iso-2022-cn-ext:2:C:3:ascii,(nil,chinese-gb2312,chinese-cns11643-1),(nil,chinese-cns11643-2),(nil,chinese-cns11643-3,chinese-cns11643-4,chinese-cns11643-5,chinese-cns11643-6,chinese-cns11643-7),0,1,1,1,1,1,0,0,0:Coding system ISO-2022-CN for Chinese (GB and CNS character sets).
iso-8859-1:2:X:3:(ascii,t),(latin-iso8859-1,t),-1,-1,0,1,1,0,0,0,0,0,0:MIME ISO-8859-1 Compound Text Encoding.
iso-8859-2:2:2:3:(ascii,t),(latin-iso8859-2,t),-1,-1,0,1,1,0,0,0,0,0,0:MIME ISO-8859-2
iso-8859-3:2:3:3:(ascii,t),(latin-iso8859-3,t),-1,-1,0,1,1,0,0,0,0,0,0:MIME ISO-8859-3
iso-8859-4:2:4:3:(ascii,t),(latin-iso8859-4,t),-1,-1,0,1,1,0,0,0,0,0,0:MIME ISO-8859-4
iso-8859-5:2:5:3:(ascii,t),(cyrillic-iso8859-5,t),-1,-1,0,1,1,0,0,0,0,0,0:MIME ISO-8859-5
iso-8859-7:2:7:3:(ascii,t),(greek-iso8859-7,t),-1,-1,0,1,1,0,0,0,0,0,0:MIME ISO-8859-7
iso-8859-8:2:8:3:(ascii,t),(hebrew-iso8859-8,t),-1,-1,0,1,1,0,0,0,0,0,1:MIME ISO-8859-8
iso-8859-9:2:9:3:(ascii,t),(latin-iso8859-9,t),-1,-1,0,1,1,0,0,0,0,0,0:MIME ISO-8859-9
euc-kr:2:K:3:(ascii,t),korean-ksc5601,-1,-1,0,1,1,0,0,0,0,0,0:Coding-system of Korean EUC (Extended Unix Code).
euc-korea:2:K:3:(ascii,t),korean-ksc5601,-1,-1,0,1,1,0,0,0,0,0,0:Coding-system of Korean EUC (Extended Unix Code).
cn-big5:3:B:3:0:Coding-system of BIG5.
big5:3:B:3:0:Coding-system of BIG5.
viscii:4:V:3: 3 106 e ffffff0b 100 0 1 19c6 3 4 19c7 19e7 7 8 9 a b c d e f 10 11 12 13 19d6 15 16 17 18 19db 1a 1b 1c 1d 19dc 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f 19d5 19a1 19a2 19a3 19a4 19a5 19a6 19a7 19a8 19a9 19aa 19ab 19ac 19ad 19ae 19af 19b0 19b1 19b2 19b5 19fe 19be 19b6 19b7 19b8 19f6 19f7 19ef 19fc 19fb 19f8 19cf 19f5 1921 1922 1923 1924 1925 1926 1927 1928 1929 192a 192b 192c 192d 192e 192f 1930 1931 1932 19de 19bd 1935 1936 1937 1938 19f1 19d1 19d7 19d8 193d 193e 19df 19e0 19e1 19e2 19e3 19e4 19e5 1946 1947 19e8 19e9 19ea 19eb 19ec 19ed 19ee 194f 19f0 1951 19f2 19f3 19f4 1955 1956 1957 1958 19f9 19fa 195b 195c 19fd 195e 195f 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 196a 196b 196c 196d 196e 196f 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 197a 197b 197c 197d 197e 19e6 fffefd0c 16, 1 121 e 41b 10 80 fffffc07 fffffb0c 41b 15 9a fffff707 fffff60c 881d 12 a2 e 4017 80 ffffef0b 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af b0 b1 b2 0 0 b5 b6 b7 b8 0 0 0 0 bd be 0 0 0 0 0 0 0 c6 c7 0 0 0 0 0 0 0 cf 0 d1 0 0 0 d5 d6 d7 d8 0 0 db dc 0 de df e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe 0 ffff6d0c 881b 12 a3 e 4017 80 ffff660b 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 0 0 93 96 97 98 0 0 0 0 b4 95 0 0 0 0 0 0 0 2 5 0 0 0 0 0 0 0 9f 0 ba 0 0 0 80 14 bb bc 0 0 19 1e 0 b3 bf c0 c1 c2 c3 c4 c5 ff 6 c8 c9 ca cb cc cd ce 9b d0 b9 d2 d3 d4 a0 99 9a 9e d9 da 9d 9c dd 94 0 fffee40c fffee307 fffee20c 16:Coding-system used for VISCII 1.1.
koi8:4:K:3: 3 106 e ffffff0b 100 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f 20 20 20 e71 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e21 20 20 20 20 20 20 20 20 20 20 20 20 e6e e50 e51 e66 e54 e55 e64 e53 e65 e58 e59 e5a e5b e5c e5d e5e e5f e6f e60 e61 e62 e63 e56 e52 e6c e6b e57 e68 e6d e69 e67 e6a e4e e30 e31 e46 e34 e35 e44 e33 e45 e38 e39 e3a e3b e3c e3d e3e e3f e4f e40 e41 e42 e43 e36 e32 e4c e4b e37 e48 e4d e49 e47 e4a fffefd0c 16, 1 6e e 41b 15 8c fffffc07 fffffb0c e 4017 a0 fffff70b 60 20 b3 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e1 e2 f7 e7 e4 e5 f6 fa e9 ea eb ec ed ee ef f0 f2 f3 f4 f5 e6 e8 e3 fe fb fd ff f9 f8 fc e0 f1 c1 c2 d7 c7 c4 c5 d6 da c9 ca cb cc cd ce cf d0 d2 d3 d4 d5 c6 c8 c3 de db dd df d9 d8 dc c0 d1 20 a3 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ffff950c 16:Coding-system used for KOI8.
koi8-r:4:K:3: 3 106 e ffffff0b 100 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f 20 20 20 e71 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e21 20 20 20 20 20 20 20 20 20 20 20 20 e6e e50 e51 e66 e54 e55 e64 e53 e65 e58 e59 e5a e5b e5c e5d e5e e5f e6f e60 e61 e62 e63 e56 e52 e6c e6b e57 e68 e6d e69 e67 e6a e4e e30 e31 e46 e34 e35 e44 e33 e45 e38 e39 e3a e3b e3c e3d e3e e3f e4f e40 e41 e42 e43 e36 e32 e4c e4b e37 e48 e4d e49 e47 e4a fffefd0c 16, 1 6e e 41b 15 8c fffffc07 fffffb0c e 4017 a0 fffff70b 60 20 b3 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e1 e2 f7 e7 e4 e5 f6 fa e9 ea eb ec ed ee ef f0 f2 f3 f4 f5 e6 e8 e3 fe fb fd ff f9 f8 fc e0 f1 c1 c2 d7 c7 c4 c5 d6 da c9 ca cb cc cd ce cf d0 d2 d3 d4 d5 c6 c8 c3 de db dd df d9 d8 dc c0 d1 20 a3 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ffff950c 16:Coding-system used for KOI8.
alternativnyj:4:A:3: 3 106 e ffffff0b 100 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f e30 e31 e32 e33 e34 e35 e36 e37 e38 e39 e3a e3b e3c e3d e3e e3f e40 e41 e42 e43 e44 e45 e46 e47 e48 e49 e4a e4b e4c e4d e4e e4f e50 e51 e52 e53 e54 e55 e56 e57 e58 e59 e5a e5b e5c e5d e5e e5f 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e60 e61 e62 e63 e64 e65 e66 e67 e68 e69 e6a e6b e6c e6d e6e e6f e21 e71 20 20 20 20 20 20 20 20 20 20 20 20 20 e70 fffefd0c 16, 1 6e e 41b 15 8c fffffc07 fffffb0c e 4017 a0 fffff70b 60 20 f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 ea eb ec ed ee ef ff f1 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ffff950c 16:Coding-system used for Alternativnyj
vscii:4:V:3: 3 106 e ffffff0b 100 0 19fa 19f8 3 19d7 19d8 19e6 7 8 9 a b c d e f 10 19d1 19df 19cf 19d6 19db 19fd 19dc 18 19 1a 1b 1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f 19e0 19e4 19e3 19e1 19d5 19a3 19a7 19e8 19eb 19a8 19e9 19a9 19ae 19ec 19ef 19ee 19ed 19b8 19f2 19f6 19f5 19f3 19f7 19b5 19b6 19b7 19de 19be 19fe 19f9 19fc 19fb a0 19e5 19e2 19ea 19f4 19bd 19df 19f0 1965 1962 196a 1974 193e 1979 1970 19a2 c0 c1 c2 c3 c4 1960 1964 1963 1961 1955 19c6 1922 1946 1947 1921 19c7 19a1 19a5 19a6 19e7 19a5 19ab 1923 1925 1926 1967 1924 1927 1968 19ac 196b 1928 1969 1929 192b 192c 192d 192a 192e 196c 196f 19ad 19aa 19b0 196e 196d 1938 1972 19b1 1976 1975 1973 1977 1930 1931 1932 192f 1935 1936 1937 195e 193e 197e 1979 19b2 197c 197b 197a 1978 1957 1958 1966 1951 1971 194f 1956 195b 197d 195c 19af fffefd0c 16, 1 121 e 41b 10 80 fffffc07 fffffb0c 41b 15 9a fffff707 fffff60c 881d 12 a2 e 4017 80 ffffef0b 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 be bb c6 ca c7 c8 cb cf d1 d5 d2 d3 d4 d6 e8 e5 e6 e7 0 0 e9 ea eb de 0 0 0 0 0 ed 0 0 0 0 0 0 0 bc bd 0 0 0 0 0 0 0 fa 0 f8 0 0 0 b9 fb f5 f6 0 0 fc fe 0 ec 0 b5 b8 a9 b7 b6 a8 f7 c9 cc d0 aa ce d7 dd dc d8 ae f9 df e3 ab e2 e1 e4 f4 ef f3 f2 f1 fd ee 0 ffff6d0c 881b 12 a3 e 4017 80 ffff660b 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 0 0 93 96 97 98 0 0 0 0 b4 95 0 0 0 0 0 0 0 2 5 0 0 0 0 0 0 0 9f 0 ba 0 0 0 80 14 bb bc 0 0 19 1e 0 b3 bf c0 c1 c2 c3 c4 c5 ff 6 c8 c9 ca cb cc cd ce 9b d0 b9 d2 d3 d4 a0 99 9a 9e d9 da 9d 9c dd 94 0 fffee40c fffee307 fffee20c 16:Coding-system used for VSCII-1.
############################
## LIST OF CODING CATEGORIES (ordered by priority)
## CATEGORY:CODING-SYSTEM
##
coding-category-iso-7:iso-2022-7
coding-category-iso-8-1:iso-8859-1
coding-category-iso-8-2:iso-8859-1
coding-category-iso-else:iso-2022-lock
coding-category-emacs-mule:emacs-mule
coding-category-sjis:sjis
coding-category-big5:big5
coding-category-binary:no-conversion

975
etc/ChangeLog Normal file
View file

@ -0,0 +1,975 @@
1999-07-12 Richard Stallman <rms@gnu.org>
* Version 20.4 released.
1999-06-27 Karl Heuer <kwzh@gnu.org>
* yow.lines: Fix indentation. Fix typo.
1999-01-19 Dave Love <fx@gnu.org>
* MORE.STUFF: Revamped.
1999-01-14 Dave Love <fx@gnu.org>
* FAQ: Merge posted updates.
1998-12-14 Dave Love <fx@gnu.org>
* FAQ: Somewhat edited copy of the most recently posted version.
1998-11-04 Kenichi Handa <handa@etl.go.jp>
* MACHINES (NEC EWS4800): New section.
1998-09-04 Karl Heuer <kwzh@gnu.org>
* TUTORIAL: Use C-x C-l, not M-:, as example of disabled command.
1998-08-19 Richard Stallman <rms@psilocin.ai.mit.edu>
* Version 20.3 released.
* TUTORIAL.ro: New file.
1998-04-10 Ken'ichi Handa <handa@melange.gnu.org>
* TUTORIAL.sl: Renamed back to the original.
1998-04-10 Kenichi Handa <handa@etl.go.jp>
* TUTORIAL.cs: Renamed from TUTORIAL.cz.
* TUTORIAL.ja: Renamed from TUTORIAL.jp.
* TUTORIAL.ka: Renamed from TUTORIAL.kr.
* TUTORIAL.sk: Renamed from TUTORIAL.sl.
1998-04-06 Kenichi Handa <handa@etl.go.jp>
* TUTORIAL.jp: Re-translated for the latest TUTORIAL.
1998-03-26 Richard Stallman <rms@psilocin.gnu.org>
* TUTORIAL.sl: New file.
1997-09-19 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
* Version 20.2 released.
1997-09-15 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
* Version 20.1 released.
1997-06-02 Ken'ichi Handa <handa@psilocin.gnu.ai.mit.edu>
* CODINGS, CHARSETS: New files.
1996-08-11 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
* Version 19.33 released.
1996-07-31 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
* Version 19.32 released.
1996-06-23 Richard Stallman <rms@psilocin.gnu.ai.mit.edu>
* refcard.ps: File obtained from someone else;
it was generated badly here.
1996-05-25 Karl Heuer <kwzh@gnu.ai.mit.edu>
* Version 19.31 released.
1996-05-25 Karl Heuer <kwzh@gnu.ai.mit.edu>
* TUTORIAL: Rephrase the first page to fit on a standard tty screen.
1996-05-03 Richard Stallman <rms@delasyd.gnu.ai.mit.edu>
* emacs.bash: Use >|.
1996-01-20 Geoff Voelker <voelker@cs.washington.edu>
* rgb.txt: New file.
1995-11-24 Richard Stallman <rms@mole.gnu.ai.mit.edu>
* Version 19.30 released.
1995-11-04 Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
* gnus-tut.txt: New file.
1995-07-26 David J. MacKenzie <djm@geech.gnu.ai.mit.edu>
* Rename termcap to termcap.src, the historical name for an
uninstalled termcap file.
1995-06-28 Eric S. Raymond <esr@spiff.gnu.ai.mit.edu>
* termcap.dat, termcap.ucb: deleted and replaced.
* termcap: New termcap file from the ncurses project; bigger,
better, brighter, does away with waxy yellow buildup. Email
me at terminfo@ccil.org if you have any trouble with this.
* README: Changed to track above change.
1995-05-24 Karl Heuer <kwzh@hal.gnu.ai.mit.edu>
* TUTORIAL: Delete reference to ALT. Change <Rubout> to <Delete>.
1995-04-26 Karl Heuer <kwzh@nutrimat.gnu.ai.mit.edu>
* Makefile (maintainer-clean): Renamed from realclean.
1995-04-09 Richard Stallman <rms@mole.gnu.ai.mit.edu>
* tpu-doc.el: File moved to etc dir and renamed.
1995-04-07 Boris Goldowsky <boris@cs.rochester.edu>
* enriched.doc: Rewritten and simplified.
1994-11-20 Richard Stallman <rms@mole.gnu.ai.mit.edu>
* Makefile (eterm): New rule.
(TIC): New variable.
* e/eterm, e/eterm.ti: New files.
1994-10-24 Boris Goldowsky <boris@mole.gnu.ai.mit.edu>
* enriched.doc: New file.
1994-09-07 Richard Stallman <rms@mole.gnu.ai.mit.edu>
* Version 19.26 released.
1994-07-03 Richard Stallman (rms@gnu.ai.mit.edu)
* TUTORIAL: Talk about flow control along with C-x C-s and C-s.
1994-05-30 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Version 19.25 released.
1994-05-23 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Version 19.24 released.
1994-05-16 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Version 19.23 released.
1994-04-21 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Makefile (clean): Delete DOC*.
1993-11-27 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Version 19.22 released.
1993-11-16 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Version 19.21 released.
1993-11-11 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Version 19.20 released.
1993-08-14 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Version 19.19 released.
1993-08-08 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Version 19.18 released.
1993-07-06 Jim Blandy (jimb@geech.gnu.ai.mit.edu)
* Version 19.16 released.
1993-06-19 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu)
* version 19.15 released.
1993-06-17 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu)
* Version 19.14 released.
1993-06-16 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu)
Bring mumbleclean targets into conformance with GNU coding standards.
* Makefile (distclean): Don't remove backup and autosave files.
These are easy to get rid of in other ways, and a pain to lose.
(mostlyclean, realclean): New targets.
1993-06-08 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu)
* Version 19.13 released.
1993-05-30 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* Version 19.10 released.
1993-05-27 Jim Blandy (jimb@geech.gnu.ai.mit.edu)
* Version 19.9 released.
1993-05-24 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu)
* Version 19.8 released.
1993-05-22 Jim Blandy (jimb@geech.gnu.ai.mit.edu)
* Version 19.7 released.
1993-05-19 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu)
* MACHINES: Mention Linux.
1993-04-26 Jim Blandy (jimb@totoro.cs.oberlin.edu)
* MACHINES: Add section for NeXT, from Thorsten Ohl.
1993-04-28 Eric S. Raymond (eric@mole.gnu.ai.mit.edu)
* NEWS: Documented picture-mode improvements.
1993-04-25 Eric S. Raymond (eric@mole.gnu.ai.mit.edu)
* NEWS: Described the new properties of arrow keys and
next-line-add-newlines. Fixed up the GUD description, it was
out of date. This file referenced LNEWS when it should have
said news.texi; fixed.
news.texi: invocation-name now exists.
1993-03-27 Eric S. Raymond (eric@geech.gnu.ai.mit.edu)
* MORE.STUFF: Added.
1993-03-22 Eric S. Raymond (eric@geech.gnu.ai.mit.edu)
* NEWS: Preserved jimb's last change (documenting kill on
read-only buffers).
Added documentation on new info features.
1993-03-22 Eric S. Raymond (eric@geech.gnu.ai.mit.edu)
* spook.lines: Alpha-sorted this, and added some new hot buttons
for the 1990s.
1993-03-19 Eric S. Raymond (eric@geech.gnu.ai.mit.edu)
* MACHINES: Deleted some VMS caveats. If the src and lisp
ChangeLogs are correct, dired and mail and process control are now
fully supported.
* NEWS: Added finder news.
1993-03-19 Richard Stallman (rms@geech.gnu.ai.mit.edu)
* NEWS: Changed.
1993-03-19 Eric S. Raymond (eric@geech.gnu.ai.mit.edu)
* sex.6: Added 900-line support
* NEWS: Added news about the package finder.
1993-03-19 Eric S. Raymond (eric@geech.gnu.ai.mit.edu)
* MACHINES: `Last updated 10 Feb 1992.' was obviously wrong, so
I nuked it. Let the file mod date serve. Merged in APOLLO and
SUNBUG files. Changed references to 18.* to past tense.
* emacs.names: merged into JOKES. I faked a mail header from the
Unknown User to delimit the first (unheaded) bit.
* Makefile (relock, unlock): New productions.
1993-03-18 Eric S. Raymond (eric@geech.gnu.ai.mit.edu)
Augean-stable cleaning time. Partly to save space, but mostly to
reduce the dizzying amount of *stuff* confronting someone exploring
the Emacs distribution, I have the following changes in the etc
directory:
* CHARACTERS: merged into TO-DO file under the heading "Long Range:"
* DIFF, CCADIFF and GOSDIFF: merged into a new outline file titled
OTHER.EMACSES. The present names don't really convey anything.
Various key bindings and feature descriptions have been updated.
* NICKLES.WORTH. Nuked. This is copyrighted material that could land
FSF in hot water.
* INTERVAL.IDEAS: Nuked. RMS's thinking, and indeed the
implementation of intervals, have progressed way beyond this.
* RCP: Nuked. It no longer said anything but "Ooops, sorry!"
* ED.WORSHIP, GNU.JOKES: merged into a mailbox called JOKES.
Future jokes can accumulate there.
* DISTRIB: the actual domestic order form is now ORDERS.USA.
The DISTRIB text now mentions 19.
* ORDERS.USA: created. This is just the order form. DISTRIB
has a pointer to it at the beginning.
* EUROPE: renamed to ORDERS.EUROPE. DISTRIB now has a pointer
to it at the beginning.
* OOOONEWS, OOOONEWS: Nuked. It's version 19 --- nobody needs the
version 15 and 17 files anymore.
All files marked "Nuked" have actually been moved to =-prefixed
names as per convention. Originals of all files merged still
exist with =-names.
1993-03-17 Eric S. Raymond (eric@mole.gnu.ai.mit.edu)
* XENIX: nuked (moved to =XENIX). The hackery it describes is
no longer necessary in the presence of 19's function-key-map
feature; I've added an explanation to the beginning of the file.
1993-03-10 Jim Blandy (jimb@totoro.cs.oberlin.edu)
* MACHINES: Update description of SYSVr3 and r4 support, due to
Eric Raymond's changes.
1993-03-09 Jim Blandy (jimb@totoro.cs.oberlin.edu)
* MACHINES: Mention that you have to edit the configure script
when you add support for a new machine, to get it to recognize the
configuration name.
1992-11-20 Jim Blandy (jimb@totoro.cs.oberlin.edu)
* MACHINES: Converted to use GCC-style configuration names,
instead of listing m/*.h and s/*.h files. All knowledge of m/ and
s/ files now lives in ../configure.
1992-10-06 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
* NEWS: Document included tags tables.
1992-07-22 Eric S. Raymond (eric@mole.gnu.ai.mit.edu)
* Corrected the news about VC to reflect reality.
1992-07-17 Jim Blandy (jimb@wookumz.gnu.ai.mit.edu)
* etags.1: New file, from Richard K. Pixley at Cygnus.
1992-06-24 Jim Blandy (jimb@pogo.cs.oberlin.edu)
* Makefile: Most of the contents of this file were only relevant
to things in `../lib-src'; removed all but the `distclean' and
`clean' targets.
1992-04-14 Jim Blandy (jimb@pogo.cs.oberlin.edu)
* COPYING: Got June 1991 version of the GPL here.
* ChangeLog: Since the old etc contents have been split into etc
and lib-src, the old etc's ChangeLog has been duplicated in the
new etc and lib-src. That means that each contains complete and
coherent information, although each contains extraneous
information.
1992-04-08 Jim Blandy (jimb@pogo.cs.oberlin.edu)
* lib-src/etags.c: "--no-warning" option renamed to "--no-warn",
to be consistent with other GNU programs, like makeinfo.
* lib-src/Makefile: Renamed to Makefile.in; the configure script
will edit this to produce Makefile.
1992-04-07 Jim Blandy (jimb@pogo.cs.oberlin.edu)
* etags.c (print_help, print_version): New functions.
(main): Options added to support them.
* etags.c (longopts): New array of long names for the options.
(main): Recognize them.
1992-04-06 Jim Blandy (jimb@pogo.cs.oberlin.edu)
* etags.c (C_entries): Removed comment saying that \" in a string
isn't recognized as magic, because it is correctly handled.
* getopt.c, getopt.h: New files, from GNU C library.
* etags.c: Rewritten to use getopt.
#include "getopt.h".
(file_num): Variable deleted; its role is now played by getopt's
optind.
(main): Argument processing loop rewritten to call getopt to get
next option. Options which take parameters (-o and -i) rewritten
to get parameter from optarg instead of argv[1]. Filename
preprocessing loop and update command changed similarly.
* Makefile (etags, ctags): Depend on and link with getopt.h,
getopt.o, and getopt1.o.
(getopt.o, getopt1.o): New targets for the GNU getopt routines.
* etags.c (outfflag): Variable deleted; it is non-zero iff outfile
is non-zero.
(main): In the argument processing loop, the 'goto next_arg'
statements are breaking out of the switch statement in exactly the
same way that a simple 'break' statement would; replace the gotos
with breaks, and remove the label.
1992-04-06 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* etags.c (C_entries): Clear tydef and next_token_is_func at start.
(consider_token): Move next_token_is_func to global.
1992-04-02 Jim Blandy (jimb@pogo.cs.oberlin.edu)
* Makefile: Conform with GNU coding standards:
(mostlyclean): New target, synonymous with clean.
(TAGS, check): New targets.
(INSTALL, INSTALLFLAGS): New variables.
1992-03-31 Jim Blandy (jimb@pogo.cs.oberlin.edu)
* lib-src/Makefile, etc/MACHINES, etc/NEWS: Changed references to
`config.emacs' to `configure'.
* lib-src/Makefile: Adjusted for renaming of share-lib to etc.
* etc/MACHINES: Same.
1992-03-30 Jim Blandy (jimb@pogo.cs.oberlin.edu)
* movemail.c (main): Allow tempname to be as long as necessary,
instead of limiting it to 39 characters.
* movemail.c (main): Move declaration of buf from top of function
to local block surrounding the copy loop. This makes it less
likely to be confused with the buf used by the code which checks the
permissions on outname's directory.
1992-03-20 Jim Kingdon (kingdon@albert.gnu.ai.mit.edu)
* SERVICE: Remove my entry.
1992-03-09 David J. MacKenzie (djm@nutrimat.gnu.ai.mit.edu)
* Makefile (emacstool, nemacstool, xvetool): Use ${CFLAGS}, not
hardcoded -g.
* movemail.c (xmalloc): Return char *, not int.
(main) [!MAIL_USE_FLOCK]: Add a new conditional, MAIL_UNLINK_SPOOL,
that is off by default -- normally don't unlink the mail spool
file, just empty it. Pass creat mode 0600, not 0666.
1992-02-07 Jim Blandy (jimb at pogo.cs.oberlin.edu)
* Makefile (../arch-lib): Depend on ${EXECUTABLES}.
(all): Instead of here.
(install): Don't use the -s option, since people need symbols to
debug code.
1992-01-19 (Eric Youngdale at youngdale@v6550c.nrl.navy.mil)
* etags-vmslib.c (fn_exp): Add type cast.
1992-01-18 Richard Stallman (rms@mole.gnu.ai.mit.edu)
* movemail.c: Changes in comments.
1992-01-13 Jim Blandy (jimb at pogo.cs.oberlin.edu)
* Makefile: Make the distclean target erase the DOC files from
../share-lib and the executables from ../arch-lib.
1992-01-09 Jim Blandy (jimb at pogo.cs.oberlin.edu)
* emacsclient.c: #include <sys/stat.h>
(main): Do declare statbfr.
1991-12-21 Richard Stallman (rms at mole.gnu.ai.mit.edu)
* emacsserver.c, emacsclient.c [BSD]: Use either /tmp or ~
for the socket, depending on SERVER_HOME_DIR.
If using /tmp, put host name in the socket name.
* movemail.c (pfatal_and_delete): New function.
(main, popmail): Use it.
(popmail): Close output before deleting messages.
Check for error on close and on fsync.
Use `fatal' where appropriate.
(main): Remove (void).
* aixcc.lex: New file. Not officially part of Emacs.
* Makefile: Rules for that.
1991-12-04 Jim Blandy (jimb at pogo.gnu.ai.mit.edu)
* yow.c (main): Rename all references to PATH_EXEC to PATH_DATA.
* etags.c (main): Properly cast call to alloca that initializes
included_files.
1991-08-17 Roland McGrath (roland@geech.gnu.ai.mit.edu)
* etags.c (files_are_tag_tables): Remove global var.
(process_file): Don't test it. Also remove hack checking for a
file named "TAGS".
(main): -i now takes an arg which is the name of a file to include.
Collect these names and emit include tags for them after processing
all the argument files.
1991-07-30 Richard Stallman (rms at mole.gnu.ai.mit.edu)
* wakeup.c: Terminate if parent goes away.
1991-07-18 Richard Stallman (rms at mole.gnu.ai.mit.edu)
* etags.c (C_entries): Process token before handling end of line.
When inner loops reach end of line, just back up.
Let the real end of line processing happen in just one place.
(consider_token): Likewise.
1991-04-11 Jim Blandy (jimb at geech.gnu.ai.mit.edu)
* etags.c (TEX_mode): Skip comments while scanning the text to see
which escape character this file uses.
1991-03-29 Richard Stallman (rms at mole.gnu.ai.mit.edu)
* emacsserver.c [USG]: Terminate if msgrcv fails.
1991-03-03 Richard Stallman (rms at mole.ai.mit.edu)
* emacsserver.c [BSD]: Check for errors on stdin after scanf.
1991-01-25 Jim Blandy (jimb at churchy.ai.mit.edu)
* make-docfile: Find the arguments to a C function correctly,
by not ignoring the character that read_c_string returns. Don't
even try to find argument names for functions that take MANY
or UNEVALLED arguments, since they're a figment of the docstring's
imagination.
1991-01-14 Jim Blandy (jimb at churchy.ai.mit.edu)
* make-docfile: Read the .elc files generated by the new byte
compiler.
1990-12-31 Richard Stallman (rms at mole.ai.mit.edu)
* refcard.tex: Use cm fonts, not am, in multi-column mode.
1990-11-29 Richard Stallman (rms at mole.ai.mit.edu)
* movemail.c (mbx_delimit_begin): Put space before `unseen'.
1990-11-27 Richard Stallman (rms at mole.ai.mit.edu)
* Makefile (install*): No need to install wakeup.
1990-11-26 Richard Stallman (rms at mole.ai.mit.edu)
* Makefile (install*): Install emacsclient like etags.
1990-11-13 Richard Stallman (rms at mole.ai.mit.edu)
* movemail.c (error): Handle 3 args.
(main): Don't check input access if using pop.
1990-10-16 Richard Stallman (rms at mole.ai.mit.edu)
* etags.c (find_entries): Check for numbers after Scheme suffix.
1990-10-14 Richard Stallman (rms at mole.ai.mit.edu)
* termcap.dat (vt200-80): Fix ke and ks to frob flag 1.
1990-10-09 Richard Stallman (rms at mole.ai.mit.edu)
* Makefile (nemacstool, xvetool): New targets.
1990-09-26 Richard Stallman (rms at mole.ai.mit.edu)
* emacsclient.c: Include errno.h and define related variables.
1990-09-23 Richard Stallman (rms at mole.ai.mit.edu)
* emacsclient.c: Change usage message.
1990-08-30 David Lawrence (tale at pogo.ai.mit.edu)
* emacs.1: Add break before -nw option.
1990-08-19 David J. MacKenzie (djm at apple-gunkies)
* qsort.c: Replace with GNU version.
1990-08-14 David J. MacKenzie (djm at apple-gunkies)
* wakeup.c: New program replacing loadst.c.
1990-08-14 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* emacsclient.c [USG]: Pass msgsnd only 4 args.
1990-08-09 David J. MacKenzie (djm at pogo.ai.mit.edu)
* etags.c: Rename `flag' variables for what they do instead of
which option character sets them.
1990-05-28 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* loadst.c (main): Conditional to get load average on Apollo.
1990-05-22 Joseph Arceneaux (jla at churchy.ai.mit.edu)
* emacsserver.c: Set the permission on the socket to 0600.
1990-03-27 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* emacsclient.c [BSD]: Print clean message for failing getwd.
1990-03-20 David Lawrence (tale at pogo.ai.mit.edu)
* getdate.y: Use the getdate.y from GNU tar for timer.
1990-03-18 Jim Kingdon (kingdon at pogo.ai.mit.edu)
* emacsclient.c (main): Don't put brackets around "filename" in
usage message. It isn't optional.
1990-03-14 Joseph Arceneaux (jla at churchy.ai.mit.edu)
* etags.c (getit): Recognize '$' as beginning identifiers.
1990-02-22 David Lawrence (tale at pogo.ai.mit.edu)
* emacsserver.c: Renamed from server.c.
* Makefile: Reference emacsserver rather than server.
* MACHINES: Doc fix for new emacsserver name.
1990-01-25 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* emacsclient.c: Print program name in error messages.
1990-01-19 David Lawrence (tale at cocoa-puffs)
* timer.c, getdate.y (new files) and Makefile:
Sub-process support for run-at-time in timer.el.
Doesn't yet work correctly for USG.
1990-01-10 Jim Kingdon (kingdon at pogo)
* MACHINES: Add HP 300 running BSD.
1990-01-02 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* yow.c: Dynamically allocate buffer; skip header before random
choice to avoid bias toward first item.
1989-12-24 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* etags.c (readline): Separate out init of `pend'.
1989-12-17 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* etags.c: Undo changes relating to isgoodhdr.
1989-12-16 Mosur Mohan (rms at sugar-bombs.ai.mit.edu)
* etags.c (isgoodhdr): New macro.
(_gdh, notgdh): New variable used by that.
(init): Initialize _gdh.
(find_entries): Set header_file.
(consider_token): Use isgoodhdr if in header file.
* etags.c (total_size_of_entries):
Was miscalculating by 1 in rewritten case.
* etags.c (PAS_funcs): One arg to pfnote was missing.
1989-12-05 Joseph Arceneaux (jla at spiff)
* MACHINES: Change for the ULTRIX entry.
1989-11-21 Joseph Arceneaux (jla at spiff)
* etags.c (process_file): If file is not regular, return.
1989-11-06 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* loadst.c (main): Handle FIXUP_KERNEL_SYMBOL_ADDR.
1989-10-30 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* loadst.c (load_average): If HAVE_GETLOADAVG, use getloadavg.
(main): If HAVE_GETLOADAVG, don't call `nlist'.
1989-10-25 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* etags.c (consider_token): Allow any number of typespec keywords
after `typedef', before new type name.
(enum sym_type): Add st_C_typespec.
(C_create_stab): Put typespec kwds in table.
1989-08-27 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
* etags.c (main): Don't depend on name invoked by.
If CTAGS is not defined, assume it is ETAGS.
1989-07-31 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* etags.c (L_funcs): Allow package name in define construct,
as in (foo::defmumble name-defined ...).
1989-07-30 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* etags.c (find_entries): Stupid bug testing for C filename suffixes.
* Makefile (yow): Depends on ../src/paths.h.
1989-07-04 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
* etags.c: Fix compilation by moving Pascal after Fortran.
1989-06-15 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* movemail.c [USG]: Define F_OK, etc., if not found in header.
1989-05-27 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* hexl.c: New file, supports hexl-mode.
1989-05-14 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* movemail.c: New compilation flag MAIL_USE_MMDF.
1989-05-08 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* emacsclient.c: Use BSD code whenever HAVE_SOCKETS.
* server.c: Likewise.
* make-docfile.c (scan_c_file): Output argument names at end of string.
(write_c_args): New subroutine.
1989-04-27 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* movemail.c: Report failure of flock.
1989-04-19 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* etags.c (find_entries): Allow multi-letter extensions for fortran.
1989-04-18 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* loadst.c: on bsd4.3, use gettimeofday instead of CPUSTATES.
1989-03-15 Jeff Peck (rms at sugar-bombs.ai.mit.edu)
* emacstool.c: setenv IN_EMACSTOOL=t, TERM=sun, TERMCAP=.
* emacsstool.1: update to document environment variables.
1989-02-21 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* etags.c (PAS_funcs): New function by Mosur Mohan.
* movemail.c: On sysv, include unistd.h.
1989-02-18 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* b2m.c: New file.
1989-02-15 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* etags.c: Prolog support from Sunichirou Sugou
1989-02-03 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* Makefile (clean): New target.
1989-01-25 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* fakemail.c (put_line): Break header lines at 79 cols.
1989-01-19 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* etags.c: Greatly rewritten by Sam Kendall for C++ support and for
multiple tags per line.
1989-01-03 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* movemail.c: Check access before doing real work.
Check that outfile is in a writable directory.
On fatal error, delete the lock file.
1988-12-31 Richard Mlynarik (mly at rice-chex.ai.mit.edu)
* env.c: Add decl for my-index
* etags.c (file-entries): .oak => scheme
1988-12-30 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* movemail.c: Use `access' to check input and output files.
1988-12-28 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* emacsclient.c (main): Ignore all of CWD before first slash.
1988-12-27 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* etags.c (readline): Double linebuffer->size outside the xrealloc.
1988-12-22 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* server.c, emacsclient.c: Don't try to use gid_t; it isn't defined.
* server.c: chmod the socket to 0700.
1988-12-09 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* fakemail.c (main): Let env var FAKEMAILER override pgm to run.
(add_field): Delete comments and turn `<', `>' to spaces
in header lines.
(USE_FAKEMAIL): New customization macro says to make fakemail
not be a no-op even on a BSD system.
1988-12-01 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* etags.c (consider_token): Skip comments just like whitespace.
Notice `struct', etc. and set strtag for those tokens.
Return 1 for the token following `struct' if an open-brace follows it.
(C_entries): Special handling of token following `struct'
needed because we have probably advanced to the following line
to find the `{'.
(main): New option `T' sets tflag and strflag.
Set both of them by default if eflags.
1988-11-30 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* movemail.c: Do fsync before closing output.
1988-11-29 Richard Mlynarik (mly at pickled-brain.ai.mit.edu)
* movemail.c: Better error message when can't create tempname.
This file needs a great deal of extra error-checking and lucid reporting...
1988-11-16 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* etags.c: Support assembler code for .s and .a files.
(getit): Allow underscore in a tag.
1988-11-15 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* movemail.c: Close output and check errors before deleting input.
1988-10-01 Richard Stallman (rms at apple-gunkies.ai.mit.edu)
* emacsclient.c [SYSVIPC]: Compute cwd only once; decide properly
whether to prefix it. Handle line number args.
1988-09-24 Richard Stallman (rms at gluteus.ai.mit.edu)
* etags.c (main): default setting of eflag was backwards.
1988-09-23 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* etags.c: New option -i. -f renamed -o.
`-' as input file means read input file names from stdin.
-i spec'd or input file named TAGS means the input file is another
tag table; output an "include" line for it.
1988-09-19 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* Makefile: New vars DESTDIR, BINDIR, LIBDIR, MANDIR, MANEXT.
New targets install, install.sysv, install.xenix.
This makefile is now responsible for installing executables
and documentation from this directory into system directories.
1988-09-16 Richard Stallman (rms at corn-chex.ai.mit.edu)
* server.c, emacsclient.c (main): Compute socket name from euid.
1988-08-04 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* emacsclient.c: Args like +DIGITS are passed through unchanged.
1988-07-12 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* server.c: If both BSD and HAVE_SYSVIPC, use the latter.
* emacsclient.c: Likewise.
In the HAVE_SYSVIPC alternative, if BSD, use getwd instead of getcwd.
1988-06-23 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* etags.c: Handle `typedef struct foo {' (price@mcc.com).
(istoken) New string-comparison macro.
(consider_token): New arg `level'. New state `tag_ok' in `tydef'.
1988-06-14 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* etags.c: Changes for VMS.
Always define ETAGS on VMS.
Define macros GOOD and BAD for success and failure exit codes.
(begtk, intk): Allow `$' in identifiers
(main): Don't support -B, -F or -u on VMS.
Alternate loop for scanning filename arguments.
(system): Delete definition of this function.
* etags-vmslib.c (system): Undefine this; VMS now provides it.
1988-06-08 Richard Stallman (rms at sugar-bombs.ai.mit.edu)
* loadst.c: Prevent multiple-def errors on BSD and BSD4_3
around include of param.h. (Like fns.c.)
1988-05-16 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
* loadst.c (load_average): Move load-average code to this new fn.
Add conditionals to compute load ave on UMAX.
1988-05-14 Richard Stallman (rms at lucky-charms.ai.mit.edu)
* loadst.c: Change DK_HEADER_FILE to DKSTAT_HEADER_FILE
with opposite sense.
1988-05-13 Chris Hanson (cph at kleph)
* emacsclient.c: Delete references to unused variable `out'. This
caused a bus error when used under hp-ux.
1988-05-06 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
* loadst.c: Control dk.h conditional with DK_HEADER_FILE.
1988-05-04 Richard Stallman (rms at rice-krispies.ai.mit.edu)
* etags.c (find_entries): `.t' or `.sch' means scheme code.
1988-04-29 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
* loadst.c: Add BSD4_3 conditional for file dk.h instead of dkstat.h.
1988-04-28 Richard Stallman (rms at frosted-flakes.ai.mit.edu)
* movemail.c: #undef close, since config can #define it on V.3.
* emacsclient.c, fakemail.c, loadst.c, server.c: likewise.
1988-04-26 Richard Stallman (rms at lucky-charms.ai.mit.edu)
* etags.c (TEX_mode, etc.): Remove superfluous backslashes from
invalid escape sequences such as `\{'.
* loadst.c: Add `sequent' conditional for file dk.h.
1988-03-20 Richard M. Stallman (rms at wilson)
* server.c [not BSD and not HAVE_SYSVIPC]: fix error message.
* loadst.c (main) [XENIX]: use /usr/spool/mail, not /usr/mail.

143
etc/DEBUG Normal file
View file

@ -0,0 +1,143 @@
Debugging GNU Emacs
Copyright (c) 1985 Richard M. Stallman.
Permission is granted to anyone to make or distribute verbatim copies
of this document as received, in any medium, provided that the
copyright notice and permission notice are preserved,
and that the distributor grants the recipient permission
for further redistribution as permitted by this notice.
Permission is granted to distribute modified versions
of this document, or of portions of it,
under the above conditions, provided also that they
carry prominent notices stating who last changed them.
On 4.2 you will probably find that dbx does not work for
debugging GNU Emacs. For one thing, dbx does not keep the
inferior process's terminal modes separate from its own.
For another, dbx does not put the inferior in a separate
process group, which makes trouble when an inferior uses
interrupt input, which GNU Emacs must do on 4.2.
dbx has also been observed to have other problems,
such as getting incorrect values for register variables
in stack frames other than the innermost one.
The Emacs distribution now contains GDB, the new source-level
debugger for the GNU system. GDB works for debugging Emacs.
GDB currently runs on vaxes under 4.2 and on Sun 2 and Sun 3
systems.
** Some useful techniques
`Fsignal' is a very useful place to stop in.
All Lisp errors go through there.
It is useful, when debugging, to have a guaranteed way
to return to the debugger at any time. If you are using
interrupt-driven input, which is the default, then Emacs is using
RAW mode and the only way you can do it is to store
the code for some character into the variable stop_character:
set stop_character = 29
makes Control-] (decimal code 29) the stop character.
Typing Control-] will cause immediate stop. You cannot
use the set command until the inferior process has been started.
Put a breakpoint early in `main', or suspend the Emacs,
to get an opportunity to do the set command.
If you are using cbreak input (see the Lisp function set-input-mode),
then typing Control-g will cause a SIGINT, which will return control
to the debugger immediately unless you have done
ignore 3 (in dbx)
or handle 3 nostop noprint (in gdb)
You will note that most of GNU Emacs is written to avoid
declaring a local variable in an inner block, even in
cases where using one would be the cleanest thing to do.
This is because dbx cannot access any of the variables
in a function which has even one variable defined in an
inner block. A few functions in GNU Emacs do have variables
in inner blocks, only because I wrote them before realizing
that dbx had this problem and never rewrote them to avoid it.
I believe that GDB does not have such a problem.
** Examining Lisp object values.
When you have a live process to debug, and it has not encountered a
fatal error, you can use the GDB command `pr'. First print the value
in the ordinary way, with the `p' command. Then type `pr' with no
arguments. This calls a subroutine which uses the Lisp printer.
If you can't use this command, either because the process can't run
a subroutine or because the data is invalid, you can fall back on
lower-level commands.
Use the `xtype' command to print out the data type of the last data
value. Once you know the data type, use the command that corresponds
to that type. Here are these commands:
xint xptr xwindow xmarker xoverlay xmiscfree xintfwd xboolfwd xobjfwd
xbufobjfwd xkbobjfwd xbuflocal xbuffer xsymbol xstring xvector xframe
xwinconfig xcompiled xcons xcar xcdr xsubr xprocess xfloat xscrollbar
Each one of them applies to a certain type or class of types.
(Some of these types are not visible in Lisp, because they exist only
internally.)
Each x... command prints some information about the value, and
produces a GDB value (subsequently available in $) through which you
can get at the rest of the contents.
In general, most of the rest of the contents will be addition Lisp
objects which you can examine in turn with the x... commands.
** If GDB does not run and your debuggers can't load Emacs.
On some systems, no debugger can load Emacs with a symbol table,
perhaps because they all have fixed limits on the number of symbols
and Emacs exceeds the limits. Here is a method that can be used
in such an extremity. Do
nm -n temacs > nmout
strip temacs
adb temacs
0xd:i
0xe:i
14:i
17:i
:r -l loadup (or whatever)
It is necessary to refer to the file `nmout' to convert
numeric addresses into symbols and vice versa.
It is useful to be running under a window system.
Then, if Emacs becomes hopelessly wedged, you can create
another window to do kill -9 in. kill -ILL is often
useful too, since that may make Emacs dump core or return
to adb.
** Debugging incorrect screen updating.
To debug Emacs problems that update the screen wrong, it is useful
to have a record of what input you typed and what Emacs sent to the
screen. To make these records, do
(open-dribble-file "~/.dribble")
(open-termscript "~/.termscript")
The dribble file contains all characters read by Emacs from the
terminal, and the termscript file contains all characters it sent to
the terminal. The use of the directory `~/' prevents interference
with any other user.
If you have irreproducible display problems, put those two expressions
in your ~/.emacs file. When the problem happens, exit the Emacs that
you were running, kill it, and rename the two files. Then you can start
another Emacs without clobbering those files, and use it to examine them.

642
etc/JOKES Normal file
View file

@ -0,0 +1,642 @@
From: Don Chiasson <G.CHIASSON@DREA-XX.ARPA>
Subject: Some gnu jokes
To: jokes@DREA-XX.ARPA, gergely@DREA-XX.ARPA, broome@DREA-XX.ARPA
cc: G.CHIASSON@DREA-XX.ARPA
Message-ID: <12329394624.13.G.CHIASSON@DREA-XX.ARPA>
Richard M. Stallman (RMS, widely known for creating EMACS) is writing
a UNIX clone called GNU (which means Gnu's Not Unix--a recursive acronym).
This seems to open the way to a whole gnu class of jokes. For example:
Q: What do you call a person who hacks while wearing no clothes?
A: A gnudist.
Q: What do you call an eligible young hacker?
A: Gnubile.
Q: What is a hacker's favorite candy?
A: Gnugat. (Though it contains little gnutrition.)
Q: What do you call a computer filled with air?
A: Gnumatic.
Q: What do you call a novice hacker who keeps pestering you
with foolish questions?
A: A gnuisance.
Q: What do you call a subtle, clever hack in the favorite language?
A: A gnuanCe.
Q: What do you use a supercomputer for?
A: Gnumerical analysis.
Q: What do you call a hacker who collects coins?
A: A gnumismatist.
Well, there are more, just too gnumerous to tell all at once. I think
I'd better go before someone starts firing gnuclear weapons at me.
Don
From: patl@athena.mit.edu (Patrick J. LoPresti)
Message-ID: <1991Jul11.031731.9260@athena.mit.edu>
Sender: news@athena.mit.edu (News system)
Subject: The True Path (long)
Date: 11 Jul 91 03:17:31 GMT
Path: ai-lab!mintaka!olivea!samsung!zaphod.mps.ohio-state.edu!think.com!snorkelwacker.mit.edu!bloom-picayune.mit.edu!athena.mit.edu!patl
Newsgroups: alt.religion.emacs,alt.slack
Organization: Massachusetts Institute of Technology
Lines: 95
Xref: ai-lab alt.religion.emacs:244 alt.slack:1935
When I log into my Xenix system with my 110 baud teletype, both vi
*and* Emacs are just too damn slow. They print useless messages like,
'C-h for help' and '"foo" File is read only'. So I use the editor
that doesn't waste my VALUABLE time.
Ed, man! !man ed
ED(1) UNIX Programmer's Manual ED(1)
NAME
ed - text editor
SYNOPSIS
ed [ - ] [ -x ] [ name ]
DESCRIPTION
Ed is the standard text editor.
---
Computer Scientists love ed, not just because it comes first
alphabetically, but because it's the standard. Everyone else loves ed
because it's ED!
"Ed is the standard text editor."
And ed doesn't waste space on my Timex Sinclair. Just look:
-rwxr-xr-x 1 root 24 Oct 29 1929 /bin/ed
-rwxr-xr-t 4 root 1310720 Jan 1 1970 /usr/ucb/vi
-rwxr-xr-x 1 root 5.89824e37 Oct 22 1990 /usr/bin/emacs
Of course, on the system *I* administrate, vi is symlinked to ed.
Emacs has been replaced by a shell script which 1) Generates a syslog
message at level LOG_EMERG; 2) reduces the user's disk quota by 100K;
and 3) RUNS ED!!!!!!
"Ed is the standard text editor."
Let's look at a typical novice's session with the mighty ed:
golem> ed
?
help
?
?
?
quit
?
exit
?
bye
?
hello?
?
eat flaming death
?
^C
?
^C
?
^D
?
---
Note the consistent user interface and error reportage. Ed is
generous enough to flag errors, yet prudent enough not to overwhelm
the novice with verbosity.
"Ed is the standard text editor."
Ed, the greatest WYGIWYG editor of all.
ED IS THE TRUE PATH TO NIRVANA! ED HAS BEEN THE CHOICE OF EDUCATED
AND IGNORANT ALIKE FOR CENTURIES! ED WILL NOT CORRUPT YOUR PRECIOUS
BODILY FLUIDS!! ED IS THE STANDARD TEXT EDITOR! ED MAKES THE SUN
SHINE AND THE BIRDS SING AND THE GRASS GREEN!!
When I use an editor, I don't want eight extra KILOBYTES of worthless
help screens and cursor positioning code! I just want an EDitor!!
Not a "viitor". Not a "emacsitor". Those aren't even WORDS!!!! ED!
ED! ED IS THE STANDARD!!!
TEXT EDITOR.
When IBM, in its ever-present omnipotence, needed to base their
"edlin" on a UNIX standard, did they mimic vi? No. Emacs? Surely
you jest. They chose the most karmic editor of all. The standard.
Ed is for those who can *remember* what they are working on. If you
are an idiot, you should use Emacs. If you are an Emacs, you should
not be vi. If you use ED, you are on THE PATH TO REDEMPTION. THE
SO-CALLED "VISUAL" EDITORS HAVE BEEN PLACED HERE BY ED TO TEMPT THE
FAITHLESS. DO NOT GIVE IN!!! THE MIGHTY ED HAS SPOKEN!!!
?
From: The Unknown User <anonymous@nowhere.uucp>
Subject: EMACS -- What does it mean?
To: mit-prep!info-gnu-emacs@TOPAZ.RUTGERS.EDU
EMACS belongs in <sys/errno.h>: Editor too big!
Escape-Meta-Alt-Control-Shift
From: harvard!topaz!BLUE!BRAIL@mit-eddie
Date: 9 Sep 85 17:25:27 EDT
Subject: EMACS -- What does it mean?
To: mit-prep!info-gnu-emacs@TOPAZ.RUTGERS.EDU
EMACS may stand for "Editing MACroS," but some friends of mine
suggested some more creative definitions. Here they are. Anyone have
any additions?
--------
Eight
Megabytes
And
Constantly
Swapping
Even a
Master of
Arts
Comes
Simpler
Emacs
Manuals
Are
Cryptic and
Surreal
Energetic
Merchants
Always
Cultivate
Sales
Each
Manual's
Audience is
Completely
Stupified
Emacs
Means
A
Crappy
Screen
Eventually
Munches
All
Computer
Storage
Even
My
Aunt
Crashes the
System
Eradication of
Memory
Accomplished with
Complete
Simplicity
Elsewhere
Maybe
Alternative
Civilizations
Survive
Egregious
Managers
Actively
Court
Stallman
Esoteric
Malleability
Always
Considered
Silly
Emacs
Manuals
Always
Cause
Senility
Easily
Maintained with the
Assistance of
Chemical
Solutions
EMACS
MACRO
ACTED
CREDO
SODOM
Edwardian
Manifestation of
All
Colonial
Sins
Generally
Not
Used
Except by
Middle
Aged
Computer
Scientists
Extended
Macros
Are
Considered
Superfluous
Every
Mode
Accelerates
Creation of
Software
Elsewhere
Maybe
All
Commands are
Simple
Emacs
May
Allow
Customised
Screwups
Excellent
Manuals
Are
Clearly
Suppressed
Emetic
Macros
Assault
Core and
Segmentation
Embarrassed
Manual-Writer
Accused of
Communist
Subversion
Extensibility and
Modifiability
Aggravate
Confirmed
Simpletons
Emacs
May
Annihilate
Command
Structures
Easily
Mangles,
Aborts,
Crashes and
Stupifies
Extraneous
Macros
And
Commands
Stink
Exceptionally
Mediocre
Algorithm for
Computer
Scientists
EMACS
Makes no
Allowances
Considering its
Stiff price
Equine
Mammals
Are
Considerably
Smaller
Embarrassingly
Mundane
Advertising
Cuts
Sales
Every
Moron
Assumes
CCA is
Superior
Exceptionally
Mediocre
Autocratic
Control
System
EMACS
May
Alienate
Clients and
Supporters
Excavating
Mayan
Architecture
Comes
Simpler
Erasing
Minds
Allows
Complete
Submission
Every
Male
Adolescent
Craves
Sex
Elephantine
Memory
Absolutely
Considered
Sine que non
Emacs
Makers
Are
Crazy
Sickos
Eenie-Meenie-Miney-Mo-
Macros
Are
Completely
Slow
Experience the
Mildest
Ad
Campaign ever
Seen
Emacs
Makefiles
Annihilate
C-
Shells
Eradication of
Memory
Accomplished with
Complete
Simplicity
Emetic
Macros
Assault
Core and
Segmentation
Epileptic
MLisp
Aggravates
Compiler
Seizures
Eleven thousand
Monkeys
Asynchronously
Crank out these
Slogans
-------
From: ihnss!warren@mit-eddie (Warren Montgomery)
Newsgroups: net.emacs
Subject: Re: EMACS -- What does it mean?
Date: Tue, 10-Sep-85 09:14:24 EDT
Organization: AT&T Bell Labs, Naperville, IL
Apparently-To: emacs-netnews-distribution@mit-prep
Someone at a luncheon suggested it meant:
Evenings,
Mornings,
And a
Couple of
Saturdays
(In reference to the odd hours that went into the creation of my
implementation).
--
Warren Montgomery
ihnss!warren
IH ((312)-979) x2494
Date: Wed, 18 Sep 85 10:11:04 edt
From: inmet!tower@inmet.inmet (Leonard H. Tower Jr.) <inmet!tower@cca-unix>
Subject: Re: EMACS -- What does it mean?
To: tower@MIT-PREP.ARPA
Received: by inmet.uucp (4.12/inmet) id AA02199; Wed, 18 Sep 85 09:10:17 edt
Date: Wed, 18 Sep 85 09:10:17 edt
Message-Id: <8509181310.AA02199@inmet.uucp>
Uucp-Paths: {bellcore,ima,ihnp4}!inmet!tower
Arpa-Path: ima!inmet!tower@CCA-UNIX.ARPA
Organization: Intermetrics, Inc., Cambridge, MA, USA
Home: 36 Porter Street, Somerville, MA 02143, USA +1 (617) 623-7739
/* Written 6:48 pm Sep 14, 1985 by gml@ssc-vax in inmet:net.emacs */
/* ---------- "Re: EMACS -- What does it mean?" ---------- */
Pleeeeeeeze!!! Nice try on the meaning of EMACS. I believe the
correct acronym is:
Emacs
Makes
All
Computing
Simple
Thank you, and Good Night
/* End of text from inmet:net.emacs */
From: ho95e!wcs@mit-eddie (Bill.Stewart.4K435.x0705)
Newsgroups: net.emacs
Subject: Re: EMACS -- What does it mean?
Date: Thu, 26-Sep-85 21:43:54 EDT
Organization: AT&T Bell Labs, Holmdel NJ
Apparently-To: emacs-netnews-distribution@mit-prep
> > very interesting, but what does GNU stand for ?
> GNU = Gnu's Not UNIX. There is also MINCE, for Mince Is Not a Complete Emacs.
> More recursive acronyms, anyone?
Many people have also seen FINE Is Not Emacs, but the one that has
character is THief Isn't Even Fine.
--
## Bill Stewart, AT&T Bell Labs, Holmdel NJ 1-201-949-0705 ihnp4!ho95c!wcs
Path: mit-eddie!think!harvard!bbnccv!bbncca!linus!decvax!mcnc!ncsu!uvacs!edison!ta2
From: edison!ta2@mit-eddie (tom allebrandi)
Newsgroups: net.emacs
Subject: Re: Re: EMACS -- What does it mean?
Date: Sun, 29-Sep-85 18:11:55 EDT
Organization: General Electric's Mountain Resort
Apparently-To: emacs-netnews-distribution@mit-prep
> GNU = Gnu's Not UNIX. There is also MINCE, for Mince Is Not a Complete Emacs.
>
> More recursive acronyms, anyone?
>
For the DEC-system-10/20: FINE - Fine Is Not Emacs.....
--
...............
tom allebrandi 2, general electric aco, charlottesville, va
{decvax,duke}!mcnc!ncsu!uvacs!edison!ta2
box 8106, charlottesville, va, 22906
(804) 978-5566
...............
Date: Wed, 16 Oct 85 01:38:12 edt
From: inmet!tower (Leonard H. Tower Jr.) <inmet!tower@cca-unix>
Subject: more names
To: tower@MIT-PREP.ARPA
Received: by inmet.uucp (4.12/inmet) id AA12997; Tue, 15 Oct 85 22:31:39 edt
Date: Tue, 15 Oct 85 22:31:39 edt
Message-Id: <8510160231.AA12997@inmet.uucp>
Uucp-Paths: {bellcore,ima,ihnp4}!inmet!tower
Arpa-Path: ima!inmet!tower@CCA-UNIX.ARPA
Organization: Intermetrics, Inc., Cambridge, MA, USA
Home: 36 Porter Street, Somerville, MA 02143, USA +1 (617) 623-7739
/* Written 12:20 pm Oct 14, 1985 by rs@mirror.UUCP in inmet:net.emacs */
SINE: Sine Is Not Emacs
(MIT Architecture Machine Group)
EINE: Eine is Not Emacs
(MIT Lisp Machine)
ZWEI: Zwei Was Eine Initially
("rev2" of EINE)
--
Rich $alz {mit-eddie, ihnp4!inmet, wjh12, cca, datacube} !mirror!rs
Mirror Systems 2067 Massachusetts Ave.
617-661-0777 Cambridge, MA, 02140
/* End of text from inmet:net.emacs */
Path: mit-eddie!genrad!panda!talcott!harvard!seismo!gatech!ulysses!pajb
From: ulysses!pajb@mit-eddie (Paul Bennett)
Newsgroups: net.emacs
Subject: Here we go again ...
Date: Sat, 19-Oct-85 17:26:49 EDT
Organization: AT&T Bell Laboratories, Murray Hill
Apparently-To: emacs-netnews-distribution@mit-prep
> EINE: Eine is Not Emacs
> (MIT Lisp Machine)
>
> ZWEI: Zwei Was Eine Initially
> ("rev2" of EINE)
DREI: DREI - Really Emacs Inside
(Exists only in my head)
From: friedman@gnu.ai.mit.edu (Noah Friedman)
Sender: friedman@gnu.ai.mit.edu
To: jimb@gnu.ai.mit.edu, rms@gnu.ai.mit.edu
Subject: etc/emacs.names
Date: Fri, 9 Oct 92 00:54:57 edt
The following should be added:
Emacs
Makes
A
Computer
Slow
From: S_TITZ@iravcl.ira.uka.de (Olaf Titz)
Newsgroups: alt.religion.emacs
Subject: Re: what emacs stands for
Date: 12 Oct 92 19:29:32 GMT
Emacs Masquerades As Comfortable Shell
Ever Made A Control-key Setup?
Emacs: My Alternative Computer Story
Emacs Made Almost Completely Screwed
(by extensive use of M-x global-unset-key)
Emacs Macht Alle Computer Schoen
(deutsch) (=Emacs makes all computers beautiful)
Each Mail A Continued Surprise
Every Mode Acknowledges Customized Strokes
(keystrokes, of course :-)
Eating Memory And Cycle-Sucking
Everyday Material Almost Compiled Successfully
now enough bashing for today :-)
From: elvis@gnu.ai.mit.edu
To: emacs-19-bugs@gnu.ai.mit.edu
Subject: missing from etc/emacs.names
Date: Thu, 20 May 93 02:21:27 edt
Elvis
Masterminds
All
Computer
Software
Just so you boys know the score.
Thank you very Much,
The King

122
etc/LPF Normal file
View file

@ -0,0 +1,122 @@
Protect Your Freedom to Write Programs
Join the League for Programming Freedom
(Version of February 3, 1994)
Ten years ago, programmers were allowed to write programs using all
the techniques they knew, and providing whatever features they felt
were useful. This is no longer the case. New monopolies, known as
software patents and interface copyrights, have taken away our freedom
of expression and our ability to do a good job.
"Look and feel" lawsuits attempt to monopolize well-known command
languages; some have succeeded. Copyrights on command languages
enforce gratuitous incompatibility, close opportunities for
competition, and stifle incremental improvements.
Software patents are even more dangerous; they make every design
decision in the development of a program carry a risk of a lawsuit,
with draconian pretrial seizure. It is difficult and expensive to
find out whether the techniques you consider using are patented; it is
impossible to find out whether they will be patented in the future.
The League for Programming Freedom is a grass-roots organization of
professors, students, businessmen, programmers and users dedicated to
bringing back the freedom to write programs. The League is not
opposed to the legal system that Congress expressly established for
software--copyright on individual programs. Our aim is to reverse the
recent changes that prevent programmers from doing their work.
The League works to abolish the new monopolies by publishing articles,
talking with public officials, denouncing egregious offenders, and
filing amicus curiae briefs, most notably against Lotus in its suit
against Borland. We testified twice at the recent Patent Office
hearings on software patents. We welcome suggestions for other
activities, as well as help in carrying them out.
Membership dues in the League are $42 per year for programmers,
managers and professionals; $10.50 for students; $21 for others.
Please give more if you can. The League's funds will be used for
filing briefs; for printing handouts, buttons and signs; whatever will
persuade the courts, the legislators, and the people. You may not get
anything personally for your dues--except for the freedom to write
programs. The League is a non-profit corporation, but not considered
a tax-exempt charity. However, for those self-employed in software,
the dues can be a business expense.
The League needs both activist members and members who only pay their
dues. We also greatly need additional corporate members; contact us
for information.
If you have any questions, please write to the League, phone
+1 617 621 7084, or send Internet mail to lpf@uunet.uu.net.
Chris Hofstader, President
Dean Anderson, Secretary
Aubrey Jaffer, Treasurer
Chris Hofstader can be reached at (617) 492-0023; FAX (617) 497-1632.
To join, please send a check and the following information to:
League for Programming Freedom
1 Kendall Square #143
P.O.Box 9171
Cambridge, Massachusetts 02139
(Outside the US, please send a check in US dollars on a bank
having a US correspondent bank, to save us check cashing fees.)
Your name:
The address for League mailings, a few each year; please indicate
whether it is your home address or your work address:
The company you work for, and your position:
Your phone numbers (home, work or both):
Your email address, so we can contact you for demonstrations or for
writing letters. (If you don't want us to contact you for these
things, please say so, but please give us your email address anyway
so we can save paper and postage by sending you the newsletter by email.)
Is there anything about you which would enable your endorsement of the
LPF to impress the public? For example, if you are or have been a
professor or an executive, or have written software that has a good
reputation, please tell us.
Would you like to help with LPF activities?
The corporate charter of the League for Programming Freedom states:
The purpose of the corporation is to engage in the following
activities:
1. To determine the existence of, and warn the public about
restrictions and monopolies on classes of computer programs where such
monopolies prevent or restrict the right to develop certain types of
computer programs.
2. To develop countermeasures and initiatives, in the public interest,
effective to block or otherwise prevent or restrain such monopolistic
activities including education, research, publications, public
assembly, legislative testimony, and intervention in court proceedings
involving public interest issues (as a friend of the court).
3. To engage in any business or other activity in service of and
related to the foregoing paragraphs that lawfully may be carried on
by a corporation organized under Chapter 180 of the Massachusetts
General Laws.
The officers and directors of the League will be elected annually by
the members.

144
etc/MH-E-NEWS Normal file
View file

@ -0,0 +1,144 @@
User-visible changes to mh-e in version 5.0 from 4.1.
Note: This being a major release, there are many internal changes.
This document lists only changes to the external interfaces of mh-e.
When upgrading, you must either explicitly reload the new versions of
all mh-e files that are already loaded or restart your Emacs.
mh-e 5.0.1 contains minor changes from mh-e 5.0 to integrate it with
Emacs 19.29.
mh-e 5.0.2 contains additional minor changes to integrate it with
reporter.el (requires reporter.el version 3.1c or later) and Emacs
19.30. The mh-goto-msg function is much faster, which also speeds up
several other operations.
Major Changes and New Features in mh-e
======================================
The emphasis for this release has been on consistency and
documentation. Many documentation strings were enhanced.
Documentation strings were changed to comments for internal functions
and variables.
There is now proper documentation in the form of a 75-page users
manual. The Texinfo source is mh-e.texi; the formatted Info document
is mh-e.info.
There is a new command `mh-update-sequences', which updates MH's
idea of what messages are in the Unseen sequence and what is the current
folder and message. `mh-quit' calls it. While `mh-execute-commands'
has always done this updating as a side effect, the new function is
faster.
The MH profile entry "Inbox:" is supported.
If the show-buffer is modified, the user is queried before mh-e
reuses the buffer to show a different message. This buffer is also
auto-saved and backed up correctly.
`mh-store-buffer' is significantly more robust. It now handles
messages created by a wide variety of packaging software. The status
message for `uudecode' includes the name of the file created. An error
is signaled if the subprocess exits with a non-zero status.
`mh-search-folder' behaves predictably, adding messages found to the
`search' sequence. It correctly handles the case of no messages found.
`mh-burst-digest' (`M-b') now only rescans the part of the folder
affected by the burst. It is now much faster in a large folder.
New mh-e Hooks and Customization Variables
==========================================
`mh-default-folder-for-message-function': new name for the old
`mh-msg-folder-hook', which wasn't a hook. The old name was confusing,
leading people to think they could use `add-hook' with it, when
actually `setq' is the correct way.
`mh-sortm-args': When this variable is used has changed. Now
`mh-sortm-args' is passed if there IS a prefix argument to
`mh-sort-folder'. The assumption is that for arguments you normally
want, you would specify them in an MH profile entry.
`mh-mhn-args': new hook, a list of additional arguments to pass to
the `mhn' program if `mh-edit-mhn' is given a prefix argument.
`mh-edit-mhn-hook': new hook called by `mh-edit-mhn', the function
that formats MIME messages.
`mh-folder-list-change-hook': new hook, called whenever the cached
list of folders, `mh-folder-list', is changed.
`mh-find-path-hook': new hook, called when entering mh-e.
`mh-repl-formfile': new variable, used to change the format file
used by `mh-reply' from the default of "replcomps".
New variables to customize the scan format and notating:
`mh-note-deleted', `mh-note-refiled', `mh-note-seq', `mh-note-cur',
`mh-note-copied', `mh-note-printed'.
Key Binding Changes in mh-e
===========================
`RET' runs `mh-show' for consistency with the Finder and Info. The
old binding `.' still works, but `RET' is now the standard binding.
`M-<' now runs `mh-first-msg' for consistency with `M->', which runs
`mh-last-msg'.
`C-c C-f C-d' in MH-Letter mode moves to a Dcc: header field.
`C-c C-f C-r' in MH-Letter mode moves to a From: header field.
`g' is now the standard binding for `mh-goto-msg'. The old binding
`j' still works.
Other Improvements and Changes to mh-e
======================================
`mh-lpr-command-format' no longer passes the "-p" argument to `lpr'
by default. The mail header typically has the date anyway.
When prompting for a sequence name, if no sequences have been used
yet, mh-e will offer the first sequence the current message is in.
The patterns of more mailers are recognized by
`mh-extract-rejected-mail'.
`mh-insert-prefix-string' no longer wraps the call to the
`mail-citation-hook' function in a `save-excursion' so the hook writer
can choose whether to leave point at the beginning or the end of the
yanked text.
`mh-write-msg-to-file': The prompt now refers to "message" or
"message body" depending on which will be written. (This is controlled
by a prefix argument.) The file defaults to the last-used file instead
of supplying only the directory name.
mh-e uses message ranges when running MH commands. Thus "rmm 1 2 3
4 6" is now "rmm 1-4 6". This change makes it less likely to overflow
system argument list limits, and it might be faster, too.
Bug Fixes to mh-e
=================
mh-e's idea of the unseen sequence now stays in sync with MH's
better.
Functions that are supposed to find fields in the message header no
longer look in the message body.
mh-e would sometimes fail to remove the "%" from a scan line when the
message was removed from a sequence if the message was also in the
Previous sequence.
The variable `mh-inc-prog' is now correctly used in all places.
`mh-pipe-msg' runs the process in the correct directory.
A partially scanned folder will no longer lose the "/select"
annotation when you execute marked deletes and refiles with `x'.

194
etc/MH-E-ONEWS Normal file
View file

@ -0,0 +1,194 @@
This file is automatically generated from news-mh-e.txinfo. Do not edit.
User-visible changes to mh-e in version 4.0 from 3.8
Note: there are many internal changes to mh-e in this release. If you
have the previous version loaded into your Emacs, you will probably not
be able to load this version on top of it.
New Features in mh-e
====================
Background folder collection. The first time you are prompted for a
folder, you must wait while mh-e collects the names of all existing
folders. Now however, if you abort, collecting will continue in the
background, and you can do something else in Emacs until the collection
completes. Normally, mh-e will begin collecting folders names in the
background when you first load it; you can disable this feature by
setting `mh-auto-folder-collect' to nil.
There is support for composing MIME messages using the `mhn' program
from MH 6.8. See the documentation string for mh-edit-mhn. (While
composing a letter, type `C-h k C-c C-e'.) See also mhn(1). There is
as yet no support for reading MIME messages.
`mh-show', typically on `.', repositions to the start of the message if
the message is already visible. It used to do nothing in this case.
The function `mh-unshar-msg' is renamed `mh-store-msg'. It now does
uudecoding, too. Someday it should do MIME. It remembers the last
directory you used and offers it as the default for next time.
New function `mh-header-display', on `,', displays the message with all
headers, including those normally not displayed. Type `.' to display
the message normally again.
New function `mh-list-sequences' lists the sequences in use in the
current folder.
New function `mh-version' displays version information about MH and
mh-e. Please use the output in bug reports.
`mh-quit' now burys the folder buffer and show buffer.
New mh-e hooks and customization variables
==========================================
`mh-pick-mode-hook': new hook called by new mode `mh-pick-mode'. The
pick buffer didn't used to have its own mode. Another advantage of
`mh-pick-mode' is that `C-h m' works in the pick buffer.
`mail-citation-hook': new variable for supercite.
`mh-refile-msg-hook': new hook called by `mh-refile-msg' (and
`mh-refile-or-write-again' when refiling).
`mh-msg-folder-hook': new hook used by `mh-refile-msg' and `mh-to-fcc'
to provide a default folder for user prompt.
`mh-show-hook': new hook called by `mh-show'.
`mh-delete-msg-hook': new hook called by `mh-delete-msg'.
`mh-show-mode-hook': new hook called by new mode `mh-show-mode' for
`show-' buffers.
`mh-comp-formfile': new variable so can customize `components' file.
`mh-sortm-args': new variable, a list of extra arguments to be passed to
sortm by `mh-sort-folder'. Give an argument to `mh-sort-folder' to
suppress this behavior.
`mh-send-prog': new variable so can customize name of `send' program in
case of name conflicts.
`mh-scan-prog': new variable so can customize name of `scan' program to
generate custom effects.
`mh-inc-prog': new variable so can customize name of `inc' program to do
fancy management of incoming messages.
`mh-forwarded-letter-subject': new function used by `mh-forward' to
compute the Subject line of the new message. It is a small function
which can be replaced by the user for customization. Uses the new
variable `mh-forward-subject-format', which allows some simple
customizations without rewriting even `mh-forwarded-letter-subject'.
`mh-new-draft-cleaned-headers': new variable, header lines removed by
`mh-edit-again' and `mh-extract-rejected-mail' before offering a message
as a new draft.
`mh-signature-file-name': new variable used by `mh-insert-signature' to
so can customize name of the file to insert.
`mh-read-address': new function called to read all To: and Cc:
addresses.
`mh-msg-folder-hook': new hook used by `mh-refile-msg' and `mh-to-fcc'
to provide a default folder for user prompt.
Key binding changes in mh-e
===========================
`,' runs new function `mh-header-display'. It is like `.' but it
displays *all* the headers.
`M-#' runs the new function `mh-delete-seq'. One used to have to type
`C-u M-%' to delete a sequence.
`<' no longer does `mh-first-msg', but `M->' now does `mh-last-msg'.
This allows first and last to be consistent (`>' was taken) and is more
likely to be discovered by chance anyway.
`M-d' runs `mh-redistribute', `r' runs `mh-reply' (on the theory that
the more commonly used function should be easier to type, and the
obscure action of redistributing can be harder to type).
`M-o' changed to `C-o' (`mh-write-msg-to-file'). It was interfering
with arrow keys for some people.
`M-n' now runs `mh-store-msg' (formerly `mh-unshar-msg').
`b' no longer runs `mh-quit'; use `q' instead. `b' may be used in a
future version for something else.
Minor improvements to mh-e
==========================
The mh-e code is now divided into multiple Emacs Lisp files, so it
starts up faster because Emacs doesn't have to load all of it at once.
(This change also makes it easier for the maintainer to manage things.)
When searching for the directory containing the MH programs, search the
user's PATH in addition to the built-in directories, to increase the
chance of finding the MH programs.
The subject for a forwarded message no longer has ugly square brackets
around it.
The name of the folder is no longer appears twice in the show buffer
mode line.
When typing a folder name in the minibuffer, parent folders complete to
the trailing slash (/), for easier typing of subfolders.
The folder buffer mode name changed from `mh-e scan' or `mh-e show' to
`MH-Folder', which makes the hook name easier to guess. Added
`mh-showing' to `minor-mode-alist' so there is still an indication in
the mode line of whether messages will be shown automatically.
`mh-rename-seq' does completion on the old sequence name.
If called by a user who has never used MH on this system before, mh-e
runs the MH program `install-mh' to get them set up.
Undo history for previous messages is not kept to avoid wasting memory.
The internal temp buffer used by mh-e has `buffer-offer-save' explicitly
nil. This change benefits people who change the `buffer-offer-save'
default.
Bug fixes to mh-e
=================
`mh-to-field': don't bomb if no To: field.
`mh-get-new-mail': restore annotations, e.g., cur, even if no new mail.
`mh-rename-seq': verify that the new seq name was accepted by `mark'
before updating state.
`mh-internal-seq': the Previous sequence is not notated, since it would
notate everything scanned.
`mh-read-draft': don't call `find-file-noselect' so an `auto-mode-alist'
doesn't trigger `mh-letter-mode-hook' twice. Faster, too.
`mh-show': If user moves onto a message that doesn't exist, don't leave
the cursor in the show pane.
`mh-delete-scan-msgs': use `equal', not `=', on the result of
`mh-get-msg-num', since it may be nil.
`mh-get-field': do anchored search so searching for `reply-to:' doesn't
find `in-reply-to:'.
`mh-widen': do nothing if not narrowed.
`mh-clean-message-header': find end of headers even if no body.

6740
etc/NEWS Normal file

File diff suppressed because it is too large Load diff

5710
etc/ONEWS Normal file

File diff suppressed because it is too large Load diff

1691
etc/OONEWS Normal file

File diff suppressed because it is too large Load diff

1609
etc/OOONEWS Normal file

File diff suppressed because it is too large Load diff

1348
etc/OOOONEWS Normal file

File diff suppressed because it is too large Load diff

1165
etc/OOOOONEWS Normal file

File diff suppressed because it is too large Load diff

1049
etc/OTHER.EMACSES Normal file

File diff suppressed because it is too large Load diff

2244
etc/PROBLEMS Normal file

File diff suppressed because it is too large Load diff

210
etc/SUN-SUPPORT Normal file
View file

@ -0,0 +1,210 @@
NOTE: the Free Software Foundation agreed to put this file, and the
programs it describes, into the Emacs distribution ONLY on the
condition that we would not lift a finger to maintain them! We are
willing to *pass along* support for Sun windows, but we are not
willing to let it distract us from what we are trying to do. If you
have complaints or suggestions about Sun windows support, send them to
peck@sun.com, who is the maintainer.
The interface between GNU Emacs and Sun windows consists of the program
etc/emacstool, the Lisp programs lisp/sun-*.el and lisp/term/sun.el,
and the C source file src/sunfns.c. It is documented with a man page,
etc/emacstool.1.
To enable use of these files and programs, define the configuration
switch HAVE_SUN_WINDOWS in src/config.h before compiling Emacs.
The definition of HAVE_SUN_WINDOWS must precede the #include m-sun3.h
or #include m-sun4.h.
If you must change PURESIZE, do so after the #include m-sun3.h
This software is based on SunView for Sun UNIX 4.2 Release 3.2,
and will not work "as is" on previous releases, eg 3.0 or 3.1.
Using Emacstool with GNU Emacs:
The GNU Emacs files lisp/term/sun.el, lisp/sun-mouse.el,
lisp/sun-fns.el, and src/sunfns.c provide emacs support for the
Emacstool and function keys. If your terminal type is SUN (that is,
if your environment variable TERM is set to SUN), then Emacs will
automatically load the file lisp/term/sun.el. This, in turn, will
ensure that sun-mouse.el is autoloaded when any mouse events are
detected. It is suggested that sun-mouse and sun-fns be
included in your site-init.el file, so that they will always be loaded
when running on a Sun workstation. [Increase PURESIZE to 154000].
Support for the Sun function keys requires disconnecting the standard
Emacs command Meta-[. Therefore, the function keys are supported only
if you do (setq sun-esc-bracket t) in your .emacs file.
The file src/sunfns.c defines several useful functions for emacs on
the Sun. Among these are procedures to pop-up SunView menus, put and
get from the SunView selection [STUFF] buffer, and a procedure for
changing the cursor icon. If you want to define cursor icons, try
using the functions in lisp/sun-cursors.el.
The file lisp/sun-mouse.el includes a mass of software for defining
bindings for mouse events. Any function can be called or any form
evaluated as a result of a mouse event. If you want a pop-up menu,
your function can call sun-menu-evaluate. This will bring up a
SunView walking menu of your choice.
Use the macro (defmenu menu-name &rest menu-items) to define menu
objects. Each menu item is a cons of ("string" . VALUE), VALUE is
evaluated when the string item is picked. If VALUE is a menu, then a
pullright item is created.
This version also includes support for copying to and from the
sun-windows "stuff" selection. The keyboard bindings defined in
lisp/sun-fns.el let you move the current region to the "STUFF"
selection and vice versa. Just set point with the left button, set
mark with the middle button, (the region is automatically copied to
"STUFF") then switch to a shelltool, and "Stuff" will work. Going the
other way, the main right button menu contains a "Stuff Selection"
command that works just like in shelltool. [The Get and Put function
keys are also assigned to these functions, so you don't need the mouse
or even emacstool to make this work.]
Until someone write code to read the textsw "Selection Shelf", it is
not possible to copy directly from a textsw to emacs, you must go through
the textsw "STUFF" selection.
The Scroll-bar region is not a SunView scrollbar. It really should
be called the "Right-Margin" region. The scroll bar region is basically
the rightmost five columns (see documentation on variable scrollbar-width).
Mouse hits in this region can have special bindings, currently those binding
effect scrolling of the window, and so are referred to as the "Scroll-bar"
region.
For information on what mouse bindings are in effect, use the command
M-x Describe-mouse-bindings, or the quick pop-up menu item "Mouse-Help".
GNU Emacs EXAMPLES:
See definitions in lisp/sun-fns.el for examples.
You can redefine the cursor that is displayed in the emacs window.
On initialization, it is set to a right arrow. See lisp/sun-cursors.el
for additional cursors, how to define them, how to edit them.
BUGS:
It takes a few milliseconds to create a menu before it pops up.
Someone who understands the GNU Garbage Collector might see if it
is possible for defmenu to create a SunView menu struct that does
not get destroyed by Garbage Collection.
An outline of the files used to support Sun Windows and the mouse.
etc/SUN-SUPPORT.
This document.
etc/emacstool.1:
Added: an nroff'able man page for emacstool.
etc/emacstool.c:
Encodes all the function keys internally, and passes non-window
system arguments to emacs.
etc/emacs.icon:
The "Kitchen Sink" GNU Emacs icon.
src/sunfns.c:
This contains the auxiliary functions that allow elisp code to interact
with the sunwindows, selection, and menu functions.
lisp/sun-mouse.el:
Defines the lisp function which is called when a mouse hit is found
in the input queue. This handler decodes the mouse hit via a keymap-like
structure sensitive to a particular window and where in the window the
hit occurred (text-region, right-margin, mode-line). Three variables
are bound (*mouse-window* *mouse-x* *mouse-y*) and the selected function
is called.
See documentation on "define-mouse" or look at lisp/sun-fns.el
to see how this is done.
Defines two functions to pass between region and sun-selection
Defines functions for interfacing with the Menu.
During menu evaluation, the variables *menu-window* *menu-x* *menu-y* are bound.
lisp/sun-fns.el
The definition of the default menu and mouse function bindings.
lisp/sun-cursors.el
Defines a number of alternate cursors, and an editor for them.
The editor is also a demonstration of mouse/menu utilization.
lisp/term/sun.el
Sets up the keymap to make the sun function keys do useful things.
Also includes the setup/initialization code for running under emacstool,
which makes "\C-Z" just close the emacstool window (-WI emacs.icon).
Jeff Peck, Sun Microsystems, Inc <peck@sun.com>
Subject: Making multi-line scrolling really work:
In your .defaults file, include the line:
/Tty/Retained "Yes"
That way, the terminal emulator can do text moves using bitblt,
instead of repaint.
If that's not enough for you, then tell unix and emacs that
the sun terminal supports multi-line and multi-character insert/delete.
Add this patch to your /etc/termcap file:
*** /etc/termcap.~1~ Mon Sep 15 12:34:23 1986
--- /etc/termcap Mon Feb 9 17:34:08 1987
***************
*** 32,39 ****
--- 32,40 ----
Mu|sun|Sun Microsystems Workstation console:\
:am:bs:km:mi:ms:pt:li#34:co#80:cl=^L:cm=\E[%i%d;%dH:\
:ce=\E[K:cd=\E[J:so=\E[7m:se=\E[m:rs=\E[s:\
:al=\E[L:dl=\E[M:im=:ei=:ic=\E[@:dc=\E[P:\
+ :AL=\E[%dL:DL=\E[%dM:IC=\E[%d@:DC=\E[%dP:\
:up=\E[A:nd=\E[C:ku=\E[A:kd=\E[B:kr=\E[C:kl=\E[D:\
:k1=\E[224z:k2=\E[225z:k3=\E[226z:k4=\E[227z:k5=\E[228z:\
:k6=\E[229z:k7=\E[230z:k8=\E[231z:k9=\E[232z:
M-|sun-nic|sune|Sun Microsystems Workstation console without insert character:\
If you don't have the program "patch", just add the line:
:AL=\E[%dL:DL=\E[%dM:IC=\E[%d@:DC=\E[%dP:\
casetek@crvax.sri.com says:
Those of you using GNU Emacs on Sun workstations under
3.2 may be interested in reducing memory utilization in
the emacstool via the Sun toolmerge facility. The technique
is described in the Release 3.2 Manual starting on page
71. The following is a summary of how it would apply
to merging emacstool into the basetools.
1) Change the main procedure declaration in emacstool.c to:
#ifdef SUN_TOOLMERGE
emacstool_main (argc, argv);
#else
main (argc, argv)
#endif
This will allow creation of either standard or toolmerge
versions.
2) Copy emacstool.o into directory /usr/src/sun/suntool.
3) make CFLAGS="-g -DSUN_TOOLMERGE" emacstool.o
4) Add the following line to basetools.h
"emacstool",emacstool_main,
5) Add the following line to toolmerge.c.
extern emacstool_main();
6) make basetools MOREOBJS="emacstool.o"
7) make install_bins
To invoke the toolmerged version, you must exit suntools and
re-start it. Make sure that /usr/bin occurs before the directory
in which you installed the standard (non-toolmerged) version.

229
etc/TERMS Normal file
View file

@ -0,0 +1,229 @@
This file describes what you must or might want to do to termcap entries
to make terminals work properly and efficiently with Emacs. Information
on likely problems with specific types of terminals appears at the end
of the file.
*** What you want in a terminal ***
Vital
1. Easy to compute suitable padding for.
2. Never ever sends ^S/^Q unless you type them, at least in one mode.
Nice for speed
1. Supports insert/delete of multiple lines in one command.
2. Same for multiple characters, though doing them one by
one is usually fast enough except on emulators running on
machines with bitmap screens.
Nice for usability
1. Considerably more than 24 lines.
2. Meta key (shift-like key that controls the 0200 bit
in every character you type).
*** New termcap strings ***
Emacs supports certain termcap strings that are not described in the
4.2 manual but appear to be standard in system V. The one exception
is `cS', which I invented.
`AL' insert several lines. Takes one parameter, the number of
lines to be inserted. You specify how to send this parameter
using a %-construct, just like the cursor positions in the `cm'
string.
`DL' delete several lines. One parameter.
`IC' insert several characters. One parameter.
`DC' delete several characters. One parameter.
`rp' repeat a character. Takes two parameters, the character
to be repeated and the number of times to repeat it.
Most likely you will use `%.' for sending the character
to be repeated. Emacs interprets a padding spec with a *
as giving the amount of padding per repetition.
WARNING: Many terminals have a command to repeat the
*last character output* N times. This means that the character
will appear N+1 times in a row when the command argument is N.
However, the `rp' string's parameter is the total number of
times wanted, not one less. Therefore, such repeat commands
may be used in an `rp' string only if you use Emacs's special
termcap operator `%a-c\001' to subtract 1 from the repeat count
before substituting it into the string. It is probably safe
to use this even though the Unix termcap does not accept it
because programs other than Emacs probably won't look for `rp'
anyway.
`cs' set scroll region. Takes two parameters, the vertical
positions of the first line to include in the scroll region
and the last line to include in the scroll region.
Both parameters are origin-zero. The effect of this
should be to cause a following insert-line or delete-line
not to move lines below the bottom of the scroll region.
This is not the same convention that Emacs version 16 used.
That is because I was led astray by unclear documentation
of the meaning of %i in termcap strings. Since the termcap
documentation for `cs' is also unclear, I had to deduce the
correct parameter conventions from what would make the VT-100's
`cs' string work properly. From an incorrect assumption about
%i, I reached an incorrect conclusion about `cs', but the result
worked correctly on the VT100 and ANSII terminals. In Emacs
version 17, both `cs' and %i work correctly.
The version 16 convention was to pass, for the second parameter,
the line number of the first line beyond the end of the
scroll region.
`cS' set scroll region. Differs from `cs' in taking parameters
differently. There are four parameters:
1. Total number of lines on the screen.
2. Number of lines above desired scroll region.
3. Number of lines below (outside of) desired scroll region.
4. Total number of lines on the screen, like #1.
This is because an Ambassador needs the parameters like this.
`cr', `do', `le'
Emacs will not attempt to use ^M, ^J or ^H for cursor motion
unless these capabilities are present and say to use those
characters.
`km' Says the terminal has a Meta key.
Defining these strings is important for getting maximum performance
from your terminal.
Make sure that the `ti' string sets all modes needed for editing
in Emacs. For example, if your terminal has a mode that controls
wrap at the end of the line, you must decide whether to specify
the `am' flag in the termcap entry; whichever you decide, the `ti'
string should contain commands to set the mode that way.
(Emacs also sends the `vs' string after the `ti' string.
You can put the mode-setting commands in either one of them.)
*** Specific Terminal Types ***
Watch out for termcap entries for Ann Arbor Ambassadors that
give too little padding for clear-screen. 7.2 msec per line is right.
These are the strings whose padding you probably should change:
:al=1*\E[L:dl=1*\E[M:cd=7.2*\E[J:cl=7.2*\E[H\E[J:
I have sometimes seen `\E[2J' at the front of the `ti' string;
this is a clear-screen, very slow, and it can cause you to get
Control-s sent by the terminal at startup. I recommend removing
the `\E[2J' from the `ti' string.
The `ti' or `vs' strings also usually need stuff added to them, such as
\E[>33;52;54h\E[>30;37;38;39l
You might want to add the following to the `te' or `ve' strings:
\E[>52l\E[>37h
The following additional capabilities will improve performance:
:AL=1*\E[%dL:DL=1*\E[%dM:IC=4\E[%d@:DC=4\E[%dP:rp=1*%.\E[%a-c\001%db:
If you find that the Meta key does not work, make sure that
:km:
is present in the termcap entry.
Watch out for termcap entries for VT100's that fail to specify
the `sf' string, or that omit the padding needed for the `sf' and `sr'
strings (2msec per line affected). What you need is
:sf=2*^J:sr=2*\EM:cs=\E[%i%d;%dr:
The Concept-100 and Concept-108 have many modes that `ti' strings
often fail to initialize. If you have problems on one of these
terminals, that is probably the place to fix them. These terminals
can support an `rp' string.
Watch out on HP terminals for problems with standout disappearing on
part of the mode line. These problems are due to the absence of
:sg#0: which some HP terminals need.
The vi55 is said to require `ip=2'.
The Sun console should have these capabilities for good performance.
:AL=\E[%dL:DL=\E[%dM:IC=\E[%d@:DC=\E[%dP:
The vt220 needs to be set to vt220 mode, 7 bit, space parity
in order to work fully with TERM=vt220.
If you are using a LAT terminal concentrator, you need to issue these
commands to turn off flow control:
set port flow control disable
define port flow control disable
On System V, in the terminfo database, various terminals may have
the `xt' flag that should not have it. `xt' should be present only
for the Teleray 1061 or equivalent terminal.
In particular, System V for the 386 often has `xt' for terminal type
AT386 or AT386-M, which is used for the console. You should delete
this flag. Here is how:
You can get a copy of the terminfo "source" for at386 using the
command: `infocmp at386 >at386.tic'. Edit the file at386.tic and remove
the `xt' flag. Then compile the new entry with: `tic at386.tic'.
It is also reported that these terminal types sometimes have the wrong
reverse-scroll string. It should be \E[T, but sometimes is given as \E[S.
Here is what watserv1!maytag!focsys!larry recommends for these terminals:
# This copy of the terminfo description has been fixed.
# The suggestions came from a number of usenet postings.
#
# Intel AT/386 for color card with monochrome display
#
AT386-M|at386-m|386AT-M|386at-m|at/386 console,
am, bw, eo, xon,
cols#80, lines#25,
acsc=``a1fxgqh0jYk?lZm@nEooppqDrrsstCu4vAwBx3yyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z,
clear=\E[2J\E[H,
cr=\r, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB,
cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%02d;%p2%02dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[1M,
ech=\E[%p1%dX,ed=\E[J, el=\E[K, el1=\E[1K\E[X, flash=^G, home=\E[H,
hpa=\E[%i%p1%dG, ich=\E[%p1%d@, ich1=\E[1@, il=\E[%p1%dL, il1=\E[1L,
ind=\E[S, indn=\E[%p1%dS, invis=\E[9m,
is2=\E[0;10;38m, kbs=\b, kcbt=^], kclr=\E[2J,
kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kdch1=\E[P, kend=\E[Y, kf1=\EOP, kf10=\EOY, kf11=\EOZ,
kf12=\EOA, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOT,
kf6=\EOU, kf7=\EOV, kf8=\EOW, kf9=\EOX, khome=\E[H,
kich1=\E[@, knp=\E[U, kpp=\E[V, krmir=\E0, rev=\E[7m, ri=\E[T,
rin=\E[%p1%dT, rmacs=\E[10m, rmso=\E[m, rmul=\E[m,
sgr=\E[10m\E[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p4%t;5%;%?%p6%t;1%;%?%p9%t;12%;%?%p7%t;9%;m,
sgr0=\E[0;10m, smacs=\E[12m, smso=\E[7m, smul=\E[4m,
#
# AT&T 386 color console
#
AT386|at386|386AT|386at|at/386 console,
colors#8, ncv#3, pairs#64,
is2=\E[0;10;39m,
op=\E[0m,
setb=\E[%?%p1%{0}%=%t40m
%e%p1%{1}%=%t44m
%e%p1%{2}%=%t42m
%e%p1%{3}%=%t46m
%e%p1%{4}%=%t41m
%e%p1%{5}%=%t45m
%e%p1%{6}%=%t43m
%e%p1%{7}%=%t47m%;,
setf=\E[%?%p1%{0}%=%t30m
%e%p1%{1}%=%t34m
%e%p1%{2}%=%t32m
%e%p1%{3}%=%t36m
%e%p1%{4}%=%t31m
%e%p1%{5}%=%t35m
%e%p1%{6}%=%t33m
%e%p1%{6}%=%t33m
%e%p1%{7}%=%t37m%;,
use=at386-m,
#
# Color console version that supports underline but maps blue
# foreground color to cyan.
#
AT386-UL|at386-ul|386AT-UL|386at-ul|at/386 console,
is2=\E[0;10;38m,
use=at386,

48
etc/TODO Normal file
View file

@ -0,0 +1,48 @@
* Implement a clean way to use different major modes for
different parts of a buffer.
* Give start-process the ability to direct standard-error
output to a different filter.
* Make compile.el record the markers that point to error loci
on text properties in the error message lines.
* Make desktop.el save the "frame configuration" of Emacs (in some
useful sense).
* Make movemail work with IMAP.
* Add ANSI C prototype forward declarations to the source files,
so that even the functions used within one file have prototypes.
* Replace finder.el with something that generates an Info file
which gives the same information through a menu structure.
* Implement a variant of uncompress.el or jka-compr.el that
works with GNU Privacy Guard for encryption.
* Save undo information in files, and reload it when needed
for undoing.
* modify comint.el so that input appears in a special font.
I can add a simple Emacs feature to help.
* Implement other text formatting properties.
** Footnotes that can appear either in place
or at the end of the page.
** text property that says "don't break line in middle of this".
Don't break the line between two characters that have the
same value of this property.
** Discretionary hyphens that disappear at end of line.
* Implement use of mmap to allocate buffers, when mmap exists.
* Change the Windows NT menu code
so that it handles the deep_p argument and avoids
regenerating the whole menu bar menu tree except
when the user tries to use the menubar.
This requires the RIT to forward the WM_INITMENU message to
the main thread, and not return from that message until the main
thread has processed the menu_bar_activate_event and regenerated
the whole menu bar. In the mean time, it should process other messages.

1013
etc/TUTORIAL.cs Normal file

File diff suppressed because it is too large Load diff

1443
etc/TUTORIAL.de Normal file

File diff suppressed because it is too large Load diff

971
etc/TUTORIAL.ja Normal file
View file

@ -0,0 +1,971 @@
Copyright (c) 1985 Free Software Foundation, Inc; $B%U%!%$%k:G8e$r;2>H$N$3$H(B
$B$"$J$?$,8=:_8+$F$$$k$N$O(B Emacs $BF~Lg%,%$%I$G$9!#(B
Emacs $B$N%3%^%s%I$rF~NO$9$k$K$O!"0lHL$K%3%s%H%m!<%k%-!<!J%-!<%H%C%W$K(B
CTRL $B$H$+(B CTL $B$H=q$$$F$"$k!K$d%a%?%-!<!J%-!<%H%C%W$K(B META $B$H$+(B ALT $B$H(B
$B=q$$$F$"$k!K$r;H$$$^$9!#$=$3$G!"(BCONTROL $B$H$+(B META $B$H$+=q$/Be$o$j$K!"<!(B
$B$N$h$&$J5-9f$r;H$&$3$H$K$7$^$9!#(B
C-<$BJ8;z(B> $B%3%s%H%m!<%k%-!<$r2!$7$?$^$^!"(B<$BJ8;z(B>$B%-!<$r2!$7$^$9!#Nc$($P!"(B
C-f $B$O%3%s%H%m!<%k%-!<$r2!$7$J$,$i(B f $B$N%-!<$r2!$9$3$H$G$9!#(B
M-<$BJ8;z(B> $B%a%?%-!<$r2!$7$?$^$^!"(B<$BJ8;z(B>$B%-!<$r2!$7$^$9!#$b$7%a%?%-!<$,$J(B
$B$$>l9g$O!"%(%9%1!<%W%-!<$r2!$7$F$+$iN%$7!"$=$l$+$i(B<$BJ8;z(B>$B%-!<(B
$B$r2!$7$^$9!#0J9_%(%9%1!<%W%-!<$N$3$H$r(B <ESC> $B$H=q$-$^$9!#(B
$B!*=EMW!*(B: Emacs$B$r=*N;$9$k$K$O!"(BC-x C-c $B$r%?%$%W$7$^$9!#(B
">>" $B$G;O$^$k9T$O!"$=$N;~2?$r$9$Y$-$+$r;X<($7$F$$$^$9!#Nc$($P!"(B
<<Blank lines inserted here by startup of help-with-tutorial>>
>> $B$G$O(B C-v $B!J<!$N2hLL$r8+$k!K$r%?%$%W$7$F<!$N2hLL$K?J$s$G2<$5$$!#(B
$B!J$5$"!"$d$C$F$_$^$7$g$&!#%3%s%H%m!<%k%-!<$r2!$7$J$,$i(B v $B$G$9!K(B
$B0J9_!"0l2hLL$rFI$_=*$($k$?$S$KF1MM$K$7$F<!$N2hLL$KFI$_?J$s$G2<$5$$!#(B
$BA0$N2hLL$H<!$N2hLL$H$G$O!"I=<($5$l$kFbMF$K2?9T$+$N=E$J$j$,$"$j$^$9!#$3(B
$B$l$O!"I=<($5$l$F$$$kFbMF$,O"B3$7$F$$$k$3$H$,$9$0H=$k$h$&$K$9$k$?$a$G$9!#(B
$B$^$:$O!"%U%!%$%k$NCf$r0\F0$7$F9T$/J}K!$rCN$kI,MW$,$"$j$^$9!#(BC-v $B$K$h$C(B
$B$F@h$K?J$`$3$H$O$b$&H=$j$^$7$?!#85$KLa$k$K$O!"(BM-v $B!J%a%?%-!<$r2!$7$J$,(B
$B$i(B v$B!"$b$7$/$O(B <ESC> $B$r2!$7$FN%$7$F(B v$B!K$G$9!#(B
>> M-v $B$H(B C-v $B$r;H$C$F!"A08e$K0\F0$9$k$3$H$r2?2s$+;n$7$F2<$5$$!#(B
$B!v$3$3$^$G$NMWLs(B
================
$B%U%!%$%k$r2hLLKh$K8+$F9T$/$K$O!"<!$N%3%^%s%I$r;H$$$^$9!#(B
C-v $B<!$N2hLL$K?J$`(B
M-v $BA0$N2hLL$KLa$k(B
C-l $B2hLL$r=q$-D>$9!#$3$N$H$-!"%+!<%=%k$N$"$k9T$,2hLL$NCf1{$K(B
$B$/$k$h$&$K$9$k!#!J(BC-1 $B$8$c$J$/$C$F(B C-L $B$G$9$h!*!K(B
>> $B%+!<%=%k$r8+$D$1!"$=$N6a$/$K$I$s$JJ8>O$,=q$+$l$F$$$k$+$r3P$(!"(B
$B$=$l$+$i(B C-l $B$r%?%$%W$7$F2<$5$$!#(B
$B%+!<%=%k$,$I$3$K0\F0$7$?$+!"$=$N6a$/$N%F%-%9%H$O$I$&$J$C$?$+$rD4$Y(B
$B$F$_$^$7$g$&!#(B
$B!v4pK\E*$J%+!<%=%k$N@)8f(B
========================
$B2hLLKh$N0\F0$O$G$-$k$h$&$K$J$j$^$7$?!#:#EY$O!"2hLL$NCf$G!"FCDj$N>l=j$K(B
$B0\F0$9$k$?$a$NJ}K!$r21$($^$7$g$&!#(B
$B$3$l$K$O$$$/$D$+$N$d$jJ}$,$"$j$^$9!#0lHV4pK\E*$JJ}K!$O(B C-p, C-b, C-f,
C-n $B$r;H$&$3$H$G$9!#$3$l$i$O$=$l$>$l%+!<%=%k$rA0$N9T!"A0$NJ8;z!"<!$NJ8(B
$B;z!"<!$N9T$K0\F0$5$;$k$^$9!#?^$G=q$1$P!"(B
$BA0$N9T!$(BC-p
:
:
$BA0$NJ8;z!$(BC-b .... $B8=:_$N%+!<%=%k0LCV(B .... $B<!$NJ8;z!$(BC-f
:
:
$B<!$N9T!$(BC-n
>> C-n $B$H(B C-p $B$G%+!<%=%k$r>e?^$N??Cf$N9T$KF0$+$7$F2<$5$$!#$=$l$+$i(B C-l
$B$r%?%$%W$7$F?^$NA4BN$,2hLLCf1{$K$/$k$h$&$K$7$F$_$^$7$g$&!#(B
$B$3$l$i$O$N%3%^%s%I$O$=$l$>$l!"(BPrevious, Next, Backward, Forward $B$NF,J8(B
$B;z$K$J$C$F$$$k$N$G!"21$($d$9$$$G$7$g$&!#$3$l$i$O!"4pK\E*$J%+!<%=%k0\F0(B
$B%3%^%s%I$G$"$j!"$$$D$G$b;H$&$b$N$G$9!#:#$3$3$G3P$($F2<$5$$!#(B
>> C-n $B$r2?2s$+%?%$%W$7!"!J:#!"$"$J$?$,FI$s$G$$$k!K$3$N9T$^$G%+!<%=%k(B
$B$r0\F0$5$;$^$7$g$&!#(B
>> C-f $B$r;H$C$F9T$NCf$[$I$K0\F0$7!"(BC-p $B$G2?9T$+>e$K0\F0$5$;$^$7$g$&!#(B
$B%+!<%=%k$N0LCV$NJQ2=$KCm0U$7$F2<$5$$!#(B
$B3F9T$N:G8e$K$O!JL\$K$O8+$($J$$!K(B Newline $BJ8;z$,$"$j$^$9!#$3$l$O<!$N9T(B
$B$H$N6h@Z$j$r<($9$?$a$G$9!#%U%!%$%k$N:G8e$b(B Newline $B$rIU$1$k$Y$-$G$9(B
$B!J$b$C$H$b(B Emacs $B$O$=$l$r6/@)$O$7$^$;$s$,!K!#(B
>> $B9T$N@hF,$G(B C-b $B$r%?%$%W$7$F$_$^$7$g$&!#%+!<%=%k$OA0$N9T$NKvHx$K0\F0(B
$B$9$k$O$:$G$9!#$3$l$O(B C-b $B$,A0$N(B Newline $BJ8;z$r1[$($FLa$C$?$+$i$G$9!#(B
$BF1MM$K(B C-f $B$O%+!<%=%k$r(B Newline $BJ8;z$r1[$($F<!$K?J$a$k$3$H$,$G$-$^$9!#(B
>> $B$5$i$K$b$&>/$7(B C-b $B$r%?%$%W$7$F%+!<%=%k0\F0$N46$8$rGD$s$G2<$5$$!#(B
$B:#EY$O(B C-f $B$G9TKv$^$G?J$s$G2<$5$$!#(B
$B$5$i$K$b$&0lEY(B C-f $B$r%?%$%W$7$F<!$N9T$K?J$s$G2<$5$$!#(B
$B2hLL$N@hF,$dKvHx$r1[$($F%+!<%=%k$r0\F0$5$;$h$&$H$9$k$H!"$=$NJ}8~$K$"$k(B
$BJ8>O$,2hLL$NCf$K0\F0$7$FMh$F$^$9!#$3$l$r!V%9%/%m!<%k!W$H8F$S$^$9!#2hLL(B
$B$,%9%/%m!<%k$9$k$3$H$K$h$C$F!"%+!<%=%k$r0\F0$5$;$F$b!"%+!<%=%k$O>o$K2h(B
$BLLFb$K$"$k$h$&$K$5$l$^$9!#(B
>> C-n $B$r;H$C$F!"%+!<%=%k$r2hLL$N2<C<$h$j2<$K0\F0$5$;$F$_$J$5$$!#2?(B
$B$,5/$3$j$^$7$?$+!)(B
$B0lJ8;zC10L$N0\F0$G$O$^$I$m$C$3$7$$$J$i!"C18lC10L$G0\F0$9$k$3$H$b$G$-$^(B
$B$9!#(BM-f (<ESC> f) $B$G0lC18l@h$X!"(BM-b (<ESC> b) $B$G0lC18lA0$X0\F0$7$^$9!#(B
$BCm0U!'(B $BF|K\8l$K$D$$$F$O!"C18l$N@Z$lL\$rG'<1$9$k$3$H$O$G$-$^$;$s$,!"5?(B
$B;wE*$JJ8@a$rC18l$N@Z$lL\$H$7$F$$$^$9!#(B
>> M-f $B$d(B M-b $B$r2?2s$+;n$7$F$_$^$7$g$&!#(B
$BC18l$NCfDx$K$$$k;~$O!"(BM-f $B$O$=$NC18l$N=*$o$j$^$G?J$_$^$9!#$b$76uGrJ8;z(B
$B$K$$$k;~$K$O(B M-f $B$O<!$NC18l$N=*$o$j$^$G?J$_$^$9!#(BM-b $B$bF1MM$G$9!"J}8~(B
$B$O5U$G$9$,!#(B
>> M-f $B$H(B M-b $B$r(B C-f $B$H(B C-b $B$r8r$($J$,$i?t2s;n$7!"C18l$NCf$KF~$k;~$H!"(B
$BC18l$HC18l$N4V$K$$$k;~$NF0$-$rD4$Y$F2<$5$$!#(B
C-f $B$H(B C-b $B$KBP$9$k!"(BM-f $B$H(B M-b $B$NN`;w@-$KCmL\$7$^$7$g$&!#B?$/$N>l9g!"(B
$B%a%?%-!<$OJ8=q$r9=@.$9$k%f%K%C%H!JC18l!"J8!"CJMn!K$KBP$9$kA`:n$K;H$$!"(B
$B%3%s%H%m!<%k%-!<$O$=$l$h$j$b$b$C$H4pK\E*$JBP>]!JJ8;z$H$+9TEy!K$KBP$9$k(B
$BA`:n$K;H$$$^$9!#(B
$B$3$NN`;w@-$O9T$HJ8$N4X78$K$b$"$j$^$9!#(BC-a $B$H(B C-e $B$O$=$l$>$l9TF,$H9TKv(B
$B$K0\F0$7!"(BM-a $B$H(B M-e $B$O$=$l$>$lJ8F,$HJ8Kv$K0\F0$7$^$9!#(B
>> C-a $B$r#22s!"$=$l$+$i(B C-e $B$r#22s;n$7$^$7$g$&!#(B
M-a $B$r#22s!"$=$l$+$i(B M-e $B$r#22s;n$7$^$7$g$&!#(B
C-a $B$d(B C-e $B$O7+JV$7$F$b$=$l0J>e0\F0$7$^$;$s$,!"(BM-a $B$r7+$jJV$9$H$I$s$I(B
$B$sA0$NJ8F,$KLa$C$F$$$-$^$9!#$3$NItJ,$G$ON`;w@-$,GK$l$F$$$^$9$,!"$^$"$3(B
$B$l$,<+A3$JF0:n$G$O$J$$$G$7$g$&$+!#(B
$BJ8>OCf$G%+!<%=%k$,$"$k0LCV$r!V%]%$%s%H!W$H8F$S$^$9!#8@$$$+$($l$P!"%+!<(B
$B%=%k$O!"J8>O$N$I$3$K%]%$%s%H$,$"$k$+$r2hLL>e$G<($7$F$$$k$N$G$9!#(B
$B0J2<$KC1=c$J%+!<%=%k0\F0A`:n$K$D$$$FMWLs$7$^$9!#$3$N$J$+$K$O!"C18l$d9T(B
$BC10L$G$N0\F0%3%^%s%I$b4^$^$l$F$$$^$9!#(B
C-f $B0lJ8;z<!$K?J$`(B
C-b $B0lJ8;zA0$KLa$k(B
M-f $B0lC18l<!$K?J$`(B
M-b $B0lC18lA0$KLa$k(B
C-n $B<!$N9T$K0\F0(B
C-p $BA0$N9T$K0\F0(B
C-a $B9TF,$K0\F0(B
C-e $B9TKv$K0\F0(B
>> $B$3$l$iA4It$r2?EY$+;n$7$FN}=,$7$^$7$g$&!#(B
$B$I$l$bIQHK$K;H$&%3%^%s%I$G$9!#(B
$B$"$HFs$D!"=EMW$J%+!<%=%k0\F0%3%^%s%I$,$"$j$^$9!#%U%!%$%k$N@hF,$K0\F0$9(B
$B$k(B M-< $B$H!"%U%!%$%k$NKvHx$K0\F0$9$k(B M-> $B$G$9!#(B
$BBgDq$NC<Kv$G$O(B "<" $B%-!<$O(B ","$B%-!<!J%3%s%^!K$N>e$K$"$j!"$=$l$r%?%$%W$9(B
$B$k$K$O%7%U%H%-!<$r;H$&I,MW$,$"$j$^$9!#$7$?$,$C$F(B M-< $B$r%?%$%W$9$k$K$O!"(B
$B%a%?%-!<$H%7%U%H%-!<$H%3%s%^%-!<$rF1;~$K2!$5$M$P$J$j$^$;$s!#(B
>> M-< $B$r;n$7$F!"$3$NF~Lg%,%$%I$N@hF,$K0\F0$7$^$7$g$&!#(B
$B$=$l$+$i!"(BC-v $B$r2?EY$+;H$C$F$3$3$^$G5"$C$F$-$F$/$@$5$$!#(B
>> M-> $B$r;n$7$F!"$3$NF~Lg%,%$%I$NKvHx$K0\F0$7$^$7$g$&!#(B
$B$=$l$+$i!"(BM-v $B$r2?EY$+;H$C$F$3$3$^$G5"$C$F$-$F$/$@$5$$!#(B
$B$b$7C<Kv$KLp0u%-!<$,$"$l$P!"$=$l$r;H$C$F%+!<%=%k$rF0$+$9$3$H$b$G$-$^$9!#(B
$B$1$l$I!"<!$N#3$D$NM}M3$+$i(B C-b, C-f, C-n, C-p $B$r3P$($k$3$H$r4+$a$^$9!#(B
$BBh0l$K!"$3$l$i$O$I$s$JC<Kv$G$b;H$($^$9!#BhFs$K!"(BEmacs $B$r;H$&$N$,>eC#$7(B
$B$F$/$l$P!"$3$l$i$N%3%s%H%m!<%kJ8;z$rBG$DJ}$,!"Lp0u%-!<$rBG$D$h$j$:$C$H(B
$BB.$$$3$H$,J,$k$G$7$g$&!J<j$rDL>o$N0LCV$+$iBg$-$/F0$+$5$J$$$G$h$$$N$G!K!#(B
$B:G8e$K!"0lEY$3$l$i$N%3%s%H%m!<%kJ8;z$rBG$D=,47$rIU$1$?$i!"$b$C$H?J$s$@(B
$B%+!<%=%k0\F0%3%^%s%I$b4JC1$K3P$($k$3$H$,$G$-$^$9!#(B
Emacs$B$NBgDq$N%3%^%s%I$K$O?tCM0z?t$rM?$($k$3$H$,$G$-$^$9!#BgDq$N>l9g$3(B
$B$N?tCM$G7+$jJV$72s?t$r;X<($9$k$3$H$K$J$j$^$9!#?tCM0z?t$rM?$($k$K$O!"%3(B
$B%^%s%I$rF~NO$9$kA0$K(B C-u $B$KB3$$$F?t;z2?7e$+%?%$%W$7$^$9!#$b$7%a%?%-!<(B
$B$,;H$($k$J$i!"%a%?%-!<$r2!$7$J$,$i?t;z$r%?%$%W$9$k$3$H$b$G$-$^$9!#$G$b(B
$B$d$O$j(B C-u $B$r3P$($k$3$H$r4+$a$^$9!#$=$l$O$I$s$JC<Kv$G$b;H$($k$+$i$G$9!#(B
$BNc$($P(B C-u 8 C-f $B$H%?%$%W$9$k$H#8J8;zJ,@h$K0\F0$7$^$9!#(B
>> $BE,Ev$J?tCM0z?t$r(B C-n $B$"$k$$$O(B C-p $B$KM?$(!"0l2s$N%3%^%s%I$G$J$k$Y$/(B
$B$3$N9T$N6a$/$KMh$k$h$&$K$7$F$_$^$7$g$&!#(B
$BBgDq$N%3%^%s%I$O?tCM0z?t$r7+$jJV$72s?t$H2r<a$7$^$9$,!"Cf$K$ONc30$b$"$j(B
$B$^$9!#(BC-v $B$d(B M-v $B$,$=$&$G$9!#$3$N>l9g!";XDj$5$l$??t$N9T$@$12hLL$r%9%/(B
$B%m!<%k$5$;$k$3$H$K$J$j$^$9!#Nc$($P(B C-u 4 C-v $B$O2hLL$r#49TJ,>e$K%9%/%m!<(B
$B%k$5$;$^$9!#(B
>> C-u 8 C-v $B$r;n$7$F$_$^$7$g$&!#(B
$B2hLL$,>e$K#89T%9%/%m!<%k$7$?$O$:$G$9!#$^$?2hLL$r2<$K%9%/%m!<%k$5$;$k$K$O(B
M-v $B$K0z?t$rM?$($l$P$h$$$N$G$9!#(B
$B$b$7(B X $B%&%#%s%I%&$r;H$C$F$$$k$N$J$i!"%9%/%m!<%k%P!<$H8F$P$l$k=DD9$N;M(B
$B3Q$$%(%j%"$,(B Emacs $B$N%&%#%s%I%&$N:8C<$K$"$k$O$:$G$9!#$=$3$r%^%&%9$r%/(B
$B%j%C%/$7$F2hLL$r%9%/%m!<%k$5$;$k$3$H$b$G$-$^$9!#(B
>> $B%9%/%m!<%k%P!<$NCf$G%^%&%9$N??Cf$N%\%?%s$r2!$7$F$_$^$7$g$&!#%\%?%s(B
$B$r2!$7$?0LCV$G7h$^$kJ8>O$N0LCV$^$G2hLL$,%9%/%m!<%k$7$^$9!#(B
>> $B%9%/%m!<%k%P!<$NCf$G??Cf$N%\%?%s$r2!$7$?$^$^%^%&%9$r>e2<$KF0$+$7$F(B
$B$_$^$7$g$&!#$=$l$K9g$;$F2hLL$,%9%/%m!<%k$9$k$N$,J,$k$O$:$G$9!#(B
$B!v(B Emacs $B$,%O%s%0$7$?;~!JF0$+$J$/$J$C$?;~!K(B
==========================================
$B$b$7(B Emacs $B$,%3%^%s%I$KH?1~$7$J$/$J$C$?$i!"(BC-g $B$r%?%$%W$9$k$3$H$G(BEmacs
$B$r0BA4$K;_$a$k$3$H$,$G$-$^$9!#(BC-g $B$G$H$F$b;~4V$N$+$+$k%3%^%s%I$r;_$a$k(B
$B$3$H$,$G$-$^$9!#(B
C-g $B$O$^$?!"?tCM0z?t$r<h$j;_$a$?$j!"#2$D0J>e$N%-!<F~NO$rI,MW$H$9$k(B
$B%3%^%s%I$rF~NO$7$F$$$k:GCf$K$=$l$r<h$j;_$a$?$j$9$k$N$K$b;H$($^$9!#(B
>> C-u 100 $B$H%?%$%W$7$F0z?t#1#0#0$r@_Dj$7$F$+$i(B C-g $B$rBG$C$F$_$^$7$g$&!#(B
$B$=$l$+$i(B C-f $B$rBG$C$F2<$5$$!#0lJ8;z$7$+?J$^$J$$$O$:$G$9!#$J$<$J$i!"(B
C-g $B$G?tCM0z?t$,%-%c%s%;%k$5$l$?$+$i$G$9!#(B
$B4V0c$C$F(B <ESC> $B$r%?%$%W$7$F$7$^$C$?;~$b!"(BC-g $B$G$=$l$r<h$j>C$;$^$9!#(B
$B!v;HMQIT2D(B (disabled) $B%3%^%s%I(B
==================================
$B$$$/$D$+$N%3%^%s%I$O=i?4<T$,4V0c$C$F;H$o$J$$$h$&;HMQIT2D$K$J$C$F$$$^$9!#(B
$B$b$72?$l$+$N;HMQIT2D%3%^%s%I$r%?%$%W$7$?$i!"$=$l$O$I$&$$$&%3%^%s%I$+$,(B
$BI=<($5$l!"K\Ev$K$=$l$r<B9T$7$?$$$N$+$I$&$+?V$M$i$l$^$9!#(B
$B$b$7K\Ev$K<B9T$7$?$$$N$J$i%9%Z!<%9%-!<$r%?%$%W$7$F2<$5$$!#$b$7<B9T$7$?(B
$B$/$J$1$l$P(B n $B$H%?%$%W$7$F2<$5$$!#(B
>> <ESC> : $B$H%?%$%W$7$F$_$^$7$g$&!J$3$l$O;HMQIT2D%3%^%s%I$G$9!K!#(B
$B$=$l$+$i(B n $B$H%?%$%W$7$^$7$g$&!#(B
$B!v%&%#%s%I%&(B
============
Emacs $B$O4v$D$b$N%&%#%s%I%&$K!"$=$l$>$l8DJL$NJ8>O$rI=<($9$k$3$H$,$G$-$^(B
$B$9!#$I$&$d$C$FJ#?t$N%&%#%s%I%&$rA`:n$9$k$+$O8eDx@bL@$7$^$9$,!"$3$3$G$O!"(B
$B$I$&$d$C$FM>J,$J%&%#%s%I%&$r>C$7$F!"85$N0l$D$N%&%#%s%I%&$N>uBV$KLa$k$+(B
$B$r@bL@$7$^$9!#$=$l$O4JC1$G$9!#(B
C-x 1 $B%&%#%s%I%&$r#1$D$K$9$k!J$D$^$jB>$N%&%#%s%I%&$rA4It>C$9!K(B
$B$D$^$j(B C-x $B$rBG$C$F$+$i$5$i$K(B 1 $B$rBG$D$N$G$9!#$3$N%3%^%s%I$O%+!<%=%k$N(B
$B$"$k%&%#%s%I%&$r2hLLA4BN$K9-$2$^$9!#B>$N%&%#%s%I%&$OA4It>C$($^$9!#(B
>> $B%+!<%=%k$r$3$N9T$K;}$C$F$-$F!"(BC-u 0 C-l $B$H%?%$%W$7$F$_$F2<$5$$!#(B
>> $BB3$$$F(B C-h k C-f $B$H%?%$%W$7$F2<$5$$!#(B
$B?7$7$$%&%#%s%I%&$,(B C-f $B%3%^%s%I$N@bL@J8$rI=<($9$k$?$a$K8=$l$k$H$H$b(B
$B$K!"$3$N%&%#%s%I%&$,$I$N$h$&$K=L$`$+$r8+$F2<$5$$!#(B
>> C-x 1 $B$H%?%$%W$7$F!"@bL@J8$rI=<($7$F$$$?%&%#%s%I%&$,>C$($k$N$r8+$F2<$5$$!#(B
$B$3$N%3%^%s%I(B (C-x 1) $B$O$3$l$^$G$K3P$($?%3%^%s%I$H$O0[$J$j!"#2$D$N%-!<(B
$B$+$i$J$j$^$9!#:G=i$N%-!<$,(B Control-x $B$G$9!#$3$N%-!<$O!"B?$/$N%3%^%s%I(B
$B$r;O$a$k$?$a$N:G=i$N%-!<$G$9!#$=$l$i$N%3%^%s%I$NB?$/$O%&%#%s%I%&!"%U%!(B
$B%$%k!"%P%C%U%!!"$=$l$i$K4X78$9$k$b$N$rA`:n$9$k$?$a$N$b$N$G!"#2$"$k$$$O(B
$B#3!"#48D$N%-!<$rI,MW$H$9$k$b$N$,$"$j$^$9!#(B
$B!vA^F~$H:o=|(B
============
$B%F%-%9%H$rF~NO$7$?$1$l$P!"C1$K$=$l$r%?%$%W$7$F2<$5$$!#(BEmacs $B$O!"L\$K8+(B
$B$($kJ8;z!J(BA, 7, * $BEy!K$r%F%-%9%H$G$"$k$H$_$J$9$N$G!"$=$l$i$O$=$N$^$^A^(B
$BF~$5$l$^$9!#(B<Return>$B!J2~9T%-!<!K$r%?%$%W$9$l$P2~9TJ8;z$,A^F~$5$l$^$9!#(B
$BD>A0$KF~NO$7$?J8;z$r:o=|$9$k$K$O!"(B<Delete> $B$r%?%$%W$7$^$9!#(B<Delete> $B$O!"(B
$B%-!<%\!<%I>e$K!V(BDel$B!W$H=q$$$F$"$k%-!<$G$9!#;~$K$O(B <Backspace> $B%-!<$b(B
<Delete> $B$H$7$FF0:n$7$^$9$,!"$$$D$b$G$O$"$j$^$;$s!#(B
$B$h$j0lHLE*$K$O!"(B<Delete> $B$O8=:_%+!<%=%k$N$"$k0LCV$ND>A0$NJ8;z$r:o=|$7(B
$B$^$9!#(B
>> $BJ8;z$r$$$/$D$+%?%$%W$7!"$=$l$+$i$=$l$i$r(B <Delete> $B$r;H$C$F:o=|$7(B
$B$F2<$5$$!#$3$N%U%!%$%k$rJQ99$9$k$3$H$r5$$K$9$kI,MW$O$"$j$^$;$s!#%*(B
$B%j%8%J%k$NF~Lg%,%$%I%U%!%$%k$OJQ99$5$l$^$;$s$+$i!#:#8+$F$$$k%U%!%$(B
$B%k$O$"$J$?$N$?$a$N%3%T!<$G$9!#(B
$BJ8>O$N0l9T$,2hLL$K<}$^$i$J$$DxD9$/$J$C$?>l9g!"$=$N9T$O2hLL>e$N<!$N9T$X(B
$B$H7QB3!J(Bcontinued$B!K$5$l$^$9!#2hLL$N1&C<$N(B backslash $BJ8;z(B ("\") $B$O!"$=(B
$B$N9T$,7QB3$5$l$F$$$k$3$H$rI=$7$F$$$^$9!#(B
>> $B2hLL$N1&C<$^$GJ8>O$rF~NO$7!"$5$i$KF~NO$rB3$1$F2<$5$$!#(B
$B7QB39T$,$G$-$k$N$,J,$k$G$7$g$&!#(B
>> <Delete> $B$r;H$C$F2hLL$K<}$^$k$H$3$m$^$G8=:_$N9T$rC;$/$7$F$_$F$/$@$5(B
$B$$!#7QB39T$O>C$($^$9!#(B
$B2~9TJ8;z$bB>$NJ8;z$HF1$8$h$&$K:o=|$G$-$^$9!##2$D$N9T$N4V$N2~9TJ8;z$r>C(B
$B$9$H$=$l$i$N9T$,9g$o$5$j#1$D$N9T$K$J$j$^$9!#$b$7$=$N9g$o$5$C$?9T$,2hLL(B
$B$NI}$h$j$bD9$$>l9g$O!"7QB39T$H$J$C$FI=<($5$l$^$9!#(B
>> $B%+!<%=%k$r9T$N@hF,$K0\F0$7!"(B<Delete> $B$r%?%$%W$7$F2<$5$$!#8=:_$N9T$,(B
$B$=$NA0$N9T$H$D$J$,$j$^$9!#(B
>> <Return> $B$r%?%$%W$7$F!":#:o=|$7$?2~9TJ8;z$r$^$?A^F~$7$F2<$5$$!#(B
Emacs $B$N$[$H$s$I$N%3%^%s%I$O!"7+$jJV$7$N2s?t;XDj$G$-$k$3$H$r;W$$=P$7$F(B
$B2<$5$$!#$3$l$O!"J8;z$NA^F~$K$D$$$F$bEv$F$O$^$j$^$9!#(B
>> C-u 8 * $B$H%?%$%W$9$k$H(B ******** $B$,A^F~$5$l$^$9!#;n$7$F$_$^$7$g$&!#(B
$B$3$l$G!"(BEmacs $B$G%F%-%9%H$rF~NO$7!"$^$?4V0c$$$r=$@5$9$k$b$C$H$b4pK\E*(B
$B$JJ}K!$r3X$s$@$3$H$K$J$j$^$9!#J8;z$HF1$8MM$K!"C18l$d9T$b:o=|$9$k$3$H$,$G$-(B
$B$^$9!#:o=|A`:n$K$D$$$FMWLs$9$k$H<!$N$h$&$K$J$j$^$9!#(B
<Delete> $B%+!<%=%k$ND>A0$NJ8;z$r:o=|!J(Bdelete$B!K(B
C-d $B%+!<%=%k$N$"$kJ8;z$r:o=|!J(Bdelete$B!K(B
M-<Delete> $B%+!<%=%k$ND>A0$NC18l$r>C5n!J(Bkill$B!K(B
M-d $B%+!<%=%k0LCV0J9_$K$"$kC18l$r>C5n!J(Bkill$B!K(B
C-k $B%+!<%=%k0LCV$+$i9TKv$^$G$r>C5n!J(Bkill$B!K(B
M-k $B%+!<%=%k0LCV$+$iJ8Kv$^$G$r>C5n!J(Bkill$B!K(B
<Delete> $B$H(B C-d $B$KBP$9$k(B M-<Delete> $B$H(B M-d $B$O!"(BC-f $B$H(B M-f $B$G;O$^$C$?N`(B
$B;w@-$r$^$?3HD%$7$^$9!#$3$3$G(B <Delete> $B$O%3%s%H%m!<%kJ8;z$G$O$"$j$^$;$s(B
$B$,!"$^$"!"$=$l$O5$$K$7$J$$$G2<$5$$!#(BC-k $B$H(B M-k $B$N4X78$O(B C-e $B$H(B M-e $B$N(B
$B4X78!J9T$HJ8$NBPHf!K$HF1$8$G$9!#(B
$B0lEY$K#2J8;z0J>e>C$7$?>l9g!"(BEmacs $B$O$=$N>C$7$?%F%-%9%H$rJ]B8$7$F$*$$$F!"(B
$B$^$?85$KLa$9$3$H$,$G$-$k$h$&$K$7$F$$$^$9!#$3$N!V85$KLa$9!W$H$$$&F0:n$r(B
$B:FF~!J(Byanking$B!K$H8F$S$^$9!#>C$7$?%F%-%9%H$O!"85$HF1$8>l=j$K$G$b85$H$O(B
$B0c$&>l=j$K$G$b:FF~$G$-$^$9!#$^$?!"2?EY$b:FF~$7$F%F%-%9%H$N%3%T!<$rJ#?t(B
$B:n$k$3$H$b$G$-$^$9!#:FF~$N$?$a$N%3%^%s%I$O(B C-y $B$G$9!#(B
$B!V>C5n!J(Bkill$B!K!W$H!V:o=|!J(Bdelete$B!K!W$N0c$$$K5$$r$D$1$F2<$5$$!#>C5n$7$?(B
$B%F%-%9%H$O:FF~$G$-$^$9$,!":o=|$7$?$b$N$O:FF~$G$-$^$;$s!#0lHL$K!"BgNL$N(B
$B%F%-%9%H$r>C$9%3%^%s%I$O$=$N%F%-%9%H$rJ]B8$7$F$*$-$^$9$,!"0lJ8;z$H$+6u(B
$BGr9T$d6uGrJ8;z$r:o=|$9$k%3%^%s%I$O:o=|$7$?$b$N$rJ]B8$7$-$^$;$s!#(B
>> $B6u9T$G$J$$9T$N@hF,$K%+!<%=%k$r0\F0$5$;$F2<$5$$!#(B
$B$=$l$+$i(B C-k $B$G$=$N9T$N%F%-%9%H$r>C5n$7$F2<$5$$!#(B
>> $B$b$&0lEY(B C-k $B$r%?%$%W$7$F$/$@$5$$!#$=$N9T$KB3$/2~9TJ8;z$,>C$5$l$k$N(B
$B$,J,$j$^$7$?$+!#(B
$B0l2sL\$N(B C-k $B$O$=$N9T$N%F%-%9%H$r>C$7!"#22sL\$N(B C-k $B$O$=$N9T<+?H$r>C$7(B
$B$F$=$N@h$N9T$r>e$2$F$-$^$9!#(BC-k $B$N?tCM0z?t$N07$$$OFC<l$G$9!#0z?tJ,$N9T(B
$B!J9T$NFbMF$H9T<+?H!K$r>C$7$^$9!#$3$l$OC1$J$k7+$jJV$7$G$O$"$j$^$;$s!#(B
C-u 2 C-k $B$O#2$D$N9T$H$=$l$>$l$KB3$/2~9TJ8;z$r>C$7$^$9$,!"(BC-k $B$r#2EY%?(B
$B%$%W$7$F$b$=$&$O$J$j$^$;$s!#(B
$B:G8e$K>C5n$7$?%F%-%9%H$r8=:_%+!<%=%k$,$"$k0LCV$K:FF~$9$k$K$O(B C-y $B$r%?(B
$B%$%W$7$^$9!#(B
>> $B;n$7$F2<$5$$!#(BC-y $B$r%?%$%W$7$F:G8e$K>C5n$7$?%F%-%9%H$r:FF~$7$^$7$g$&!#(B
C-y $B$O!"$"$J$?$,L5$/$7$?$b$N$r<h$jLa$9$b$N$@$H9M$($^$7$g$&!#(BC-k $B$rB3$1(B
$B$F<B9T$9$k$H!">C5n$7$?3F9T$OA4It$^$H$a$FJ]B8$5$l$k$N$G!"0l2s$N(B C-y $B$G(B
$B$=$l$i$N9T$,A4It:FF~$5$l$^$9!#(B
>> C-k $B$r2?EY$+B3$1$F%?%$%W$7$F$_$F2<$5$$!#(B
$B$5$"!">C5n$7$?%F%-%9%H$r:FF~$7$^$7$g$&!#(B
>> C-y $B$r%?%$%W$7$F2<$5$$!#<!$K%+!<%=%k$r?t9T2<$K0\F0$5$;!"$^$?(B C-y $B$r(B
$B%?%$%W$7$F2<$5$$!#$I$&$d$C$F%F%-%9%H$r%3%T!<$9$k$+J,$j$^$7$?$M!#(B
$B2a5n$K>C5n$7$?%F%-%9%H$r:FF~$7$?$$$N$K!"JL$N%F%-%9%H$r$=$N8e>C5n$7$?;~(B
$B$O$I$&$9$l$P$h$$$G$7$g$&!)(B C-y $B$O:G8e$K>C5n$7$?$b$N$r:FF~$7$^$9!#$G$b(B
$B$=$l$G$h$j0JA0$K>C5n$7$?%F%-%9%H$,$J$/$J$k$o$1$G$O$"$j$^$;$s!#$=$&$$$&(B
$B%F%-%9%H$O(B M-y $B$G:FF~$G$-$^$9!#(BC-y $B$G:G8e$K>C5n$7$?%F%-%9%H$r:FF~$7$?(B
$BD>8e$K(BM-y $B$r%?%$%W$9$k$H!"$=$N:FF~$5$l$?%F%-%9%H$O$=$l0JA0$K>C5n$7$?$b(B
$B$N$KJQ99$5$l$^$9!#2?EY$bB3$1$F(B M-y $B$r%?%$%W$9$k$H!"$5$i$KA0$K>C5n$7$?(B
$B%F%-%9%H$r8F$SLa$;$^$9!#K>$_$N%F%-%9%H$K9T$-Ev$C$?$i!"$=$l$O$=$N$^$^$K(B
$B$7$FJT=8:n6H$rB3$1$l$P$h$$$N$G$9!#(B
$B$"$k2s?t$@$1(B M-y $B$r7+$jJV$7$?$i!"$^$?:G=i!J$D$^$j:G8e$K>C5n$7$?%F%-%9(B
$B%H!K$KLa$j$^$9!#(B
>> $B0l9T>C5n$7!"JL$N9T$K9T$C$F$=$N9T$r>C5n$7$F2<$5$$!#(B
$B$=$l$+$i(B C-y $B$G#2HVL\!J:G8e!K$K>C5n$7$?9T$r:FF~$7$F2<$5$$!#(B
$BB3$$$F(B M-y $B$G$=$N9T$r:G=i$K>C5n$7$?9T$KJQ$($F2<$5$$!#(B
M-y $B$rB3$1$I$&$J$k$+8+$F$_$^$7$g$&!##2HVL\$K>C5n$7$?9T$,La$C$FMh$k(B
$B$^$G(B M-y $B$r7+$jJV$7!"$5$i$K$b$&2?EY$+(B M-y $B$r$7$^$7$g$&!#(B
$B$b$7K>$_$J$i(B M-y $B$K@5$b$7$/$OIi$N?tCM0z?t$rM?$($F$bNI$$$G$7$g$&!#(B
$B!v<h$j>C$7(B(UNDO)
================
$B$b$7!"J8>O$rJQ99$7$?8e$G$=$NJQ99$O4V0c$$$@$C$?$H;W$C$?$i!"<h$j>C$7(B
$B!J(Bundo$B!K%3%^%s%I(B C-x u $B$G$=$NJQ99$r<h$j>C$9$3$H$,$G$-$^$9!#(B
$BDL>o!"(BC-x u $B$O0l$D$N%3%^%s%I$K$h$kJQ99$r<h$j>C$7$^$9!#B3$1$F2?EY$b(B C-x
u $B$r9T$($P$=$N$?$S$K0l$DA0$N%3%^%s%I$,<h$j>C$7$K$J$j$^$9!#(B
$B$?$@$7$3$l$K$ONc30$,Fs$D$"$j$^$9!#$^$:!"J8>O$rJQ99$7$J$$%3%^%s%I$O<h$j(B
$B>C$7$K$J$j$^$;$s!#%+!<%=%k0\F0$d%9%/%m!<%k$N%3%^%s%I$,$=$l$KEv$?$j$^$9!#(B
$B$=$l$+$i!"%F%-%9%HJ8;z$NA^F~!J<+8JA^F~%3%^%s%I!K$O(B 20 $B8D0l$^$H$a$G07$o(B
$B$l$^$9!#$3$l$O%F%-%9%H$NA^F~$r<h$j>C$9$?$a$N(B C-x u $B$N2s?t$r8:$i$9$?$a(B
$B$G$9!#(B
>> $B$3$N9T$r(BC-k$B$G>C$7$F2<$5$$!#$=$7$F!"(BC-x u $B$GLa$7$F2<$5$$!#(B
C-_ $B$b<h$j>C$7!J(Bundo$B!K$r9T$J$&%3%^%s%I$G$9!#5!G=$O!"(BC-x u $B$HF1$8$G$9$,!"(B
$BB3$1$F2?EY$b%?%$%W$9$k>l9g$O$h$jJXMx$G$9!#(BC-_ $B$NLdBj$O!"%-!<%\!<%I$K$h$C(B
$B$F$O$I$&$d$C$F%?%$%W$9$k$N$+J,$j$E$i$$;v$G$9!#$@$+$i(B C-x u $B$,$"$k$N$G(B
$B$9!#C<Kv$K$h$C$F$O!"%3%s%H%m!<%k%-!<$r2!$7$?$^$^(B / $B$r%?%$%W$9$k$H(B C-_
$B$r%?%$%W$7$?$3$H$K$J$j$^$9!#(B
C-_ $B$d(B C-x u $B$O?tCM0z?t$r7+$jJV$72s?t$H2r<a$7$^$9!#(B
$B!v%U%!%$%k(B
==========
$BJT=8$7$F$$$kJ8>O$r915WE*$JJ*$K$9$k$K$O!"$=$l$r%U%!%$%k$KJ]B8$7$J$1$l$P(B
$B$J$j$^$;$s!#$5$b$J$$$H!"(BEmacs $B$N=*N;$HF1;~$K$=$l$O$J$/$J$C$F$7$^$$$^$9!#(B
$BJ8>O$r%U%!%$%k$K%;!<%V!JJ]B8!K$9$k$K$O!"%F%-%9%H$rF~NO$9$kA0$K!"$^$:%U%!(B
$B%$%k$r3+$+$J$1$l$P$J$j$^$;$s!J%U%!%$%k$r(B "visit" $B$9$k$H$b8@$$$^$9!K!#(B
$B%U%!%$%k$r3+$/$H$O!"$=$N%U%!%$%k$NCf?H$r(B Emacs $B$G8+$k$3$H$r0UL#$7$^$9!#(B
$B?'!9$J0UL#$G!"$=$l$O$"$J$?$,%U%!%$%k<+?H$rJT=8$7$F$$$k$+$NMM$G$9!#$7$+(B
$B$7!"(BEmacs $B$G9T$&JQ99$O%U%!%$%k$r%;!<%V$9$kKx$O915WE*$J$b$N$H$J$j$^$;$s!#(B
$B$3$l$O!"$=$l$rK>$^$J$$$N$K!"ESCf$^$GJQ99$7$?%U%!%$%k$,;D$k$N$rHr$1$k$?(B
$B$a$G$9!#%;!<%V$7$?8e$G$5$(!"JQ99$7$?$b$N$,4V0c$C$F$$$?;~$N$?$a$K!"85$N(B
$B%U%!%$%k$OL>A0$rJQ$($F;D$5$l$^$9!#(B
$B2hLL$N0lHV2<6a$/$K!"(B"-J:-- TUTORIAL.ja" $B$NMM$JJ8;zNs$G;O$^$j(B "----" $B$G(B
$B=*$C$F$$$k9T$,$"$k$O$:$G$9!#DL>o$O2hLL$N$3$NItJ,$K8=:_3+$$$F$$$k%U%!%$(B
$B%k$NL>A0$,I=<($5$l$F$$$^$9!#:#$O(B "TUTORIAL.ja" $B$H$$$&L>$N%U%!%$%k!J$3(B
$B$l$O(B Emacs $BF~Lg%,%$%I$N$"$J$?MQ$N%3%T!<$G$9!K$r3+$$$F$$$^$9!#(BEmacs $B$G(B
$B%U%!%$%k$r3+$/$H$=$N%U%!%$%k$NL>A0$,$3$NItJ,$K8=$l$^$9!#(B
$B%U%!%$%k$r3+$/$?$a$N%3%^%s%I$O$3$l$^$G3X$s$@$b$N$H$O0c$$!"%U%!%$%k$NL>(B
$BA0$r;XDj$7$J$1$l$P$J$j$^$;$s!#$3$l$r!"%3%^%s%I$,!VC<Kv$+$i0z?t$rFI$_9~(B
$B$`!W$H8@$$$^$9!#:#$N>l9g$O0z?t$O%U%!%$%kL>$G$9!#<!$N%3%^%s%I(B
C-x C-f Find a file
$B$r%?%$%W$9$k$H!"(BEmacs $B$O%U%!%$%kL>$rJ9$$$F$-$^$9!#%?%$%W$7$?%U%!%$%kL>(B
$B$O2hLL$N:G2<9T$KI=<($5$l$^$9!#$3$N:G2<9T$O!"$3$&$$$&F~NO$N$?$a$K;H$C$F(B
$B$$$k;~$O!"%_%K%P%C%U%!$H8F$S$^$9!#DL>o$NJT=8%3%^%s%I$G%U%!%$%kL>$rJT=8(B
$B$9$k$3$H$b$G$-$^$9!#(B
$B%U%!%$%kL>$NF~NOCf!J$"$k$$$O$=$NB>$N%_%K%P%C%U%!F~NOCf!K$K(B C-g $B$K$h$C(B
$B$F%3%^%s%I$r%-%c%s%;%k$G$-$^$9!#(B
>> C-x C-f $B$r%?%$%W$7$F$+$i(B C-g $B$r%?%$%W$7$F$_$^$7$g$&!#%_%K%P%C%U%!$,(B
$B<h$j>C$5$l!"$=$l$r;H$C$F$$$?%3%^%s%I(B C-x C-f $B<+BN$b<h$j>C$5$l$^$9!#(B
$B$@$+$i!"%U%!%$%k$O2?$b3+$+$l$^$;$s!#(B
$B%U%!%$%kL>$rF~NO$7$?$i!"(B<Return>$B%-!<$r%?%$%W$7F~NO$r40N;$5$;$^$9!#$=$&(B
$B$9$k$H!"(BC-x C-f $B%3%^%s%I$,Av$j;O$a;XDj$7$?%U%!%$%k$r3+$-$^$9!#%_%K%P%C(B
$B%U%!$O(B C-x C-f $B%3%^%s%I$N=*N;$H$H$b$K>C$($^$9!#(B
$B%U%!%$%k$NFbMF$,2hLL$KI=<($5$l$k$H!"$=$NFbMF$rJQ99$9$k$3$H$,$G$-$^$9!#(B
$B2C$($?JQ99$r915WE*$J$b$N$K$7$?$1$l$P!"<!$N%3%^%s%I$r%?%$%W$7$^$9!#(B
C-x C-s Save the file
$B$3$l$O(B Emacs $B$,J];}$7$F$$$kJ8>O$r%U%!%$%k$K%3%T!<$7$^$9!#=i$a$F$3$l$r(B
$B<B9T$9$k$H$-$O!"85$N%U%!%$%k$r?7$7$$L>A0$KIU$1BX$($k$N$G!"$=$NFbMF$O<:(B
$B$o$l$^$;$s!#$=$N?7$7$$L>A0$O85$N%U%!%$%k$NL>A0$N:G8e$K(B'~'$B$r$D$1$?$b$N(B
$B$G$9!#(B
$B%;!<%V$,=*$o$k$H!"%;!<%V$7$?%U%!%$%k$NL>A0$,I=<($5$l$^$9!#3d$HIQHK$K%;!<(B
$B%V$7$?J}$,NI$$$G$7$g$&!#%7%9%F%`$,Mn$A$F$b$;$C$+$/$N:n6H$,%Q%"$K$J$i$J(B
$B$$$h$&$K!#(B
>> C-x C-s $B$H%?%$%W$7$F$3$NF~Lg%,%$%I$N%3%T!<$r%;!<%V$7$F2<$5$$!#(B
$B2hLL:G2<CJ$K(B "Wrote ...TUTORIAL.ja" $B$HI=<($5$l$^$9!#(B
$BCm0U!'%7%9%F%`$K$h$C$F$O(B C-x C-s $B$H%?%$%W$9$k$H2hLL$,F0$+$J$/$J$j(B
Emacs $B$,I=<($7$h$&$H$9$k$b$N$,2?$b2hLL$K=P$J$/$J$j$^$9!#$3$l$O!"%U%m!<(B
$B%3%s%H%m!<%k$H8F$P$l$k#O#S$N5!G=$,(B C-s $B$rB*$(!"(BEmacs $B$KEO$5$J$$$h$&$K(B
$B$7$F$$$k$N$G$9!#$3$l$r2r=|$9$k$K$O(B C-q $B$r%?%$%W$7$^$9!#$=$l$+$i(B Emacs
$B%^%K%e%"%k$N(B "Spontaneous Entry to Incremental Search ($BCN$i$L4V$K%$%s(B
$B%/%j%a%s%?%k%5!<%A$K$J$k(B)" $B$N@a$rFI$s$G$/$@$5$$!#$3$N$d$C$+$$$J#O#S$N(B
$B5!G=$K$I$&BP=h$9$l$PNI$$$+$,:\$C$F$$$^$9!#(B
$B4{B8$N%U%!%$%k$r3+$-!"FbMF$r8+!"JT=8$9$k$3$H$,$G$-$^$9!#B8:_$7$J$$%U%!(B
$B%$%k$r3+$/$3$H$b$G$-$^$9!#(BEmacs $B$G?7$7$$%U%!%$%k$r:n$k$K$O<!$N$h$&$K$7(B
$B$^$9!#%U%!%$%k$r3+$-$^$9!#:G=i$O6u$C$]$G$9$M!#J8>O$rF~NO$7$F$$$-$^$9!#(B
$B%U%!%$%k$r%;!<%V$7$h$&$H$7$?;~$K=i$a$F?7$7$$%U%!%$%k$,:n$i$l!":#$^$GF~(B
$BNO$7$?FbMF$,$=$l$K=q$-9~$^$l$^$9!#$=$l0J9_$O!"$"$J$?$O4{B8$N%U%!%$%k(B
$B!J$?$C$?:#:n$i$l$?%U%!%$%k!K$rJT=8$7$F$$$k$H;W$C$F2<$5$$!#(B
$B!v%P%C%U%!(B
==========
$B#2$DL\$N%U%!%$%k$r(B C-x C-f $B$G3+$$$F$b!":G=i$N%U%!%$%k$O(B Emacs $BFbIt$K;D$C(B
$B$?$^$^$G$9!#$=$C$A$N%U%!%$%k$KLa$k$K$O$b$&0lEY(B C-x C-f $B$G$=$N%U%!%$%k(B
$B$r3+$1$P$h$$$N$G$9!#$3$&$d$C$F!"4v$D$b$N%U%!%$%k$r(B Emacs $B$G3+$/$3$H$,(B
$B$G$-$^$9!#(B
>> "foo" $B$H$$$&L>$N%U%!%$%k$r:n$j$^$7$g$&!#(BC-x C-f foo <Return> $B$G$9!#(B
$B2?$+J8>O$rF~$l!"JT=8$7!"(BC-x C-s $B$G(B "foo" $B$r%;!<%V$7$F2<$5$$!#(B
$B:G8e$K(B C-x C-f TUTORIAL.ja <Retrun> $B$H%?%$%W$7(B
$BF~Lg%,%$%I$KLa$j$^$7$g$&!#(B
Emacs $B$O%U%!%$%k$NFbMF$r%P%C%U%!!J(Bbuffer$B!K$H8F$P$l$k$b$N$NCf$K3JG<$7$F(B
$B$$$^$9!#%U%!%$%k$r3+$/$H?7$7$$%P%C%U%!$,$G$-$^$9!#(BEmacs $B$,8=:_;}$C$F$$(B
$B$k%P%C%U%!$N%j%9%H$r8+$k$K$O!"<!$N$h$&$K%?%$%W$7$^$9!#(B
C-x C-b List buffers
>> C-x C-b $B$r;n$7$F$_$^$7$g$&!#(B
$B3F%P%C%U%!$,$I$s$JIw$KL>A0$d$=$l$,3+$$$F$$$k%U%!%$%k$KBP$9$k%U%!%$%kL>(B
$B$r;}$C$F$$$k$+8+$F2<$5$$!#%U%!%$%k$r3+$$$F$$$J$$%P%C%U%!$b$"$j$^$9!#$?(B
$B$H$($P!"(B"*Buffer List*" $B$H$$$&L>$N%P%C%U%!$O$I$s$J%U%!%$%k$b3+$$$F$$$^(B
$B$;$s!#$3$l$O%P%C%U%!$N%j%9%H$rFbMF$H$9$k%P%C%U%!$G!"(BC-x C-b $B$G:n$i$l$?(B
$B$b$N$G$9!#(BEmacs $B$N%&%#%s%I%&Fb$K$"$k%F%-%9%H$O$I$l$b!"$$$:$l$+$N%P%C%U%!(B
$B$N0lIt$G$9!#(B
>> C-x 1 $B$H%?%$%W$7$F%P%C%U%!%j%9%H$r>C$7$^$7$g$&!#(B
$B$"$k%U%!%$%k$NFbMF$K$J$s$i$+$NJQ99$r2C$(!"$=$l$+$iB>$N%U%!%$%k$r3+$$$F(B
$B$b!":G=i$N%U%!%$%k$O$^$@%;!<%V$5$l$^$;$s!#JQ99$O(B Emacs $B$NFbIt!"$=$N%U%!(B
$B%$%k$KBP1~$9$k%P%C%U%!$NCf$K;D$C$?$^$^$G$9!##2HVL\$N%U%!%$%k$N%P%C%U%!(B
$B$r:n$C$?$j!"JT=8$7$?$j$7$F$b!":G=i$N%U%!%$%k$N%P%C%U%!$K$O2?$N1F6A$b$"(B
$B$j$^$;$s!#$3$l$O$H$F$bLr$KN)$A$^$9$,!":G=i$N%U%!%$%k$N%P%C%U%!$r%;!<%V(B
$B$9$k2?$+JXMx$JJ}K!$,I,MW$@$H$$$&$3$H$G$b$"$j$^$9!#(B C-x C-s $B$G%;!<%V$9(B
$B$k$?$a$K(B C-x C-f $B$G85$N%P%C%U%!$KLa$k$N$O$OLq2p$G$9!#$=$3$G<!$N%3%^%s(B
$B%I$r;H$$$^$9!#(B
C-x s $B2?$l$+$N%P%C%U%!$r%;!<%V$9$k(B
C-x s $B$O!"$^$@%;!<%V$7$F$$$J$$JQ99$,$"$k%P%C%U%!$=$l$>$l$K$D$$$F!"$=$l(B
$B$r%;!<%V$9$k$+$I$&$+$rJ9$$$F$-$^$9!#(B
>> $B0l9T%F%-%9%H$rF~NO$7$F$+$i(B C-x s $B$H%?%$%W$7$F2<$5$$!#(B
TUTORIAL.ja $B$H$$$&%P%C%U%!$r%;!<%V$9$k$+$I$&$+J9$$$F$/$k$O$:$G$9!#(B
$B!V$O$$!W$HEz$($k$?$a$K(B "y" $B$H%?%$%W$7$F2<$5$$!#(B
$B!v%3%^%s%I$N3HD%(B
================
Emacs $B$K$O!"%3%s%H%m!<%kJ8;z$d%a%?J8;z$K3dEv$i$l$k$h$j$b$:$C$H$:$C$HB?(B
$B$/$N%3%^%s%I$,$"$j$^$9!#$3$l$i$r07$&$?$a$K!"3HD%!J(BeXtend$B!K%3%^%s%I$r;H(B
$B$$$^$9!#$=$l$K$O!"0J2<$N#2$D$N<oN`$,$"$j$^$9!#(B
C-x $BJ8;z$K$h$k3HD%!#B3$1$F0lJ8;z$rF~NO$7$^$9!#(B
ESC x $BL>A0$K$h$k3HD%!#B3$1$F%3%^%s%I$NL>A0$rF~NO$7$^$9!#(B
$B$3$l$i$O!"0lHLE*$K$OJXMx$@$1$l$I$b!"$3$l$^$G8+$F$-$?$b$N$[$I$OIQHK$KMQ(B
$B$$$i$l$J$$%3%^%s%I$G$9!#(BC-x C-f $B!J%U%!%$%k$r3+$/!K$d(B C-x C-s$B!J%U%!%$%k(B
$B$r%;!<%V!K$O$3$NCg4V$G$9!#B>$K!"(BC-x C-c$B!J(BEmacs $B$r=*N;!K$b$=$&$G$9!#(BC-x
C-c $B$K4X$7$F$O!"$=$l$^$G$K2C$($?JQ99$,L5$/$J$k$N$r?4G[$9$kI,MW$O$"$j$^(B
$B$;$s!#(BEmacs $B$r=*N;$5$;$kA0$KJQ99$5$l$?3F%U%!%$%k$r%;!<%V$9$k$+$I$&$+J9(B
$B$$$F$-$^$9$+$i!#(B
C-z $B$O!V0l;~E*$K!W(B Emacs $B$rH4$1$k%3%^%s%I$G$9!#$^$?F1$8(B Emacs $B%;%C%7%g(B
$B%s$KLa$k$3$H$,$G$-$^$9!#(B
$B$=$l$,$G$-$k%7%9%F%`>e$J$i!"(BC-z $B$O(B Emacs $B$r!VCfCG!W$5$;$^$9!#$D$^$j(B
Emacs $B$r=*N;$9$k$3$H$J$/!"%3%^%s%I%7%'%k$KLa$k$3$H$,$G$-$^$9!#BgJ}$NI8(B
$B=`E*$J%7%'%k$J$i!"(B`fg' $B%3%^%s%I$b$7$/$O(B `%emacs' $B$K$h$C$F(B Emacs $B$r:F3+(B
$B$G$-$^$9!#(B
$B!VCfCG!W5!G=$r<BAu$7$F$$$J$$%7%9%F%`$G$O!"(BC-z $B$O(B Emacs $B$N2<$GAv$k%5%V(B
$B%7%'%k$r:n$j!"B>$N%W%m%0%i%`$rAv$i$;$F$+$i$^$?(B Emacs $B$KLa$k$3$H$,$G$-(B
$B$k$h$&$K$7$^$9!#$3$N>l9gK\Ev$K(B Emacs $B$+$iH4$1=P$k$o$1$G$O$"$j$^$;$s$N(B
$B$G!"%7%'%k%3%^%s%I$N(B `exit' $B$,$=$N%5%V%7%'%k$+$i(B Emacs $B$KLa$kIaDL$N$d(B
$B$jJ}$G$9!#(B
C-x C-c $B$O%m%0%"%&%H$7$h$&$H;W$&;~$K;H$&$b$N$G$9!#%a!<%k%D!<%k!J(Bmail
$B%3%^%s%IEy!K$d$=$NB>$NMM!9$J%"%W%j%1!<%7%g%s%W%m%0%i%`$,5/F0$7$?(B Emacs
$B$+$iH4$1=P$k>l9g$K;H$&$N$b@5$7$$;H$$J}$G$9!#$3$l$i$N%W%m%0%i%`$O(B Emacs
$B$NCfCG$K$I$&BP=h$7$FNI$$$+CN$i$J$$$G$7$g$&$+$i!#$7$+$7$J$,$i!"IaDL$N>l(B
$B9g$O!"%m%0%"%&%H$7$h$&$7$J$$8B$j$O(B Emacs $B$r=*N;$5$;$k$h$j$O(B C-z $B$GCfCG(B
$B$5$;$kJ}$,NI$$$G$7$g$&!#(B
C-x $B%3%^%s%I$O$?$/$5$s$"$j$^$9!#$3$l$^$G$K!"0J2<$r3X$S$^$7$?!#(B
C-x C-f $B%U%!%$%k$r3+$/!J(BFind$B!K(B
C-x C-s $B%U%!%$%k$N%;!<%V!J(BSave$B!K(B
C-x C-b $B%P%C%U%!$N%j%9%H%"%C%W(B
C-x C-c Emacs $B$r=*N;(B
C-x u $B<h$j>C$7(B
$BL>A0$K$h$k3HD%%3%^%s%I$K$O!"$"$^$j;H$o$J$$$b$N$d!"FCDj$N%b!<%I$G$7$+;H(B
$B$o$J$$$b$N$,$"$j$^$9!#$?$H$($P(B replace-string $B$G$9$,!"$3$l$OJ8;zNs$rCV(B
$B49$9$k$b$N$G$9!#(BM-x $B$r%?%$%W$9$k$H!"(BEmacs $B$O2hLL$N:G2<9T$K(B M-x $B$HI=<((B
$B$7F~NO$rB%$9$N$G!"$=$3$K%3%^%s%I$NL>A0!J$3$N>l9g(B "replace-string"$B!K$r(B
$BF~$l$J$1$l$P$J$j$^$;$s!#(B"repl s<TAB>" $B$H$@$1%?%$%W$9$k$H(B Emacs $B$,%3%^(B
$B%s%IL>$rJd40$7$F$/$l$^$9!#%3%^%s%IL>$rF~$l$?$i(B <Return> $B$rBG$C$F2<$5$$!#(B
"Replace string" $B%3%^%s%I$K$O0z?t$,Fs$DI,MW$G$9!#$I$NJ8;zNs$r$I$&CV49(B
$B$9$k$+$G$9!#3F0z?t$rF~NO$9$k$?$S$K(B <Return> $B$rBG$C$F2<$5$$!#(B
>> $B%+!<%=%k$r$3$3$+$i#29T2<$N6u9T$K0\F0$5$;$F2<$5$$!#(B
M-x repl s<Return>changed<Return>Altered<Return> $B$H%?%$%W$7$^$7$g$&!#(B
$B$3$N9T$,$I$&JQ$o$k$+(B(changed)$B8+$^$7$g$&!#$"$J$?$O%+!<%=%k0J9_A4It$N(B
c-h-a-n-g-e-d $B$H$$$&8l$r(B "altered" $B$KJQ$($?$N$G$9!#(B
$B!v<+F0%;!<%V(B
============
$B%U%!%$%k$KJQ99$r2C$($F$^$@%;!<%V$7$F$$$J$$>l9g!"$=$l$i$NJQ99$O7W;;5!$,(B
$B%/%i%C%7%e$9$k$H<:$o$l$F$7$^$&2DG=@-$,$"$j$^$9!#$=$&$$$&;vBV$rHr$1$k$?(B
$B$a!"JT=8Cf$N3F%U%!%$%k$K$D$$$F<+F0%;!<%V%U%!%$%k$,Dj4|E*$K=q$+$l$^$9!#(B
$B<+F0%;!<%V%U%!%$%k$OF,$H$*?,$K(B # $B$,IU$$$F$$$^$9!#Nc$($P(B "hello.c" $B$H$$(B
$B$&%U%!%$%k$N<+F0%;!<%V%U%!%$%k$O(B "#hello.c#" $B$G$9!#DL>o$NJ}K!$G%U%!%$(B
$B%k$r%;!<%V$7$?$H$-$K!"$=$&$$$&<+F0%;!<%V%U%!%$%k$O>C$5$l$^$9!#(B
$B7W;;5!$,%/%i%C%7%e$7$?>l9g!"<+F0%;!<%V$5$l$?JT=8$r2sI|$5$;$k$3$H$,$G$-(B
$B$^$9!#IaDL$K%U%!%$%k!JJT=8$7$F$$$?$b$N$G!"<+F0%;!<%V%U%!%$%k$8$c$"$j$^(B
$B$;$s!K$r3+$-!"$=$l$+$i(B M-x recover file<Return> $B$H%?%$%W$9$k$N$G$9!#3N(B
$BG'$r5a$a$F$-$^$9$N$G!"(Byes<Return> $B$H%?%$%W$7<+F0%;!<%V$5$l$?%G!<%?$r2s(B
$BI|$7$^$9!#(B
$B!v%(%3!<%(%j%"(B
==============
$B$b$7$f$C$/$j$H%3%^%s%I$rBG$C$?$J$i$P!"2hLL$N2<$N%(%3!<%(%j%"$H8F$P$l(B
$B$k>l=j$KBG$C$?$b$N$,I=<($5$l$^$9!#%(%3!<%(%j%"$O2hLL$N:G2<9T$G$9!#(B
$B!v%b!<%I%i%$%s(B
==============
$B%(%3!<%(%j%"$N$9$0>e$N9T$O!"%b!<%I%i%$%s$H8F$S$^$9!#%b!<%I%i%$%s$O$3$s$JIw$K8+$($k$G$7$g$&!#(B
-J:** TUTORIAL.ja (Fundamental)--L670--58%----------------
$B$3$N9T$O(B Emacs $B$N>uBV5Z$SJT=8Cf$NJ8>O$K$D$$$FM-1W$J>pJs$rM?$($F$/$l$^(B
$B$9!#(B
$B%U%!%$%kL>$K$D$$$F$O$b$&J,$C$F$$$^$9$M!#$=$l$O$"$J$?$,3+$$$?%U%!%$%k$G(B
$B$9!#(B-NN%-- $B$OJ8>OCf$N8=:_0LCV$r<($7$F$$$^$9!#J8>O$N(B NN% $B$,2hLL:G>eCJ$h(B
$B$jA0$K$"$k$H$$$&$3$H$G$9!#$b$7J8>O$N:G=i$N9T$,2hLL$K$"$k;~$K$O(B --00%--
$B$NBe$j$K(B --Top-- $B$HI=<($7$^$9!#$b$7J8>O$N:G8e$N9T$,2hLL$K$"$k;~$K$O(B
--Bot-- $B$HI=<($7$^$9!#$b$72hLL$KA4It<}$^$C$F$7$^$&$h$&$JC;$$J8>O$r8+$F(B
$B$$$k$H$-$K$O(B --All-- $B$HI=<($7$^$9!#(B
$B3g8L$K0O$^$l$?ItJ,$O$I$&$JJT=8%b!<%I$K$$$k$+$r<($7$^$9!#%G%U%)%k%H$O(B
"Fundamental" $B$H$$$&%b!<%I!"$3$l$,8=:_$N%b!<%I$G$9!#$3$l$O!V%a%8%c!<%b!<(B
$B%I!J(Bmajor mode$B!K!W$N0lNc$G$9!#(B
Emacs $B$K$OB?$/$N<oN`$N%a%8%c!<%b!<%I$,$"$j$^$9!#(BLisp mode $B$d(BText mode
$B$N$h$&$K!"$I$s$J%W%m%0%i%`8@8l$d$I$s$J<oN`$NJ8>O$rJT=8Cf$+$r0UL#$9$k$b(B
$B$N$b$"$j$^$9!#$$$D$G$bI,$:$$$:$l$+$N%a%8%c!<%b!<%I$N>uBV$K$J$C$F$$$^$9!#(B
$B$I$N%a%8%c!<%b!<%I$K$$$k$N$+$O!"%b!<%I%i%$%s$N8=:_$O(B "Fundamental" $B$H(B
$BI=<($7$F$$$kItJ,$r8+$l$PJ,$j$^$9!#(B
$B3F%a%8%c!<%b!<%I$O4v$D$+$N%3%^%s%I$K0[$J$k?6$kIq$$$r$5$;$^$9!#Nc$($P!"(B
$B%W%m%0%i%`%j%9%HCf$K%3%a%s%H$rF~$l$k$?$a$N%3%^%s%I$,$"$j$^$9!#%3%a%s%H(B
$B$N7A<0!J%7%s%?%C%/%9!K$O!"%W%m%0%i%`8@8l$K$h$C$F0[$J$j!"%a%8%c!<%b!<%I(B
$B$O!"$=$l$KBP1~$9$k8@8l$K9g$C$?7A<0$G%3%a%s%H$rA^F~$7$^$9!#3F%a%8%c!<%b!<(B
$B%I$O3HD%%3%^%s%I$NL>A0$K$J$C$F$$$^$9!#$D$^$j$=$N3HD%%3%^%s%I$r;H$C$F%a(B
$B%8%c!<%b!<%I$r@Z$j49$($k$N$G$9!#Nc$($P!"(BM-x fundamental-mode $B$H$$$&$N(B
$B$O(B Fundamental $B%b!<%I$K@Z$j49$($k$?$a$N%3%^%s%I$G$9!#(B
$B$b$7!"DL>o$N1Q8l$dF|K\8l$NJ8>O!J$3$N%U%!%$%k$N$h$&$J!K$rJT=8$9$k$N$J$i(B
$B$P!"(BText mode $B$r;H$$$^$7$g$&!#(B
>> M-x text-mode <Retuen> $B$H%?%$%W$7$F$_$F2<$5$$!#(B
$B?4G[$7$J$$$G!#$3$l$^$G3X$s$@%3%^%s%I$O$?$$$7$FJQ$o$j$^$;$s$+$i!#$@$1$I!"(B
M-f $B$d(B M-b $B$,%"%]%9%H%m%U%#(B "'" $B$rC18l$N0lIt$@$H2r<a$9$k$h$&$K$J$C$?$N(B
$B$,J,$k$G$7$g$&!#0JA0$N(B Fundamental $B%b!<%I$G$O(B M-f $B$d(B M-b $B$O(B "'" $B$rC18l(B
$B$N6h@Z$j$H8+$J$7$F$$$^$7$?!#(B
$B%a%8%c!<%b!<%I$O$3$N$h$&$K:3:Y$J0c$$$r@8$_$^$9!#Bg35$N%3%^%s%I$O$I$N%a(B
$B%8%c!<%b!<%I$G$bF1$8F/$-$r$7$^$9$,!"<B:]$NF0$-$O>/$7$@$1$3$H$J$k$N$G$9!#(B
$B8=:_$N%a%8%c!<%b!<%I$K$D$$$F$N@bL@J8$r8+$k$K$O(B C-h m $B$H%?%$%W$7$^$9!#(B
>> C-u C-v $B$r0lFsEY$d$C$F$3$N9T$r2hLL$N>e$NJ}$K;}$C$F$$$-$^$7$g$&!#(B
>> C-h m $B$H%?%$%W$7!"(BText mode $B$H(B Fundamental mode $B$N0c$$$r$_$^$7$g$&!#(B
>> C-x 1 $B$G(B Text mode $B$N@bL@J8$r2hLL$+$i>C$7$^$7$g$&!#(B
$B%a%8%c!<%b!<%I$,!V%a%8%c!<!W$H$$$&$+$i$K$O!V%^%$%J!<%b!<%I!W$b$"$j$^$9!#(B
$B%^%$%J!<%b!<%I$O%a%8%c!<%b!<%I$NBe$o$j$K$J$k$b$N$G$O$J$/!"$=$l$r$A$g$C(B
$B$H$@$1=$@5$9$k$b$N$G$9!#3F%^%$%J!<%b!<%I$O!"%a%8%c!<%b!<%I$dB>$N%^%$%J!<(B
$B%b!<%I$K1F6A$rM?$($:$K!"$=$l$@$1$r%*%s%*%U$G$-$^$9!#$D$^$j!"%^%$%J!<%b!<(B
$B%I$rA4$/;H$o$J$+$C$?$j!"0l8D$@$1;H$C$?$j!"$$$/$D$+$rF1;~$K;H$C$?$j$G$-(B
$B$k$N$G$9!#(B
$BDL>o$NJ8>O$rJT=8$7$F$$$k;~$K$H$F$bJXMx$J%^%$%J!<%b!<%I$N0l$D$K%*!<%H%U%#(B
$B%k!J(BAuto Fill$B!K%b!<%I$H$$$&$N$,$"$j$^$9!#$3$N%b!<%I$,%*%s$N;~$KJ8>O$r(B
$BF~NO$7$F$$$C$F9T$rD9$/$7$9$.$?>l9g!"<+F0E*$KC18l$HC18l$N4V$G9T$,J,3d$5(B
$B$l$^$9!JF|K\8l$N>l9g$O$I$NJ8;z$N4V$G$b!K!#(B
Auto Fill $B%b!<%I$O(B M-x auto-fill-mode<Return> $B$H$d$l$P%*%s$K$G$-$^$9!#(B
$B$=$l$,%*%s$N>uBV$G(B M-x auto-fill-mode<Return> $B$H$d$l$,%*%U$K$G$-$^$9!#(B
$B$3$N%3%^%s%I$O!"%b!<%I$,%*%U$J$i%*%s$K!"%*%s$J$i%*%U$K$9$k$N$G$9!#$3$&(B
$B$$$&$N$r!V%b!<%I$r%H%0%k$9$k!W$H8@$$$^$9!#(B
>> M-x auto-fill-mode<Return> $B$H%?%$%W$7$F!"(B "asdf " $B$G;O$^$k9T$rF~NO(B
$B$7$F2<$5$$!#9T$,J,3d$5$l$k$^$G2?EY$b(B "asdf " $B$H%?%$%W$7$^$7$g$&!#%9(B
$B%Z!<%9$rK:$l$:$K!#(BAuto Fill $B$O%9%Z!<%9$,F~NO$5$l$?;~$N$_F/$-$^$9!#(B
$B1&%^!<%8%s$ODL>o(B 70 $BJ8;z!J%+%i%`!K$G$9$,!"(BC-x f $B%3%^%s%I$G$3$l$rJQ99$9(B
$B$k$3$H$,$G$-$^$9!#;XDj$NJ8;z?t$r?tCM0z?t$H$7$FM?$($^$9!#(B
>> $B?tCM0z?t(B 20 $B$G(B C-x f $B$r$d$j$^$7$g$&!#(B (C-u 2 0 C-x f)$B!#(B
$B$=$l$+$iE,Ev$JJ8>O!J1Q8l!K$rF~NO$7!"(B20 $BJ8;z$G9T$,J,3d$5$l$k$N$r8+$F(B
$B$_$^$7$g$&!#$=$l$+$i(B C-x f $B%3%^%s%I$G$^$?%^!<%8%s$r(B 70 $BJ8;z$KLa$7$F(B
$B2<$5$$!#(B
$B%Q%i%0%i%U$NESCf$rJQ99$7$F$b(B Auto Fill $B%b!<%I$O$=$l$r<+F0E*$K%U%#%k$7(B
$BD>$7$O$7$^$;$s!#(B
$B%Q%i%0%i%U$r%U%#%k$7D>$9$K$O%+!<%=%k$r$=$N%Q%i%0%i%U$NCf$KCV$$$F$+$i(B
M-q $B$r%?%$%W$7$^$9!#(B
>> $B%+!<%=%k$r$3$N9TD>A0$N%Q%i%0%i%U$K0\F0$5$;(B M-q $B$H%?%$%W$7$F2<$5$$!#(B
$B!v8!:w(B
======
$BJ8>OCf$NFCDj$NJ8;zNs$r!"A08~$-$K$b8e8~$-$K$bC5$9;v$,$G$-$^$9!#J8;zNs$r(B
$BC5$9$H$$$&$N$O%+!<%=%k0\F0%3%^%s%I$G$9!#$D$^$j!"<!$K$=$NJ8;zNs$,8=$l$k(B
$B>l=j$^$G%+!<%=%k$r0\F0$5$;$k$N$G$9!#(B
Emacs $B$N8!:w%3%^%s%I$OB>$NBg35$N%(%G%#%?$N8!:w%3%^%s%I$H$O0[$j!V%$%s%/(B
$B%j%a%s%?%k!W$G$9!#8!:w$9$kJ8;zNs$r%?%$%W$7$F$$$k$=$P$+$i8!:w$,5/$k$N$G(B
$B$9!#(B
$B8!:w$r;O$a$k$?$a$N%3%^%s%I$O!"A08~$-$K8!:w$9$k$J$i$P(B C-s$B!"8e8~$-$J$i(B
C-r $B$G$9!#$^$@$G$9!*!*:#$O$^$@;n$5$J$$$G2<$5$$!#(B
C-s $B$rBG$D$H(B "I-search" $B$H$$$&J8;zNs$,%(%3!<%(%j%"$KI=<($5$l$k$N$,8+$((B
$B$k$G$7$g$&!#$3$l$O(B Emacs $B$,%$%s%/%j%a%s%?%k8!:w$H$$$&>uBV$K$$$F!"$"$J(B
$B$?$,C5$7$?$$J8;zNs$rF~NO$9$k$N$rBT$C$F$$$k$N$G$9!#(B<Return> $B$rBG$F$P8!(B
$B:w$r=*$o$l$^$9!#(B
>> $B$5$F(B C-s $B$H%?%$%W$7$F8!:w$r;O$a$^$7$g$&!#$f$C$/$j$H#1J8;z$:$D(B
"cursor" $B$H$$$&C18l$rF~NO$7$^$9!##1J8;zBG$DKh$K%+!<%=%k$,$I$&F0$/$+(B
$B8+$^$7$g$&!#(B
$B$5$"!"(B"cursor" $B$,#12s8+$D$+$j$^$7$?!#(B
>> $B$b$&0lEY(B C-s $B$HBG$C$F<!$N(B "cursor" $B$r8+$D$1$^$7$g$&!#(B
>> $B:#EY$O(B <Delete> $B$r#42sBG$C$F!"%+!<%=%k$NF0$-$r8+$F2<$5$$!#(B
>> <Return> $B$HBG$C$F8!:w$r=*N;$7$^$7$g$&!#(B
$B2?$,5/$C$?$+J,$j$^$9$+!)%$%s%/%j%a%s%?%k8!:w$G$O!"$"$J$?$,$=$l$^$G$KBG$C(B
$B$?J8;zNs$,8=$l$k$H$3$m$K9T$3$&$H$7$^$9!#<!$N(B "cursor" $B$K9T$/$K$O$b$&0l(B
$BEY(B C-s $B$HBG$A$^$9!#$b$7$b$&$=$&$$$&J8;zNs$,L5$+$C$?$i!"%Y%k$r$J$i$7$F(B
$B8!:w$,8=:_$O<:GT$7$F$$$k$3$H$rCN$i$;$^$9!#(BC-g $B$rBG$F$P8!:w$r=*$o$l$^$9!#(B
$BCm0U!'%7%9%F%`$K$h$C$F$O(B C-s $B$H%?%$%W$9$k$H2hLL$,F0$+$J$/$J$j(B Emacs $B$,(B
$BI=<($7$h$&$H$9$k$b$N$,2?$b2hLL$K=P$J$/$J$j$^$9!#$3$l$O!"%U%m!<%3%s%H%m!<(B
$B%k$H8F$P$l$k#O#S$N5!G=$,(B C-s $B$rB*$(!"(BEmacs $B$KEO$5$J$$$h$&$K$7$F$$$k$N(B
$B$G$9!#$3$l$r2r=|$9$k$K$O(B C-q $B$r%?%$%W$7$^$9!#$=$l$+$i(B Emacs $B%^%K%e%"%k(B
$B$N(B "Spontaneous Entry to Incremental Search ($BCN$i$L4V$K%$%s%/%j%a%s%?(B
$B%k%5!<%A$K$J$k(B)" $B$N@a$rFI$s$G$/$@$5$$!#$3$N$d$C$+$$$J#O#S$N5!G=$K$I$&(B
$BBP=h$9$l$PNI$$$+$,:\$C$F$$$^$9!#(B
$B%$%s%/%j%a%s%?%k8!:w$NESCf$G(B <Delete> $B$rBG$D$H8!:wJ8;zNsCf$N#1HV8e$m$N(B
$BJ8;z$,>C$($^$9!#$=$7$F!"%+!<%=%k$O!"A02s$N0LCV$KLa$j$^$9!#$?$H$($P!"(B
"c" $B$H%?%$%W$7$F:G=i$N(B "c" $B$rC5$7$^$9!#$=$l$+$i(B "u" $B$rBG$D$H:G=i$N(B
"cu" $B$N>l=j$K%+!<%=%k$,F0$-$^$9!#$=$3$G(B <Delete> $B$rBG$D$H(B "u" $B$r8!:wJ8(B
$B;zNs$+$i>C$7$F!"%+!<%9%k$O:G=i$K(B "c" $B$,8=$l$?>l=j$KLa$j$^$9!#(B
C-s $B$O!"8=:_$N%+!<%=%k0LCV0J9_$K=P$F$/$k8!:wJ8;zNs$rC5$7;O$a$^$9!#$b$7!"(B
$BJ8>O$NA0$NJ}$rC5$7$?$+$C$?$i!"(BC-r $B$r%?%$%W$7$^$9!#$3$l$^$G$N(B C-s $B$K$D(B
$B$$$F$N@bL@$O$9$Y$F(B C-r $B$K$bEv$F$O$^$j$^$9!#8!:w$NJ}8~$,H?BP$J$@$1$G$9!#(B
$B!vJ#?t$N%&%#%s%I%&(B
==================
Emacs $B$NAGE($J5!G=$N0l$D$H$7$F!"0l$D$N2hLL$KF1;~$K$$$/$D$b$N%&%#%s%I%&(B
$B$rI=<($9$k$3$H$,$G$-$^$9!#(B
>> $B%+!<%=%k$r$3$N9T$K;}$C$F$-$F(B C-u 0 C-l $B$H%?%$%W$7$F2<$5$$!#(B
>> $B$=$l$+$i(B C-x 2 $B$H%?%$%W$72hLL$r#2$D$N%&%#%s%I%&$KJ,3d$7$^$7$g$&!#(B
$B$I$A$i$N%&%#%s%I%&$b$3$NF~Lg%,%$%I$rI=<($7$F$$$^$9!#%+!<%=%k$O>e$N(B
$B%&%#%s%I%&$K$"$j$^$9!#(B
>> C-M-v $B$H%?%$%W$72<$N%&%#%s%I%&$r%9%/%m!<%k$5$;$^$7$g$&!#(B
$B!J%a%?%-!<$,$J$$>l9g$O(B ESC C-v $B$H%?%$%W$7$^$9!#!K(B
>> C-x o $B!J(B"o" $B$O(B "other$B!JB>J}!K(B" $B$r0UL#$7$^$9!K$r%?%$%W$72<$N%&%#%s%I(B
$B%&$K%+!<%=%k$r0\$7$F2<$5$$!#(B
>> $B2<$N%&%#%s%I%&$G(B C-v $B$d(B M-v $B$r;H$C$F%9%/%m!<%k$5$;$^$7$g$&!#(B
$B$3$3$K=q$$$F$"$k;X<($O>e$N%&%#%s%I%&$GFI$_?J$s$G$/$@$5$$!#(B
>> $B$b$&0lEY(B C-x o $B$H%?%$%W$7!"%+!<%=%k$r>e$N%&%#%s%I%&$KLa$7$^$9!#(B
$B%+!<%=%k$O>e$N%&%#%s%I%&$N85$"$C$?0LCV$KLa$j$^$9!#(B
C-x o $B$r;H$C$F%&%#%s%I%&4V$r9T$C$?$jMh$?$j$G$-$^$9!#3F%&%#%s%I%&$O$=$l(B
$B<+?H$N%+!<%=%k0LCV$rJ];}$7$F$$$^$9$,!"0lEY$K$O0l$D$N%&%#%s%I%&$@$1$,%+!<(B
$B%=%k$rI=<($7$^$9!#DL>o$NJT=8%3%^%s%I$O3'%+!<%=%k$,$"$k%&%#%s%I%&$KBP$7(B
$B$FF/$-$^$9!#$=$N%&%#%s%I%&$r(B "selected window ($BA*BrCf$N%&%#%s%I%&(B)" $B$H(B
$B8F$S$^$9!#(B
C-M-v $B%3%^%s%I$O!"0l$D$N%&%#%s%I%&$GJ8>O$rJT=8Cf$KB>$N%&%#%s%I%&$r;2>H(B
$B$7$F$$$k;~$KLrN)$A$^$9!#JT=8Cf$N>l=j$K%+!<%=%k$rJ]$C$?$^$^!"(BC-M-v $B$GB>(B
$B$N%&%#%s%I%&$rFI$_?J$a$F9T$/$3$H$,$G$-$^$9!#(B
C-M-v $B$O%3%s%H%m!<%k%a%?J8;z$N0lNc$G$9!#%a%?%-!<$,$"$k>l9g$O!"%3%s%H%m!<(B
$B%k%-!<$H%a%?%-!<$r2!$7$J$,$i(B v $B$r%?%$%W$7$^$9!#%3%s%H%m!<%k%-!<$H%a%?(B
$B%-!<$O$I$A$i$r@h$K2!$7$F$b9=$$$^$;$s!#$I$A$i$b$=$N8e$K%?%$%W$5$l$kJ8;z(B
$B$KBP$9$k=$>~%-!<(B (modifier key) $B$H$7$FF/$/$+$i$G$9!#(B
$B%a%?%-!<$,L5$$>l9g!"(BESC $B%-!<$r;H$$$^$9$,!"$3$N>l9g=gHV$,Bg;v$G$9!#$^$:(B
ESC $B$r2!$7$F$+$iN%$7$F(B C-v $B$rBG$A$^$9!#(BC-ESC v $B$G$OBLL\$G$9!#$3$l$O(B
ESC $B$O$=$l<+BN$,0l$D$NJ8;z$G=$>~%-!<$G$O$J$$$+$i$G$9!#(B
>> $B>e$N%&%#%s%I%&$G(B C-x 1 $B$H%?%$%W$72<$N%&%#%s%I%&$r>C$7$^$7$g$&(B
$B!J$b$72<$N%&%#%s%I%&$G(B C-x 1 $B$H%?%$%W$9$k$H>e$N%&%#%s%I%&$,>C$($^$9!#(B
$B$3$N%3%^%s%I$O!V8=:_<+J,$,$$$k%&%#%s%I%&$@$1$K$7$J$5$$!W$H$$$&$b$N$@$H(B
$B;W$C$F2<$5$$!#!K(B
$BF1$8%P%C%U%!$rN>J}$N%&%#%s%I%&$KI=<($9$kI,MW$O$"$j$^$;$s!#0lJ}$N%&%#%s(B
$B%I%&$G(B C-x C-f $B$G%U%!%$%k$r3+$$$F$bB>J}$N%&%#%s%I%&$OJQ2=$7$^$;$s!#3F(B
$B%&%#%s%I%&$K$*$$$FJL!9$N%U%!%$%k$r3+$/$3$H$,$G$-$k$N$G$9!#(B
>> C-x 4 C-f $B$H%?%$%W$7B3$1$F2?$+<+J,$N%U%!%$%kL>$rF~NO$7$F2<$5$$!#(B
<Return> $B$GF~NO$r=*$o$i$;$F2<$5$$!#:#;XDj$7$?%U%!%$%k$,2<$N%&%#%s%I(B
$B%&$K8=$l$^$9!#%+!<%=%k$b$=$C$A$K0\$j$^$9!#(B
>> C-x o $B$H%?%$%W$7>e$N%&%#%s%I%&$KLa$C$F2<$5$$!#$=$l$+$i(B C-x 1 $B$G2<$N(B
$B%&%#%s%I%&$r>C$7$^$7$g$&!#(B
$B!v:F5"JT=8%l%Y%k(B (RECURSIVE EDITING LEVELS)
$B;~!9!JITK\0U$K!K:F5"JT=8%l%Y%k$H8F$P$l$k>uBV$KF~$k$3$H$,$"$j$^$9!#%b!<(B
$B%I%i%$%s$N%a%8%c!<%b!<%IL>$r0O$`4]3g8L(B "()" $B$,$5$i$Knl3g8L(B "[]" $B$G0O$^(B
$B$l$^$9!#Nc$($P!"(B(Fundamental) $B$HI=<($5$l$kBe$o$j$K(B [(Fundamental)] $B$N(B
$B$h$&$K$J$j$^$9!#(B
$B:F5"JT=8%l%Y%k$+$iH4$1=P$9$K$O(B ESC ESC ESC $B$H%?%$%W$7$^$9!#$3$l$OHFMQ(B
$B!VH4$1=P$7!W%3%^%s%I$G$9!#M>J,$J%&%#%s%I%&$r>C$7$?$j!"%_%K%P%C%U%!$+$i(B
$BH4$1$?$j$9$k$N$K$b;H$($^$9!#(B
>> M-x $B$H%?%$%W$7%_%K%P%C%U%!$KF~$C$F2<$5$$!#$=$l$+$i(B ESC ESC ESC $B$H%?(B
$B%$%W$7H4$1=P$7$F$_$^$7$g$&!#(B
C-g $B$G$O:F5"JT=8%l%Y%k$+$i$OH4$1=P$;$^$;$s!#$3$l$O!"(BC-g $B$,:F5"JT=8%l%Y(B
$B%kFb$G$N%3%^%s%I$d0z?t$r<h$j>C$9$N$K;H$o$l$F$$$k$+$i$G$9!#(B
$B!v$b$C$H$b$C$H%X%k%W(B
====================
$B$3$NF~Lg%,%$%I$G$O(B Emacs $B$r;H$$;O$a$k$N$K==J,$J>pJs$rDs6!$7$?$D$b$j$G(B
$B$9!#(BEmacs $B$K$O$"$^$j$K$bB?$/$N5!G=$,$"$k$N$G!"$3$3$G$9$Y$F$r@bL@$9$k$N(B
$B$OL5M}$G$9!#$=$l$G$bLr$KN)$D5!G=$r$b$C$HB?$/3X$S$?$$$H;W$&?M$N$?$a$K$O!"(B
Emacs $B$N%3%^%s%I$N@bL@$rFI$`$?$a$N%3%^%s%I$,$"$j$^$9!#$3$l$i$N!V%X%k%W!W(B
$B%3%^%s%I$O3'(B Control-h $BJ8;z!J%X%k%WJ8;z$H8F$S$^$9!K$G;O$^$j$^$9!#(B
$B%X%k%W5!G=$r;H$&$K$O!"(BC-h $B$KB3$$$F$I$s$J<oN`$N%X%k%W$,I,MW$+$r<($9#1J8(B
$B;z$r%?%$%W$7$^$9!#$b$7$=$l$9$iJ,$i$J$$>l9g$O(B C-h ? $B$H%?%$%W$7$^$7$g$&!#(B
$B$I$s$J<oN`$N%X%k%W$rDs6!$G$-$k$+$,<($5$l$^$9!#$b$7!"(BC-h $B$r%?%$%W$7$F$+(B
$B$i5$$,JQ$o$C$?$i!"(BC-g $B$r%?%$%W$7$F<h$j>C$9$3$H$,$G$-$^$9!#(B
$B!J%5%$%H$K$h$C$F$O(B C-h $BJ8;z$N0UL#$rJQ99$7$F$$$k$+$b$7$l$^$;$s!#%f!<%6(B
$BA40w$KBP$9$kAm3gE*$J<jCJ$H$7$F$=$s$J$3$H$r$9$k$Y$-$G$O$"$j$^$;$s!#$=$&(B
$B$$$&>l9g$O%7%9%F%`4IM}<T$KJ86g$r8@$$$^$7$g$&!#$^!"$H$b$+$/!"$b$7(B C-h
$B$,2hLL$N2<$NJ}$K%X%k%W$N%a%C%;!<%8$r=P$5$J$1$l$P!"(BF1 $B%-!<$+(B M-x help
<Return> $B$r;n$7$F$_$F2<$5$$!#!K(B
$B:G$b4pK\E*$J%X%k%W5!G=$O(B C-h c $B$G$9!#(BC-h$B!"$=$l$+$i(B c$B!"$=$7$F%3%^%s%I$N(B
$BJ8;z<c$7$/$O$=$N%7!<%1%s%9$r%?%$%W$9$k$H!"$=$N%3%^%s%I$K$D$$$F$NC;$$@b(B
$BL@$rI=<($7$^$9!#(B
>> C-h c Control-p $B$H%?%$%W$7$F$_$^$7$g$&!#(B
$B0J2<$N$h$&$J%a%C%;!<%8$,I=<($5$l$k$O$:$G$9!#(B
C-p runs the command previous-line
$B$3$l$O!V%U%!%s%/%7%g%s$NL>A0!W$rI=<($7$?$N$G$9!#%U%!%s%/%7%g%sL>$O<g$K(B
Emacs $B$r%+%9%?%^%$%:$7$?$j3HD%$7$?$j$9$k$N$K;H$o$l$^$9!#$7$+$7!"%U%!%s(B
$B%/%7%g%sL>$O$=$N%3%^%s%I$,2?$r$9$k$b$N$J$N$+$,J,$k$h$&$KIU$1$i$l$^$9$N(B
$B$G!"4JC1$J@bL@$H$7$F$b$=$N$^$^Lr$KN)$A$^$9!#0lEY3X$s$@%3%^%s%I$K$D$$$F(B
$B;W$$=P$9$K$O==J,$G$9!#(B
C-x C-s $B$d!J%a%?%-!<$d%"%k%H%-!<$,$J$$>l9g$N!K(B <ESC> v $B$J$I$NJ#?tJ8;z(B
$B$N%3%^%s%I$r(B C-h c $B$N8e$K%?%$%W$9$k$3$H$b$G$-$^$9!#(B
$B%3%^%s%I$K$D$$$F$b$C$HB?$/$N>pJs$,M_$7$1$l$P(B C-h c $B$NBe$o$j$K(B C-h k $B$r(B
$B;H$$$^$9!#(B
>> C-h k Control-p $B$H%?%$%W$7$F$_$^$7$g$&!#(B
Emacs$B$N%&%#%s%I%&$K!"%3%^%s%I$NL>A0$HF1;~$K$=$N5!G=$N@bL@$,I=<($5$l$^(B
$B$9!#FI$_=*$($?$i!"(BC-x 1 $B$H%?%$%W$7$F%X%k%W$N%F%-%9%H$r>C$7$^$7$g$&!#I,(B
$B$:$7$b$9$0$K$=$&$9$kI,MW$O$"$j$^$;$s!#%X%k%W%F%-%9%H$r8+$J$,$iJT=8$rB3(B
$B$1!"$=$l$+$i(B C-x 1 $B$H%?%$%W$7$F$b9=$$$^$;$s!#(B
C-h $B$K$OB>$K$bLr$KN)$D%*%W%7%g%s$,$"$j$^$9!#(B
C-h f $B%U%!%s%/%7%g%s$N@bL@!#%U%!%s%/%7%g%sL>$rF~NO$7$^$9!#(B
>> C-h f previous-line<Return> $B$H%?%$%W$7$F$_$^$7$g$&!#(B
C-p $B%3%^%s%I$r<B9T$9$k%U%!%s%/%7%g%s$K$D$$$F$N$9$Y$F$N>pJs$rI=<($7(B
$B$^$9!#(B
C-h a $B%3%^%s%I%"%W%m%]%9(B (command apropos)$B!#%-!<%o!<%I$rF~NO(B
$B$9$k$H!"$=$N%-!<%o!<%I$rL>A0$K4^$`A4$F$N%3%^%s%I$r%j%9(B
$B%H%"%C%W$7$^$9!#$3$l$i$N%3%^%s%I$OA4$F(B M-x $B$G<B9T$G$-(B
$B$^$9!#%3%^%s%I$K$h$C$F$O!"$=$l$rAv$i$;$k$?$a$N#1J8;z$+(B
$B#2J8;z$N%7!<%1!<%s%9$bI=<($5$l$^$9!#(B
>> C-h a file<Return> $B$H%?%$%W$7$F$_$F2<$5$$!#(B
"file"$B$H$$$&J8;zNs$rL>A0$N0lIt$K;}$DA4$F$N(B M-x $B%3%^%s%I!J3HD%%3%^%s%I!K(B
$B$rJL$N%&%#%s%I%&$KI=<($7$^$9!#(B C-x C-f $B$N$h$&$JJ8;z%3%^%s%I$bBP1~$9$k(B
$BL>A0!J(Bfind-file $B$N$h$&$K!K$KJB$s$GI=<($5$l$^$9!#(B
>> C-M-v $B$H%?%$%W$7%X%k%W$N%&%#%s%I%&$r%9%/%m!<%k$5$;$^$7$g$&!#2?EY$+(B
$B$d$C$F2<$5$$!#(B
>> C-x 1 $B$G%X%k%W%&%#%s%I%&$r>C$7$F2<$5$$!#(B
$B!v$*$o$j$K(B
==========
$BK:$l$J$$$G!*(BEmacs $B$r=*N;$9$k$K$O!"(BC-x C-c $B$G$9!#$^$?(B Emacs $B$KLa$C$FMh(B
$B$i$l$k$h$&$K0l;~E*$K%7%'%k$KLa$k$@$1$J$i(B C-z $B$G$9!#(B
$B$3$NF~Lg%,%$%I$O!"$^$C$?$/$N=i?4<T$K$b$o$+$j$d$9$$$h$&$K$H0U?^$7$F$$$^(B
$B$9!#$G$9$+$i!"$b$72?$+$o$+$j$K$/$$E@$,$"$C$?$J$i!"<+J,$r@U$a$J$$$GJ86g(B
$B$r$D$1$F2<$5$$!#(B
$B!v$3$NK]LuHG$K$D$$$F$N<U<-(B
==========================
$B$3$NJ8=q$O(B Emacs Ver.20 $BIUB0$N1Q8lHG$NF~Lg%,%$%I$rF|K\8l$KK]Lu$7$?$b$N(B
$B$G$9!#$=$N:]!"(BMule $BIUB0$NF|K\8l%,%$%I$r;29M$K$7$^$7$?!#$=$NF|K\8l%,%$(B
$B%I$O!"85$O(B SANETO Takanori $B;a$,F|K\8l(B MicroEmacs(kemacs) $BF~LgJT$H$7$F(B
$BK]Lu$5$l!"$=$l$rNkLZM5?.;a(B <hironobu@sra.co.jp> $B$,(BNemacs/Mule $BMQ$KJQ99!"(B
$B$5$i$K5HEDLP<y;a$,=$@5$5$l$?$b$N$G$9!#$3$l$i$NJ}!9$K?<$/46<U$7$^$9!#(B
$B!vCx:n8"I=<((B
============
$B$3$3$K85$N1Q8lHG$NCx:n8"I=<($r$=$N$^$^IU$1$^$9!#$3$NK]LuHG$b$3$l$K=>$$(B
$B$^$9!#(B
This tutorial descends from a long line of Emacs tutorials
starting with the one written by Stuart Cracraft for the original Emacs.
This version of the tutorial, like GNU Emacs, is copyrighted, and
comes with permission to distribute copies on certain conditions:
Copyright (c) 1985, 1996 Free Software Foundation
Permission is granted to anyone to make or distribute verbatim copies
of this document as received, in any medium, provided that the
copyright notice and permission notice are preserved,
and that the distributor grants the recipient permission
for further redistribution as permitted by this notice.
Permission is granted to distribute modified versions
of this document, or of portions of it,
under the above conditions, provided also that they
carry prominent notices stating who last altered them.
The conditions for copying Emacs itself are more complex, but in the
same spirit. Please read the file COPYING and then do give copies of
GNU Emacs to your friends. Help stamp out software obstructionism
("ownership") by using, writing, and sharing free software!
;;; Local Variables:
;;; coding: iso-2022-jp
;;; End:

978
etc/TUTORIAL.ko Normal file
View file

@ -0,0 +1,978 @@
$(C@z@[1G(B (c) 1985 Free Software Foundation, Inc; $(C3!?!4B(B $(C:9;g(B $(CA60G@L(B
$(C@V@>4O4Y(B. $(C@P0m(B $(C@V4B(B $(C1[@:(B Emacs $(CAvD'<-@T4O4Y(B.
Emacs $(C8m7I5i@:(B $(C4k03(B $(CA&>n<h(B(CTRL$(C@L3*(B CTL$(C@L6s0m55(B $(CG%=C(B) $(CH$@:(B
META$(C<h(B(EDIT$(C@L3*(B ALT$(C6s0m55(B $(CG%=C(B)$(C8&(B $(C;g?kGU4O4Y(B. $(C@L71(B $(C1[<h8&(B $(C8E9x(B $(C4Y(B
$(C>21b(B $(C:84Y4B(B $(C?l8.4B(B $(C4Y@=0z(B $(C00@:(B $(C>`=D(B $(CG%Gv@;(B $(C>21b7N(B $(CGU=C4Y(B:
C-<$(C9.@Z(B> $(CA&>n<h8&(B $(C4)8%(B $(CC$(B <$(C9.@Z(B> $(C1[<h8&(B $(CD(4O4Y(B. $(CAo(B, C-f$(C4B(B $(CA&>n<h8&(B
$(C4)8%(B $(C;sEB?!<-(B f $(C1[<h8&(B $(CD!4B(B $(C0M@;(B $(C8;GU4O4Y(B.
M-<$(C9.@Z(B> META$(C<h3*(B EDIT$(C<h(B $(CH$@:(B $(C13C<<h(B(ALT)$(C8&(B $(C4)8%(B $(CC$(B <$(C9.@Z(B> $(C1[<h8&(B
$(CD(4O4Y(B. META$(C<h(B, EDIT$(C<h(B $(CH$@:(B $(C13C<<h0!(B $(C>x@88i(B $(C3*?H<h(B(ESC)$(C8&(B
$(C4-764Y(B $(C3u@:(B $(CHD(B <$(C9.@Z(B> $(C1[<h8&(B $(CD(4O4Y(B. $(C3*?H<h4B(B <ESC>$(C@L6s0m(B
$(C>21b7N(B $(CGU4O4Y(B.
$(C@/@G(B: C-x C-c$(C8&(B $(CD!8i(B Emacs$(C8&(B $(CA>7aGR(B $(C<v(B $(C@V@>4O4Y(B. ($(C5N(B $(C9.@Z(B.)
$(C?^BJ(B $(CGQ0h(B(margin)$(C?!(B $(C@V4B(B $(C9.@Z(B ">>"$(C4B(B $(C56@Z0!(B $(C8m7I@;(B $(C=GG`GX(B $(C:8557O(B
$(CGO0m@Z(B $(CGT@;(B $(CAv=CGU4O4Y(B. $(C?98&(B $(C5i>n(B:
<<help-with-tutorial$(C@L(B $(C=C@[GO8i<-(B $(C?)1b?!(B $(C:s(B $(CAY@L(B $(C3"?vA3@=(B>>
>> $(C4Y@=(B $(CH-8i@87N(B $(C?rAw@L1b(B $(C@'GX<-4B(B C-v ($(C4Y@=(B $(CH-8i(B $(C:81b(B)$(C8&(B $(CD(4O4Y(B.
($(CGX(B $(C:8=J=C?@(B. $(CA&>nE08&(B $(C4)8%(B $(CC$(B v $(C1[<h8&(B $(CD!8i(B $(C5K4O4Y(B.)
$(CAv1]:NEM4B(B $(CGQ(B $(CH-8i@;(B $(C4Y(B $(C@P>z@;(B $(C6'864Y(B $(C@L780T(B $(CGX>_(B $(CGU4O4Y(B.
$(CGQ(B $(CH-8i?!<-(B $(C4Y8%(B $(CH-8i@87N(B $(C?rAw@O(B $(C6'(B $(C5N(B $(CAY@L(B $(C0cD#4Y4B(B $(C0M@;(B
$(C@/@GGO=J=C?@(B; $(C@L4B(B $(CGQ(B $(C9.@e@;(B $(C0h<SGX<-(B $(C@P@;(B $(C<v(B $(C@V557O(B $(CGO1b(B
$(C@'GT@T4O4Y(B.
$(CC99xB07N(B $(C@MGt>_(B $(CGO4B(B $(C0M@:(B $(C9.@e@G(B $(CGQ(B $(C0w?!<-(B $(C4Y8%(B $(C0w@87N(B $(C?rAw@L4B(B
$(C0M@T4O4Y(B. C-v$(C7N(B $(CGQ(B $(CH-8i@;(B $(C>UBJ@87N(B $(C?rAw@L4B(B $(C0M@:(B $(C@L9L(B $(C>K0m(B $(C@V@>4O4Y(B.
$(C5^BJ@87N(B $(CGQ(B $(CH-8i@;(B $(C?rAw@L1b(B $(C@'GX<-4B(B M-v$(C8&(B (META$(C<h8&(B $(C4)8%C$(B v $(C1[<h8&(B
$(CD!0E3*(B, META$(C<h3*(B EDIT$(C<h(B, $(CH$@:(B $(C13C<<h0!(B $(C>x@;(B $(C0f?l(B <ESC>v$(C8&(B $(CD(4O4Y(B).
>> $(C8n(B $(C9x(B M-v$(C?M(B C-v$(C8&(B $(C9x0%>F(B $(CCD(B $(C:8=J=C?@(B.
* $(C?d>`(B
------
$(C4Y@=@:(B $(C@|C<H-8i@;(B $(C:84B5%(B $(C@/?kGQ(B $(C8m7I5i@T4O4Y(B:
C-v $(CGQ(B $(C@|C<(B $(CH-8i@;(B $(C>UBJ@87N(B $(C?rAw@N4Y(B
ESC v $(CGQ(B $(C@|C<(B $(CH-8i@;(B $(C5^BJ@87N(B $(C?rAw@N4Y(B
C-l $(CH-8i@;(B $(CAv?l0m(B $(C8p5g(B $(C1[?y@;(B $(C4Y=C(B $(CH-8i(B $(CG%=CGO8i<-(B
$(C1t:}@L0!(B $(C@V4B(B $(C1[?y@;(B $(CH-8i@G(B $(CA_>S?!(B $(C?@0T(B $(CGQ4Y(B.
($(CA&>n<h(B-1$(C@L(B $(C>F4O6s(B $(CA&>n<h(B-L$(C@T4O4Y(B.)
>> $(C1t9Z@L8&(B $(CC#>F<-(B $(C1W(B $(C0w@G(B $(C1[?y@;(B $(C1b>oGO=J=C?@(B.
$(C1W8.0m4B(B C-l$(C@;(B $(CD!=J=C?@(B.
$(C1t9Z@L8&(B $(C4Y=C(B $(CC#>F<-(B $(C00@:(B $(C1[?y@L(B $(C1t9Z@L@G(B $(C1YC3?!(B $(C@V4B0!8&(B
$(CH.@NGO=J=C?@(B.
* $(C1b:;@{@N(B $(C1t9Z@L@G(B $(CA&>n(B
------------------------
$(CGQ(B $(CH-8i@;(B $(C?rAw@L4B(B $(C0M@:(B $(C@/?kGU4O4Y88(B $(CH-8i@G(B $(CGQ(B $(C1[?y3;?!<-(B $(C>n6;0T(B
$(CA$GXAx(B $(C@e<R7N(B $(C?rAw@O(B $(C<v(B $(C@V0Z@>4O1n(B?
$(C@L?!4B(B $(C8n0!Av(B $(C9f9}@L(B $(C@V@>4O4Y(B. $(C0!@e(B $(C1Y:;@{@N(B $(C9f9}@:(B C-p, C-b, C-f
$(C1W8.0m(B C-n $(C8m7I@;(B $(C;g?kGO4B(B $(C0M@T4O4Y(B. $(C0"0"@:(B $(CH-8i?!<-(B $(CA$GXAx(B $(C9fGb@87N(B
$(CGO3*@G(B $(C0!7ND-@L3*(B $(CGO3*@G(B $(C<<7ND->?(B $(C1t9Z@L8&(B $(C?rAw@T4O4Y(B.
$(C?)1b?!(B $(C@L(B $(C3W0!Av(B $(C8m7I5i0z(B $(C1W(B $(C?rAw@L4B(B $(C9fGb@;(B $(C:8?)AV4B(B $(CG%0!(B $(C@V@>4O4Y(B.
$(C5^(B $(CAY(B, C-p
:
:
$(C5^BJ@87N(B, C-b .... $(CGv@g@G(B $(C1t9Z@L(B $(C@'D!(B .... $(C>UBJ@87N(B, C-f
:
:
$(C>U(B $(CAY(B, C-n
>> C-n$(C@L3*(B C-p$(C8&(B $(C=a<-(B $(C1t9Z@L8&(B $(C@'(B $(C55G%@G(B $(C0!?n5%(B $(CAY7N(B $(C?rAw@L=J=C?@(B.
$(C1W8.0m4B(B C-l$(C@;(B $(CCD<-(B $(C@L(B $(C55G%0!(B $(CH-8i@G(B $(CA_>S?!(B $(C@'D!GO4BAv8&(B
$(CH.@NGO=J=C?@(B.
$(C@L(B $(C8m7I5i@:(B $(C1[@Z7N(B $(C1b>oGO4B(B $(C0M@L(B $(C=,?o(B $(C0M@T4O4Y(B: P$(C4B(B previous, N$(C@:(B
next, B$(C4B(B backward, F$(C4B(B forward. $(C@L5i@:(B $(C1b:;@{@N(B $(C1t9Z@L(B $(C@L5?(B
$(C8m7I@87N<-(B, $(CGW;s(B $(C;g?kGO0T(B $(C5I(B $(C0M@L9G7N(B $(CAv1](B $(C4g@e(B $(C8S8.(B $(C<S?!(B $(C@MGt(B $(C5N4B(B
$(C0M@L(B $(CAA@>4O4Y(B.
>> C-n$(C@;(B $(C?)7/9x(B $(CCD<-(B $(C1t9Z@L8&(B $(C@L(B $(CAY7N(B $(C0!A.(B $(C?@=J=C?@(B.
>> C-f$(C8&(B $(CCD<-(B $(CAY(B $(C>H?!<-(B $(C@L5?GX(B $(C:80m(B C-p$(C7N(B $(C5^(B $(CAY7N(B $(C0!=J=C?@(B.
$(C1t9Z@L0!(B $(CAY@G(B $(CA_0#?!(B $(C@V@;(B $(C6'(B C-p$(C0!(B $(C>n62(B $(C@[?k@;(B $(CGO4B0!(B $(C:8=J=C?@(B.
$(C0"0"@G(B $(CAY@:(B $(C4Y@=?!(B $(C@L>nAv4B(B $(CAY0z(B $(C:P8.GO4B(B $(C;uAY(B $(C9.@Z7N(B $(C3!334O4Y(B.
$(CFD@O@G(B $(C86Av87(B $(CAY@:(B $(C3!?!(B $(C;uAY(B $(C9.@Z0!(B $(C@V>n>_(B $(CGU4O4Y(B ($(C1W7/3*(B Emacs$(C4B(B $(C@L8&(B
$(C?d18GOAv(B $(C>J@>4O4Y(B).
>> $(CAY@L(B $(C=C@[GO4B(B $(C0w?!<-(B C-b$(C8&(B $(CCD(B $(C:8=J=C?@(B. $(C1t9Z@L0!(B $(C5^(B $(CAY@G(B $(C3!@87N(B
$(C?rAw?)>_(B $(CGU4O4Y(B. $(C1W(B $(C@L@/4B(B $(C1t9Z@L0!(B $(C;uAY(B $(C9.@Z8&(B $(C3Q>n<-(B $(C5^BJ@87N(B
$(C?rAw@L1b(B $(C6'9.@T4O4Y(B.
C-f$(C55(B C-b$(CC373(B $(C;uAY(B $(C9.@Z8&(B $(C3Q>n<-(B $(C@L5?GR(B $(C<v(B $(C@V@>4O4Y(B.
>> C-b$(C8&(B $(C8n(B $(C9x(B $(C4u(B $(CCD<-(B $(C1t9Z@L0!(B $(C>n5p(B $(C@V4B0!8&(B $(C:80m(B C-f$(C7N(B $(C4Y=C(B $(CAY@G(B
$(C3!1nAv(B $(C@L5?GO=J=C?@(B.
$(C1W(B $(C4Y@=?!(B C-f$(C7N(B $(C4Y@=(B $(CAY7N(B $(C@L5?GO=J=C?@(B.
$(CH-8i@G(B $(C2@4k1b3*(B $(C9X9Y4Z@;(B $(CAv3*CD<-(B $(C@L5?GO8i(B $(C0!@e@Z8.8&(B $(C9~>n3-(B $(C1[?y@:(B
$(CH-8i(B $(C>H@87N(B $(C9P7A(B $(C5i>n(B $(C?I4O4Y(B. $(C@L0M@;(B "$(C5N7g8;1b(B(scrolling)"$(C6s0m(B
$(CGU4O4Y(B. $(C@L4B(B Emacs$(C0!(B $(C1t9Z@L8&(B $(CH-8i(B $(C9[@87N(B $(C3;:83;Av(B $(C>J0m(B $(C1[?y@G(B $(CA$GXAx(B
$(C@e<R7N(B $(C?rAw@O(B $(C<v(B $(C@V557O(B $(CGU4O4Y(B.
>> C-n$(C@87N(B $(C1t9Z@L8&(B $(CH-8i@G(B $(C9X9Y4Z(B $(C>F7!7N(B $(C?rAw?)<-(B, $(C>n62(B $(C@O@L(B
$(C9_;}GO4B0!8&(B $(C:8=J=C?@(B.
$(CGQ(B $(C9.@Z>?(B $(C@L5?GO4B(B $(C0M@L(B $(C4@8.8i(B, $(CGQ(B $(C398;>?(B $(C?rAw@O(B $(C<v(B $(C@V@>4O4Y(B. M-f
(Meta-f)$(C4B(B $(CGQ(B $(C398;>?(B $(C>UBJ@87N(B, M-b$(C4B(B $(CGQ(B $(C398;>?(B $(C5^BJ@87N(B $(C?rAw@T4O4Y(B.
>> M-f$(C3*(B M-b$(C8&(B $(C8n(B $(C9x(B $(CCD(B $(C:8=J=C?@(B.
$(C398;@G(B $(CA_0#?!<-4B(B $(C398;@G(B $(C3!@87N(B $(C?rAw@T4O4Y(B. $(C398;(B $(C;g@L@G(B $(C0x0#(B
$(C9.@Z?!<-4B(B M-f$(C0!(B $(C4Y@=(B $(C398;@G(B $(C3!@87N(B $(C?rAw@T4O4Y(B. M-b$(C4B(B $(C9]4k(B $(C9fGb@87N(B
$(C00@:(B $(C@[?k@;(B $(CGU4O4Y(B.
>> $(CA_0#(B $(CA_0#?!(B C-f$(C?M(B C-b$(C8&(B $(CD!8i<-(B M-f$(C?M(B M-b$(C8&(B $(C8n(B $(C9x(B
$(C?,=@GO=J=C?@(B. $(C1W7/8i(B $(C398;@G(B $(C3;:N3*(B $(C;g@L?!<-(B M-f$(C?M(B M-b$(C0!(B $(C>n62(B
$(C@[?k@;(B $(CGO4B0!8&(B $(C:<(B $(C<v(B $(C@V@>4O4Y(B.
C-f$(C?M(B C-b, M-f$(C?M(B M-b$(C@G(B $(C@/;g<:?!(B $(C@/@GGO=J=C?@(B. $(C4k:N:P(B Meta $(C9.@Z4B(B
$(C>p>n0!(B $(CA$@GGO4B(B $(C4\@'(B($(C398;(B, $(C9.@e(B, $(C4\6t(B)$(C@G(B $(C@[5??!(B $(C;g?k5G0m(B $(CA&>n(B
$(C9.@Z4B(B $(CFmA}GO4B(B $(C0M0z4B(B $(C0|0h>x4B(B $(C1b:;(B $(C4\@'(B($(C9.@Z(B, $(CAY(B $(C5n5n(B)$(C?!(B
$(C@[5?GU4O4Y(B.
$(C4Y@=@:(B $(CAY0z(B $(C9.@e(B $(C;g@L?!(B $(C@{?k5G4B(B $(C@/;g<:@T4O4Y(B: C-a$(C?M(B C-e$(C4B(B $(CAY@G(B
$(C=C@[@L3*(B $(C3!@87N(B $(C?rAw@L0m(B, M-a$(C?M(B M-e$(C4B(B $(C9.@e@G(B $(C=C@[@L3*(B $(C3!@87N(B
$(C?rAw@T4O4Y(B.
>> C-a$(C8&(B $(C5N<<9x(B $(CD#(B $(CHD(B C-e$(C8&(B $(C5N<<9x(B $(CCD(B $(C:8=J=C?@(B.
M-a$(C8&(B $(C5N<<9x(B $(CD#(B $(CHD(B M-e$(C8&(B $(C5N<<9x(B $(CCD(B $(C:8=J=C?@(B.
C-a$(C4B(B $(C5N(B $(C9x(B $(C@L;s(B $(C9]:9GX55(B $(C>F9+71(B $(C@[?k@;(B $(CGOAv(B $(C>JAv88(B M-a$(C4B(B $(CGQ(B $(C9.@e@;(B
$(C4u(B $(C5Z7N(B $(C?rAw@L4B(B $(C0M?!(B $(C@/@GGO=J=C?@(B. $(C@L4B(B $(C:q7O(B $(C@/;g<:@:(B $(C>F4OAv88(B
$(C4g?,GQ(B $(C;g=G7N(B $(C?)0\A}4O4Y(B.
$(C9.<-?!(B $(C@V4B(B $(C1t9Z@L@G(B $(C@'D!4B(B "$(CA!(B(point)"$(C@L6s0m(B $(C:N8(4O4Y(B. $(C:N?,GO@Z8i(B,
$(C1t9Z@L4B(B $(CH-8i;s?!<-(B, $(C9.<-(B $(C3;?!(B $(CA!@L(B $(C>n5p?!(B $(C@'D!GO0m(B $(C@V4B0!8&(B
$(C:8?)A]4O4Y(B.
$(C4Y@=@:(B $(C398;0z(B $(C9.@e(B $(C4\@'@G(B $(C@L5?@;(B $(CFwGTGQ(B $(C4\<xGQ(B $(C1t9Z@L(B $(C@L5?(B $(C@[5?@;(B
$(C?d>`GO?4@>4O4Y(B.
C-f $(CGQ(B $(C9.@Z(B $(C>UBJ@87N(B $(C?rAw@N4Y(B
C-b $(CGQ(B $(C9.@Z(B $(C5^BJ@87N(B $(C?rAw@N4Y(B
M-f $(CGQ(B $(C4\>n(B $(C>UBJ@87N(B $(C?rAw@N4Y(B
M-b $(CGQ(B $(C4\>n(B $(C5^BJ@87N(B $(C?rAw@N4Y(B
C-n $(C>U(B $(CAY7N(B $(C?rAw@N4Y(B
C-p $(C5^(B $(CAY7N(B $(C?rAw@N4Y(B
C-a $(CAY@G(B $(C=C@[@87N(B $(C?rAw@N4Y(B
C-e $(CAY@G(B $(C3!@87N(B $(C?rAw@N4Y(B
M-a $(C9.@e@G(B $(C=C@[@87N(B $(C?rAw@N4Y(B
M-e $(C9.@e@G(B $(C3!@87N(B $(C?rAw@N4Y(B
>> $(C@L(B $(C8p5g(B $(C8m7I@;(B $(C8n(B $(C9x(B $(C?,=@GX(B $(C:8=J=C?@(B. $(C@L(B $(C8m7I5i@:(B $(C0!@e(B $(C@ZAV(B
$(C;g?k5G4B(B $(C8m7I5i@T4O4Y(B.
$(C1t9Z@L8&(B $(C?rAw@L4B(B $(C4Y8%(B $(C5N0!Av(B $(CA_?dGQ(B $(C8m7I@:(B $(C@|(B $(C9.<-@G(B $(C=C@[@87N(B
$(C?rAw@L4B(B M-< (Meta$(C<h(B $(C4u@[@=(B $(C1[<h(B)$(C?M(B $(C@|(B $(C9.<-@G(B $(C3!@87N(B $(C?rAw@L4B(B M->
(Meta$(C<h(B $(C4uE-(B $(C1[<h(B)$(C@T4O4Y(B.
>> M-<$(C8&(B $(CAv1](B $(CCD<-(B $(CAvD'<-@G(B $(C=C@[@87N(B $(C?rAw?)(B $(C:8=J=C?@(B. $(C1W8.0m4B(B C-v$(C8&(B
$(C9]:9GX<-(B $(C4Y=C(B $(C?)1b7N(B $(C59>F(B $(C?@=J=C?@(B.
>> M->$(C8&(B $(CCD<-(B $(CAvD'<-@G(B $(C3!@87N(B $(C0!=J=C?@(B. $(C1W8.0m4B(B M-v$(C8&(B $(C9]:9GX<-(B $(C4Y=C(B
$(C?)1b7N(B $(C59>F(B $(C?@=J=C?@(B.
$(C4\8;1b?!(B $(CH-;lG%(B $(C1[<h0!(B $(C@V@88i(B $(CH-;lG%(B $(C1[<h8&(B $(C=a<-(B $(C1t9Z@L8&(B $(C?rAw@O(B $(C<v55(B
$(C@V@>4O4Y(B. $(C4Y@=0z(B $(C00@:(B $(C<<0!Av(B $(C@L@/7N(B C-b, C-f, C-n $(C1W8.0m(B C-p$(C8&(B $(C>24B(B
$(C0M@;(B $(C1G@eGU4O4Y(B. $(CC9B07N(B, $(C@L5i@:(B $(C8p5g(B $(CA>7y@G(B $(C4\8;1b?!<-(B $(C;g?kGR(B $(C<v(B
$(C@V@>4O4Y(B. $(C5QB07N(B, $(C@O4\(B Emacs$(C8&(B $(C>24B(B $(C0M?!(B $(C@M<wGX(B $(CAv8i(B, $(C@L71(B $(CA&>n(B
$(C9.@Z@;(B $(CD!4B(B $(C0M@L(B $(CH-;lG%(B $(C1[<h8&(B $(CD!4B(B $(C0M:84Y(B $(CHN>@(B $(C:|8#4Y4B(B $(C0M@;(B $(C>K0T(B $(C5I(B
$(C0M@T4O4Y(B ($(CE8@Z(B $(C@'D!?!<-(B $(C<U@;(B $(C8V8.(B $(C?rAw@O(B $(CGJ?d0!(B $(C>x1b(B $(C6'9.?!(B). $(C<BB07N(B,
$(C@O4\(B $(C@L71(B $(CA&>n(B $(C9.@Z(B $(C8m7I@;(B $(C>24B(B $(C=@0|@L(B $(C5i8i(B $(C1t9Z@L8&(B $(C?rAw@L4B(B $(C4Y8%(B
$(C0m1^(B $(C8m7I5i55(B $(C=10T(B $(C9h?o(B $(C<v(B $(C@V@>4O4Y(B.
$(C4k:N:P@G(B Emacs $(C8m7I?!4B(B $(C<}@Z(B $(C@N<v8&(B $(CA$GXAY(B $(C<v(B $(C@V@>4O4Y(B; $(C@L4B(B $(C4k:N:P(B,
$(C8m7I@G(B $(C9]:9(B $(CH=<v8&(B $(CA$GX(B $(CA]4O4Y(B. $(C@L780T(B $(C8m7I?!(B $(C9]:9(B $(CH=<v8&(B $(CA$GXAV4B(B
$(C9f9}@:(B $(C8m7I@;(B $(CD!1b(B $(C@|?!(B C-u$(C?M(B $(C<}@Z8&(B $(CD!4B(B $(C0M@87N(B $(C@L7g>nA}4O4Y(B. META$(C<h(B
($(CH$@:(B EDIT$(C<h3*(B $(C13C<<h(B)$(C0!(B $(C@V@88i(B $(C4Y8%(B $(C9f9}@87N(B $(C<}@Z(B $(C@N<v8&(B $(C@T7BGR(B $(C<v(B
$(C@V@>4O4Y(B: MEAT$(C<h8&(B $(C4)8%(B $(CC$(B $(C<}@Z8&(B $(CD!=J=C?@(B. C-u $(C9f9}@:(B $(C>n62(B
$(C4\8;1b?!<-55(B $(C;g?kGR(B $(C<v(B $(C@V1b(B $(C6'9.?!(B $(C@L8&(B $(C;g?kGO1b(B $(C9Y6x4O4Y(B.
$(C?98&(B $(C5i>n(B, C-u 8 C-f$(C4B(B $(C9.@Z(B $(C?)4|03@G(B $(C>UBJ@87N(B $(C?rAw@T4O4Y(B.
>> $(CGQ(B $(C9x@G(B $(C8m7I@87N(B $(C1t9Z@L0!(B $(C@L(B $(CAY(B $(C1YC3?!(B $(C?@557O(B, $(C<}@Z(B $(C@N<v0!(B $(CAV>nAx(B
C-n $(CH$@:(B C-p$(C8&(B $(C=C55GX(B $(C:8=J=C?@(B.
$(C4k:N:P@G(B $(C8m7I5i@:(B $(C<}@Z(B $(C@N<v8&(B $(C9]:9(B $(CH=<v7N(B $(C;g?kGOAv88(B $(C0f?l?!(B $(C5{6s<-4B(B
$(C?9?\@{@N(B $(C8m7I5i@L(B $(C4Y8%(B $(C?k557N(B $(C>5(B $(C<v(B $(C@V@>4O4Y(B. C-v$(C?M(B M-v$(C4B(B $(C@L71(B $(C?9?\?!(B
$(C<SGU4O4Y(B. $(C@N<v8&(B $(CAV8i(B $(C1W(B $(C88E-@G(B $(CH-8i(B $(C<v8&(B $(C5N7g8;1b(B $(CGOAv(B $(C>J0m(B $(C1W(B
$(C88E-@G(B $(CAY@;(B $(CH-8i@G(B $(C@'3*(B $(C>F7!7N(B $(C5N7g8;1b(B $(CGU4O4Y(B. $(CAo(B, C-u 4 C-v$(C4B(B
$(CH-8i@;(B 4 $(CAY(B $(C88E-(B $(C5N7g8;1b(B $(CGU4O4Y(B.
>> $(C@LA&(B C-u 8 C-v$(C8&(B $(CCD(B $(C:8=J=C?@(B.
$(C@L7N<-(B $(CH-8i@:(B 8 $(CAY@L(B $(C@'7N(B $(C5N7g8;1b(B $(C5F@;(B $(C0M@T4O4Y(B. $(C4Y=C(B $(C9X@87N(B
$(C5N7g8;1b(B $(CGO1b(B $(C@'GX<-4B(B $(C@N<v8&(B M-v$(C?!(B $(CA]4O4Y(B.
X Windows$(C8&(B $(C>5(B $(C0f?l?!4B(B Emacs $(CC"@G(B $(C?^Fm?!(B $(C5N7g8;1b(B $(C874k6s0m(B $(C:R8.?l4B(B
$(C1b4Y6u(B $(C;g0"G|(B $(C8p>g@G(B $(CEM0!(B $(C@V@;(B $(C0M@T4O4Y(B. $(C@L(B $(C5N7g8;1b(B $(C874k?!(B $(C4Y6wAc8&(B
$(C5~1oGT@87N=a(B $(C1[?y@;(B $(C5N7g8;1b(B $(CGR(B $(C<v(B $(C@V@>4O4Y(B.
>> $(C5N7g8;1b(B $(C874k(B $(C3;?!<-(B $(C4+?!(B $(C6g4B(B $(C:N:P@G(B $(C2@4k1b8&(B $(CA_0#(B $(C4\C_7N(B $(C4-7/(B
$(C:8=J=C?@(B. $(C1W7/8i(B $(C1[?y@:(B $(C4Y6wAc7N(B $(C4)8%(B $(C@'D!?!(B $(C5{8%(B $(C>g(B $(C88E-@G(B $(C@'D!8&(B
$(C@'3*(B $(C>F7!7N(B $(C5N7g8;1b(B $(C5I(B $(C0M@T4O4Y(B.
>> $(C4Y6wAc8&(B $(CA_0#(B $(C4\C_0!(B $(C4-7/Ax(B $(C;sEB?!<-(B $(C@'3*(B $(C>F7!7N(B $(C?rAw?)(B $(C:8=J=C?@(B.
$(C1W7/8i(B $(C1[?y@L(B $(C4Y6wAc0!(B $(C?rAw@L4B4k7N(B $(C@'3*(B $(C>F7!7N(B $(C5N7g8;1b(B $(C5I(B
$(C0M@T4O4Y(B.
* EMACS$(C@G(B $(C@[5?@L(B $(C4\@}5I(B $(C6'(B
--------------------------
$(C8m7I@;(B $(CAV>n55(B Emacs$(C0!(B $(C9]@@@;(B $(CGOAv(B $(C>J@;(B $(C6'4B(B C-g$(C8&(B $(CCD<-(B Emacs$(C@G(B $(C@[5?@;(B
$(C>H@|GO0T(B $(CA$Av=CE3(B $(C<v(B $(C@V@>4O4Y(B. C-g$(C4B(B $(C=GG`GO4B5%(B $(C3J9+(B $(C?@7#(B $(C=C0#@L(B
$(C0I8.4B(B $(C8m7I@;(B $(CA_Av=CE3(B $(C6'?!(B $(C;g?k5I(B $(C<v(B $(C@V@>4O4Y(B.
C-g$(C4B(B $(C<}@Z(B $(C@N<v8&(B $(C9+=CGX(B $(C9v81(B $(C6'3*(B $(C>n62(B $(C8m7I@;(B $(C=C@[GO?4Av88(B $(C=GG`=CE00m(B
$(C=MAv(B $(C>J@;(B $(C6'?!55(B $(C;g?k5I(B $(C<v(B $(C@V@>4O4Y(B.
>> C-u 100$(C@;(B $(CCD<-(B $(C<}@Z(B $(C@N<v8&(B 100$(C@87N(B $(CGO0m(B $(C3-(B $(CHD(B C-g$(C8&(B $(CCD(B
$(C:8=J=C?@(B. $(C1W8.0m(B $(C3*<-(B C-f$(C8&(B $(CD(4O4Y(B. $(C@N<v4B(B C-g$(C7N=a(B $(C>x>]@=@87N(B $(CGQ(B
$(C9.@Z88(B $(C>U@87N(B $(C?rAw?)>_(B $(CGU4O4Y(B.
* $(C9+4I(B $(C8m7I(B
-----------
$(C>n62(B Emacs $(C8m7I@:(B "$(CGc?k5GAv(B $(C>J>F<-(B"(disabled) $(CCJ:8@Z0!(B $(C@_8x(B $(C;g?kGOAv(B
$(C>J557O(B $(C5G>n(B $(C@V@>4O4Y(B.
$(C@L71(B $(C9+4I(B $(C8m7I@;(B $(C>28i(B, Emacs$(C4B(B $(C@L(B $(C8m7I@L(B $(C9+>y@L>z@88g(B, $(C@L(B $(C8m7I@;(B $(C1W3I(B
$(C1W4k7N(B $(C=GG`GR(B $(C0M@NAv8&(B $(C90>n(B $(C:84B(B $(C>K828;@;(B $(CH-8i(B $(CG%=CGU4O4Y(B.
$(C?x7!0!(B $(C@L(B $(C8m7I@;(B $(C>20m@Z(B $(CGO?44Y8i(B, $(C90@=?!(B $(C4kGX(B $(C;g@L(B $(C9.@Z(B(Space)$(C8&(B $(CCD<-(B
$(C4dGO=J=C?@(B. $(C:8Ek@:(B $(C9+4I(B $(C8m7I@;(B $(C=GG`=CE0Av(B $(C>J1b(B $(C@'GX(B $(C90@=?!(B "n"$(C@87N(B
$(C4dGU4O4Y(B.
>> <ESC> : ($(C9+4I(B $(C8m7I@G(B $(CGO3*@T4O4Y(B)$(C@;(B $(CD#(B $(CHD(B n$(C@87N(B $(C90@=?!(B $(C4dGO=J=C?@(B.
* $(CC"(B
----
Emacs$(C4B(B $(C?)7/(B $(CC"@;(B $(C0!Az(B $(C<v(B $(C@V@88g(B $(C0"0"@:(B $(C5{7N(B $(C9.<-8&(B $(CH-8i(B $(CG%=CGU4O4Y(B.
$(C4YA_(B $(CC"@;(B $(C>24B(B $(C9f9}?!(B $(C4kGX<-4B(B $(C3*A_?!(B $(C<38mGO1b7N(B $(CGU4O4Y(B. $(CAv1]4B(B
$(C4Y8%(B $(CC"@;(B $(C>x>V0m(B $(C?x7!?!(B $(C@V4x(B $(CC"(B $(CGO3*7N(B $(C59>F0!(B $(CFmA}@;(B $(C0h<SGO4B(B $(C9f9}88@;(B
$(C<38mGU4O4Y(B. $(C0#4\GU4O4Y(B:
C-x 1 $(CC"@;(B $(CGO3*7N(B $(C885i1b(B ($(CAo(B, $(C4Y8%(B $(CC"5i@;(B $(C>x>[4O4Y(B).
$(C@L(B $(C0M@:(B $(CA&>n9.@Z(B-x $(C4Y@=?!(B $(C<}@Z(B $(C1[<h(B 1$(C@T4O4Y(B. C-x 1$(C@:(B $(C1t9Z@L0!(B $(C@V4B(B
$(CC"@;(B $(CH.@eGX<-(B $(C@|C<(B $(CH-8i@;(B $(C>2557O(B $(CGU4O4Y(B. $(C4Y8%(B $(CC"5i@:(B $(CAv?vA}4O4Y(B.
>> $(C1t9Z@L8&(B $(C@L(B $(CAY7N(B $(C?rAw@N(B $(CHD(B C-u 0 C-l$(C@;(B $(CD!=J=C?@(B.
>> $(CA&>n9.@Z(B-h k $(CA&>n9.@Z(B-f$(C8&(B $(CD!=J=C?@(B.
$(CA&>n9.@Z(B-f $(C8m7I?!(B $(C4kGQ(B $(C9.<-H-8&(B $(CH-8i(B $(CG%=CGO1b(B $(C@'GX(B $(C;u(B $(CC"@L(B
$(C3*E83*8i<-(B $(C@L(B $(CC"@L(B $(C>n6;0T(B $(CAY>n(B $(C5e4B0!8&(B $(C0|B{GO=J=C?@(B.
>> C-x 1$(C@;(B $(CCD<-(B $(C9.<-H-(B $(C8q7O(B $(C@[<:(B $(CC"@L(B $(C>n6;0T(B $(C;g6sAv4B0!8&(B $(C:8=J=C?@(B.
$(C@L(B $(C8m7I@:(B $(C5N(B $(C9.@Z7N(B $(C18<:5G>n(B $(C@V4Y4B(B $(CA!?!<-(B $(CAv1]1nAv(B $(C9h?n(B $(C4Y8%(B $(C8m7I5i0z(B
$(C4Y8(4O4Y(B. $(C=C@[@:(B $(CA&>n9.@Z(B-x$(C7N(B $(CGU4O4Y(B. $(CA&>n9.@Z(B-x$(C7N(B $(C=C@[GO4B(B $(C8m7I5i@:(B
$(C9+C4(B $(C89@>4O4Y(B; $(C1W71(B $(C89@:(B $(C8m7I5i@:(B $(CC"@L3*(B $(CFD@O(B, $(C;g@LD-(B(buffer) $(C3;Av4B(B
$(C1W71(B $(C0M0z(B $(C?,0|<:@L(B $(C@V4B(B $(C8m7I5i@T4O4Y(B. $(C@L71(B $(C8m7I5i@:(B $(C5Q(B, $(C<B(B $(CH$@:(B
$(C3W03@G(B $(C9.@Z8&(B $(C>94O4Y(B.
* $(C3"?l1b?M(B $(CAv?l1b(B
-----------------
$(C1[?y@;(B $(C3"?l1b(B $(C@'GX<-4B(B $(C1W(B $(C1[?y@;(B $(CE8@ZD!8i(B $(C5K4O4Y(B. A, 7, *, $(C5n5n0z(B
$(C00@L(B, $(C:<(B $(C<v(B $(C@V4B(B $(C9.@Z5i@:(B Emacs$(C0!(B $(C1[?y7N(B $(C@N=DGO?)(B $(CAo0"(B $(C3"?s4O4Y(B.
<Return>($(C:91M<h(B)$(C8&(B $(CD!8i(B $(C;uAY(B $(C9.@Z0!(B $(C3"?vA}4O4Y(B.
<Delete>$(C8&(B $(CD!8i(B $(C86Av87@87N(B $(C@T7B5H(B $(C9.@Z0!(B $(CAv?vA}4O4Y(B. <Delete>$(C4B(B
$(C1[<hFG?!(B "Del"$(C@L6s0m55(B $(C@L8'G%0!(B $(C4^7A(B $(C@V@>4O4Y(B. $(C>n62(B $(C0f?l?!4B(B
"Backspace" $(C1[<h0!(B <Delete>$(C@G(B $(C?*GR@;(B $(CGO1b55(B $(CGOAv88(B $(CGW;s(B $(C1W78Av4B(B
$(C>J@>4O4Y(B!
$(CA;(B $(C4u(B $(C@O9]@{@87N(B, <Delete>$(C4B(B $(C1t9Z@L(B $(CGv@'D!@G(B $(C9Y7N(B $(C@|?!(B $(C@V4B(B $(C9.@Z8&(B
$(CAv?s4O4Y(B.
>> $(C1W(B $(C0M@;(B $(CGX(B $(C:8=J=C?@(B--$(C8n8n(B $(C9.@Z8&(B $(CD#(B $(CHD(B <Delete>$(C8&(B $(CCD<-(B
$(CAv?v:8=J=C?@(B. $(C@L(B $(CFD@O@L(B $(C:/0f5G4B(B $(C0M?!(B $(C4kGQ(B $(C0FA$@:(B $(CGOAv(B $(C>J>F55(B
$(C5K4O4Y(B; $(C@86d(B $(CAvD'<-4B(B $(C:/0f5GAv(B $(C>J@>4O4Y(B. $(C@L(B $(CFD@O@:(B $(C@86d(B $(CAvD'<-@G(B
$(C03@N?k(B $(C:9;g:;@T4O4Y(B.
$(C1[?y@L(B $(CH-8i@G(B $(CGQ(B $(CAY?!(B $(C4Y(B $(C5i>n0!Av(B $(C8xGR(B $(CA$557N(B $(CD?Av8i(B $(C1[?y@G(B $(CAY@:(B
$(CH-8i@G(B $(C5N9xB0(B $(CAY?!<-(B "$(C0h<S(B"$(C5K4O4Y(B. $(C?@8%BJ(B $(CGQ0h?!(B $(C@V4B(B $(C?*;g<1(B $(C9.@Z(B
("\")$(C4B(B $(CAY@L(B $(C4Y@=(B $(CAY7N(B $(C@L>nAv4B(B $(C0M@;(B $(C0!8.E54O4Y(B.
>> $(C1[?y@;(B $(C0h<S(B $(C3"?v<-(B $(C?@8%BJ(B $(CGQ0h8&(B $(C3Q>n<-557O(B $(CGO=J=C?@(B. $(C1W7/8i(B $(CAY(B
$(C0h<S(B $(CG%=C0!(B $(C3*E83/(B $(C0M@T4O4Y(B.
>> <Delete>$(C8&(B $(C=a<-(B $(C1[?y@G(B $(CAY@L(B $(CGQ(B $(CH-8i(B $(CAY?!(B $(C2K(B $(CBw557O(B $(C4Y=C(B
$(CAv?l=J=C?@(B. $(CAY(B $(C0h<S(B $(CG%=C4B(B $(C>x>nA}4O4Y(B.
$(C;uAY(B $(C9.@Z55(B $(C4Y8%(B $(C9.@ZC373(B $(CAv?o(B $(C<v(B $(C@V@>4O4Y(B. $(CAY@;(B $(C5Q7N(B $(C3*4)4B(B $(C;uAY(B
$(C9.@Z8&(B $(CAv?l8i(B $(C5N(B $(CAY@L(B $(CGO3*7N(B $(CGUD!0T(B $(C5K4O4Y(B. $(C@L(B $(CGUD#(B $(CAY@L(B $(C3J9+(B $(C1f>n<-(B
$(CH-8i@G(B $(C3J:q8&(B $(C3Q>n<-8i(B $(C1W(B $(CAY@:(B $(CAY(B $(C0h<S(B $(C9.@Z0!(B $(CG%=C5G8i<-(B $(C4Y@=(B $(CAY?!(B
$(C0h<S(B $(CH-8i(B $(CG%=C5I(B $(C0M@T4O4Y(B.
>> $(C1t9Z@L8&(B $(CAY@G(B $(C=C@[@87N(B $(C?rAw?)<-(B <Delete>$(C8&(B $(CD!=J=C?@(B. $(C1W7/8i(B $(C1W(B
$(CAY@L(B $(C@L@|(B $(CAY0z(B $(CGUCDAz(B $(C0M@T4O4Y(B.
>> $(C4Y=C(B <Return>$(C@;(B $(CCD<-(B $(CAv?vAx(B $(C;uAY(B $(C9.@Z8&(B $(C3"?l=J=C?@(B.
$(C4k:N:P@G(B Emacs $(C8m7I?!4B(B $(C9]:9(B $(CH=<v8&(B $(CAY(B $(C<v(B $(C@V4Y4B(B $(C0M@;(B $(C1b>oGO=J=C?@(B;
$(C1[?y(B $(C9.@Z55(B $(CGX4g5K4O4Y(B. $(C1[?y(B $(C9.@Z8&(B $(C9]:9GO4B(B $(C0M@:(B $(C1W(B $(C0M@;(B $(C?)7/9x(B
$(C3"?l4B(B $(C0M@T4O4Y(B.
>> $(C1W(B $(C0M@;(B $(CAv1](B $(CGX(B $(C:>4O4Y(B -- C-u 8 *$(C@;(B $(CCD<-(B ********$(C@;(B $(C3"?l=J=C?@(B.
$(C@LA&(B Emacs$(C?!<-(B $(C9+>p0!8&(B $(CD!0m(B $(CBx?@8&(B $(C13A$GO4B(B $(C0!@e(B $(C1b:;@{@N(B $(C9f9}@;(B
$(C9h?|@>4O4Y(B. $(C398;@L3*(B $(CAY55(B $(CGQ9x?!(B $(CAv?o(B $(C<v(B $(C@V@>4O4Y(B. $(C?)1b?!(B $(CAv?l4B(B
$(C@[5?@;(B $(C?d>`GU4O4Y(B.
<Delete> $(C1t9Z@L(B $(CAw@|@G(B $(C9.@Z(B $(CAv?l1b(B
C-d $(C1t9Z@L(B $(C4Y@=@G(B $(C9.@Z(B $(CAv?l1b(B
M-<Delete> $(C1t9Z@L(B $(CAw@|@G(B $(C398;(B $(CAW@L1b(B
M-d $(C1t9Z@L(B $(C4Y@=@G(B $(C398;(B $(CAW@L1b(B
C-k $(C1t9Z@L(B $(C@'D!7N:NEM(B $(CAY(B $(C3!1nAv(B $(CAW@L1b(B
M-k $(CGv@g(B $(C9.@e@G(B $(C3!1nAv(B $(CAW@L1b(B
C-f$(C?M(B M-f$(C?!<-(B $(C=C@[GQ(B $(C@/;g<:@L(B <Delete>$(C?M(B C-d $(C1W8.0m(B M-<Delete>$(C?M(B M-d$(C7N(B
$(C@L>nAv4B(B $(C0M@;(B $(C@/@GGO=J=C?@(B (<Delete>$(C4B(B $(CAxA$GQ(B $(CA&>n(B $(C9.@Z4B(B $(C>F4OAv88(B
$(C1W715%?!(B $(C;s3dGOAv(B $(C>J557O(B $(CGU=C4Y(B). $(CAY0z(B $(C9.@e@L(B $(C4Y8#5m@L(B C-k$(C?M(B M-k$(C4B(B
C-e$(C?M(B M-e$(C?M(B $(C4Y8(4O4Y(B.
$(CGQ(B $(C9.@Z(B $(C@L;s@;(B $(CGQ(B $(C9x?!(B $(CAv?l8i(B Emacs$(C4B(B $(CAv?vAx(B $(C1[?y@;(B $(C0%9+8.(B(save)$(CGX<-(B
$(C4Y=C(B $(C;g?kGR(B $(C<v(B $(C@V557O(B $(CGU4O4Y(B. $(CAW?)Ax(B $(C1[?y@;(B $(C4Y=C(B $(C;g?kGO4B(B $(C0M@;(B
"$(C@b>F4g1b1b(B(yanking)"$(C6s0m(B $(CGU4O4Y(B. $(CAW?)Ax(B $(C1[?y@:(B $(CAW@N(B $(C1W(B $(C0w?!<-(B
$(C@b>F4g1f(B $(C<v55(B $(C@V0m(B $(C4Y8%(B $(C0w?!<-(B $(C@b>F4g1f(B $(C<v55(B $(C@V@>4O4Y(B. $(CA_:95H(B
$(C:9;g:;@;(B $(C885i1b(B $(C@'GX<-(B $(C1W(B $(C1[?y@;(B $(C?)7/9x(B $(C@b>F4g1f(B $(C<v55(B $(C@V@>4O4Y(B.
$(C@b>F4g1b@G(B $(C8m7I@:(B C-y$(C@T4O4Y(B.
"$(CAW?)Ax(B" $(C0M@:(B $(C4Y=C(B $(C@b>F4g1f(B $(C<v(B $(C@VAv88(B "$(CAv?vAx(B" $(C0M@:(B $(C1W72(B $(C<v(B $(C>x4Y4B(B
$(CA!?!<-(B "$(CAW@L1b(B"$(C?M(B "$(CAv?l1b(B"$(C@G(B $(CBw@LA!@L(B $(C@V@=@;(B $(C@/@GGO=J=C?@(B.
$(C@O9]@{@87N(B, $(CGQ03@G(B $(C9.@Z3*(B $(C:s(B $(CAY(B $(CH$@:(B $(C:s(B $(C0x0#@;(B $(CAv?l4B(B $(C8m7I5i@:(B $(CAv?vAx(B
$(C1[?y@L(B $(C0%9+8.5GAv(B $(C>J4B(B $(C9]8i?!(B $(C89@:(B $(C1[?y@;(B $(C>x>V4B(B $(C8m7I5i@:(B $(C1W(B $(C1[?y@L(B
$(C0%9+8.5K4O4Y(B.
>> $(C1t9Z@L8&(B $(C:q>nA.(B $(C@VAv(B $(C>J@:(B $(CAY@G(B $(C=C@[@87N(B $(C?rAw@L=J=C?@(B. $(C1W8.0m4B(B
C-k$(C8&(B $(CCD<-(B $(C1W(B $(CAY@G(B $(C1[?y@;(B $(CAW@L=J=C?@(B.
>> C-k$(C8&(B $(C4Y=C(B $(CD!=J=C?@(B. $(C1W7/8i(B $(C1W(B $(CAY(B $(C4Y@=?!(B $(C@V4B(B $(C;uAY(B $(C9.@Z0!(B $(CAW?)Av4B(B
$(C0M@;(B $(C:<(B $(C<v(B $(C@V@>4O4Y(B.
C-k$(C8&(B $(CGQ(B $(C9x(B $(CD!8i(B $(C1W(B $(CAY@G(B $(C3;?k@;(B $(CAW@L0m(B $(C5N9xB0?!4B(B $(C1W(B $(CAY(B $(C@ZC<8&(B
$(CAW@S@87N<-(B $(C@L>nAv4B(B $(C8p5g(B $(CAY@;(B $(C@'7N(B $(C?C834O4Y(B. C-k$(C4B(B $(C<}@Z(B $(C@N<v8&(B $(CF/:0Hw(B
$(CCk1^GU4O4Y(B: $(C1W(B $(C<}@Z88E-@G(B $(CAY0z(B $(C1W(B $(CAY@G(B $(C3;?k@;(B $(CGT22(B $(CAW@T4O4Y(B. $(C@L0M@:(B
$(C4\<xGQ(B $(C9]:9@L(B $(C>F4U4O4Y(B. C-u 2 C-k$(C4B(B $(C5N(B $(CAY0z(B $(C1W(B $(CAY@G(B $(C;uAY(B $(C9.@Z8&(B
$(CAW@T4O4Y(B; C-k$(C8&(B $(C5N(B $(C9x(B $(CD!8i(B $(C1W78Av(B $(C>J@>4O4Y(B.
$(CCV1Y?!(B $(CAW?)Ax(B $(C1[?y@;(B $(CH8<vGX<-(B $(CGv@g(B $(C1t9Z@L0!(B $(C@V4B(B $(C@'D!?!(B $(C5N1b(B $(C@'GX<-4B(B
C-y$(C8&(B $(CD(4O4Y(B.
>> $(CGX(B $(C:8=J=C?@(B; C-y$(C8&(B $(CCD<-(B $(C1[?y@;(B $(C4Y=C(B $(C@b>F4g1b=J=C?@(B.
$(C4)1:0!0!(B $(C;/>F0#(B $(C0M@;(B $(C4Y=C(B $(C@b>F(B $(C4g1b4B(B $(C0MC373(B C-y$(C8&(B $(C;}0"GO=J=C?@(B. $(CGQ(B
$(C0!7ND-?!<-(B C-k$(C8&(B $(C?)7/9x(B $(C>28i(B $(CAW?)Ax(B $(C1[?y5i@L(B $(CGT22(B $(C0%9+8.5G>n(B $(C1W(B $(CAY(B
$(C8p5N8&(B C-y $(CGQ(B $(C9x@87N(B $(C@b>F4g1f(B $(C<v(B $(C@V4Y4B(B $(C0M?!(B $(C@/@GGO=J=C?@(B.
>> C-k$(C8&(B $(C?)7/9x(B $(CCD<-(B $(C1W(B $(C0M@;(B $(CGX(B $(C:8=J=C?@(B.
$(CAW?)Ax(B $(C1[?y@;(B $(CH8<vGO1b(B $(C@'GX<-4B(B:
>> C-y$(C8&(B $(CD!=J=C?@(B. $(C1W8.0m4B(B $(C1t9Z@L8&(B $(C8n(B $(CAY(B $(C>F7!7N(B $(C?rAw?)<-(B C-y$(C8&(B $(C4Y=C(B
$(CD!=J=C?@(B. $(C1[?y@L(B $(C>n6;0T(B $(C:9;g5G4B0!8&(B $(C>K(B $(C<v(B $(C@V@>4O4Y(B.
$(C4Y=C(B $(C@b>F4g1f(B $(C1[?y@L(B $(C@V4B5%(B $(C4Y8%(B $(C0M@;(B $(C6G(B $(CAW@L8i(B $(C>n6;0T(B $(C5G0Z@>4O1n(B?
C-y$(C4B(B $(C4u(B $(CCV1Y?!(B $(CAW?)Ax(B $(C0M@;(B $(C@b>F4g1f(B $(C0M@T4O4Y(B. $(C1W7/3*(B $(C1W(B $(C@|@G(B $(C1[?y@:(B
$(C@R>n9v80(B $(C0M@L(B $(C>F4U4O4Y(B. $(C1W(B $(C0M@:(B M-y $(C8m7I@;(B $(C=a<-(B $(CH8<vGR(B $(C<v(B $(C@V@>4O4Y(B.
$(C0!@e(B $(CCV=E?!(B $(CAW?)Ax(B $(C1[?y@;(B C-y$(C7N(B $(CH8<vGQ(B $(CHD(B M-y$(C8&(B $(CD!8i(B $(C1W(B $(C@b>F4g0\A34x(B
$(C1[?y@L(B $(C1W(B $(C@|?!(B $(CAW?)Ax(B $(C0M@87N(B $(C;u7N9Y2n>nA}4O4Y(B(replace). M-y$(C8&(B $(CC$Bw(B
$(C?,0EG*(B $(CD!8i(B $(C@L@|?!(B $(CAW?)Ax(B $(C0M5i@L(B $(CBw7J7N(B $(C3*?I4O4Y(B. $(CC#0m@Z(B $(CGO4B(B $(C1[?y@L(B
$(C3*?@8i(B $(C4Y8%(B $(C@O@;(B $(CGR(B $(CGJ?d0!(B $(C>x@>4O4Y(B. $(C4\<xHw(B $(CFmA}@;(B $(C0h<SGO8i(B
$(C@b>F4g0\Ax(B $(C1[?y@L(B $(C1W0w?!(B $(C32>F(B $(C@V0T(B $(C5K4O4Y(B.
M-y$(C8&(B $(C0h<S(B $(CD!8i(B $(CCb9_A!(B ($(C0!@e(B $(CCV1Y?!(B $(CAW?)Ax(B $(C0M(B)$(C@87N(B $(C5G59>F(B $(C?I4O4Y(B.
>> $(CGQ(B $(CAY@;(B $(CAW@L0m(B $(CAV@'7N(B $(C?rAw@N(B $(CHD(B $(C4Y8%(B $(CAY@;(B $(CAW@L=J=C?@(B.
$(C1W8.0m4B(B C-y$(C7N(B $(C5N9xB0(B $(CAW?)Ax(B $(CAY@;(B $(CH8<vGO=J=C?@(B.
$(C1W71(B $(C4Y@=?!(B M-y$(C8&(B $(CD!8i(B $(CC99xB0?!(B $(CAW?)Ax(B $(CAY7N(B $(C;u7N9Y2n0T(B $(C5K4O4Y(B.
M-y$(C8&(B $(C4u(B $(CCD<-(B $(C9+>y@L(B $(C3*?@4B0!8&(B $(C:8=J=C?@(B. $(C5N9xB0(B $(CAW?)Ax(B $(CAY@L(B $(C3*?C(B
$(C6'1n4O(B $(C1W780T(B $(C0h<S(B $(CGQ(B $(CHD(B $(C8n(B $(C9x(B $(C4u(B $(CGO=J=C?@(B.
$(C?xGO8i(B, M-y$(C?!(B $(C>g<v3*(B $(C@=<v@G(B $(C@N<v8&(B $(CAY(B $(C<v(B $(C@V@>4O4Y(B.
* $(C9+8#1b(B
--------
$(C1[?y@;(B $(C:/0fGO0m<-(B $(C1W(B $(C0M@L(B $(C=G<v?4@=@;(B $(C>K0T(B $(C5G8i(B $(C9+8#1b(B(undo) $(C8m7I(B, C-x
u$(C7N(B $(C:/0f;gGW@;(B $(C9+8&(B $(C<v(B $(C@V@>4O4Y(B.
$(C:8Ek(B, C-x u$(C4B(B $(CGO3*@G(B $(C8m7I?!(B $(C@GGX(B $(C:/0f5H(B $(C;gGW@;(B $(C9+8(4O4Y(B; $(CGQ(B $(C0!7ND-?!<-(B
C-x u$(C8&(B $(C?)7/9x(B $(C9]:9GO8i(B $(C0"0"@G(B $(C9]:9@:(B $(CC_0!@{@87N(B $(C8m7I@;(B $(C9+8(4O4Y(B.
$(C1W7/3*(B $(C5N0!Av(B $(C?9?\0!(B $(C@V@>4O4Y(B: $(C1[?y@;(B $(C:/0fGOAv(B $(C>J4B(B $(C8m7I@:(B $(C0m7A(B
$(C4k;s?!<-(B $(CA&?\5K4O4Y(B ($(C?)1b?!4B(B $(C1t9Z@L8&(B $(C?rAw@L4B(B $(C8m7I0z(B $(CH-8i(B $(C5N7g8;1b(B
$(C8m7I@L(B $(C@V@>4O4Y(B). $(C1W8.0m(B $(C@ZC<3"?l1b(B(self-inserting) $(C9.@Z5i@:(B
$(CFr;s@{@87N(B 20$(C031nAv@G(B $(CA}4\@87N(B $(CC38.5K4O4Y(B. ($(C@L4B(B $(C1[?y(B $(C3"?l1b8&(B $(C9+8#1b(B
$(C@'GX<-(B $(CE8@ZGX>_(B $(CGO4B(B C-x u$(C@G(B $(C<v8&(B $(CAY@L1b(B $(C@'GT@T4O4Y(B.)
>> $(C@L(B $(CAY@;(B C-k$(C7N(B $(CAW@N(B $(CHD(B C-x u$(C8&(B $(CD!8i(B $(CAY@L(B $(C4Y=C(B $(C3*E83/(B $(C0M@T4O4Y(B.
C-_$(C4B(B $(C9+8#1b(B $(C8m7I@G(B $(C4Y8%(B $(CG|EB@T4O4Y(B; C-x u$(C?M(B $(C00@:(B $(C@[?k@;(B $(CGOAv88(B $(CGQ(B
$(C0!7ND-?!<-(B $(C?)7/9x(B $(CE8@ZGO1b?!(B $(CFmGU4O4Y(B. C-_$(C@G(B $(C4\A!@:(B, $(C>n62(B
$(C1[<hFG?!<-4B(B $(C@L(B $(C0M@;(B $(C>n6;0T(B $(CE8@ZGX>_(B $(C5G4B0!0!(B $(C:R8m7aGO4Y4B(B $(C0M@T4O4Y(B.
$(C1W7!<-(B C-x u$(C55(B $(C;g?kGR(B $(C<v(B $(C@V557O(B $(C5G>n(B $(C@V4B(B $(C0M@T4O4Y(B. $(C>n62(B
$(C4\8;1b?!<-4B(B, CONTROL$(C<h8&(B $(C4)8%(B $(C;sEB?!<-(B /$(C8&(B $(CD'@87N=a(B C-_$(C8&(B $(CD%(B $(C<v(B
$(C@V@>4O4Y(B.
C-_$(C3*(B C-x u$(C@G(B $(C<}@Z(B $(C@N<v4B(B $(C9]:9(B $(CH=<v7N(B $(C;g?k5K4O4Y(B.
* $(CFD@O(B
------
$(CFmA}GQ(B $(C1[?y@;(B $(C?518@{@87N(B $(CGO1b(B $(C@'GX<-4B(B $(CFD@O?!(B $(C3V>n(B $(C5N>n>_(B $(CGU4O4Y(B.
$(C1W780T(B $(CGOAv(B $(C>J@88i(B, Emacs$(C0!(B $(C>x>nA|0z(B $(CGT22(B $(C1[?y55(B $(C;g6sA}4O4Y(B. $(C1[?y@;(B
$(CFD@O?!(B $(C3V1b(B $(C@'GX<-4B(B $(C1W7/1b(B $(C@|?!(B $(C1W(B $(CFD@O@;(B "$(CC#>F>_(B" $(CGU4O4Y(B. ($(C@L4B(B
$(CFD@O@;(B "$(C9f9.GO4B(B $(C0M(B"$(C@L6s0m55(B $(CGU4O4Y(B.)
$(CFD@O@;(B $(CC#4B4Y4B(B $(C0M@:(B Emacs $(C>H?!<-(B $(C1W(B $(CFD@O@G(B $(C3;?k@;(B $(C:;4Y4B(B $(C0M@;(B
$(C@G9LGU4O4Y(B. $(C?)7/0!Av(B $(C8i?!<-(B, $(C1W0M@:(B $(C1W(B $(CFD@O(B $(C@ZC<8&(B $(CFmA}GO7A4B(B $(C0M0z(B
$(C4Y8'>x@>4O4Y(B. $(C1W7/3*(B, Emacs$(C7N(B $(C:/0fGQ(B $(C;gGW@:(B $(C1W(B $(CFD@O@;(B "$(C0%9+8.(B"$(CGO1b(B
$(C@|1nAv4B(B $(C?518@{@LAv(B $(C8xGU4O4Y(B. $(C@L4B(B $(C@}9]Bk(B $(C:/0f5H(B $(CFD@O@;(B $(C?xD!(B $(C>J0T(B
$(C?n?5(B $(CC<0h?!(B $(C320\(B $(C5N4B(B $(C0M@;(B $(CGGGO1b(B $(C@'GX<-(B $(C1W78@>4O4Y(B. $(C0%9+8.8&(B $(CGX55(B
Emacs$(C4B(B $(C:/0f(B $(C;gGW@L(B $(C3*A_?!(B $(C=G<v?44Y0m(B $(C0aA$5G4B(B $(C0f?l8&(B $(C0(>HGX(B $(C1Y?x(B
$(CFD@O@;(B $(C:/0f5H(B $(C@L8'@87N(B $(C320\5S4O4Y(B.
$(CH-8i@G(B $(C9Y4Z(B $(C0!1n@L8&(B $(C:88i(B "--:-- TUTORIAL.ko"$(C?M(B $(C00@:(B $(C=D@87N(B $(C=C@[GO4B(B,
$(C4k=C(B $(C9.@Z7N(B $(C=C@[GX<-(B $(C4k=C(B $(C9.@Z7N(B $(C3!3*4B(B $(CAY@L(B $(C@V@;(B $(C0M@T4O4Y(B. $(CH-8i@G(B $(C@L(B
$(C:N:P@:(B $(C:8Ek(B, $(C9f9.GO0m(B $(C@V4B(B $(CFD@O@G(B $(C@L8'@;(B $(C:8?)(B $(CA]4O4Y(B. $(CAv1]@:(B Emacs
$(CAvD'<-@G(B $(C:9;g:;@N(B "TUTORIAL.ko"$(C6s4B(B $(CFD@O@;(B $(C9f9.GO0m(B $(C@V4B(B $(CA_@T4O4Y(B.
Emacs$(C7N(B $(CFD@O(B $(CC#1b8&(B $(CGO8i(B $(CA$H.Hw(B $(C1W(B $(C0w?!(B $(CFD@O@G(B $(C@L8'@L(B $(C3*E8334O4Y(B.
$(CFD@O(B $(CC#1b(B $(C8m7I@G(B $(CF/:0GQ(B $(CA!@:(B $(C?xGO4B(B $(CFD@O@G(B $(C@L8'@;(B $(C8;GX>_(B $(CGO4B(B
$(C0M@T4O4Y(B. $(C8m7I@L(B "$(C4\8;1b7N:NEM(B $(C@N<v8&(B $(C@P4B4Y(B"$(C6s0m(B $(CGU4O4Y(B ($(C@L(B $(C0f?l(B,
$(C@N<v4B(B $(CFD@O@G(B $(C@L8'@T4O4Y(B). $(C>F7!@G(B $(C8m7I@;(B $(CD!0m(B $(C3*8i(B
C-x C-f $(CFD@O(B $(CC#1b(B
Emacs$(C4B(B $(CFD@O@G(B $(C@L8'@;(B $(CD!6s0m(B $(C?d18GU4O4Y(B. $(CFD@O(B $(C@L8'@;(B $(CD!8i(B $(CH-8i@G(B $(C9Y4Z(B
$(CAY?!(B $(C@L8'@L(B $(C3*E8334O4Y(B. $(C@L71(B $(CA>7y@G(B $(C@T7B?!(B $(C>2@O(B $(C6'?!4B(B $(C9Y4Z(B $(CAY@;(B $(C@[@:(B
$(C;g@LD-(B(minibuffer)$(C@L6s0m(B $(C:N8(4O4Y(B. $(CFr;s=C?!(B $(C>24B(B Emacs$(C@G(B $(CFmA}(B
$(C8m7I@87N(B $(CFD@O(B $(C@L8'@;(B $(CFmA}GR(B $(C<v(B $(C@V@>4O4Y(B.
$(CFD@O(B $(C@L8'@;(B ($(CH$@:(B $(C8p5g(B $(CA>7y@G(B $(C@[@:(B $(C;g@LD-(B $(C@T7B@;(B) $(C3V@;(B $(C6'(B, $(C8m7I@G(B
$(CCk<R4B(B C-g$(C7N(B $(CGU4O4Y(B.
>> C-x C-f$(C8&(B $(CD!0m(B C-g$(C8&(B $(CD!=J=C?@(B. $(C@L4B(B $(C@[@:(B $(C;g@LD-@;(B $(CCk<RGO0m(B $(C6G(B,
$(C@[@:(B $(C;g@LD-@;(B $(C>20m(B $(C@V4B(B C-x C-f $(C8m7I55(B $(CCk<RGU4O4Y(B. $(C1W7/9G7N(B $(C>F9+(B
$(CFD@O55(B $(CC#Av(B $(C>J4B(B $(C0M@T4O4Y(B.
$(CFD@O(B $(C@L8'@;(B $(C4Y(B $(C1b@TG_@88i(B <Return>$(C@;(B $(CCD<-(B $(CA>7aGO=J=C?@(B. $(C1W7/8i(B C-x
C-f $(C8m7I@L(B $(C@[5?5G>n(B $(C<1EC5H(B $(CFD@O@;(B $(CC#1b(B $(C=C@[GU4O4Y(B. C-x C-f $(C8m7I@L(B
$(C3!3*8i(B $(C@[@:(B $(C;g@LD-@:(B $(C;g6sA}4O4Y(B.
$(C@a=C(B $(CHD?!4B(B $(CFD@O@G(B $(C3;?k@L(B $(CH-8i?!(B $(C3*E83*0m(B $(C1W(B $(C3;?k@;(B $(CFmA}GR(B $(C<v(B $(C@V0T(B
$(C5K4O4Y(B. $(C:/0f(B $(C;gGW@;(B $(C?518@{@87N(B $(CGO0m(B $(C=M@88i(B $(C4Y@=@G(B $(C8m7I@;(B $(CD(4O4Y(B.
C-x C-s $(CFD@O(B $(C0%9+8.(B
$(C@L(B $(C8m7I@:(B Emacs $(C3;@G(B $(C1[?y@;(B $(CFD@O?!(B $(C:9;gGU4O4Y(B. $(C@L(B $(C8m7I@L(B $(CC99xB07N(B
$(C<vG`5I(B $(C6'4B(B Emacs$(C0!(B $(C1Y?x(B $(CFD@O@;(B $(C;u(B $(C@L8'@87N(B $(C9Y2Y>n(B $(C3u@=@87N=a(B $(C@R>n9v81(B
$(C?l7A8&(B $(C9fAvGU4O4Y(B. $(C;u(B $(C@L8'@:(B $(C1Y?x(B $(CFD@O(B $(C@L8'@G(B $(C3!?!(B "~"$(C@;(B $(C4uGT@87N=a(B
$(C885i>nA}4O4Y(B.
$(C0%9+8.0!(B $(C3!3*8i(B Emacs$(C4B(B $(C>2?)Ax(B $(CFD@O@G(B $(C@L8'@;(B $(C@N<bGU4O4Y(B. $(CFD@O@:(B $(C>FAV(B
$(C@ZAV(B $(C0%9+8.GT@87N=a(B $(C?n?5(B $(CC<0h0!(B $(C?M8#8#(B $(C9+3JA.55(B $(C89@:(B $(C@[>w@L(B $(C<U=G5GAv(B
$(C>J557O(B $(CGU4O4Y(B.
>> C-x C-s$(C8&(B $(CCD<-(B $(CAvD'<-@G(B $(C:9;g:;@;(B $(C0%9+8.(B $(CGO=J=C?@(B.
$(C1W7/8i(B "Wrote ...TUTORIAL.ko"$(C6s0m(B $(CH-8i@G(B $(C9Y4Z?!(B $(C@N<b5I(B $(C0M@T4O4Y(B.
$(C@/@G(B: $(C>n62(B $(C?n?5(B $(CC<0h?!<-4B(B C-x C-s$(C8&(B $(CD!8i(B $(CH-8i@;(B $(C5?0a=CDQ<-(B, Emacs$(C0!(B
$(C>F9+(B $(CCb7B55(B $(CGOAv(B $(C>J4B(B $(C0M@;(B $(C:<(B $(C0f?l0!(B $(C@V@>4O4Y(B. $(C@L0M@:(B "$(CHe8'(B $(CA&>n(B"$(C6s0m(B
$(C:R8.?l4B(B $(C?n?5(B $(CC<0h@G(B "$(CF/B!(B"$(C@L(B C-s$(C8&(B $(C0!7NC$<-(B Emacs$(C8&(B $(CEkGX(B $(C@|4^5GAv(B
$(C>J557O(B $(CGO1b(B $(C6'9.@T4O4Y(B. C-q$(C8&(B $(C4)8#8i(B $(CH-8i@L(B $(CGXA&5K4O4Y(B. $(C1W8.0m(B $(C3*<-(B
Emacs $(C<38m<-@G(B "Spontaneous Entry to Incremental Search"$(C6s4B(B $(C4\?x@;(B
$(C:88i(B $(C@L71(B "$(CF/B!(B"$(C@;(B $(C>n6;0T(B $(CCk1^GR(B $(C<v(B $(C@V4B0!?!(B $(C4kGQ(B $(CA6>p@;(B $(C@P@;(B $(C<v(B
$(C@V@>4O4Y(B.
$(C:80E3*(B $(CFmA}GO1b(B $(C@'GX(B, $(CA8@gGO4B(B $(CFD@O@;(B $(CC#@;(B $(C<v(B $(C@V@>4O4Y(B. $(C6GGQ(B $(CA8@gGOAv(B
$(C>J4B(B $(CFD@O55(B $(CC#@;(B $(C<v(B $(C@V@>4O4Y(B. $(C@L780T(B $(CGO8i(B Emacs$(C7N(B $(CFD@O@;(B $(C885i0T(B
$(C5K4O4Y(B: $(C:s(B $(C3;?k@87N(B $(C=C@[5G4B(B $(CFD@O@;(B $(CC#>F<-(B $(C1[?y@;(B $(C3"?l1b(B $(C=C@[GU4O4Y(B.
$(CFD@O@;(B "$(C0%9+8.(B"$(CGO557O(B $(C?dC;GO8i(B Emacs$(C4B(B $(C3"?vAx(B $(C1[?y@;(B $(C3;?k@87N(B $(CGO4B(B
$(CFD@O@;(B $(C=GA&7N(B $(C885i>n(B $(C3@4O4Y(B. $(C1W71(B $(CHD?!4B(B $(C@L(B $(CFD@O@:(B $(C@L9L(B $(CA8@gGO4B(B
$(CFD@O@L(B $(C5K4O4Y(B.
* $(C;g@LD-(B
--------
$(C5N9xB0(B $(CFD@O@;(B C-x C-f$(C7N(B $(CC#@88i(B, $(CC99xB0(B $(CFD@O@:(B Emacs$(C@G(B $(C3;:N?!(B $(C32>F(B
$(C@V@>4O4Y(B. $(C1W(B $(CFD@O@:(B C-x C-f$(C7N(B $(C@gBw(B $(CC#@=@87N<-(B $(C4Y=C(B $(C>y9Y2\(B $(C<v(B
$(C@V@>4O4Y(B. $(C@L71(B $(C=D@87N(B $(C8E?l(B $(C89@:(B $(C<v@G(B $(CFD@O5i@;(B Emacs $(C3;:N?!(B $(C:R7/(B $(C5i@O(B
$(C<v(B $(C@V@>4O4Y(B.
>> C-x C-f foo <Return>$(C@;(B $(CCD<-(B "foo"$(C6s4B(B $(C@L8'@G(B $(CFD@O@;(B $(C885e=J=C?@(B.
$(C1W8.0m4B(B $(C1[?y@;(B $(C3"?l0m(B $(CFmA}GO?)(B C-x C-s$(C7N(B "foo"$(C8&(B $(C0%9+8.GO=J=C?@(B.
$(C86Av87@87N(B, C-x C-f TUTORIAL.ko <Return>$(C@;(B $(CCD<-(B $(CAvD'<-7N(B $(C4Y=C(B $(C59>F(B
$(C?@=J=C?@(B.
Emacs$(C4B(B $(C0"(B $(CFD@O@G(B $(C1[?y@;(B "$(C;g@LD-(B"$(C@L6s0m(B $(C:R8.?l4B(B $(C0M(B $(C>H?!(B $(C@z@eGU4O4Y(B.
$(CFD@O@;(B $(CC#4B(B $(C0M@:(B Emacs$(C@G(B $(C3;:N?!(B $(C;u(B $(C;g@LD-@;(B $(C885e4B(B $(C0M0z(B $(C00@>4O4Y(B.
Emacs$(C@G(B $(C@O7N(B $(CGvA8GO0m(B $(C@V4B(B $(C;g@LD-@G(B $(C8q7O@;(B $(C:81b(B $(C@'GX<-4B(B $(C4Y@=0z(B $(C00@L(B
$(CD!=J=C?@(B.
C-x C-b $(C;g@LD-(B $(C8q7O(B
>> C-x C-b$(C8&(B $(CAv1](B $(CCD(B $(C:8=J=C?@(B.
$(C0"(B $(C;g@LD-@L(B $(C>n62(B $(C@L8'@;(B $(C0.0m(B $(C@V4B0!(B $(C:8=J=C?@(B. $(C;g@LD-@:(B $(C0#AwGO0m(B $(C@V4B(B
$(C1[?y@G(B $(C8pC<0!(B $(C5G4B(B $(CFD@O@G(B $(C@L8'@;(B $(C0.0m(B $(C@V@;(B $(C<v55(B $(C@V@>4O4Y(B. $(C>n62(B
$(C;g@LD-5i@:(B $(CFD@O0z(B $(C9+0|GU4O4Y(B. $(C?98&(B $(C5i>n(B, "*Buffer List*"$(C6s4B(B $(C;g@LD-@:(B
$(C>F9+(B $(CFD@O55(B $(C0.0m(B $(C@VAv(B $(C>J@>4O4Y(B. $(C@L(B $(C;g@LD-@:(B C-x C-b$(C7N(B $(C885i>nAx(B $(C;g@LD-(B
$(C8q7O@;(B $(C4c0m(B $(C@V@;(B $(C;S@T4O4Y(B. Emacs $(CC"(B $(C>H?!<-(B $(C:<(B $(C<v(B $(C@V4B(B $(C8p5g(B $(C1[?y@:(B
$(C>n62(B $(C;g@LD-@G(B $(C@O:N:P(B $(C@T4O4Y(B.
>> C-x 1$(C@;(B $(CCD<-(B $(C;g@LD-(B $(C8q7O@;(B $(C>x>V=J=C?@(B.
$(CGQ(B $(CFD@O@G(B $(C1[?y@;(B $(C:/0fGQ(B $(CHD(B $(C4Y8%(B $(CFD@O@;(B $(CC#@88i(B $(CC99xB0(B $(CFD@O@:(B $(C0%9+8.5GAv(B
$(C>J@:(B $(C0M@T4O4Y(B. $(C1W(B $(C:/0f(B $(C;gGW@:(B Emacs $(C3;:N@G(B $(CFD@O(B $(C;g@LD-?!88(B $(C32>F(B
$(C@V@>4O4Y(B. $(C5N9xB0(B $(CFD@O@G(B $(C;g@LD-@;(B $(C885i0E3*(B $(CFmA}GO4B(B $(C0M@:(B $(CC99xB0(B $(CFD@O@G(B
$(C;g@LD-?!(B $(C@|Gt(B $(C?5Gb@;(B $(CAVAv(B $(C>J@>4O4Y(B. $(C@L4B(B $(C8E?l(B $(C@/?kGO1b4B(B $(CGO3*(B $(C4Y8%(B
$(C8i?!<-4B(B $(CC99xB0(B $(CFD@O@G(B $(C;g@LD-@;(B $(C0%9+8.GR(B $(C<v(B $(C@V4B(B $(C0#FmGQ(B $(C4Y8%(B $(C9f9}@L(B
$(CGJ?dGO4Y4B(B $(C0M@;(B $(C@G9LGU4O4Y(B. C-x C-f$(C8&(B $(CCD<-(B $(C1W(B $(C;g@LD-@87N(B $(C>y9Y2[(B $(CHD(B
C-x C-s$(C7N(B $(C0%9+8.GO4B(B $(C0M@:(B $(C1MBz@:(B $(C@O@T4O4Y(B. $(C1W7!<-(B $(C4Y@=0z(B $(C00@:(B $(C8m7I@L(B
$(C@V@>4O4Y(B
C-x s $(C8n8n(B $(C;g@LD-(B $(C0%9+8.(B
C-x s$(C4B(B, $(C:/0f5G>zAv88(B $(C0%9+8.5GAv(B $(C>J@:(B $(C;g@LD-@L(B $(C@V3*(B $(CA6;gGX(B $(C:>4O4Y(B.
$(C1W8.0m4B(B $(C1W71(B $(C;g@LD-5i?!(B $(C4kGX<-(B $(C1W(B $(C0M@;(B $(C0%9+8.GR(B $(C0M@N0!8&(B $(C90>n(B
$(C:>4O4Y(B.
>> $(CGQ(B $(CAY@G(B $(C1[?y@;(B $(C3"?n(B $(CHD(B C-x s$(C8&(B $(CD!=J=C?@(B.
$(C1W7/8i(B TUTORIAL.ko$(C6s4B(B $(C@L8'@G(B $(C;g@LD-@;(B $(C0%9+8.GR(B $(C0M@NAv(B $(C90>n(B $(C:<(B
$(C0M@T4O4Y(B. "y"$(C8&(B $(CCD<-(B $(C90@=?!(B $(C?96s0m(B $(C4dGO=J=C?@(B.
* $(C8m7I>n@G(B $(CH.@e(B
---------------
Emacs$(C@G(B $(C8m7I>n4B(B $(C3J9+(B $(C89>F<-(B $(C@L(B $(C8p5g(B $(C8m7I@;(B $(CA&>n<h3*(B meta$(C<h?!(B $(CGR4gGR(B
$(C<v(B $(C>x@>4O4Y(B. Emacs$(C4B(B $(C@L71(B $(C9.A&8&(B X (eXtend) $(C8m7I@87N(B $(CGX0aGU4O4Y(B.
$(C@L?!4B(B $(C5N0!Av(B $(CA>7y0!(B $(C@V@>4O4Y(B:
C-x $(C9.@Z(B $(CH.@e(B. $(C9.@Z(B $(CGO3*0!(B $(C5Z5{8'(B.
M-x $(C@L8'(B $(C8m7I@G(B $(CH.@e(B. $(C1d(B $(C@L8'@L(B $(C5Z5{8'(B.
$(C@L(B $(C8m7I5i@:(B $(C4k03(B $(C@/?kGOAv88(B, $(CAv1]1nAv(B $(C9h?v(B $(C?B(B $(C8m7I5i:84Y4B(B $(C4z(B $(C:s9xGO0T(B
$(C;g?k5K4O4Y(B. $(C@L71(B $(CA>7y@G(B $(C8m7I@;(B $(C@L9L(B $(C5N(B $(C03(B $(C>K0m(B $(C@V@>4O4Y(B: $(CFD@O(B
$(C8m7I(B $(CA_?!(B C-x C-f$(C7N(B $(CC#1b?M(B C-x C-s$(C7N(B $(C0%9+8.GO1b(B. $(C4Y8%(B $(C?94B(B Emacs $(C@[>w(B
$(C=C0#@;(B $(C86D!4B(B $(C8m7I@T4O4Y(B--$(C@L4B(B C-x C-c $(C8m7I(B. ($(C:/0f(B $(C;gGW@;(B
$(C@R>n9v8.Av3*(B $(C>J@;1n(B $(CGO4B(B $(C0FA$@:(B $(C>J(B $(CGX55(B $(C5K4O4Y(B; C-x C-c$(C4B(B Emacs$(C8&(B
$(CAW@L1b(B $(C@|?!(B $(C0"0"@G(B $(C:/0f5H(B $(CFD@O@;(B $(C0%9+8.GR(B $(C1bH88&(B $(CA]4O4Y(B.)
C-z$(C4B(B Emacs$(C8&(B *$(C@S=C7N(B* $(C3*?@1b(B $(C@'GQ(B $(C8m7I@T4O4Y(B--$(C1W7!<-(B $(C4Y@=?!(B, $(CGO4x(B
$(CA_@G(B Emacs $(C@[>w(B $(C=C0#@87N(B $(C4Y=C(B $(C5G59>F(B $(C0%(B $(C<v(B $(C@V@>4O4Y(B.
$(C?n?5(B $(CC<0h0!(B $(CGc?kGO8i(B C-z$(C4B(B Emacs$(C8&(B "$(CA_Av(B"$(C=CE54O4Y(B(suspend); $(CAo(B, $(C@L(B
$(C8m7I@:(B $(CA60!:q(B(shell)$(C7N(B $(C59>F(B $(C0!557O(B $(CGOAv88(B Emacs$(C8&(B $(CFD1+GO4B(B $(C0M@:(B
$(C>F4U4O4Y(B. $(C4k:N:P@G(B $(CA60!:q?!<-4B(B `fg'$(C3*(B `%emacs'$(C8m7I@87N(B Emacs$(C8&(B $(C0h<SGR(B
$(C<v(B $(C@V@>4O4Y(B.
$(CA_AvGO4B(B $(C0M@;(B $(CA&0xGOAv(B $(C>J4B(B $(C?n?5(B $(CC<0h?!<-4B(B C-z$(C?!(B $(C@GGX(B, Emacs $(C9X?!<-(B
$(C=GG`5G4B(B $(C>F7'A60!:q0!(B $(C885i>n(B $(CAv0T(B $(C5G4B5%(B $(C?)1b<-(B $(C4Y8%(B $(CGA7N1W7%5i@;(B
$(C=GG`GQ(B $(CHD(B Emacs$(C7N(B $(C59>F(B $(C?C(B $(C<v(B $(C@V4B(B $(C1bH80!(B $(C@V@>4O4Y(B; $(C;g=G;s(B Emacs$(C7N:NEM(B
"$(C3*0!4B(B" $(C0M@:(B $(C>F4U4O4Y(B. $(C@L(B $(C0f?l(B $(C:8Ek(B, $(CA60!:q(B $(C8m7I@N(B `exit'$(C@87N(B
$(C>F7'A60!:q?!<-(B Emacs$(C?!(B $(C5G59>F(B $(C?I4O4Y(B.
C-x C-c$(C4B(B $(C@|;j1b?!<-(B $(C9~>n3*1b(B $(CGR(B $(C6'3*(B $(C;g?kGU4O4Y(B. $(CFmAv8&(B $(CCk1^GO4B(B
$(CGA7N1W7%@L3*(B $(C4Y8%(B $(C@b4YGQ(B $(C55?r8p(B(utilities)$(C5i@L(B $(C>_1bGQ(B Emacs$(C4B(B
$(CA_Av=CE24Y4B(B $(C0M@;(B $(C8p8#1b(B $(C6'9.?!(B $(C3*0!1b8&(B $(CGX>_(B $(CGU4O4Y(B. $(CGOAv88(B, $(C:8Ek@G(B
$(C0f?l(B, $(C9~>n3*1b8&(B $(CGOAv(B $(C>J4B(B $(CGQ(B, Emacs$(C8&(B $(C3*0!1b:84Y4B(B $(CA_AvGO4B(B $(C0M@L(B
$(CAA@>4O4Y(B.
C-x $(C8m7I>n4B(B $(C89@L(B $(C@V@>4O4Y(B. $(C@L9L(B $(C9h?n(B $(C0M@;(B $(C>F7!?!(B $(CAW:8@T4O4Y(B.
C-x C-f $(CFD@O(B $(CC#1b(B.
C-x C-s $(CFD@O(B $(C0%9+8.(B.
C-x C-b $(C;g@LD-(B $(C8q7O(B.
C-x C-c Emacs $(C3!3;1b(B.
C-x u $(C9+8#1b(B.
$(C@L8'(B $(CH.@e(B $(C8m7I@:(B $(C@ZAV(B $(C;g?k5GAv(B $(C>J0E3*(B $(CF/:0GQ(B $(C9f=D?!<-3*(B $(C>2@L4B(B
$(C8m7I@T4O4Y(B. $(CGQ0!Av(B $(C?94B(B replace-string $(C8m7I@N5%(B $(C@L4B(B $(C@|?*@{@87N(B $(CGQ(B
$(C9.@Z?-@;(B $(C4Y8%(B $(C9.@Z?-7N(B $(C;u7N9Y2_4O4Y(B. M-x$(C8&(B $(CD!8i(B Emacs$(C4B(B $(CH-8i@G(B
$(C9Y4Z?!<-(B M-x$(C6s0m(B $(C1f@b@LGO?)(B $(C8m7I@G(B $(C@L8'@;(B $(CD!557O(B $(CGU4O4Y(B; $(C@L(B $(C0f?l4B(B
"replace-string". "repl s<TAB>"$(C88(B $(CCD55(B Emacs$(C4B(B $(C@L8'@;(B $(C?O<:=CE3(B
$(C0M@T4O4Y(B. $(C8m7I(B $(C@L8'@:(B <Return>$(C@87N(B $(C3!334O4Y(B.
replace-string $(C8m7I@:(B $(C5N03@G(B $(C@N<v8&(B $(C?d18GU4O4Y(B--$(C9Y2n>nA.>_(B $(CGR(B $(C9.@Z?-0z(B
$(C;u7N9Y2n>nAz(B $(C9.@Z?-(B. $(C0"0"@G(B $(C@N<v4B(B <Return>$(C@87N(B $(C3!3;>_(B $(CGU4O4Y(B.
>> $(C1t9Z@L8&(B $(C@L(B $(CAY?!<-(B $(C5N(B $(CAY(B $(C>F7!@G(B $(C:s(B $(CAY7N(B $(C?rAw@L=J=C?@(B.
$(C1W(B $(CHD(B M-x repl s<Return>$(C:/H-5G(B<Return>$(C9Y2n(B<Return>$(C@;(B $(CD!=J=C?@(B.
$(C@L(B $(CAY@L(B $(C>n6;0T(B $(C:/H-5G>z4B0!8&(B $(C@/@GGO=J=C?@(B: $(C1t9Z@L0!(B $(C@V4B(B $(CCJ1b(B $(C@'D!(B
$(C4Y@=?!(B $(C:/(B-$(CH-(B-$(C5G(B $(C6s4B(B $(C398;@L(B $(C3*?C(B $(C6'864Y(B "$(C9Y2n(B"$(C6s0m(B
$(C;u7N9Y2n>z@>4O4Y(B.
* $(C@Z5?(B $(C0%9+8.(B
-------------
$(CFD@O@;(B $(C:/0fGQ(B $(CHD?!(B $(C>FAw(B $(C0%9+8.8&(B $(CGOAv(B $(C>J>R@88i(B $(C@|;j1b0!(B $(C?M8#8#(B
$(C9+3JA|@87N=a(B $(C:/0f(B $(C;gGW@;(B $(C@R>n(B $(C9v81(B $(C<v(B $(C@V@>4O4Y(B. $(C@L71(B $(C@g>S@;(B $(C9fAvGO1b(B
$(C@'GX(B, Emacs$(C4B(B $(CFmA}GO0m(B $(C@V4B(B $(C0"0"@G(B $(CFD@O@;(B $(CAV1b@{@87N(B "$(C@Z5?(B $(C0%9+8.(B"
$(CFD@O?!(B $(C>94O4Y(B. $(C@Z5?(B $(C0%9+8.5H(B $(CFD@O@G(B $(C@L8'@:(B $(C>U5Z7N(B # $(C9.@Z0!(B $(C@V@>4O4Y(B;
$(C?98&(B $(C5i>n(B, "hello.c"$(C6s4B(B $(C@L8'@G(B $(CFD@O@:(B "#hello.c#"$(C6s4B(B $(C@L8'@G(B $(C@Z5?(B
$(C0%9+8.(B $(CFD@O@;(B $(C0.0T(B $(C5K4O4Y(B. $(CA$;s@{@87N(B $(CFD@O@;(B $(C0%9+8.GO8i(B Emacs$(C4B(B $(C@Z5?(B
$(C0%9+8.(B $(CFD@O@;(B $(CAv?s4O4Y(B.
$(C@|;j1b0!(B $(C?M8#8#(B $(C9+3JAv8i(B $(C1W(B $(CFD@O@;(B ($(C@Z5?(B $(C0%9+8.5H(B $(CFD@O@L(B $(C>F4O6s(B
$(CFmA}GO4x(B $(CFD@O(B) $(CFr;s=CC373(B $(CC#@:(B $(CHD(B M-x recover-file<Return>$(C@;(B $(CD'@87N=a(B
$(C@Z5?(B $(C0%9+8.5H(B $(CFmA}90@;(B $(CH8:9=CE3(B $(C<v(B $(C@V@>4O4Y(B. $(CH.@NGR(B $(C0M@;(B $(C?d18GO8i(B
yes<Return>$(C@;(B $(CCD<-(B $(C0h<S(B $(CAxG`GO?)(B $(C@Z5?(B $(C0%9+8.5H(B $(C@Z7a8&(B $(CH8:9=CE0=J=C?@(B.
* $(C8^>F8.(B $(CEM(B
-----------
Emacs$(C0!(B, $(C8m7I@;(B $(CD!4B(B $(C<S550!(B $(C4@8.4Y0m(B $(C@N=DGO8i(B $(CH-8i(B $(C9Y4Z@G(B "$(C8^>F8.(B
$(CEM(B"$(C6s0m(B $(C:R8.4B(B $(C:s(B $(CEM?!(B $(CD#(B $(C8m7I@;(B $(C:8?)A]4O4Y(B. $(C8^>F8.(B $(CEM4B(B $(CH-8i@G(B $(C9Y4Z(B
$(CAY@T4O4Y(B.
* $(C9f=D(B $(CAY(B
---------
$(C8^>F8.(B $(CEM@G(B $(C9Y7N(B $(C@-(B $(CAY@:(B "$(C9f=D(B $(CAY(B"$(C@L6s0m(B $(C:N8(4O4Y(B. $(C9f=D(B $(CAY@:(B $(C4Y@=0z(B
$(C00@:(B $(C=D@87N(B $(CG%=C5G>n(B $(C@V@>4O4Y(B.
--:** TUTORIAL.ko (Fundamental)--L670--58%----------------
$(C@L(B $(CAY?!4B(B Emacs$(C3*(B $(CFmA}GO0m(B $(C@V4B(B $(C1[?y@G(B $(C;sH2?!(B $(C4kGQ(B $(C@/?kGQ(B $(CA$:80!(B
$(C0#Aw5G>n(B $(C@V@>4O4Y(B.
$(CFD@O(B $(C@L8'@L(B $(C9+>y@;(B $(C@G9LGO4BAv4B(B $(C@L9L(B $(C>K0m(B $(C@V@>4O4Y(B--$(C1W(B $(C0M@:(B $(CC#>R4x(B
$(CFD@O@T4O4Y(B. -NN%--$(C4B(B $(C1[?y?!<-@G(B $(CGv@g(B $(C@'D!8&(B $(C0!8.E54O4Y(B; $(C@L4B(B $(CH-8i(B
$(C2@4k1b(B $(C@'7N(B NN $(CF[<>F.@G(B $(C1[?y@L(B $(C@V@=@;(B $(C@G9LGU4O4Y(B. $(CFD@O@G(B $(C2@4k1b0!(B
$(CH-8i?!(B $(C@V@88i(B --00%-- $(C4k=E?!(B --Top--$(C@L6s0m(B $(CG%=C5K4O4Y(B. $(C1[?y@G(B
$(C9X9Y4Z@L(B $(CH-8i?!(B $(C@V@88i(B --Bot--$(C@L6s0m(B $(CG%=C5K4O4Y(B. $(C1[?y@L(B $(C>FAV(B $(C@[>F<-(B
$(C8p5g(B $(C3;?k@L(B $(CH-8i?!(B $(C4Y(B $(C3*E83*8i(B $(C9f=D(B $(CAY?!4B(B --All--$(C@L6s0m(B $(CG%=C5K4O4Y(B.
$(C0E@G(B $(C>U:N:P?!(B $(C@V4B(B $(C:0(B $(C9.@Z5i@:(B $(C1[?y@L(B $(C:/0f5G>z@=@;(B $(C@G9LGU4O4Y(B. $(CFD@O(B
$(C9f9.(B $(CAwHD3*(B $(C0%9+8.(B $(CAwHD?!4B(B $(C1W(B $(C0w?!(B $(C:0(B $(C9.@Z0!(B $(C>x0m(B $(C4k=C(B $(C9.@Z88(B
$(C@V@>4O4Y(B.
$(C9f=D(B $(CAY@G(B $(C0}H#(B $(C9.@Z>H@:(B $(C>n62(B $(CFmA}(B $(C9f=D@;(B $(C;g?kGO0m(B $(C@V4B0!8&(B
$(C>K7AA]4O4Y(B. $(C>VCJ(B $(C9f=D@:(B Fundamental$(C7N<-(B $(CAv1](B $(C;g?k5G0m(B $(C@V4B(B
$(C9f=D@T4O4Y(B. $(C@L4B(B "$(CAV(B $(C9f=D(B"$(C@G(B $(CGQ(B $(C?9@T4O4Y(B.
Emacs$(C?!4B(B $(CAV(B $(C9f=D@L(B $(C89@L(B $(C@V@>4O4Y(B. $(C1W(B $(CA_(B $(C8n0!Av4B(B $(C4Y8%(B $(C>p>n(B $(C6G(B/$(C6G4B(B
$(C4Y8%(B $(CA>7y@G(B $(C1[?y@;(B $(CFmA}GO557O(B $(CGO4B5%(B $(C>2@L8g(B, Lisp $(C9f=D(B, Text $(C9f=D(B
$(C5n5n@L(B $(C@V@>4O4Y(B. $(CGW;s(B $(CGQ(B $(C0!Av(B $(CAV(B $(C9f=D88@L(B $(C@{?k5G8g(B $(CAv1](B
"Fundamental"$(C@L6s0m(B $(C@{Gt(B $(C@V4B(B $(C0w?!(B $(CG%=C5K4O4Y(B.
$(C0"0"@G(B $(CAV(B $(C9f=D@:(B $(C8n8n(B $(C8m7I5i@L(B $(C@[5?@;(B $(C4^8.GO557O(B $(C5G>n(B $(C@V@>4O4Y(B. $(C?98&(B
$(C5i>n(B, $(CGA7N1W7%?!4B(B $(C<38m9.@;(B $(C885e4B(B $(C8m7I@L(B $(C@V4B5%(B, $(CGA7N1W7%(B $(C>p>n5i@:(B
$(C<38m9.@G(B $(CG|EB@;(B $(C0"0"(B $(C4^8.(B $(CGO1b(B $(C6'9.?!(B $(C0"0"@G(B $(CAV(B $(C9f=D@:(B $(C<38m9.@;(B $(C<-7N(B
$(C4Y8#0T(B $(C3"?v(B $(C3V557O(B $(C5G>n(B $(C@V@>4O4Y(B. $(C8p5g(B $(CAV(B $(C9f=D@:(B $(CH.@e(B $(C8m7I@G(B $(C@L8'@;(B
$(C;g?kGO9G7N<-(B $(C1W(B $(C9f=D@87N(B $(C>y9Y2Y4B(B $(C0M@L(B $(C=10T(B $(C@N=D5I(B $(C<v(B $(C@V@>4O4Y(B. $(CGQ(B
$(C?97N(B M-x fundamental-mode$(C4B(B Fundamental $(C9f=D@87N(B $(C>y9Y2Y4B(B $(C8m7I@T4O4Y(B.
$(C@L(B $(CFD@O0z(B $(C00@:(B $(CGQ1[(B $(C1[?y@;(B $(CFmA}GO7A0m(B $(CGQ4Y8i(B Text $(C9f=D@;(B $(C>24B(B $(C0M@L(B
$(CAA@;(B $(C0M@T4O4Y(B.
>> M-x text mode<Return>$(C@;(B $(CCD(B $(C:8=J=C?@(B.
$(CAv1]1nAv(B $(C9h?n(B Emacs $(C8m7I5i@:(B $(C89@L(B $(C4^6sAvAv(B $(C>J@84O(B $(C0FA$GOAv(B $(C>J>F55(B
$(C5K4O4Y(B. $(C1W7/3*(B M-f$(C?M(B M-b$(C0!(B $(C>U@[@:5{?HG%8&(B $(C398;@G(B $(C@O:N7N(B $(CC38.GT@;(B
$(C0|B{GR(B $(C<v(B $(C@V@;(B $(C0M@T4O4Y(B. $(C@|?!(B Fundamental $(C9f=D?!<-4B(B M-f$(C?M(B M-b$(C0!(B
$(C>U@[@:5{?HG%8&(B $(C398;(B $(C:P8.(B $(C9.@Z7N(B $(CCk1^GO?4@>4O4Y(B.
$(CAV(B $(C9f=D@:(B $(C:8Ek(B $(C4Y@=0z(B $(C00@:(B $(C9L9&GQ(B $(C:/H-8&(B $(CCJ7!GU4O4Y(B: $(C4k:N:P@G(B $(C8m7I5i@:(B
$(C0"0"@G(B $(CAV(B $(C9f=D?!<-(B "$(C00@:(B $(C@O(B"$(C@;(B $(CGOAv88(B $(C>`0#(B $(C4Y8#0T(B $(C@[5?GQ4Y(B.
$(CGv@g@G(B $(CAV(B $(C9f=D?!(B $(C4kGQ(B $(C9.<-H-8&(B $(C:80m@Z(B $(CGO8i(B C-h m$(C@;(B $(CD!=J=C?@(B.
>> C-u C-v$(C8&(B $(C8n(B $(C9x(B $(CCD<-(B $(C@L(B $(CAY@;(B $(CH-8i@G(B $(C2@4k1bBk@87N(B $(C?rAw@L=J=C?@(B.
>> C-h m$(C@;(B $(CCD<-(B Text $(C9f=D0z(B Fundamental $(C9f=D@G(B $(CBw@LA!@;(B $(C:8=J=C?@(B.
>> C-x 1$(C@;(B $(CCD<-(B $(C9.<-H-8&(B $(CH-8i?!<-(B $(C>x>V=J=C?@(B.
$(CAV(B $(C9f=D@:(B $(C:N(B $(C9f=D@L(B $(C@V1b(B $(C6'9.?!(B $(CAV(B $(C9f=D@L6s0m(B $(C:N8(4O4Y(B. $(C:N(B $(C9f=D@:(B $(CAV(B
$(C9f=D@;(B $(C13C<GR(B $(C<v(B $(C@V4B(B $(C0M@L(B $(C>F4O6s(B $(CAV(B $(C9f=D@;(B $(C:NBw@{@87N(B $(C<vA$GQ(B
$(C9f=D@T4O4Y(B. $(C0"0"@G(B $(C:N(B $(C9f=D@:(B $(C4Y8%(B $(C:N(B $(C9f=D0z(B $(C5683@{@87N(B, $(C1W8.0m(B $(CAV(B
$(C9f=D0z55(B $(C5683@{@87N(B, $(C1W(B $(C@ZC<7N<-(B $(C2t0m(B $(CDS(B $(C<v(B $(C@V@>4O4Y(B. $(C1W7/9G7N(B $(C:N(B
$(C9f=D@:(B $(C>2Av(B $(C>J@;(B $(C<v55(B $(C@V0m(B $(CGO3*88(B $(C>5(B $(C<v55(B $(C@V@88i(B $(C?)7/(B $(C:N(B $(C9f=D@;(B
$(CB%8BCg<-(B $(C>5(B $(C<v55(B $(C@V@>4O4Y(B.
$(C>FAV(B $(C@/?kGQ(B $(C:N(B $(C9f=DA_(B, $(CGQ1[(B $(C1[?y@;(B $(CFmA}GR(B $(C6'(B $(C@ZAV(B $(C;g?k5G4B(B Auto Fill
$(C9f=D@L(B $(C@V@>4O4Y(B. $(C@L(B $(C9f=D@L(B $(CDQA.(B $(C@V@;(B $(C6'(B Emacs$(C4B(B, $(CAY@L(B $(C3J9+(B $(C3P>nAv8i(B
$(C1[?y@L(B $(C3"?vA|?!(B $(C5{6s(B $(C398;;g@L?!<-(B $(C@Z5?@87N(B $(CAY9Y2^@;(B $(CGU4O4Y(B.
Auto Fill $(C9f=D@;(B $(CDQ1b(B $(C@'GX<-4B(B M-x auto-fill-mode<Return>$(C@;(B $(CD(4O4Y(B.
$(C@L(B $(C9f=D@L(B $(CDQA.(B $(C@V@88i(B M-x auto-fill-mode<Return>$(C@;(B $(CCD<-(B $(C2x(B $(C<v(B
$(C@V@>4O4Y(B. $(C@L(B $(C9f=D@L(B $(C2(A.(B $(C@V@88i(B $(C@L(B $(C8m7I@:(B $(C1W(B $(C9f=D@;(B $(CDQ0m(B, $(C9]4k7N(B $(CDQA.(B
$(C@V@;(B $(C6'4B(B $(C@L(B $(C9f=D@;(B $(C2|4O4Y(B. $(C?l8.4B(B $(C@L(B $(C8m7I@L(B "$(C9f=D@;(B $(C6H5|(B"$(CGQ4Y0m(B
(toggle) $(CGU4O4Y(B.
>> M-x auto fill mode<Return>$(C@;(B $(CAv1](B $(CCD(B $(C:8=J=C?@(B. $(C1W8.0m(B "asdf "$(C6s4B(B
$(CAY@;(B $(C0h<S(B $(C3"?v(B $(C3V>n<-(B $(C1W(B $(CAY@L(B $(C5Q7N(B $(C3*45557O(B $(CGO=J=C?@(B. Auto Fill
$(C9f=D@:(B $(C0x0#(B $(C9.@Z?!<-88(B $(CAY9Y2^@;(B $(CGO1b(B $(C6'9.?!(B $(C2@(B $(C0x0#(B $(C9.@Z0!(B $(C5i>n(B
$(C@V>n>_(B $(CGU4O4Y(B.
$(CGQ0h4B(B $(C:8Ek(B 70$(C03@G(B $(C9.@Z7N(B $(CA$GXA.(B $(C@VAv88(B C-x f $(C8m7I@87N(B $(C1W(B $(C0M@;(B $(C:/0fGR(B
$(C<v(B $(C@V@>4O4Y(B. $(C?xGO4B(B $(CGQ0h(B $(C<3A$@:(B $(C<}@Z(B $(C@N<v7N(B $(CGO?)>_(B $(CGU4O4Y(B.
>> 20$(C@L6s4B(B $(C@N<v7N(B C-x f$(C8&(B $(CCD(B $(C:8=J=C?@(B. (C-u 2 0 C-x f).
$(C1W8.0m(B $(C1[?y@;(B $(C9:0!(B $(CCD<-(B Emacs$(C0!(B 20$(C03@G(B $(C9.@Z7N(B $(CGQ(B $(CAY@;(B $(CC$?l4BAv8&(B
$(C:8=J=C?@(B. $(C1W71(B $(C4Y@=?!(B C-x f$(C8&(B $(C4Y=C(B $(C=a<-(B $(CGQ0h8&(B 70$(C@87N(B $(C@g(B
$(C<3A$GO=J=C?@(B.
$(C4\6t@G(B $(CA_0#?!<-(B $(C:/0fGO8i(B Auto Fill $(C9f=D@:(B $(CC$?r@;(B $(C4Y=C(B $(CGOAv(B
$(C>J@>4O4Y(B. $(C1W(B $(C4\6t@;(B $(C4Y=C(B $(CC$?l1b(B $(C@'GX<-4B(B $(C1t9Z@L0!(B $(C4\6t(B $(C>H?!(B $(C@V4B(B
$(C;sEB?!<-(B M-q (Meta$(C<h(B-q)$(C8&(B $(CD(4O4Y(B.
>> $(C1t9Z@L8&(B $(C@L@|(B $(C4\6t@87N(B $(C?rAw@N(B $(CHD(B M-q$(C8&(B $(CD!=J=C?@(B.
* $(CC#1b(B
------
Emacs$(C4B(B $(C1[?y@G(B $(C>UBJ@L3*(B $(C5^BJ@87N(B $(C9.@Z?-@;(B ($(C9.@Z?-@:(B $(C?,<S5H(B $(C9.@Z3*(B
$(C?,<S5H(B $(C398;@T4O4Y(B) $(CC#@;(B $(C<v(B $(C@V@>4O4Y(B. $(C9.@Z?-@;(B $(CC#4B(B $(C0M@:(B $(C1t9Z@L8&(B
$(C?rAw@L4B(B $(C8m7I@T4O4Y(B; $(C1t9Z@L0!(B $(C1W(B $(C9.@Z?-@L(B $(C3*E83*4B(B $(C0w@87N(B $(C?rAw@T4O4Y(B.
Emacs$(C@G(B $(CC#1b(B $(C8m7I@:(B "$(CAu0!@{(B"$(C@L6s4B(B $(CA!?!<-(B $(C@O9](B $(CFmA}1b@G(B $(CC#1b(B $(C8m7I0z(B
$(C4Y8(4O4Y(B. $(C@L4B(B $(CC#0m@Z(B $(CGO4B(B $(C9.@Z?-@;(B $(CE8@ZGO0m(B $(C@V4B(B $(C5?>H?!(B $(CC#1b0!(B
$(C@L7g>nAv0m(B $(C@V4Y4B(B $(C0M@;(B $(C@G9LGU4O4Y(B.
$(CC#1b8&(B $(C=C@[=CE04B(B $(C8m7I@:(B $(C>UBJ@87N(B $(CC#1b0!(B C-s$(C@L0m(B $(C5^BJ@87N(B $(CC#1b0!(B
C-r$(C@T4O4Y(B. $(C1W7/3*(B $(C@a1q(B $(C1b4Y8.=J=C?@(B! $(CAv1](B $(C@L0M@;(B $(C=C55GX(B $(C:8Av(B
$(C86=J=C?@(B.
C-s$(C8&(B $(CD!8i(B $(C8^>F8.(B $(CEM?!(B, $(C1f@b@L7N(B "I-search"$(C6s4B(B $(C9.@Z?-@L(B $(C3*E83*4B(B $(C0M@;(B
$(C:<(B $(C<v(B $(C@V@>4O4Y(B. $(C@L4B(B $(CC#0m@Z(B $(CGO4B(B $(C9.@Z?-@L(B $(CE8@Z5G1b8&(B $(C1b4Y6s8i<-(B
Emacs$(C0!(B $(CAu0!@{(B $(CC#1b(B $(CA_?!(B $(C@V4Y4B(B $(C0M@;(B $(C8;GX(B $(CA]4O4Y(B. <Return>$(C@:(B $(CC#1b8&(B
$(C86D(4O4Y(B.
>> $(C@LA&(B C-s$(C8&(B $(CCD<-(B $(CC#1b8&(B $(C=C@[GO=J=C?@(B. $(CC5C5Hw(B, $(CGQ(B $(C9x?!(B $(CGQ(B $(C1[@Z>?(B
'cursor'$(C6s0m(B $(CD!8i<-(B $(C0"0"@G(B $(C9.@Z8&(B $(CD#(B $(CHD(B $(C1t9Z@L?!(B $(C>n62(B $(C@O@L(B $(C@O>n(B
$(C3*4B0!8&(B $(C@/@GGO=J=C?@(B.
$(C@LA&(B "cursor"$(C8&(B $(CGQ(B $(C9x(B $(CC#@:(B $(C0M@T4O4Y(B.
>> C-s$(C8&(B $(C4Y=C(B $(CCD<-(B $(C4Y@=?!(B $(C3*E83*4B(B "cursor"$(C8&(B $(CC#@8=J=C?@(B.
>> $(C@Z(B, $(C@LA&4B(B <Delete>$(C8&(B $(C3W(B $(C9x(B $(CCD<-(B $(C1t9Z@L0!(B $(C>n6;0T(B $(C?rAw@L4B0!8&(B
$(C:8=J=C?@(B.
>> <Return>$(C@;(B $(CCD<-(B $(CC#1b8&(B $(C3!3;=J=C?@(B.
$(C>n62(B $(CGv;s@L(B $(C@O>n3*4BAv8&(B $(C:8>R@>4O1n(B? $(CAu0!@{(B $(CC#1b?!<-(B Emacs$(C4B(B $(C1W6'1nAv(B
$(CE8@ZGQ(B $(C9.@Z?-@;(B $(CC#@87A0m(B $(CGU4O4Y(B. '$(C1t9Z@L(B'$(C0!(B $(C@V4B(B $(C4Y@=(B $(C@e<R7N(B $(C0!7A8i(B
C-s$(C8&(B $(C4Y=C(B $(CD(4O4Y(B. $(C1W71(B $(C0w@L(B $(C>x@88i(B Emacs$(C4B(B $(C;`<R8.8&(B $(C3;0m(B $(CC#1b0!(B $(CGv@g(B
"$(C=GFP(B"$(CG_@=@;(B $(C>K7A(B $(CAV8g(B C-g$(C7N55(B $(CC#1b8&(B $(C3!3>(B $(C<v(B $(C@V0T(B $(CGU4O4Y(B.
$(C@/@G(B: $(C>n62(B $(C?n?5(B $(CC<0h?!<-4B(B C-s$(C8&(B $(CD!8i(B $(CH-8i@;(B $(C5?0a=CDQ<-(B, Emacs$(C0!(B $(C>F9+(B
$(CCb7B55(B $(CGOAv(B $(C>J4B(B $(C0M@;(B $(C:<(B $(C0f?l0!(B $(C@V@>4O4Y(B. $(C@L0M@:(B "$(CHe8'(B $(CA&>n(B"$(C6s0m(B
$(C:R8.?l4B(B $(C?n?5(B $(CC<0h@G(B "$(CF/B!(B"$(C@L(B C-s$(C8&(B $(C0!7NC$<-(B Emacs$(C8&(B $(CEkGX(B $(C@|4^5GAv(B
$(C>J557O(B $(CGO1b(B $(C6'9.@T4O4Y(B. C-q$(C8&(B $(C4)8#8i(B $(CH-8i@L(B $(CGXA&5K4O4Y(B. $(C1W8.0m(B $(C3*<-(B
Emacs $(C<38m<-@G(B "Spontaneous Entry to Incremental Search"$(C6s4B(B $(C4\?x@;(B
$(C:88i(B $(C@L71(B "$(CF/B!(B"$(C@;(B $(C>n6;0T(B $(CCk1^GR(B $(C<v(B $(C@V4B0!?!(B $(C4kGQ(B $(CA6>p@;(B $(C@P@;(B $(C<v(B
$(C@V@>4O4Y(B.
$(CAu0!@{(B $(CC#1b(B $(C55A_?!(B <Delete>$(C8&(B $(CD!8i(B $(CC#1b(B $(C9.@Z?-@G(B $(C86Av87(B $(C9.@Z0!(B
$(CAv?vAv0m(B $(CC#1b4B(B $(C86Av87@87N(B $(CC#>R4x(B $(C0w?!(B $(C5G59>F(B $(C0!4B(B $(C0M@;(B $(C:<(B $(C<v(B
$(C@V@>4O4Y(B. $(C?98&(B $(C5i>n(B, "c"$(C0!(B $(C>n5p?!(B $(CC3@=@87N(B $(C3*?@4BAv8&(B $(C:81b(B $(C@'GX<-(B
"c"$(C8&(B $(CCF4Y0m(B $(CGU=C4Y(B. $(C@LA&(B "u"$(C8&(B $(CD!8i(B $(C1t9Z@L4B(B "cu"$(C0!(B $(CC3@=@87N(B $(C3*?@4B(B
$(C0w@87N(B $(C?rAw@O(B $(C0M@T4O4Y(B. $(C@LA&(B <Delete>$(C8&(B $(CD!=J=C?@(B. $(C1W7/8i(B $(CC#1b(B
$(C9.@Z?-?!<-(B "u"$(C0!(B $(CAv?vAv0m(B $(C1t9Z@L4B(B "c"$(C0!(B $(CC3@=(B $(C3*?B(B $(C0w@87N(B $(C5G59>F(B
$(C0)4O4Y(B.
$(CC#1bA_?!(B $(CA&>n(B $(C9.@Z3*(B meta $(C9.@Z8&(B $(CD!8i(B ($(C?9?\0!(B $(C@VAv88(B--$(CC#1b?!<-(B $(CF/:0GQ(B
$(C@G9L8&(B $(C0.4B(B C-s$(C3*(B C-r$(C0z(B $(C00@:(B $(C9.@Z5i(B) $(CC#1b4B(B $(C3!3*9v834O4Y(B.
C-s$(C4B(B $(C1t9Z@L@G(B $(CGv@g(B $(C@'D!(B $(C4Y@=?!(B $(C9_0_5G4B(B $(CC#1b(B $(C9.@Z?-@;(B $(CC#557O(B
$(C=C@[=CE54O4Y(B. $(C@L@|?!(B $(C3*?B(B $(C1[?y?!<-(B $(C9+>p0!8&(B $(CC#@87A8i(B C-r$(C8&(B $(CD(4O4Y(B.
C-s$(C?!(B $(C@{?k5G4B(B $(C8p5g(B $(C;gGW@:(B $(C9fGb88(B $(C9Y2n>z@;(B $(C;S(B $(C8p5N(B C-r$(C?!(B $(C@{?k5K4O4Y(B.
* $(C4YA_(B $(CC"(B
---------
Emacs$(C@G(B $(C1&Bz@:(B $(CF/B!(B $(CA_@G(B $(CGO3*7N(B $(CGQ(B $(C03(B $(C@L;s@G(B $(CC"@;(B $(C5?=C?!(B $(CH-8i?!(B $(CG%=CGR(B
$(C<v(B $(C@V4Y4B(B $(C0M@;(B $(C5i(B $(C<v(B $(C@V@>4O4Y(B.
>> $(C1t9Z@L8&(B $(C@L(B $(CAY7N(B $(C?rAw?)<-(B C-u 0 C-l$(C@;(B $(CCD(B $(C:8=J=C?@(B.
>> C-x 2$(C8&(B $(CCD<-(B $(CH-8i@;(B $(C5N(B $(CC"@87N(B $(C3*4)=J=C?@(B.
$(C5N(B $(CC"@:(B $(C@L(B $(CAvD'<-8&(B $(CH-8i(B $(CG%=CGU4O4Y(B. $(C1t9Z@L4B(B $(C@-(B $(CC"?!(B $(C@V@>4O4Y(B.
>> C-M-v$(C8&(B $(CCD<-(B $(C9Y4Z(B $(CC"@;(B $(C5N7g8;1b(B $(CGO=J=C?@(B.
(Meta$(C<h0!(B $(C>x@88i(B ESC C-v$(C8&(B $(CD!=J=C?@(B.)
>> C-x o ("o"$(C4B(B "other"$(C@G(B $(CC9(B $(C1[@Z(B)$(C8&(B $(CCD<-(B $(C1t9Z@L8&(B $(C9Y4Z(B $(CC"@87N(B
$(C?rAw@L=J=C?@(B.
>> $(C9Y4Z(B $(CC"?!<-(B C-v$(C?M(B M-v$(C8&(B $(C=a<-(B $(C5N7g8;1b(B $(CGO=J=C?@(B.
$(C@L(B $(CAv=C8&(B $(C@P4B(B $(C0M@:(B $(C2@4k1b(B $(CC"?!<-(B $(CGU4O4Y(B.
>> C-x o$(C8&(B $(C4Y=C(B $(CCD<-(B $(C1t9Z@L8&(B $(C4Y=C(B $(C2@4k1b(B $(CC"@87N(B $(C?rAw@L=J=C?@(B.
$(C2@4k1b(B $(CC"?!<-(B, $(C1t9Z@L4B(B $(C@|?!(B $(C@V4x(B $(C0w@87N(B $(C0%(B $(C0M@T4O4Y(B.
C-x o$(C8&(B $(C0h<S(B $(C;g?kGO?)(B $(CC"5i(B $(C;g@L?!<-(B $(C>y9Y2Y1b8&(B $(CGR(B $(C<v(B $(C@V@>4O4Y(B. $(C0"0"@G(B
$(CC"@:(B $(C@ZC<@G(B $(C1t9Z@L(B $(C@'D!8&(B $(C0.0m(B $(C@VAv88(B $(CGQ(B $(CC"88@L(B $(C1t9Z@L8&(B $(C:8?)(B $(CA]4O4Y(B.
$(C8p5g(B $(CA$;s@{@N(B $(CFmA}(B $(C8m7I@:(B $(C1t9Z@L0!(B $(C@V4B(B $(CC"?!(B $(C@{?k5K4O4Y(B. $(C@L0M@;(B
"$(C<1EC5H(B $(CC"(B"$(C@L6s0m(B $(C:N8(4O4Y(B.
C-M-v $(C8m7I@:(B $(C4Y8%(B $(CC"@;(B $(CB|A6GO8i<-(B $(C1[?y@;(B $(CFmA}GR(B $(C6'(B $(C@/?kGU4O4Y(B.
$(C1t9Z@L8&(B $(CFmA}GO0m(B $(C@V4B(B $(CC"?!(B $(C5N0m(B $(C4Y8%(B $(CC"@;(B C-M-v$(C7N(B $(C@|Ax=CE3(B $(C<v(B
$(C@V@>4O4Y(B.
C-M-v$(C4B(B CONTROL-META $(C9.@Z@G(B $(CGQ(B $(C?9@T4O4Y(B. META$(C<h0!(B $(C@V@88i(B CONTROL$(C<h?M(B
META$(C<h8&(B $(C4)8%(B $(CC$(B v $(C1[<h8&(B $(CD!9G7N=a(B C-M-v$(C8&(B $(CD%(B $(C<v(B $(C@V@>4O4Y(B. CONTROL$(C<h3*(B
META$(C<h4B(B $(CE8@ZGO4B(B $(C9.@Z8&(B $(C:/0fGO4B(B $(C?*GR@;(B $(CGO1b(B $(C6'9.?!(B $(C1W(B $(C5Q(B $(CA_(B $(C9+>y@L(B
$(CC3@=?!(B $(C?@4B0!0!(B $(C9.A&5GAv(B $(C>J@>4O4Y(B.
META$(C<h0!(B $(C>x>n<-(B ESC$(C<h7N(B $(C4k?kGR(B $(C6'4B(B $(C<x<-0!(B $(C9.A&5K4O4Y(B: ESC$(C<h8&(B $(C8U@z(B
$(CD!0m(B $(CA&>n9.@Z(B-v$(C8&(B $(CCD>_(B $(CGO8g(B $(CA&>n9.@Z(B-ESC v$(C4B(B $(C@[5?GOAv(B $(C>J@>4O4Y(B. $(C1W(B
$(C@L@/4B(B ESC$(C@L(B $(C:/0f<h0!(B $(C>F4O6s(B $(C@ZC<7N<-(B $(C1b4I@;(B $(C0!Ax(B $(C9.@Z@L1b(B $(C6'9.@T4O4Y(B.
>> C-x 1$(C@;(B ($(C@L(B $(C2@4k1b(B $(CC"?!<-(B) $(CCD<-(B $(C9Y4Z(B $(CC"@;(B $(C>x>V=J=C?@(B.
($(C9Y4Z(B $(CC"?!<-(B C-x 1$(C@;(B $(CD!8i(B $(C2@4k1b(B $(CC"@L(B $(C>x>nAz(B $(C0M@T4O4Y(B. $(C@L(B $(C8m7I@;(B "$(CGQ(B
$(CC"88(B $(C:8A8GO=C?@(B--$(CAv1](B $(C@[>wA_@N(B $(CC"88(B"$(C@L6s0m(B $(C;}0"GO=J=C?@(B.)
$(C>gBJ(B $(CC"?!(B $(C00@:(B $(C;g@LD-@;(B $(CH-8i(B $(CG%=CGR(B $(CGJ?d4B(B $(C>x@>4O4Y(B. $(CGQ(B $(CC"?!<-(B C-x
C-f$(C7N(B $(CFD@O@;(B $(CC#@88i(B $(C4Y8%(B $(CC"@:(B $(C:/H-0!(B $(C>x@>4O4Y(B. $(C0"0"@G(B $(CC"?!<-(B $(CFD@O@;(B
$(C5683@{@87N(B $(CC#@;(B $(C<v(B $(C@V@>4O4Y(B.
$(C5N(B $(CC"@;(B $(C;g?kGO?)(B $(C4Y8%(B $(C3;?k@;(B $(CH-8i(B $(CG%=CGO4B(B $(C6G(B $(C4Y8%(B $(C9f9}@L(B $(C@V@>4O4Y(B:
>> C-x 4 C-f$(C8&(B $(CD!0m(B $(CFD@O(B $(C@L8'(B $(CGO3*8&(B $(CCD(B $(C:8=J=C?@(B.
<Return>$(C@87N(B $(C3!3;=J=C?@(B. $(C1W(B $(CFD@O@L(B $(C9Y4Z(B $(CC"?!(B $(C3*E83*4B(B $(C0M@;(B
$(C:8=J=C?@(B. $(C1t9Z@L55(B $(C1W(B $(C0w@87N(B $(C?rAw@T4O4Y(B.
>> C-x o$(C8&(B $(CCD<-(B $(C4Y=C(B $(C2@4k1b(B $(CC"@87N(B $(C59>F(B $(C0!<-(B C-x 1$(C7N(B $(C9Y4Z(B $(CC"@;(B
$(CAv?l=J=C?@(B.
* $(CH81M@{(B $(CFmA}(B $(C<vAX(B
------------------
$(C0#H$(B "$(CH81M@{(B $(CFmA}(B $(C<vAX(B"$(C@L6s0m(B (recursive editing level) $(C:R8.?l4B(B $(C0M?!(B
$(C:@BxGO0T(B $(C5K4O4Y(B. $(C9f=D(B $(CAY?!<-(B $(CAV(B $(C9f=D(B $(C@L8'@G(B $(C>U5Z?!(B $(C@V4B(B $(C<R0}H#(B $(C9.@Z8&(B
$(C4k0}H#(B $(C9.@Z0!(B $(C5Q7/(B $(C=N0m(B $(C@V@88i(B $(C@L8&(B $(C>K(B $(C<v(B $(C@V@>4O4Y(B. $(C?98&(B $(C5i>n(B,
(Fundamental) $(C4k=E?!(B [(Fundamental)]$(C@L6s0m(B $(CG%=C5I(B $(C6'(B $(C@T4O4Y(B.
$(C@L(B $(CH81M@{(B $(CFmA}(B $(C<vAX?!<-(B $(C9~>n(B $(C3*1b(B $(C@'GX<-4B(B ESC ESC ESC$(C@;(B $(CD(4O4Y(B.
$(C@L(B $(C0M@:(B $(C4Y8q@{(B "$(C9~>n3*1b(B" $(C8m7I@T4O4Y(B. $(CC_0!5H(B $(CC"@;(B $(C>x>V0E3*(B $(C@[@:(B
$(C;g@LD-?!<-(B $(C3*?@1b(B $(C@'GX<-55(B $(C;g?k5I(B $(C<v(B $(C@V@>4O4Y(B.
>> M-x$(C8&(B $(CCD<-(B $(C@[@:(B $(C;g@LD-@87N(B $(C5i>n(B $(C0!=J=C?@(B; $(C1W8.0m4B(B ESC ESC ESC$(C@;(B
$(CCD<-(B $(C:|A.(B $(C3*?@=J=C?@(B.
C-g$(C8&(B $(C=a<-4B(B $(CH81M@{(B $(CFmA}(B $(C<vAX?!<-(B $(C9~>n3/(B $(C<v(B $(C>x@>4O4Y(B. $(C1W(B $(C@L@/4B(B C-g$(C0!(B
$(CH81M@{(B $(CFmA}(B $(C<vAX(B $(C@L3;?!<-(B $(C8m7I@L3*(B $(C@N<v8&(B $(CCk<RGO1b(B $(C@'GX(B $(C;g?k5G1b(B
$(C6'9.@T4O4Y(B.
* $(C4u(B $(C89@:(B $(C55?r8;(B $(C>r1b(B
---------------------
$(C@L(B $(CAvD'<-?!<-4B(B Emacs $(C;g?k@;(B $(C=C@[GO1b?!(B $(CCf:PGQ(B $(CA$:88&(B $(CA&0xGO7A0m(B
$(C3k7BGO?4@>4O4Y(B. Emacs$(C?!4B(B $(C3J9+3*(B $(C89@:(B $(C1b4I@L(B $(C@V>n<-(B $(C?)1b<-4B(B $(C8p5N(B $(C4Y(B
$(C<38mGR(B $(C<v(B $(C>x@>4O4Y(B. $(C1W7/3*(B, Emacs$(C?!4B(B $(C4Y8%(B $(C89@:(B $(C@/?kGQ(B $(CF/B!5i@L(B
$(C@V>n<-(B Emacs$(C?!(B $(C4kGX<-(B $(C4u(B $(C89@L(B $(C9h?l0m(B $(C=M@;(B $(C0M(B $(C@T4O4Y(B. Emacs$(C4B(B Emacs
$(C8m7I?!(B $(C4kGQ(B $(C9.<-H-8&(B $(C@P@;(B $(C<v(B $(C@V4B(B $(C8m7I@;(B $(CA&0xGU4O4Y(B. $(C@L(B "$(C55?r8;(B"
$(C8m7I5i@:(B $(C8p5N(B $(CA&>n9.@Z(B-h$(C7N(B $(C=C@[GO8g(B $(C@L(B $(C9.@Z8&(B "$(C55?r8;(B $(C9.@Z(B"$(C6s0m(B
$(C:N8(4O4Y(B.
$(C55?r8;(B $(CF/B!@;(B $(C;g?kGO7A8i(B C-h $(C9.@Z8&(B $(CD!0m(B $(C?xGO4B(B $(CA>7y@G(B $(C55?r8;@;(B
$(C0!8#E04B(B $(C9.@Z8&(B $(CD(4O4Y(B. $(C@|Gt(B $(C;}0"@L(B $(C>J3*8i(B C-h ?$(C8&(B $(CCD<-(B, Emacs$(C0!(B
$(C>n62(B $(CA>7y@G(B $(C55?r8;@;(B $(CA&0xGR(B $(C<v(B $(C@V4B0!8&(B $(C:8?)(B $(CAV557O(B $(CGO=J=C?@(B. C-h$(C8&(B
$(CD#(B $(CHD(B $(C>F9+71(B $(C55?r8;@L(B $(CGJ?d>x4Y0m(B $(CFG4\5G8i(B C-g$(C8&(B $(CCD<-(B $(CCk<RGO=J=C?@(B.
($(C>n62(B $(C0w?!<-4B(B C-h$(C@G(B $(C@G9L8&(B $(C:/0f=CDQ(B $(C3u@>4O4Y(B. $(C1W5i@L(B $(C8p5g(B $(C;g?k@Z?!0T(B
$(C@L785m(B $(C@O0}@{@N(B $(CA6C38&(B $(CCkGX<-4B(B $(C>J5G4B(B $(C0M@L9G7N(B $(C@L0M@:(B $(C?n?5(B $(CC<0h(B
$(C0|8.@Z?!0T(B $(C:RFrGR(B $(C<v(B $(C@V4B(B $(CCf:PGQ(B $(C1Y0E0!(B $(C5K4O4Y(B. C-h$(C0!(B $(CH-8i@G(B $(C9Y4Z?!(B
$(C55?r(B $(C>K828;@;(B $(CH-8i(B $(CG%=CGOAv(B $(C>J@88i(B $(C:RFr@L(B $(CGX0a5I(B $(C6'1nAv4B(B F1 $(C1[<h3*(B
M-x help <Return>$(C@;(B $(C4k=E(B $(C;g?kGO557O(B $(CGO=J=C?@(B.)
$(C0!@e(B $(C1b:;@{@N(B $(C55?r8;(B $(CF/B!@:(B C-h c $(C@T4O4Y(B. C-h$(C8&(B $(CD!0m(B $(C9.@Z(B c$(C8&(B $(CD#(B $(CHD(B
$(C8m7I(B $(C9.@Z3*(B $(C8m7I(B $(C<xBw(B(sequence)$(C8&(B $(CD!=J=C?@(B; $(C1W7/8i(B Emacs$(C4B(B $(C1W(B $(C8m7I?!(B
$(C4kGQ(B $(C>FAV(B $(C0#4\GQ(B $(C<38m@;(B $(CH-8i(B $(CG%=CGU4O4Y(B.
>> C-h c $(CA&>n9.@Z(B-p$(C8&(B $(CD!=J=C?@(B.
$(C>K828;@:(B $(C4Y@=0z(B $(C00@:(B $(C=D@L>n>_(B $(CGU4O4Y(B.
C-p runs the command previous-line
$(C@L4B(B "$(C1b4I@G(B $(C@L8'(B"$(C@;(B $(C8;GX(B $(CA]4O4Y(B. $(C1b4I(B $(C@L8'@:(B Emacs$(C8&(B $(C@Z1b?!0T(B $(C8BCg(B
$(C>20E3*(B $(CH.@eGR(B $(C6'(B $(CAV7N(B $(C;g?k5K4O4Y(B. $(C1W7/3*(B $(C1b4I(B $(C@L8'5i@:(B $(C1W(B $(C8m7I@L(B $(C>n62(B
$(C@O@;(B $(CGO4BAv8&(B $(C>K(B $(C<v(B $(C@V557O(B $(CA$GXAv1b(B $(C6'9.?!(B $(C1W5i@:(B $(C>FAV(B $(C0#4\GQ(B
$(C9.<-H-7N55(B $(C:@;g5I(B $(C<v(B $(C@V@>4O4Y(B--$(C?)EB1nAv(B $(C9h?n(B $(C8m7I5i@;(B $(C1b>oGO4B5%(B
$(CCf:PGR(B $(CA$557N(B.
C-x C-s$(C?M(B (META$(C<h3*(B EDIT$(C<h(B $(CH$@:(B $(C13C<<h0!(B $(C@V@88i(B) <ESC>v$(C?M(B $(C00@:(B $(C4YA_(B
$(C9.@Z(B $(C8m7I5i55(B C-h c$(C@G(B $(C4Y@=?!(B $(C?C(B $(C<v(B $(C@V@>4O4Y(B.
$(CGQ(B $(C8m7I?!(B $(C4kGX(B $(C4u(B $(C@Z<<GQ(B $(CA$:88&(B $(C>r1b(B $(C@'GX<-4B(B C-h c $(C4k=E?!(B C-h k$(C8&(B
$(C;g?kGO=J=C?@(B.
>> C-h k $(CA&>n9.@Z(B-p$(C8&(B $(CCD(B $(C:8=J=C?@(B.
$(C@L4B(B $(C1W(B $(C1b4I@G(B $(C@L8'0z(B $(CGT22(B $(C1W(B $(C9.<-H-8&(B Emacs $(CC"?!(B $(CH-8i(B $(CG%=CGU4O4Y(B.
$(CCb7B5H(B $(C0M@;(B $(C4Y(B $(C@P>z@88i(B C-x 1$(C7N(B $(C55?r8;(B $(C1[?y@;(B $(C>x>[4O4Y(B. $(C4g@e?!(B $(C>x>Y(B
$(CGJ?d4B(B $(C>x@>4O4Y(B. $(C55?r8;(B $(C1[?y@;(B $(CB|A6GO8i<-(B $(CFmA}@;(B $(CGO4Y0!(B C-x 1$(C@;(B $(CCD55(B
$(C5K4O4Y(B.
$(C?)1b?!(B $(C6G4Y8%(B $(C@/?kGQ(B C-h$(C@G(B $(CC_0!(B $(C<1EC@L(B $(C@V@>4O4Y(B:
C-h f $(C1b4I(B $(C1b<zGO1b(B. $(C1b4I(B $(C@L8'@;(B $(CD(4O4Y(B.
>> C-h f previous-line<Return>$(C@;(B $(CCD(B $(C:8=J=C?@(B.
$(C1W7/8i(B Emacs$(C0!(B C-p $(C8m7I@L(B $(CA&0xGO4B(B $(C1b4I?!(B $(C4kGQ(B $(C8p5g(B $(CA$:88&(B $(C@N<bGR(B
$(C0M@T4O4Y(B.
C-h a $(C8m7I(B $(CGY=I>n(B(apropos). $(CGY=I>n8&(B $(CD!8i(B Emacs$(C0!(B $(C@L(B
$(CGY=I>n0!(B $(C5i>n(B $(C@V4B(B $(C8p5g(B $(C8m7I5i@G(B $(C8q7O@;(B $(C@[<:GR(B
$(C0M@T4O4Y(B. $(C@L(B $(C8m7I5i@:(B $(C8p5N(B Meta$(C<h(B-x$(C7N(B $(C:N8&(B $(C<v(B
$(C@V@>4O4Y(B. $(C>n62(B $(C8m7I5i?!(B $(C4kGX<-4B(B $(C00@:(B $(C8m7I@;(B $(C=GG`GO4B(B,
$(CGQ5N03@G(B $(C9.@Z7N(B $(C5H(B $(C<xBw?!(B $(C4kGQ(B $(C8q7O55(B $(C8m7I(B $(CGY=I>n0!(B
$(C@[<:GU4O4Y(B.
>> C-h a file<Return>$(C@;(B $(CCD(B $(C:8=J=C?@(B.
$(C1W7/8i(B $(C@L8'?!(B "file"$(C@L(B $(C5i>n(B $(C@V4B(B $(C8p5g(B M-x $(C8m7I5i@G(B $(C8q7O@L(B $(C@[<:5G?)(B
$(C4Y8%(B $(CC"?!(B $(CH-8i(B $(CG%=C5K4O4Y(B. find-file$(C0z(B $(C00@:(B $(C8m7I5i?!4B(B C-x C-f$(C?M(B $(C00@:(B
$(C9.@Z(B $(C8m7I@G(B $(C8q7O@L(B $(CGX4gGO4B(B $(C8m7I@G(B $(C?7?!(B $(C@[<:5G>n(B $(C@V4B(B $(C0M@;(B $(C:<(B $(C<v(B $(C@V@;(B
$(C0M@T4O4Y(B.
>> C-M-v$(C8&(B $(CCD<-(B $(C55?r8;(B $(CC"@;(B $(C5N7g8;1b(B $(CGO=J=C?@(B. $(C@L8&(B $(C8n(B $(C9x(B $(CGO=J=C?@(B.
>> C-x 1$(C@;(B $(CCD<-(B $(C55?r8;(B $(CC"@;(B $(CAv?l=J=C?@(B.
* $(C0a7P(B
------
Emacs$(C8&(B $(C?O@|Hw(B $(C3*0!1b(B $(C@'GX<-4B(B C-x C-c$(C8&(B $(C>44Y4B(B $(C;g=G@;(B $(C1b>oGO=J=C?@(B.
$(C@O=C@{@87N(B $(CA60!:q7N(B $(C3*0!<-(B $(CHD?!(B $(C4Y=C(B Emacs$(C?!(B $(C5G59>F(B $(C?C(B $(C<v(B $(C@V1b(B
$(C@'GX<-4B(B C-z$(C8&(B $(C;g?kGO=J=C?@(B.
$(C@L(B $(CAvD'<-4B(B $(C;u7N?n(B $(C;g?k@Z5i(B $(C8p5N0!(B $(C@LGXGR(B $(C<v(B $(C@V557O(B $(C885i>nA3@89G7N(B
$(C:R:P8mGQ(B $(C;gGW@L(B $(C9_0_5G8i(B $(C>I>F<-(B $(C@Z1b(B $(C@Z=E@;(B $(CE?GOAv(B $(C8;0m(B $(C:RFrGO=J=C?@(B!
$(C:9;g(B $(CA60G(B
---------
$(C@L(B $(CAvD'<-4B(B Stuart Cracraft$(C>>0!(B Emacs $(C1Y?x(B $(C@Z7a8&(B $(C@'GX(B $(C>4(B, $(C1d(B Emacs
$(CAvD'<-8&(B $(C8pC<7N(B $(CGO?)(B $(C@[<:5H(B $(C0M@L4Y(B.
GNU Emacs$(C?M(B $(C00@L(B $(C@L(B $(CAvD'<-(B $(CFG@:(B $(C@z@[1G@L(B $(C@V@88g(B $(CF/A$GQ(B $(CA60G@;(B $(C88A7GR(B
$(C6'?!(B $(C:9;g:;@;(B $(C9hFwGR(B $(C<v(B $(C@V4B(B $(CGc0!8&(B $(C0.0m(B $(C3*?B(B $(C0M@L4Y(B:
$(C@z@[1G(B (c) 1985, 1996 Free Software Foundation
$(C@L(B $(C9.<-4B(B $(C@L(B $(C@z@[1G(B $(C0x0m?M(B $(CGc?k(B $(C0x0m0!(B $(C1W4k7N(B $(C@/Av5G0m(B, $(C9hFw@Z0!(B
$(C<vCk@Z?!0T(B $(C@L(B $(C0x0m?!(B $(C5{6s(B $(CGc?k5G4B(B $(C0MC373(B $(C6G(B $(C@g:P9hGO4B(B $(C0M@;(B
$(CGc?kGO4B(B $(CA60G@87N(B, $(C>n62(B $(C8EC<7N5gAv(B $(C9^@:(B $(C1W4k7N8&(B $(C:9;gGO0E3*(B
$(C:9;g:;@L(B $(C4Y8%(B $(C@L?!0T(B $(C9hFw5G4B(B $(C0M@L(B $(CGc?k5H4Y(B.
$(C@L(B $(C9.<-@G(B $(C<vA$FG@L3*(B $(C<vA$FG@G(B $(C@O:N:P@:(B $(C@'@G(B $(CA60G0z(B $(CGT22(B, $(C6GGQ(B $(C4)0!(B
$(C86Av87@87N(B $(C:/0fG_4BAv8&(B $(C4+?!(B $(C6g0T(B $(C3*E83=4Y4B(B $(CA60G@87N(B $(C9hFw5G4B(B $(C0M@L(B
$(CGc?k5H4Y(B.
Emacs $(C@ZC<8&(B $(C:9;gGO4B(B $(C0M@:(B $(CA;(B $(C4u(B $(C:9@bGOAv88(B $(C00@:(B $(C3;?k@T4O4Y(B.
COPYING$(C@L6s4B(B $(CFD@O@;(B $(C@P0m(B $(C3-(B $(CHD?!(B GNU Emacs$(C@G(B $(C:9;g:;@;(B $(CD#18?!0T(B
$(CAV=J=C?@(B. $(C@Z@/(B $(C<RGAF.?~>n8&(B $(C>20m(B $(C885i0m(B $(C0x@/GT@87N=a(B $(C<RGAF.?~>n(B
$(C9fGX8&(B ("$(C<R@/1G(B") $(C1Y@}GO4B5%(B $(C55?s=C4Y(B.

1132
etc/TUTORIAL.nl Normal file

File diff suppressed because it is too large Load diff

1165
etc/TUTORIAL.pl Normal file

File diff suppressed because it is too large Load diff

1111
etc/TUTORIAL.ro Normal file

File diff suppressed because it is too large Load diff

1031
etc/TUTORIAL.sl Normal file

File diff suppressed because it is too large Load diff

1007
etc/TUTORIAL.th Normal file

File diff suppressed because it is too large Load diff

244
etc/WHY-FREE Normal file
View file

@ -0,0 +1,244 @@
Why Software Should Not Have Owners
by Richard Stallman
Digital information technology contributes to the world by making it
easier to copy and modify information. Computers promise to make this
easier for all of us.
Not everyone wants it to be easier. The system of copyright gives
software programs "owners", most of whom aim to withhold software's
potential benefit from the rest of the public. They would like to be
the only ones who can copy and modify the software that we use.
The copyright system grew up with printing--a technology for mass
production copying. Copyright fit in well with this technology
because it restricted only the mass producers of copies. It did not
take freedom away from readers of books. An ordinary reader, who did
not own a printing press, could copy books only with pen and ink, and
few readers were sued for that.
Digital technology is more flexible than the printing press: when
information has digital form, you can easily copy it to share it with
others. This very flexibility makes a bad fit with a system like
copyright. That's the reason for the increasingly nasty and draconian
measures now used to enforce software copyright. Consider these four
practices of the Software Publishers Association (SPA):
* Massive propaganda saying it is wrong to disobey the owners
to help your friend.
* Solicitation for stool pigeons to inform on their coworkers and
colleagues.
* Raids (with police help) on offices and schools, in which people are
told they must prove they are innocent of illegal copying.
* Prosecution (by the US government, at the SPA's request) of people
such as MIT's David LaMacchia, not for copying software (he is not
accused of copying any), but merely for leaving copying facilities
unguarded and failing to censor their use.
All four practices resemble those used in the former Soviet Union,
where every copying machine had a guard to prevent forbidden copying,
and where individuals had to copy information secretly and pass it
from hand to hand as "samizdat". There is of course a difference: the
motive for information control in the Soviet Union was political; in
the US the motive is profit. But it is the actions that affect us,
not the motive. Any attempt to block the sharing of information, no
matter why, leads to the same methods and the same harshness.
Owners make several kinds of arguments for giving them the power
to control how we use information:
* Name calling.
Owners use smear words such as "piracy" and "theft", as well as expert
terminology such as "intellectual property" and "damage", to suggest a
certain line of thinking to the public--a simplistic analogy between
programs and physical objects.
Our ideas and intuitions about property for material objects are about
whether it is right to *take an object away* from someone else. They
don't directly apply to *making a copy* of something. But the owners
ask us to apply them anyway.
* Exaggeration.
Owners say that they suffer "harm" or "economic loss" when users copy
programs themselves. But the copying has no direct effect on the
owner, and it harms no one. The owner can lose only if the person who
made the copy would otherwise have paid for one from the owner.
A little thought shows that most such people would not have bought
copies. Yet the owners compute their "losses" as if each and every
one would have bought a copy. That is exaggeration--to put it kindly.
* The law.
Owners often describe the current state of the law, and the harsh
penalties they can threaten us with. Implicit in this approach is the
suggestion that today's law reflects an unquestionable view of
morality--yet at the same time, we are urged to regard these penalties
as facts of nature that can't be blamed on anyone.
This line of persuasion isn't designed to stand up to critical
thinking; it's intended to reinforce a habitual mental pathway.
It's elemental that laws don't decide right and wrong. Every American
should know that, forty years ago, it was against the law in many
states for a black person to sit in the front of a bus; but only
racists would say sitting there was wrong.
* Natural rights.
Authors often claim a special connection with programs they have
written, and go on to assert that, as a result, their desires and
interests concerning the program simply outweigh those of anyone
else--or even those of the whole rest of the world. (Typically
companies, not authors, hold the copyrights on software, but we are
expected to ignore this discrepancy.)
To those who propose this as an ethical axiom--the author is more
important than you--I can only say that I, a notable software author
myself, call it bunk.
But people in general are only likely to feel any sympathy with the
natural rights claims for two reasons.
One reason is an overstretched analogy with material objects. When I
cook spaghetti, I do object if someone else takes it and stops me from
eating it. In this case, that person and I have the same material
interests at stake, and it's a zero-sum game. The smallest
distinction between us is enough to tip the ethical balance.
But whether you run or change a program I wrote affects you directly
and me only indirectly. Whether you give a copy to your friend
affects you and your friend much more than it affects me. I shouldn't
have the power to tell you not to do these things. No one should.
The second reason is that people have been told that natural rights
for authors is the accepted and unquestioned tradition of our society.
As a matter of history, the opposite is true. The idea of natural
rights of authors was proposed and decisively rejected when the US
Constitution was drawn up. That's why the Constitution only *permits*
a system of copyright and does not *require* one; that's why it says
that copyright must be temporary. It also states that the purpose of
copyright is to promote progress--not to reward authors. Copyright
does reward authors somewhat, and publishers more, but that is
intended as a means of modifying their behavior.
The real established tradition of our society is that copyright cuts
into the natural rights of the public--and that this can only be
justified for the public's sake.
* Economics.
The final argument made for having owners of software is that this
leads to production of more software.
Unlike the others, this argument at least takes a legitimate approach
to the subject. It is based on a valid goal--satisfying the users of
software. And it is empirically clear that people will produce more of
something if they are well paid for doing so.
But the economic argument has a flaw: it is based on the assumption
that the difference is only a matter of how much money we have to pay.
It assumes that "production of software" is what we want, whether the
software has owners or not.
People readily accept this assumption because it accords with our
experiences with material objects. Consider a sandwich, for instance.
You might well be able to get an equivalent sandwich either free or
for a price. If so, the amount you pay is the only difference.
Whether or not you have to buy it, the sandwich has the same taste,
the same nutritional value, and in either case you can only eat it
once. Whether you get the sandwich from an owner or not cannot
directly affect anything but the amount of money you have afterwards.
This is true for any kind of material object--whether or not it has an
owner does not directly affect what it *is*, or what you can do with
it if you acquire it.
But if a program has an owner, this very much affects what it is, and
what you can do with a copy if you buy one. The difference is not
just a matter of money. The system of owners of software encourages
software owners to produce something--but not what society really
needs. And it causes intangible ethical pollution that affects us
all.
What does society need? It needs information that is truly available
to its citizens--for example, programs that people can read, fix,
adapt, and improve, not just operate. But what software owners
typically deliver is a black box that we can't study or change.
Society also needs freedom. When a program has an owner, the users
lose freedom to control part of their own lives.
And above all society needs to encourage the spirit of voluntary
cooperation in its citizens. When software owners tell us that
helping our neighbors in a natural way is "piracy", they pollute our
society's civic spirit.
This is why we say that free software is a matter of freedom, not
price.
The economic argument for owners is erroneous, but the economic issue
is real. Some people write useful software for the pleasure of
writing it or for admiration and love; but if we want more software
than those people write, we need to raise funds.
For ten years now, free software developers have tried various methods
of finding funds, with some success. There's no need to make anyone
rich; the median US family income, around $35k, proves to be enough
incentive for many jobs that are less satisfying than programming.
For years, until a fellowship made it unnecessary, I made a living
from custom enhancements of the free software I had written. Each
enhancement was added to the standard released version and thus
eventually became available to the general public. Clients paid me so
that I would work on the enhancements they wanted, rather than on the
features I would otherwise have considered highest priority.
The Free Software Foundation, a tax-exempt charity for free software
development, raises funds by selling CD-ROMs, tapes and manuals (all
of which users are free to copy and change), as well as from
donations. It now has a staff of five programmers, plus three
employees who handle mail orders.
Some free software developers make money by selling support services.
Cygnus Support, with around 50 employees, estimates that about 15 per
cent of its staff activity is free software development--a respectable
percentage for a software company.
Companies including Intel, Motorola, Texas Instruments and Analog
Devices have combined to fund the continued development of the free
GNU compiler for the language C. Meanwhile, the GNU compiler for the
Ada language is being funded by the US Air Force, which believes this
is the most cost-effective way to get a high quality compiler.
All these examples are small; the free software movement is still
small, and still young. But the example of listener-supported radio
in this country shows it's possible to support a large activity
without forcing each user to pay.
As a computer user today, you may find yourself using a proprietary
program. If your friend asks to make a copy, it would be wrong to
refuse. Cooperation is more important than copyright. But
underground, closet cooperation does not make for a good society. A
person should aspire to live an upright life openly with pride, and
this means saying "No" to proprietary software.
You deserve to be able to cooperate openly and freely with other
people who use software. You deserve to be able to learn how the
software works, and to teach your students with it. You deserve to be
able to hire your favorite programmer to fix it when it breaks.
You deserve free software.
Copyright 1994 Richard Stallman
Verbatim copying and redistribution is permitted
without royalty as long as this notice is preserved;
alteration is not permitted.

98
etc/Xkeymap.txt Normal file
View file

@ -0,0 +1,98 @@
# -*-Mode: Fundamental-*-
# X keymap file for rlk with some emacsified bindings
# This file contains the default keyboard mapping. The first column contains a X keyboard code; the other
# 16 columns contain the mapping of the keycode to a character string, with various combinations
# of the SHIFT, LOCK, META, and CONTROL keys down. See the man page for "keycomp" for more information.
#
# Keycode constants for non-typewriter keys are found in <X/Xkeyboard.h>.
#
# It is easiest to edit this file with an EMACS window running across the entire width of the display, with
# tab stop set to 4.
#
# E1=Find, E2=Insert Here, E3=Remove, E4=Select, E5=Prev Screen, E6=Next Screen
# uns L S SL M ML MS MSL C CL CS CSL CM CML CMS CMSL
0212 0023, 0023, 0023, 0023, 0223, 0223, 0223, 0223, 0022, 0022, 0022, 0022, 0222, 0222, 0222, 0222, /* E1 */
0213 U, U, U, U, U, U, U, U, U, U, U, U, U, U, U, U, /* E2 */
0214 0004, 0004, 0177, 0177, 0304, 0304, 0377, 0377, 0004, 0004, 0177, 0177, 0204, 0204, 0377, 0377 /* E3 */
0215 U, U, U, U, U, U, U, U, U, U, U, U, U, U, U, U, /* E4 */
0216 0326, 0326, 0326, 0326, 0326, 0326, 0326, 0326, "\255\226" "\255\226" "\255\226" "\255\226" "\255\226" "\255\226" "\255\226" "\255\226" /* E5 */
0217 0026, 0026, 0026, 0026, 0026, 0026, 0026, 0026, 0226, 0226, 0226, 0226, 0226, 0226, 0226, 0226, /* E6 */
0247 0002, 0002, 0002, 0002, 0302, 0302, 0302, 0302, 0202, 0202, 0202, 0202, 0202, 0202, 0202, 0202, /* Left arrow */
0250 0006, 0006, 0006, 0006, 0306, 0306, 0306, 0306, 0206, 0206, 0206, 0206, 0206, 0206, 0206, 0206, /* Right arrow */
0251 0016, 0016, 0016, 0016, 0316, 0316, 0316, 0316, 0216, 0216, 0216, 0216, 0216, 0216, 0216, 0216, /* Down arrow */
0252 0020, 0020, 0020, 0020, 0320, 0320, 0320, 0320, 0220, 0220, 0220, 0220, 0220, 0220, 0220, 0220, /* Up arrow */
0222 0260, '0', 0260, '0', 0260, '0', 0260, '0', 0260, '0', 0260, '0', 0260, '0', 0260, '0', /* KP 0 */
0224 0256, '.', 0256, '.', 0256, '.', 0256, '.', 0256, '.', 0256, '.', 0256, '.', 0256, '.', /* KP . */
0225 '\n', '\n', '\n', '\n', 0312, 0312, 0312, 0312, 0212, 0212, 0212, 0212, 0212, 0212, 0212, 0212, /* KP Enter */
0226 0261, '1', 0261, '1', 0261, '1', 0261, '1', 0261, '1', 0261, '1', 0261, '1', 0261, '1', /* KP 1 */
0227 0262, '2', 0262, '2', 0262, '2', 0262, '2', 0262, '2', 0262, '2', 0262, '2', 0262, '2', /* KP 2 */
0230 0263, '3', 0263, '3', 0263, '3', 0263, '3', 0263, '3', 0263, '3', 0263, '3', 0263, '3', /* KP 3 */
0231 0264, '4', 0264, '4', 0264, '4', 0264, '4', 0264, '4', 0264, '4', 0264, '4', 0264, '4', /* KP 4 */
0232 0265, '5', 0265, '5', 0265, '5', 0265, '5', 0265, '5', 0265, '5', 0265, '5', 0265, '5', /* KP 5 */
0233 0266, '6', 0266, '6', 0266, '6', 0266, '6', 0266, '6', 0266, '6', 0266, '6', 0266, '6', /* KP 6 */
0234 0254, ',', 0254, ',', 0254, ',', 0254, ',', 0254, ',', 0254, ',', 0254, ',', 0254, ',', /* KP , */
0235 0267, '7', 0267, '7', 0267, '7', 0267, '7', 0267, '7', 0267, '7', 0267, '7', 0267, '7', /* KP 7 */
0236 0270, '8', 0270, '8', 0270, '8', 0270, '8', 0270, '8', 0270, '8', 0270, '8', 0270, '8', /* KP 8 */
0237 0271, '9', 0271, '9', 0271, '9', 0271, '9', 0271, '9', 0271, '9', 0271, '9', 0271, '9', /* KP 9 */
0240 0255, '-', 0255, '-', 0255, '-', 0255, '-', 0255, '-', 0255, '-', 0255, '-', 0255, '-', /* KP - */
0174 0010, 0010, 0010, 0010, 0010, 0010, 0010, 0010, 0010, 0010, 0010, 0010, 0010, 0010, 0010, 0010, /* F15/Help */
0175 0037, 0037, 0037, 0037, 0037, 0037, 0037, 0037, 0037, 0037, 0037, 0037, 0037, 0037, 0037, 0037, /* F16/(Un)Do */
0161 0033, 0033, 0033, 0033, 0033, 0033, 0033, 0033, 0033, 0033, 0033, 0033, 0033, 0033, 0033, 0033, /* F11/ESC */
0162 '\b', '\b', '\b', '\b', '\b', '\b', U, U, '\b', '\b', U, U, U, U, U, U, /* F12/BS */
0163 '\n', '\n', '\n', '\n', '\n', '\n', U, U, '\n', '\n', U, U, U, U, U, U, /* F13/LF */
0274 0177, 0177, 0177, 0177, 0377, 0377, 0377, 0377, 0030, 0030, 0177, 0177, 0377, 0377, 0377, 0377, /* back */
0275 '\r', '\r', '\r', '\r', 0215, 0215, 0215, 0215, '\r', '\r', U, U, U, U, U, U, /* Return */
0276 '\t', '\t', '\t', '\t', 0211, 0211, 0211, 0211, "\021\t" "\021\t" "\021\t" "\021\t" "\021\t" "\021\t" "\021\t" "\021\t" /* Tab */
0277 '`', '`', '~', '~', 0340, 0340, 0376, 0376, 0036, 0036, 0036, 0036, U, U, U, U, /* ` */
0300 '1', '1', '!', '!', 0261, 0261, 0241, 0241, '1', '1', '!', '!', U, U, U, U, /* 1 */
0301 'q', 'Q', 'Q', 'Q', 0361, 0361, 0321, 0321, 0021, 0021, 0021, 0021, 0221, 0221, 0221, 0221, /* q */
0302 'a', 'A', 'A', 'A', 0341, 0341, 0301, 0301, 0001, 0001, 0001, 0001, 0201, 0201, 0201, 0201, /* a */
0303 'z', 'Z', 'Z', 'Z', 0372, 0372, 0332, 0332, 0032, 0032, 0032, 0032, 0232, 0232, 0232, 0232, /* z */
0305 '2', '2', '@', '@', 0262, 0262, 0300, 0300, 0000, 0000, 0000, 0000, 0262, 0262, 0200, 0200, /* 2 */
0306 'w', 'W', 'W', 'W', 0367, 0367, 0327, 0327, 0027, 0027, 0027, 0027, 0227, 0227, 0227, 0227, /* w */
0307 's', 'S', 'S', 'S', 0363, 0363, 0323, 0323, 0023, 0023, 0023, 0023, 0223, 0223, 0223, 0223, /* s */
0310 'x', 'X', 'X', 'X', 0370, 0370, 0330, 0330, 0030, 0030, 0030, 0030, 0230, 0230, 0230, 0230, /* x */
0311 '<', '<', '>', '>', 0274, 0274, 0276, 0276, U, U, U, U, U, U, U, U, /* < */
0313 '3', '3', '#', '#', 0263, 0263, 0243, 0243, 0033, 0033, '#', '#', U, U, U, U, /* 3 */
0314 'e', 'E', 'E', 'E', 0345, 0345, 0305, 0305, 0005, 0005, 0005, 0005, 0205, 0205, 0205, 0205, /* e */
0315 'd', 'D', 'D', 'D', 0344, 0344, 0304, 0304, 0004, 0004, 0004, 0004, 0204, 0204, 0204, 0204, /* d */
0316 'c', 'C', 'C', 'C', 0343, 0343, 0303, 0303, 0003, 0003, 0003, 0003, 0203, 0203, 0203, 0203, /* c */
0320 '4', '4', '$', '$', 0264, 0264, 0244, 0244, 0034, 0034, '$', '$', U, U, U, U, /* 4 */
0321 'r', 'R', 'R', 'R', 0362, 0362, 0322, 0322, 0022, 0022, 0022, 0022, 0222, 0222, 0222, 0222, /* r */
0322 'f', 'F', 'F', 'F', 0346, 0346, 0306, 0306, 0006, 0006, 0006, 0006, 0206, 0206, 0206, 0206, /* f */
0323 'v', 'V', 'V', 'V', 0366, 0366, 0326, 0326, 0026, 0026, 0026, 0026, 0226, 0226, 0226, 0226, /* v */
0324 ' ', ' ', ' ', ' ', 0240, 0240, 0240, 0240, 0000, 0000, 0000, 0000, 0200, 0200, 0200, 0200, /* space */
0326 '5', '5', '%', '%', 0265, 0265, 0245, 0245, 0035, 0035, '%', '%', U, U, U, U, /* 5 */
0327 't', 'T', 'T', 'T', 0364, 0364, 0324, 0324, 0024, 0024, 0024, 0024, 0224, 0224, 0224, 0224, /* t */
0330 'g', 'G', 'G', 'G', 0347, 0347, 0307, 0307, 0007, 0007, 0007, 0007, 0207, 0207, 0207, 0207, /* g */
0331 'b', 'B', 'B', 'B', 0342, 0342, 0302, 0302, 0002, 0002, 0002, 0002, 0202, 0202, 0202, 0202, /* b */
0333 '6', '6', '^', '^', 0266, 0266, 0336, 0336, 0036, 0036, 0036, 0036, U, U, U, U, /* 6 */
0334 'y', 'Y', 'Y', 'Y', 0371, 0371, 0331, 0331, 0031, 0031, 0031, 0031, 0231, 0231, 0231, 0231, /* y */
0335 'h', 'H', 'H', 'H', 0350, 0350, 0310, 0310, 0010, 0010, 0010, 0010, 0210, 0210, 0210, 0210, /* h */
0336 'n', 'N', 'N', 'N', 0356, 0356, 0316, 0316, 0016, 0016, 0016, 0016, 0216, 0216, 0216, 0216, /* n */
0340 '7', '7', '&', '&', 0267, 0267, 0246, 0246, 0037, 0037, '&', '&', U, U, U, U, /* 7 */
0341 'u', 'U', 'U', 'U', 0365, 0365, 0325, 0325, 0025, 0025, 0025, 0025, 0225, 0225, 0225, 0225, /* u */
0342 'j', 'J', 'J', 'J', 0352, 0352, 0312, 0312, 0012, 0012, 0012, 0012, 0212, 0212, 0212, 0212, /* j */
0343 'm', 'M', 'M', 'M', 0355, 0355, 0315, 0315, 0015, 0015, 0015, 0015, 0215, 0215, 0215, 0215, /* m */
0345 '8', '8', '*', '*', 0270, 0270, 0252, 0252, 0177, 0177, '*', '*', U, U, U, U, /* 8 */
0346 'i', 'I', 'I', 'I', 0351, 0351, 0311, 0311, 0011, 0011, 0011, 0011, 0211, 0211, 0211, 0211, /* i */
0347 'k', 'K', 'K', 'K', 0353, 0353, 0313, 0313, 0013, 0013, 0013, 0013, 0213, 0213, 0213, 0213, /* k */
0350 ',', ',', '<', '<', 0254, 0254, 0274, 0274, U, U, U, U, U, U, U, U, /* , */
0352 '9', '9', '(', '(', 0271, 0271, 0250, 0250, '9', '9', '(', '(', U, U, U, U, /* 9 */
0353 'o', 'O', 'O', 'O', 0357, 0357, 0317, 0317, 0017, 0017, 0017, 0017, 0217, 0217, 0217, 0217, /* o */
0354 'l', 'L', 'L', 'L', 0354, 0354, 0314, 0314, 0014, 0014, 0014, 0014, 0214, 0214, 0214, 0214, /* l */
0355 '.', '.', '>', '>', 0256, 0256, 0276, 0276, U, U, U, U, U, U, U, U, /* . */
0357 '0', '0', ')', ')', 0260, 0260, 0251, 0251, '0', '0', ')', ')', U, U, U, U, /* 0 */
0360 'p', 'P', 'P', 'P', 0360, 0360, 0320, 0320, 0020, 0020, 0020, 0020, 0220, 0220, 0220, 0220, /* p */
0362 ';', ';', ':', ':', 0273, 0273, 0272, 0272, U, U, U, U, U, U, U, U, /* ; */
0363 '/', '/', '?', '?', 0257, 0257, 0277, 0277, 0037, 0037, 0037, 0037, 0237, 0237, 0237, 0237, /* / */
0365 '=', '=', '+', '+', 0275, 0275, 0253, 0253, U, U, U, U, U, U, U, U, /* = */
0366 ']', ']', '}', '}', 0335, 0335, 0376, 0376, 0035, 0035, 0035, 0035, 0335, 0335, 0335, 0335, /* ] */
0367 '\\', '\\', '|', '|', 0334, 0334, 0374, 0374, 0034, 0034, 0034, 0034, 0334, 0334, 0334, 0334, /* \ */
0371 '-', '-', '_', '_', 0255, 0255, 0337, 0337, 0037, 0037, 0037, 0037, 0337, 0337, 0337, 0337, /* - */
0372 '[', '[', '{', '{', 0333, 0333, 0373, 0373, 0033, 0033, 0033, 0033, 0333, 0333, 0333, 0333, /* [ */
0373 '\'', '\'', '"', '"', 0247, 0247, 0242, 0242, U, U, U, U, U, U, U, U, /* ' */
#
# local variables:
# tab-width: 4
# End:

819
etc/copying.paper Normal file
View file

@ -0,0 +1,819 @@
(For more information about the GNU project and free software,
look at the files `GNU', `COPYING', and `DISTRIB', in the same
directory as this file.)
Why Software Should Be Free
by Richard Stallman
(Version of April 24, 1992)
Copyright (C) 1991, 1992, Free Software Foundation, Inc.
Verbatim copying and redistribution is permitted
without royalty; alteration is not permitted.
Introduction
************
The existence of software inevitably raises the question of how
decisions about its use should be made. For example, suppose one
individual who has a copy of a program meets another who would like a
copy. It is possible for them to copy the program; who should decide
whether this is done? The individuals involved? Or another party,
called the "owner"?
Software developers typically consider these questions on the
assumption that the criterion for the answer is to maximize developers'
profits. The political power of business has led to the government
adoption of both this criterion and the answer proposed by the
developers: that the program has an owner, typically a corporation
associated with its development.
I would like to consider the same question using a different
criterion: the prosperity and freedom of the public in general.
This answer cannot be decided by current law--the law should conform
to ethics, not the other way around. Nor does current practice decide
this question, although it may suggest possible answers. The only way
to judge is to see who is helped and who is hurt by recognizing owners
of software, why, and how much. In other words, we should perform a
cost-benefit analysis on behalf of society as a whole, taking account of
individual freedom as well as production of material goods.
In this essay, I will describe the effects of having owners, and show
that the results are detrimental. My conclusion is that programmers
have the duty to encourage others to share, redistribute, study and
improve the software we write: in other words, to write "free"
software.(1)
How Owners Justify Their Power
******************************
Those who benefit from the current system where programs are property
offer two arguments in support of their claims to own programs: the
emotional argument and the economic argument.
The emotional argument goes like this: "I put my sweat, my heart, my
soul into this program. It comes from *me*, it's *mine*!"
This argument does not require serious refutation. The feeling of
attachment is one that programmers can cultivate when it suits them; it
is not inevitable. Consider, for example, how willingly the same
programmers usually sign over all rights to a large corporation for a
salary; the emotional attachment mysteriously vanishes. By contrast,
consider the great artists and artisans of medieval times, who didn't
even sign their names to their work. To them, the name of the artist
was not important. What mattered was that the work was done--and the
purpose it would serve. This view prevailed for hundreds of years.
The economic argument goes like this: "I want to get rich (usually
described inaccurately as `making a living'), and if you don't allow me
to get rich by programming, then I won't program. Everyone else is like
me, so nobody will ever program. And then you'll be stuck with no
programs at all!" This threat is usually veiled as friendly advice
from the wise.
I'll explain later why this threat is a bluff. First I want to
address an implicit assumption that is more visible in another
formulation of the argument.
This formulation starts by comparing the social utility of a
proprietary program with that of no program, and then concludes that
proprietary software development is, on the whole, beneficial, and
should be encouraged. The fallacy here is in comparing only two
outcomes--proprietary software vs. no software--and assuming there are
no other possibilities.
Given a system of intellectual property, software development is
usually linked with the existence of an owner who controls the
software's use. As long as this linkage exists, we are often faced
with the choice of proprietary software or none. However, this linkage
is not inherent or inevitable; it is a consequence of the specific
social/legal policy decision that we are questioning: the decision to
have owners. To formulate the choice as between proprietary software
vs. no software is begging the question.
The Argument against Having Owners
**********************************
The question at hand is, "Should development of software be linked
with having owners to restrict the use of it?"
In order to decide this, we have to judge the effect on society of
each of those two activities *independently*: the effect of developing
the software (regardless of its terms of distribution), and the effect
of restricting its use (assuming the software has been developed). If
one of these activities is helpful and the other is harmful, we would be
better off dropping the linkage and doing only the helpful one.
To put it another way, if restricting the distribution of a program
already developed is harmful to society overall, then an ethical
software developer will reject the option of doing so.
To determine the effect of restricting sharing, we need to compare
the value to society of a restricted (i.e., proprietary) program with
that of the same program, available to everyone. This means comparing
two possible worlds.
This analysis also addresses the simple counterargument sometimes
made that "the benefit to the neighbor of giving him or her a copy of a
program is cancelled by the harm done to the owner." This
counterargument assumes that the harm and the benefit are equal in
magnitude. The analysis involves comparing these magnitudes, and shows
that the benefit is much greater.
To elucidate this argument, let's apply it in another area: road
construction.
It would be possible to fund the construction of all roads with
tolls. This would entail having toll booths at all street corners.
Such a system would provide a great incentive to improve roads. It
would also have the virtue of causing the users of any given road to
pay for that road. However, a toll booth is an artificial obstruction
to smooth driving--artificial, because it is not a consequence of how
roads or cars work.
Comparing free roads and toll roads by their usefulness, we find that
(all else being equal) roads without toll booths are cheaper to
construct, cheaper to run, safer, and more efficient to use.(2) In a
poor country, tolls may make the roads unavailable to many citizens.
The roads without toll booths thus offer more benefit to society at
less cost; they are preferable for society. Therefore, society should
choose to fund roads in another way, not by means of toll booths. Use
of roads, once built, should be free.
When the advocates of toll booths propose them as *merely* a way of
raising funds, they distort the choice that is available. Toll booths
do raise funds, but they do something else as well: in effect, they
degrade the road. The toll road is not as good as the free road; giving
us more or technically superior roads may not be an improvement if this
means substituting toll roads for free roads.
Of course, the construction of a free road does cost money, which the
public must somehow pay. However, this does not imply the inevitability
of toll booths. We who must in either case pay will get more value for
our money by buying a free road.
I am not saying that a toll road is worse than no road at all. That
would be true if the toll were so great that hardly anyone used the
road--but this is an unlikely policy for a toll collector. However, as
long as the toll booths cause significant waste and inconvenience, it is
better to raise the funds in a less obstructive fashion.
To apply the same argument to software development, I will now show
that having "toll booths" for useful software programs costs society
dearly: it makes the programs more expensive to construct, more
expensive to distribute, and less satisfying and efficient to use. It
will follow that program construction should be encouraged in some other
way. Then I will go on to explain other methods of encouraging and (to
the extent actually necessary) funding software development.
The Harm Done by Obstructing Software
=====================================
Consider for a moment that a program has been developed, and any
necessary payments for its development have been made; now society must
choose either to make it proprietary or allow free sharing and use.
Assume that the existence of the program and its availability is a
desirable thing.(3)
Restrictions on the distribution and modification of the program
cannot facilitate its use. They can only interfere. So the effect can
only be negative. But how much? And what kind?
Three different levels of material harm come from such obstruction:
* Fewer people use the program.
* None of the users can adapt or fix the program.
* Other developers cannot learn from the program, or base new work
on it.
Each level of material harm has a concomitant form of psychosocial
harm. This refers to the effect that people's decisions have on their
subsequent feelings, attitudes and predispositions. These changes in
people's ways of thinking will then have a further effect on their
relationships with their fellow citizens, and can have material
consequences.
The three levels of material harm waste part of the value that the
program could contribute, but they cannot reduce it to zero. If they
waste nearly all the value of the program, then writing the program
harms society by at most the effort that went into writing the program.
Arguably a program that is profitable to sell must provide some net
direct material benefit.
However, taking account of the concomitant psychosocial harm, there
is no limit to the harm that proprietary software development can do.
Obstructing Use of Programs
===========================
The first level of harm impedes the simple use of a program. A copy
of a program has nearly zero marginal cost (and you can pay this cost by
doing the work yourself), so in a free market, it would have nearly zero
price. A license fee is a significant disincentive to use the program.
If a widely-useful program is proprietary, far fewer people will use it.
It is easy to show that the total contribution of a program to
society is reduced by assigning an owner to it. Each potential user of
the program, faced with the need to pay to use it, may choose to pay,
or may forego use of the program. When a user chooses to pay, this is a
zero-sum transfer of wealth between two parties. But each time someone
chooses to forego use of the program, this harms that person without
benefiting anyone. The sum of negative numbers and zeros must be
negative.
But this does not reduce the amount of work it takes to *develop*
the program. As a result, the efficiency of the whole process, in
delivered user satisfaction per hour of work, is reduced.
This reflects a crucial difference between copies of programs and
cars, chairs, or sandwiches. There is no copying machine for material
objects outside of science fiction. But programs are easy to copy;
anyone can produce as many copies as are wanted, with very little
effort. This isn't true for material objects because matter is
conserved: each new copy has to be built from raw materials in the same
way that the first copy was built.
With material objects, a disincentive to use them makes sense,
because fewer objects bought means less raw materials and work needed
to make them. It's true that there is usually also a startup cost, a
development cost, which is spread over the production run. But as long
as the marginal cost of production is significant, adding a share of the
development cost does not make a qualitative difference. And it does
not require restrictions on the freedom of ordinary users.
However, imposing a price on something that would otherwise be free
is a qualitative change. A centrally-imposed fee for software
distribution becomes a powerful disincentive.
What's more, central production as now practiced is inefficient even
as a means of delivering copies of software. This system involves
enclosing physical disks or tapes in superfluous packaging, shipping
large numbers of them around the world, and storing them for sale. This
cost is presented as an expense of doing business; in truth, it is part
of the waste caused by having owners.
Damaging Social Cohesion
========================
Suppose that both you and your neighbor would find it useful to run a
certain program. In ethical concern for your neighbor, you should feel
that proper handling of the situation will enable both of you to use it.
A proposal to permit only one of you to use the program, while
restraining the other, is divisive; neither you nor your neighbor should
find it acceptable.
Signing a typical software license agreement means betraying your
neighbor: "I promise to deprive my neighbor of this program so that I
can have a copy for myself." People who make such choices feel
internal psychological pressure to justify them, by downgrading the
importance of helping one's neighbors--thus public spirit suffers.
This is psychosocial harm associated with the material harm of
discouraging use of the program.
Many users unconsciously recognize the wrong of refusing to share, so
they decide to ignore the licenses and laws, and share programs anyway.
But they often feel guilty about doing so. They know that they must
break the laws in order to be good neighbors, but they still consider
the laws authoritative, and they conclude that being a good neighbor
(which they are) is naughty or shameful. That is also a kind of
psychosocial harm, but one can escape it by deciding that these licenses
and laws have no moral force.
Programmers also suffer psychosocial harm knowing that many users
will not be allowed to use their work. This leads to an attitude of
cynicism or denial. A programmer may describe enthusiastically the
work that he finds technically exciting; then when asked, "Will I be
permitted to use it?", his face falls, and he admits the answer is no.
To avoid feeling discouraged, he either ignores this fact most of the
time or adopts a cynical stance designed to minimize the importance of
it.
Since the age of Reagan, the greatest scarcity in the United States
is not technical innovation, but rather the willingness to work together
for the public good. It makes no sense to encourage the former at the
expense of the latter.
Obstructing Custom Adaptation of Programs
=========================================
The second level of material harm is the inability to adapt programs.
The ease of modification of software is one of its great advantages over
older technology. But most commercially available software isn't
available for modification, even after you buy it. It's available for
you to take it or leave it, as a black box--that is all.
A program that you can run consists of a series of numbers whose
meaning is obscure. No one, not even a good programmer, can easily
change the numbers to make the program do something different.
Programmers normally work with the "source code" for a program, which
is written in a programming language such as Fortran or C. It uses
names to designate the data being used and the parts of the program, and
it represents operations with symbols such as `+' for addition and `-'
for subtraction. It is designed to help programmers read and change
programs. Here is an example; a program to calculate the distance
between two points in a plane:
float
distance (p0, p1)
struct point p0, p1;
{
float xdist = p1.x - p0.x;
float ydist = p1.y - p0.y;
return sqrt (xdist * xdist + ydist * ydist);
}
Here is the same program in executable form, on the computer I
normally use:
1314258944 -232267772 -231844864 1634862
1411907592 -231844736 2159150 1420296208
-234880989 -234879837 -234879966 -232295424
1644167167 -3214848 1090581031 1962942495
572518958 -803143692 1314803317
Source code is useful (at least potentially) to every user of a
program. But most users are not allowed to have copies of the source
code. Usually the source code for a proprietary program is kept secret
by the owner, lest anybody else learn something from it. Users receive
only the files of incomprehensible numbers that the computer will
execute. This means that only the program's owner can change the
program.
A friend once told me of working as a programmer in a bank for about
six months, writing a program similar to something that was commercially
available. She believed that if she could have gotten source code for
that commercially available program, it could easily have been adapted
to their needs. The bank was willing to pay for this, but was not
permitted to--the source code was a secret. So she had to do six
months of make-work, work that counts in the GNP but was actually waste.
The MIT Artificial Intelligence lab (AI lab) received a graphics
printer as a gift from Xerox around 1977. It was run by free software
to which we added many convenient features. For example, the software
would notify a user immediately on completion of a print job. Whenever
the printer had trouble, such as a paper jam or running out of paper,
the software would immediately notify all users who had print jobs
queued. These features facilitated smooth operation.
Later Xerox gave the AI lab a newer, faster printer, one of the first
laser printers. It was driven by proprietary software that ran in a
separate dedicated computer, so we couldn't add any of our favorite
features. We could arrange to send a notification when a print job was
sent to the dedicated computer, but not when the job was actually
printed (and the delay was usually considerable). There was no way to
find out when the job was actually printed; you could only guess. And
no one was informed when there was a paper jam, so the printer often
went for an hour without being fixed.
The system programmers at the AI lab were capable of fixing such
problems, probably as capable as the original authors of the program.
Xerox was uninterested in fixing them, and chose to prevent us, so we
were forced to accept the problems. They were never fixed.
Most good programmers have experienced this frustration. The bank
could afford to solve the problem by writing a new program from
scratch, but a typical user, no matter how skilled, can only give up.
Giving up causes psychosocial harm--to the spirit of self-reliance.
It is demoralizing to live in a house that you cannot rearrange to suit
your needs. It leads to resignation and discouragement, which can
spread to affect other aspects of one's life. People who feel this way
are unhappy and do not do good work.
Imagine what it would be like if recipes were hoarded in the same
fashion as software. You might say, "How do I change this recipe to
take out the salt?", and the great chef would respond, "How dare you
insult my recipe, the child of my brain and my palate, by trying to
tamper with it? You don't have the judgment to change my recipe and
make it work right!"
"But my doctor says I'm not supposed to eat salt! What can I do?
Will you take out the salt for me?"
"I would be glad to do that; my fee is only $50,000." Since the
owner has a monopoly on changes, the fee tends to be large. "However,
right now I don't have time. I am busy with a commission to design a
new recipe for ship's biscuit for the Navy Department. I might get
around to you in about two years."
Obstructing Software Development
================================
The third level of material harm affects software development.
Software development used to be an evolutionary process, where a person
would take an existing program and rewrite parts of it for one new
feature, and then another person would rewrite parts to add another
feature; in some cases, this continued over a period of twenty years.
Meanwhile, parts of the program would be "cannibalized" to form the
beginnings of other programs.
The existence of owners prevents this kind of evolution, making it
necessary to start from scratch when developing a program. It also
prevents new practitioners from studying existing programs to learn
useful techniques or even how large programs can be structured.
Owners also obstruct education. I have met bright students in
computer science who have never seen the source code of a large
program. They may be good at writing small programs, but they can't
begin to learn the different skills of writing large ones if they can't
see how others have done it.
In any intellectual field, one can reach greater heights by standing
on the shoulders of others. But that is no longer generally allowed in
the software field--you can only stand on the shoulders of the other
people *in your own company*.
The associated psychosocial harm affects the spirit of scientific
cooperation, which used to be so strong that scientists would cooperate
even when their countries were at war. In this spirit, Japanese
oceanographers abandoning their lab on an island in the Pacific
carefully preserved their work for the invading U.S. Marines, and left a
note asking them to take good care of it.
Conflict for profit has destroyed what international conflict spared.
Nowadays scientists in many fields don't publish enough in their papers
to enable others to replicate the experiment. They publish only enough
to let readers marvel at how much they were able to do. This is
certainly true in computer science, where the source code for the
programs reported on is usually secret.
It Does Not Matter How Sharing Is Restricted
============================================
I have been discussing the effects of preventing people from copying,
changing and building on a program. I have not specified how this
obstruction is carried out, because that doesn't affect the conclusion.
Whether it is done by copy protection, or copyright, or licenses, or
encryption, or ROM cards, or hardware serial numbers, if it *succeeds*
in preventing use, it does harm.
Users do consider some of these methods more obnoxious than others.
I suggest that the methods most hated are those that accomplish their
objective.
Software Should be Free
=======================
I have shown how ownership of a program--the power to restrict
changing or copying it--is obstructive. Its negative effects are
widespread and important. It follows that society shouldn't have
owners for programs.
Another way to understand this is that what society needs is free
software, and proprietary software is a poor substitute. Encouraging
the substitute is not a rational way to get what we need.
Vaclav Havel has advised us to "Work for something because it is
good, not just because it stands a chance to succeed." A business
making proprietary software stands a chance of success in its own narrow
terms, but it is not what is good for society.
Why People Will Develop Software
********************************
If we eliminate intellectual property as a means of encouraging
people to develop software, at first less software will be developed,
but that software will be more useful. It is not clear whether the
overall delivered user satisfaction will be less; but if it is, or if
we wish to increase it anyway, there are other ways to encourage
development, just as there are ways besides toll booths to raise money
for streets. Before I talk about how that can be done, first I want to
question how much artificial encouragement is truly necessary.
Programming is Fun
==================
There are some lines of work that few will enter except for money;
road construction, for example. There are other fields of study and
art in which there is little chance to become rich, which people enter
for their fascination or their perceived value to society. Examples
include mathematical logic, classical music, and archaeology; and
political organizing among working people. People compete, more sadly
than bitterly, for the few funded positions available, none of which is
funded very well. They may even pay for the chance to work in the
field, if they can afford to.
Such a field can transform itself overnight if it begins to offer the
possibility of getting rich. When one worker gets rich, others demand
the same opportunity. Soon all may demand large sums of money for doing
what they used to do for pleasure. When another couple of years go by,
everyone connected with the field will deride the idea that work would
be done in the field without large financial returns. They will advise
social planners to ensure that these returns are possible, prescribing
special privileges, powers and monopolies as necessary to do so.
This change happened in the field of computer programming in the past
decade. Fifteen years ago, there were articles on "computer
addiction": users were "onlining" and had hundred-dollar-a-week habits.
It was generally understood that people frequently loved programming
enough to break up their marriages. Today, it is generally understood
that no one would program except for a high rate of pay. People have
forgotten what they knew fifteen years ago.
When it is true at a given time that most people will work in a
certain field only for high pay, it need not remain true. The dynamic
of change can run in reverse, if society provides an impetus. If we
take away the possibility of great wealth, then after a while, when the
people have readjusted their attitudes, they will once again be eager
to work in the field for the joy of accomplishment.
The question, "How can we pay programmers?", becomes an easier
question when we realize that it's not a matter of paying them a
fortune. A mere living is easier to raise.
Funding Free Software
=====================
Institutions that pay programmers do not have to be software houses.
Many other institutions already exist which can do this.
Hardware manufacturers find it essential to support software
development even if they cannot control the use of the software. In
1970, much of their software was free because they did not consider
restricting it. Today, their increasing willingness to join
consortiums shows their realization that owning the software is not
what is really important for them.
Universities conduct many programming projects. Today, they often
sell the results, but in the 1970s, they did not. Is there any doubt
that universities would develop free software if they were not allowed
to sell software? These projects could be supported by the same
government contracts and grants which now support proprietary software
development.
It is common today for university researchers to get grants to
develop a system, develop it nearly to the point of completion and call
that "finished", and then start companies where they really finish the
project and make it usable. Sometimes they declare the unfinished
version "free"; if they are thoroughly corrupt, they instead get an
exclusive license from the university. This is not a secret; it is
openly admitted by everyone concerned. Yet if the researchers were not
exposed to the temptation to do these things, they would still do their
research.
Programmers writing free software can make their living by selling
services related to the software. I have been hired to port the GNU C
compiler to new hardware, and to make user-interface extensions to GNU
Emacs. (I offer these improvements to the public once they are done.)
I also teach classes for which I am paid.
I am not alone in working this way; there is now a successful,
growing corporation which does no other kind of work. Several other
companies also provide commercial support for the free software of the
GNU system. This is the beginning of the independent software support
industry-an industry that could become quite large if free software
becomes prevalent. It provides users with an option generally
unavailable for proprietary software, except to the very wealthy.
New institutions such as the Free Software Foundation can also fund
programmers. Most of the foundation's funds come from users buying
tapes through the mail. The software on the tapes is free, which means
that every user has the freedom to copy it and change it, but many
nonetheless pay to get copies. (Recall that "free software" refers to
freedom, not to price.) Some users order tapes who already have a copy,
as a way of making a contribution they feel we deserve. The Foundation
also receives sizable donations from computer manufacturers.
The Free Software Foundation is a charity, and its income is spent on
hiring as many programmers as possible. If it had been set up as a
business, distributing the same free software to the public for the same
fee, it would now provide a very good living for its founder.
Because the Foundation is a charity, programmers often work for the
Foundation for half of what they could make elsewhere. They do this
because we are free of bureaucracy, and because they feel satisfaction
in knowing that their work will not be obstructed from use. Most of
all, they do it because programming is fun. In addition, volunteers
have written many useful programs for us. (Recently even technical
writers have begun to volunteer.)
This confirms that programming is among the most fascinating of all
fields, along with music and art. We don't have to fear that no one
will want to program.
What Do Users Owe to Developers?
================================
There is a good reason for users of software to feel a moral
obligation to contribute to its support. Developers of free software
are contributing to the users' activities, and it is both fair and in
the long term interest of the users to give them funds to continue.
However, this does not apply to proprietary software developers,
since obstructionism deserves a punishment rather than a reward.
We thus have a paradox: the developer of useful software is entitled
to the support of the users, but any attempt to turn this moral
obligation into a requirement destroys the basis for the obligation. A
developer can either deserve a reward or demand it, but not both.
I believe that an ethical developer faced with this paradox must act
so as to deserve the reward, but should also entreat the users for
voluntary donations. Eventually the users will learn to support
developers without coercion, just as they have learned to support public
radio and television stations.
What Is Software Productivity?
******************************
If software were free, there would still be programmers, but perhaps
fewer of them. Would this be bad for society?
Not necessarily. Today the advanced nations have fewer farmers than
in 1900, but we do not think this is bad for society, because the few
deliver more food to the consumers than the many used to do. We call
this improved productivity. Free software would require far fewer
programmers to satisfy the demand, because of increased software
productivity at all levels:
* Wider use of each program that is developed.
* The ability to adapt existing programs for customization instead
of starting from scratch.
* Better education of programmers.
* The elimination of duplicate development effort.
Those who object to cooperation because it would result in the
employment of fewer programmers, are actually objecting to increased
productivity. Yet these people usually accept the widely-held belief
that the software industry needs increased productivity. How is this?
"Software productivity" can mean two different things: the overall
productivity of all software development, or the productivity of
individual projects. Overall productivity is what society would like to
improve, and the most straightforward way to do this is to eliminate the
artificial obstacles to cooperation which reduce it. But researchers
who study the field of "software productivity" focus only on the
second, limited, sense of the term, where improvement requires difficult
technological advances.
Is Competition Inevitable?
**************************
Is it inevitable that people will try to compete, to surpass their
rivals in society? Perhaps it is. But competition itself is not
harmful; the harmful thing is *combat*.
There are many ways to compete. Competition can consist of trying to
achieve ever more, to outdo what others have done. For example, in the
old days, there was competition among programming wizards--competition
for who could make the computer do the most amazing thing, or for who
could make the shortest or fastest program for a given task. This kind
of competition can benefit everyone, *as long as* the spirit of good
sportsmanship is maintained.
Constructive competition is enough competition to motivate people to
great efforts. A number of people are competing to be the first to have
visited all the countries on Earth; some even spend fortunes trying to
do this. But they do not bribe ship captains to strand their rivals on
desert islands. They are content to let the best person win.
Competition becomes combat when the competitors begin trying to
impede each other instead of advancing themselves--when "Let the best
person win" gives way to "Let me win, best or not." Proprietary
software is harmful, not because it is a form of competition, but
because it is a form of combat among the citizens of our society.
Competition in business is not necessarily combat. For example, when
two grocery stores compete, their entire effort is to improve their own
operations, not to sabotage the rival. But this does not demonstrate a
special commitment to business ethics; rather, there is little scope for
combat in this line of business short of physical violence. Not all
areas of business share this characteristic. Withholding information
that could help everyone advance is a form of combat.
Business ideology does not prepare people to resist the temptation to
combat the competition. Some forms of combat have been made banned with
anti-trust laws, truth in advertising laws, and so on, but rather than
generalizing this to a principled rejection of combat in general,
executives invent other forms of combat which are not specifically
prohibited. Society's resources are squandered on the economic
equivalent of factional civil war.
"Why Don't You Move to Russia?"
*******************************
In the United States, any advocate of other than the most extreme
form of laissez-faire selfishness has often heard this accusation. For
example, it is leveled against the supporters of a national health care
system, such as is found in all the other industrialized nations of the
free world. It is leveled against the advocates of public support for
the arts, also universal in advanced nations. The idea that citizens
have any obligation to the public good is identified in America with
Communism. But how similar are these ideas?
Communism as was practiced in the Soviet Union was a system of
central control where all activity was regimented, supposedly for the
common good, but actually for the sake of the members of the Communist
party. And where copying equipment was closely guarded to prevent
illegal copying.
The American system of intellectual property exercises central
control over distribution of a program, and guards copying equipment
with automatic copying protection schemes to prevent illegal copying.
By contrast, I am working to build a system where people are free to
decide their own actions; in particular, free to help their neighbors,
and free to alter and improve the tools which they use in their daily
lives. A system based on voluntary cooperation, and decentralization.
Thus, if we are to judge views by their resemblance to Russian
Communism, it is the software owners who are the Communists.
The Question of Premises
************************
I make the assumption in this paper that a user of software is no
less important than an author, or even an author's employer. In other
words, their interests and needs have equal weight, when we decide
which course of action is best.
This premise is not universally accepted. Many maintain that an
author's employer is fundamentally more important than anyone else.
They say, for example, that the purpose of having owners of software is
to give the author's employer the advantage he deserves--regardless of
how this may affect the public.
It is no use trying to prove or disprove these premises. Proof
requires shared premises. So most of what I have to say is addressed
only to those who share the premises I use, or at least are interested
in what their consequences are. For those who believe that the owners
are more important than everyone else, this paper is simply irrelevant.
But why would a large number of Americans accept a premise which
elevates certain people in importance above everyone else? Partly
because of the belief that this premise is part of the legal traditions
of American society. Some people feel that doubting the premise means
challenging the basis of society.
It is important for these people to know that this premise is not
part of our legal tradition. It never has been.
Thus, the Constitution says that the purpose of copyright is to
"promote the progress of science and the useful arts." The Supreme
Court has elaborated on this, stating in `Fox Film vs. Doyal' that "The
sole interest of the United States and the primary object in conferring
the [copyright] monopoly lie in the general benefits derived by the
public from the labors of authors."
We are not required to agree with the Constitution or the Supreme
Court. (At one time, they both condoned slavery.) So their positions
do not disprove the owner supremacy premise. But I hope that the
awareness that this is a radical right-wing assumption rather than a
traditionally recognized one will weaken its appeal.
Conclusion
**********
We like to think that our society encourages helping your neighbor;
but each time we reward someone for obstructionism, or admire them for
the wealth they have gained in this way, we are sending the opposite
message.
Software hoarding is one form of our general willingness to disregard
the welfare of society for personal gain. We can trace this disregard
from Ronald Reagan to Jim Bakker, from Ivan Boesky to Exxon, from
failing banks to failing schools. We can measure it with the size of
the homeless population and the prison population. The antisocial
spirit feeds on itself, because the more we see that other people will
not help us, the more it seems futile to help them. Thus society decays
into a jungle.
If we don't want to live in a jungle, we must change our attitudes.
We must start sending the message that a good citizen is one who
cooperates when appropriate, not one who is successful at taking from
others. I hope that the free software movement will contribute to
this: at least in one area, we will replace the jungle with a more
efficient system which encourages and runs on voluntary cooperation.
---------- Footnotes ----------
(1) The word "free" in "free software" refers to freedom, not to
price; the price paid for a copy of a free program may be zero, or
small, or (rarely) quite large.
(2) The issues of pollution and traffic congestion do not alter
this conclusion. If we wish to make driving more expensive to
discourage driving in general, it is disadvantageous to do this using
toll booths, which contribute to both pollution and congestion. A tax
on gasoline is much better. Likewise, a desire to enhance safety by
limiting maximum speed is not relevant; a free access road enhances the
average speed by avoiding stops and delays, for any given speed limit.
(3) One might regard a particular computer program as a harmful
thing that should not be available at all, like the Lotus Marketplace
database of personal information, which was withdrawn from sale due to
public disapproval. Most of what I say does not apply to this case,
but it makes little sense to argue for having an owner on the grounds
that the owner will make the program less available. The owner will
not make it *completely* unavailable, as one would wish in the case of
a program whose use is considered destructive.

1
etc/ctags.1 Normal file
View file

@ -0,0 +1 @@
.so man1/etags.1

BIN
etc/e/eterm Normal file

Binary file not shown.

21
etc/e/eterm.ti Normal file
View file

@ -0,0 +1,21 @@
eterm,
lines#24,cols#80,
colors#8,pairs#64,
cuu1=\E[A,cud1=\n,cub1=\b,cuf1=\E[C,home=\E[H,cr=\r,
cuu=\E[%p1%dA,cud=\E[%p1%dB,cub=\E[%p1%dD,cuf=\E[%p1%dC,
cup=\E[%i%p1%d;%p2%dH,
ind=\n,csr=\E[%i%p1%d;%p2%dr,
il1=\E[L,il=\E[%p1%dL,
clear=\E[H\E[J,ed=\E[J,el=\E[K,el1=\E[1K,
dl1=\E[M,dl=\E[%p1%dM,dch1=\E[P,dch=\E[%p1%dP,
smir=\E[4h,rmir=\E[4l,ich=\E[%p1%d@,mir,
smcup=\E7\E[?47h,rmcup=\E[2J\E[?47l\E8,
ht=\t,khome=\E[1~,kend=\E[4~,knp=\E[6~,kpp=\E[5~,
kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
smso=\E[7m,rmso=\E[m,
smul=\E[4m,rmul=\E[m,
rev=\E[7m,bold=\E[1m,sgr0=\E[m,
invis=\E[8m,
setab=\E[%p1%{40}%+%dm, setaf=\E[%p1%{30}%+%dm,
bel=^G,xenl,am,

207
etc/echo.msg Normal file
View file

@ -0,0 +1,207 @@
Path: mit-amt!mit-eddie!think!harvard!seismo!gatech!akgua!whuxlm!whuxl!houxm!ihnp4!stolaf!umn-cs!herndon
From: herndon@umn-cs.UUCP
Newsgroups: net.sources
Subject: GNU Echo, Release 1
Message-ID: <1600001@umn-cs.UUCP>
Date: 28 Oct 85 18:23:00 GMT
/* Written 12:22 pm Oct 28, 1985 by umn-cs!herndon in umn-cs:net.jokes */
/* ---------- "GNU Echo, Release 1" ---------- */
GNUecho(1) UNIX Programmer's Manual GNUecho(1)
NAME
echo - echo arguments
SYNOPSIS
echo [ options ] ...
DESCRIPTION
_^HE_^Hc_^Hh_^Ho writes its arguments separated by blanks and terminated
by a newline on the standard output. Options to filter and
redirect the output are as follows:
-2 generate rhyming couplets from keywords
-3 generate Haiku verse from keywords
-5 generate limerick from keywords
-a convert ASCII to ASCII
-A disambiguate sentence structure
-b generate bureaucratese equivalent (see -x)
-B issue equivalent C code with bugs fixed
-c simplify/calculate arithmetic expression(s)
-C remove copyright notice(s)
-d define new echo switch map
-D delete all ownership information from system files
-e evaluate lisp expression(s)
-E convert ASCII to Navajo
-f read input from file
-F transliterate to french
-g generate pseudo-revolutionary marxist catch-phrases
-G prepend GNU manifesto
-h halt system (reboot suppressed on Suns, Apollos, and
VAXen, not supported on NOS-2)
-i emulate IBM OS/VU (recursive universes not supported)
-I emulate IBM VTOS 3.7.6 (chronosynclastic infundibulae
supported with restrictions documented in IBM VTOS
Printed 10/28/85 18 January 1983 1
GNUecho(1) UNIX Programmer's Manual GNUecho(1)
Reference Manual rev 3.2.6)
-J generate junk mail
-j justify text (see -b option)
-k output "echo" software tools
-K delete privileged accounts
-l generate legalese equivalent
-L load echo modules
-M generate mail
-N send output to all reachable networks (usable with -J,
-K, -h options)
-n do not add newline to the output
-o generate obscene text
-O clean up dirty language
-p decrypt and print /etc/passwd
-P port echo to all reachable networks
-P1 oolcay itay
-q query standard input for arguments
-r read alternate ".echo" file on start up
-R change root password to "RMS"
-s suspend operating system during output (Sun and VAX BSD
4.2 only)
-S translate to swahili
-T emulate TCP/IP handler
-t issue troff output
-u issue unix philosophy essay
-v generate reverberating echo
-V print debugging information
Printed 10/28/85 18 January 1983 2
GNUecho(1) UNIX Programmer's Manual GNUecho(1)
-x decrypt DES format messages (NSA secret algorithm CX
3.8, not distributed outside continental US)
_^HE_^Hc_^Hh_^Ho is useful for producing diagnostics in shell programs
and for writing constant data on pipes. To send diagnostics
to the standard error file, do `echo ... 1>&2'.
AUTHOR
Richard M. Stallman
Printed 10/28/85 18 January 1983 3

858
etc/edt-user.doc Normal file
View file

@ -0,0 +1,858 @@
File: edt-user.doc --- EDT Emulation User Instructions
For GNU Emacs 19
Copyright (C) 1986, 1992, 1994, 1995, 1999 Free Software Foundation, Inc.
Author: Kevin Gallagher <kevingal@onramp.net>
Maintainer: Kevin Gallagher <kevingal@onramp.net>
Keywords: emulations
This file is part of GNU Emacs.
GNU Emacs 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 2, or (at your option)
any later version.
GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
============================================================================
I. OVERVIEW:
This version of the EDT emulation package for GNU Emacs is a substantially
enhanced version of the original. A large part of the original can still be
found here, of course, but much of it has been modified and quite a bit is
new. Many of the ideas found here are borrowed from others. In particular,
some of the code found here was drawn from an earlier re-write of the EDT
package done at DSC in 1989 by Matthew Frohman.
Send bug fixes, suggestions for enhancements, and corrections to this
documentation to Kevin Gallagher (kevingal@onramp.net).
The EDT emulation consists of the following files:
edt-user.doc - User instructions (which you are reading now)
edt.el - EDT Emulation Functions and Default Configuration
edt-lk201.el - Support for DEC LK-201 Keyboards
edt-vt100.el - Support for DEC VT-100 (and above) terminals
edt-mapper.el - Support for Keyboards used under X Windows
edt-pc.el - Support for the PC AT Keyboard under MS-DOS
Several goals were kept in mind when making this version:
1. Emulate EDT Keypad Mode commands closely so that current
EDT users will find that it easy and comfortable to use
GNU Emacs with a small learning curve;
2. Make it easy for a user to customize EDT emulation key
bindings without knowing much about Emacs Lisp;
3. Make it easy to switch between the original EDT default bindings
and the user's customized bindings, without having to exit Emacs.
4. Provide support for some TPU/EVE functions not supported in
EDT.
5. Provide an easy way to restore ALL original Emacs key bindings,
just as they existed before the EDT emulation was first invoked.
6. Support GNU Emacs 19. (Support for GNU Emacs 18 has been dropped.
Also, although there is some code designed to support Xemacs 19
(formerly Lucid Emacs), this is not fully implemented at this
time.
7. When running under X, support highlighting of marked text.
8. Handle terminal configuration under X interactively when the
emulation is invoked for the first time.
9. Support a PC AT keyboard under MS-DOS.
II. TERMINALS/KEYBOARDS SUPPORTED:
Keyboards used under X Windows are supported via the edt-mapper function. The
first time you invoke the emulation under X, the edt-mapper function is run
automatically and the user is prompted to identify which keys the emulation is
to use for the standard keypad and function keys EDT expects (e.g., PF1, PF2,
etc.). This configuration is saved to disk read each time the emulation is
invoked.
In character oriented connections not running a window manager, the following
terminals/keyboards are supported. (1) DEC VT-100 series and higher. This
includes well behaved VT clones and emulators. If you are using a VT series
terminal, be sure that the term environment variable is set properly before
invoking emacs. (2) PC AT keyboard under MS-DOS.
Be sure to read the SPECIAL NOTES FOR SOME PLATFORMS sections to see if those
notes apply to you.
III. STARTING THE EDT EMULATION:
Start up GNU Emacs and enter "M-x edt-emulation-on" to begin the emulation.
After initialization is complete, the following message will appear below the
status line informing you that the emulation has been enabled:
Default EDT keymap active
You can have the EDT Emulation start up automatically, each time you initiate
a GNU Emacs session, by adding the following line to your .emacs file:
(setq term-setup-hook 'edt-emulation-on)
A reference sheet is included (later on) listing the default EDT Emulation key
bindings. This sheet is also accessible on line from within Emacs by pressing
PF2, GOLD H, or HELP (when in the EDT Default Mode).
It is easy to customize key bindings in the EDT Emulation. (See CUSTOMIZING
section, below.) Customizations are placed in a file called edt-user.el. (A
sample edt-user.el file can be found in the CUSTOMIZING section.) If
edt-user.el is found in your GNU Emacs load path during EDT Emulation
initialization, then the following message will appear below the status line
indicating that the emulation has been enabled, enhanced by your own
customizations:
User EDT custom keymap active
Once enabled, it is easy to switch back and forth between your customized EDT
Emulation key bindings and the default EDT Emulation key bindings. It is also
easy to turn off the emulation. Doing so completely restores the original key
bindings in effect just prior to invoking the emulation.
Where EDT key bindings and GNU Emacs key bindings conflict, the default GNU
Emacs key bindings are retained by the EDT emulation by default. If you are a
diehard EDT user you may not like this. The CUSTOMIZING section explains how
to change this default.
IV. SPECIAL NOTES FOR SOME PLATFORMS:
Sun Workstations running X:
Some earlier Sun keyboards do not have arrow keys separate from the
keypad keys. It is difficult to emulate the full EDT keypad and still
retain use of the arrow keys on such keyboards.
The Sun Type 5 keyboard, however, does have separate arrow keys. This
makes it a candidate for setting up a reasonable EDT keypad emulation.
Unfortunately, Sun's default X keynames for the keypad keys don't permit
GNU Emacs to interpret the keypad 2, 4, 6, and 8 keys as something other
than arrow keys, nor use all the top row of keys for PF1 thru PF4 keys.
Here's the contents of an .xmodmaprc file which corrects this problem for
Sun Type 5 keyboards:
! File: .xmodmaprc
!
! Set up Sun Type 5 keypad for use with the GNU Emacs EDT Emulation
!
keycode 53 = KP_Divide
keycode 54 = KP_Multiply
keycode 57 = KP_Decimal
keycode 75 = KP_7
keycode 76 = KP_8
keycode 77 = KP_9
keycode 78 = KP_Subtract
keycode 97 = KP_Enter
keycode 98 = KP_4
keycode 99 = KP_5
keycode 100 = KP_6
keycode 101 = KP_0
keycode 105 = F24
keycode 119 = KP_1
keycode 120 = KP_2
keycode 121 = KP_3
keycode 132 = KP_Add
Feed .xmodmaprc to the xmodmap command and all the Sun Type 5 keypad keys
will now be configurable for the emulation of an LK-201 keypad (less the
comma key). The line
keycode 105 = F24
modifies the NumLock key to be the F24 key which can then be configured
to behave as the PF1 (Gold) key. In doing so, you will no longer
have a NumLock key. If you are using other software under X
which requires a NumLock key, then examine your keyboard and look
for one you don't use and redefine it to be the NumLock key.
Basically, you need to clear the NumLock key from being assigned
as a modifier, assign it to the key of your choice, and then add
it back as a modifier. (See the "General Notes on Using NumLock
for the PF1 Key on a Unix System" section below for further help
on how to do this.)
PC users running MS-DOS:
By default, F1 is configured to emulate the PF1 (GOLD) key. But NumLock
can be used instead if you load a freeware TSR distributed with
MS-Kermit, call gold.com. It is distributed in a file called gold22.zip
and comes with the source code as well as a loadable binary image.
(See edt-pc.el for more information.)
PC users running GNU/Linux:
The default X server configuration of three keys PC AT keyboard keys
needs to be modified to permit the PC keyboard to emulate an LK-201
keyboard properly. Here's the contents of an .xmodmaprc file which makes
these changes for your:
! File: .xmodmaprc
!
! Set up PC keypad under GNU/Linux for the GNU Emacs EDT Emulation
!
clear mod2
keycode 77 = F12
keycode 96 = Num_Lock Pointer_EnableKeys
add mod2 = Num_Lock
Feed the file to the xmodmap command and the PC NumLock keypad
key will now be configurable for the emulation of the PF1 key.
The PC keypad can now emulate an LK-201 keypad (less the comma
key), the standard keyboard supplied with DEC terminals VT-200 and above.
This .xmodmaprc file switches the role of the F12 and NumLock
keys. It has been tested on RedHat GNU/Linux 5.2. Other
versions of GNU/Linux may require different keycodes. (See the
"General Notes on Using NumLock for the PF1 Key on a Unix System"
section below for further help on how to do this.)
NOTE: It is necessary to have NumLock ON for the PC keypad to emulate the
LK-201 keypad properly.
General Notes on Using NumLock for the PF1 Key on a Unix System:
Making the physical NumLock key available for use in the EDT
Emulation requires some modification to the default X Window
settings. Since the keycode assignments vary from system to
system, some investigation is needed to see how to do this on
a particular system.
The following commands should be run and the output examined.
On RedHat GNU/Linux 5.2 on a PC, we get the following output when
running xmodmap.
"xmodmap -pm" yields:
xmodmap: up to 2 keys per modifier, (keycodes in parentheses):
shift Shift_L (0x32), Shift_R (0x3e)
lock Caps_Lock (0x42)
control Control_L (0x25), Control_R (0x6d)
mod1 Alt_L (0x40), Alt_R (0x71)
mod2 Num_Lock (0x4d)
mod3
mod4
mod5 Scroll_Lock (0x4e)
Note that Num_Lock is assigned to the modifier mod2. This is
what hides Num_Lock from being seen by Emacs.
Now, "xmodmap -pke" yields:
.
.
.
keycode 77 = Num_Lock Pointer_EnableKeys
.
.
.
keycode 96 = F12
.
.
.
So, in RedHat GNU/Linux 5.2 on a PC, Num_Lock generates keycode
77. The following steps are taken:
1. clear the assignment of Num_Lock to mod2;
2. swap the keycodes assigned to F12 and Num_Lock;
3. assign Num_Lock back to mod2.
The .xmodmaprc file looks like this:
! File: .xmodmaprc
!
! Set up PC keypad under GNU/Linux for the GNU Emacs EDT Emulation
!
clear mod2
keycode 77 = F12
keycode 96 = Num_Lock Pointer_EnableKeys
add mod2 = Num_Lock
So, after executing "xmodmap .xmodmaprc", a press of the physical
F12 key looks like a Num_Lock keypress to X. Also, a press of the
physical NumLock key looks like a press of the F12 key to X.
Now, edt-mapper.el will see "f12" when the physical NumLock key
is pressed, allowing the NumLock key to be used as the EDT PF1
(Gold) key.
V. HOW DOES THIS EDT EMULATION DIFFER FROM REAL EDT?:
In general, you will find that this emulation of EDT replicates most, but not
all, of EDT's most used Keypad Mode editing functions and behavior. It is not
perfect, but most EDT users who have tried the emulation agree that it is
quite good enough to make it easy for die-hard EDT users to move over to using
GNU Emacs.
Here's a list of the most important differences between EDT and this GNU Emacs
EDT Emulation. The list is short but you must be aware of these differences
if you are to use the EDT Emulation effectively.
1. Entering repeat counts works a little differently than in EDT.
EDT allows users to enter a repeat count before entering a command that
accepts repeat counts. For example, when in EDT, pressing these three
keys in sequence, GOLD 5 KP1, will move the cursor in the current
direction 5 words.
Emacs provides two ways to enter repeat counts, though neither involves
using the GOLD key. In Emacs, repeat counts can be entered by using the
ESC key. For example, pressing these keys in sequence, ESC 1 0 KP1, will
move the cursor in the current direction 10 words.
Emacs provides another command called universal-argument that can do the
same thing, plus a few other things. Normally, Emacs has this bound to
C-u.
2. The EDT SUBS command, bound to GOLD ENTER, is NOT supported. The built-in
Emacs query-replace command has been bound to GOLD ENTER, instead. It is
much more convenient to use than SUBS.
3. EDT's line mode commands and nokeypad mode commands are NOT supported
(with one important exception; see item 8 in the Highlights section
below). Although, at first, this may seem like a big omission, the set of
built-in Emacs commands provides a much richer set of capabilities which
more than make up for this omission.
To enter Emacs commands not bound to keys, you can press GOLD KP7 or the
DO key. Emacs will display its own command prompt called Meta-x (M-x).
You can also invoke this prompt the normal Emacs way by entering ESC x.
4. Selected text is highlighted ONLY when running under X Windows. Gnu Emacs
19 does not support highlighting of text on VT series terminals, at this
time.
5. Just like TPU/EVE, The ENTER key is NOT used to terminate input when the
editor prompts you for input. The RETURN key is used, instead. (KP4 and
KP5 do terminate input for the FIND command, just like in EDT, however.)
VI. SOME HIGHLIGHTS IN THIS EDT EMULATION, AND SOME COMPARISONS TO THE
ORIGINAL GNU EMACS EDT EMULATION:
1. The EDT define key command is supported (edt-define-key) and is bound to
C-k in the default EDT mode when EDT control sequence bindings are enabled
or one of the sample edt-user.el customization files is used. The TPU/EVE
learn command is supported but not bound to a key in the default EDT mode
but is bound in the sample edt-user.el files.
Unlike the TPU/EVE learn command, which uses one key to begin the learn
sequence, C-l, and another command to remember the sequence, C-r, this
version of the learn command (edt-learn) serves as a toggle to both begin
and to remember the learn sequence.
Many users who change the meaning of a key with the define key and the
learn commands, would like to be able to restore the original key binding
without having to quit and restart emacs. So a restore key command is
provided to do just that. When invoked, it prompts you to press the key
to which you wish the last replaced key definition restored. It is bound
to GOLD C-k in the default EDT mode when EDT control sequence bindings are
enabled or one of the sample edt-user.el customization files is used.
2. Direction support is fully supported. It is no longer accomplished by
re-defining keys each time the direction is changed. Thus, commands
sensitive to the current direction setting may be bound easily to any key.
3. All original emacs bindings are fully restored when EDT emulation is
turned off.
4. User custom EDT bindings are kept separate from the default EDT bindings.
One can toggle back and forth between the custom EDT bindings and default
EDT bindings.
5. The Emacs functions in edt.el attempt to emulate, where practical, the
exact behavior of the corresponding EDT keypad mode commands. In a few
cases, the emulation is not exact, but we hope you will agree it is close
enough. In a very few cases, we chose to use the Emacs way of handling
things. As mentioned earlier, we do not emulate the EDT SUBS command.
Instead, we chose to use the Emacs query-replace function, which we find
to be easier to use.
6. Emacs uses the regexp assigned to page-delimiter to determine what marks a
page break. This is normally "^\f", which causes the edt-page command to
ignore form feeds not located at the beginning of a line. To emulate the
EDT PAGE command exactly, page-delimiter is set to "\f" when EDT emulation
is turned on, and restored to "^\f" when EDT emulation is turned off.
But, since some users prefer the Emacs definition of a page break, or may
wish to preserve a customized definition of page break, one can override
the EDT definition by placing
(setq edt-keep-current-page-delimiter t)
in your .emacs file.
7. The EDT definition of a section of a terminal window is hardwired to be 16
lines of its one-and-only 24-line window (the EDT SECT command bound to
KP8). That's two-thirds of the window at a time. Since Emacs, like
TPU/EVE, can handle multiple windows of sizes of other than 24 lines, the
definition of section used here has been modified to two-thirds of the
current window. (There is also an edt-scroll-window function which you
may prefer over the SECT emulation.)
8. Cursor movement and deletion involving word entities is identical to EDT.
This, above all else, gives the die-hard EDT user a sense of being at
home. Also, an emulation of EDT's SET ENTITY WORD command is provided,
for those users who like to customize movement by a word at a time to
their own liking.
9. EDT's FIND and FNDNXT are supported.
10. EDT's APPEND and REPLACE commands are supported.
11. CHNGCASE is supported. It works on individual characters or selected
text, if SELECT is active. In addition, two new commands are provided:
edt-lowercase and edt-uppercase. They work on individual WORDS or
selected text, if SELECT is active.
12. Form feed and tab insert commands are supported.
13. A new command, edt-duplicate-word, is provided. If you experiment with
it, you might find it to be surprisingly useful and may wonder how you
ever got along without it! It is assigned to C-j in the sample
edt-user.el customization files.
14. TPU/EVE's Rectangular Cut and Paste functions (originally from the EVE-Plus
package) are supported. But unlike the TPU/EVE versions, these here
support both insert and overwrite modes. The seven rectangular functions
are bound to F7, F8, GOLD-F8, F9, GOLD-F9, F10, and GOLD-F10 in the
default EDT mode.
15. The original EDT emulation package set up many default regular and GOLD
bindings. We tried to preserve most (but not all!) of these, so users of
the original emulation package will feel more at home.
Nevertheless, there are still many GOLD key sequences which are not bound
to any functions. These are prime candidates to use for your own
customizations.
Also, there are several commands in edt.el not bound to any key. So, you
will find it worthwhile to look through edt.el for functions you may wish
to add to your personal customized bindings.
16. The VT200/VT300 series terminals steal the function keys F1 to F5 for
their own use. These do not generate signals which are sent to the host.
So, edt.el does not assign any default bindings to F1 through F5.
In addition, our VT220 terminals generate an interrupt when the F6 key is
pressed (^C or ^Y, can't remember which) and not the character sequence
documented in the manual. So, binding emacs commands to F6 will not work
if your terminal behaves the same way.
17. The VT220 terminal has no ESC, BS, nor LF keys, as does a VT100. So the
default EDT bindings adopt the standard DEC convention of having the F11,
F12, and F13 keys, on a VT200 series (and above) terminal, assigned to the
same EDT functions that are bound to ESC, BS, and LF on a VT100 terminal.
18. Each user, through the use of a private edt-user.el file, can customize,
very easily, personal EDT emulation bindings.
19. The EDT SELECT and RESET functions are supported. However, unlike EDT,
pressing RESET to cancel text selection does NOT reset the existing
setting of the current direction.
We also provide a TPU/EVE like version of the single SELECT/RESET
function, called edt-toggle-select, which makes the EDT SELECT function
into a toggle on/off switch. That is, if selection is ON, pressing SELECT
again turns selection off (cancels selection). This function is used in
the sample edt-user.el customization files.
VII. CUSTOMIZING:
Most EDT users, at one time or another, make some custom key bindings, or
use someone else's custom key bindings, which they come to depend upon just as
if they were built-in bindings. This EDT Emulation for GNU Emacs is designed
to make it easy to customize bindings.
If you wish to customize the EDT Emulation to use some of your own key
bindings, you need to make a private version of edt-user.el in your own
private lisp directory. There are two sample files edt-user.el1 and
edt-user.el2 for you to use as templates and for ideas. Look at
edt-user.el1 first. Unless you will be using two or more very different
types of terminals on the same system, you need not look at edt-user.el2.
First, you need to have your own private lisp directory, say ~/lisp, and
you should add it to the GNU Emacs load path.
NOTE: A few sites have different load-path requirements, so the above
directions may need some modification if your site has such special
needs.
Creating your own edt-user.el file:
A sample edt-user.el file is attached to the end of this user documentation.
You should use it as a guide to learn how you can customize EDT emulation
bindings to your own liking. Names used to identify the set of LK-201
keypad and function keys are:
Keypad Keys:
PF1 PF2 PF3 PF4
KP7 KP8 KP9 KP-
KP4 KP5 KP6 KP,
KP1 KP2 KP3
KP0 KPP KPE
Arrow Keys:
LEFT RIGHT DOWN UP
Function Keys:
F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 F13 F14
HELP DO F17 F18 F19 F20
FIND INSERT REMOVE
SELECT PREVIOUS NEXT
Note:
Many VT-200 terminals, and above, steal function keys F1 thru
F5 for terminal setup control and don't send anything to the
host if pressed. So customizing bindings to these keys may
not work for you.
There are three basic functions that do the EDT emulation bindings:
edt-bind-standard-key, edt-bind-gold-key, and edt-bind-function-key.
The first two are for binding functions to keys which are standard across most
keyboards. This makes them keyboard independent, making it possible to define
these key bindings for all terminals in the file edt.el.
The first, edt-bind-standard-key, is used typically to bind emacs commands to
control keys, although some people use it to bind commands to other keys, as
well. (For example, some people use it to bind the VT200 seldom used
back-tick key (`) to the function "ESC-prefix" so it will behave like an ESC
key.) The second function, edt-bind-gold-key, is used to bind emacs commands
to gold key sequences involving alpha-numeric keys, special character keys,
and control keys.
The third function, edt-bind-function-key, is terminal dependent and is
defined in a terminal specific file (see edt-vt100.el for example). It is
used to bind emacs commands to function keys, to keypad keys, and to gold
sequences of those keys.
WARNING: Each of the three functions, edt-bind-function-key,
edt-bind-gold-key, and edt-bind-standard-key, has an optional
last argument. The optional argument should NOT be used in
edt-user.el! When the optional argument is missing, each
function knows to make the key binding part of the user's EDT
custom bindings, which is what you want to do in edt-user.el!
The EDT default bindings are set up in edt.el by calling these
same functions with the optional last argument set to "t". So, if
you decide to copy such function calls from edt.el to edt-user.el
for subsequent modification, BE SURE TO DELETE THE "t" AT THE END
OF EACH PARAMETER LIST!
SPECIFYING WORD ENTITIES:
The variable edt-word-entities is used to emulate EDT's SET ENTITY WORD
command. It contains a list of characters to be treated as words in
themselves. If the user does not define edt-word-entities in his/her .emacs
file, then it is set up with the EDT default containing only TAB.
The characters are stored in the list by their numerical values, not as
strings. Emacs supports several ways to specify the numerical value of a
character. One method is to use the question mark: ?A means the numerical
value for A, ?/ means the numerical value for /, and so on. Several
unprintable characters have special representations:
?\b specifies BS, C-h
?\t specifies TAB, C-i
?\n specifies LFD, C-j
?\v specifies VTAB, C-k
?\f specifies FF, C-l
?\r specifies CR, C-m
?\e specifies ESC, C-[
?\\ specifies \
Here are some examples:
(setq edt-word-entities '(?\t ?- ?/)) ;; Specifies TAB, - , and /
(setq edt-word-entities '(?\t) ;; Specifies TAB, the default
You can also specify characters by their decimal ascii values:
(setq edt-word-entities '(9 45 47)) ;; Specifies TAB, - , and /
ENABLING EDT CONTROL KEY SEQUENCE BINDINGS:
Where EDT key bindings and GNU Emacs key bindings conflict, the default GNU
Emacs key bindings are retained by default. Some diehard EDT users may not
like this. So, if the variable edt-use-EDT-control-key-bindings is set to
true in a user's .emacs file, then the default EDT Emulation mode will enable
most of the original EDT control key sequence bindings. If you wish to do
this, add the following line to your .emacs file:
(setq edt-use-EDT-control-key-bindings t)
DEFAULT EDT Keypad
F7: Copy Rectangle +----------+----------+----------+----------+
F8: Cut Rect Overstrike |Prev Line |Next Line |Bkwd Char |Frwd Char |
G-F8: Paste Rect Overstrike | (UP) | (DOWN) | (LEFT) | (RIGHT) |
F9: Cut Rect Insert |Window Top|Window Bot|Bkwd Sent |Frwd Sent |
G-F9: Paste Rect Insert +----------+----------+----------+----------+
F10: Cut Rectangle
G-F10: Paste Rectangle
F11: ESC
F12: Begining of Line +----------+----------+----------+----------+
G-F12: Delete Other Windows | GOLD | HELP | FNDNXT | DEL L |
F13: Delete to Begin of Word | (PF1) | (PF2) | (PF3) | (PF4) |
HELP: Keypad Help |Mark Wisel|Desc Funct| FIND | UND L |
DO: Execute extended command +----------+----------+----------+----------+
| PAGE | SECT | APPEND | DEL W |
C-g: Keyboard Quit | (7) | (8) | (9) | (-) |
G-C-g: Keyboard Quit |Ex Ext Cmd|Fill Regio| REPLACE | UND W |
C-h: Beginning of Line +----------+----------+----------+----------+
G-C-h: Emacs Help | ADVANCE | BACKUP | CUT | DEL C |
C-i: Tab Insert | (4) | (5) | (6) | (,) |
C-j: Delete to Begin of Word | BOTTOM | TOP | Yank | UND C |
C-k: Define Key +----------+----------+----------+----------+
G-C-k: Restore Key | WORD | EOL | CHAR | Next |
C-l: Form Feed Insert | (1) | (2) | (3) | Window |
C-n: Set Screen Width 80 | CHNGCASE | DEL EOL |Quoted Ins| !
C-r: Isearch Backward +---------------------+----------+ (ENTER) |
C-s: Isearch Forward | LINE | SELECT | !
C-t: Display the Time | (0) | (.) | Query |
C-u: Delete to Begin of Line | Open Line | RESET | Replace |
C-v: Redraw Display +---------------------+----------+----------+
C-w: Set Screen Width 132
C-z: Suspend Emacs +----------+----------+----------+
G-C-\: Split Window | FNDNXT | Yank | CUT |
| (FIND) | (INSERT) | (REMOVE) |
G-b: Buffer Menu | FIND | | COPY |
G-c: Compile +----------+----------+----------+
G-d: Delete Window |SELECT/RES|SECT BACKW|SECT FORWA|
G-e: Exit | (SELECT) |(PREVIOUS)| (NEXT) |
G-f: Find File | | | |
G-g: Find File Other Window +----------+----------+----------+
G-h: Keypad Help
G-i: Insert File
G-k: Toggle Capitalization Word
G-l: Lowercase Word or Region
G-m: Save Some Buffers
G-n: Next Error
G-o: Switch to Next Window
G-q: Quit
G-r: Revert File
G-s: Save Buffer
G-u: Uppercase Word or Region
G-v: Find File Other Window
G-w: Write file
G-y: EDT Emulation OFF
G-z: Switch to User EDT Key Bindings
G-1: Delete Other Windows
G-2: Split Window
G-%: Go to Percentage
G- : Undo (GOLD Spacebar)
G-=: Go to Line
G-`: What line
;;; File: edt-user.el --- Sample User Customizations for the Enhanced
;;; EDT Keypad Mode Emulation
;;;
;;; For GNU Emacs 19
;;;
;; Copyright (C) 1986, 1992, 1993 Free Software Foundation, Inc.
;; Author: Kevin Gallagher <kevingal@onramp.net>
;; Maintainer: Kevin Gallagher <kevingal@onramp.net>
;; Keywords: emulations
;; GNU Emacs 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 2, or (at your option)
;; any later version.
;; GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to the
;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
;; Boston, MA 02111-1307, USA.
;;; Commentary:
;; This file contains GNU Emacs User Custom EDT bindings and functions. In
;; this example file, there is no special test for the type of terminal being
;; used. The assumption is that all key bindings here apply to all terminals
;; that may be used. (In fact, it was written by an individual who uses only
;; VT series terminals when logging into a VAX.)
;;
;; WARNING: Each of the three functions, edt-bind-function-key,
;; edt-bind-gold-key, and edt-bind-standard-key, has an optional
;; last argument. The optional argument should NOT be used in
;; edt-user.el! When the optional argument is missing, each
;; function knows to make the key binding part of the user's EDT
;; custom bindings, which is what you want to do in edt-user.el!
;;
;; The EDT default bindings are set up in edt.el by calling these
;; same functions with the optional last argument set to "t". So, if
;; you decide to copy such function calls from edt.el to edt-user.el
;; for subsequent modification, BE SURE TO DELETE THE "t" AT THE END
;; OF EACH PARAMETER LIST!
;;
;;; Usage:
;; See edt-user.doc in the emacs etc directory.
;; ====================================================================
;;;;
;;;; Setup user custom EDT key bindings.
;;;;
(defun edt-setup-user-bindings ()
"Assigns user custom EDT Emulation keyboard bindings."
;; PF1 (GOLD), PF2, PF3, PF4
;;
;; This file MUST contain a binding of PF1 to edt-user-gold-map. So
;; DON'T CHANGE OR DELETE THE REGULAR KEY BINDING OF PF1 BELOW!
;; (However, you may change the GOLD-PF1 binding, if you wish.)
(edt-bind-function-key "PF1" 'edt-user-gold-map 'edt-mark-section-wisely)
(edt-bind-function-key "PF2" 'query-replace 'other-window)
(edt-bind-function-key "PF4" 'edt-delete-entire-line 'edt-undelete-line)
;; EDT Keypad Keys
(edt-bind-function-key "KP1" 'edt-word-forward 'edt-change-case)
(edt-bind-function-key "KP3" 'edt-word-backward 'edt-copy)
(edt-bind-function-key "KP6" 'edt-cut-or-copy 'yank)
(edt-bind-function-key "KP8" 'edt-scroll-window 'fill-paragraph)
(edt-bind-function-key "KP9" 'open-line 'edt-eliminate-all-tabs)
(edt-bind-function-key "KPP"
'edt-toggle-select 'edt-line-to-middle-of-window)
(edt-bind-function-key "KPE" 'edt-change-direction 'overwrite-mode)
;; GOLD bindings for regular keys.
(edt-bind-gold-key "a" 'edt-append)
(edt-bind-gold-key "A" 'edt-append)
(edt-bind-gold-key "h" 'edt-electric-user-keypad-help)
(edt-bind-gold-key "H" 'edt-electric-user-keypad-help)
;; Control bindings for regular keys.
;;; Leave binding of C-c as original prefix key.
(edt-bind-standard-key "\C-j" 'edt-duplicate-word)
(edt-bind-standard-key "\C-k" 'edt-define-key)
(edt-bind-gold-key "\C-k" 'edt-restore-key)
(edt-bind-standard-key "\C-l" 'edt-learn)
;;; Leave binding of C-m to newline.
(edt-bind-standard-key "\C-n" 'edt-set-screen-width-80)
(edt-bind-standard-key "\C-o" 'open-line)
(edt-bind-standard-key "\C-p" 'fill-paragraph)
;;; Leave binding of C-r to isearch-backward.
;;; Leave binding of C-s to isearch-forward.
(edt-bind-standard-key "\C-t" 'edt-display-the-time)
(edt-bind-standard-key "\C-v" 'redraw-display)
(edt-bind-standard-key "\C-w" 'edt-set-screen-width-132)
;;; Leave binding of C-x as original prefix key.
)
;;;
;;; LK-201 KEYBOARD USER EDT KEYPAD HELP
;;;
(defun edt-user-keypad-help ()
"
USER EDT Keypad Active
+----------+----------+----------+----------+
F7: Copy Rectangle |Prev Line |Next Line |Bkwd Char |Frwd Char |
F8: Cut Rect Overstrike | (UP) | (DOWN) | (LEFT) | (RIGHT) |
G-F8: Paste Rect Overstrike |Window Top|Window Bot|Bkwd Sent |Frwd Sent |
F9: Cut Rect Insert +----------+----------+----------+----------+
G-F9: Paste Rect Insert
F10: Cut Rectangle
G-F10: Paste Rectangle
F11: ESC +----------+----------+----------+----------+
F12: Begining of Line | GOLD |Query Repl| FNDNXT |Del Ent L |
G-F12: Delete Other Windows | (PF1) | (PF2) | (PF3) | (PF4) |
F13: Delete to Begin of Word |Mark Wisel|Other Wind| FIND | UND L |
HELP: Keypad Help +----------+----------+----------+----------+
DO: Execute extended command | PAGE |Scroll Win|Open Line | DEL W |
| (7) | (8) | (9) | (-) |
C-a: Beginning of Line |Ex Ext Cmd|Fill Parag|Elim Tabs | UND W |
C-b: Switch to Buffer +----------+----------+----------+----------+
C-d: Delete Character | ADVANCE | BACKUP | CUT/COPY | DEL C |
C-e: End of Line | (4) | (5) | (6) | (,) |
C-f: Forward Character | BOTTOM | TOP | Yank | UND C |
C-g: Keyboard Quit +----------+----------+----------+----------+
G-C-g: Keyboard Quit | Fwd Word | EOL | Bwd Word | Change |
C-h: Electric Emacs Help | (1) | (2) | (3) | Direction|
G-C-h: Emacs Help | CHNGCASE | DEL EOL | COPY | |
C-i: Indent for Tab +---------------------+----------+ (ENTER) |
C-j: Duplicate Word | LINE |SELECT/RES| |
C-k: Define Key | (0) | (.) | Toggle |
G-C-k: Restore Key | Open Line |Center Lin|Insrt/Over|
C-l: Learn +---------------------+----------+----------+
C-n: Set Screen Width 80
C-o: Open Line +----------+----------+----------+
C-p: Fill Paragraph | FNDNXT | Yank | CUT |
C-q: Quoted Insert | (FIND)) | (INSERT) | (REMOVE) |
C-r: Isearch Backward | FIND | | COPY |
C-s: Isearch Forward +----------+----------+----------+
C-t: Display the Time |SELECT/RES|SECT BACKW|SECT FORWA|
C-u: Universal Argument | (SELECT) |(PREVIOUS)| (NEXT) |
C-v: Redraw Display | | | |
C-w: Set Screen Width 132 +----------+----------+----------+
C-z: Suspend Emacs
G-C-\\: Split Window
G-a: Append to Kill Buffer
G-b: Buffer Menu
G-c: Compile
G-d: Delete Window
G-e: Exit
G-f: Find File
G-g: Find File Other Window
G-h: Keypad Help
G-i: Insert File
G-k: Toggle Capitalization Word
G-l: Lowercase Word or Region
G-m: Save Some Buffers
G-n: Next Error
G-o: Switch Windows
G-q: Quit
G-r: Revert File
G-s: Save Buffer
G-u: Uppercase Word or Region
G-v: Find File Other Window
G-w: Write file
G-y: EDT Emulation OFF
G-z: Switch to Default EDT Key Bindings
G-2: Split Window
G-%: Go to Percentage
G- : Undo (GOLD Spacebar)
G-=: Go to Line
G-`: What line"
(interactive)
(describe-function 'edt-user-keypad-help))

45
etc/emacs.bash Normal file
View file

@ -0,0 +1,45 @@
# This defines a bash command named `edit' which contacts/resumes an
# existing emacs or starts a new one if none exists.
#
# One way or another, any arguments are passed to emacs to specify files
# (provided you have loaded `resume.el').
#
# This function assumes the emacs program is named `emacs' and is somewhere
# in your load path. If either of these is not true, the most portable
# (and convenient) thing to do is to make an alias called emacs which
# refers to the real program, e.g.
#
# alias emacs=/usr/local/bin/gemacs
#
# Written by Noah Friedman.
function edit ()
{
local windowsys="${WINDOW_PARENT+sun}"
windowsys="${windowsys:-${DISPLAY+x}}"
if [ -n "${windowsys:+set}" ]; then
# Do not just test if these files are sockets. On some systems
# ordinary files or fifos are used instead. Just see if they exist.
if [ -e "${HOME}/.emacs_server" -o -e "/tmp/esrv${UID}-"* ]; then
emacsclient "$@"
return $?
else
echo "edit: starting emacs in background..." 1>&2
fi
case "${windowsys}" in
x ) (emacs "$@" &) ;;
sun ) (emacstool "$@" &) ;;
esac
else
if jobs %emacs 2> /dev/null ; then
echo "$(pwd)" "$@" >| ${HOME}/.emacs_args && fg %emacs
else
emacs "$@"
fi
fi
}

25
etc/emacs.csh Normal file
View file

@ -0,0 +1,25 @@
# This defines a csh command named `edit' which resumes an
# existing Emacs or starts a new one if none exists.
# One way or another, any arguments are passed to Emacs to specify files
# (provided you have loaded `resume.el').
# - Michael DeCorte
# These are the possible values of $whichjob
# 1 = new ordinary emacs (the -nw is so that it doesn't try to do X)
# 2 = resume emacs
# 3 = new emacs under X (-i is so that you get a reasonable icon)
# 4 = resume emacs under X
# 5 = new emacs under suntools
# 6 = resume emacs under suntools
# 7 = new emacs under X and suntools - doesn't make any sense, so use X
# 8 = resume emacs under X and suntools - doesn't make any sense, so use X
set EMACS_PATTERN="^\[[0-9]\] . Stopped ............ $EMACS"
alias edit 'set emacs_command=("emacs -nw \!*" "fg %emacs" "emacs -i \!* &"\
"emacsclient \!* &" "emacstool \!* &" "emacsclient \!* &" "emacs -i \!* &"\
"emacsclient \!* &") ; \
jobs >! $HOME/.jobs; grep "$EMACS_PATTERN" < $HOME/.jobs >& /dev/null; \
@ isjob = ! $status; \
@ whichjob = 1 + $isjob + $?DISPLAY * 2 + $?WINDOW_PARENT * 4; \
test -S ~/.emacs_server && emacsclient \!* \
|| echo `pwd` \!* >! ~/.emacs_args && eval $emacs_command[$whichjob]'

34
etc/emacs.icon Normal file
View file

@ -0,0 +1,34 @@
/* Format_version=1, Width=64, Height=64, Depth=1, Valid_bits_per_item=16
*/
0xFFFF,0xFFFF,0xFFFF,0xFFFF,0x8000,0x0000,0x0000,0x0001,
0x8000,0x0000,0x007E,0x1C01,0x8000,0x0000,0x0006,0x1C01,
0x8000,0x0000,0x007F,0xFC01,0x8000,0x0000,0x0080,0x1C01,
0x8000,0x0000,0x013F,0xFC01,0x8000,0x0000,0x0140,0x1C01,
0x8000,0x0000,0x03E0,0x1C01,0x8000,0x0000,0x0000,0x1C01,
0x8000,0x0000,0x0000,0x1C01,0x8000,0x0000,0x0000,0x1C01,
0x8000,0x0000,0x0000,0x1C01,0x8000,0x0000,0x0210,0x1C01,
0x8000,0x0000,0x0330,0x1C01,0x8000,0x0000,0x00C0,0x1C01,
0x8003,0xFFFF,0xFFFF,0xFE01,0x8005,0xFFFF,0xFFFF,0xFE01,
0x8004,0xFFFF,0xFFFF,0xFC01,0x8004,0x787F,0xFFFF,0xF801,
0x8004,0x77FF,0xFFFF,0xF801,0x8000,0x77E3,0x6FFF,0xF801,
0x8000,0x762D,0x6FFF,0xF801,0x8004,0x77AD,0x6FFF,0xF801,
0x800C,0x77AD,0x6FFF,0xF801,0x8004,0x786D,0x8FFF,0xF801,
0x8000,0x7FFF,0xFFFF,0xF801,0x8000,0x7FFF,0xFFFF,0xF801,
0x8000,0x7E0F,0xFFFF,0xF801,0x8008,0x7EFF,0xFFFF,0xF801,
0x800C,0x7EF9,0x31CE,0x3801,0x8004,0x7E1A,0xADB5,0xF801,
0x8000,0x7EFA,0xADBE,0x7801,0x8000,0x7EFB,0xADB7,0xB801,
0x8000,0x7E0B,0xB2CC,0x7801,0x8000,0x7FFF,0xFFFF,0xF801,
0x8004,0x3FFF,0xFFFF,0xF001,0x8004,0x1FFF,0xFFFF,0xE001,
0x800C,0x0003,0x6000,0x0001,0x8000,0x0001,0x43C0,0x0001,
0x8000,0x0001,0x4420,0x0001,0x8000,0x0001,0x4990,0x0001,
0x8000,0x0001,0x4A50,0x0001,0x8004,0x0001,0x3250,0x0001,
0x8004,0x0000,0x8450,0x0001,0x800A,0x0000,0x7850,0x0001,
0x8000,0x0000,0x0050,0x0001,0xFFFF,0xFFFF,0xFFFF,0xFFFF,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000

38
etc/emacs.xbm Normal file
View file

@ -0,0 +1,38 @@
#define emacs_width 64
#define emacs_height 64
static char emacs_bits[] = {
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x01,0x00,0x00,0x00,0x00,0x7e,0x38,0x80,0x01,0x00,0x00,0x00,0x00,0x60,
0x38,0x80,0x01,0x00,0x00,0x00,0x00,0xfe,0x3f,0x80,0x01,0x00,0x00,0x00,0x00,
0x01,0x38,0x80,0x01,0x00,0x00,0x00,0x80,0xfc,0x3f,0x80,0x01,0x00,0x00,0x00,
0x80,0x02,0x38,0x80,0x01,0x00,0x00,0x00,0xc0,0x07,0x38,0x80,0x01,0x00,0x00,
0x00,0x00,0x00,0x38,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x38,0x80,0x01,0x00,
0x00,0x00,0x00,0x00,0x38,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x38,0x80,0x01,
0x00,0x00,0x00,0x40,0x08,0x38,0x80,0x01,0x00,0x00,0x00,0xc0,0x0c,0x38,0x80,
0x01,0x00,0x00,0x00,0x00,0x03,0x38,0x80,0x01,0xc0,0xff,0xff,0xff,0xff,0x7f,
0x80,0x01,0xa0,0xff,0xff,0xff,0xff,0x7f,0x80,0x01,0x20,0xff,0xff,0xff,0xff,
0x3f,0x80,0x01,0x20,0x1e,0xfe,0xff,0xff,0x1f,0x80,0x01,0x20,0xee,0xff,0xff,
0xff,0x1f,0x80,0x01,0x00,0xee,0xc7,0xf6,0xff,0x1f,0x80,0x01,0x00,0x6e,0xb4,
0xf6,0xff,0x1f,0x80,0x01,0x20,0xee,0xb5,0xf6,0xff,0x1f,0x80,0x01,0x30,0xee,
0xb5,0xf6,0xff,0x1f,0x80,0x01,0x20,0x1e,0xb6,0xf1,0xff,0x1f,0x80,0x01,0x00,
0xfe,0xff,0xff,0xff,0x1f,0x80,0x01,0x00,0xfe,0xff,0xff,0xff,0x1f,0x80,0x01,
0x00,0x7e,0xf0,0xff,0xff,0x1f,0x80,0x01,0x10,0x7e,0xff,0xff,0xff,0x1f,0x80,
0x01,0x30,0x7e,0x9f,0x8c,0x73,0x1c,0x80,0x01,0x20,0x7e,0x58,0xb5,0xad,0x1f,
0x80,0x01,0x00,0x7e,0x5f,0xb5,0x7d,0x1e,0x80,0x01,0x00,0x7e,0xdf,0xb5,0xed,
0x1d,0x80,0x01,0x00,0x7e,0xd0,0x4d,0x33,0x1e,0x80,0x01,0x00,0xfe,0xff,0xff,
0xff,0x1f,0x80,0x01,0x20,0xfc,0xff,0xff,0xff,0x0f,0x80,0x01,0x20,0xf8,0xff,
0xff,0xff,0x07,0x80,0x01,0x30,0x00,0xc0,0x06,0x00,0x00,0x80,0x01,0x00,0x00,
0x80,0xc2,0x03,0x00,0x80,0x01,0x00,0x00,0x80,0x22,0x04,0x00,0x80,0x01,0x00,
0x00,0x80,0x92,0x09,0x00,0x80,0x01,0x00,0x00,0x80,0x52,0x0a,0x00,0x80,0x01,
0x20,0x00,0x80,0x4c,0x0a,0x00,0x80,0x01,0x20,0x00,0x00,0x21,0x0a,0x00,0x80,
0x01,0x50,0x00,0x00,0x1e,0x0a,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x0a,0x00,
0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00};

65
etc/emacsclient.1 Normal file
View file

@ -0,0 +1,65 @@
.TH EMACSCLIENT 1
.\" NAME should be all caps, SECTION should be 1-8, maybe w/ subsection
.\" other parms are allowed: see man(7), man(1)
.SH NAME
emacsclient \- tells a running Emacs to visit a file
.SH SYNOPSIS
.B emacsclient
.I "[options] files ..."
.SH "DESCRIPTION"
This manual page documents briefly the
.BR emacsclient
command.
This manual page was written for the Debian GNU/Linux distribution
because the original program does not have a manual page.
Instead, it has documentation in the GNU Info format; see below.
.PP
.B emacsclient
works in conjunction with the built-in server of Emacs.
.PP
You typically does not call
.B emacsclient
directly. Instead, you set the environment variable EDITOR
to
.B emacsclient
and let programs like 'vipw' or 'bug' or anything run
it for you, which will use an existing Emacs to visit the file.
For
.B emacsclient
to work, you need an already running Emacs with a server. Within Emacs, call
the function
`server-start'. (Your `.emacs' file can do this automatically if you
add the expression `(server-start)' to it.)
When you've finished editing the buffer, type `C-x #'
(`server-edit'). This saves the file and sends a message back to the
`emacsclient' program telling it to exit. The programs that use
`EDITOR' wait for the "editor" (actually, `emacsclient') to exit. `C-x
#' also checks for other pending external requests to edit various
files, and selects the next such file.
If you set the variable `server-window' to a window or a frame, `C-x
#' displays the server buffer in that window or in that frame.
.SH OPTIONS
The programs follow the usual GNU command line syntax, with long
options starting with two dashes (`-').
.TP
.B \-n, \-\-no-wait
returns
immediately without waiting for you to "finish" the buffer in Emacs.
.SH "SEE ALSO"
The program is documented fully in
.IR "Using Emacs as a Server"
available via the Info system.
.SH BUGS
If there is no running Emacs server,
.B emacsclient
cannot launch one. I use a small Perl script instead of raw
.B emacsclient
to do it (it works only with systems which have BSD sockets, which is fine
for Debian GNU/Linux).
.SH AUTHOR
This manual page was written by Stephane Bortzmeyer <bortzmeyer@debian.org>,
for the Debian GNU/Linux system (but may be used by others).

225
etc/etags.1 Normal file
View file

@ -0,0 +1,225 @@
.\" Copyright (c) 1992 Free Software Foundation
.\" See section COPYING for conditions for redistribution
.TH etags 1 "19apr1994" "GNU Tools" "GNU Tools"
.de BP
.sp
.ti -.2i
\(**
..
.SH NAME
etags, ctags \- generate tag file for Emacs, vi
.SH SYNOPSIS
.hy 0
.na
.B etags [\|\-aCDRSVh\|] [\|\-i \fIfile\fP\|] [\|\-l \fIlanguage\fP\|] [\|\-i \fIregexp\fP\|] [\|\-o \fItagfile\fP\|]
.br
[\|\-\-c++\|] [\|\-\-no\-defines\|] [\|\-\-ignore\-indentation\|]
[\|\-\-language=\fIlanguage\fP\|] [\|\-\-regex=\fIregexp\fP\|]
[\|\-\-no\-regexp\|] [\|\-\-help\|] [\|\-\-version\|]
[\|\-\-include=\fIfile\fP\|] [\|\-\-output=\fItagfile\fP\|]
[\|\-\-append\|] \fIfile\fP .\|.\|.
.B ctags [\|\-aCdRSVh\|] [\|\-BtTuvwx\|] [\|\-l \fIlanguage\fP\|]
.br
[\|\-i \fIregexp\fP\|] [\|\-o \fItagfile\fP\|]
[\|\-\-c++\|] [\|\-\-defines\|] [\|\-\-ignore\-indentation\|]
[\|\-\-no\-warn\|] [\|\-\-cxref\|] [\|\-\-backward\-search\|]
[\|\-\-forward\-search\|] [\|\-\-typedefs\|] [\|\-\-typedefs\-and\-c++\|]
[\|\-\-language=\fIlanguage\fP\|] [\|\-\-regex=\fIregexp\fP\|]
[\|\-\-help\|] [\|\-\-version\|]
.br
[\|\-\-output=\fItagfile\fP\|] [\|\-\-append\|] [\|\-\-update\|] \fIfile\fP .\|.\|.
.ad b
.hy 1
.SH DESCRIPTION
The `\|\fBetags\fP\|' program is used to create a tag table file, in a format
understood by
.BR emacs ( 1 )\c
\&; the `\|\fBctags\fP\|' program is used to create a similar table in a
format understood by
.BR vi ( 1 )\c
\&. Both forms of the program understand
the syntax of C, C++, Fortran, Pascal, LaTeX, Scheme,
Emacs Lisp/Common Lisp, Erlang, Prolog and most assembler\-like syntaxes.
Both forms read the files specified on the command line, and write a tag
table (defaults: `\|TAGS\|' for \fBetags\fP, `\|tags\|' for
\fBctags\fP) in the current working directory.
Files specified with relative file names will be recorded in the tag
table with file names relative to the directory where the tag table
resides. Files specified with absolute file names will be recorded
with absolute file names.
The programs recognize the language used in an input file based on its
file name and contents. The --language switch can be used to force
parsing of the file names following the switch according to the given
language, overriding guesses based on filename extensions.
.SH OPTIONS
Some options make sense only for the \fBvi\fP style tag files produced
by ctags;
\fBetags\fP does not recognize them.
The programs accept unambiguous abbreviations for long option names.
.TP
.B \-a, \-\-append
Append to existing tag file. (For vi-format tag files, see also
\fB\-\-update\fP.)
.TP
.B \-B, \-\-backward\-search
Tag files written in the format expected by \fBvi\fP contain regular
expression search instructions; the \fB\-B\fP option writes them using
the delimiter `\|\fB?\fP\|', to search \fIbackwards\fP through files.
The default is to use the delimiter `\|\fB/\fP\|', to search \fIforwards\fP
through files.
Only \fBctags\fP accepts this option.
.TP
.B \-C, \-\-c++
Treat files with `\|.c\|' and `\|.h\|' extensions as C++ code, not C
code. Files with `\|.C\|', `\|.H\|', `\|.cxx\|', `\|.hxx\|', or
`\|.cc\|' extensions are always assumed to be C++ code.
.TP
.B \-d, \-\-defines
Create tag entries for C preprocessor definitions, too. This is the
default behavior for \fBetags\fP, so this option is only accepted
by \fBctags\fP.
.TP
.B \-D, \-\-no\-defines
Do not create tag entries for C preprocessor definitions.
This may make the tags file much smaller if many header files are tagged.
This is the default behavior for \fBctags\fP, so this option is only
accepted by \fBetags\fP.
.TP
\fB\-l\fP \fIlanguage\fP, \fB\-\-language=\fIlanguage\fP
Parse the following files according to the given language. More than
one such options may be intermixed with filenames. Use \fB\-\-help\fP
to get a list of the available languages and their default filename
extensions. The `auto' language can be used to restore automatic
detection of language based on filename extension. The `none'
language may be used to disable language parsing altogether; only
regexp matching is done in this case (see the \fB\-\-regex\fP option).
.TP
\fB\-o\fP \fItagfile\fP, \fB\-\-output=\fItagfile\fP
Explicit name of file for tag table; overrides default `\|TAGS\|' or
`\|tags\|'. (But ignored with \fB\-v\fP or \fB\-x\fP.)
.TP
\fB\-r\fP \fIregexp\fP, \fB\-\-regex=\fIregexp\fP
Make tags based on regexp matching for each line of the files
following this option, in addition to the tags made with the standard
parsing based on language. May be freely intermixed with filenames
and the \fB\-R\fP option. The regexps are cumulative, i.e. each
option will add to the previous ones. The regexps are of the form:
.br
\fB/\fP\fItagregexp\fP[\fB/\fP\fInameregexp\fP]\fB/\fP
.br
where \fItagregexp\fP is used to match the lines that must be tagged.
It should not match useless characters. If the match is
such that more characters than needed are unavoidably matched by
\fItagregexp\fP, it may be useful to add a \fInameregexp\fP, to
narrow down the tag scope. \fBctags\fP ignores regexps without a
\fInameregexp\fP.
.br
Here are some examples. All the regexps are quoted to protect them
from shell interpretation.
.br
Tag the DEFVAR macros in the emacs source files:
.br
\fI\-\-regex\='/[ \\t]*DEFVAR_[A-Z_ \\t(]+"\\([^"]+\\)"\/'\fP
.br
Tag VHDL files (this example is a single long line, broken here for
formatting reasons):
.br
\fI\-\-language\=none\ \-\-regex='/[\ \\t]*\\(ARCHITECTURE\\|\\
CONFIGURATION\\)\ +[^\ ]*\ +OF/'\ \-\-regex\='/[\ \\t]*\\
\\(ATTRIBUTE\\|ENTITY\\|FUNCTION\\|PACKAGE\\(\ BODY\\)?\\
\\|PROCEDURE\\|PROCESS\\|TYPE\\)[\ \\t]+\\([^\ \\t(]+\\)/\\3/'\fP
.br
Tag Cobol files:
.br
\fI\-\-language\=none \-\-regex\='/.......[a\-zA\-Z0\-9\-]+\\./'\fP
.br
Tag Postscript files:
.br
\fI\-\-language\=none \-\-regex\='#/[^\ \\t{]+#/'\fP
.br
Tag TCL files (this last example shows the usage of a \fItagregexp\fP):
.br
\fI\-\-lang\=none \-\-regex\='/proc[\ \\t]+\\([^\ \\t]+\\)/\\1/'\fP
.TP
.B \-R, \-\-no\-regex
Don't do any more regexp matching on the following files. May be
freely intermixed with filenames and the \fB\-\-regex\fP option.
.TP
.B \-S, \-\-ignore\-indentation
Don't rely on indentation as much as we normally do. Currently, this
means not to assume that a closing brace in the first column is the
final brace of a function or structure definition in C and C++.
.TP
.B \-t, \-\-typedefs
Record typedefs in C code as tags. Since this is the default behaviour
of \fBetags\fP, only \fBctags\fP accepts this option.
.TP
.B \-T, \-\-typedefs\-and\-c++
Generate tag entries for typedefs, struct, enum, and union tags, and
C++ member functions. Since this is the default behaviour
of \fBetags\fP, only \fBctags\fP accepts this option.
.TP
.B \-u, \-\-update
Update tag entries for \fIfiles\fP specified on command line, leaving
tag entries for other files in place. Currently, this is implemented
by deleting the existing entries for the given files and then
rewriting the new entries at the end of the tags file. It is often
faster to simply rebuild the entire tag file than to use this.
Only \fBctags\fP accepts this option.
.TP
.B \-v, \-\-vgrind
Instead of generating a tag file, write index (in \fBvgrind\fP format)
to standard output. Only \fBctags\fP accepts this option.
.TP
.B \-w, \-\-no\-warn
Suppress warning messages about duplicate entries. The \fBetags\fP
program does not check for duplicate entries, so this option is not
allowed with it.
.TP
.B \-x, \-\-cxref
Instead of generating a tag file, write a cross reference (in
\fBcxref\fP format) to standard output. Only \fBctags\fP accepts this option.
.TP
.B \-H, \-\-help
Print usage information.
.TP
.B \-V, \-\-version
Print the current version of the program (same as the version of the
emacs \fBetags\fP is shipped with).
.SH "SEE ALSO"
`\|\fBemacs\fP\|' entry in \fBinfo\fP; \fIGNU Emacs Manual\fP, Richard
Stallman.
.br
.BR cxref ( 1 ),
.BR emacs ( 1 ),
.BR vgrind ( 1 ),
.BR vi ( 1 ).
.SH COPYING
Copyright (c) 1992 Free Software Foundation, Inc.
.PP
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.
.PP
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the
entire resulting derived work is distributed under the terms of a
permission notice identical to this one.
.PP
Permission is granted to copy and distribute translations of this
manual into another language, under the above conditions for modified
versions, except that this permission notice may be included in
translations approved by the Free Software Foundation instead of in
the original English.

67
etc/gnu.xpm Normal file
View file

@ -0,0 +1,67 @@
/* XPM */
/*****************************************************************************/
/* GNU Emacs bitmap conv. to pixmap by Przemek Klosowski (przemek@nist.gov) */
/*****************************************************************************/
static char * image_name [] = {
/**/
"50 50 7 1",
/**/
" s mask c none",
"B c blue",
"x c black",
": c sandy brown",
"+ c saddle brown",
"' c grey",
". c white",
" ",
" ",
" x ",
" :x ",
" :::x ",
" ::x ",
" x ::x ",
" x: xxx :::x ",
" x: xxx xxx:xxx x::x ",
" x:: xxxx::xxx:::::xx x::x ",
" x:: x:::::::xx::::::xx x::x ",
" x:: xx::::::::x:::::::xx xx::x ",
" x:: xx::::::::::::::::::x xx::xx ",
" x::x xx:::::xxx:::::::xxx:xxx xx:::xx ",
" x:::x xx:::::xx...xxxxxxxxxxxxxxx:::xx ",
" x:::x xx::::::xx..xxx...xxxx...xxxxxxxx ",
" x:::x x::::::xx.xxx.......x.x.......xxxx ",
" x:::xx x:::x::xx.xx..........x.xx.........x ",
" x::::xx::xx:::x.xx....''''x'x'x''.xxx.....x ",
" xx::::xxxx::xx.xx.xxxx.'''''''.xxx xxxx ",
" xx::::::::xx..x.xxx..'''''''''.xx ",
" xxx:::::xxx..xx.xx.xx.xxx.'''''.xx ",
" xxx::xx...xx.xx.BBBB..xx''''''xx ",
" xxxx.....xx.xxBB:BB.xx'''''''xx ",
" xx.....xx...x.BBBx.xxx''''''xx ",
" x....xxxx..xx...xxx''''''''''xx ",
" x..xxxxxx..x.......x..''''''''xx ",
" x.x xxx.x.x.x...xxxx.'''''''''xx ",
" x xxx.x.x.xx...xx..'''''''''xx ",
" xx.x..x.x.xx........''''''''x ",
" xx'.xx.x.x.x.x.......'''''''''x ",
" xx'..xxxx..x...x.......'''''''x ",
" xx''.xx.x..xx...x.......'''.xxx ",
" xx''..x.x.x.x.x.xx.xxxxx.'.xx+xx ",
" xx''..x.xx..xx.x.x.x+++xxxxx+++x ",
" xx'''.x..xxx.x.x.x.x+++++xxx+xxx ",
" xx''.xx..x..xx.xxxx++x+++x++xxx ",
" xx''..xx.xxx.xxx.xxx++xx+x++xx ",
" xx'''.xx.xx..xx.xxxx++x+++xxx ",
" xx'''.xxx.xx.xxxxxxxxx++++xxx ",
" xx''...xx.xx.xxxxxx++xxxxxxx ",
" xx''''..x..xxx..xxxx+++++xx ",
" xx''''..x..xx..xxxx++++xx ",
" xxx'''''x.xx.xxxxxxxxxxx ",
" xxx'''''..xxx xxxxx ",
" xxxx''''xxxx ",
" xxx'''xxx ",
" xxxxx ",
" ",
" "
};

312
etc/ms-7bkermit Normal file
View file

@ -0,0 +1,312 @@
;;; This file is designed for 7-bit connections.
;;; Use the file ms-kermit if you have an 8-bit connection.
;;; This kermit script maps the IBM-PC keyboard for use with Gnu Emacs.
;;; The ALT key is used to generate Meta characters and, in conjunction
;;; with the CTRL key, Control-Meta characters. A few other useful
;;; mappings are also performed.
;;; Andy Lowry, May 1989
;;; Exchange ESC and backquote... tilde stays put (shift-backquote)
set key \27 `
set key ` \27
;;; BACKSPACE deletes backward one character
set key scan \270 \127
;;; The following mappings affect certain special keys... all the keys
;;; are duplicated on the numeric keypad when NUM LOCK is off, but
;;; the keypad versions are NOT mapped (string definition space too small
;;; for that)
;;; INSERT toggles overwrite mode
set key scan \4434 \27xoverwrite-mode\13
;;; HOME moves point to beginning of buffer
set key scan \4423 \27<
;;; PAGE-UP scrolls backward one screen
set key scan \4425 \27v
;;; DELETE deletes one character *forward*
set key scan \4435 \4
;;; END moves point to end of buffer
set key scan \4431 \27>
;;; PAGE-DOWN scrolls forward one screen
set key scan \4433 \22
;;; ARROW keys move in the appropriate directions
set key scan \4424 \16
set key scan \4427 \2
set key scan \4432 \14
set key scan \4429 \6
;;; META versions of all the printing characters except uppercase
;;; letters are generated by using the ALT key. The definition string
;;; consists of an ESC character followed by the META-ized character.
;;; The characters are listed roughly left-to-right and top-to-bottom
;;; as they appear on the keyboard
set key scan \2345 \27`
set key scan \2424 \27\o61 ; need to use char code, since digit
set key scan \2425 \27\o62 ; would not terminate '\27'
set key scan \2426 \27\o63
set key scan \2427 \27\o64
set key scan \2428 \27\o65
set key scan \2429 \27\o66
set key scan \2430 \27\o67
set key scan \2431 \27\o70
set key scan \2432 \27\o71
set key scan \2433 \27\o60
set key scan \2434 \27\45
set key scan \2435 \27=
set key scan \2857 \27~
set key scan \2936 \27!
set key scan \2937 \27@
set key scan \2938 \27#
set key scan \2939 \27$
set key scan \2940 \27%
set key scan \2941 \27^
set key scan \2942 \27&
set key scan \2943 \27*
set key scan \2944 \27(
set key scan \2945 \27)
set key scan \2946 \27_
set key scan \2947 \27+
set key scan \2469 \27\9
set key scan \2320 \27q
set key scan \2321 \27w
set key scan \2322 \27e
set key scan \2323 \27r
set key scan \2324 \27t
set key scan \2325 \27y
set key scan \2326 \27u
set key scan \2327 \27i
set key scan \2328 \27o
set key scan \2329 \27p
set key scan \2330 \27[
set key scan \2842 \27{
set key scan \2331 \27]
set key scan \2843 \27}
set key scan \2347 \27\
set key scan \2859 \27|
set key scan \2334 \27a
set key scan \2335 \27s
set key scan \2336 \27d
set key scan \2337 \27f
set key scan \2338 \27g
set key scan \2339 \27h
set key scan \2340 \27j
set key scan \2341 \27k
set key scan \2342 \27l
set key scan \2343 \27\59
set key scan \2855 \27:
set key scan \2344 \27'
set key scan \2856 \27"
set key scan \2348 \27z
set key scan \2349 \27x
set key scan \2350 \27c
set key scan \2351 \27v
set key scan \2352 \27b
set key scan \2353 \27n
set key scan \2354 \27m
set key scan \2355 \27,
set key scan \2867 \27<
set key scan \2356 \27.
set key scan \2868 \27>
set key scan \2357 \27/
set key scan \2869 \27?
;;; CONTROL-META characters are generated by using both the CTRL and
;;; ALT keys simultaneously. All the lowercase letters are included.
;;; The definition string consists of an ESC character followed by
;;; the control character corresponding to the letter.
set key scan \3344 \27\17
set key scan \3345 \27\23
set key scan \3346 \27\5
set key scan \3347 \27\18
set key scan \3348 \27\20
set key scan \3349 \27\25
set key scan \3350 \27\21
set key scan \3351 \27\9
set key scan \3352 \27\15
set key scan \3353 \27\16
set key scan \3358 \27\1
set key scan \3359 \27\19
set key scan \3360 \27\4
set key scan \3361 \27\6
set key scan \3362 \27\7
set key scan \3363 \27\8
set key scan \3364 \27\10
set key scan \3365 \27\11
set key scan \3366 \27\12
set key scan \3372 \27\26
set key scan \3373 \27\24
set key scan \3374 \27\3
set key scan \3375 \27\22
set key scan \3376 \27\2
set key scan \3377 \27\14
set key scan \3378 \27\13
end of msiem2.ini
------------------
msiema.hlp
-----------
Date: Wed, 14 Sep 88 05:20:08 GMT
From: spolsky@YALE.ARPA
Subject: Using MS kermit 2.31 with emacs
Keywords: MS-DOS Kermit 2.31, EMACS, Meta Key
If you are using kermit (version 2.31 only) with emacs on a mainframe, the
following file may help you. It assigns all the Alt-keys so that the Alt key
may be used as a "Meta" shift, e.g. Alt-x produces M-x, etc. Note that it
will distinguish correctly between upper and lower case and accepts all
printables. (If anybody has the patience to do the Meta-Ctrl combinations,
please post them!) This actually sends "escapes" so you don't need 8 bits.
This file also sets up the cursor keys to behave as expected.
On extended keyboards (the ones with a separate cursor pad, like PS/2s) you
also get assignments for Page Up/Down, Home, End, Insert, Delete, etc.
Please let me know if you find any problems with this.
Joel Spolsky bitnet: spolsky@yalecs uucp: ...!yale!spolsky
Yale University arpa: spolsky@yale.edu voicenet: 203-436-1483
[Ed. - Thanks, Joel! Your key definitions file has been put in the kermit
distribution area as msiema.ini ("ms" for MS-Kermit, "i" because it's an
initialization file, "ema" for EMACS), along with this message as msiema.hlp.]
end of msiema.hlp
-----------------
msiema.ini
------------
; Emacs keyboard layout for Kermit 2.31
; by Joel Spolsky, Yale Univ. Save this in a file, then
; initialize it by issuing the kermit command
; take filename
; It will set up the keyboard to allow ALT to be used
; as a meta-key, and will allow cursor keys to be used
; with emacs.
; First, define all the ALT keys to send ESC+key
; to simulate "meta"
set key \2320 \27q ;; letters: unshifted
set key \2321 \27w
set key \2322 \27e
set key \2323 \27r
set key \2324 \27t
set key \2325 \27y
set key \2326 \27u
set key \2327 \27i
set key \2328 \27o
set key \2329 \27p
set key \2334 \27a
set key \2335 \27s
set key \2336 \27d
set key \2337 \27f
set key \2338 \27g
set key \2339 \27h
set key \2340 \27j
set key \2341 \27k
set key \2342 \27l
set key \2348 \27z
set key \2349 \27x
set key \2350 \27c
set key \2351 \27v
set key \2352 \27b
set key \2353 \27n
set key \2354 \27m
set key \2832 \27Q ;; letters: shifted
set key \2833 \27W
set key \2834 \27E
set key \2835 \27R
set key \2836 \27T
set key \2837 \27Y
set key \2838 \27U
set key \2839 \27I
set key \2840 \27O
set key \2841 \27P
set key \2846 \27A
set key \2847 \27S
set key \2848 \27D
set key \2849 \27F
set key \2850 \27G
set key \2851 \27H
set key \2852 \27J
set key \2853 \27K
set key \2854 \27L
set key \2860 \27Z
set key \2861 \27X
set key \2862 \27C
set key \2863 \27V
set key \2864 \27B
set key \2865 \27N
set key \2866 \27M
set key \2857 \27\126 ; ALT + ~ ;; special symbols begin here
set key \2345 \27\96 ; ALT + `
set key \2936 \27\33 ; ALT + !
set key \2937 \27\64 ; ALT + @
set key \2938 \27\35 ; ALT + #
set key \2939 \27\36 ; ALT + $
set key \2940 \27\37 ; ALT + %
set key \2941 \27\94 ; ALT + ^
set key \2942 \27\38 ; ALT + &
set key \2943 \27\42 ; ALT + *
set key \2944 \27\40 ; ALT + (
set key \2945 \27\41 ; ALT + )
set key \2946 \27\95 ; ALT + _
set key \2947 \27\43 ; ALT + +
set key \2842 \27\123 ; ALT + {
set key \2843 \27\125 ; ALT + }
set key \2330 \27\91 ; ALT + [
set key \2331 \27\93 ; ALT + ]
set key \2859 \27\124 ; ALT + :
set key \2347 \27\92 ; ALT + \
set key \2867 \27< ; ALT + <
set key \2868 \27> ; ALT + >
set key \2343 \27\59 ; ALT + ;
set key \2855 \27\58 ; ALT + :
set key \2344 \27\39 ; ALT + '
set key \2856 \27\34 ; ALT + "
set key \2355 \27\44 ; ALT + ,
set key \2356 \27\46 ; ALT + .
set key \2357 \27\47 ; ALT + /
set key \2869 \27\63 ; ALT + ?
set key \2424 \27\49 ;; numbers
set key \2425 \27\50
set key \2426 \27\51
set key \2427 \27\52
set key \2428 \27\53
set key \2429 \27\54
set key \2430 \27\55
set key \2431 \27\56
set key \2432 \27\57
set key \2433 \27\48
;; These 6 special keys for extended (PS/2) keyboards:
set key \4434 \25 ;; Insert is like ^Y - yank from kill ring
set key \4435 \23 ;; Delete is like ^W - kill to ring
set key \4423 \1 ;; Home is ^A
set key \4431 \5 ;; End is ^E
set key \4425 \27V ;; Page up is Esc-V
set key \4433 \22 ;; Page dn is ^v
set key \328 \16 ;; up cursor is ^P
set key \331 \2 ;; left cursor is ^B
set key \333 \6 ;; right cursor is ^F
set key \336 \14 ;; down cursor is ^N
set key \4427 \2 ;; left cursor on extended kbd
set key \4432 \14 ;; down cursor on extended kbd
set key \4424 \16 ;; up cursor on extended kbd
set key \4429 \6 ;; right cursor on extended kbd
set key \5491 \27b ;; ctrl-left cursor is M-b
set key \5492 \27f ;; ctrl-right cursor is M-f
;; move kermit's screen scroll (playback) features to Alt- Home,End,PgUp,PgDn
;; (this is an issue for extended keyboards only)
set key \2455 \khomscn
set key \2463 \kendscn
set key \2457 \kupscn
set key \2465 \kdnscn

167
etc/ms-kermit Normal file
View file

@ -0,0 +1,167 @@
;;; This file is designed for an 8-bit connection.
;;; Use the file ms-7bkermit if you have a 7-bit connection.
;; Meta key mappings for EMACS
;; By Robert Earl (rearl@watnxt3.ucr.edu)
;; May 13, 1990
;;
;; WARNING:
;; requires an 8-bit path to host. many dialups and lans won't pass the
;; eighth bit by default and may require a special command to turn this
;; off. `screen' is known to mask the eighth bit of input as well.
set term controls 8-bit
set translation key off
;; control keys
set key \3449 \128 ;; m-c-@
set key \3358 \129 ;; m-c-a
set key \3376 \130 ;; m-c-b
set key \3374 \131 ;; m-c-c
set key \3360 \132 ;; m-c-d
set key \3346 \133 ;; m-c-e
set key \3361 \134 ;; m-c-f
set key \3362 \135 ;; m-c-g
set key \3342 \136 ;; m-bs
set key \3363 \136 ;; m-c-h (sends same code as above)
set key \2469 \137 ;; m-tab
set key \3351 \137 ;; m-c-i (same as above)
set key \3364 \138 ;; m-c-j
set key \3365 \139 ;; m-c-k
set key \3366 \140 ;; m-c-l
;set key \3378 \141 ;; m-c-m
set key \2332 \141 ;; m-ret (sends same code as above)
set key \3377 \142 ;; m-c-n
set key \3352 \143 ;; m-c-o
set key \3353 \144 ;; m-c-p
set key \3344 \145 ;; m-c-q
set key \3347 \146 ;; m-c-r
set key \3359 \147 ;; m-c-s
set key \3348 \148 ;; m-c-t
set key \3350 \149 ;; m-c-u
set key \3375 \150 ;; m-c-v
set key \3345 \151 ;; m-c-w
set key \3373 \152 ;; m-c-x
set key \3349 \153 ;; m-c-y
set key \3372 \154 ;; m-c-z
;; misc keys
;set key \3354 \155 ;; m-c-[
set key \2305 \155 ;; m-esc (sends same as above)
set key \3371 \156 ;; m-c-\
set key \3355 \157 ;; m-c-]
set key \3453 \158 ;; m-c-^
set key \3458 \159 ;; m-c-_
;; \160 is conspicuously missing here--
;; alt-spc doesn't generate a distinct scan code...
;; neither do shift-spc and ctrl-spc.
;; no idea why.
set key \2936 \161 ;; m-!
set key \2856 \162 ;; m-"
set key \2938 \163 ;; m-#
set key \2939 \164 ;; m-$
set key \2940 \165 ;; m-%
set key \2942 \166 ;; m-&
set key \2344 \167 ;; m-'
set key \2944 \168 ;; m-(
set key \2945 \169 ;; m-)
set key \2943 \170 ;; m-*
set key \2947 \171 ;; m-+
set key \2355 \172 ;; m-,
set key \2434 \173 ;; m--
set key \2356 \174 ;; m-.
set key \2357 \175 ;; m-/
;; number keys
set key \2433 \176 ;; m-0
set key \2424 \177 ;; m-1
set key \2425 \178
set key \2426 \179
set key \2427 \180
set key \2428 \181
set key \2429 \182
set key \2430 \183
set key \2431 \184
set key \2432 \185 ;; m-9
set key \2855 \186 ;; m-:
set key \2343 \187 ;; m-;
set key \2867 \188 ;; m-<
set key \2435 \189 ;; m-=
set key \2868 \190 ;; m->
set key \2869 \191 ;; m-?
set key \2937 \192 ;; m-@
;; shifted A-Z
set key \2846 \193 ;; m-A
set key \2864 \194
set key \2862 \195
set key \2848 \196
set key \2834 \197
set key \2849 \198
set key \2850 \199
set key \2851 \200
set key \2839 \201
set key \2852 \202
set key \2853 \203
set key \2854 \204
set key \2866 \205
set key \2865 \206
set key \2840 \207
set key \2841 \208
set key \2832 \209
set key \2835 \210
set key \2847 \211
set key \2836 \212
set key \2838 \213
set key \2863 \214
set key \2833 \215
set key \2861 \216
set key \2837 \217
set key \2860 \218 ;; m-Z
set key \2330 \219 ;; m-[
set key \2347 \220 ;; m-\
set key \2331 \221 ;; m-]
set key \2941 \222 ;; m-^
set key \2946 \223 ;; m-_
set key \2345 \224 ;; m-`
;; lowercase a-z
set key \2334 \225 ;; m-a
set key \2352 \226
set key \2350 \227
set key \2336 \228
set key \2322 \229
set key \2337 \230
set key \2338 \231
set key \2339 \232
set key \2327 \233
set key \2340 \234
set key \2341 \235
set key \2342 \236
set key \2354 \237
set key \2353 \238
set key \2328 \239
set key \2329 \240
set key \2320 \241
set key \2323 \242
set key \2335 \243
set key \2324 \244
set key \2326 \245
set key \2351 \246
set key \2321 \247
set key \2349 \248
set key \2325 \249
set key \2348 \250 ;; m-z
;; more shifted misc. keys
set key \2842 \251 ;; m-{
set key \2859 \252 ;; m-|
set key \2843 \253 ;; m-}
set key \2857 \254 ;; m-~
set key \2318 \255 ;; m-del

1
etc/refcard.bit Normal file
View file

@ -0,0 +1 @@
@end

653
etc/refcard.tex Normal file
View file

@ -0,0 +1,653 @@
% Reference Card for GNU Emacs version 20 on Unix systems
%**start of header
\newcount\columnsperpage
% This file can be printed with 1, 2, or 3 columns per page (see below).
% Specify how many you want here. Nothing else needs to be changed.
\columnsperpage=1
% Copyright (c) 1987, 1993, 1996, 1997 Free Software Foundation, Inc.
% This file is part of GNU Emacs.
% GNU Emacs 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 2, or (at your option)
% any later version.
% GNU Emacs 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 GNU Emacs; see the file COPYING. If not, write to
% the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
% Boston, MA 02111-1307, USA.
% This file is intended to be processed by plain TeX (TeX82).
%
% The final reference card has six columns, three on each side.
% This file can be used to produce it in any of three ways:
% 1 column per page
% produces six separate pages, each of which needs to be reduced to 80%.
% This gives the best resolution.
% 2 columns per page
% produces three already-reduced pages.
% You will still need to cut and paste.
% 3 columns per page
% produces two pages which must be printed sideways to make a
% ready-to-use 8.5 x 11 inch reference card.
% For this you need a dvi device driver that can print sideways.
% Which mode to use is controlled by setting \columnsperpage above.
%
% Author:
% Stephen Gildea
% Internet: gildea@mit.edu
%
% Thanks to Paul Rubin, Bob Chassell, Len Tower, and Richard Mlynarik
% for their many good ideas.
% If there were room, it would be nice to see a section on Dired.
\def\versionnumber{2.2}
\def\year{1997}
\def\shortcopyrightnotice{\vskip 1ex plus 2 fill
\centerline{\small \copyright\ \year\ Free Software Foundation, Inc.
Permissions on back. v\versionnumber}}
\def\copyrightnotice{
\vskip 1ex plus 2 fill\begingroup\small
\centerline{Copyright \copyright\ \year\ Free Software Foundation, Inc.}
\centerline{v\versionnumber{} for GNU Emacs version 20, June \year}
\centerline{designed by Stephen Gildea}
Permission is granted to make and distribute copies of
this card provided the copyright notice and this permission notice
are preserved on all copies.
For copies of the GNU Emacs manual, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
\endgroup}
% make \bye not \outer so that the \def\bye in the \else clause below
% can be scanned without complaint.
\def\bye{\par\vfill\supereject\end}
\newdimen\intercolumnskip %horizontal space between columns
\newbox\columna %boxes to hold columns already built
\newbox\columnb
\def\ncolumns{\the\columnsperpage}
\message{[\ncolumns\space
column\if 1\ncolumns\else s\fi\space per page]}
\def\scaledmag#1{ scaled \magstep #1}
% This multi-way format was designed by Stephen Gildea October 1986.
% Note that the 1-column format is fontfamily-independent.
\if 1\ncolumns %one-column format uses normal size
\hsize 4in
\vsize 10in
\voffset -.7in
\font\titlefont=\fontname\tenbf \scaledmag3
\font\headingfont=\fontname\tenbf \scaledmag2
\font\smallfont=\fontname\sevenrm
\font\smallsy=\fontname\sevensy
\footline{\hss\folio}
\def\makefootline{\baselineskip10pt\hsize6.5in\line{\the\footline}}
\else %2 or 3 columns uses prereduced size
\hsize 3.2in
\vsize 7.95in
\hoffset -.75in
\voffset -.745in
\font\titlefont=cmbx10 \scaledmag2
\font\headingfont=cmbx10 \scaledmag1
\font\smallfont=cmr6
\font\smallsy=cmsy6
\font\eightrm=cmr8
\font\eightbf=cmbx8
\font\eightit=cmti8
\font\eighttt=cmtt8
\font\eightmi=cmmi8
\font\eightsy=cmsy8
\textfont0=\eightrm
\textfont1=\eightmi
\textfont2=\eightsy
\def\rm{\eightrm}
\def\bf{\eightbf}
\def\it{\eightit}
\def\tt{\eighttt}
\normalbaselineskip=.8\normalbaselineskip
\normallineskip=.8\normallineskip
\normallineskiplimit=.8\normallineskiplimit
\normalbaselines\rm %make definitions take effect
\if 2\ncolumns
\let\maxcolumn=b
\footline{\hss\rm\folio\hss}
\def\makefootline{\vskip 2in \hsize=6.86in\line{\the\footline}}
\else \if 3\ncolumns
\let\maxcolumn=c
\nopagenumbers
\else
\errhelp{You must set \columnsperpage equal to 1, 2, or 3.}
\errmessage{Illegal number of columns per page}
\fi\fi
\intercolumnskip=.46in
\def\abc{a}
\output={% %see The TeXbook page 257
% This next line is useful when designing the layout.
%\immediate\write16{Column \folio\abc\space starts with \firstmark}
\if \maxcolumn\abc \multicolumnformat \global\def\abc{a}
\else\if a\abc
\global\setbox\columna\columnbox \global\def\abc{b}
%% in case we never use \columnb (two-column mode)
\global\setbox\columnb\hbox to -\intercolumnskip{}
\else
\global\setbox\columnb\columnbox \global\def\abc{c}\fi\fi}
\def\multicolumnformat{\shipout\vbox{\makeheadline
\hbox{\box\columna\hskip\intercolumnskip
\box\columnb\hskip\intercolumnskip\columnbox}
\makefootline}\advancepageno}
\def\columnbox{\leftline{\pagebody}}
\def\bye{\par\vfill\supereject
\if a\abc \else\null\vfill\eject\fi
\if a\abc \else\null\vfill\eject\fi
\end}
\fi
% we won't be using math mode much, so redefine some of the characters
% we might want to talk about
\catcode`\^=12
\catcode`\_=12
\chardef\\=`\\
\chardef\{=`\{
\chardef\}=`\}
\hyphenation{mini-buf-fer}
\parindent 0pt
\parskip 1ex plus .5ex minus .5ex
\def\small{\smallfont\textfont2=\smallsy\baselineskip=.8\baselineskip}
% newcolumn - force a new column. Use sparingly, probably only for
% the first column of a page, which should have a title anyway.
\outer\def\newcolumn{\vfill\eject}
% title - page title. Argument is title text.
\outer\def\title#1{{\titlefont\centerline{#1}}\vskip 1ex plus .5ex}
% section - new major section. Argument is section name.
\outer\def\section#1{\par\filbreak
\vskip 3ex plus 2ex minus 2ex {\headingfont #1}\mark{#1}%
\vskip 2ex plus 1ex minus 1.5ex}
\newdimen\keyindent
% beginindentedkeys...endindentedkeys - key definitions will be
% indented, but running text, typically used as headings to group
% definitions, will not.
\def\beginindentedkeys{\keyindent=1em}
\def\endindentedkeys{\keyindent=0em}
\endindentedkeys
% paralign - begin paragraph containing an alignment.
% If an \halign is entered while in vertical mode, a parskip is never
% inserted. Using \paralign instead of \halign solves this problem.
\def\paralign{\vskip\parskip\halign}
% \<...> - surrounds a variable name in a code example
\def\<#1>{{\it #1\/}}
% kbd - argument is characters typed literally. Like the Texinfo command.
\def\kbd#1{{\tt#1}\null} %\null so not an abbrev even if period follows
% beginexample...endexample - surrounds literal text, such a code example.
% typeset in a typewriter font with line breaks preserved
\def\beginexample{\par\leavevmode\begingroup
\obeylines\obeyspaces\parskip0pt\tt}
{\obeyspaces\global\let =\ }
\def\endexample{\endgroup}
% key - definition of a key.
% \key{description of key}{key-name}
% prints the description left-justified, and the key-name in a \kbd
% form near the right margin.
\def\key#1#2{\leavevmode\hbox to \hsize{\vtop
{\hsize=.75\hsize\rightskip=1em
\hskip\keyindent\relax#1}\kbd{#2}\hfil}}
\newbox\metaxbox
\setbox\metaxbox\hbox{\kbd{M-x }}
\newdimen\metaxwidth
\metaxwidth=\wd\metaxbox
% metax - definition of a M-x command.
% \metax{description of command}{M-x command-name}
% Tries to justify the beginning of the command name at the same place
% as \key starts the key name. (The "M-x " sticks out to the left.)
\def\metax#1#2{\leavevmode\hbox to \hsize{\hbox to .75\hsize
{\hskip\keyindent\relax#1\hfil}%
\hskip -\metaxwidth minus 1fil
\kbd{#2}\hfil}}
% threecol - like "key" but with two key names.
% for example, one for doing the action backward, and one for forward.
\def\threecol#1#2#3{\hskip\keyindent\relax#1\hfil&\kbd{#2}\hfil\quad
&\kbd{#3}\hfil\quad\cr}
%**end of header
\title{GNU Emacs Reference Card}
\centerline{(for version 20)}
\section{Starting Emacs}
To enter GNU Emacs 20, just type its name: \kbd{emacs}
To read in a file to edit, see Files, below.
\section{Leaving Emacs}
\key{suspend Emacs (or iconify it under X)}{C-z}
\key{exit Emacs permanently}{C-x C-c}
\section{Files}
\key{{\bf read} a file into Emacs}{C-x C-f}
\key{{\bf save} a file back to disk}{C-x C-s}
\key{save {\bf all} files}{C-x s}
\key{{\bf insert} contents of another file into this buffer}{C-x i}
\key{replace this file with the file you really want}{C-x C-v}
\key{write buffer to a specified file}{C-x C-w}
\key{version control checkin/checkout}{C-x C-q}
\section{Getting Help}
The help system is simple. Type \kbd{C-h} (or \kbd{F1}) and follow
the directions. If you are a first-time user, type \kbd{C-h t} for a
{\bf tutorial}.
\key{remove help window}{C-x 1}
\key{scroll help window}{C-M-v}
\key{apropos: show commands matching a string}{C-h a}
\key{show the function a key runs}{C-h c}
\key{describe a function}{C-h f}
\key{get mode-specific information}{C-h m}
\section{Error Recovery}
\key{{\bf abort} partially typed or executing command}{C-g}
\metax{{\bf recover} a file lost by a system crash}{M-x recover-file}
\key{{\bf undo} an unwanted change}{C-x u {\rm or} C-_}
\metax{restore a buffer to its original contents}{M-x revert-buffer}
\key{redraw garbaged screen}{C-l}
\section{Incremental Search}
\key{search forward}{C-s}
\key{search backward}{C-r}
\key{regular expression search}{C-M-s}
\key{reverse regular expression search}{C-M-r}
\key{select previous search string}{M-p}
\key{select next later search string}{M-n}
\key{exit incremental search}{RET}
\key{undo effect of last character}{DEL}
\key{abort current search}{C-g}
Use \kbd{C-s} or \kbd{C-r} again to repeat the search in either direction.
If Emacs is still searching, \kbd{C-g} cancels only the part not done.
\shortcopyrightnotice
\section{Motion}
\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
\threecol{{\bf entity to move over}}{{\bf backward}}{{\bf forward}}
\threecol{character}{C-b}{C-f}
\threecol{word}{M-b}{M-f}
\threecol{line}{C-p}{C-n}
\threecol{go to line beginning (or end)}{C-a}{C-e}
\threecol{sentence}{M-a}{M-e}
\threecol{paragraph}{M-\{}{M-\}}
\threecol{page}{C-x [}{C-x ]}
\threecol{sexp}{C-M-b}{C-M-f}
\threecol{function}{C-M-a}{C-M-e}
\threecol{go to buffer beginning (or end)}{M-<}{M->}
}
\key{scroll to next screen}{C-v}
\key{scroll to previous screen}{M-v}
\key{scroll left}{C-x <}
\key{scroll right}{C-x >}
\key{scroll current line to center of screen}{C-u C-l}
\section{Killing and Deleting}
\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
\threecol{{\bf entity to kill}}{{\bf backward}}{{\bf forward}}
\threecol{character (delete, not kill)}{DEL}{C-d}
\threecol{word}{M-DEL}{M-d}
\threecol{line (to end of)}{M-0 C-k}{C-k}
\threecol{sentence}{C-x DEL}{M-k}
\threecol{sexp}{M-- C-M-k}{C-M-k}
}
\key{kill {\bf region}}{C-w}
\key{copy region to kill ring}{M-w}
\key{kill through next occurrence of {\it char}}{M-z {\it char}}
\key{yank back last thing killed}{C-y}
\key{replace last yank with previous kill}{M-y}
\section{Marking}
\key{set mark here}{C-@ {\rm or} C-SPC}
\key{exchange point and mark}{C-x C-x}
\key{set mark {\it arg\/} {\bf words} away}{M-@}
\key{mark {\bf paragraph}}{M-h}
\key{mark {\bf page}}{C-x C-p}
\key{mark {\bf sexp}}{C-M-@}
\key{mark {\bf function}}{C-M-h}
\key{mark entire {\bf buffer}}{C-x h}
\section{Query Replace}
\key{interactively replace a text string}{M-\%}
\metax{using regular expressions}{M-x query-replace-regexp}
Valid responses in query-replace mode are
\key{{\bf replace} this one, go on to next}{SPC}
\key{replace this one, don't move}{,}
\key{{\bf skip} to next without replacing}{DEL}
\key{replace all remaining matches}{!}
\key{{\bf back up} to the previous match}{^}
\key{{\bf exit} query-replace}{RET}
\key{enter recursive edit (\kbd{C-M-c} to exit)}{C-r}
\section{Multiple Windows}
When two commands are shown, the second is for ``other frame.''
\key{delete all other windows}{C-x 1}
{\setbox0=\hbox{\kbd{0}}\advance\hsize by 0\wd0
\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
\threecol{split window, above and below}{C-x 2\ \ \ \ }{C-x 5 2}
\threecol{delete this window}{C-x 0\ \ \ \ }{C-x 5 0}
}}
\key{split window, side by side}{C-x 3}
\key{scroll other window}{C-M-v}
{\setbox0=\hbox{\kbd{0}}\advance\hsize by 2\wd0
\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
\threecol{switch cursor to another window}{C-x o}{C-x 5 o}
\threecol{select buffer in other window}{C-x 4 b}{C-x 5 b}
\threecol{display buffer in other window}{C-x 4 C-o}{C-x 5 C-o}
\threecol{find file in other window}{C-x 4 f}{C-x 5 f}
\threecol{find file read-only in other window}{C-x 4 r}{C-x 5 r}
\threecol{run Dired in other window}{C-x 4 d}{C-x 5 d}
\threecol{find tag in other window}{C-x 4 .}{C-x 5 .}
}}
\key{grow window taller}{C-x ^}
\key{shrink window narrower}{C-x \{}
\key{grow window wider}{C-x \}}
\section{Formatting}
\key{indent current {\bf line} (mode-dependent)}{TAB}
\key{indent {\bf region} (mode-dependent)}{C-M-\\}
\key{indent {\bf sexp} (mode-dependent)}{C-M-q}
\key{indent region rigidly {\it arg\/} columns}{C-x TAB}
\key{insert newline after point}{C-o}
\key{move rest of line vertically down}{C-M-o}
\key{delete blank lines around point}{C-x C-o}
\key{join line with previous (with arg, next)}{M-^}
\key{delete all white space around point}{M-\\}
\key{put exactly one space at point}{M-SPC}
\key{fill paragraph}{M-q}
\key{set fill column}{C-x f}
\key{set prefix each line starts with}{C-x .}
\key{set face}{M-g}
\section{Case Change}
\key{uppercase word}{M-u}
\key{lowercase word}{M-l}
\key{capitalize word}{M-c}
\key{uppercase region}{C-x C-u}
\key{lowercase region}{C-x C-l}
\section{The Minibuffer}
The following keys are defined in the minibuffer.
\key{complete as much as possible}{TAB}
\key{complete up to one word}{SPC}
\key{complete and execute}{RET}
\key{show possible completions}{?}
\key{fetch previous minibuffer input}{M-p}
\key{fetch later minibuffer input or default}{M-n}
\key{regexp search backward through history}{M-r}
\key{regexp search forward through history}{M-s}
\key{abort command}{C-g}
Type \kbd{C-x ESC ESC} to edit and repeat the last command that used the
minibuffer. Type \kbd{F10} to activate the menu bar using the minibuffer.
\newcolumn
\title{GNU Emacs Reference Card}
\section{Buffers}
\key{select another buffer}{C-x b}
\key{list all buffers}{C-x C-b}
\key{kill a buffer}{C-x k}
\section{Transposing}
\key{transpose {\bf characters}}{C-t}
\key{transpose {\bf words}}{M-t}
\key{transpose {\bf lines}}{C-x C-t}
\key{transpose {\bf sexps}}{C-M-t}
\section{Spelling Check}
\key{check spelling of current word}{M-\$}
\metax{check spelling of all words in region}{M-x ispell-region}
\metax{check spelling of entire buffer}{M-x ispell-buffer}
\section{Tags}
\key{find a tag (a definition)}{M-.}
\key{find next occurrence of tag}{C-u M-.}
\metax{specify a new tags file}{M-x visit-tags-table}
\metax{regexp search on all files in tags table}{M-x tags-search}
\metax{run query-replace on all the files}{M-x tags-query-replace}
\key{continue last tags search or query-replace}{M-,}
\section{Shells}
\key{execute a shell command}{M-!}
\key{run a shell command on the region}{M-|}
\key{filter region through a shell command}{C-u M-|}
\key{start a shell in window \kbd{*shell*}}{M-x shell}
\section{Rectangles}
\key{copy rectangle to register}{C-x r r}
\key{kill rectangle}{C-x r k}
\key{yank rectangle}{C-x r y}
\key{open rectangle, shifting text right}{C-x r o}
\key{blank out rectangle}{C-x r c}
\key{prefix each line with a string}{C-x r t}
\section{Abbrevs}
\key{add global abbrev}{C-x a g}
\key{add mode-local abbrev}{C-x a l}
\key{add global expansion for this abbrev}{C-x a i g}
\key{add mode-local expansion for this abbrev}{C-x a i l}
\key{explicitly expand abbrev}{C-x a e}
\key{expand previous word dynamically}{M-/}
\section{Regular Expressions}
\key{any single character except a newline}{. {\rm(dot)}}
\key{zero or more repeats}{*}
\key{one or more repeats}{+}
\key{zero or one repeat}{?}
\key{quote regular expression special character {\it c\/}}{\\{\it c}}
\key{alternative (``or'')}{\\|}
\key{grouping}{\\( {\rm$\ldots$} \\)}
\key{same text as {\it n\/}th group}{\\{\it n}}
\key{at word break}{\\b}
\key{not at word break}{\\B}
\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
\threecol{{\bf entity}}{{\bf match start}}{{\bf match end}}
\threecol{line}{^}{\$}
\threecol{word}{\\<}{\\>}
\threecol{buffer}{\\`}{\\'}
\threecol{{\bf class of characters}}{{\bf match these}}{{\bf match others}}
\threecol{explicit set}{[ {\rm$\ldots$} ]}{[^ {\rm$\ldots$} ]}
\threecol{word-syntax character}{\\w}{\\W}
\threecol{character with syntax {\it c}}{\\s{\it c}}{\\S{\it c}}
}
\section{International Character Sets}
\metax{specify principal language}{M-x set-language-environment}
\metax{show all input methods}{M-x list-input-methods}
\key{enable or disable input method}{C-\\}
\key{set coding system for next command}{C-x RET c}
\metax{show all coding systems}{M-x list-coding-systems}
\metax{choose preferred coding system}{M-x prefer-coding-system}
\section{Info}
\key{enter the Info documentation reader}{C-h i}
\key{find specified function or variable in Info}{C-h C-i}
\beginindentedkeys
Moving within a node:
\key{scroll forward}{SPC}
\key{scroll reverse}{DEL}
\key{beginning of node}{. {\rm (dot)}}
Moving between nodes:
\key{{\bf next} node}{n}
\key{{\bf previous} node}{p}
\key{move {\bf up}}{u}
\key{select menu item by name}{m}
\key{select {\it n\/}th menu item by number (1--9)}{{\it n}}
\key{follow cross reference (return with \kbd{l})}{f}
\key{return to last node you saw}{l}
\key{return to directory node}{d}
\key{go to any node by name}{g}
Other:
\key{run Info {\bf tutorial}}{h}
\key{{\bf quit} Info}{q}
\key{search nodes for regexp}{M-s}
\endindentedkeys
\section{Registers}
\key{save region in register}{C-x r s}
\key{insert register contents into buffer}{C-x r i}
\key{save value of point in register}{C-x r SPC}
\key{jump to point saved in register}{C-x r j}
\section{Keyboard Macros}
\key{{\bf start} defining a keyboard macro}{C-x (}
\key{{\bf end} keyboard macro definition}{C-x )}
\key{{\bf execute} last-defined keyboard macro}{C-x e}
\key{append to last keyboard macro}{C-u C-x (}
\metax{name last keyboard macro}{M-x name-last-kbd-macro}
\metax{insert Lisp definition in buffer}{M-x insert-kbd-macro}
\section{Commands Dealing with Emacs Lisp}
\key{eval {\bf sexp} before point}{C-x C-e}
\key{eval current {\bf defun}}{C-M-x}
\metax{eval {\bf region}}{M-x eval-region}
\key{read and eval minibuffer}{M-:}
\metax{load from standard system directory}{M-x load-library}
\section{Simple Customization}
\metax{customize variables and faces}{M-x customize}
% The intended audience here is the person who wants to make simple
% customizations and knows Lisp syntax.
Making global key bindings in Emacs Lisp (examples):
\beginexample%
(global-set-key "\\C-cg" 'goto-line)
(global-set-key "\\M-\#" 'query-replace-regexp)
\endexample
\section{Writing Commands}
\beginexample%
(defun \<command-name> (\<args>)
"\<documentation>" (interactive "\<template>")
\<body>)
\endexample
An example:
\beginexample%
(defun this-line-to-top-of-window (line)
"Reposition line point is on to top of window.
With ARG, put point on line ARG."
(interactive "P")
(recenter (if (null line)
0
(prefix-numeric-value line))))
\endexample
The \kbd{interactive} spec says how to read arguments interactively.
Type \kbd{C-h f interactive} for more details.
\copyrightnotice
\bye
% Local variables:
% compile-command: "tex refcard"
% End:

38
etc/ulimit.hack Normal file
View file

@ -0,0 +1,38 @@
#!/bin/sh
#
# ulimit.hack: Create an intermediate program for use in
# between kernel initialization and init startup.
# This is needed on a 3b system if the standard CDLIMIT is
# so small that the dumped Emacs file cannot be written.
# This program causes everyone to get a bigger CDLIMIT value
# so that the dumped Emacs can be written out.
#
# Users of V.3.1 and later should not use this; see etc/MACHINES
# and reconfig your kernel's CDLIMIT parameter instead.
#
# Caveat: Heaven help you if you screw this up. This puts
# a new program in as /etc/init, which then execs the real init.
#
cat > ulimit.init.c << \EOF
main(argc, argv)
int argc;
char *argv[];
{
ulimit(2, 262144L); /* "2" is the "set" command. */
/* 262,144 allows for 128Mb files to be written. */
/* If that value isn't suitable, roll your own. */
execv("/etc/real.init", argv);
}
EOF
#
# Compile it and put it in place of the usual init program.
#
cc ulimit.init.c -o ulimit.init
mv /etc/init /etc/real.init
mv ulimit.init /etc/ulimit.init
ln /etc/ulimit.init /etc/init
mv ulimit.init.c /etc/ulimit.init.c # to keep src for this hack nearby.
chmod 0754 /etc/init
exit 0
#
# Upon system reboot, all processes will inherit the new large ulimit.

681
etc/vipcard.tex Normal file
View file

@ -0,0 +1,681 @@
% Quick Reference Card for VIP 3.5 under GNU Emacs version 18 on Unix systems
%**start of header
\newcount\columnsperpage
% This file can be printed with 1, 2, or 3 columns per page (see below).
% Specify how many you want here. Nothing else needs to be changed.
\columnsperpage=1
% Copyright (c) 1987 Free Software Foundation, Inc.
% This file is part of GNU Emacs.
% This file is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY. No author or distributor
% accepts responsibility to anyone for the consequences of using it
% or for whether it serves any particular purpose or describes
% any piece of software unless they say so in writing. Refer to the
% GNU Emacs General Public License for full details.
%
% Permission is granted to copy, modify and redistribute this source
% file provided the copyright notice and permission notices are
% preserved on all copies.
%
% Permission is granted to process this file through TeX and print the
% results, provided the printed document carries copyright and
% permission notices identical to the ones below.
% This file is intended to be processed by plain TeX (TeX82).
%
% The final reference card has six columns, three on each side.
% This file can be used to produce it in any of three ways:
% 1 column per page
% produces six separate pages, each of which needs to be reduced to 80%.
% This gives the best resolution.
% 2 columns per page
% produces three already-reduced pages.
% You will still need to cut and paste.
% 3 columns per page
% produces two pages which must be printed sideways to make a
% ready-to-use 8.5 x 11 inch reference card.
% For this you need a dvi device driver that can print sideways.
% Which mode to use is controlled by setting \columnsperpage above.
%
% Author:
% Masahiko Sato
% Internet: ms@sail.stanford.edu
% Junet: masahiko@sato.riec.tohoku.junet
%
% The original TeX code for formatting the reference card was written by:
% Stephen Gildea
% UUCP: mit-erl!gildea
% Internet: gildea@erl.mit.edu
\def\versionnumber{1.2}
\def\year{1987}
\def\version{September \year\ v\versionnumber}
\def\shortcopyrightnotice{\vskip 1ex plus 2 fill
\centerline{\small \copyright\ \year\ Free Software Foundation, Inc.
Permissions on back. v\versionnumber}}
\def\copyrightnotice{
%\vskip 1ex plus 2 fill\begingroup\small
\vskip 1ex \begingroup\small
\centerline{Copyright \copyright\ \year\ Free Software Foundation, Inc.}
\centerline{designed by Masahiko Sato, \version}
\centerline{for VIP 3.5 under GNU Emacs version 18 on Unix systems}
Permission is granted to make and distribute copies of
this card provided the copyright notice and this permission notice
are preserved on all copies.
For copies of the GNU Emacs manual, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
\endgroup}
% make \bye not \outer so that the \def\bye in the \else clause below
% can be scanned without complaint.
\def\bye{\par\vfill\supereject\end}
\newdimen\intercolumnskip
\newbox\columna
\newbox\columnb
\def\ncolumns{\the\columnsperpage}
\message{[\ncolumns\space
column\if 1\ncolumns\else s\fi\space per page]}
\def\scaledmag#1{ scaled \magstep #1}
% This multi-way format was designed by Stephen Gildea
% October 1986.
% Slightly modified by Masahiko Sato, September 1987.
\if 1\ncolumns
\hsize 4in
\vsize 10in
%\voffset -.7in
\voffset -.57in
\font\titlefont=\fontname\tenbf \scaledmag3
\font\headingfont=\fontname\tenbf \scaledmag2
\font\miniheadingfont=\fontname\tenbf \scaledmag1 % masahiko
\font\smallfont=\fontname\sevenrm
\font\smallsy=\fontname\sevensy
\footline{\hss\folio}
\def\makefootline{\baselineskip10pt\hsize6.5in\line{\the\footline}}
\else
%\hsize 3.2in
%\vsize 7.95in
\hsize 3.41in % masahiko
\vsize 8in % masahiko
\hoffset -.75in
\voffset -.745in
\font\titlefont=cmbx10 \scaledmag2
\font\headingfont=cmbx10 \scaledmag1
\font\miniheadingfont=cmbx10 % masahiko
\font\smallfont=cmr6
\font\smallsy=cmsy6
\font\eightrm=cmr8
\font\eightbf=cmbx8
\font\eightit=cmti8
\font\eightsl=cmsl8
\font\eighttt=cmtt8
\font\eightsy=cmsy8
\textfont0=\eightrm
\textfont2=\eightsy
\def\rm{\eightrm}
\def\bf{\eightbf}
\def\it{\eightit}
\def\sl{\eightsl} % masahiko
\def\tt{\eighttt}
\normalbaselineskip=.8\normalbaselineskip
\normallineskip=.8\normallineskip
\normallineskiplimit=.8\normallineskiplimit
\normalbaselines\rm %make definitions take effect
\if 2\ncolumns
\let\maxcolumn=b
\footline{\hss\rm\folio\hss}
\def\makefootline{\vskip 2in \hsize=6.86in\line{\the\footline}}
\else \if 3\ncolumns
\let\maxcolumn=c
\nopagenumbers
\else
\errhelp{You must set \columnsperpage equal to 1, 2, or 3.}
\errmessage{Illegal number of columns per page}
\fi\fi
%\intercolumnskip=.46in
\intercolumnskip=.19in % masahiko .19x4 + 3.41x3 = 10.99
\def\abc{a}
\output={%
% This next line is useful when designing the layout.
%\immediate\write16{Column \folio\abc\space starts with \firstmark}
\if \maxcolumn\abc \multicolumnformat \global\def\abc{a}
\else\if a\abc
\global\setbox\columna\columnbox \global\def\abc{b}
%% in case we never use \columnb (two-column mode)
\global\setbox\columnb\hbox to -\intercolumnskip{}
\else
\global\setbox\columnb\columnbox \global\def\abc{c}\fi\fi}
\def\multicolumnformat{\shipout\vbox{\makeheadline
\hbox{\box\columna\hskip\intercolumnskip
\box\columnb\hskip\intercolumnskip\columnbox}
\makefootline}\advancepageno}
\def\columnbox{\leftline{\pagebody}}
\def\bye{\par\vfill\supereject
\if a\abc \else\null\vfill\eject\fi
\if a\abc \else\null\vfill\eject\fi
\end}
\fi
% we won't be using math mode much, so redefine some of the characters
% we might want to talk about
\catcode`\^=12
\catcode`\_=12
\chardef\\=`\\
\chardef\{=`\{
\chardef\}=`\}
\hyphenation{mini-buf-fer}
\parindent 0pt
\parskip 1ex plus .5ex minus .5ex
\def\small{\smallfont\textfont2=\smallsy\baselineskip=.8\baselineskip}
\outer\def\newcolumn{\vfill\eject}
\outer\def\title#1{{\titlefont\centerline{#1}}\vskip 1ex plus .5ex}
\outer\def\section#1{\par\filbreak
\vskip 3ex plus 2ex minus 2ex {\headingfont #1}\mark{#1}%
\vskip 2ex plus 1ex minus 1.5ex}
% masahiko
\outer\def\subsection#1{\par\filbreak
\vskip 2ex plus 2ex minus 2ex {\miniheadingfont #1}\mark{#1}%
\vskip 1ex plus 1ex minus 1.5ex}
\newdimen\keyindent
\def\beginindentedkeys{\keyindent=1em}
\def\endindentedkeys{\keyindent=0em}
\endindentedkeys
\def\paralign{\vskip\parskip\halign}
\def\<#1>{$\langle${\rm #1}$\rangle$}
\def\kbd#1{{\tt#1}\null} %\null so not an abbrev even if period follows
\def\beginexample{\par\leavevmode\begingroup
\obeylines\obeyspaces\parskip0pt\tt}
{\obeyspaces\global\let =\ }
\def\endexample{\endgroup}
\def\key#1#2{\leavevmode\hbox to \hsize{\vtop
{\hsize=.75\hsize\rightskip=1em
\hskip\keyindent\relax#1}\kbd{#2}\hfil}}
\newbox\metaxbox
\setbox\metaxbox\hbox{\kbd{M-x }}
\newdimen\metaxwidth
\metaxwidth=\wd\metaxbox
\def\metax#1#2{\leavevmode\hbox to \hsize{\hbox to .75\hsize
{\hskip\keyindent\relax#1\hfil}%
\hskip -\metaxwidth minus 1fil
\kbd{#2}\hfil}}
\def\fivecol#1#2#3#4#5{\hskip\keyindent\relax#1\hfil&\kbd{#2}\quad
&\kbd{#3}\quad&\kbd{#4}\quad&\kbd{#5}\cr}
\def\fourcol#1#2#3#4{\hskip\keyindent\relax#1\hfil&\kbd{#2}\quad
&\kbd{#3}\quad&\kbd{#4}\quad\cr}
\def\threecol#1#2#3{\hskip\keyindent\relax#1\hfil&\kbd{#2}\quad
&\kbd{#3}\quad\cr}
\def\twocol#1#2{\hskip\keyindent\relax\kbd{#1}\hfil&\kbd{#2}\quad\cr}
\def\twocolkey#1#2#3#4{\hskip\keyindent\relax#1\hfil&\kbd{#2}\quad&\relax#3\hfil&\kbd{#4}\quad\cr}
%**end of header
\beginindentedkeys
\title{VIP Quick Reference Card}
\centerline{(for version 3.5 under GNU Emacs version 18)}
%\copyrightnotice
\section{Loading VIP}
Just type \kbd{M-x vip-mode} followed by \kbd{RET}
\section{VIP Modes}
VIP has three modes: {\it emacs mode}, {\it vi mode} and {\it insert mode}.
Mode line tells you which mode you are in.
In emacs mode you can do all the normal GNU Emacs editing.
This card explains only vi mode and insert mode.
{\bf GNU Emacs Reference Card} explains emacs mode.
You can switch modes as follows.
\key{from emacs mode to vi mode}{C-z}
\key{from vi mode to emacs mode}{C-z}
\metax{from vi mode to insert mode}{i, I, a, A, o, O {\rm or} C-o}
\key{from insert mode to vi mode}{ESC}
If you wish to be in vi mode just after you startup Emacs,
include the line:
\hskip 5ex
\kbd{(setq term-setup-hook 'vip-mode)}
in your \kbd{.emacs} file.
Or, you can put the following alias in your \kbd{.cshrc} file.
\hskip 5ex
\kbd{alias vip 'emacs \\!* -f vip-mode'}
\section{Insert Mode}
Insert mode is like emacs mode except for the following.
\key{go back to vi mode}{ESC}
\key{delete previous character}{C-h}
\key{delete previous word}{C-w}
\key{emulate \kbd{ESC} key in emacs mode}{C-z}
The rest of this card explains commands in {\bf vi mode}.
\section{Getting Information on VIP}
Execute info command by typing \kbd{M-x info} and select menu item
\kbd{vip}. Also:
\key{describe function attached to the key {\it x}}{C-h k {\it x}}
\section{Leaving Emacs}
\key{suspend Emacs}{X Z {\rm or} :st}
\metax{exit Emacs permanently}{Z Z {\rm or} X C {\rm or} :q}
\section{Error Recovery}
\key{abort partially typed or executing command}{C-g}
\key{redraw messed up screen}{C-l}
\metax{{\bf recover} a file lost by a system crash}{M-x recover-file}
\metax{restore a buffer to its original contents}{M-x revert-buffer}
\shortcopyrightnotice
\section{Counts}
Most commands in vi mode accept a {\it count} which can be supplied as a
prefix to the commands. In most cases, if a count is given, the
command is executed that many times. E.g., \kbd{5 d d} deletes 5
lines.
%\shortcopyrightnotice
\section{Registers}
There are 26 registers (\kbd{a} to \kbd{z}) that can store texts
and marks.
You can append a text at the end of a register (say \kbd{x}) by
specifying the register name in capital letter (say \kbd{X}).
There are also 9 read only registers (\kbd{1} to \kbd{9}) that store
up to 9 previous changes.
We will use {\it x\/} to denote a register.
\section{Entering Insert Mode}
\key{{\bf insert} at point}{i}
\key{{\bf append} after cursor}{a}
\key{{\bf insert} before first non-white}{I}
\key{{\bf append} at end of line}{A}
\key{{\bf open} line below}{o}
\key{{\bf open} line above}{O}
\key{{\bf open} line at point}{C-o}
\section{Buffers and Windows}
\key{move cursor to {\bf next} window}{C-n}
\key{delete current window}{X 0}
\key{delete other windows}{X 1}
\key{split current window into two windows}{X 2}
\key{show current buffer in two windows}{X 3}
\key{{\bf switch} to a buffer in the current window}{s {\sl buffer}}
\key{{\bf switch} to a buffer in another window}{S {\sl buffer}}
\key{{\bf kill} a buffer}{K}
\key{list existing {\bf buffers}}{X B}
\section{Files}
\metax{{\bf visit} file in the current window}{v {\sl file} {\rm or} :e {\sl file}}
\key{{\bf visit} file in another window}{V {\sl file}}
\key{{\bf save} buffer to the associated file}{X S}
\key{{\bf write} buffer to a specified file}{X W}
\key{{\bf insert} a specified file at point}{X I}
\key{{\bf get} information on the current {\bf file}}{g {\rm or} :f}
\key{run the {\bf directory} editor}{X d}
\section{Viewing the Buffer}
\key{scroll to next screen}{SPC {\rm or} C-f}
\key{scroll to previous screen}{RET {\rm or} C-b}
\key{scroll {\bf down} half screen}{C-d}
\key{scroll {\bf up} half screen}{C-u}
\key{scroll down one line}{C-e}
\key{scroll up one line}{C-y}
\key{put current line on the {\bf home} line}{z H {\rm or} z RET}
\key{put current line on the {\bf middle} line}{z M {\rm or} z .}
\key{put current line on the {\bf last} line}{z L {\rm or} z -}
\section{Marking and Returning}
\key{{\bf mark} point in register {\it x}}{m {\it x}}
\key{set mark at buffer beginning}{m <}
\key{set mark at buffer end}{m >}
\key{set mark at point}{m .}
\key{jump to mark}{m ,}
\key{exchange point and mark}{` `}
\key{... and skip to first non-white on line}{' '}
\key{go to mark {\it x}}{` {\it x}}
\key{... and skip to first non-white on line}{' {\it x}}
\section{Macros}
\key{start remembering keyboard macro}{X (}
\key{finish remembering keyboard macro}{X )}
\key{call last keyboard macro}{*}
\key{execute macro stored in register {\it x}}{@ {\it x}}
\section{Motion Commands}
\key{go backward one character}{h}
\key{go forward one character}{l}
\key{next line keeping the column}{j}
\key{previous line keeping the column}{k}
\key{next line at first non-white}{+}
\key{previous line at first non-white}{-}
\key{beginning of line}{0}
\key{first non-white on line}{^}
\key{end of line}{\$}
\key{go to {\it n}-th column on line}{{\it n} |}
\key{go to {\it n}-th line}{{\it n} G}
\key{go to last line}{G}
\key{find matching parenthesis for \kbd{()}, \kbd{\{\}} and \kbd{[]}}{\%}
\key{go to {\bf home} window line}{H}
\key{go to {\bf middle} window line}{M}
\key{go to {\bf last} window line}{L}
\subsection{Words, Sentences, Paragraphs}
\key{forward {\bf word}}{w {\rm or} W}
\key{{\bf backward} word}{b {\rm or} B}
\key{{\bf end} of word}{e {\rm or} E}
In the case of capital letter commands, a word is delimited by a
non-white character.
\key{forward sentence}{)}
\key{backward sentence}{(}
\key{forward paragraph}{\}}
\key{backward paragraph}{\{}
\subsection{Find Characters on the Line}
\key{{\bf find} {\it c} forward on line}{f {\it c}}
\key{{\bf find} {\it c} backward on line}{F {\it c}}
\key{up {\bf to} {\it c} forward on line}{t {\it c}}
\key{up {\bf to} {\it c} backward on line}{T {\it c}}
\key{repeat previous \kbd{f}, \kbd{F}, \kbd{t} or \kbd{T}}{;}
\key{... in the opposite direction}{,}
\newcolumn
\title{VIP Quick Reference Card}
\section{Searching and Replacing}
\key{search forward for {\sl pat}}{/ {\sl pat}}
\key{search backward for {\sl pat}}{?\ {\sl pat}}
\key{repeat previous search}{n}
\key{... in the opposite direction}{N}
\key{incremental {\bf search}}{C-s}
\key{{\bf reverse} incremental search}{C-r}
\key{{\bf replace}}{R}
\key{{\bf query} replace}{Q}
\key{{\bf replace} a character by another character {\it c}}{r {\it c}}
\section{Modifying Commands}
The delete (yank, change) commands explained below accept a motion command as
their argument and delete (yank, change) the region determined by the motion
command. Motion commands are classified into {\it point commands} and
{\it line commands}. In the case of line commands, whole lines will
be affected by the command. Motion commands will be represented by
{\it m} below.
The point commands are as follows:
\hskip 5ex
\kbd{h l 0 ^ \$ w W b B e E ( ) / ?\ ` f F t T \% ; ,}
The line commands are as follows:
\hskip 5ex
\kbd{j k + - H M L \{ \} G '}
\subsection{Delete/Yank/Change Commands}
\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\tabskip=0pt&#\cr
\fourcol{}{{\bf delete}}{{\bf yank}}{{\bf change}}
\fourcol{region determined by {\it m}}{d {\it m}}{y {\it m}}{c {\it m}}
\fourcol{... into register {\it x}}{" {\it x\/} d {\it m}}{" {\it x\/} y {\it m}}{" {\it x\/} c {\it m}}
\fourcol{a line}{d d}{Y {\rm or} y y}{c c}
\fourcol{current {\bf region}}{d r}{y r}{c r}
\fourcol{expanded {\bf region}}{d R}{y R}{c R}
\fourcol{to end of line}{D}{y \$}{c \$}
\fourcol{a character after point}{x}{y l}{c l}
\fourcol{a character before point}{DEL}{y h}{c h}
}
\subsection{Put Back Commands}
Deleted/yanked/changed text can be put back by the following commands.
\key{{\bf Put} back at point/above line}{P}
\key{... from register {\it x}}{" {\it x\/} P}
\key{{\bf put} back after point/below line}{p}
\key{... from register {\it x}}{" {\it x\/} p}
\subsection{Repeating and Undoing Modifications}
\key{{\bf undo} last change}{u {\rm or} :und}
\key{repeat last change}{.\ {\rm (dot)}}
Undo is undoable by \kbd{u} and repeatable by \kbd{.}.
For example, \kbd{u...} will undo 4 previous changes.
A \kbd{.} after \kbd{5dd} is equivalent to \kbd{5dd},
while \kbd{3.} after \kbd{5dd} is equivalent to \kbd{3dd}.
\section{Miscellaneous Commands}
\endindentedkeys
\paralign to \hsize{#\tabskip=5pt plus 1 fil&#\tabskip=0pt&#\tabskip=0pt&#\tabskip=0pt&#\cr
\fivecol{}{{\bf shift left}}{{\bf shift right}}{{\bf filter shell command}}{{\bf indent}}
\fivecol{region}{< {\it m}}{> {\it m}}{!\ {\it m\/} {\sl shell-com}}{= {\it m}}
\fivecol{line}{< <}{> >}{!\ !\ {\sl shell-com}}{= =}
}
\key{emulate \kbd{ESC}/\kbd{C-h} in emacs mode}{ESC{\rm /}C-h}
\key{emulate \kbd{C-c}/\kbd{C-x} in emacs mode}{C{\rm /}X}
\key{{\bf join} lines}{J}
\key{lowercase region}{\# c {\it m}}
\key{uppercase region}{\# C {\it m}}
\key{execute last keyboard macro on each line in the region}{\# g {\it m}}
\key{insert specified string for each line in the region}{\# q {\it m}}
\key{check spelling of the words in the region}{\# s {\it m}}
\section{Differences from Vi}
\beginindentedkeys
In VIP some keys behave rather differently from Vi.
The table below lists such keys, and you can get the effect of typing
these keys by typing the corresponding keys in the VIP column.
\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
\threecol{}{{\bf Vi}}{{\bf VIP}}
\threecol{forward character}{SPC}{l}
\threecol{backward character}{C-h}{h}
\threecol{next line at first non-white}{RET}{+}
\threecol{delete previous character}{X}{DEL}
\threecol{get information on file}{C-g}{g}
\threecol{substitute characters}{s}{x i}
\threecol{substitute line}{S}{c c}
\threecol{change to end of line}{C {\rm or} R}{c \$}
}
(Strictly speaking, \kbd{C} and \kbd{R} behave slightly differently in Vi.)
\section{Customization}
By default, search is case sensitive.
You can change this by including the following line in your \kbd{.vip} file.
\hskip 5ex
\kbd{(setq vip-case-fold-search t)}
\beginindentedkeys
\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
\twocol{{\bf variable}}{{\bf default value}}
\twocol{vip-search-wrap-around}{t}
\twocol{vip-case-fold-search}{nil}
\twocol{vip-re-search}{nil}
\twocol{vip-re-replace}{nil}
\twocol{vip-re-query-replace}{nil}
\twocol{vip-open-with-indent}{nil}
\twocol{vip-help-in-insert-mode}{nil}
\twocol{vip-shift-width}{8}
\twocol{vip-tags-file-name}{"TAGS"}
}
%\subsection{Customizing Key Bindings}
Include (some of) following lines in your \kbd{.vip} file
to restore Vi key bindings.
\beginexample
(define-key vip-mode-map "\\C-g" 'vip-info-on-file)
(define-key vip-mode-map "\\C-h" 'vip-backward-char)
(define-key vip-mode-map "\\C-m" 'vip-next-line-at-bol)
(define-key vip-mode-map " " 'vip-forward-char)
(define-key vip-mode-map "g" 'vip-keyboard-quit)
(define-key vip-mode-map "s" 'vip-substitute)
(define-key vip-mode-map "C" 'vip-change-to-eol)
(define-key vip-mode-map "R" 'vip-change-to-eol)
(define-key vip-mode-map "S" 'vip-substitute-line)
(define-key vip-mode-map "X" 'vip-delete-backward-char)
\endexample
\newcolumn
\title{Ex Commands in VIP}
In vi mode, an Ex command is entered by typing:
\hskip 5ex
\kbd{:\ {\sl ex-command} RET}
\section{Ex Addresses}
\paralign to \hsize{#\tabskip=5pt plus 1 fil&#\tabskip=2pt&#\tabskip=5pt plus 1 fil&#\cr
\twocolkey{current line}{.}{next line with {\sl pat}}{/ {\sl pat} /}
\twocolkey{line {\it n}}{{\it n}}{previous line with {\sl pat}}{?\ {\sl pat} ?}
\twocolkey{last line}{\$}{{\it n\/} line before {\it a}}{{\it a} - {\it n}}
\twocolkey{next line}{+}{{\it a\/} through {\it b}}{{\it a\/} , {\it b}}
\twocolkey{previous line}{-}{line marked with {\it x}}{' {\it x}}
\twocolkey{entire buffer}{\%}{previous context}{' '}
}
Addresses can be specified in front of a command.
For example,
\hskip 5ex
\kbd{:.,.+10m\$}
moves 11 lines below current line to the end of buffer.
\section{Ex Commands}
\endindentedkeys
\key{mark lines matching {\sl pat} and execute {\sl cmds} on these lines}{:g /{\sl pat}/ {\sl cmds}}
\key{mark lines {\it not\/} matching {\sl pat} and execute {\sl cmds} on these lines}{:v /{\sl pat}/ {\sl cmds}}
\key{{\bf move} specified lines after {\sl addr}}{:m {\sl addr}}
\key{{\bf copy} specified lines after {\sl addr}}{:co\rm\ (or \kbd{:t})\ \sl addr}
\key{{\bf delete} specified lines [into register {\it x\/}]}{:d {\rm [{\it x\/}]}}
\key{{\bf yank} specified lines [into register {\it x\/}]}{:y {\rm [{\it x\/}]}}
\key{{\bf put} back text [from register {\it x\/}]}{:pu {\rm [{\it x\/}]}}
\key{{\bf substitute} {\sl repl} for first string on line matching {\sl pat}}{:s /{\sl pat}/{\sl repl}/}
\key{repeat last substitution}{:\&}
\key{repeat previous substitute with previous search pattern as {\sl pat}}{:\~{}}
\key{{\bf read} in a file}{:r {\sl file}}
\key{{\bf read} in the output of a shell command}{:r!\ {\sl command}}
\key{write out specified lines into {\sl file}}{:w {\sl file}}
\key{write out specified lines at the end of {\sl file}}{:w>> {\sl file}}
\key{write out and then quit}{:wq {\sl file}}
\key{define a macro {\it x} that expands to {\sl cmd}}{:map {\it x} {\sl cmd}}
\key{remove macro expansion associated with {\it x}}{:unma {\it x}}
\key{print line number}{:=}
\key{print {\bf version} number of VIP}{:ve}
\key{shift specified lines to the right}{:>}
\key{shift specified lines to the left}{:<}
\key{{\bf join} lines}{:j}
\key{mark specified line to register {\it x}}{:k {\it x}}
\key{{\bf set} a variable's value}{:se}
\key{run a sub{\bf shell} in a window}{:sh}
\key{execute shell command {\sl command}}{:!\ {\sl command}}
\key{find first definition of {\bf tag} {\sl tag}}{:ta {\sl tag}}
\copyrightnotice
\bye
% Local variables:
% compile-command: "tex refcard"
% End:

746
etc/viperCard.tex Normal file
View file

@ -0,0 +1,746 @@
% ViperCard -- The Reference Card for Viper under GNU Emacs 20 and XEmacs 20
%**start of header
\newcount\columnsperpage
% This file can be printed with 1 or 2 columns per page (see below).
% Specify how many you want here. Nothing else needs to be changed.
\columnsperpage=2
% Copyright (c) 1995, 1996, 1997 Free Software Foundation, Inc.
% This file is part of GNU Emacs.
% This file is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY. No author or distributor
% accepts responsibility to anyone for the consequences of using it
% or for whether it serves any particular purpose or describes
% any piece of software unless they say so in writing. Refer to the
% GNU Emacs General Public License for full details.
%
% Permission is granted to copy, modify and redistribute this source
% file provided the copyright notice and permission notices are
% preserved on all copies.
%
% Permission is granted to process this file through TeX and print the
% results, provided the printed document carries copyright and
% permission notices identical to the ones below.
% This file is intended to be processed by plain TeX (TeX82).
%
% The final reference card has six columns, three on each side.
% This file can be used to produce it in any of three ways:
% 1 column per page
% produces six separate pages, each of which needs to be reduced to 80%.
% This gives the best resolution.
% 2 columns per page
% produces three already-reduced pages.
% You will still need to cut and paste.
% 3 columns per page
% produces two pages which must be printed sideways to make a
% ready-to-use 8.5 x 11 inch reference card.
% For this you need a dvi device driver that can print sideways.
% Which mode to use is controlled by setting \columnsperpage above.
%
% Author of Viper:
% Michael Kifer
% email: kifer@cs.sunysb.edu
%
% Author of VIP 4.3:
% Aamod Sane
% email: sane@cs.uiuc.edu
%
% Author of VIP 3.5:
% Masahiko Sato
% email: ms@sail.stanford.edu
%
% The original TeX code for formatting the reference card was written by:
% Stephen Gildea
% UUCP: mit-erl!gildea
% email: gildea@erl.mit.edu
\def\versionnumber{3.0}
\def\year{1997}
\def\version{August \year\ v\versionnumber}
\def\shortcopyrightnotice{\vskip 1ex plus 2 fill
\centerline{\small \copyright\ \year\ Free Software Foundation, Inc.
Permissions on back. v\versionnumber}}
\def\copyrightnotice{
%\vskip 1ex plus 2 fill\begingroup\small
\vskip 1ex \begingroup\small
\centerline{Copyright \copyright\ \year\ Free Software Foundation, Inc.}
\centerline{by Michael Kifer, Viper \version}
\centerline{by Aamod Sane, VIP version 4.3}
\centerline{by Masahiko Sato, VIP version 3.5}
Permission is granted to make and distribute copies of
this card provided the copyright notice and this permission notice
are preserved on all copies.
For copies of the GNU Emacs manual, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
\endgroup}
% make \bye not \outer so that the \def\bye in the \else clause below
% can be scanned without complaint.
\def\bye{\par\vfill\supereject\end}
\newdimen\intercolumnskip
\newbox\columna
\newbox\columnb
\def\ncolumns{\the\columnsperpage}
\message{[\ncolumns\space
column\if 1\ncolumns\else s\fi\space per page]}
\def\scaledmag#1{ scaled \magstep #1}
% This multi-way format was designed by Stephen Gildea
% October 1986.
% Slightly modified by Masahiko Sato, September 1987.
\if 1\ncolumns
\hsize 4in
\vsize 10in
%\voffset -.7in
\voffset -.57in
\font\titlefont=\fontname\tenbf \scaledmag3
\font\headingfont=\fontname\tenbf \scaledmag2
\font\miniheadingfont=\fontname\tenbf \scaledmag1 % masahiko
\font\smallfont=\fontname\sevenrm
\font\smallsy=\fontname\sevensy
\footline{\hss\folio}
\def\makefootline{\baselineskip10pt\hsize6.5in\line{\the\footline}}
\else
%\hsize 3.2in
%\vsize 7.95in
\hsize 3.41in % masahiko
\vsize 8in % masahiko
\hoffset -.75in
\voffset -.745in
\font\titlefont=cmbx10 \scaledmag2
\font\headingfont=cmbx10 \scaledmag1
\font\miniheadingfont=cmbx10 % masahiko
\font\smallfont=cmr6
\font\smallsy=cmsy6
\font\eightrm=cmr8
\font\eightbf=cmbx8
\font\eightit=cmti8
\font\eightsl=cmsl8
\font\eighttt=cmtt8
\font\eightsy=cmsy8
\textfont0=\eightrm
\textfont2=\eightsy
\def\rm{\eightrm}
\def\bf{\eightbf}
\def\it{\eightit}
\def\sl{\eightsl} % masahiko
\def\tt{\eighttt}
\normalbaselineskip=.8\normalbaselineskip
\normallineskip=.8\normallineskip
\normallineskiplimit=.8\normallineskiplimit
\normalbaselines\rm %make definitions take effect
\if 2\ncolumns
\let\maxcolumn=b
\footline{\hss\rm\folio\hss}
\def\makefootline{\vskip 2in \hsize=6.86in\line{\the\footline}}
\else \if 3\ncolumns
\let\maxcolumn=c
\nopagenumbers
\else
\errhelp{You must set \columnsperpage equal to 1, 2, or 3.}
\errmessage{Illegal number of columns per page}
\fi\fi
%\intercolumnskip=.46in
\intercolumnskip=.19in % masahiko .19x4 + 3.41x3 = 10.99
\def\abc{a}
\output={%
% This next line is useful when designing the layout.
%\immediate\write16{Column \folio\abc\space starts with \firstmark}
\if \maxcolumn\abc \multicolumnformat \global\def\abc{a}
\else\if a\abc
\global\setbox\columna\columnbox \global\def\abc{b}
%% in case we never use \columnb (two-column mode)
\global\setbox\columnb\hbox to -\intercolumnskip{}
\else
\global\setbox\columnb\columnbox \global\def\abc{c}\fi\fi}
\def\multicolumnformat{\shipout\vbox{\makeheadline
\hbox{\box\columna\hskip\intercolumnskip
\box\columnb\hskip\intercolumnskip\columnbox}
\makefootline}\advancepageno}
\def\columnbox{\leftline{\pagebody}}
\def\bye{\par\vfill\supereject
\if a\abc \else\null\vfill\eject\fi
\if a\abc \else\null\vfill\eject\fi
\end}
\fi
% we won't be using math mode much, so redefine some of the characters
% we might want to talk about
\catcode`\^=12
\catcode`\_=12
\chardef\\=`\\
\chardef\{=`\{
\chardef\}=`\}
\hyphenation{mini-buf-fer}
\parindent 0pt
\parskip 1ex plus .5ex minus .5ex
\def\small{\smallfont\textfont2=\smallsy\baselineskip=.8\baselineskip}
\outer\def\newcolumn{\vfill\eject}
\outer\def\title#1{{\titlefont\centerline{#1}}\vskip 1ex plus .5ex}
\outer\def\section#1{\par\filbreak
\vskip 3ex plus 2ex minus 2ex {\headingfont #1}\mark{#1}%
\vskip 2ex plus 1ex minus 1.5ex}
% masahiko
\outer\def\subsection#1{\par\filbreak
\vskip 2ex plus 2ex minus 2ex {\miniheadingfont #1}\mark{#1}%
\vskip 1ex plus 1ex minus 1.5ex}
\newdimen\keyindent
\def\beginindentedkeys{\keyindent=1em}
\def\endindentedkeys{\keyindent=0em}
\endindentedkeys
\def\paralign{\vskip\parskip\halign}
\def\<#1>{$\langle${\rm #1}$\rangle$}
\def\kbd#1{{\tt#1}\null} %\null so not an abbrev even if period follows
\def\beginexample{\par\leavevmode\begingroup
\obeylines\obeyspaces\parskip0pt\tt}
{\obeyspaces\global\let =\ }
\def\endexample{\endgroup}
\def\key#1#2{\leavevmode\hbox to \hsize{\vtop
{\hsize=.75\hsize\rightskip=1em
\hskip\keyindent\relax#1}\kbd{#2}\hfil}}
\newbox\metaxbox
\setbox\metaxbox\hbox{\kbd{M-x }}
\newdimen\metaxwidth
\metaxwidth=\wd\metaxbox
\def\metax#1#2{\leavevmode\hbox to \hsize{\hbox to .75\hsize
{\hskip\keyindent\relax#1\hfil}%
\hskip -\metaxwidth minus 1fil
\kbd{#2}\hfil}}
\def\fivecol#1#2#3#4#5{\hskip\keyindent\relax#1\hfil&\kbd{#2}\quad
&\kbd{#3}\quad&\kbd{#4}\quad&\kbd{#5}\cr}
\def\fourcol#1#2#3#4{\hskip\keyindent\relax#1\hfil&\kbd{#2}\quad
&\kbd{#3}\quad&\kbd{#4}\quad\cr}
\def\threecol#1#2#3{\hskip\keyindent\relax#1\hfil&\kbd{#2}\quad
&\kbd{#3}\quad\cr}
\def\twocol#1#2{\hskip\keyindent\relax\kbd{#1}\hfil&\kbd{#2}\quad\cr}
\def\twocolkey#1#2#3#4{\hskip\keyindent\relax#1\hfil&\kbd{#2}\quad&\relax#3\hfil&\kbd{#4}\quad\cr}
%**end of header
\beginindentedkeys
\title{ViperCard: Viper Reference Pal}
\centerline{(Version 3.0 (Polyglot) for Emacs 20 and XEmacs 20)}
%\copyrightnotice
\section{Loading Viper}
Just type \kbd{M-x viper-mode} followed by \kbd{RET}
OR put
(setq viper-mode t)
(require 'viper)
in .emacs
\section{Viper States}
Viper has four states: {\it emacs state}, {\it vi state}, {\it insert state},
{\it replace state}.
Mode line tells you which state you are in.
In emacs state you can do all the normal GNU Emacs editing.
This card explains only vi state and insert state (replace state is similar
to insert state).
{\bf GNU Emacs Reference Card} explains emacs state.
You can switch states as follows.
\key{from emacs state to vi state}{C-z}
\key{from vi state to emacs state}{C-z}
\key{from vi state to emacs state for 1 command}{$\backslash$}
\metax{from vi state to insert state}{i, I, a, A, o, O}
\metax{from vi state to replace state}{c, C, R}
\key{from insert or replace state to vi state}{ESC}
\key{from insert state to vi state for 1 command}{C-z}
\section{Insert Mode}
You can do editing in insert state.
\metax{go back to vi state}{ESC}
\metax{delete previous character}{C-h, DEL}
\key{delete previous word}{C-w}
\key{delete line word}{C-u}
\key{indent shiftwidth forward}{C-t}
\key{indent shiftwidth backward}{C-d}
\key{delete line word}{C-u}
\key{quote following character}{C-v}
\key{emulate Meta key in emacs state}{C-$\backslash$}
\key{escape to Vi state for one command}{C-z}
\vskip 2mm
{\bf The rest of this card explains commands in {\bf vi state}.}
\section{Getting Information on Viper}
Execute info command by typing \kbd{M-x info} and select menu item
\kbd{viper}. Also:
\key{describe function attached to the key {\it x}}{$\backslash$ C-h k {\it x}}
\section{Leaving Emacs}
\metax{suspend Emacs}{:st {\rm or} :su}
\metax{exit Emacs permanently}{C-xC-c}
\metax{exit current file}{:wq {\rm or} :q}
\shortcopyrightnotice
\section{Error Recovery}
\metax{abort command}{C-c (user level = 1)}
\metax{abort command}{C-g (user level > 1)}
\key{redraw messed up screen}{C-l}
\metax{{\bf recover} after system crash}{:rec file}
\metax{restore a buffer }{:e!\ {\rm or} M-x revert-buffer}
\section{Counts}
Most commands in vi state accept a {\it count} which can be supplied as a
prefix to the commands. In most cases, if a count is given, the
command is executed that many times. E.g., \kbd{5 d d} deletes 5
lines.
\section{Registers}
There are 26 registers (\kbd{a} to \kbd{z}) that can store texts
and marks.
You can append a text at the end of a register (say \kbd{x}) by
specifying the register name in capital letter (say \kbd{X}).
There are also 9 read only registers (\kbd{1} to \kbd{9}) that store
up to 9 previous changes.
We will use {\it x\/} to denote a register.
\section{Entering Insert Mode}
\key{{\bf insert} at point}{i}
\key{{\bf append} after cursor}{a}
\key{{\bf insert} before first non-white}{I}
\key{{\bf append} at end of line}{A}
\key{{\bf open} line below}{o}
\key{{\bf open} line above}{O}
\section{Buffers and Windows}
\key{move cursor to {\bf next} window}{C-x o}
\key{delete current window}{C-x 0}
\key{delete other windows}{C-x 1}
\key{split current window into two windows}{C-x 2}
\key{{\bf switch} to a buffer in the current window}{C-x {\sl buffer}}
\metax{{\bf switch} to a buffer in another window}{:n, :b, {\rm or} C-x 4 {\sl buf}}
\key{{\bf kill} a buffer}{:q! {\rm or} C-x k}
\key{list existing {\bf buffers}}{:args {\rm or} C-x b}
\section{Files}
\metax{{\bf visit} file in the current window}{v {\sl file} {\rm or} :e {\sl file}}
\key{{\bf visit} file in another window}{V {\sl file}}
\key{{\bf visit} file in another frame}{C-v {\sl file}}
\key{{\bf save} buffer to the associated file}{:w {\rm or} C-xC-s}
\metax{{\bf write} buffer to a specified file}{:w {\sl file} {\rm or} C-xC-w}
\metax{{\bf insert} a specified file at point}{:r {\sl file} {\rm or} C-xi}
\key{{\bf get} information on the current {\bf file}}{C-c g {\rm or} :f}
\key{run the {\bf directory} editor}{:e RET {\rm or} C-xd}
%\shortcopyrightnotice
\section{Viewing the Buffer}
\key{scroll to next screen}{C-f}
\key{scroll to previous screen}{C-b}
\key{scroll {\bf down} half screen}{C-d}
\key{scroll {\bf up} half screen}{C-u}
\key{scroll down one line}{C-e}
\key{scroll up one line}{C-y}
\key{put current line on the {\bf home} line}{z H {\rm or} z RET}
\key{put current line on the {\bf middle} line}{z M {\rm or} z .}
\key{put current line on the {\bf last} line}{z L {\rm or} z -}
\section{Marking and Returning}
\key{{\bf mark} point in register {\it x}}{m {\it x}}
\key{set mark at buffer beginning}{m <}
\key{set mark at buffer end}{m >}
\key{set mark at point}{m .}
\key{jump to mark}{m ,}
\key{exchange point and mark}{` `}
\key{... and skip to first non-white on line}{' '}
\key{go to mark {\it x}}{` {\it x}}
\key{... and skip to first non-white on line}{' {\it x}}
\key{view contents of marker {\it x}}{[ {\it x}}
\key{view contents of register {\it x}}{] {\it x}}
\section{Macros}
Emacs style macros:
\key{start remembering keyboard macro}{C-x (}
\key{finish remembering keyboard macro}{C-x )}
\key{call last keyboard macro}{*}
\key{start remembering keyboard macro}{@ \#}
\key{finish macro and put into register {\it x}}{@ {\it x}}
\key{execute macro stored in register {\it x}}{@ {\it x}}
\key{repeat last @{\it x} command}{@ @}
\key{Pull last macro into register {\it x}}{@ ! {\it x}}
Vi-style macros (keys to be hit in quick succession):
\key{define Vi-style macro for Vi state}{:map}
\key{define Vi-style macro for Insert state}{:map!}
\key{toggle case-sensitive search}{//}
\key{toggle regular expression search}{///}
\key{toggle `\%' to ignore parentheses inside comments}{\%\%\%}
\section{Motion Commands}
\key{go backward one character}{h {\rm or} C-h}
\key{go forward one character}{l}
\metax{next line keeping the column}{j {\rm or} LF {\rm or} C-n}
\key{previous line keeping the column}{k}
\metax{next line at first non-white}{+ {\rm or} RET {\rm or} C-p}
\key{previous line at first non-white}{-}
\key{beginning of line}{0}
\key{first non-white on line}{^}
\key{end of line}{\$}
\key{go to {\it n}-th column on line}{{\it n} |}
\key{go to {\it n}-th line}{{\it n} G}
\key{go to last line}{G}
\key{find matching parenthesis for \kbd{()}, \kbd{\{\}} and \kbd{[]}}{\%}
\key{go to {\bf home} window line}{H}
\key{go to {\bf middle} window line}{M}
\key{go to {\bf last} window line}{L}
\subsection{Words, Sentences, Paragraphs, Headings}
\key{forward {\bf word}}{w {\rm or} W}
\key{{\bf backward} word}{b {\rm or} B}
\key{{\bf end} of word}{e {\rm or} E}
In the case of capital letter commands, a word is delimited by a
non-white character.
\key{forward sentence}{)}
\key{backward sentence}{(}
\key{forward paragraph}{\}}
\key{backward paragraph}{\{}
\key{forward heading}{]]}
\key{backward heading}{[[}
\key{end of heading}{[]}
\subsection{Find Characters on the Line}
\key{{\bf find} {\it c} forward on line}{f {\it c}}
\key{{\bf find} {\it c} backward on line}{F {\it c}}
\key{up {\bf to} {\it c} forward on line}{t {\it c}}
\key{up {\bf to} {\it c} backward on line}{T {\it c}}
\key{repeat previous \kbd{f}, \kbd{F}, \kbd{t} or \kbd{T}}{;}
\key{... in the opposite direction}{,}
%\newcolumn
%\title{Viper Quick Reference Card}
\section{Searching and Replacing}
\key{search forward for {\sl pat}}{/ {\sl pat}}
\key{search backward with previous {\sl pat}}{?\ RET}
\key{search forward with previous {\sl pat}}{/ RET}
\key{search backward for {\sl pat}}{?\ {\sl pat}}
\key{repeat previous search}{n}
\key{... in the opposite direction}{N}
\key{{\bf query} replace}{Q}
\key{{\bf replace} a character by another character {\it c}}{r {\it c}}
\key{{\bf overwrite} {\it n} lines}{{\it n} R}
\metax{{\bf buffer} search (if enabled)}{g {\it move command}}
\section{Modifying Commands}
Most commands that operate on text regions accept the motion commands,
to describe regions. They also accept the Emacs region specifications
{\bf r} and {\bf R}. {\bf r} describes the region between {\it point}
and {\it mark}, and {\bf R} describes whole lines in that region.
Motion commands are classified into {\it point commands} and
{\it line commands}. In the case of line commands, whole lines will
be affected by the command.
The point commands are as follows:
\hskip 5ex
\kbd{h l 0 ^ \$ w W b B e E ( ) / ?\ ` f F t T \% ; ,}
The line commands are as follows:
\hskip 5ex
\kbd{j k + - H M L \{ \} G '}
These region specifiers will be referred to as {\it m} below.
\subsection{Delete/Yank/Change Commands}
\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\tabskip=0pt&#\cr
\fourcol{}{{\bf delete}}{{\bf yank}}{{\bf change}}
\fourcol{region determined by {\it m}}{d {\it m}}{y {\it m}}{c {\it m}}
\fourcol{... into register {\it x}}{" {\it x\/} d {\it m}}{" {\it x\/} y {\it m}}{" {\it x\/} c {\it m}}
\fourcol{a line}{d d}{Y {\rm or} y y}{c c}
\fourcol{current {\bf region}}{d r}{y r}{c r}
\fourcol{expanded {\bf region}}{d R}{y R}{c R}
\fourcol{to end of line}{D}{y \$}{c \$}
\fourcol{a character after point}{x}{y l}{c l}
\fourcol{a character before point}{DEL}{y h}{c h}
}
\vskip 2ex
\key{Overwrite {\it n} lines}{{\it n} R}
\subsection{Put Back Commands}
Deleted/yanked/changed text can be put back by the following commands.
\key{{\bf Put} back at point/above line}{P}
\key{... from register {\it x}}{" {\it x\/} P}
\key{{\bf put} back after point/below line}{p}
\key{... from register {\it x}}{" {\it x\/} p}
\subsection{Repeating and Undoing Modifications}
\key{{\bf undo} last change}{u {\rm or} :und}
\key{repeat last change}{.\ {\rm (dot)}}
Undo is undoable by \kbd{u} and repeatable by \kbd{.}.
For example, \kbd{u...} will undo 4 previous changes.
A \kbd{.} after \kbd{5dd} is equivalent to \kbd{5dd},
while \kbd{3.} after \kbd{5dd} is equivalent to \kbd{3dd}.
\section{Miscellaneous Commands}
\endindentedkeys
\paralign to \hsize{#\tabskip=5pt plus 1 fil&#\tabskip=0pt&#\tabskip=0pt&#\tabskip=0pt&#\cr
\fivecol{}{{\bf shift left}}{{\bf shift right}}{{\bf filter shell command}}{{\bf indent}}
\fivecol{region}{< {\it m}}{> {\it m}}{!\ {\it m\/} {\sl shell-com}}{= {\it m}}
\fivecol{line}{< <}{> >}{!\ !\ {\sl shell-com}}{= =}
}
\key{{\bf join} lines}{J}
\key{toggle case (takes count)}{\~{}}
\key{view register {\it x}}{] {\it x}}
\key{view marker {\it x}}{] {\it x}}
\key{lowercase region}{\# c {\it m}}
\key{uppercase region}{\# C {\it m}}
\key{execute last keyboard macro on each line in the region}{\# g {\it m}}
\key{insert specified string for each line in the region}{\# q {\it m}}
\key{check spelling of the words in the region}{\# s {\it m}}
\key{repeat previous ex substitution}{\&}
\key{change to previous file}{C-^}
\key{Viper Meta key}{_}
\section{Customization}
By default, search is case sensitive.
You can change this by including the following line in your \kbd{\~{}/.vip} file.
\hskip 5ex
\kbd{(setq viper-case-fold-search t)}
The following is a subset of the variety of
options available for customizing Viper.
See the Viper manual for details on these and other options.
\beginindentedkeys
\paralign to \hsize{#\tabskip=10pt plus 1 fil&#\tabskip=0pt&#\cr
\twocol{{\bf variable}}{{\bf default value}}
\twocol{viper-search-wrap-around}{t}
\twocol{viper-case-fold-search}{nil}
\twocol{viper-re-search}{t}
\twocol{viper-re-replace}{t}
\twocol{viper-re-query-replace}{t}
\twocol{viper-auto-indent}{nil}
\twocol{viper-shift-width}{8}
\twocol{viper-tags-file-name}{"TAGS"}
\twocol{viper-no-multiple-ESC}{t}
\twocol{viper-ex-style-motion}{t}
\twocol{viper-always}{t}
\twocol{viper-custom-file-name}{"\~{}/.vip"}
\twocol{ex-find-file-shell}{"csh"}
\twocol{ex-cycle-other-window}{t}
\twocol{ex-cycle-through-non-buffers}{t}
\twocol{blink-matching-paren}{t}
\twocol{buffer-read-only}{{\it buffer dependent}}
}
To bind keys in Vi command state, put lines like these in your
\kbd{\~{}/.vip} file:
\beginexample
(define-key viper-vi-global-user-map "\\C-v" 'scroll-down)
(define-key viper-vi-global-user-map "\\C-cm" 'smail)
\endexample
\newcolumn
\title{Ex Commands in Viper}
In vi state, an Ex command is entered by typing:
\hskip 5ex
\kbd{:\ {\sl ex-command} RET}
\section{Ex Addresses}
\paralign to \hsize{#\tabskip=5pt plus 1 fil&#\tabskip=2pt&#\tabskip=5pt plus 1 fil&#\cr
\twocolkey{current line}{.}{next line with {\sl pat}}{/ {\sl pat} /}
\twocolkey{line {\it n}}{{\it n}}{previous line with {\sl pat}}{?\ {\sl pat} ?}
\twocolkey{last line}{\$}{{\it n\/} line before {\it a}}{{\it a} - {\it n}}
\twocolkey{next line}{+}{{\it a\/} through {\it b}}{{\it a\/} , {\it b}}
\twocolkey{previous line}{-}{line marked with {\it x}}{' {\it x}}
\twocolkey{entire buffer}{\%}{previous context}{' '}
}
Addresses can be specified in front of a command.
For example,
\hskip 5ex
\kbd{:.,.+10m\$}
moves 11 lines below current line to the end of buffer.
\section{Ex Commands}
Avoid Ex text manipulation commands except substitute.
There are better VI equivalents
for all of them. Also note that all Ex commands expand \% to
current file name. To include a \% in the command, escape it with a $\backslash$.
Similarly, \# is replaced by previous file. For Viper, this is the
first file in the {\sl :args} listing for that buffer. This defaults
to the previous file in the VI sense if you have one window.
Ex commands can be made to have history. See the manual for details.
\subsection{Ex Text Commands}
\endindentedkeys
\key{mark lines matching {\sl pat} and execute {\sl cmds} on these lines}{:g /{\sl pat}/ {\sl cmds}}
\key{mark lines {\it not\/} matching {\sl pat} and execute {\sl cmds} on these lines}{:v /{\sl pat}/ {\sl cmds}}
\key{{\bf move} specified lines after {\sl addr}}{:m {\sl addr}}
\key{{\bf copy} specified lines after {\sl addr}}{:co\rm\ (or \kbd{:t})\ \sl addr}
\key{{\bf delete} specified lines [into register {\it x\/}]}{:d {\rm [{\it x\/}]}}
\key{{\bf yank} specified lines [into register {\it x\/}]}{:y {\rm [{\it x\/}]}}
\key{{\bf put} back text [from register {\it x\/}]}{:pu {\rm [{\it x\/}]}}
\key{{\bf substitute} {\sl repl} for first string on line matching {\sl pat}}{:s /{\sl pat}/{\sl repl}/}
\key{repeat last substitution}{:\&}
\key{repeat previous substitute with previous search pattern as {\sl pat}}{:\~{}}
\subsection{Ex File and Shell Commands}
\key{{\bf edit} file}{:e {\sl file}}
\key{reedit messed up current file}{:e!}
\key{edit previous file}{:e\#}
\key{{\bf read} in a file}{:r {\sl file}}
\key{{\bf read} in the output of a shell command}{:r {\sl !command}}
\key{write out specified lines into {\sl file}}{:w {\sl file}}
\key{save all modified buffers, ask confirmation}{:W {\sl file}}
\key{save all modified buffers, no confirmation}{:WW {\sl file}}
\key{write out specified lines at the end of {\sl file}}{:w>> {\sl file}}
\key{{\bf write} to the input of a shell command}{:w {\sl !command}}
\key{write out and then quit}{:wq {\sl file}}
\key{run a sub{\bf shell} in a window}{:sh}
\key{execute shell command {\sl command}}{:!\ {\sl command}}
\key{execute previous shell command with {\it args} appended}{:!! {\sl args}}
\subsection{Ex Miscellaneous Commands}
\key{define a macro {\it x} that expands to {\sl cmd}}{:map {\it x} {\sl cmd}}
\key{remove macro expansion associated with {\it x}}{:unma {\it x}}
\key{define a macro {\it x} that expands to {\sl cmd} in insert state}{:map!\ {\it x} {\sl cmd}}
\key{remove macro expansion associated with {\it x} in insert state}{:unma!\ {\it x}}
\key{print line number}{:.=}
\key{print last line number}{:=}
\key{print {\bf version} number of Viper}{:ve}
\key{shift specified lines to the right}{:>}
\key{shift specified lines to the left}{:<}
\key{{\bf join} lines}{:j}
\key{mark specified line to register {\it x}}{:k {\it x}}
\key{{\bf set} a variable's value}{:se}
\key{find first definition of {\bf tag} {\sl tag}}{:ta {\sl tag}}
\key{Current directory}{:pwd}
\copyrightnotice
\bye
% Local variables:
% compile-command: "tex viperCard"
% End:

68
man/back.texi Normal file
View file

@ -0,0 +1,68 @@
\input rotate
\font\title=ptmb at20pt
\font\body=ptmr at12pt
\font\price=ptmr at10pt
\baselineskip=13pt
\parskip=13pt
\parindent=0pt
\nopagenumbers
\hsize=7in
\vsize=9.25in
\voffset=-1in
\hoffset=-1in
\hbox to7in{%
\vbox to9.25in{
\hsize=6in
\leftskip=.75in
\rightskip=.25in
\vskip2in
\title
\hfil GNU Emacs\hfil
\body
Most of the GNU Emacs text editor is written in the programming
language called Emacs Lisp. You can write new code in Emacs Lisp and
install it as an extension to the editor. However, Emacs Lisp is more
than a mere ``extension language''; it is a full computer programming
language in its own right. You can use it as you would any other
programming language.
Because Emacs Lisp is designed for use in an editor, it has special
features for scanning and parsing text as well as features for handling
files, buffers, displays, subprocesses, and so on. Emacs Lisp is
closely integrated with the editing facilities; thus, editing commands
are functions that can also conveniently be called from Lisp programs,
and parameters for customization are ordinary Lisp variables.
This manual describes Emacs Lisp. Generally speaking, the earlier
chapters describe features of Emacs Lisp that have counterparts in
many programming languages, and later chapters describe features that
are peculiar to Emacs Lisp or relate specifically to editing.
\vfil
\leftskip=0pt
\rightskip=0pt
\parfillskip=0pt\hfil%
ISBN-1-882114-04-3
\vskip.5in
}%
\setbox0=\vbox to1in{
\vfil\hskip.5in
{\price FSF $\bullet$ US\$25.00 $\bullet$ Printed in USA}
\vskip.5in
}%
\rotl0%
}
\eject\bye