This commit is contained in:
Stefan Monnier 2005-06-03 14:45:09 +00:00
parent 14cb9d7b6a
commit f0801847d3
2355 changed files with 240 additions and 2229652 deletions

View file

@ -1,7 +0,0 @@
# Generated files
precious ^(config\.status|config\.cache)$
# Install-in-place makes these directories, so just ignore them
backup ^(bin|data|lock|site-lisp)$
# arch-tag: 6eeeaa4e-cc7e-4b22-b3d7-1089e155da14

44
.gitignore vendored
View file

@ -1,44 +0,0 @@
# CVS default ignores begin
tags
TAGS
.make.state
.nse_depinfo
*~
#*
.#*
,*
_$*
*$
*.old
*.bak
*.BAK
*.orig
*.rej
.del-*
*.a
*.olb
*.o
*.obj
*.so
*.exe
*.Z
*.elc
*.ln
core
# CVS default ignores end
*.xdelta
.DS_Store
.arch-inventory
Makefile
autom4te.cache
bin
boot.log
boot.log.diff
boot.log.old
config.cache
config.log
config.status
configure
emacs*.tar.gz
leim*.tar.gz
update.log

1922
AUTHORS

File diff suppressed because it is too large Load diff

26
BUGS
View file

@ -1,26 +0,0 @@
If you think you may have found a bug in GNU Emacs, please
read the Bugs section of the Emacs manual for advice on
(1) how to tell when to report a bug, and
(2) how to write a useful bug report and what information
it needs to have.
There are three ways to read the Bugs section.
(1) In a printed copy of the Emacs manual.
You can order one from the Free Software Foundation;
see the file etc/ORDERS. But if you don't have a copy on
hand and you think you have found a bug, you shouldn't wait
to get a printed manual; you should read the section right away
as described below.
(2) With Info. Start Emacs, do C-h i to enter Info,
then m Emacs RET to get to the Emacs manual, then m Bugs RET
to get to the section on bugs. Or use standalone Info in
a like manner. (Standalone Info is part of the Texinfo distribution,
not part of the Emacs distribution.)
(3) By hand. Do
cat info/emacs* | more "+/^File: emacs, Node: Bugs,"
Please first check the file etc/PROBLEMS (e.g. with C-h C-e in Emacs) to
make sure it isn't a known issue.

340
COPYING
View file

@ -1,340 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

6030
ChangeLog

File diff suppressed because it is too large Load diff

234
FTP
View file

@ -1,234 +0,0 @@
-*- text -*-
How to get GNU Software by Internet FTP or by UUCP. Last updated 1999-01-20
* Please send improvements to this file to gnu@gnu.org.
* No Warranties
We distribute software in the hope that it will be useful, but without
any warranty. No author or distributor of this software accepts
responsibility to anyone for the consequences of using it or for
whether it serves any particular purpose or works at all, unless he
says so in writing. This is exactly the same warranty that the proprietary
software companies offer: None. If the distribution is incomplete or the
media fails, you can always download a replacement from any of the GNU
mirrors, free of charge.
* Updates
You can always find the most recent version of this list of GNU FTP sites at
http://www.gnu.org/order/ftp.html
* How to FTP
Use the ftp program on your system (ask locally if you can't find it)
to connect to the host you are ftping from. Unless indicated
otherwise, login in as user "anonymous", with password: "your e-mail
address" and set "binary" mode (to transfer all eight bits in each
byte).
ALWAYS USE BINARY/IMAGE MODE TO TRANSFER THESE FILES!
Text mode does not work for tar files or compressed files.
* GNU Software and How To FTP It
GNU software is available on ftp.gnu.org under the directory /gnu.
diff files to convert between versions exist for some of these
programs. Some programs have misc support files as well. Have a look
on ftp.gnu.org to see which ones. In most cases, the tar or diff
files are compressed with the `gzip' program; this is indicated with
the .gz suffix. Binaries for gzip can be downloaded from
http://www.gzip.org.
Descriptions of GNU software are available at
http://www.gnu.org/software/software.html
and in the Free Software Directory at
http://www.gnu.org/directory/index.html
* Alternative Internet FTP Sources
The canonical GNU ftp site is located at ftp.gnu.org/gnu.
You should probably use one of the many mirrors of that site - the
mirrors will be less busy, and you can find one closer to your site.
* GNU FTP Site Mirror List
United States:
California - mirrors.kernel.org/gnu, http://mirrors.kernel.org/gnu
California - gatekeeper.dec.com/pub/GNU/
California - ftp.keystealth.org/pub/gnu/
Illinois - uiarchive.cso.uiuc.edu/pub/ftp/ftp.gnu.org/gnu/
Indiana - ftp.in-span.net/pub/mirrors/ftp.gnu.org/
Kentucky - gnu.ms.uky.edu/pub/mirrors/gnu/
Maryland - ftp.digex.net/pub/gnu/
Massachusetts - aeneas.mit.edu/pub/gnu/
Michigan - ftp.egr.msu.edu/pub/gnu/, http://ftp.egr.msu.edu/pub/gnu/
Michigan - ftp.wayne.edu/gnu_mirror/
Missouri - wuarchive.wustl.edu/systems/gnu/
New Jersey - gnu.teleglobe.net/ftp.gnu.org/
New York - ftp.cs.columbia.edu/archives/gnu/prep/
New York - ftp.ece.cornell.edu/pub/mirrors/gnu/
North Carolina - http://www.ibiblio.org/pub/gnu/
Ohio - ftp.cis.ohio-state.edu/mirror/gnu/
Pennsylvania - boron.club.cc.cmu.edu/gnu/
Tennessee - sunsite.utk.edu/pub/gnu/ftp/, thales.memphis.edu/pub/gnu/
Washington - ftp.nodomainname.net/pub/mirrors/gnu/, gnu.wwc.edu/
Wisconsin - ftp.twtelecom.net/pub/GNU/
Africa:
South Africa - ftp.sun.ac.za/mirrorsites/ftp.gnu.org/pub/gnu
The Americas:
Brazil - ftp.unicamp.br/pub/gnu/
Brazil - master.softaplic.com.br/pub/gnu/
Brazil - ftp.matrix.com.br/pub/gnu/
Canada - ftp.cs.ubc.ca/mirror2/gnu/
Chile - ftp.inf.utfsm.cl/pub/gnu/
Costa Rica - sunsite.ulatina.ac.cr/Mirrors/GNU/
Mexico - www.gnu.unam.mx/pub/gnu/software/
Mexico - gnu.cem.itesm.mx/pub/mirrors/gnu.org/
Mexico - ftp.azc.uam.mx/mirrors/gnu/
Australia:
Australia - mirror.aarnet.edu.au/pub/gnu/
Australia - gnu.mirror.pacific.net.au/gnu/
Asia:
China - ftp.sea9.com/pub/gnu/
China - ftp.cs.cuhk.edu.hk/pub/gnu/gnu/
China - sunsite.ust.hk/pub/gnu/
China - ftp.shellhung.org/pub/gnu/
India - ftp.kernel.org.in/gnu.org/
India - http://kernel.org.in/mirrors/gnu.org/
India - www.imtech.res.in/mirror/gnuftp/
Indonesia - sapi.vlsm.org/gnu
Indonesia - http://sapi.vlsm.org/gnu/
Israel - ftp.cs.huji.ac.il/mirror/GNU
Japan - tron.um.u-tokyo.ac.jp/pub/GNU/prep/
Japan - core.ring.gr.jp/pub/GNU/
Japan - ftp.ring.gr.jp/pub/GNU/
Japan - mirrors.hbi.co.jp/gnu/
Japan - ftp.ayamura.org/pub/gnu/
Korea - cair-archive.kaist.ac.kr/pub/gnu/ (Internet address 143.248.186.3)
Korea - ftpmirror.hanyang.ac.kr/GNU/
Korea - ftp.linux.sarang.net/mirror/gnu/gnu/ (also mirrors alpha.gnu.org/gnu/ at ../alpha/)
Korea - ftp.xgate.co.kr/pub/mirror/gnu/
Saudi Arabia - ftp.isu.net.sa/pub/gnu/
Taiwan - ftp.nctu.edu.tw/UNIX/gnu/, coda.nctu.edu.tw/UNIX/gnu/
Taiwan - ftp1.sinica.edu.tw/pub3/GNU/gnu/
Thailand - ftp.nectec.or.th/pub/mirrors/gnu/
Europe:
Austria - ftp.gnu.vbs.at/
Austria - ftp.univie.ac.at/packages/gnu/
Austria - gd.tuwien.ac.at/gnu/gnusrc/
Austria - http://gd.tuwien.ac.at/gnu/gnusrc/
Czech Republic - ftp.fi.muni.cz/pub/gnu/
Denmark - ftp.denet.dk/mirror/ftp.gnu.org/pub/gnu
Denmark - ftp.dkuug.dk/pub/gnu/
Denmark - sunsite.dk/mirrors/gnu, http://mirrors.sunsite.dk/gnu
Finland - ftp.funet.fi/pub/gnu/prep/
France - ftp.irisa.fr/pub/gnu/
France - ftp.medasys-digital-systems.fr/pub/gnu/
France - ftp.cs.univ-paris8.fr/mirrors/ftp.gnu.org/
Germany - ftp.cs.tu-berlin.de/pub/gnu/
Germany - ftp.fh-worms.de/pub/mirror/ftp.gnu.org/
Germany - ftp.leo.org/pub/comp/os/unix/gnu/
Germany - ftp.informatik.rwth-aachen.de/pub/gnu/
Germany - ftp.de.uu.net/pub/gnu/
Germany - ftp.freenet.de/pub/ftp.gnu.org/gnu/
Germany - ftp.cs.uni-bonn.de/pub/gnu/
Germany - ftp-stud.fht-esslingen.de/pub/Mirrors/ftp.gnu.org/
Germany - http://ftp-stud.fht-esslingen.de/pub/Mirrors/ftp.gnu.org/
Germany - ftp.stw-bonn.de/pub/mirror/ftp.gnu.org/
Greece - ftp.forthnet.gr/pub/gnu/
Greece - ftp.ntua.gr/pub/gnu/
Greece - ftp.duth.gr/pub/gnu/
Greece - ftp.physics.auth.gr/pub/gnu/
Ireland - ftp.esat.net/pub/gnu/ (Internet address 193.120.14.241)
Italy - ftp.oasi.gpa.it/pub/gnu/
Italy - ftp.lugroma2.org/pub/gnu/
Netherlands - ftp.nluug.nl/pub/gnu/
Netherlands - ftp.mirror.nl/pub/mirror/gnu/
Netherlands - ftp.nl.uu.net/pub/gnu/
Netherlands - mirror.widexs.nl/pub/gnu/
Norway - ftp.gnu.no/
Poland - sunsite.icm.edu.pl/pub/gnu/
Portugal - ftp.ist.utl.pt/pub/GNU/gnu/
Romania - ftp.timisoara.roedu.net/mirrors/ftp.gnu.org/pub/gnu
Russia - ftp.chg.ru/pub/gnu/
Slovenia - ftp.arnes.si/software/gnu/
Spain - ftp.etsimo.uniovi.es/pub/gnu/
Spain - ftp.rediris.es/pub/gnu/
Sweden - ftp.isy.liu.se/pub/gnu/
Sweden - ftp.stacken.kth.se/pub/gnu/
Sweden - ftp.sunet.se/pub/gnu/; also mirrors /non-gnu
Sweden - ftp.chl.chalmers.se/pub/gnu/
Switzerland - sunsite.cnlab-switch.ch/mirror/gnu/
Ukraine - mirddin.farlep.net/pub/GNU/
United Kingdom - ftp.mcc.ac.uk/pub/gnu/
United Kingdom - ftp.mirror.ac.uk/sites/ftp.gnu.org/pub/gnu/
United Kingdom - ftp.warwick.ac.uk/pub/gnu/ (Internet address 137.205.192.13)
United Kingdom - ftp.hands.com/ftp.gnu.org/
United Kingdom - gnu.teleglobe.net/ftp.gnu.org/
* How to FTP GNU Emacs
Emacs is in the directory /gnu/emacs on ftp.gnu.org. The emacs
distribution itself has a filename in the form emacs-M.N.tar.gz, where
M and N stand for the version numbers; the Emacs Lisp Reference Manual
is in a separate file, named elisp-manual-NN.tar.gz.
* Scheme and How to FTP It
The latest distribution version of C Scheme is available via anonymous FTP
from swiss-ftp.ai.mit.edu in /pub/scheme-X.X/ (where X.X is some version
number).
Read the files INSTALL and README in the top level C Scheme directory.
* TeX and How to Obtain It
We don't distribute TeX now, but it is free software.
TeX is a document formatter that is used, among other things, by the FSF
for all its documentation. You will need it if you want to make printed
manuals.
TeX is freely redistributable. You can get it by ftp, tape, or CD/ROM.
** For FTP instructions, retrieve the file
ftp.cs.umb.edu/pub/tex/unixtex.ftp. (We don't include it here because it
changes relatively frequently. Sorry.)
** A minimal TeX collection (enough to process Texinfo files, anyway)
is included on the GNU source CD-ROM. See the file ORDERS in this
directory for more information.
* GNU Software for VMS
- ftp.vms.stacken.kth.se/MIRRORS/GNU-VMS/- lots of GNU ports to VMS,
including Emacs 19, GCC, Bison, Make, RCS.
* If You Like The Software
If you like the software developed and distributed by the Free
Software Foundation, please express your satisfaction with a donation.
Your donations will help to support the Foundation and make our future
efforts successful. The Foundation continues to improve GNU programs
and encourage the writing of new free software to enhance GNU/Linux
and GNU/Hurd systems. For more information on GNU and the Foundation,
see our web site at http://www.gnu.org.
Ordering a GNU Source Code CD-ROM or Source Code CD-ROM Subscription
is a good way for your organization to help support our work. You can
also purchase printed manuals, reference cards, t-shirts, and other
items. See our online ordering form at http://order.fsf.org for
details.

904
INSTALL
View file

@ -1,904 +0,0 @@
GNU Emacs Installation Guide
Copyright (c) 1992, 94, 96, 97, 2000, 01, 02 Free software Foundation, Inc.
See the end of the file for copying permissions.
BASIC INSTALLATION
The simplest way to build Emacs is to use the `configure' shell script
which attempts to guess correct values for various system-dependent
variables and features and find the directories where various system
headers and libraries are kept. It then creates a `Makefile' in each
subdirectory and a `config.h' file containing system-dependent
definitions. Running the `make' utility then builds the package for
your system.
Here's the procedure to build Emacs using `configure' on systems which
are supported by it. If this simplified procedure fails, or if you
are using a platform such as MS-Windows, where `configure' script
doesn't work, you might need to use various non-default options, and
maybe perform some of the steps manually. The more detailed
description in the rest of the sections of this guide will help you do
that, so please refer to them if the simple procedure does not work.
1. Make sure your system has at least 120 MB of free disk space.
2a. `cd' to the directory where you unpacked Emacs and invoke the
`configure' script:
./configure
2b. Alternatively, create a separate directory, outside the source
directory, where you want to build Emacs, and invoke `configure'
from there:
SOURCE-DIR/configure
where SOURCE-DIR is the top-level Emacs source directory. This
may not work unless you use GNU make.
3. When `configure' finishes, it prints several lines of details
about the system configuration. Read those details carefully
looking for anything suspicious, such as wrong CPU and operating
system names, wrong places for headers or libraries, missing
libraries that you know are installed on your system, etc.
If you find anything wrong, you will have to pass to `configure'
explicit machine configuration name, and one or more options
which tell it where to find various headers and libraries; refer
to DETAILED BUILDING AND INSTALLATION section below.
If `configure' didn't find some image support libraries, such as
Xpm, jpeg, etc., and you want to use them refer to the subsection
"Image support libraries", below.
If the details printed by `configure' don't make any sense to
you, assume that `configure' did its job and proceed.
4. If you need to run the `configure' script more than once (e.g.,
with some non-default options), always clean the source
directories before running `configure' again:
make distclean
./configure
5. Invoke the `make' program:
make
6. If `make' succeeds, it will build an executable program `emacs'
in the `src' directory. You can try this program, to make sure
it works:
src/emacs -q
7. Assuming that the program `src/emacs' starts and displays its
opening screen, you can install the program and its auxiliary
files into their installation directories:
make install
You are now ready to use Emacs. If you wish to conserve disk space,
you may remove the program binaries and object files from the
directory where you built Emacs:
make clean
You can also save some space by compressing (with `gzip') Info files
and installed Lisp source (.el) files which have corresponding .elc
versions.
ADDITIONAL DISTRIBUTION FILES
* intlfonts-VERSION.tar.gz
The intlfonts distribution contains X11 fonts in various encodings
that Emacs can use to display international characters. If you see a
non-ASCII character appear as a hollow box, that means you don't have
a font for it. You might find one in the intlfonts distribution. If
you do have a font for a non-ASCII character, but some characters
don't look right, or appear improperly aligned, a font from the
intlfonts distribution might look better.
The fonts in the intlfonts distribution are also used by the ps-print
package for printing international characters. The file
lisp/ps-mule.el defines the *.bdf font files required for printing
each character set.
The intlfonts distribution contains its own installation instructions,
in the intlfonts/README file.
* Image support libraries
Emacs needs optional libraries to be able to display images (with the
exception of PBM and XBM images whose support is built-in).
On some systems, particularly on GNU/Linux, these libraries may
already be present or available as additional packages. Note that if
there is a separate `dev' or `devel' package, for use at compilation
time rather than run time, you will need that as well as the
corresponding run time package; typically the dev package will
contain header files and a library archive. Otherwise, you can
download and build libraries from sources. None of them are vital for
running Emacs; however, note that Emacs will not be able to use
colored icons in the toolbar if XPM support is not compiled in.
Here's the list of these optional libraries, and the URLs where they
can be found:
. libXaw3d for fancy 3D-style
scroll bars: ftp://ftp.x.org/contrib/widgets/Xaw3d/
. libxpm for XPM: ftp://ftp.x.org/contrib/libraries/
Get version 3.4k or later, which lets Emacs
use its own color allocation functions.
. libpng for PNG: ftp://www.libpng.org/pub/png/
. libz (for PNG): http://www.info-zip.org/pub/infozip/zlib/
. libjpeg for JPEG: ftp://ftp.uu.net/graphics/jpeg/
Get version 6b -- 6a is reported to fail in
Emacs.
. libtiff for TIFF: http://www.libtiff.org/
. libungif for GIF:
http://prtr-13.ucsc.edu/~badger/software/libungif/index.shtml
Ensure you get version 4.1.0b1 or higher of libungif -- a bug in
4.1.0 can crash Emacs.
Emacs will configure itself to build with these libraries if the
`configure' script finds them on your system, unless you supply the
appropriate --without-LIB option. In some cases, older versions of
these libraries won't work because some routines are missing, and
configure should avoid such old versions. If that happens, use the
--without-LIB options to `configure'. See below for more details.
* Extra fonts
At first, Emacs does not include fonts and does not install them. You
must do this yourself.
To take proper advantage of Emacs 21's mule-unicode charsets, you need
a suitable font. For `Unicode' (ISO 10646) fonts for X, see
<URL:http://dvdeug.dhis.org/unifont.html> (packaged in Debian),
<URL:http://openlab.ring.gr.jp/efont/> (packaged in Debian). (In
recent Debian versions, there is an extensive `misc-fixed' iso10646-1
in the default X installation.) Perhaps also see
<URL:http://www.cl.cam.ac.uk/%7Emgk25/ucs-fonts.html>.
<URL:http://czyborra.com/charsets/> has basic fonts for Emacs's
ISO-8859 charsets.
XFree86 release 4 (from <URL:ftp://ftp.xfree86.org/> and mirrors)
contains font support for most, if not all, of the charsets that Emacs
currently supports, including iso10646-1 encoded fonts for use with
the mule-unicode charsets. The font files should also be usable with
older X releases. Note that XFree 4 contains many iso10646-1 fonts
with minimal character repertoires, which can cause problems -- see
etc/PROBLEMS.
BDF fonts etl-unicode.tar.gz used by ps-print and ps-mule to print
Unicode characters are available from <URL:ftp://ftp.x.org/contrib/fonts/>
and <URL:ftp://ftp.xfree86.org/pub/X.Org/contrib/fonts/>.
* GNU/Linux development packages
Many GNU/Linux systems do not come with development packages by
default; they just include the files that you need to run Emacs, but
not those you need to compile it. For example, to compile Emacs with
X11 support, you may need to install the special `X11 development'
package. For example, in April 2003, the package names to install
were `XFree86-devel' and `Xaw3d-devel' on RedHat. On Debian, the
packages necessary to build the installed version should be
sufficient; they can be installed using `apt-get build-dep emacs21' in
Debian 3 and above.
DETAILED BUILDING AND INSTALLATION:
(This is for a Unix or Unix-like system. For MS-DOS and Windows 3.X,
see below; search for MSDOG. For Windows 9X, Windows ME, Windows NT,
and Windows 2000, see the file nt/INSTALL. For the Mac, see the file
mac/INSTALL.)
1) Make sure your system has enough swapping space allocated to handle
a program whose pure code is 1.5 MB and whose data area is at
least 2.8 MB and can reach 100 MB or more. If the swapping space is
insufficient, you will get an error in the command `temacs -batch -l
loadup dump', found in `./src/Makefile.in', or possibly when
running the final dumped Emacs.
Building Emacs requires about 140 MB of disk space (including the
Emacs sources) Once installed, Emacs occupies about 77 MB in the file
system where it is installed; this includes the executable files, Lisp
libraries, miscellaneous data files, and on-line documentation. If
the building and installation take place in different directories,
then the installation procedure momentarily requires 140+77 MB.
2) Consult `./etc/MACHINES' to see what configuration name you should
give to the `configure' program. That file offers hints for
getting around some possible installation problems. The file lists
many different configurations, but only the part for your machine and
operating system is relevant. (The list is arranged in alphabetical
order by the vendor name.)
3) You can build Emacs in the top-level Emacs source directory
or in a separate directory.
3a) To build in the top-level Emacs source directory, go to that
directory and run the program `configure' as follows:
./configure [CONFIGURATION-NAME] [--OPTION[=VALUE]] ...
The CONFIGURATION-NAME argument should be a configuration name given
in `./etc/MACHINES', with the system version number added at the end.
You should try first omitting CONFIGURATION-NAME. This way,
`configure' will try to guess your system type. If it cannot guess,
or if something goes wrong in building or installing Emacs this way,
try again specifying the proper CONFIGURATION-NAME explicitly.
If you don't want X support, specify `--with-x=no'. If you omit this
option, `configure' will try to figure out for itself whether your
system has X, and arrange to use it if present.
The `--x-includes=DIR' and `--x-libraries=DIR' options tell the build
process where the compiler should look for the include files and
object libraries used with the X Window System. Normally, `configure'
is able to find them; these options are necessary if you have your X
Window System files installed in unusual places. These options also
accept a list of directories, separated with colons.
To get more attractive menus, you can specify an X toolkit when you
configure Emacs; use the option `--with-x-toolkit=TOOLKIT', where
TOOLKIT is `athena', `motif' or `gtk' (`yes' and `lucid' are synonyms for
`athena'). On some systems, it does not work to use a toolkit with
shared libraries. A free implementation of Motif, called LessTif, is
available ftom <http://www.lesstif.org>. Compiling with LessTif or
Motif causes a standard File Selection Dialog to pop up when you type
"C-x C-f" and similar commands. You can get fancy 3D-style scroll
bars, even without LessTif/Motif, if you have the Xaw3d library
installed (see "Image support libraries" above for Xaw3d
availability).
If `--with-x-toolkit=gtk' is specified, you can tell configure where
to search for GTK by specifying `--with-pkg-config-prog=PATH' where
PATH is the pathname to pkg-config. Note that GTK version 2.0 or
newer is required for Emacs.
The `--with-gcc' option specifies that the build process should
compile Emacs using GCC. If you don't want to use GCC, specify
`--with-gcc=no'. If you omit this option, `configure' will search
for GCC in your path, and use it if present.
The Emacs mail reader RMAIL is configured to be able to read mail from
a POP3 server by default. Versions of the POP protocol older than
POP3 are not supported. For Kerberos-authenticated POP add
`--with-kerberos', for Hesiod support add `--with-hesiod'. While POP3
is always enabled, whether Emacs actually uses POP is controlled by
individual users--see the Rmail chapter of the Emacs manual.
For image support you may have to download, build, and install the
appropriate image support libraries for image types other than XBM and
PBM, see the list of URLs in "ADDITIONAL DISTRIBUTION FILES" above.
(Note that PNG support requires libz in addition to libpng.)
To disable individual types of image support in Emacs for some reason,
even though configure finds the libraries, you can configure with one
or more of these options:
--without-xpm for XPM image support
--without-jpeg for JPEG image support
--without-tiff for TIFF image support
--without-gif for GIF image support
--without-png for PNG image support
Use --without-toolkit-scroll-bars to disable LessTif/Motif or Xaw3d
scroll bars.
Use --without-xim to inhibit the default use of X Input Methods. In
this case, the X resource useXIM can be used to turn on use of XIM.
Use --disable-largefile omits support for files larger than 2GB on
systems which support that.
Use --without-sound to disable sound support.
The `--prefix=PREFIXDIR' option specifies where the installation process
should put emacs and its data files. This defaults to `/usr/local'.
- Emacs (and the other utilities users run) go in PREFIXDIR/bin
(unless the `--exec-prefix' option says otherwise).
- The architecture-independent files go in PREFIXDIR/share/emacs/VERSION
(where VERSION is the version number of Emacs, like `19.27').
- The architecture-dependent files go in
PREFIXDIR/libexec/emacs/VERSION/CONFIGURATION
(where CONFIGURATION is the configuration name, like mips-dec-ultrix4.2),
unless the `--exec-prefix' option says otherwise.
The `--exec-prefix=EXECDIR' option allows you to specify a separate
portion of the directory tree for installing architecture-specific
files, like executables and utility programs. If specified,
- Emacs (and the other utilities users run) go in EXECDIR/bin, and
- The architecture-dependent files go in
EXECDIR/libexec/emacs/VERSION/CONFIGURATION.
EXECDIR/bin should be a directory that is normally in users' PATHs.
For example, the command
./configure mips-dec-ultrix --with-x11
configures Emacs to build for a DECstation running Ultrix, with
support for the X11 window system.
`configure' doesn't do any compilation or installation
itself. It just creates the files that influence those things:
`./Makefile', `lib-src/Makefile', `oldXMenu/Makefile',
`lwlib/Makefile', `src/Makefile', and `./src/config.h'. For details
on exactly what it does, see the section called `CONFIGURATION BY
HAND', below.
When it is done, `configure' prints a description of what it did and
creates a shell script `config.status' which, when run, recreates the
same configuration. If `configure' exits with an error after
disturbing the status quo, it removes `config.status'. `configure'
also creates a file `config.cache' that saves the results of its tests
to make reconfiguring faster, and a file `config.log' containing compiler
output (useful mainly for debugging `configure'). You can give
`configure' the option `--cache-file=FILE' to use the results of the
tests in FILE instead of `config.cache'. Set FILE to `/dev/null' to
disable caching, for debugging `configure'.
If the description of the system configuration printed by `configure'
is not right, or if it claims some of the fatures or libraries are not
available when you know they are, look at the `config.log' file for
the trace of the failed tests performed by `configure' to check
whether these features are supported. Typically, some test fails
because the compiler cannot find some function in the system
libraries, or some macro-processor definition in the system headers.
Some tests might fail because the compiler should look in special
directories for some header files, or link against optional
libraries, or use special compilation options. You can force
`configure' and the build process which follows it to do that by
setting the variables CPPFLAGS, CFLAGS, LDFLAGS, LIBS, and CC before
running `configure'. CPPFLAGS lists the options passed to the
preprocessor, CFLAGS are compilation options, LDFLAGS are options used
when linking, LIBS are libraries to link against, and CC is the
command which invokes the compiler.
Here's an example of a `configure' invocation, assuming a Bourne-like
shell such as Bash, which uses these variables:
CPPFLAGS='-I/foo/myinclude' LDFLAGS='-L/bar/mylib' \
CFLAGS='-O3' LIBS='-lfoo -lbar' ./configure
(this is all one long line). This tells `configure' to instruct the
preprocessor to look in the `/foo/myinclude' directory for header
files (in addition to the standard directories), instruct the linker
to look in `/bar/mylib' for libraries, pass the -O3 optimization
switch to the compiler, and link against libfoo.a and libbar.a
libraries in addition to the standard ones.
The work of `configure' can be done by editing various files in the
distribution, but using `configure' is easier. See the section called
"CONFIGURATION BY HAND" below if you want to do the configuration
yourself.
3b) To build in a separate directory, go to that directory
and run the program `configure' as follows:
SOURCE-DIR/configure CONFIGURATION-NAME [--OPTION[=VALUE]] ...
SOURCE-DIR refers to the top-level Emacs source directory which is
where Emacs's configure script is located. `configure' looks for the
Emacs source code in the directory that `configure' is in.
To build in a separate directory, you must use a version of `make'
that supports the `VPATH' variable, such as GNU `make'.
3c) Some people try to build in a separate directory by filling
it full of symlinks to the files in the real source directory.
If you do that, `make all' does work, but `make install' fails:
it copies the symbolic links rather than the actual files.
As far as is known, there is no particular reason to use
a directory full of links rather than use the standard GNU
facilities to build in a separate directory (see 3b above).
4) Look at `./lisp/paths.el'; if some of those values are not right
for your system, set up the file `./lisp/site-init.el' with Emacs
Lisp code to override them; it is not a good idea to edit paths.el
itself. YOU MUST USE THE LISP FUNCTION `setq' TO ASSIGN VALUES,
rather than `defvar', as used by `./lisp/paths.el'. For example,
(setq news-inews-program "/usr/bin/inews")
is how you would override the default value of the variable
news-inews-program (which is "/usr/local/inews").
Before you override a variable this way, *look at the value* that the
variable gets by default! Make sure you know what kind of value the
variable should have. If you don't pay attention to what you are
doing, you'll make a mistake.
5) Put into `./lisp/site-init.el' or `./lisp/site-load.el' any Emacs
Lisp code you want Emacs to load before it is dumped out. Use
site-load.el for additional libraries if you arrange for their
documentation strings to be in the etc/DOC file (see
src/Makefile.in if you wish to figure out how to do that). For all
else, use site-init.el. Do not load byte-compiled code which
was build with a non-nil value of `byte-compile-dynamic'.
If you set load-path to a different value in site-init.el or
site-load.el, Emacs will use *precisely* that value when it starts up
again. If you do this, you are on your own!
Note that, on some systems, the code you place in site-init.el must
not use expand-file-name or any other function which may look
something up in the system's password and user information database.
See `./etc/PROBLEMS' for more details on which systems this affects.
The `site-*.el' files are nonexistent in the distribution. You do not
need to create them if you have nothing to put in them.
6) Refer to the file `./etc/TERMS' for information on fields you may
wish to add to various termcap entries. The files `./etc/termcap.ucb'
and `./etc/termcap.dat' may already contain appropriately-modified
entries.
7) Run `make' in the top directory of the Emacs distribution to finish
building Emacs in the standard way. The final executable file is
named `src/emacs'. You can execute this file "in place" without
copying it, if you wish; then it automatically uses the sibling
directories ../lisp, ../lib-src, ../info.
Or you can "install" the executable and the other Emacs into their
installed locations, with `make install'. By default, Emacs's files
are installed in the following directories:
`/usr/local/bin' holds the executable programs users normally run -
`emacs', `etags', `ctags', `b2m', `emacsclient',
and `rcs-checkin'.
`/usr/local/share/emacs/VERSION/lisp' holds the Emacs Lisp library;
`VERSION' stands for the number of the Emacs version
you are installing, like `18.59' or `19.27'. Since the
Lisp library changes from one version of Emacs to
another, including the version number in the path
allows you to have several versions of Emacs installed
at the same time; in particular, you don't have to
make Emacs unavailable while installing a new version.
`/usr/local/share/emacs/VERSION/etc' holds the Emacs tutorial, the DOC
file, the `yow' database, and other
architecture-independent files Emacs might need while
running. VERSION is as specified for `.../lisp'.
`/usr/local/libexec/emacs/VERSION/CONFIGURATION-NAME' contains executable
programs used by Emacs that users are not expected to
run themselves.
`VERSION' is the number of the Emacs version you are
installing, and `CONFIGURATION-NAME' is the argument
you gave to the `configure' program to identify the
architecture and operating system of your machine,
like `mips-dec-ultrix' or `sparc-sun-sunos'. Since
these files are specific to the version of Emacs,
operating system, and architecture in use, including
the configuration name in the path allows you to have
several versions of Emacs for any mix of machines and
operating systems installed at the same time; this is
useful for sites at which different kinds of machines
share the file system Emacs is installed on.
`/usr/local/info' holds the on-line documentation for Emacs, known as
"info files". Many other GNU programs are documented
using info files as well, so this directory stands
apart from the other, Emacs-specific directories.
`/usr/local/man/man1' holds the man pages for the programs installed
in `/usr/local/bin'.
Any version of Emacs, whether installed or not, also looks for Lisp
files in these directories.
`/usr/local/share/emacs/VERSION/site-lisp' holds the local Emacs Lisp
files installed for Emacs version VERSION only.
`/usr/local/share/emacs/site-lisp' holds the local Emacs Lisp
files installed for all Emacs versions.
When Emacs is installed, it searches for its Lisp files
in `/usr/local/share/emacs/VERSION/site-lisp', then in
`/usr/local/share/emacs/site-lisp', and finally in
`/usr/local/share/emacs/VERSION/lisp'.
If these directories are not what you want, you can specify where to
install Emacs's libraries and data files or where Emacs should search
for its Lisp files by giving values for `make' variables as part of
the command. See the section below called `MAKE VARIABLES' for more
information on this.
8) Check the file `dir' in your site's info directory (usually
/usr/local/info) to make sure that it has a menu entry for the Emacs
info files.
9) If your system uses lock files to interlock access to mailer inbox files,
then you might need to make the movemail program setuid or setgid
to enable it to write the lock files. We believe this is safe.
10) You are done! You can remove executables and object files from
the build directory by typing `make clean'. To also remove the files
that `configure' created (so you can compile Emacs for a different
configuration), type `make distclean'. If you don't need some, or all
of the input methods from the Leim package, you can remove the
unneeded files in the leim subdirectories of your site's lisp
directory (usually /usr/local/share/emacs/VERSION/).
MAKE VARIABLES
You can change where the build process installs Emacs and its data
files by specifying values for `make' variables as part of the `make'
command line. For example, if you type
make install bindir=/usr/local/gnubin
the `bindir=/usr/local/gnubin' argument indicates that the Emacs
executable files should go in `/usr/local/gnubin', not
`/usr/local/bin'.
Here is a complete list of the variables you may want to set.
`bindir' indicates where to put executable programs that users can
run. This defaults to /usr/local/bin.
`datadir' indicates where to put the architecture-independent
read-only data files that Emacs refers to while it runs; it
defaults to /usr/local/share. We create the following
subdirectories under `datadir':
- `emacs/VERSION/lisp', containing the Emacs Lisp library, and
- `emacs/VERSION/etc', containing the Emacs tutorial, the DOC
file, and the `yow' database.
`VERSION' is the number of the Emacs version you are installing,
like `18.59' or `19.0'. Since these files vary from one version
of Emacs to another, including the version number in the path
allows you to have several versions of Emacs installed at the
same time; this means that you don't have to make Emacs
unavailable while installing a new version.
`libexecdir' indicates where to put architecture-specific data files that
Emacs refers to as it runs; it defaults to `/usr/local/libexec'.
We create the following subdirectories under `libexecdir':
- `emacs/VERSION/CONFIGURATION-NAME', containing executable
programs used by Emacs that users are not expected to run
themselves.
`VERSION' is the number of the Emacs version you are installing,
and `CONFIGURATION-NAME' is the argument you gave to the
`configure' program to identify the architecture and operating
system of your machine, like `mips-dec-ultrix' or
`sparc-sun-sunos'. Since these files are specific to the version
of Emacs, operating system, and architecture in use, including
the configuration name in the path allows you to have several
versions of Emacs for any mix of machines and operating systems
installed at the same time; this is useful for sites at which
different kinds of machines share the file system Emacs is
installed on.
`infodir' indicates where to put the info files distributed with
Emacs; it defaults to `/usr/local/info'.
`mandir' indicates where to put the man pages for Emacs and its
utilities (like `etags'); it defaults to
`/usr/local/man/man1'.
`manext' gives the extension the man pages should be installed with.
It should contain a period, followed by the appropriate
digit. It defaults to `.1'. For example given the default
values for `mandir' and `manext', the Emacs man page would be
installed as `/usr/local/man/man1/emacs.1'.
`prefix' doesn't give a path for any specific part of Emacs; instead,
its value is used to determine the defaults for all the
architecture-independent path variables - `datadir',
`sharedstatedir', `infodir', and `mandir'. Its default value is
`/usr/local'; the other variables add on `lib' or `man' to it
by default.
For example, suppose your site generally places GNU software
under `/usr/users/software/gnusoft' instead of `/usr/local'.
By including
`prefix=/usr/users/software/gnusoft'
in the arguments to `make', you can instruct the build process
to place all of the Emacs data files in the appropriate
directories under that path.
`exec_prefix' serves the same purpose as `prefix', but instead
determines the default values for the architecture-dependent
path variables - `bindir' and `libexecdir'.
The above variables serve analogous purposes in the makefiles for all
GNU software; this variable is specific to Emacs.
`archlibdir' indicates where Emacs installs and expects the executable
files and other architecture-dependent data it uses while
running. Its default value, based on `libexecdir' (which
see), is `/usr/local/libexec/emacs/VERSION/CONFIGURATION-NAME'
(where VERSION and CONFIGURATION-NAME are as described above).
Remember that you must specify any variable values you need each time
you run `make' in the top directory. If you run `make' once to build
emacs, test it, and then run `make' again to install the files, you
must provide the same variable settings each time. To make the
settings persist, you can edit them into the `Makefile' in the top
directory, but be aware that running the `configure' program erases
`Makefile' and rebuilds it from `Makefile.in'.
The path for finding Lisp files is specified in src/paths.h,
a file which is generated by running configure. To change the path,
you can edit the definition of PATH_LOADSEARCH in that file
before you run `make'.
The top-level Makefile stores the variable settings it used in the
Makefiles for the subdirectories, so you don't have to specify them
when running make in the subdirectories.
CONFIGURATION BY HAND
Instead of running the `configure' program, you have to perform the
following steps.
1) Copy `./src/config.in' to `./src/config.h'.
2) Consult `./etc/MACHINES' to see what configuration name you should
use for your system. Look at the code of the `configure' script to
see which operating system and architecture description files from
`src/s' and `src/m' should be used for that configuration name. Edit
`src/config.h', and change the two `#include' directives to include
the appropriate system and architecture description files.
2) Edit `./src/config.h' to set the right options for your system. If
you need to override any of the definitions in the s/*.h and m/*.h
files for your system and machine, do so by editing config.h, not by
changing the s/*.h and m/*.h files. Occasionally you may need to
redefine parameters used in `./lib-src/movemail.c'.
3) Create src/Makefile and lib-src/Makefile from the corresponding
`Makefile.in' files. First copy `Makefile.in' to `Makefile.c',
then edit in appropriate substitutions for the @...@ constructs,
and then copy the shell commands near the end of `configure'
that run cpp to construct `Makefile'.
4) Create `Makefile' files in various other directories
from the corresponding `Makefile.in' files. This isn't so hard,
just a matter of substitution.
The `configure' script is built from `configure.in' by the `autoconf'
program. You need version 2.51 or newer of `autoconf' to rebuild
`configure'.
BUILDING GNU EMACS BY HAND
Once Emacs is configured, running `make' in the top directory performs
the following steps.
1) Run `make src/paths.h' in the top directory. This produces
`./src/paths.h' from the template file `./src/paths.in', changing
the paths to the values specified in `./Makefile'.
2) Go to directory `./lib-src' and run `make'. This creates
executables named `ctags' and `etags' and `wakeup' and `make-docfile'
and `digest-doc' and `test-distrib'. And others.
3) Go to directory `./src' and Run `make'. This refers to files in
the `./lisp' and `./lib-src' subdirectories using names `../lisp' and
`../lib-src'.
This creates a file `./src/emacs' which is the runnable Emacs,
which has another name that contains a version number.
Each time you do this, that version number increments in the last place.
It also creates a file in `./etc' whose name is `DOC' followed by the
current Emacs version. This file contains documentation strings for
all the functions in Emacs. Each time you run make to make a new
emacs, a new DOC file with a new name is made. You must keep the DOC
file for an Emacs version as long as you keep using that Emacs
version.
INSTALLATION BY HAND
The steps below are done by running `make install' in the main
directory of the Emacs distribution.
1) Copy `./lisp' and its subdirectories, `./etc', and the executables
in `./lib-src' to their final destinations, as selected in `./src/paths.h'.
Strictly speaking, not all of the executables in `./lib-src' need be copied.
- The programs `cvtmail', `fakemail', `hexl',
`movemail', `profile', `rcs2log', `timer', `vcdiff', `wakeup',
and `yow' are used by Emacs; they do need to be copied.
- The programs `etags', `ctags', `emacsclient', `b2m', and `rcs-checkin'
are intended to be run by users; they are handled below.
- The programs `make-docfile' and `test-distrib' were
used in building Emacs, and are not needed any more.
- The programs `digest-doc' and `sorted-doc' convert a `DOC' file into
a file for users to read. There is no important reason to move them.
2) Copy the files in `./info' to the place specified in
`./lisp/site-init.el' or `./lisp/paths.el'. Note that if the
destination directory already contains a file named `dir', you
probably don't want to replace it with the `dir' file in the Emacs
distribution. Instead, you should make sure that the existing `dir'
file contains an appropriate menu entry for the Emacs info.
3) Copy `./src/emacs' to `/usr/local/bin', or to some other directory
in users' search paths. `./src/emacs' has an alternate name
`./src/emacs-EMACSVERSION'; you may wish to make a symbolic link named
`/usr/local/bin/emacs' pointing to that alternate name, as an easy way
of installing different versions.
You can delete `./src/temacs'.
4) Copy the programs `b2m', `emacsclient', `ctags', `etags', and
`rcs-checkin' from `./lib-src' to `/usr/local/bin'. These programs are
intended for users to run.
5) Copy the man pages in `./etc' for emacs, ctags, and etags into the
appropriate man directories.
6) The files in the `./src' subdirectory, except for `emacs', are not
used by Emacs once it is built. However, it is very desirable to keep
the source on line for debugging.
PROBLEMS
See the file PROBLEMS in etc subdirectory for a list of various
problems sometimes encountered, and what to do about them.
Installation on MSDOG (a.k.a. MSDOS)
To install on MSDOG, you need to have the GNU C compiler for MSDOG
(also known as djgpp), GNU Make, rm, mv, and sed. See the remarks in
config.bat for more information about locations and versions. The
file etc/FAQ includes pointers to Internet sites where you can find
the necessary utilities; search for "MS-DOS". The configuration step
(see below) will test for these utilities and will refuse to continue
if any of them isn't found.
Recompiling Lisp files in the `lisp' subdirectory using the various
targets in the lisp/Makefile file requires additional utilities:
`find' and `xargs' (from Findutils), `touch' (from Fileutils) GNU
`echo' and `test' (from Sh-utils), `tr, `sort', and `uniq' (from
Textutils), and a port of Bash. However, you should not normally need
to run lisp/Makefile, as all the Lisp files are distributed in
byte-compiled form as well.
If you are building the MSDOG version of Emacs on an MSDOG-like system
which supports long file names (e.g. Windows 95), you need to make
sure that long file names are handled consistently both when you
unpack the distribution and compile it. If you intend to compile with
DJGPP v2.0 or later, and long file names support is enabled (LFN=y in
the environment), you need to unpack Emacs distribution in a way that
doesn't truncate the original long filenames to the DOS 8.3 namespace;
the easiest way to do this is to use djtar program which comes with
DJGPP, since it will note the LFN setting and behave accordingly.
DJGPP v1 doesn't support long filenames, so you must unpack Emacs with
a program that truncates the filenames to 8.3 naming as it extracts
files; again, using djtar after setting LFN=n is the recommended way.
You can build Emacs with LFN=n even if you use DJGPP v2, if some of
your tools don't support long file names: just ensure that LFN is set
to `n' during both unpacking and compiling.
(By the time you read this, you have already unpacked the Emacs
distribution, but if the explanations above imply that you should have
done it differently, it's safer to delete the directory tree created
by the unpacking program and unpack Emacs again, than to risk running
into problems during the build process.)
It is important to understand that the runtime support of long file
names by the Emacs binary is NOT affected by the LFN setting during
compilation; Emacs compiled with DJGPP v2.0 or later will always
support long file names on Windows 9X no matter what was the setting
of LFN at compile time. However, if you compiled with LFN disabled
and want to enable LFN support after Emacs was already built, you need
to make sure that the support files in the lisp, etc and info
directories are called by their original long names as found in the
distribution. You can do this either by renaming the files manually,
or by extracting them from the original distribution archive with
djtar after you set LFN=y in the environment.
To unpack Emacs with djtar, type this command:
djtar -x emacs.tgz
(This assumes that the Emacs distribution is called `emacs.tgz' on
your system.)
If you want to print international characters, install the intlfonts
distribution. For this, create a directory called `fonts' under the
Emacs top-level directory (usually called `emacs-XX.YY') created by
unpacking emacs.tgz, chdir into the directory emacs-XX.YY/fonts, and
type this:
djtar -x intlfonts.tgz
When unpacking is done, a directory called `emacs-XX.YY' will be
created, where XX.YY is the Emacs version. To build and install
Emacs, chdir to that directory and type these commands:
config msdos
make install
Running "config msdos" checks for several programs that are required
to configure and build Emacs; if one of those programs is not found,
CONFIG.BAT stops and prints an error message. If you have DJGPP
version 2.0 or 2.01, it will complain about a program called
DJECHO.EXE. These old versions of DJGPP shipped that program under
the name ECHO.EXE, so you can simply copy ECHO.EXE to DJECHO.EXE and
rerun CONFIG.BAT. If you have neither ECHO.EXE nor DJECHO.EXE, you
should be able to find them in your djdevNNN.zip archive (where NNN is
the DJGPP version number).
On Windows NT or Windows 2000, running "config msdos" might print an
error message like "VDM has been already loaded". This is because
those systems have a program called `redir.exe' which is incompatible
with a program by the same name supplied with DJGPP, which is used by
config.bat. To resolve this, move the DJGPP's `bin' subdirectory to
the front of your PATH environment variable.
To install the international fonts, chdir to the intlfonts-X.Y
directory created when you unpacked the intlfonts distribution (X.Y is
the version number of the fonts' distribution), and type the following
command:
make bdf INSTALLDIR=..
After Make finishes, you may remove the directory intlfonts-X.Y; the
fonts are installed into the fonts/bdf subdirectory of the top-level
Emacs directory, and that is where Emacs will look for them by
default.
Building Emacs creates executable files in the src and lib-src
directories. Installing Emacs on MSDOS moves these executables to a
sibling directory called bin. For example, if you build in directory
/emacs, installing moves the executables from /emacs/src and
/emacs/lib-src to the directory /emacs/bin, so you can then delete the
subdirectories /emacs/src and /emacs/lib-src if you wish. The only
subdirectories you need to keep are bin, lisp, etc and info. (If you
installed intlfonts, keep the fonts directory and all its
subdirectories as well.) The bin subdirectory should be added to your
PATH. The msdos subdirectory includes a PIF and an icon file for
Emacs which you might find useful if you run Emacs under MS Windows.
Emacs on MSDOS finds the lisp, etc and info directories by looking in
../lisp, ../etc and ../info, starting from the directory where the
Emacs executable was run from. You can override this by setting the
environment variables EMACSDATA (for the location of `etc' directory),
EMACSLOADPATH (for the location of `lisp' directory) and INFOPATH (for
the location of the `info' directory).
MSDOG is a not a multitasking operating system, so Emacs features such
as asynchronous subprocesses that depend on multitasking will not
work. Synchronous subprocesses do work.
Version 2.0 of djgpp has two bugs that affect Emacs. We've included
corrected versions of two files from djgpp in the msdos subdirectory:
is_exec.c and sigaction.c. To work around the bugs, compile these
files and link them into temacs. Djgpp versions 2.01 and later have
these bugs fixed, so upgrade if you can before building Emacs.
COPYING PERMISSIONS
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,
and that any new or changed statements about the activities
of the Free Software Foundation are approved by the Foundation.

View file

@ -1,76 +0,0 @@
Building and Installing Emacs from CVS
Some of the files that are included in the Emacs tarball, such as
byte-compiled Lisp files, are not stored in the CVS repository.
Therefore, to build from CVS you must run "make bootstrap"
instead of just "make":
$ ./configure
$ make bootstrap
The bootstrap process makes sure all necessary files are rebuilt
before it builds the final Emacs binary.
Normally, it is not necessary to use "make bootstrap" after every CVS
update. Unless there are problems, we suggest the following
procedure:
$ ./configure
$ make
$ cd lisp
$ make recompile EMACS=../src/emacs
$ cd ..
$ make
(If you want to install the Emacs binary, type "make install" instead
of "make" in the last command.)
Occasionally the file "lisp/loaddefs.el" will need be updated to reflect
new autoloaded functions. If you see errors about undefined lisp
functions during compilation, that may be the reason. Another symptom
may be an error saying that "loaddefs.el" could not be found; this is
due to a change in the way loaddefs.el was handled in CVS, and should
only happen once, for users that are updating old CVS trees.
To update loaddefs.el, do:
$ cd lisp
$ make autoloads EMACS=../src/emacs
If either of above procedures fails, try "make bootstrap".
Users of non-Posix systems (MS-Windows etc.) should run the
platform-specific configuration scripts (nt/configure.bat, config.bat,
etc.) before "make bootstrap" or "make"; the rest of the procedure is
applicable to those systems as well.
Questions, requests, and bug reports about the CVS versions of Emacs
should be sent to emacs-pretest-bug@gnu.org rather than gnu.emacs.help
or gnu.emacs.bug. Ideally, use M-x report-emacs-bug RET which will
send it to the proper place.
Note on using SSH to access the CVS repository from inside Emacs
----------------------------------------------------------------
Write access to the CVS repository requires using SSH v2.
If you execute cvs commands inside Emacs, specifically if you use
pcl-cvs, output from CVS may be lost due to a problem in the
interface between ssh, cvs, and libc. Corrupted checkins have
also been rumored to have happened.
To fix the problem, save the following script into a file, make it
executable, and set CVS_RSH to the file name of the script:
#!/bin/bash
exec 2> >(exec cat >&2 2>/dev/null)
exec ssh "$@"
This may be combined with the following entry in ~/.ssh/config to
simplify accessing the CVS repository:
Host subversions.gnu.org
Protocol 2
ForwardX11 no
User YOUR_USERID

View file

@ -1,218 +0,0 @@
Emacs Maintainers
This file contains a description of who is responsible for maintaining
what parts of the Emacs distribution. The areas can be defined
"arbitrarily", but should provide fairly well-defined boundaries so
that there are not too many ambiguities.
The list below consists of 3 parts. First, the list of areas that
someone wants to be maintaining (i.e. has a particularly keen interest
for it); then the list of areas that someone is willing to maintain,
although he would not necessarily mind if someone else was the
official maintainer; and finally the list of areas for which no
maintainer has been found so far.
==============================================================================
1.
==============================================================================
Richard Stallman
???
Jason Rumney
W32
Eli Zaretskii
The MS-DOS (a.k.a. DJGPP) port:
config.bat
msdos/*
src/msdos.[ch]
src/dosfns.[ch]
src/w16select.c
src/s/msdos.h
lisp/term/internal.el
lisp/term/pc-win.el
lisp/dos-fns.el
lisp/dos-w32.el
lisp/dos-vars.el
lisp/term/tty-colors.el
lisp/international/codepage.el
man/faq.texi
man/msdog.texi
Kenichi Handa
Mule
Stefan Monnier
src/regex.c
src/syntax.c
src/keymap.c
font-lock/jit-lock/syntax
minor-mode/major-mode infrastructure
text filling
minibuffer completion
lisp/textmodes/outline.el
Miles Bader
src/xfaces.c
field-property related stuff
lisp/comint.el
lisp/shell.el
[other comint-related packages]
lisp/button.el
lisp/image-file.el
lisp/minibuf-eldef.el
lisp/rfn-eshadow.el
==============================================================================
2.
==============================================================================
Steven Tamm
MacOS
Eli Zaretskii
man/*
lispref/*
info/dir
src/xfaces.c
src/term.c
src/frame.c
src/dired.c
lisp/arc-mode.el
lisp/menu-bar.el
lisp/hexl.el
lisp/info.el
lisp/ls-lisp.el
lisp/startup.el
Stefan Monnier
src/intervals.c
src/keyboard.c
lisp/textmodes/tex-mode.el
lisp/progmodes/perl-mode.el
lisp/progmodes/tcl.el
lisp/emacs-lisp/easymenu.el
Miles Bader
src/eval.c
src/bytecode.c
src/editfns.c
lisp/textmodes/refill.el
Thien-Thi Nguyen
VMS
==============================================================================
3.
==============================================================================
src/Makefile.in
src/abbrev.c
src/alloc.c
src/alloca.c
src/alloca.s
src/atimer.c
src/bitmaps/
src/buffer.c
src/callint.c
src/callproc.c
src/casefiddle.c
src/casetab.c
src/category.c
src/ccl.c
src/charset.c
src/cm.c
src/cmds.c
src/coding.c
src/composite.c
src/config.in
src/cxux-crt0.s
src/data.c
src/dispnew.c
src/doc.c
src/doprnt.c
src/ecrt0.c
src/emacs.c
src/epaths.in
src/fileio.c
src/filelock.c
src/filemode.c
src/firstfile.c
src/floatfns.c
src/fns.c
src/fontset.c
src/getloadavg.c
src/gmalloc.c
src/hftctl.c
src/indent.c
src/insdel.c
src/lastfile.c
src/lread.c
src/m/
src/macros.c
src/makefile.nt
src/makefile.w32-in
src/marker.c
src/md5.c
src/minibuf.c
src/mktime.c
src/mocklisp.c
src/pre-crt0.c
src/prefix-args.c
src/print.c
src/process.c
src/ralloc.c
src/region-cache.c
src/s/
src/scroll.c
src/search.c
src/sound.c
src/strftime.c
src/sunfns.c
src/sysdep.c
src/termcap.c
src/terminfo.c
src/textprop.c
src/tparam.c
src/undo.c
src/unexaix.c
src/unexalpha.c
src/unexapollo.c
src/unexconvex.c
src/unexec.c
src/unexelf.c
src/unexenix.c
src/unexhp9k800.c
src/unexmips.c
src/unexnext.c
src/unexsni.c
src/unexsunos4.c
src/unexw32.c
src/vm-limit.c
src/w32.c
src/w32bdf.c
src/w32console.c
src/w32fns.c
src/w32heap.c
src/w32inevt.c
src/w32menu.c
src/w32proc.c
src/w32reg.c
src/w32select.c
src/w32term.c
src/w32xfns.c
src/widget.c
src/window.c
src/xdisp.c
src/xfns.c
src/xmenu.c
src/xrdb.c
src/xselect.c
src/xterm.c
;;; arch-tag: 869126d4-4851-41b2-8470-14dd492a3c98

View file

@ -1,777 +0,0 @@
# DIST: This is the distribution Makefile for Emacs. configure can
# DIST: make most of the changes to this file you might want, so try
# DIST: that first.
# Copyright (C) 1992,93,94,95,96,97,98,1999,2000,01,02,03,2004
# 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.
# make all to compile and build Emacs.
# make install to install it.
# make TAGS to update tags tables.
#
# make clean or make mostlyclean
# Delete all files from the current directory that are normally
# created by building the program. Don't delete the files that
# record the configuration. Also preserve files that could be made
# by building, but normally aren't because the distribution comes
# with them.
#
# Delete `.dvi' files here if they are not part of the distribution.
#
# make distclean
# Delete all files from the current directory that are created by
# configuring or building the program. If you have unpacked the
# source and built the program without creating any other files,
# `make distclean' should leave only the files that were in the
# distribution.
#
# make maintainer-clean
# Delete everything from the current directory that can be
# reconstructed with this Makefile. This typically includes
# everything deleted by distclean, plus more: .elc files,
# C source files produced by Bison, tags tables, info files,
# and so on.
#
# make extraclean
# Still more severe - delete backup and autosave files, too.
#
# make bootstrap
# Recompiles all the Emacs Lisp files using the latest source,
# then rebuilds Emacs.
#
# make bootfast
# Recompiles changed Emacs Lisp files using the latest C source,
# then rebuilds Emacs. This is faster than `make bootstrap'
# but once in a while an old .elc file can cause trouble.
SHELL = /bin/sh
# This may not work with certain non-GNU make's. It only matters when
# inheriting a CDPATH not starting with the current directory.
CDPATH=
# If Make doesn't predefine MAKE, set it here.
@SET_MAKE@
# ==================== Things `configure' Might Edit ====================
CC=@CC@
CPP=@CPP@
C_SWITCH_SYSTEM=@c_switch_system@
ALLOCA=@ALLOCA@
LN_S=@LN_S@
CFLAGS=@CFLAGS@
LDFLAGS=@LDFLAGS@
CPPFLAGS=@CPPFLAGS@
C_SWITCH_X_SITE=@C_SWITCH_X_SITE@
LD_SWITCH_X_SITE=@LD_SWITCH_X_SITE@
EXEEXT=@EXEEXT@
### These help us choose version- and architecture-specific directories
### to install files in.
### This should be the number of the Emacs version we're building,
### like `18.59' or `19.0'.
version=@version@
### This should be the name of the configuration we're building Emacs
### for, like `mips-dec-ultrix' or `sparc-sun-sunos'.
configuration=@configuration@
# ==================== Where To Install Things ====================
# The default location for installation. Everything is placed in
# subdirectories of this directory. The default values for many of
# the variables below are expressed in terms of this one, so you may
# not need to change them. This defaults to /usr/local.
prefix=@prefix@
# Like `prefix', but used for architecture-specific files.
exec_prefix=@exec_prefix@
# Where to install Emacs and other binaries that people will want to
# run directly (like etags).
bindir=@bindir@
# Where to install architecture-independent data files. ${lispdir}
# and ${etcdir} are subdirectories of this.
datadir=@datadir@
# Where to install and expect the files that Emacs modifies as it
# runs. These files are all architecture-independent.
# Right now, this is not used.
sharedstatedir=@sharedstatedir@
# Where to install and expect executable files to be run by Emacs
# rather than directly by users, and other architecture-dependent
# data. ${archlibdir} is a subdirectory of this.
libexecdir=@libexecdir@
# Where to install Emacs's man pages, and what extension they should have.
mandir=@mandir@
manext=.1
man1dir=$(mandir)/man1
# Where to install and expect the info files describing Emacs. In the
# past, this defaulted to a subdirectory of ${prefix}/lib/emacs, but
# since there are now many packages documented with the texinfo
# system, it is inappropriate to imply that it is part of Emacs.
infodir=@infodir@
# Directory for local state files for all programs.
localstatedir=@localstatedir@
# Where to look for bitmap files.
bitmapdir=@bitmapdir@
# Where to find the source code. The source code for Emacs's C kernel is
# expected to be in ${srcdir}/src, and the source code for Emacs's
# utility programs is expected to be in ${srcdir}/lib-src. This is
# set by the configure script's `--srcdir' option.
# We use $(srcdir) explicitly in dependencies so as not to depend on VPATH.
srcdir=@srcdir@
# Tell make where to find source files; this is needed for the makefiles.
VPATH=@srcdir@
# Where to find the application default.
x_default_search_path=@x_default_search_path@
# Location to install Emacs.app on Mac OS X
carbon_appdir=@carbon_appdir@
# ==================== Emacs-specific directories ====================
# These variables hold the values Emacs will actually use. They are
# based on the values of the standard Make variables above.
# Where to install the lisp files distributed with
# Emacs. This includes the Emacs version, so that the
# lisp files for different versions of Emacs will install
# themselves in separate directories.
lispdir=@lispdir@
# Directories Emacs should search for lisp files specific
# to this site (i.e. customizations), before consulting
# ${lispdir}. This should be a colon-separated list of
# directories.
locallisppath=@locallisppath@
# Where Emacs will search to find its lisp files. Before
# changing this, check to see if your purpose wouldn't
# better be served by changing locallisppath. This
# should be a colon-separated list of directories.
lisppath=@lisppath@
# Where Emacs will search for its lisp files while
# building. This is only used during the process of
# compiling Emacs, to help Emacs find its lisp files
# before they've been installed in their final location.
# It's usually identical to lisppath, except that
# it does not include locallisppath, and the
# entry for the directory containing the installed lisp
# files has been replaced with ../lisp. This should be a
# colon-separated list of directories.
buildlisppath=${srcdir}/lisp
# Where to install the other architecture-independent
# data files distributed with Emacs (like the tutorial,
# the cookie recipes and the Zippy database). This path
# usually contains the Emacs version number, so the data
# files for multiple versions of Emacs may be installed
# at once.
etcdir=@etcdir@
# Where to put executables to be run by Emacs rather than
# the user. This path usually includes the Emacs version
# and configuration name, so that multiple configurations
# for multiple versions of Emacs may be installed at
# once.
archlibdir=@archlibdir@
# Where to put the docstring file.
docdir=@docdir@
# Where to install Emacs game score files.
gamedir=@gamedir@
# ==================== Utility Programs for the Build ====================
# Allow the user to specify the install program.
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_INFO = @INSTALL_INFO@
# By default, we uphold the dignity of our programs.
INSTALL_STRIP =
# ============================= Targets ==============================
# Program name transformation.
TRANSFORM = @program_transform_name@
# What emacs should be called when installed.
EMACS = `echo emacs${EXEEXT} | sed '$(TRANSFORM)'`
EMACSFULL = `echo emacs-${version}${EXEEXT} | sed '$(TRANSFORM)'`
# Subdirectories to make recursively. `lisp' is not included
# because the compiled lisp files are part of the distribution.
# leim is not included because it needs special handling.
SUBDIR = lib-src src
# The makefiles of the directories in $SUBDIR.
SUBDIR_MAKEFILES = lib-src/Makefile man/Makefile lispref/Makefile lispintro/Makefile src/Makefile oldXMenu/Makefile lwlib/Makefile leim/Makefile
# Subdirectories to install, and where they'll go.
# lib-src's makefile knows how to install it, so we don't do that here.
# leim's makefile also knows how to install it, so we don't do that here.
# When installing the info files, we need to do special things to
# avoid nuking an existing dir file, so we don't do that here;
# instead, we have written out explicit code in the `install' targets.
COPYDIR = ${srcdir}/etc ${srcdir}/lisp
COPYDESTS = ${etcdir} ${lispdir}
all: ${SUBDIR} leim
removenullpaths=sed -e 's/^://g' -e 's/:$$//g' -e 's/::/:/g'
# Generate epaths.h from epaths.in. This target is invoked by `configure'.
epaths-force: FRC
@(lisppath=`echo ${lisppath} | ${removenullpaths}` ; \
buildlisppath=`echo ${buildlisppath} | ${removenullpaths}` ; \
x_default_search_path=`echo ${x_default_search_path}`; \
gamedir=`echo ${gamedir}`; \
sed < ${srcdir}/src/epaths.in > epaths.h.$$$$ \
-e 's;\(#.*PATH_LOADSEARCH\).*$$;\1 "'$${lisppath}'";' \
-e 's;\(#.*PATH_DUMPLOADSEARCH\).*$$;\1 "'$${buildlisppath}'";' \
-e 's;\(#.*PATH_EXEC\).*$$;\1 "${archlibdir}";' \
-e 's;\(#.*PATH_INFO\).*$$;\1 "${infodir}";' \
-e 's;\(#.*PATH_DATA\).*$$;\1 "${etcdir}";' \
-e 's;\(#.*PATH_BITMAPS\).*$$;\1 "${bitmapdir}";' \
-e 's;\(#.*PATH_X_DEFAULTS\).*$$;\1 "${x_default_search_path}";' \
-e 's;\(#.*PATH_GAME\).*$$;\1 "${gamedir}";' \
-e 's;\(#.*PATH_DOC\).*$$;\1 "${docdir}";' \
-e 's;/[*] *arch-tag:.*;/*;') && \
${srcdir}/move-if-change epaths.h.$$$$ src/epaths.h
# For parallel make, src should be build before leim.
# "export PARALLEL=0" is for SGI's Make, to prevent it from
# running more than 1 process in the leim directory, especially for
# the $TIT files there.
leim: src ${SUBDIR_MAKEFILES} FRC
(export PARALLEL; PARALLEL=0; cd $@; $(MAKE) all $(MFLAGS) \
CC='${CC}' CFLAGS='${CFLAGS}' CPPFLAGS='${CPPFLAGS}' \
LDFLAGS='${LDFLAGS}' MAKE='${MAKE}')
src: lib-src FRC
lib-src: FRC src/config.stamp
.RECURSIVE: ${SUBDIR} leim
${SUBDIR}: maybe_bootstrap ${SUBDIR_MAKEFILES} FRC
cd $@; $(MAKE) all $(MFLAGS) \
CC='${CC}' CFLAGS='${CFLAGS}' CPPFLAGS='${CPPFLAGS}' \
LDFLAGS='${LDFLAGS}' MAKE='${MAKE}'
blessmail: ${SUBDIR_MAKEFILES} src FRC
cd lib-src; $(MAKE) maybe-blessmail $(MFLAGS) \
MAKE='${MAKE}' archlibdir='$(archlibdir)'
Makefile: $(srcdir)/Makefile.in config.status
./config.status
config.status: ${srcdir}/configure
./config.status --recheck
${srcdir}/configure: @MAINT@ ${srcdir}/configure.in
cd ${srcdir} && autoconf
$(srcdir)/src/config.in: $(srcdir)/src/stamp-h.in
@true
$(srcdir)/src/stamp-h.in: @MAINT@ ${srcdir}/configure.in
cd ${srcdir} && autoheader
rm -f $(srcdir)/src/stamp-h.in
echo timestamp > $(srcdir)/src/stamp-h.in
src/Makefile: $(srcdir)/src/Makefile.in config.status
./config.status
src/config.stamp: $(srcdir)/src/config.in config.status
./config.status
touch src/config.stamp
lib-src/Makefile: $(srcdir)/lib-src/Makefile.in config.status
./config.status
man/Makefile: $(srcdir)/man/Makefile.in config.status
./config.status
lispref/Makefile: $(srcdir)/lispref/Makefile.in config.status
./config.status
lispintro/Makefile: $(srcdir)/lispintro/Makefile.in config.status
./config.status
oldXMenu/Makefile: $(srcdir)/oldXMenu/Makefile.in config.status
./config.status
lwlib/Makefile: $(srcdir)/lwlib/Makefile.in config.status
./config.status
leim/Makefile: $(srcdir)/leim/Makefile.in config.status
./config.status
# ==================== Installation ====================
## If we let lib-src do its own installation, that means we
## don't have to duplicate the list of utilities to install in
## this Makefile as well.
## On AIX, use tar xBf.
## On Xenix, use tar xpf.
.PHONY: install mkdir
## We delete each directory in ${COPYDESTS} before we copy into it;
## that way, we can reinstall over directories that have been put in
## place with their files read-only (perhaps because they are checked
## into RCS). In order to make this safe, we make sure that the
## source exists and is distinct from the destination.
### We do install-arch-indep first because
### the executable needs the Lisp files and DOC file to work properly.
install: all install-arch-indep install-arch-dep install-leim blessmail
@true
### Install the executables that were compiled specifically for this machine.
### It would be nice to do something for a parallel make
### to ensure that install-arch-indep finishes before this starts.
install-arch-dep: mkdir
(cd lib-src; \
$(MAKE) install $(MFLAGS) prefix=${prefix} \
exec_prefix=${exec_prefix} bindir=${bindir} \
libexecdir=${libexecdir} archlibdir=${archlibdir} \
INSTALL_STRIP=${INSTALL_STRIP})
${INSTALL_PROGRAM} $(INSTALL_STRIP) src/emacs${EXEEXT} ${bindir}/$(EMACSFULL)
-chmod 1755 ${bindir}/$(EMACSFULL)
rm -f ${bindir}/$(EMACS)
-ln ${bindir}/$(EMACSFULL) ${bindir}/$(EMACS)
-unset CDPATH; \
for f in `cd lib-src && echo fns-*.el`; do \
if test -r lib-src/$$f ; then \
${INSTALL_DATA} lib-src/$$f ${archlibdir}/$$f; \
else true; fi ; \
done
if test "${carbon_appdir}" != ""; then \
umask 022; mkdir -p ${carbon_appdir}/Emacs.app; \
(cd mac/Emacs.app; (tar -chf - . | \
(cd ${carbon_appdir}/Emacs.app; umask 022; tar -xvf - \
&& cat > /dev/null))) || exit 1; \
fi
### Install the files that are machine-independent.
### Most of them come straight from the distribution;
### the exception is the DOC-* files, which are copied
## from the build directory.
## Note that we copy DOC* and then delete DOC
## as a workaround for a bug in tar on Ultrix 4.2.
## If people complain about the h flag in tar command, take that out.
## That flag is also used in leim/Makefile.in
install-arch-indep: mkdir info
-set ${COPYDESTS} ; \
unset CDPATH; \
for dir in ${COPYDIR} ; do \
if [ `(cd $$1 && /bin/pwd)` != `(cd $${dir} && /bin/pwd)` ] ; then \
rm -rf $$1 ; \
fi ; \
shift ; \
done
-set ${COPYDESTS} ; \
mkdir ${COPYDESTS} ; \
chmod ugo+rx ${COPYDESTS} ; \
unset CDPATH; \
for dir in ${COPYDIR} ; do \
dest=$$1 ; shift ; \
[ -d $${dir} ] \
&& [ `(cd $${dir} && /bin/pwd)` != `(cd $${dest} && /bin/pwd)` ] \
&& (echo "Copying $${dir} to $${dest}..." ; \
(cd $${dir}; tar -chf - . ) \
| (cd $${dest}; umask 022; \
tar -xvf - && cat > /dev/null) || exit 1; \
find $${dest} -exec chown $${LOGNAME:-$$USERNAME} {} ';' ;\
for subdir in `find $${dest} -type d ! -name RCS ! -name CVS -print` ; do \
chmod a+rx $${subdir} ; \
rm -rf $${subdir}/RCS ; \
rm -rf $${subdir}/CVS ; \
rm -f $${subdir}/.cvsignore ; \
rm -f $${subdir}/.arch-inventory ; \
rm -f $${subdir}/\#* ; \
rm -f $${subdir}/.\#* ; \
rm -f $${subdir}/*~ ; \
rm -f $${subdir}/*.orig ; \
rm -f $${subdir}/[mM]akefile* ; \
rm -f $${subdir}/ChangeLog* ; \
rm -f $${subdir}/dired.todo ; \
done) ; \
done
-rm -f ${lispdir}/subdirs.el
$(srcdir)/update-subdirs ${lispdir}
if [ -f ${datadir}/emacs/${version}/site-lisp/subdirs.el ]; \
then true; \
else \
(echo "(if (fboundp 'normal-top-level-add-subdirs-to-load-path)"; \
echo " (normal-top-level-add-subdirs-to-load-path))") \
> ${datadir}/emacs/${version}/site-lisp/subdirs.el; \
fi
chmod a+r ${datadir}/emacs/${version}/site-lisp/subdirs.el
-if [ -f ${datadir}/emacs/site-lisp/subdirs.el ]; \
then true; \
else \
(echo "(if (fboundp 'normal-top-level-add-subdirs-to-load-path)"; \
echo " (normal-top-level-add-subdirs-to-load-path))") \
> ${datadir}/emacs/site-lisp/subdirs.el; \
fi
-chmod a+r ${datadir}/emacs/site-lisp/subdirs.el
-unset CDPATH; \
if [ `(cd ./etc; /bin/pwd)` != `(cd ${docdir}; /bin/pwd)` ]; \
then \
echo "Copying etc/DOC-* to ${docdir} ..." ; \
(cd ./etc; tar -chf - DOC*) \
|(cd ${docdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \
(cd $(docdir); chown $${LOGNAME:-$$USERNAME} DOC*; chmod a+r DOC*; \
if test "`echo DOC-*`" != "DOC-*"; then rm DOC; fi); \
else true; fi
-unset CDPATH; \
if [ -r ./lisp ] \
&& [ -r ./lisp/simple.el ] \
&& [ x`(cd ./lisp; /bin/pwd)` != x`(cd ${lispdir}; /bin/pwd)` ] \
&& [ x`(cd ${srcdir}/lisp; /bin/pwd)` != x`(cd ./lisp; /bin/pwd)` ]; \
then \
echo "Copying lisp/*.el and lisp/*.elc to ${lispdir} ..." ; \
(cd lisp; tar -chf - *.el *.elc) \
|(cd ${lispdir}; umask 022; tar -xvf - && cat > /dev/null) || exit 1; \
(cd ${lispdir}; find . -exec chown $${LOGNAME:-$$USERNAME} {} ';') ; \
else true; fi
-unset CDPATH; \
thisdir=`/bin/pwd`; \
if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \
then \
(cd ${infodir}; \
if [ -f dir ]; then true; \
else \
(cd $${thisdir}; \
${INSTALL_DATA} ${srcdir}/info/dir ${infodir}/dir; \
chmod a+r ${infodir}/dir); \
fi; \
cd ${srcdir}/info ; \
for f in ada-mode* autotype* calc* ccmode* cl* dired-x* ebrowse* ediff* efaq* eintr* elisp* emacs* emacs-mime* emacs-xtra* eshell* eudc* flymake* forms* gnus* idlwave* info* message* mh-e* org* pcl-cvs* pgg* reftex* sc* ses* sieve* speedbar* tramp* vip* widget* woman* smtpmail* url*; do \
(cd $${thisdir}; \
${INSTALL_DATA} ${srcdir}/info/$$f ${infodir}/$$f; \
chmod a+r ${infodir}/$$f); \
done); \
else true; fi
-unset CDPATH; \
thisdir=`/bin/pwd`; \
if [ `(cd ${srcdir}/info && /bin/pwd)` != `(cd ${infodir} && /bin/pwd)` ]; \
then \
for f in ada-mode autotype calc ccmode cl dired-x ebrowse ediff efaq elisp eintr emacs emacs-mime emacs-xtra eshell eudc flymake forms gnus idlwave info message mh-e org pcl-cvs pgg reftex sc ses sieve speedbar tramp vip viper widget woman smtpmail url; do \
(cd $${thisdir}; \
${INSTALL_INFO} --info-dir=${infodir} ${infodir}/$$f); \
done; \
else true; fi
-chmod -R a+r ${datadir}/emacs ${COPYDESTS} ${infodir}
thisdir=`/bin/pwd`; \
cd ${srcdir}/etc; \
for page in emacs emacsclient etags ctags ; do \
(cd $${thisdir}; \
${INSTALL_DATA} ${srcdir}/etc/$${page}.1 ${man1dir}/$${page}${manext}; \
chmod a+r ${man1dir}/$${page}${manext}); \
done
### Install LEIM files. Although they are machine-independent, we
### have separate target here instead of including it in
### `install-arch-indep'. People who extracted LEIM files after they
### insalled Emacs itself can install only LEIM files by this target.
install-leim: leim/Makefile mkdir
cd leim; $(MAKE) install
### Build Emacs and install it, stripping binaries while installing them.
install-strip:
$(MAKE) INSTALL_STRIP=-s install
### Build all the directories we're going to install Emacs in. Since
### we may be creating several layers of directories (for example,
### /usr/local/lib/emacs/19.0/mips-dec-ultrix4.2), we use mkinstalldirs
### instead of mkdir. Not all systems' mkdir programs have the `-p' flag.
mkdir: FRC
if [ -d ${datadir} ]; then true; else \
$(srcdir)/mkinstalldirs ${datadir}; \
chmod a+r ${datadir};\
fi
$(srcdir)/mkinstalldirs ${COPYDESTS} ${infodir} ${man1dir} \
${bindir} ${docdir} ${libexecdir} \
${datadir}/emacs/site-lisp \
${datadir}/emacs/${version}/site-lisp \
`echo ${locallisppath} | sed 's/:/ /g'`
### Delete all the installed files that the `install' target would
### create (but not the noninstalled files such as `make all' would
### create).
###
### Don't delete the lisp and etc directories if they're in the source tree.
uninstall:
(cd lib-src; \
$(MAKE) $(MFLAGS) uninstall \
prefix=${prefix} exec_prefix=${exec_prefix} \
bindir=${bindir} libexecdir=${libexecdir} archlibdir=${archlibdir})
-unset CDPATH; \
for dir in ${lispdir} ${etcdir} ; do \
if [ -d $${dir} ]; then \
case `(cd $${dir} ; /bin/pwd)` in \
`(cd ${srcdir} ; /bin/pwd)`* ) ;; \
* ) rm -rf $${dir} ;; \
esac ; \
case $${dir} in \
${datadir}/emacs/${version}/* ) \
rm -rf ${datadir}/emacs/${version} \
;; \
esac ; \
fi ; \
done
(cd ${archlibdir} && rm -f fns-*)
-rm -rf ${libexecdir}/emacs/${version}
(cd ${infodir} && rm -f cl* ada-mode* autotype* calc* ccmode* ebrowse* efaq* eintr elisp* eshell* eudc* idlwave* message* pcl-cvs* reftex* speedbar* tramp* widget* woman* dired-x* ediff* emacs* emacs-xtra* flymake* forms* gnus* info* mh-e* org* sc* ses* vip* smtpmail* url*)
(cd ${man1dir} && rm -f emacs${manext} emacsclient${manext} etags${manext} ctags${manext})
(cd ${bindir} && rm -f $(EMACSFULL) $(EMACS))
FRC:
# ==================== Cleaning up and miscellanea ====================
.PHONY: mostlyclean clean distclean maintainer-clean extraclean
### `mostlyclean'
### Like `clean', but may refrain from deleting a few files that people
### normally don't want to recompile. For example, the `mostlyclean'
### target for GCC does not delete `libgcc.a', because recompiling it
### is rarely necessary and takes a lot of time.
mostlyclean: FRC
(cd src; $(MAKE) $(MFLAGS) mostlyclean)
(cd oldXMenu; $(MAKE) $(MFLAGS) mostlyclean)
(cd lwlib; $(MAKE) $(MFLAGS) mostlyclean)
(cd lib-src; $(MAKE) $(MFLAGS) mostlyclean)
-(cd man && $(MAKE) $(MFLAGS) mostlyclean)
-(cd lispref && $(MAKE) $(MFLAGS) mostlyclean)
-(cd lispintro && $(MAKE) $(MFLAGS) mostlyclean)
(cd leim; $(MAKE) $(MFLAGS) mostlyclean)
### `clean'
### Delete all files from the current directory that are normally
### created by building the program. Don't delete the files that
### record the configuration. Also preserve files that could be made
### by building, but normally aren't because the distribution comes
### with them.
###
### Delete `.dvi' files here if they are not part of the distribution.
clean: FRC
(cd src; $(MAKE) $(MFLAGS) clean)
(cd oldXMenu; $(MAKE) $(MFLAGS) clean)
(cd lwlib; $(MAKE) $(MFLAGS) clean)
(cd lib-src; $(MAKE) $(MFLAGS) clean)
-(cd man && $(MAKE) $(MFLAGS) clean)
-(cd lispref && $(MAKE) $(MFLAGS) clean)
-(cd lispintro && $(MAKE) $(MFLAGS) clean)
(cd leim; $(MAKE) $(MFLAGS) clean)
### `distclean'
### Delete all files from the current directory that are created by
### configuring or building the program. If you have unpacked the
### source and built the program without creating any other files,
### `make distclean' should leave only the files that were in the
### distribution.
top_distclean=\
rm -f config.status config.cache config.log ; \
rm -f Makefile ${SUBDIR_MAKEFILES} ; \
if [ -d lock ] ; then (cd lock && (rm -f * || true)); else true; fi
distclean: FRC
(cd src; $(MAKE) $(MFLAGS) distclean)
(cd oldXMenu; $(MAKE) $(MFLAGS) distclean)
(cd lwlib; $(MAKE) $(MFLAGS) distclean)
(cd lib-src; $(MAKE) $(MFLAGS) distclean)
(cd man && $(MAKE) $(MFLAGS) distclean)
(cd lispref && $(MAKE) $(MFLAGS) distclean)
(cd lispintro && $(MAKE) $(MFLAGS) distclean)
(cd leim; $(MAKE) $(MFLAGS) distclean)
(cd lisp; $(MAKE) $(MFLAGS) distclean)
${top_distclean}
### `maintainer-clean'
### Delete everything from the current directory that can be
### reconstructed with this Makefile. This typically includes
### everything deleted by distclean, plus more: C source files
### produced by Bison, tags tables, info files, and so on.
###
### One exception, however: `make maintainer-clean' should not delete
### `configure' even if `configure' can be remade using a rule in the
### Makefile. More generally, `make maintainer-clean' should not delete
### anything that needs to exist in order to run `configure' and then
### begin to build the program.
maintainer-clean: FRC
(cd src; $(MAKE) $(MFLAGS) maintainer-clean)
(cd oldXMenu; $(MAKE) $(MFLAGS) maintainer-clean)
(cd lwlib; $(MAKE) $(MFLAGS) maintainer-clean)
(cd lib-src; $(MAKE) $(MFLAGS) maintainer-clean)
-(cd man && $(MAKE) $(MFLAGS) maintainer-clean)
-(cd lispref && $(MAKE) $(MFLAGS) maintainer-clean)
-(cd lispintro && $(MAKE) $(MFLAGS) maintainer-clean)
(cd leim; $(MAKE) $(MFLAGS) maintainer-clean)
(cd lisp; $(MAKE) $(MFLAGS) maintainer-clean)
${top_distclean}
### This doesn't actually appear in the coding standards, but Karl
### says GCC supports it, and that's where the configuration part of
### the coding standards seem to come from. It's like distclean, but
### it deletes backup and autosave files too.
extraclean:
for i in ${SUBDIR} leim; do (cd $$i; $(MAKE) $(MFLAGS) extraclean); done
${top_distclean}
-rm -f config-tmp-*
-rm -f *~ \#*
### Unlocking and relocking. The idea of these productions is to reduce
### hassles when installing an incremental tar of Emacs. Do `make unlock'
### before unlocking the file to take the write locks off all sources so
### that tar xvof will overwrite them without fuss. Then do `make relock'
### afterward so that VC mode will know which files should be checked in
### if you want to mung them.
###
### Note: it's no disaster if these productions miss a file or two; tar
### and VC will swiftly let you know if this happens, and it is easily
### corrected.
SOURCES = ChangeLog FTP INSTALL Makefile.in \
README configure make-dist move-if-change
.PHONY: unlock relock
unlock:
chmod u+w $(SOURCES)
-(cd elisp; chmod u+w Makefile README *.texi)
(cd etc; $(MAKE) $(MFLAGS) unlock)
(cd lib-src; $(MAKE) $(MFLAGS) unlock)
(cd lisp; $(MAKE) $(MFLAGS) unlock)
(cd lisp/term; chmod u+w README *.el)
(cd man; chmod u+w *texi* ChangeLog split-man)
(cd lispref; chmod u+w *texi* ChangeLog)
(cd lispintro; chmod u+w *texi* ChangeLog)
(cd oldXMenu; chmod u+w *.[ch] Makefile README)
(cd lwlib; chmod u+w *.[ch] Makefile README)
(cd src; $(MAKE) $(MFLAGS) unlock)
relock:
chmod u-w $(SOURCES)
-(cd elisp; chmod u-w Makefile README *.texi)
(cd etc; $(MAKE) $(MFLAGS) relock)
(cd lib-src; $(MAKE) $(MFLAGS) relock)
(cd lisp; $(MAKE) $(MFLAGS) relock)
(cd lisp/term; chmod u+w README *.el)
(cd man; chmod u+w *texi* ChangeLog split-man)
(cd lispref; chmod u+w *texi* ChangeLog)
(cd lispintro; chmod u+w *texi* ChangeLog)
(cd oldXMenu; chmod u+w *.[ch] Makefile README)
(cd lwlib; chmod u+w *.[ch] Makefile README)
(cd src; $(MAKE) $(MFLAGS) relock)
# The src subdir knows how to do the right thing
# even when the build directory and source dir are different.
TAGS tags: lib-src src
cd src; $(MAKE) tags
check:
@echo "We don't have any tests for GNU Emacs yet."
dist:
cd ${srcdir}; ./make-dist
.PHONY: info dvi dist check html
force-info:
# Note that man/Makefile knows how to
# put the info files in $(srcdir),
# so we can do ok running make in the build dir.
info: force-info
(cd man; $(MAKE) $(MFLAGS) info)
(cd lispref; $(MAKE) $(MFLAGS) info)
(cd lispintro; $(MAKE) $(MFLAGS) info)
dvi:
(cd man; $(MAKE) $(MFLAGS) dvi)
(cd lispref; $(MAKE) $(MFLAGS) elisp.dvi)
(cd lispintro; $(MAKE) $(MFLAGS) emacs-lisp-intro.dvi)
#### Bootstrapping.
### This is meant for Emacs maintainers only. It first cleans the
### lisp subdirectory, removing all compiled Lisp files. Then a
### special emacs executable is built from Lisp sources, which is then
### used to compile Lisp files. The last step is a "normal" make.
.PHONY: bootstrap
.PHONY: bootstrap-build
.PHONY: bootfast
.PHONY: maybe_bootstrap
maybe_bootstrap:
@bar="`echo $(srcdir)/lisp/*.elc`"; \
if [ \( "$$bar" = '$(srcdir)/lisp/*.elc' \) -o \( "$$bar" = '' \) ]; then \
echo "Your tree does not include the compiled Lisp files."; \
echo "You need to do \`make bootstrap' to build Emacs."; \
echo "Emacs now requires Texinfo version 4.2."; \
exit 1;\
fi
bootstrap: bootstrap-clean-before info bootstrap-build FRC
bootfast: bootstrap-clean-before-fast info bootstrap-build FRC
bootstrap-build: FRC
(cd lisp; $(MAKE) $(MFLAGS) bootstrap-prepare)
(cd src; $(MAKE) $(MFLAGS) bootstrap)
(cd lisp; $(MAKE) $(MFLAGS) bootstrap EMACS=../src/bootstrap-emacs${EXEEXT})
(cd src; $(MAKE) $(MFLAGS) mostlyclean)
$(MAKE) $(MFLAGS) all
(cd lisp; $(MAKE) $(MFLAGS) bootstrap-after)
### Used for `bootstrap' to avoid deleting existing dumped Emacs executables.
bootstrap-clean-before: bootstrap-clean-before-fast FRC
(cd lisp; $(MAKE) $(MFLAGS) bootstrap-clean)
### Used for `bootfast' to avoid deleting existing dumped Emacs executables
### and compiled .elc files.
bootstrap-clean-before-fast: FRC
(cd src; $(MAKE) $(MFLAGS) mostlyclean)
(cd oldXMenu; $(MAKE) $(MFLAGS) clean)
(cd lwlib; $(MAKE) $(MFLAGS) clean)
(cd lib-src; $(MAKE) $(MFLAGS) clean)
-(cd man && $(MAKE) $(MFLAGS) clean)
-(cd lispref && $(MAKE) $(MFLAGS) clean)
-(cd lispintro && $(MAKE) $(MFLAGS) clean)
(cd leim; $(MAKE) $(MFLAGS) clean)

105
README
View file

@ -1,105 +0,0 @@
This directory tree holds version 22.0.50 of GNU Emacs, the extensible,
customizable, self-documenting real-time display editor.
You may encounter bugs in this release. If you do, please report
them; your bug reports are valuable contributions to the FSF, since
they allow us to notice and fix problems on machines we don't have, or
in code we don't use often. See the file BUGS for more information on
how to report bugs.
See the file etc/NEWS for information on new features and other
user-visible changes in recent versions of Emacs.
The file INSTALL in this directory says how to bring up GNU Emacs on
various systems, once you have loaded the entire subtree of this
directory.
The file etc/PROBLEMS contains information on many common problems that
occur in building, installing and running Emacs.
Reports of bugs in Emacs should be sent to the mailing list
bug-gnu-emacs@gnu.org. See the "Bugs" section of the Emacs
manual for more information on how to report bugs. (The file `BUGS'
in this directory explains how you can find and read that section
using the Info files that come with Emacs.) See `etc/MAILINGLISTS'
for more information on mailing lists relating to GNU packages.
The `etc' subdirectory contains several other files, named in capital
letters, which you might consider looking at when installing GNU
Emacs.
The file `configure' is a shell script to acclimate Emacs to the
oddities of your processor and operating system. It creates the file
`Makefile' (a script for the `make' program), which automates the
process of building and installing Emacs. See INSTALL for more
detailed information.
The file `configure.in' is the input used by the autoconf program to
construct the `configure' script. Since Emacs has some configuration
requirements that autoconf can't meet directly, and for historical
reasons, `configure.in' uses an unholy marriage of custom-baked
configuration code and autoconf macros. If you want to rebuild
`configure' from `configure.in', you will need to install a recent
version of autoconf and GNU m4.
The file `Makefile.in' is a template used by `configure' to create
`Makefile'.
The file `make-dist' is a shell script to build a distribution tar
file from the current Emacs tree, containing only those files
appropriate for distribution. If you make extensive changes to Emacs,
this script will help you distribute your version to others.
There are several subdirectories:
`src' holds the C code for Emacs (the Emacs Lisp interpreter and
its primitives, the redisplay code, and some basic editing
functions).
`lisp' holds the Emacs Lisp code for Emacs (most everything else).
`leim' holds the library of Emacs input methods, Lisp code and
auxiliary data files required to type international characters
which can't be directly produced by your keyboard.
`lib-src' holds the source code for some utility programs for use by or
with Emacs, like movemail and etags.
`etc' holds miscellaneous architecture-independent data files
Emacs uses, like the tutorial text and the Zippy the Pinhead
quote database. The contents of the `lisp', `leim', `info',
`man', `lispref', and `lispintro' subdirectories are
architecture-independent too.
`info' holds the Info documentation tree for Emacs.
`man' holds the source code for the Emacs Manual. If you modify the
manual sources, you will need the `makeinfo' program to produce
an updated manual. `makeinfo' is part of the GNU Texinfo
package; you need version 4.2 or later of Texinfo.
`lispref' holds the source code for the Emacs Lisp reference manual.
`lispintro' holds the source code for the Introduction to Programming
in Emacs Lisp manual.
`msdos' holds configuration files for compiling Emacs under MSDOG.
`vms' holds instructions and useful files for running Emacs under VMS.
`nt' holds various command files and documentation files that pertain
to building and running Emacs on Windows 9X/ME/NT/2000/XP.
`mac' holds instructions, sources, and other useful files for building
and running Emacs on the Mac.
Building Emacs on non-Posix platforms requires to install tools
that aren't part of the standard distribution of the OS. The
platform-specific README files and installation instructions should
list the required tools.
VMS info:
Emacs 19.x and above do not compile out of the box on OpenVMS.
Richard Levitte <levitte@lp.se> is distributing and maintaining a
version of Emacs (currently based on version 19.28, but soon moving to
19.34 and then 20.1) that compiles and works on OpenVMS 5.5 and above
on both VAX and Alpha architectures. For more information see
http://vms.gnu.org/software/released1/emacs.html#get_emacs_1928_kit
There is also some effort going on with Emacs 21. Source code is
available at ftp://ftp.nvg.ntnu.no/pub/vms/emacs/. Look for most
recent stuff with ls -lta.
It is a working "development" version (editing and much more works).
More developers are needed; contact roart@nvg.ntnu.no.

View file

@ -1,241 +0,0 @@
2005-04-19 Lute Kamstra <lute@gnu.org>
* make-tarball.txt: Don't commit lisp/loaddefs.el.
2005-04-14 Lute Kamstra <lute@gnu.org>
* nt/makedist.bat (elfiles): Update.
* admin.el (add-release-logs): Fix require call.
2005-03-30 Marcelo Toledo <marcelo@marcelotoledo.org>
* FOR-RELEASE (Documentation): Added check the Emacs Tutorial. The
first line of every tutorial must begin with a sentence saying
"Emacs Tutorial" in the respective language. This should be
followed by "See end for copying conditions", likewise in the
respective language.
2005-03-29 Luc Teirlinck <teirllm@auburn.edu>
* FOR-RELEASE (TO BE DONE SHORTLY BEFORE RELEASE): New section.
Add `undo-ask-before-discard' to it.
2005-03-02 Miles Bader <miles@gnu.org>
* quick-install-emacs: Only use the mkdir --verbose option if the
script's --verbose option was specified (this avoids problems with
default usage on systems where mkdir doesn't support that option).
2005-02-15 Jason Rumney <jasonr@gnu.org>
* nt/makedist.bat: Do not rely on non-standard behaviour of
tar --exclude.
2004-11-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* FOR-RELEASE (Indications): Remove two stage update for toolbar (Done).
2004-09-20 Luc Teirlinck <teirllm@auburn.edu>
* FOR-RELEASE (Indications): Rearrange checklists for Emacs and
Elisp manuals.
2004-09-18 Luc Teirlinck <teirllm@auburn.edu>
* FOR-RELEASE (Indications): Clean up and update checklists for
Emacs and Elisp manuals.
2004-09-11 Kim F. Storm <storm@cua.dk>
* FOR-RELEASE (New features): Remove Gnus 5.10 entry (Done!).
(Documentation): Add NEWS entry.
Add section lists for proof-reading Emacs and Lisp manuals.
2004-08-29 Kim F. Storm <storm@cua.dk>
* FOR-RELEASE (Documentation): Add man/ack.texi and AUTHORS.
2004-08-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* FOR-RELEASE (Indications): Remove entry about GTK and geometry,
(now behaves as well as other ports).
2004-06-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
* FOR-RELEASE: Remove entry about GTK and monochrome displays (done).
2004-06-26 Eli Zaretskii <eliz@is.elta.co.il>
* FOR-RELEASE: Moved here from the etc directory.
2004-05-08 Thien-Thi Nguyen <ttn@gnu.org>
* notes/BRANCH: New file, to be maintained per CVS branch.
2003-10-01 Miles Bader <miles@gnu.org>
* quick-install-emacs: Don't use "function" keyword when defining
shell functions.
2003-09-29 Lute Kamstra <lute@gnu.org>
* make-tarball.txt: Mention regenerating Emacs' AUTHORS file.
2003-09-27 Miles Bader <miles@gnu.ai.mit.edu>
* quick-install-emacs: Remove fns-* pruning, since that file no
longer seems to be generated.
(AVOID): Quote literal periods. Quote braces in a way acceptable
to all parties (gawk gets bitchy about using `\').
2003-08-19 Miles Bader <miles@gnu.org>
* quick-install-emacs: Add arch-specific ignored files to
quick-install-emacs. Use quoting for periods that's acceptable
to recent versions of gawk.
2003-08-11 Markus Rost <rost@math.ohio-state.edu>
* cus-test.el: Remove obsolete workaround.
2003-04-22 Andrew Innes <andrewi@gnu.org>
* nt/makedist.bat: Fix multi-file .zip distribution, by splitting
emacs.exe before zipping, and including batch file to recreate
after unpacking.
* nt/stitch.bat: New file.
* nt/README-ftp-server: Update wording and version number etc.
Add extra instructions for installing multi-file .zip
distribution.
* nt/README.W32: Remove personal email address and update wording.
* nt/README-UNDUMP.W32: Remove personal email address and update
wording.
2003-02-10 Francesco Potort,Al(B <pot@gnu.org>
* make-changelog-diff: New script, code stolen from make-announcement.
* make-announcement: Use make-changelog-diff.
2003-01-20 Francesco Potort,Al(B <pot@gnu.org>
* make-tarball.txt: Step-by-step instructions for making a tarball.
* make-announcement: A script for creating pretest annuncements.
2003-01-17 Francesco Potort,Al(B <pot@gnu.org>
* admin.el (add-release-logs): Expand the directory name before
calling find(1).
(add-release-logs): Use the same methods as add-log.el for writing
the date and the user's name and address
2003-01-07 Miles Bader <miles@gnu.org>
* quick-install-emacs: Unset LANG etc. to avoid non-standard
command output from non-C locales.
2002-10-16 Markus Rost <rost@math.ohio-state.edu>
* cus-test.el: Extended and reorganized. There are now 4 tests
which can be run in batch mode. See the Commentary section.
2002-10-08 Markus Rost <rost@math.ohio-state.edu>
* cus-test.el: New file.
2002-05-27 Miles Bader <miles@gnu.org>
* quick-install-emacs (VERSION): Calculate using the same method
that configure.in uses.
2002-04-26 Pavel Jan,Bm(Bk <Pavel@Janik.cz>
* emacs-pretesters: New file with information for Emacs
pretesters.
2002-03-22 Paul Eggert <eggert@twinsun.com>
* quick-install-emacs (PRUNED): Avoid "head -1" and "tail +2", as
POSIX 1003.1-2001 disallows both usages.
2002-02-11 Andrew Innes <andrewi@gnu.org>
* nt/makedist.bat: Don't include elisp/term/*.el files twice.
2002-01-24 Andrew Innes <andrewi@gnu.org>
* nt/README.W32: Remove unnecessary version number and date
references.
* nt/README-UNDUMP.W32: Ditto.
2001-12-06 Gerd Moellmann <gerd@gnu.org>
* make-emacs: Add --trace-move.
2001-10-23 Andrew Innes <andrewi@gnu.org>
* nt/makedist.bat: Remove remaining obsolete reference to
GETTING.GNU.SOFTWARE.
2001-10-22 Gerd Moellmann <gerd@gnu.org>
* admin.el (set-version): Use `s' interactive spec for
version number.
2001-10-20 Gerd Moellmann <gerd@gnu.org>
* (Version 21.1 released.)
2001-10-20 Gerd Moellmann <gerd@gnu.org>
* admin.el (add-release-logs): Put the log entry in lispref, too.
2001-10-20 Miles Bader <miles@gnu.org>
* quick-install-emacs: Exit if we can't find some variable.
(AVOID): Add .orig & .rej files.
(get_config_var): Be more liberal about format of config.status
sed commands.
2001-10-19 Gerd Moellmann <gerd@gnu.org>
* admin.el: New file.
* build-configs: Add --help option. Add support for building
in arbitrary source trees.
2001-10-17 Gerd Moellmann <gerd@gnu.org>
* alloc-colors.c: New file.
2001-10-13 Gerd Moellmann <gerd@gnu.org>
* make-emacs: Add --boot switch for bootstrapping. Logs to
EMACS_ROOT/boot.log, renames previous log file to boot.log.old.
2001-10-05 Gerd Moellmann <gerd@gnu.org>
* Branch for 21.1.
2001-09-04 Andrew Innes <andrewi@gnu.org>
* admin/nt/makedist.bat: Remove reference to obsolete file
GETTING.GNU.SOFTWARE. Remove outdated comments. Explain about
version of tar used.
;; Local Variables:
;; coding: iso-2022-7bit
;; End:
Copyright (C) 2001 Free Software Foundation, Inc.
Copying and distribution of this file, with or without modification,
are permitted provided the copyright notice and this notice are preserved.
;;; arch-tag: 97728c77-77c0-4156-b669-0e8c07d94e5a

View file

@ -1,267 +0,0 @@
Tasks needed before the next release.
* TO BE DONE SHORTLY BEFORE RELEASE
** `undo-ask-before-discard', currently set to t for debugging purposes
has to be set to nil: when t, it can leak memory and cause other problems.
* NEW FEATURES
** Make VC-over-Tramp work where possible, or at least fail
gracefully if something isn't supported over Tramp.
To be done by Andre Spiegel <spiegel@gnu.org>.
** define-minor-mode should not put :require into defcustom.
See msg from rms to emacs-devel on 21 Dec.
** Update Speedbar.
** Enhance scroll-bar to handle tall line (similar to line-move).
** Adapt mouse-sel-mode to mouse-1-click-follows-link.
* FATAL ERRORS
** Make unexec handle memory mapping policy of the latest versions of Linux.
** Investigate reported crashes in compact_small_strings.
** Investigate reported crashes related to using an
invalid pointer from string_free_list.
* BUGS
** Ange-ftp should ignore irrelevant IPv6 errors:
Message-Id: <4121-Tue23Mar2004165249+0100-piet@cs.uu.nl>
From: "Piet van Oostrum" <piet@cs.uu.nl>
To: emacs-pretest-bug@gnu.org
Subject: Ange-ftp can't deal with IPV6/IPV4 fallback
Symptoms:
C-x C-f /ftp.nluug.nl:/
The problem is that the DNS first gives an IPV6 address. However our
router doesn't do IPV6. Ftp then falls back to IPV4:
ftp> open ftp.nluug.nl
Trying 2001:610:1:80aa:192:87:102:36...
ftp: connect to address 2001:610:1:80aa:192:87:102:36: No route to host
Trying 192.87.102.36...
Connected to ftp.nluug.nl.
Ange-ftp chokes on the `No route to host' message and doesn't look any
further.
I think in the near future we will see more of this problem, so it might be
time to make anfe-ftp more intelligent.
* GTK RELATED BUGS
** Make GTK scrollbars behave like others w.r.t. overscrolling.
* REDISPLAY RELATED BUGS
** Avoid unbreakable loops in redisplay.
Redisplay may loop if there is an error in some display property, e.g.
(space 'left-margin)
A fix would be to somehow disable handling of display properties if an error
is encountered.
* DOCUMENTATION
** Document Custom Themes.
** Finish updating the Emacs Lisp manual.
** Update the Emacs manual.
*** Update man/info.texi.
** Add missing years in copyright notices of all files.
Policy document admin/notes/years must be updated before
making further progress on this task!!!
Please record your name here and say which part of the distribution
you're going to handle.
DIRECTORY STATUS IN CHARGE
--------- ------ ---------
leim working Kenichi Handa
lisp/calc working Thien-Thi Nguyen
lisp/calendar working Glenn Morris
lisp/emulation working Thien-Thi Nguyen
lisp/eshell working Thien-Thi Nguyen
lisp/international done Kenichi Handa
lisp/languages done Kenichi Handa
lisp/mh-e working Thien-Thi Nguyen
lisp/net working Thien-Thi Nguyen
lisp/play working Thien-Thi Nguyen
lisp/term working Thien-Thi Nguyen
lisp/toolbar working Thien-Thi Nguyen
lisp/url working Thien-Thi Nguyen
** Update AUTHORS.
** Reorder NEWS entries.
** Check the Emacs manual.
Each manual section should be checked for factual correctness
regarding recent changes by at least two people. After each file
name, on the same line or the following line, come the names of the
people who have checked it.
SECTION READERS
-----------------------------
man/abbrevs.texi Chong Yidong Joakim Verona
man/anti.texi
man/basic.texi "Luc Teirlinck" Chong Yidong
man/buffers.texi "Luc Teirlinck" Chong Yidong
man/building.texi "Ted Zlatanov" <tzz@lifelogs.com>
man/calendar.texi joakim@verona.se Chong Yidong
man/cmdargs.texi Chong Yidong "Luc Teirlinck"
man/commands.texi "Luc Teirlinck" Chong Yidong
man/custom.texi Chong Yidong
man/dired.texi Chong Yidong joakim@verona.se
man/display.texi "Luc Teirlinck" Chong Yidong
man/emacs.texi "Luc Teirlinck" Lute Kamstra
man/entering.texi "Luc Teirlinck" Chong Yidong
man/files.texi "Luc Teirlinck" Chong Yidong
man/fixit.texi "Luc Teirlinck" Chong Yidong
man/frames.texi "Luc Teirlinck" Chong Yidong
man/glossary.texi Chong Yidong
man/help.texi "Luc Teirlinck" Chong Yidong
man/indent.texi "Luc Teirlinck" Chong Yidong
man/killing.texi "Luc Teirlinck" Chong Yidong
man/kmacro.texi "Luc Teirlinck" Chong Yidong
man/macos.texi
man/maintaining.texi
man/major.texi "Luc Teirlinck" Chong Yidong
man/mark.texi "Luc Teirlinck" Chong Yidong
man/mini.texi "Luc Teirlinck" Chong Yidong
man/misc.texi Chong Yidong
man/msdog.texi Chong Yidong
man/mule.texi "Luc Teirlinck"
man/m-x.texi "Luc Teirlinck" Chong Yidong
man/picture.texi Joakim Verona <joakim@verona.se> Chong Yidong
man/programs.texi "Stephen Eglen" Chong Yidong
man/regs.texi "Luc Teirlinck" Chong Yidong
man/rmail.texi Chong Yidong "Luc Teirlinck"
man/screen.texi "Luc Teirlinck" Chong Yidong
man/search.texi "Luc Teirlinck" Chong Yidong
man/sending.texi Chong Yidong "Luc Teirlinck"
man/text.texi "Luc Teirlinck" Chong Yidong
man/trouble.texi Chong Yidong
man/windows.texi "Luc Teirlinck" Chong Yidong
man/xresources.texi
** Check the Emacs Lisp manual.
Each manual section should be checked for factual correctness
regarding recent changes by at least two people. After each file
name, on the same line or the following line, come the names of the
people who have checked it.
SECTION READERS
----------------------------------
lispref/abbrevs.texi "Luc Teirlinck" Chong Yidong
lispref/advice.texi joakim@verona.se Chong Yidong
lispref/anti.texi
lispref/backups.texi "Luc Teirlinck" Chong Yidong
lispref/buffers.texi "Luc Teirlinck" Chong Yidong
lispref/calendar.texi Joakim Verona <joakim@verona.se> Chong Yidong
lispref/commands.texi "Luc Teirlinck" Chong Yidong
lispref/compile.texi "Luc Teirlinck" Chong Yidong
lispref/control.texi "Luc Teirlinck" Chong Yidong
lispref/customize.texi Chong Yidong
lispref/debugging.texi Joakim Verona <joakim@verona.se> Lute Kamstra
lispref/display.texi Chong Yidong
lispref/edebug.texi Chong Yidong
lispref/elisp.texi "Luc Teirlinck" Lute Kamstra
lispref/errors.texi "Luc Teirlinck"
lispref/eval.texi "Luc Teirlinck" Chong Yidong
lispref/files.texi "Luc Teirlinck" Chong Yidong
lispref/frames.texi "Luc Teirlinck" Chong Yidong
lispref/functions.texi "Luc Teirlinck" Chong Yidong
lispref/hash.texi "Luc Teirlinck" Chong Yidong
lispref/help.texi "Luc Teirlinck" Chong Yidong
lispref/hooks.texi Lute Kamstra
lispref/internals.texi "Luc Teirlinck" Chong Yidong
lispref/intro.texi "Luc Teirlinck"
lispref/keymaps.texi "Luc Teirlinck" Chong Yidong
lispref/lists.texi "Luc Teirlinck" Chong Yidong
lispref/loading.texi "Luc Teirlinck" Chong Yidong
lispref/locals.texi
lispref/macros.texi "Luc Teirlinck" Chong Yidong
lispref/maps.texi
lispref/markers.texi "Luc Teirlinck" Chong Yidong
lispref/minibuf.texi "Luc Teirlinck" Chong Yidong
lispref/modes.texi Chong Yidong
lispref/nonascii.texi "Luc Teirlinck" Chong Yidong
lispref/numbers.texi "Luc Teirlinck" Chong Yidong
lispref/objects.texi "Luc Teirlinck" Chong Yidong
lispref/os.texi "Luc Teirlinck" Chong Yidong
lispref/positions.texi "Luc Teirlinck" Chong Yidong
lispref/processes.texi Chong Yidong Thien-Thi Nguyen
lispref/searching.texi "Luc Teirlinck" Chong Yidong
lispref/sequences.texi "Luc Teirlinck" Chong Yidong
lispref/streams.texi "Luc Teirlinck" Chong Yidong
lispref/strings.texi "Luc Teirlinck" Chong Yidong
lispref/symbols.texi "Luc Teirlinck" Chong Yidong
lispref/syntax.texi "Luc Teirlinck" Chong Yidong
lispref/text.texi Chong Yidong
lispref/tips.texi "Luc Teirlinck" Chong Yidong
lispref/variables.texi "Luc Teirlinck" Chong Yidong
lispref/windows.texi "Luc Teirlinck" Chong Yidong
** Check the Emacs Tutorial.
The first line of every tutorial must begin with text ending in a period
(".", ASCII 0x2E) saying "Emacs Tutorial" in the respective language.
This should be followed by "See end for copying conditions", likewise
in the respective language.
After each file name, on the same line or the following line, come the
names of the people who have checked it.
SECTION READERS
----------------------------------
etc/TUTORIAL rms
etc/TUTORIAL.bg Ognyan Kulev <ogi@fmi.uni-sofia.bg>
etc/TUTORIAL.cn
etc/TUTORIAL.cs Pavel Janík <Pavel@Janik.cz>
etc/TUTORIAL.de Werner LEMBERG <wl@gnu.org>
etc/TUTORIAL.es Marcelo Toledo
etc/TUTORIAL.fr Thien-Thi Nguyen
etc/TUTORIAL.it Thien-Thi Nguyen
etc/TUTORIAL.ja Kenichi Handa <handa@m17n.org>
etc/TUTORIAL.ko
etc/TUTORIAL.nl Lute Kamstra
etc/TUTORIAL.pl Slawomir Nowaczyk <slawek@cs.lth.se>
etc/TUTORIAL.pt_BR Marcelo Toledo
etc/TUTORIAL.ro
etc/TUTORIAL.ru Alex Ott <alexott@gmail.com>
etc/TUTORIAL.sk Pavel Janík <Pavel@Janik.cz>
etc/TUTORIAL.sl Primoz PETERLIN <primoz.peterlin@biofiz.mf.uni-lj.si>
etc/TUTORIAL.sv Mats Lidell <matsl@contactor.se>
etc/TUTORIAL.th Virach Sornlertlamvanich <virach@tcllab.org>
etc/TUTORIAL.zh
Local variables:
mode: outline
end:

View file

@ -1,21 +0,0 @@
This directory contains scripts and other things useful for developing
and maintaining Emacs. These files are not part of Emacs releases
because they are not deemed generally useful, and you have to know
what you do when using them.
Brief description of scripts found here:
admin.el utilities for setting version numbers and alike
alloc-color.c a utility program that allocates a given number of
colors on X. Can be used to debug Emacs with
dense colormaps (PseudoColor).
build-configs build Emacs in various configurations
check-doc-strings check doc strings against documentation
cus-test.el tests for custom types and load problems
diff-tar-files show files added/removed between two tar files
make-emacs build Emacs in various ways
make-tarball.txt instructions to create pretest or release tarballs
quick-install-emacs install emacs quickly (`incrementally')
revdiff get CVS diffs of files
# arch-tag: 812b9461-bc0a-46a7-925e-24bd41118463

View file

@ -1,90 +0,0 @@
;;; admin.el --- utilities for Emacs administration
;; Copyright (C) 2001, 2005 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.
;;; Commentary:
;; add-release-logs Add ``Version X released'' change log entries.
;; set-version Change Emacs version number in source tree.
;;; Code:
(defun process-lines (program &rest args)
"Execute PROGRAM with ARGS, returning its output as a list of lines.
Signal an error if the program returns with a non-zero exit status."
(with-temp-buffer
(let ((status (apply 'call-process program nil (current-buffer) nil args)))
(unless (eq status 0)
(error "%s exited with status %s" program status))
(goto-char (point-min))
(let (lines)
(while (not (eobp))
(setq lines (cons (buffer-substring-no-properties
(line-beginning-position)
(line-end-position))
lines))
(forward-line 1))
(nreverse lines)))))
(defun add-release-logs (root version)
"Add \"Version VERSION released.\" change log entries in ROOT.
Root must be the root of an Emacs source tree."
(interactive "DEmacs root directory: \nNVersion number: ")
(setq root (expand-file-name root))
(unless (file-exists-p (expand-file-name "src/emacs.c" root))
(error "%s doesn't seem to be the root of an Emacs source tree" root))
(require 'add-log)
(let* ((logs (process-lines "find" root "-name" "ChangeLog"))
(entry (format "%s %s <%s>\n\n\t* Version %s released.\n\n"
(funcall add-log-time-format)
(or add-log-full-name (user-full-name))
(or add-log-mailing-address user-mail-address)
version)))
(dolist (log logs)
(unless (string-match "/gnus/" log)
(find-file log)
(goto-char (point-min))
(insert entry)))))
(defun set-version-in-file (root file version rx)
(find-file (expand-file-name file root))
(goto-char (point-min))
(unless (re-search-forward rx nil t)
(error "Version not found in %s" file))
(replace-match (format "%s" version) nil nil nil 1))
(defun set-version (root version)
"Set Emacs version to VERSION in relevant files under ROOT.
Root must be the root of an Emacs source tree."
(interactive "DEmacs root directory: \nsVersion number: ")
(unless (file-exists-p (expand-file-name "src/emacs.c" root))
(error "%s doesn't seem to be the root of an Emacs source tree" root))
(set-version-in-file root "lisp/version.el" version
(rx (and "emacs-version" (0+ space)
?\" (submatch (1+ (not (in ?\")))) ?\")))
(set-version-in-file root "README" version
(rx (and "version" (1+ space)
(submatch (1+ (in "0-9."))))))
(set-version-in-file root "man/emacs.texi" version
(rx (and "EMACSVER" (1+ space)
(submatch (1+ (in "0-9.")))))))
;;; arch-tag: 4ea83636-2293-408b-884e-ad64f22a3bf5
;; admin.el ends here.

View file

@ -1,116 +0,0 @@
/* Allocate X colors. Used for testing with dense colormaps.
Copyright (C) 2001 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. */
#include <X11/Xlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <unistd.h>
void
fatal (const char *fmt, ...)
{
va_list ap;
va_start (ap, fmt);
vfprintf (stderr, fmt, ap);
fputc ('\n', stderr);
va_end (ap);
exit (1);
}
void
usage (const char *progname)
{
fprintf (stderr, "Usage %s options\n", progname);
fprintf (stderr, "-n NCOLORS allcoate NCOLORS colors\n");
exit (1);
}
int
main (int argc, char **argv)
{
Display *dpy;
int opt, ncolors = 0, i;
XColor *allocated;
int nallocated;
XColor color;
Colormap cmap;
while ((opt = getopt (argc, argv, "n:")) != EOF)
switch (opt)
{
case 'n':
ncolors = atoi (optarg);
break;
case '?':
usage (argv[0]);
}
if (ncolors == 0)
usage (argv[0]);
dpy = XOpenDisplay ("");
if (dpy == NULL)
fatal ("Cannot open display");
cmap = DefaultColormap (dpy, 0);
allocated = malloc (ncolors * sizeof *allocated);
nallocated = 0;
memset (&color, 0, sizeof color);
while (nallocated < ncolors
&& color.red < 65536)
{
allocated[nallocated] = color;
if (XAllocColor (dpy, cmap, &allocated[nallocated]))
{
for (i = 0; i < nallocated; ++i)
if (allocated[i].red == allocated[nallocated].red
&& allocated[i].green == allocated[nallocated].green
&& allocated[i].blue == allocated[nallocated].blue)
break;
if (i == nallocated)
{
printf ("allocated %d/%d/%d\n",
allocated[nallocated].red,
allocated[nallocated].green,
allocated[nallocated].blue);
++nallocated;
}
}
++color.red;
++color.green;
++color.blue;
}
fprintf (stderr, "Waiting. Press ^C to stop.\n");
while (1)
sleep (10);
XCloseDisplay (dpy);
return 0;
}
/* arch-tag: f1be90ac-5b70-43c2-835e-5a6432a25145
(do not change this comment) */

View file

@ -1,101 +0,0 @@
#! /usr/bin/perl
# Copyright (C) 2001 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.
# Build Emacs in several different configurations.
require 5;
use Getopt::Long;
use File::Basename;
use Cwd;
@configs =
(
["--without-x", "--optim"],
["--without-x-toolkit", "--optim"],
["--without-toolkit-scroll-bars", "--optim"],
["--with-x-toolkit=lucid", "--optim"],
["--with-x-toolkit=motif", "--optim"],
["--with-x-toolkit=motif", "--enable-checking"],
["--with-x-toolkit=motif", "--gcc3"],
["--with-x-toolkit=motif", ""],
);
$log = "/tmp/$$.out";
print "Using log file $log\n";
unlink $log;
$root = $ENV{"EMACS_ROOT"};
$root = "/gd/gnu/emacs" unless $root;
$rc = GetOptions ("help" => \$help);
if ($rc == 0 || $help)
{
print <<USAGE;
build-configs
Build Emacs in different configurations.
--help show this help
USAGE
exit 1;
}
# Chdir to the top-level directory of the tree. If not in a tree
# containing Emacs, use the default.
while (! -f "src/emacs.c" && cwd () ne "/")
{
chdir "..";
}
chdir $root if cwd () eq "/";
print "Build in ", cwd (), "\n";
foreach $config (@configs)
{
my $configure_options = @$config[0];
my $make_options = @$config[1];
my $rc;
print "$configure_options, $make_options\n";
unlink "config.cache";
$rc = system ("$root/configure $configure_options >>$log 2>&1");
if ($rc != 0)
{
print "configure failed\n";
exit 1;
}
$rc = system ("make-emacs --all $make_options >>$log 2>&1");
if ($rc != 0)
{
print "Make failed\n";
exit 1;
}
}
# Local Variables:
# mode: cperl
# End:
# arch-tag: 20a4452d-610a-4e54-9abc-ffe79f5c0d30

View file

@ -1,301 +0,0 @@
: #-*- Perl -*-
eval 'exec perl -w -S $0 ${1+"$@"}' # Portability kludge
if 0; # Author: Martin Buchholz
use strict;
use POSIX;
(my $myName = $0) =~ s@.*/@@; my $usage="
Usage: $myName
Finds DOCSTRING arg mismatches between
formal parameters, docstrings, and lispref texi.
This program is in the public domain.\n";
die $usage if @ARGV;
die $usage unless -r "src/alloc.c" && -d "CVS" && -d "lisp";
my %texi_funtype;
my %texi_arglist;
my %code_funtype;
my %code_arglist;
sub FileContents {
local $/ = undef;
open (FILE, "< $_[0]") or die "$_[0]: $!";
return scalar <FILE>;
}
sub Show_details {
my ($show_details, $function, $parms, $docstring) = @_;
if ($show_details) {
print "function = $function $parms\n$docstring\n", "-" x 70, "\n";
}
}
sub Check_texi_function {
my ($function, $funtype, $docstring, @parms) = @_;
my %docstring_parm;
my %docstring_word;
my %arglist_parm;
my $show_details = 0;
if (exists $texi_funtype{$function}) {
print "duplicate texidoc: $function @parms\n";
return; # later definition likely bogus package def
}
$texi_funtype{$function} = $funtype;
$texi_arglist{$function} = "@parms";
foreach my $parm (@parms) {
next if $parm eq '&optional' || $parm eq '&rest';
$arglist_parm{$parm} = 1;
}
foreach my $parm ($docstring =~ /\@var{([^{}]+)}/g) {
$docstring_parm{$parm} = 1;
}
foreach my $hit ($docstring =~ /[^\`]\`[A-Za-z-]+\'/g)
{
print "texi \@code missing: $function: $hit\n";
$show_details = 1;
}
# (my $raw_docstring = $docstring) =~ s/\@var{[^{}]+}//g;
# $raw_docstring =~ s/[^a-zA-Z_-]+/ /g;
# foreach my $word (split (' ', $raw_docstring)) {
# if ($word =~ /^[A-Z][A-Z-]+$/) {
# print "Missing \@var: $function: $word\n";
# }
# }
foreach my $parm (keys %docstring_parm) {
if (! exists $arglist_parm{$parm}) {
print "bogus texi parm: $function: $parm\n";
$show_details = 1;
}
}
foreach my $parm (keys %arglist_parm) {
if (! exists $docstring_parm{$parm}) {
print "undocumented texi parm: $function: $parm\n";
$show_details = 1;
}
}
Show_details $show_details, $function, "@parms", $docstring;
}
sub Check_function {
my ($function, $funtype, $docstring, @parms) = @_;
my %docstring_parm;
my %arglist_parm;
my $show_details = 0;
if (exists $code_funtype{$function}) {
print "duplicate codedef: $function @parms\n";
return; # later definition likely bogus package def
}
$code_funtype{$function} = $funtype;
$code_arglist{$function} = "@parms";
#foreach my $parm ($parms =~ /\b[a-z0-9-]{3,}\b/g) {
# $arglist_parm{$parm} = 1;
#}
foreach my $parm (@parms) {
next if $parm eq '&optional' || $parm eq '&rest';
$arglist_parm{$parm} = 1;
}
my $doc_tmp = $docstring;
$doc_tmp =~ s/[^A-Za-z0-9_-]/ /g;
foreach my $parm (split (' ', $doc_tmp)) {
if ($parm =~ /^[A-Z][A-Z0-9-]*$/) {
next if $parm =~ /I18N/;
next if $parm =~ /M17N/;
$parm =~ tr[A-Z][a-z];
$docstring_parm{$parm} = 1;
}
}
# foreach my $parm ($docstring =~ /\b[A-Z0-9-]{1,}\b/g) {
# next if $parm =~ /-$/;
# $parm =~ tr[A-Z][a-z];
# $docstring_parm{$parm} = 1;
# }
foreach my $parm (keys %docstring_parm) {
next if $parm eq 'tty';
next if $parm eq 'fsf';
next if $parm eq 'note';
next if $parm eq 'warning';
next if $parm eq 'bug';
next if $parm eq 'ascii';
next if $parm eq 'iso';
next if $parm eq 'and';
next if $parm eq 'absolutely';
next if $parm eq 'doc';
next if $parm eq 'user';
next if $parm eq 'not';
next if $parm eq 'must';
next if $parm eq 'nil';
next if $parm eq 'esc';
next if $parm eq 'lfd';
next if $parm eq 'gpm';
next if $parm eq 'primary';
next if $parm eq 'secondary';
next if $parm eq 'clipboard';
next if length $parm < 3;
if (! exists $arglist_parm{$parm}) {
print "bogus parm: $function: $parm\n";
$show_details = 1;
}
}
foreach my $parm (keys %arglist_parm) {
if (! exists $docstring_parm{$parm}) {
print "Undocumented parm: $function: $parm\n";
$show_details = 1;
}
}
if ($docstring !~ /[\]}!\)\.]\s*\Z/m &&
$docstring =~ /\S/ &&
$docstring !~ /Keywords supported/)
{
print "Missing trailing period: $function\n";
$show_details = 1;
}
if (exists $texi_arglist{$function}
and "@parms" ne $texi_arglist{$function}
and not ("@parms" eq 'int nargs Lisp-Object *args'
&& $texi_arglist{$function} =~ /&rest/)) {
my @texi_parms = split (' ', $texi_arglist{$function});
my @a = ("@parms" =~ /&optional/g);
my @b = ("@parms" =~ /&rest/g);
my @c = ("@texi_parms" =~ /&optional/g);
my @d = ("@texi_parms" =~ /&rest/g);
if (@parms != @texi_parms
|| (@a != @c) || (@b != @d)) {
print "serious mismatch: $function: @parms --- @texi_parms\n";
} else {
print "texi mismatch: $function: @parms --- $texi_arglist{$function}\n";
}
$show_details = 1;
}
if (exists $texi_funtype{$function}
&& $texi_funtype{$function} ne $funtype) {
print "interactiveness mismatch: $function: $funtype --- $texi_funtype{$function}\n";
$show_details = 1;
}
Show_details $show_details, $function, "@parms", $docstring;
}
my $lisprefdir;
if (-d "man/lispref") { $lisprefdir = "man/lispref"; }
elsif (-d "lispref") { $lisprefdir = "lispref"; }
else { die "Can't find lispref texi directory.\n"; }
open (FIND, "find $lisprefdir -name '*.texi' -print |") or die;
while (my $file = <FIND>) {
my @matches = ((FileContents $file) =~
/\@(def(?:fn|un))([^\n]+)\n(.*?)\n\@end def(?:un|fn)/sgo);
# /^\@(def(?:un|fn))\s+(.*)\n([.|\n]*?)^\@end def(?:un|fn)\n/mgo);
while (@matches) {
my ($defform, $defn, $docstring) = splice (@matches, 0, 3);
#print "defform = $defform\n";
#print "defn = $defn\n";
#print "docstring = $docstring\n";
my ($function, @parms, $funtype);
if ($defform eq 'defun') {
($funtype, $function, @parms) = ('Function', split (' ', $defn));
} else {
die unless $defform eq 'deffn';
($funtype, $function, @parms) = split (' ', $defn);
}
next if $funtype eq '{Syntax' or $funtype eq '{Prefix';
Check_texi_function $function, $funtype, $docstring, @parms;
}
}
open (FIND, "find src -name '*.c' -print |") or die;
while (my $file = <FIND>) {
my @matches =
((FileContents $file) =~
/\bDEFUN\s*\(\s*\"((?:[^\\\"]|\\.)+)\"\s*,\s*\S+\s*,\s*(\S+)\s*,\s*(\S+)\s*,\s*((?:0|\"(?:(?:[^\\\"]|\\.)*)\"))\s*,\s*\/\*(.*?)\*\/\s*\(([^()]*)\)\)/sgo);
while (@matches) {
my ($function, $minargs, $maxargs, $interactive, $docstring, $parms) = splice (@matches, 0, 6);
$docstring =~ s/^\n+//s;
$docstring =~ s/\n+$//s;
$parms =~ s/,/ /g;
my @parms = split (' ',$parms);
for (@parms) { tr/_/-/; s/-$//; }
if ($parms !~ /Lisp_Object/) {
if ($minargs < @parms) {
if ($maxargs =~ /^\d+$/) {
die unless $maxargs eq @parms;
splice (@parms, $minargs, 0, '&optional');
}
}
}
my $funtype = ($interactive =~ /\"/ ? 'Command' : 'Function');
Check_function $function, $funtype, $docstring, @parms;
}
}
my @pkgs;
if (-d "../xemacs-packages") {
@pkgs = qw (libs/edebug libs/xemacs-base comm/eudc oa/edit-utils);
} else {
@pkgs = ();
}
for (@pkgs) { s@^@../xemacs-packages/@; }
open (FIND, "find lisp @pkgs -name '*.el' -print |") or die;
while (my $file = <FIND>) {
my $contents = FileContents $file;
$contents =~ s/(?:\s|;);.*//mog;
my @matches =
($contents =~
/\((def(?:un|subst|macro))\s+(\S+)\s+\(([^()]*)\)\s+\"((?:[^\\\"]|\\.)+)\"(.*?)\)/sgo);
while (@matches) {
my ($defform, $function, $parms, $docstring, $code_fragment) = splice (@matches, 0, 5);
my $funtype =
$defform eq 'defmacro' ? 'Macro' :
$code_fragment =~ /^\s*\(interactive\b/so ? 'Command' :
'Function';
$docstring =~ s/^\n+//s;
$docstring =~ s/\n+$//s;
my @parms = split (' ', $parms);
Check_function $function, $funtype, $docstring, @parms;
}
}
open (FIND, "find lisp @pkgs -name '*.el' -print |") or die;
while (my $file = <FIND>) {
my $contents = FileContents $file;
$contents =~ s/(?:\s|;);.*//mog;
my @matches = ($contents =~ /^\((?:defalias|fset|define-function)\s+\'([A-Za-z0-9_-]+)\s+\'([A-Za-z0-9_-]+)/mog);
while (@matches) {
my ($alias, $aliasee) = splice (@matches, 0, 2);
print "alias $alias aliasee $aliasee\n";
if (exists $code_funtype{$aliasee}) { $code_funtype{$alias} = $code_funtype{$aliasee}; }
if (exists $code_arglist{$aliasee}) { $code_arglist{$alias} = $code_arglist{$aliasee}; }
}
}
foreach my $fun (sort keys %texi_funtype) {
if (not exists $code_funtype{$fun}) {
print "nuke-this-doc: $fun $texi_funtype{$fun}\n";
}
}
# arch-tag: e75331f5-5d1b-4393-ad5b-b0f87b5d47b0

View file

@ -1,530 +0,0 @@
;;; cus-test.el --- tests for custom types and load problems
;; Copyright (C) 1998, 2000, 2002 Free Software Foundation, Inc.
;; Author: Markus Rost <markus.rost@mathematik.uni-regensburg.de>
;; Maintainer: Markus Rost <rost@math.ohio-state.edu>
;; Created: 13 Sep 1998
;; Keywords: maint
;; 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.
;;; Commentary:
;; This file provides simple tests to detect custom options with
;; incorrect customization types and load problems for custom and
;; autoload dependencies.
;;
;; The basic tests can be run in batch mode. Invoke them with
;;
;; src/emacs -batch -l admin/cus-test.el -f cus-test-opts
;;
;; src/emacs -batch -l admin/cus-test.el -f cus-test-deps
;;
;; src/emacs -batch -l admin/cus-test.el -f cus-test-libs
;;
;; src/emacs -batch -l admin/cus-test.el -f cus-test-noloads
;;
;; in the emacs source directory.
;;
;; For interactive use: Load this file. Then
;;
;; M-x cus-test-apropos REGEXP RET
;;
;; checks the options matching REGEXP. In particular
;;
;; M-x cus-test-apropos RET
;;
;; checks all options. The detected options are stored in the
;; variable `cus-test-errors'.
;;
;; Only those options are checked which have been already loaded.
;; Therefore `cus-test-apropos' is more efficient after loading many
;; libraries.
;;
;; M-x cus-test-load-custom-loads
;;
;; loads all (!) custom dependencies and
;;
;; M-x cus-test-load-libs
;;
;; loads all (!) libraries with autoloads.
;;
;; Options with a custom-get property, usually defined by a :get
;; declaration, are stored in the variable
;;
;; `cus-test-vars-with-custom-get'
;;
;; Options with a state of 'changed ("changed outside the customize
;; buffer") are stored in the variable
;;
;; `cus-test-vars-with-changed-state'
;;
;; These lists are prepared just in case one wants to investigate
;; those options further.
;;
;; The command `cus-test-opts' tests many (all?) custom options.
;;
;; The command `cus-test-deps' is like `cus-test-load-custom-loads'
;; but reports about load errors.
;;
;; The command `cus-test-libs' runs for all libraries with autoloads
;; separate emacs processes of the form "emacs -batch -l LIB".
;;
;; The command `cus-test-noloads' returns a list of variables which
;; are somewhere declared as custom options, but not loaded by
;; `custom-load-symbol'.
;;
;; Some results from October 2002:
;;
;; 4523 options tested
;; The following variables might have problems:
;; ps-mule-font-info-database-default
;; grep-tree-command
;; grep-find-command
;;
;; 288 features required
;; 10 files loaded
;; The following load problems appeared:
;; (killing x-win (file-error Cannot open load file x-win))
;; Symbol faces has loaddefs as custom dependency
;; (reftex-index-support reftex-vars (void-function reftex-set-dirty))
;; (eshell-script em-script (void-variable eshell-directory-name))
;; (pcomplete em-cmpl (void-function eshell-under-windows-p))
;; (eshell-ext esh-ext (void-function eshell-under-windows-p))
;; ...
;;
;; 422 libraries had no load errors
;; The following load problems appeared:
;; (eudc-export error 255)
;; (ada-xref error 255)
;; (ada-stmt error 255)
;;
;; The following options were not loaded by custom-load-symbol:
;; edt-bottom-scroll-margin
;; edt-keep-current-page-delimiter
;; edt-top-scroll-margin
;; edt-use-EDT-control-key-bindings
;; edt-word-entities
;; grep-find-use-xargs
;; master-mode-hook
;; outline-level
;; outline-minor-mode-hook
;; refill-mode-hook
;;; Code:
;;; Workarounds. For a smooth run and to avoid some side effects.
(defvar cus-test-after-load-libs-hook nil
"Used to switch off undesired side effects of loading libraries.")
(defvar cus-test-skip-list nil
"List of variables to disregard by `cus-test-apropos'.")
(defvar cus-test-libs-noloads nil
"List of libraries not to load by `cus-test-load-libs'.")
;; The file eudc-export.el loads libraries "bbdb" and "bbdb-com" which
;; are not part of GNU Emacs: (locate-library "bbdb") => nil
;; We avoid the resulting errors from loading eudc-export.el:
(provide 'bbdb)
(provide 'bbdb-com)
;; This avoids a hang of `cus-test-apropos' in 21.2.
;; (add-to-list 'cus-test-skip-list 'sh-alias-alist)
;; Loading dunnet in batch mode leads to a Dead end.
(let (noninteractive) (load "dunnet"))
(add-to-list 'cus-test-libs-noloads "dunnet")
;; Never Viperize.
(setq viper-mode nil)
;; Don't create a file `save-place-file'.
(eval-after-load "saveplace"
'(remove-hook 'kill-emacs-hook 'save-place-kill-emacs-hook))
;; Don't create a file `abbrev-file-name'.
(setq save-abbrevs nil)
;; Avoid compile logs from adviced functions.
(eval-after-load "bytecomp"
'(setq ad-default-compilation-action 'never))
;;; Main code:
;; We want to log all messages.
(setq message-log-max t)
(require 'cus-edit)
(require 'cus-load)
(defvar cus-test-errors nil
"List of problematic variables found by `cus-test-apropos'.")
(defvar cus-test-tested-variables nil
"List of options tested by last call of `cus-test-apropos'.")
;; I haven't understood this :get stuff. The symbols with a
;; custom-get property are stored here.
(defvar cus-test-vars-with-custom-get nil
"Set by `cus-test-apropos' to a list of options with :get property.")
(defvar cus-test-vars-with-changed-state nil
"Set by `cus-test-apropos' to a list of options with state 'changed.")
(defvar cus-test-deps-errors nil
"List of require/load problems found by `cus-test-deps'.")
(defvar cus-test-deps-required nil
"List of dependencies required by `cus-test-deps'.
Only unloaded features will be require'd.")
(defvar cus-test-deps-loaded nil
"List of dependencies loaded by `cus-test-deps'.")
(defvar cus-test-libs-errors nil
"List of load problems found by `cus-test-load-libs' or `cus-test-libs'.")
(defvar cus-test-libs-loaded nil
"List of files loaded by `cus-test-load-libs' or `cus-test-libs'.")
(defvar cus-test-vars-not-cus-loaded nil
"A list of options not loaded by `custom-load-symbol'.
Set by `cus-test-noloads'.")
;; (defvar cus-test-vars-cus-loaded nil
;; "A list of options loaded by `custom-load-symbol'.")
(defun cus-test-apropos (regexp)
"Check the options matching REGEXP.
The detected problematic options are stored in `cus-test-errors'."
(interactive "sVariable regexp: ")
(setq cus-test-errors nil)
(setq cus-test-tested-variables nil)
(mapc
(lambda (symbol)
(push symbol cus-test-tested-variables)
;; Be verbose in case we hang.
(message "Cus Test running...%s %s"
(length cus-test-tested-variables) symbol)
(condition-case alpha
(let* ((type (custom-variable-type symbol))
(conv (widget-convert type))
(get (or (get symbol 'custom-get) 'default-value))
values
mismatch)
(when (default-boundp symbol)
(push (funcall get symbol) values)
(push (eval (car (get symbol 'standard-value))) values))
(if (boundp symbol)
(push (symbol-value symbol) values))
;; That does not work.
;; (push (widget-get conv :value) values)
;; Check the values
(mapc (lambda (value)
(unless (widget-apply conv :match value)
(setq mismatch 'mismatch)))
values)
;; Store symbols with a custom-get property.
(when (get symbol 'custom-get)
(add-to-list 'cus-test-vars-with-custom-get symbol))
;; Changed outside the customize buffer?
;; This routine is not very much tested.
(let ((c-value
(or (get symbol 'customized-value)
(get symbol 'saved-value)
(get symbol 'standard-value))))
(and (consp c-value)
(boundp symbol)
(not (equal (eval (car c-value)) (symbol-value symbol)))
(add-to-list 'cus-test-vars-with-changed-state symbol)))
(if mismatch
(push symbol cus-test-errors)))
(error
(push symbol cus-test-errors)
(message "Error for %s: %s" symbol alpha))))
(cus-test-get-options regexp))
(message "%s options tested"
(length cus-test-tested-variables))
(cus-test-errors-display))
(defun cus-test-get-options (regexp)
"Return a list of custom options matching REGEXP."
(let (found)
(mapatoms
(lambda (symbol)
(and
(or
;; (user-variable-p symbol)
(get symbol 'standard-value)
;; (get symbol 'saved-value)
(get symbol 'custom-type))
(string-match regexp (symbol-name symbol))
(not (member symbol cus-test-skip-list))
(push symbol found))))
found))
(defun cus-test-errors-display ()
"Report about the errors found by cus-test."
(with-output-to-temp-buffer "*cus-test-errors*"
(set-buffer standard-output)
(insert (format "Cus Test tested %s variables.\
See `cus-test-tested-variables'.\n\n"
(length cus-test-tested-variables)))
(if (not cus-test-errors)
(insert "No errors found by cus-test.")
(insert "The following variables seem to have problems:\n\n")
(dolist (e cus-test-errors)
(insert (symbol-name e) "\n")))))
(defun cus-test-load-custom-loads ()
"Call `custom-load-symbol' on all atoms."
(interactive)
(mapatoms 'custom-load-symbol)
(run-hooks 'cus-test-after-load-libs-hook))
(defun cus-test-load-libs ()
"Load the libraries with autoloads.
Don't load libraries in `cus-test-libs-noloads'."
(interactive)
(setq cus-test-libs-errors nil)
(setq cus-test-libs-loaded nil)
(mapc
(lambda (file)
(condition-case alpha
(unless (member file cus-test-libs-noloads)
(load file)
(push file cus-test-libs-loaded))
(error
(push (cons file alpha) cus-test-libs-errors)
(message "Error for %s: %s" file alpha))))
(cus-test-get-autoload-deps))
(message "%s libraries loaded successfully"
(length cus-test-libs-loaded))
(if (not cus-test-libs-errors)
(message "No load problems encountered")
(message "The following load problems appeared:")
(cus-test-message cus-test-libs-errors))
(run-hooks 'cus-test-after-load-libs-hook))
(defun cus-test-get-autoload-deps ()
"Return the list of libraries with autoloads."
(with-temp-buffer
(insert-file-contents (locate-library "loaddefs"))
;; This is from `customize-option'.
(let (deps file)
(while
(search-forward "\n;;; Generated autoloads from " nil t)
(goto-char (match-end 0))
(setq file (buffer-substring (point)
(progn (end-of-line) (point))))
(setq file (file-name-nondirectory file))
(string-match "\\.el\\'" file)
(setq file (substring file 0 (match-beginning 0)))
(setq deps (nconc deps (list file))))
deps)))
(defun cus-test-message (list)
"Print the members of LIST line by line."
(dolist (m list) (message "%s" m)))
;;; The routines for batch mode:
(defun cus-test-opts ()
"Test custom options.
This function is suitable for batch mode. E.g., invoke
src/emacs -batch -l admin/cus-test.el -f cus-test-opts
in the Emacs source directory."
(interactive)
(message "Running %s" 'cus-test-load-libs)
(cus-test-load-libs)
(message "Running %s" 'cus-test-load-custom-loads)
(cus-test-load-custom-loads)
(message "Running %s" 'cus-test-apropos)
(cus-test-apropos "")
(if (not cus-test-errors)
(message "No problems found")
(message "The following options might have problems:")
(cus-test-message cus-test-errors)))
(defun cus-test-deps ()
"Run a verbose version of `custom-load-symbol' on all atoms.
This function is suitable for batch mode. E.g., invoke
src/emacs -batch -l admin/cus-test.el -f cus-test-deps
in the Emacs source directory."
(interactive)
(setq cus-test-deps-errors nil)
(setq cus-test-deps-required nil)
(setq cus-test-deps-loaded nil)
(mapatoms
;; This code is mainly from `custom-load-symbol'.
(lambda (symbol)
(let ((custom-load-recursion t))
(dolist (load (get symbol 'custom-loads))
(cond
((symbolp load)
;; (condition-case nil (require load) (error nil))
(condition-case alpha
(unless (featurep load)
(require load)
(push (list symbol load) cus-test-deps-required))
(error
(push (list symbol load alpha) cus-test-deps-errors)
(message "Require problem: %s %s %s" symbol load alpha))))
((equal load "loaddefs")
(push
(message "Symbol %s has loaddefs as custom dependency" symbol)
cus-test-deps-errors))
;; This is subsumed by the test below, but it's much
;; faster.
((assoc load load-history))
;; This was just
;; (assoc (locate-library load) load-history)
;; but has been optimized not to load locate-library
;; if not necessary.
((let ((regexp (concat "\\(\\`\\|/\\)" (regexp-quote load)
"\\(\\'\\|\\.\\)"))
(found nil))
(dolist (loaded load-history)
(and (stringp (car loaded))
(string-match regexp (car loaded))
(setq found t)))
found))
;; Without this, we would load cus-edit recursively.
;; We are still loading it when we call this,
;; and it is not in load-history yet.
((equal load "cus-edit"))
;; This would ignore load problems with files in
;; lisp/term/
;; ((locate-library (concat term-file-prefix load)))
(t
;; (condition-case nil (load load) (error nil))
(condition-case alpha
(progn
(load load)
(push (list symbol load) cus-test-deps-loaded))
(error
(push (list symbol load alpha) cus-test-deps-errors)
(message "Load Problem: %s %s %s" symbol load alpha))))
)))))
(message "%s features required"
(length cus-test-deps-required))
(message "%s files loaded"
(length cus-test-deps-loaded))
(if (not cus-test-deps-errors)
(message "No load problems encountered")
(message "The following load problems appeared:")
(cus-test-message cus-test-deps-errors))
(run-hooks 'cus-test-after-load-libs-hook))
(defun cus-test-libs ()
"Load the libraries with autoloads in separate processes.
This function is useful to detect load problems of libraries.
It is suitable for batch mode. E.g., invoke
src/emacs -batch -l admin/cus-test.el -f cus-test-libs
in the Emacs source directory."
(interactive)
(with-temp-buffer
(setq cus-test-libs-errors nil)
(setq cus-test-libs-loaded nil)
(cd source-directory)
(if (not (file-executable-p "src/emacs"))
(error "No Emacs executable in %ssrc" default-directory))
(mapc
(lambda (file)
(condition-case alpha
(let (fn cmd status)
(setq fn (locate-library file))
(if (not fn)
(error "Library %s not found" file))
(setq cmd (concat "src/emacs -batch -l " fn))
(setq status (call-process shell-file-name nil nil nil
shell-command-switch cmd))
(if (equal status 0)
(message "%s" file)
(error "%s" status))
(push file cus-test-libs-loaded))
(error
(push (cons file alpha) cus-test-libs-errors)
(message "Error for %s: %s" file alpha))))
(cus-test-get-autoload-deps))
(message "Default Directory: %s" default-directory)
(message "%s libraries had no load errors"
(length cus-test-libs-loaded))
(if (not cus-test-libs-errors)
(message "No load problems encountered")
(message "The following load problems appeared:")
(cus-test-message cus-test-libs-errors))
(run-hooks 'cus-test-after-load-libs-hook)))
(defun cus-test-noloads ()
"Find custom options not loaded by `custom-load-symbol'.
Calling this function after `cus-test-load-libs' is not meaningful.
It is suitable for batch mode. E.g., invoke
src/emacs -batch -l admin/cus-test.el -f cus-test-noloads
in the Emacs source directory."
(interactive)
(let (cus-loaded)
(message "Running %s" 'cus-test-load-custom-loads)
(cus-test-load-custom-loads)
(setq cus-loaded
(cus-test-get-options ""))
(message "Running %s" 'cus-test-load-libs)
(cus-test-load-libs)
(setq cus-test-vars-not-cus-loaded
(cus-test-get-options ""))
(dolist (o cus-loaded)
(setq cus-test-vars-not-cus-loaded
(delete o cus-test-vars-not-cus-loaded)))
(if (not cus-test-vars-not-cus-loaded)
(message "No options not loaded by custom-load-symbol found")
(message "The following options were not loaded by custom-load-symbol:")
(cus-test-message
(sort cus-test-vars-not-cus-loaded 'string<)))))
;; And last but not least a quiz:
;;
;; Evaluation of the form (customize-option 'debug-on-error) yields a
;; *Customize* buffer with a mismatch mess. Why?
(provide 'cus-test)
;;; arch-tag: a4991a31-548d-48fb-8ba1-1ebbe68eb2e7
;;; cus-test.el ends here

View file

@ -1,45 +0,0 @@
#! /bin/sh
# Copyright (C) 2001 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.
if [ $# != 2 ]; then
cat <<EOF
Usage: $0 OLD-TAR NEW-TAR
Print a diff of the files in OLD-TAR and NEW-TAR. Used for checking
the contents of Emacs tar files.
EOF
exit 1;
fi
old_tar=$1
new_tar=$2
old_tmp=/tmp/old.$$
new_tmp=/tmp/new.$$
trap "rm -f $old_tmp $new_tmp; exit 1" 1 2 15
tar tzf $old_tar | sed -e 's,^[^/]*,,' | sort > $old_tmp
tar tzf $new_tar | sed -e 's,^[^/]*,,' | sort > $new_tmp
diff -u $old_tmp $new_tmp
rm -f $new_tmp $old_tmp
# arch-tag: ef2c96e2-ea67-4668-925c-d9a6f3d205cf

View file

@ -1,442 +0,0 @@
Here are the guidelines for being an Emacs pretester.
If you would like to do this, say so, and I'll add you to
the pretest list.
Information for Emacs Pretesters
The purpose of Emacs pretesting is to verify that the new Emacs
distribution, about to be released, works properly on your system *with
no change whatever*, when installed following the precise
recommendations that come with the Emacs distribution.
Here are some guidelines on how to do pretesting so as to make it
helpful. All of them follow from common sense together with the
nature of the purpose and the situation.
Please save this file, and reread it when a new series of pretests
starts.
* Get the pretest from gnu/emacs/emacs-MM.NN.tar.gz and
gnu/emacs/leim-MM.NN.tar.gz on alpha.gnu.org.
* After a few days of testing, if there are no problems, please report
that Emacs works for you and what configuration you are testing it on.
* If you want to communicate with other pretesters, send mail to
emacs-pretesters@gnu.org. I don't use that mailing list when I send
to you because I've found that mailing lists tend to amplify random
noise into long discussions or even arguments, and that can waste a
lot of time. But when you have a reason to ask other pretesters for
help, you can do it that way.
* It is absolutely vital that you tell me about even the smallest
change or departure from the standard sources and procedure.
Otherwise, you are not testing the same program that I asked you to
test. Testing a different program is usually of no use whatever. It
can even cause trouble if you fail to tell me that you tested some
other program instead of what I am about to release. I might think
that Emacs works, when in fact it has not even been tried, and might
have a glaring fault.
* Don't use a site-load.el file or a site-init.el file when you pretest.
Using either of those files means you are not testing Emacs as a typical
site would use it.
Actually, it does no harm to test Emacs with such customizations *as
well as* testing it "out of the box". Anything you do that could find
a bug is useful, as long as you make sure I know exactly what you did.
The important point is that testing with local changes is no
substitute for testing Emacs exactly as it is distributed.
* Even changing the compilation options counts as a change in the
program. The Emacs sources specify which compilation options to use.
Some of them are specified in makefiles, and some in machine-specific
configuration files. They also give you ways to override this--but if
you do, then you are not testing what ordinary users will do.
Therefore, when pretesting, it is vital to test with the default
compilation options.
(Testing with a different set of options can be useful *in addition*,
but not *instead of* the default options.)
* The machine and system configuration files of Emacs are parts of
Emacs. So when you test Emacs, you need to do it with the
configuration files that come with Emacs.
If Emacs does not come with configuration files for a certain machine,
and you test it with configuration files that don't come with Emacs,
this is effectively changing Emacs. Because the crucial fact about
the planned release is that, without changes, it doesn't work on that
machine.
To make Emacs work on that machine, I would need to install new
configuration files. That is not out of the question, since it is
safe--it certainly won't break any other machines that already work.
But you will have to rush me the legal papers to give the FSF
permission to use such a large piece of text.
* Look in the etc/MACHINES file.
The etc/MACHINES file says which configuration files to use for your
machine, so use the ones that are recommended. If you guess, you might
guess wrong and encounter spurious difficulties. What's more, if you
don't follow etc/MACHINES then you aren't helping to test that its
recommendations are valid.
The etc/MACHINES file may describe other things that you need to do
to make Emacs work on your machine. If so, you should follow these
recommendations also, for the same reason.
* Send your problem reports to emacs-pretest-bug@gnu.org, not
bug-gnu-emacs.
Sometimes I won't know what to do about a system-dependent issue, and
I may need people to tell me what happens if you try a certain thing
on a certain system. When this happens, I'll send out a query.
* Don't delay sending information.
When you test on a system and encounter no problems, please tell me
about it right away. That way, I will know that someone has tested
Emacs on that kind of system.
Please don't wait for several days "to see if it really works before
you say anything." Tell me right away that Emacs seems basically to
work; then, if you notice a problem a few days later, tell me
immediately about that when you see it.
It is okay if you double check things before reporting a problem, such
as to see if you can easily fix it. But don't wait very long. A good
rule to use in pretesting is always to tell me about every problem on
the same day you encounter it, even if that means you can't find a
solution before you report the problem.
I'd much rather hear about a problem today and a solution tomorrow
than get both of them tomorrow at the same time.
* Make each bug report self-contained.
If you refer back to another message, whether from you or from someone
else, then it will be necessary for anyone who wants to investigate
the bug to find the other message. This may be difficult, it is
probably time-consuming.
To help me save time, simply copy the relevant parts of any previous
messages into your own bug report.
In particular, if I ask you for more information because a bug report
was incomplete, it is best to send me the *entire* collection of
relevant information, all together. If you send just the additional
information, that makes me do extra work. There is even a risk that
I won't remember what question you are sending me the answer to.
* When you encounter a bug that manifests itself as a Lisp error,
try setting debug-on-error to t and making the bug happen again.
Then you will get a Lisp backtrace. Including that in your bug report
is very useful.
* Debugging optimized code is possible, if you compile with GCC, but
in some cases the optimized code can be confusing. If you are not
accustomed to that, recompile Emacs without -O. One way to do this is
make clean
make CFLAGS=-g
* If you use X windows, it is a good idea to run Emacs under GDB (or
some other suitable debugger) *all the time*, at least while
pretesting.
Then, when Emacs crashes, you will be able to debug the live process,
not just a core dump. The `pr' command defined in src/.gdbinit is very
useful in this case for examining Lisp_Object values as they would
appear in Lisp.
If you can't use `pr' because Emacs has got a fault already, or
because you have only a core dump, you can use `xtype' to look at the
type of a value, and then choose one of the other commands `xsymbol',
`xstring', `xcons', `xvector' and so on to examine the contents.
I myself *always* run Emacs under GDB so that I can debug conveniently
if the occasion arises.
* To get Lisp-level backtrace information within GDB,
look for stack frames that call Ffuncall. Select them one by one in GDB
and type this:
p *args
pr
This will print the name of the Lisp function called by that level
of function calling.
By printing the remaining elements of args, you can see the argument
values. Here's how to print the first argument:
p args[1]
pr
If you do not have a live process, you can use xtype and the other
x... commands such as xsymbol to get such information, albeit less
conveniently.
* Even with a live process, these x... commands are useful for
examining the fields in a buffer, window, process, frame or marker.
Here's an example using concepts explained in the node "Value History"
of the GDB manual to print the variable frame from this line in
xmenu.c:
buf.frame_or_window = Fcons (frame, prefix);
First, use these commands:
cd src
gdb emacs
b xmenu.c:1209
r -q
Then type C-x 5 2 to create a new frame, and it hits the breakpoint:
(gdb) p frame
$1 = 1077872640
(gdb) xtype
Lisp_Vectorlike
PVEC_FRAME
(gdb) xframe
$2 = (struct frame *) 0x3f0800
(gdb) p *$
$3 = {
size = 536871989,
next = 0x366240,
name = 809661752,
[...]
}
(gdb) p $3->name
$4 = 809661752
Now we can use `pr' to print the name of the frame:
(gdb) pr
"emacs@steenrod.math.nwu.edu"
* The Emacs C code heavily uses macros defined in lisp.h. So suppose
we want the address of the l-value expression near the bottom of
`kbd_buffer_store_event' from keyboard.c:
XVECTOR (kbd_buffer_frame_or_window)->contents[kbd_store_ptr
- kbd_buffer]
= event->frame_or_window);
XVECTOR is a macro, and therefore GDB does not know about it.
GDB cannot evaluate p XVECTOR (kbd_buffer_frame_or_window).
However, you can use the xvector command in GDB to get the same
result. Here is how:
(gdb) p kbd_buffer_frame_or_window
$1 = 1078005760
(gdb) xvector
$2 = (struct Lisp_Vector *) 0x411000
0
(gdb) p $->contents[kbd_store_ptr - kbd_buffer]
$3 = 1077872640
(gdb) p &$
$4 = (int *) 0x411008
* Here's a related example of macros and the GDB `define' command.
There are many Lisp vectors such as `recent_keys', which contains the
last 100 keystrokes. We can print this Lisp vector
p recent_keys
pr
But this may be inconvenient, since `recent_keys' is much more verbose
than `C-h l'. We might want to print only the last 10 elements of
this vector. `recent_keys' is updated in keyboard.c by the command
XVECTOR (recent_keys)->contents[recent_keys_index] = c;
So we define a GDB command `xvector-elts', so the last 10 keystrokes
are printed by
xvector-elts recent_keys recent_keys_index 10
where you can define xvector-elts as follows:
define xvector-elts
set $i = 0
p $arg0
xvector
set $foo = $
while $i < $arg2
p $foo->contents[$arg1-($i++)]
pr
end
document xvector-elts
Prints a range of elements of a Lisp vector.
xvector-elts v n i
prints `i' elements of the vector `v' ending at the index `n'.
end
* To debug what happens while preloading and dumping Emacs,
do `gdb temacs' and start it with `r -batch -l loadup dump'.
If temacs actually succeeds when running under GDB in this way, do not
try to run the dumped Emacs, because it was dumped with the GDB
breakpoints in it.
* If you encounter X protocol errors, try evaluating (x-synchronize t).
That puts Emacs into synchronous mode, where each Xlib call checks for
errors before it returns. This mode is much slower, but when you get
an error, you will see exactly which call really caused the error.
* If the symptom of the bug is that Emacs fails to respond, don't
assume Emacs is `hung'--it may instead be in an infinite loop. To
find out which, make the problem happen under GDB and stop Emacs once
it is not responding. (If Emacs is using X Windows directly, you can
stop Emacs by typing C-z at the GDB job.) Then try stepping with
`step'. If Emacs is hung, the `step' command won't return. If it is
looping, `step' will return.
If this shows Emacs is hung in a system call, stop it again and
examine the arguments of the call. In your bug report, state exactly
where in the source the system call is, and what the arguments are.
If Emacs is in an infinite loop, please determine where the loop
starts and ends. The easiest way to do this is to use the GDB command
`finish'. Each time you use it, Emacs resumes execution until it
exits one stack frame. Keep typing `finish' until it doesn't
return--that means the infinite loop is in the stack frame which you
just tried to finish.
Stop Emacs again, and use `finish' repeatedly again until you get back
to that frame. Then use `next' to step through that frame. By
stepping, you will see where the loop starts and ends. Also please
examine the data being used in the loop and try to determine why the
loop does not exit when it should. Include all of this information in
your bug report.
* If certain operations in Emacs are slower than they used to be, here
is some advice for how to find out why.
Stop Emacs repeatedly during the slow operation, and make a backtrace
each time. Compare the backtraces looking for a pattern--a specific
function that shows up more often than you'd expect.
If you don't see a pattern in the C backtraces, get some Lisp
backtrace information by looking at Ffuncall frames (see above), and
again look for a pattern.
When using X, you can stop Emacs at any time by typing C-z at GDB.
When not using X, you can do this with C-g.
* Configure tries to figure out what kind of system you have by
compiling and linking programs which calls various functions and looks
at whether that succeeds. The file config.log contains any messages
produced by compilers while running configure, to aid debugging if
configure makes a mistake. But note that config.cache reads:
# Giving --cache-file=/dev/null disables caching, for debugging configure.
or more simply,
rm config.cache
./configure
* Always be precise when talking about changes you have made. Show
things rather than describing them. Use exact filenames (relative to
the main directory of the distribution), not partial ones. For
example, say "I changed Makefile" rather than "I changed the
makefile". Instead of saying "I defined the MUMBLE macro", send a
diff.
* Always use `diff -c' to make diffs. If you don't include context, it
may be hard for me to figure out where you propose to make the
changes. So I might have to ignore your patch.
* When you write a fix, keep in mind that I can't install a change
that *might* break other systems without the risk that it will fail to
work and therefore require an additional cycle of pretesting.
People often suggest fixing a problem by changing config.h or
src/ymakefile or even src/Makefile to do something special that a
particular system needs. Sometimes it is totally obvious that such
changes would break Emacs for almost all users. I can't possibly make
a change like that. All I can do is send it back to you and ask you
to find a fix that is safe to install.
Sometimes people send fixes that *might* be an improvement in
general--but it is hard to be sure of this. I can install such
changes some of the time, but not during pretest, when I am trying to
get a new version to work reliably as quickly as possible.
The safest changes for me to install are changes to the s- and m-
files. At least I know those can't affect most systems.
Another safe kind of change is one that uses a conditional to make
sure it will apply only to a particular kind of system. Ordinarily,
that is a bad way to solve a problem, and I would want to find a
cleaner alternative. But the virtue of safety can make it superior at
pretest time.
* Don't try changing Emacs *in any way* unless it fails to work unchanged.
* Don't even suggest changes to add features or make something
cleaner. Every change I install could introduce a bug, so I won't
install a change during pretest unless I see it is *necessary*.
* If you would like to suggest changes for purposes other than fixing
user-visible bugs, don't wait till pretest time. Instead, send them
after I have made a release that proves to be stable. Then I can give
your suggestions proper consideration. If you send them at pretest
time, I will have to defer them till later, and that might mean I
forget all about them.
* In some cases, if you don't follow these guidelines, your
information might still be useful, but I might have to do more work to
make use of it. Unfortunately, I am so far behind in my work that I
just can't keep up unless you help me to do it efficiently.
Some suggestions for debugging on MS Windows:
Marc Fleischeuers, Geoff Voelker and Andrew Innes
To debug emacs with Microsoft Visual C++, you either start emacs from
the debugger or attach the debugger to a running emacs process. To
start emacs from the debugger, you can use the file bin/debug.bat. The
Microsoft Developer studio will start and under Project, Settings,
Debug, General you can set the command-line arguments and emacs'
startup directory. Set breakpoints (Edit, Breakpoints) at Fsignal and
other functions that you want to examine. Run the program (Build,
Start debug). Emacs will start and the debugger will take control as
soon as a breakpoint is hit.
You can also attach the debugger to an already running emacs process.
To do this, start up the Microsoft Developer studio and select Build,
Start debug, Attach to process. Choose the emacs process from the
list. Send a break to the running process (Debug, Break) and you will
find that execution is halted somewhere in user32.dll. Open the stack
trace window and go up the stack to w32_msg_pump. Now you can set
breakpoints in emacs (Edit, Breakpoints). Continue the running emacs
process (Debug, Step out) and control will return to emacs, until a
breakpoint is hit.
To examine the contents of a lisp variable, you can use the function
'debug_print'. Right-click on a variable, select QuickWatch, and
place 'debug_print(' and ')' around the expression. Press
'Recalculate' and the output is sent to the 'Debug' pane in the Output
window. If emacs was started from the debugger, a console window was
opened at emacs' startup; this console window also shows the output of
'debug_print'. It is also possible to keep appropriately masked and
typecast lisp symbols in the Watch window, this is more convenient
when steeping though the code. For instance, on entering
apply_lambda, you can watch (struct Lisp_Symbol *) (0xfffffff &
args[0]).
Local Variables:
mode: text
End:
# arch-tag: caf47b2c-b56b-44f7-a760-b5bfbed15fd3

View file

@ -1,68 +0,0 @@
#! /bin/bash
if [ $# -ne 2 ]; then
echo "usage: $0 <old version number> <new version number>" >&2
exit 1
fi
if [ ! -f INSTALL -o ! -f configure -o ! -d lib-src ]; then
echo "this script should be run in the emacs root directory" >&2
exit 2
fi
OLD=$1
NEW=$2
outfile=emacs-$NEW.announce
oldtag=EMACS_PRETEST_$(echo $OLD|tr . _)
newtag=EMACS_PRETEST_$(echo $NEW|tr . _)
if [ -f $outfile ]; then
echo "$outfile exists"
echo -n "interrupt to abort, ENTER to overwrite "; read answer
fi
echo -n "tag name for OLD emacs version $OLD [$oldtag]: "; read answer
if [ "$answer" ]; then oldtag=$answer; fi
echo -n "tag name for NEW emacs version $NEW [$newtag]: "; read answer
if [ "$answer" ]; then newtag=$answer; fi
exec > $outfile
cat <<EOF
There is a new pretest available in
<ftp://alpha.gnu.org/gnu/emacs/pretest/emacs-$NEW.tar.gz>
<ftp://alpha.gnu.org/gnu/emacs/pretest/leim-$NEW.tar.gz>
Please report results from compiling and running the pretest to
<emacs-pretest-bug@gnu.org>. Your feedback is necessary for us
to know on which platforms the pretest has been tried.
Please say whether you built with LEIM or not.
If you have the tars from the previous pretest, and you have the
\`xdelta' utility, you can instead download the much smaller
<ftp://alpha.gnu.org/gnu/emacs/pretest/emacs-$OLD-$NEW.xdelta>
<ftp://alpha.gnu.org/gnu/emacs/pretest/leim-$OLD-$NEW.xdelta>
You can use a command like
$ xdelta patch XDELTA PREVIOUS-TAR CURRENT-TAR
to generate the new tar from the old one, where XDELTA is the xdelta
file you downloaded, PREVIOUS-TAR is the tar file from the previous
pretest, and CURRENT-TAR is the name of the tar file you downloaded.
Information about xdelta can be found on the GNU ftp site, in
/non-gnu/xdelta.README.
Changes since $OLD
EOF
make-changelog-diff $oldtag $newtag
echo " announcement created in $outfile" >&2
# arch-tag: 605e00c7-7330-4c45-81e1-2ed53a13c39f

View file

@ -1,28 +0,0 @@
#! /bin/bash
if [ $# -ne 2 ]; then
echo "usage: $0 TAG1 TAG2" >&2
exit 1
fi
if [ ! -f INSTALL -o ! -f configure -o ! -d lib-src ]; then
echo "this script should be run in the emacs root directory" >&2
exit 2
fi
cvs -q diff -b -r $1 -r $2 $(find -name ChangeLog|sort) |
sed -n -e 's/^=\+/======/p' -e 's/^> //p' -e 's/^diff.*//p' \
-e 's/^RCS file: .cvsroot.emacs.emacs.\(.*\),v/\1/p' |
sed -n -e "/^======$/ {
N
N
h
d
}
H
s/.*//
x
s/^\n//
p"
# arch-tag: 7604a259-40b4-4f97-86b2-496a9c546f0a

View file

@ -1,189 +0,0 @@
#! /usr/bin/perl
# Copyright (C) 2001 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.
# Build Emacs with various options for profiling, debugging,
# with and without warnings enabled etc.
require 5;
use Getopt::Long;
use File::Basename;
use Cwd;
# Default CVS sandbox directory. Only used when called from outside
# of the sandbox.
$root = $ENV{"EMACS_ROOT"};
$root = "/gd/gnu/emacs" unless $root;
# Default make command.
$make = $ENV{"EMACS_MAKE"};
$make = "gmake" unless $make;
$rc = GetOptions ("help" => \$help,
"enable-checking" => \$enable_checking,
"no-warn" => \$no_warn,
"check-marked" => \$check_marked,
"all" => \$all,
"no-optim" => \$no_optim,
"union-type" => \$union_type,
"gprof" => \$profile,
"malloc-check" => \$malloc_check,
"no-mcheck" => \$no_mcheck,
"alias" => \$aliasing,
"boot" => \$boot,
"wall" => \$wall,
"gcc3" => \$gcc3,
"trace-selection" => \$trace_selection,
"trace-move" => \$trace_move,
"stabs" => \$use_stabs,
"optim" => \$optim);
if ($rc == 0 || $help)
{
print <<USAGE;
make-emacs [options] ...
Build Emacs.
--help show this help
--all make clean versionclean first
--boot make boostrap, log to boot.log
--enable-checking ENABLE_CHECKING=1 (implies Lisp union type)
--no-warn disable warnings
--check-marked GC_CHECK_MARKED_OBJECTS=1
--optim no debug defines
--gprof make Emacs for profiling
--union-type define USE_LISP_UNION_TYPE (bad for GDB)
--malloc-check define GC_MALLOC_CHECK
--no-mcheck dont define GC_MCHECK
--wall compile with -Wall
--gcc3 use GCC 3.0 (30% slower compilation, slower code)
--trace-selection print traces in xselect.c
--trace-move print traces for move_it* functions
--stabs use -gstabs instead -g
Default is to compile with warnings, with -DGC_MCHECK=1, and
with -DGLYPH_DEBUG=1.
USAGE
exit 1;
}
# Chdir to the top-level directory of the tree. If not in a tree
# containing Emacs, use the default.
while (! -f "src/emacs.c" && cwd () ne "/")
{
chdir "..";
}
chdir $root if cwd () eq "/";
chdir "./src";
print "Build in ", cwd (), "\n";
# If first arg is `all' or if `--all' specified, ensure a clean
# build.
if (@ARGV && $ARGV[0] eq "all")
{
$all = 1;
shift @ARGV;
}
system ("$make clean versionclean") if $all;
if ($wall)
{
$warn = "-Wall";
}
elsif (!$no_warn)
{
$warn = "-Wpointer-arith -Wchar-subscripts -Wformat -Wimplicit-int";
$warn = "$warn -Wreturn-type -Wswitch -Wuninitialized";
}
$defs = "-DGLYPH_DEBUG=1" unless $optim;
$defs = "$defs -DGC_CHECK_MARKED_OBJECTS=1" if $check_marked;
$defs = "$defs -DENABLE_CHECKING=1" if $enable_checking;
if ($profile)
{
$opts = "-pg";
$defs = "$defs -DPROFILING=1";
}
else
{
if ($use_stabs)
{
$opts = "-gstabs";
}
else
{
$opts = "-g";
}
}
$defs = "$defs -DUSE_LISP_UNION_TYPE" if $union_type;
$defs = "$defs -DGC_MALLOC_CHECK=1 -DGC_PROTECT_MALLOC_STATE=1" if $malloc_check;
$defs = "$defs -DGC_MCHECK=1" unless $no_mcheck;
$defs = "$defs -DTRACE_SELECTION" if $trace_selection;
$defs = "$defs -DDEBUG_TRACE_MOVE" if $trace_move;
# arch=pentium leads to slightly faster code than without.
$opts = "$opts -march=pentiumpro";
if ($optim)
{
$opts = "$opts -pipe -O3";
}
elsif ($no_optim)
{
$opts = "$opts -pipe -fno-inline";
}
else
{
$opts = "$opts -O -pipe -fno-inline";
}
$opts = "$opts -fstrict-aliasing" if $aliasing;
$opts = "$opts $defs" if $defs;
$opts = "$opts $warn" if $warn;
$cc = "/usr/bin/gcc";
$cc = "/gd/local/bin/gcc" if $gcc3;
if ($boot)
{
chdir "..";
system "mv boot.log boot.log.old" if -f "boot.log";
exit system "script boot.log $make CC=\"$cc\" CFLAGS=\"$opts\" bootstrap";
}
exit system "$make CC=\"$cc\" CFLAGS=\"$opts\" @ARGV";
# Local Variables:
# mode: cperl
# End:
# arch-tag: 5c3f9713-9ece-4a12-b3f8-deaff15974ba

View file

@ -1,78 +0,0 @@
Instructions to create pretest or release tarballs.
-- originally written by Gerd Moellmann, amended by Francesco Potortì
with the initial help of Eli Zaretskii
For each step, check for possible errors.
1. cvs -q update -Pd
2. Bootstrap to make 100% sure all elc files are up-to-date, and to
make sure that the later tagged version will bootstrap, should it be
necessary to check it out.
3. Regenerate Emacs' AUTHORS file (M-x load-file RET
lisp/emacs-lisp/authors.el RET, then M-x authors RET, then save
the *Authors* buffer). This may require fixing syntactically
incorrect ChangeLog entries beforehand.
4. Set the version number (M-x load-file RET admin/admin.el RET, then
M-x set-version RET). For a release, add released change log
entries (M-x add-release-logs RET).
5. rm configure; make bootstrap
6. Commit configure, README, AUTHORS, lisp/cus-load.el,
lisp/finder-inf.el, lisp/version.el, man/emacs.texi.
Copy lisp/loaddefs.el to lisp/ldefs-boot.el and commit
lisp/ldefs-boot.el. For a release, also commit the ChangeLog
files in all directories.
7. make-dist --snapshot. Check the contents of the new tar with
admin/diff-tar-files against an older tar file. Some old pretest
tarballs are kept under fencepost.gnu.org:~pot/emacs-pretest/, while
old emacs tarballs are at <ftp://ftp.gnu.org/pub/gnu/emacs/>.
8. xdelta delta emacs-OLD.tar.gz emacs-NEW.tar.gz emacs-OLD-NEW.xdelta
9. tar -zxf emacs-NEW.tar.gz; cd emacs-NEW
./configure && make && make -n install
Use `script' or M-x compile to save the compilation log in
compile-NEW.log and compare it against an old one. The easiest way
to do that is to visit the old log in Emacs, change the version
number of the old Emacs to __, do the same with the new log and do
M-x ediff. Especially check that Info files aren't built.
10. cd EMACS_ROOT_DIR; cvs tag TAG
TAG is EMACS_PRETEST_XX_YY_ZZZ for a pretest, EMACS_XX_YY for a
release.
11. admin/make-announcement OLD NEW
This creates an announcement for pretests. OLD is the version used
to make deltas with respect to NEW. Announcements for releases need
to be crafted by hand. Use an older announcement to start with:
look in ssh://fencepost.gnu.org/~pot/emacs-tarballs/.
12. Now you should upload the files to the GNU ftp server. In order to
do that, you must be registered as an Emacs maintainer and have your
GPG key acknowledged by the ftp people. Mail <ftp-upload@gnu.org>
for instructions. Once you are there, for each file FILE to be
released, create a detached GPG binary signature and a clearsigned
directive file like this:
gpg -b FILE
echo directory: emacs/pretest > FILE.directive (for a pretest)
echo directory: emacs > FILE.directive (for a release)
gpg --clearsign FILE.directive
Upload by anonymous ftp to ftp://ftp-upload.gnu.org/incoming/ftp/
the files FILE, FILE.sig, FILE.directive.asc
13. After five minutes, verify that the files are visible at
ftp://alpha.gnu.org/gnu/emacs/pretest/ for a pretest, at
ftp://ftp.gnu.org/gnu/emacs/ for a release.
14. For a pretest, let Richard Stallman know about the new pretest and
tell him to announce it using the announcement you prepared. Remind
him to set a Reply-to header to <emacs-pretest-bug@gnu.org>.
For a release, Richard should prepare the announcement himself,
possibly starting from a previous announcment.
# arch-tag: c23c771f-ca26-4584-8a04-50ecf0989390

View file

@ -1,18 +0,0 @@
This file describes the CVS branch in which it is maintained.
Everything below the line is branch-specific.
________________________________________________________________________
This is the "HEAD" branch, otherwise known as the "trunk". Its primary
purpose is to accumulate changes that are not yet partitioned into a
specific (versioned) release. When people say "use CVS emacs", this is
the branch they are talking about. Likewise, a "cvs checkout" without
the "-r" option results in this branch.
The plans for this branch are not specified; Emacs hackers add to it
relatively free of constraint (aside from proper legal / accounting
practices), although sometimes there is related discussion on the
emacs-devel mailing list.
The closure process for this branch is undocumented; concepts such as
"freeze", "release", or "integration with the trunk" are not applicable
to this branch.

View file

@ -1,20 +0,0 @@
ttn 2003-04-09
we use a C preprocesor not only in the normal compilation of .c files
into object files, but also for creating
src/Makefile
lib-src/Makefile
(delimited by comment "start of cpp stuff"). some cpp implementations
insert whitespace in between tokens, which explains the "$(dot)$(dot)"
and "UNEXEC_ALIAS" workarounds for unixoid systems and the bundled
tradcpp/ for vms. [NOTE: tradcpp/ not yet checked in.]
during makefile creation, the preprocessor symbol NOT_C_CODE is defined.
this should not be defined for normal .c file compilation.
there has been discussion on eliminating this use of cpp and relying
solely on autoconf processing. rms says to leave it be.
;;; arch-tag: d654291e-9fc8-41b7-ab0c-d3cde842a8e0

View file

@ -1,35 +0,0 @@
ttn 2004-05-09
The exit value of a program returning to the shell on unixoid systems is
typically 0 for success, and non-0 (such as 1) for failure. For vms it is
odd (1,3,5...) for success, even (0,2,4...) for failure.
This holds from the point of view of the "shell" (in quotes because vms has a
different dispatch model that is not explained further here).
From the point of view of the program, nowadays stdlib.h on both type of
systems provides macros `EXIT_SUCCESS' and `EXIT_FAILURE' that should DTRT.
NB: The numerical values of these macros DO NOT need to fulfill the the exit
value requirements outlined in the first paragraph! That is the job of the
`exit' function. Thus, this kind of construct shows misunderstanding:
#ifdef VMS
exit (1);
#else
exit (0);
#endif
Values aside from EXIT_SUCCESS and EXIT_FAILURE are tricky.
ttn 2004-05-12
Values aside from EXIT_SUCCESS and EXIT_FAILURE can be used to indicate
finer gradations of failure. If this is the only information available
to the caller, clamping such values to EXIT_FAILURE loses information.
If there are other ways to indicate the problem to the caller (such as
a message to stderr) it may be ok to clamp. In all cases, it is the
relationship between the program and its caller that must be examined.
[Insert ZAMM quote here.]

View file

@ -1,27 +0,0 @@
Iso-Functional Type Contour
This is a term coined to describe "column int->float" change approach, and can
be used whenever low-level types need to change (hopefully not often!) but the
meanings of the values (whose type has changed) do not.
The premise is that changing a low-level type potentially means lots of code
needs to be changed as well, and the question is how to do this incrementally,
which is the preferred way to change things.
Say LOW and HIGH are C functions:
int LOW (void) { return 1; }
void HIGH (void) { int value = LOW (); }
We want to convert LOW to return float, so we cast HIGH usage:
float LOW (void) { return 1.0; }
void HIGH (void) { int value = (int) LOW (); } /* iftc */
The comment /* iftc */ is used to mark this type of casting to differentiate
it from other casting. We commit the changes and can now go about modifying
LOW and HIGH separately. When HIGH is ready to handle the type change, the
cast can be removed.
;;; arch-tag: 3309cc41-5d59-421b-b7be-c94b04083bb5

View file

@ -1,8 +0,0 @@
ttn 2003-02-14
apparently there was a big discussion on emacs-devel wrt trailing whitespace.
there was a mass-change to remove such from various branches in cvs. probably
it's a good idea to avoid adding trailing whitespace in new code/docs and in
changes.
;;; arch-tag: de441379-c345-4826-a784-352b5413a698

View file

@ -1,52 +0,0 @@
THIS DOCUMENT IS UNDER REVIEW.
DO NOT FOLLOW THESE INSTRUCTIONS -- THEY ARE NOT CORRECT.
How to Maintain Copyright Years for GNU Emacs
Principle: Individual files need to have the year of the release
in the copyright notice if there is significant change.
Practice:
- individual files
- each must be examined, along w/ its history, by a human
- automated tools facilitate but can never replace this process
- year of the release
- may be different from year of file introduction,
or year of last significant change
- sometimes the release year slips, leaving a file w/ prematurely
marked release year => need update (e.g., s/2004/2005/ for Emacs 22)
- intervening years (between releases) are not valid and may cause
embarrassment later in case of dispute => remove (however, see next)
- years for new files (merged, contributed) that have been separately
published are valid even if between releases => leave alone
- significant change
- insignificant
- whitespace
- copyright notice
- version control tags
- simple var/func renaming
- in-file reorganization/reordering
- typos
- small bugfixes
- small docfixes
- filename renaming
- most everything else is significant
- change to interface
- change in functionality
- new file
- many small changes may be significant in aggregate
- when in doubt, ask (and update these guidelines -- thanks!)
- sometimes people make mistakes
- if they have not read these guidelines, point them here
- if the guidelines are not helpful, improve the guidelines

View file

@ -1,36 +0,0 @@
Emacs for Windows
This README file describes how to dump a bare precompiled version of GNU
Emacs for Windows NT/2000/XP and Windows 95/98/Me. This distribution
supplements the standard dumped precompiled distribution of Emacs, which
you can download from:
ftp://ftp.gnu.org/gnu/windows/emacs/
If you do not have the "bin" distribution, then you will need to
download it before you can use this undumped version. Also note that
you should only need to dump Emacs yourself if you want to dump Emacs
with more elisp files than are included normally, or to rebuild Emacs
after patching one of the elisp files that is preloaded.
The dumping process consists of running a bare Emacs, loading up a
number of general elisp files, and then creating a new Emacs executable
preinitialized and ready to run. In the precompiled distributions,
Emacs has already been dumped with the standard configuration.
To dump Emacs, unpack this distribution into the directory created by
unpacking the corresponding standard precompiled distribution. To
verify that you unpacked in the proper place, check to make sure that
you now have a temacs.exe file in the bin directory.
Once you have unpacked this distribution, cd into the bin directory and
run dump.bat. This will produce a new bin\emacs.exe executable for you
to use (the original one is renamed to emacs.exe.orig; this is not
overwritten if you run dump more than once).
For more information about running Emacs, read the README.W32 file that
came with the standard dumped precompiled distribution. If you have
problems with Emacs, including problems with dumping, send email to
"help-emacs-windows@gnu.org".
Enjoy!

View file

@ -1,254 +0,0 @@
Precompiled Distributions of
Emacs for Windows
Version 21.3
April 22, 2003
This directory contains source and precompiled distributions for GNU
Emacs on Windows NT/2000/XP and Windows 95/98/Me. This port is a part
of the standard GNU Emacs distribution from the Free Software
Foundation; the precompiled distributions are provided here for
convenience since, unlike Unix, the majority of Windows users do not
have access to a compiler (and, besides, do you really want to compile
Emacs when you don't have to?).
If you have access to the World Wide Web, I would recommend pointing
your favorite web browser to the following document (if you haven't
already):
http://www.gnu.org/software/emacs/windows/ntemacs.html
The above web document is a far more complete version of this README
file. If you don't have access to the Web, however, then read on.
* IMPORTANT LEGAL REMINDER
If you want to redistribute any of the precompiled distributions of
Emacs, be careful to check the implications of the GPL. For instance,
if you put the emacs-21.3-bin-i386.tar.gz file from this directory on
an Internet site, you must arrange to distribute the source files of
the SAME version (i.e. emacs-21.3-src.tar.gz).
Making a link to our copy of the source is NOT sufficient, since we
might upgrade to a new version while you are still distributing the
old binaries.
* Distributions in .tar.gz format
Emacs is distributed primarily as a set of large gzipped tar files
(*.tar.gz). Because Emacs is quite large and therefore difficult to
download over unreliable connections, it is provided in several
combinations, ranging from the complete source plus executables, to
just the minimal amount needed to run without any source, plus a
couple of optional packages. Here are the combinations (i386 in the
name indicates a tarball contains executables compiled for
Intel-compatible x86 systems):
+ Primary precompiled distribution, including lisp source:
emacs-21.3-fullbin-i386.tar.gz
+ Minimal precompiled distribution, which excludes lisp source:
emacs-21.3-bin-i386.tar.gz
You can download emacs-21.3-lisp.tar.gz to get the lisp source, if
you later decide you want it - it is useful for understanding how
packages work, and how they can best be setup or customized.
NB. If you just want to run Emacs, get one of the distributions above.
+ Bare executables, only useful if you want to get the complete source
release below, but can't compile Emacs yourself:
emacs-21.3-barebin-i386.tar.gz (requires emacs-21.3-src.tar.gz)
+ Undumped executable, only needed for rebuilding Emacs after changing
certain core lisp files:
emacs-21.3-undumped-i386.tar.gz
+ Optional package providing the Library of Emacs Input Methods for
typing non-ascii characters, notably Chinese, Japanese and Korean,
but also including European and other character sets:
emacs-21.3-leim.tar.gz
+ The complete official source for Emacs:
emacs-21.3-src.tar.gz
+ The complete official source for LEIM:
leim-21.3-src.tar.gz
* Distributions in multi-file .zip format
A second distribution in the form of multiple small .zip files is also
provided, for the benefit of people who have unreliable internet
connections, or who need to copy the distribution onto floppy disks:
em213b*.zip
This is equivalent to getting emacs-21.3-bin-i386.tar.gz above.
The lisp source is available as em213l*.zip.
* Distributions for non-x86 platforms
I try to make this port available for all platforms supported by
Windows (it should build on all supported Windows NT/9x platforms).
However, I do not always have access to non-x86 platforms, and so I
cannot guarantee to provide precompiled distributions for the other
platforms myself. If you find there are no binaries for your
platform, and you have access to a Microsoft compiler, then you can
download the source and compile Emacs yourself (and, if you do, please
consider contributing your executables; send me mail and we can make
arrangements for making them available on this ftp server.)
* Unpacking distributions
Programs for handling the distribution file formats can be found in
the utilities directory:
ftp://ftp.gnu.org/gnu/windows/emacs/utilities
For gzipped tar files, you will need either gunzip.exe and tar.exe
together, or djtarnt.exe. djtarnt.exe can also unpack .zip files. I
strongly urge you to use these utilities since they were the ones used
to create the distributions; the most common problem people have in
trying to get Emacs to run is due to some other utility program
corrupting the distribution while unpacking.
Open a command prompt (MSDOS) window. Decide on a directory in which
to place Emacs. Move the distribution to that directory, and then
unpack it as follows.
If you have the gzipped tar version, use gunzip to uncompress the tar
file on the fly, and pipe the output through tar with the "xvf" flags
to extract the files from the tar file:
% gunzip -c some.tar.gz | tar xvf -
You may see messages from tar about not being able to change the
modification time on directories, and from gunzip complaining about a
broken pipe. These messages are harmless and you can ignore them. On
Windows NT, unpacking tarballs this way leaves them in compressed
form, taking up less space on disk. Unfortunately, on Windows 95 and
98, a large temporary file is created, so it is better to use the
djtarnt.exe program, which performs the equivalent operation in one
step:
% djtarnt -x some.tar.gz
You may be prompted to rename or overwrite directories when using
djtarnt: simply type return to continue (this is harmless).
If you have the multi-file .zip distribution, use djtarnt to unpack
all of the .zip files:
% djtarnt -x *.zip
Once you have unpacked a precompiled distribution of Emacs, it should
have the following subdirectories:
bin etc info lisp lock site-lisp
If your utility failed to create the lock directory, then you can
simply create it by hand (it is initially empty).
One final step is needed only when installing from the multi-file .zip
distribution, in order to recreate emacs.exe from its fragments (it is
too big to fit on a floppy even when zipped):
% cd emacs-21.3\bin
% stitch
* Unpacking with other tools
If you do use other utility programs to unpack the distribution, check
the following to be sure the distribution was not corrupted:
+ Be sure to disable the CR/LF translation or the executables will be
unusable. Older versions of WinZipNT would enable this translation
by default. If you are using WinZipNT, disable it. (I don't have
WinZipNT myself, and I do not know the specific commands necessary
to disable it.)
+ Check that filenames were not truncated to 8.3. For example, there
should be a file lisp/abbrevlist.el; if this has been truncated to
abbrevli.el, your distribution has been corrupted while unpacking
and Emacs will not start.
+ I've been told that some utilities (WinZip again?) don't create the
lock subdirectory. The lock subdirectory needs to be created.
+ I've also had reports that the "gnu-win32" port of tar corrupts the
executables. Use the version of tar or djtarnt in the utilities
directory instead.
If you believe you have unpacked the distributions correctly and are
still encountering problems, see the section on Further Information
below.
* Compiling from source
If you would like to compile Emacs from source, download the source
distribution, unpack it in the same manner as a precompiled
distribution, and look in the file nt/INSTALL for detailed directions.
You can either use the Microsoft compiler included with Visual C++, or
GCC 2.95 or later with MinGW support, to compile the source. The port
of GCC included in Cygwin is supported, but check the nt/INSTALL file
if you have trouble since some builds of GNU make aren't supported.
* Further information
If you have access to the World Wide Web, I would recommend pointing
your favorite web browser to following the document (if you haven't
already):
http://www.gnu.org/software/emacs/windows/ntemacs.html
This document serves as an FAQ and a source for further information
about the Windows port and related software packages.
In addition to the FAQ, there is a mailing list for discussing issues
related to the Windows port of Emacs. For information about the
list, see this Web page:
http://mail.gnu.org/mailman/listinfo/help-emacs-windows
To ask questions on the mailing list, send email to
help-emacs-windows@gnu.org. (You don't need to subscribe for that.)
To subscribe to the list or unsubscribe from it, fill the form you
find at http://mail.gnu.org/mailman/listinfo/help-emacs-windows as
explained there.
Another valuable source of information and help which should not be
overlooked is the various Usenet news groups dedicated to Emacs.
These are particuarly good for help with general issues which aren't
specific to the Windows port of Emacs. The main news groups to use
for seeking help are:
gnu.emacs.help
comp.emacs
There are also fairly regular postings and announcements of new or
updated Emacs packages on this group:
gnu.emacs.sources
Enjoy!
Andrew Innes
(andrewi@gnu.org)

View file

@ -1,188 +0,0 @@
Emacs for Windows
This README file describes how to set up and run a precompiled version
of GNU Emacs for Windows NT/2000/XP and Windows 95/98/Me. This
distribution can be found on the ftp.gnu.org server and its mirrors:
ftp://ftp.gnu.org/gnu/windows/emacs/
This server contains other distributions, including the full Emacs
source distribution and the lisp source distribution, as well as older
releases of Emacs for Windows.
Answers to frequently asked questions, and further information about
this port of GNU Emacs and related software packages can be found via
http or ftp:
http://www.gnu.org/software/emacs/windows/ntemacs.html
ftp://ftp.gnu.org/gnu/windows/emacs/docs/ntemacs.html
* Preliminaries
Along with this file should be six subdirectories (bin, etc, info,
lisp, lock, site-lisp). Depending on which distribution you have
installed, the lisp subdirectory might contain both the lisp source
(*.el) and compiled lisp files (*.elc), or just the compiled lisp
files. If you don't have the lisp source files, you can obtain them
by downloading the lisp source distribution or the full source
distribution from the ftp site mentioned above.
* Setting up Emacs
To install Emacs, simply unpack all the files into a directory of your
choice, but note that you might encounter minor problems if there is a
space anywhere in the directory name. To complete the installation
process, you can optionally run the program addpm.exe in the bin
subdirectory. This will add some entries to the registry that tell
Emacs where to find its support files, and put an icon for Emacs in
the Start Menu under "Start -> Programs -> Gnu Emacs -> Emacs".
Some users have reported that the Start Menu item is not created for
them. If this happens, just create your own shortcut to runemacs.exe,
eg. by dragging it on to the desktop or the Start button.
Note that running addpm is now an optional step; Emacs is able to
locate all of its files without needing the information to be set in
the environment or the registry, although such settings will still be
obeyed if present. This is convenient for running Emacs on a machine
which disallows registry changes, or on which software should not be
installed. For instance, you can now run Emacs directly from a CD
without copying or installing anything on the machine itself.
* Starting Emacs
To run Emacs, simply select Emacs from the Start Menu, or invoke
runemacs.exe directly from Explorer or a command prompt. This will
start Emacs in its default GUI mode, ready to use. If you have never
used Emacs before, you should follow the tutorial at this point
(select Emacs Tutorial from the Help menu), since Emacs is quite
different from ordinary Windows applications in many respects.
If you want to use Emacs in tty or character mode within a command
window, you can start it by typing "emacs -nw" at the command prompt.
(Obviously, you need to ensure that the Emacs bin subdirectory is in
your PATH first, or specify the path to emacs.exe.) The -nw
(non-windowed) mode of operation is most useful if you have a telnet
server on your machine, allowing you to run Emacs remotely.
* Uninstalling Emacs
If you should need to uninstall Emacs, simply delete all the files and
subdirectories from the directory where it was unpacked (Emacs does
not install or update any files in system directories or anywhere
else). If you ran the addpm.exe program to create the registry
entries and the Start menu icon, then you can remove the registry
entries using regedit. All of the settings are written under the
Software\GNU\Emacs key in HKEY_LOCAL_MACHINE, or if you didn't have
administrator privileges, the same key in HKEY_CURRENT_USER. Just
delete the Software\GNU\Emacs key.
The Start menu entry can be removed by right-clicking on the Task bar
and selecting Properties, then using the Remove option on the Start
Menu Programs page. (If you installed under an account with
administrator privileges, then you need to click the Advanced button
and look for the Gnu Emacs menu item under All Users.)
* Troubleshooting
Unpacking the distributions
If you encounter trouble trying to run Emacs, there are a number of
possible causes. If you didn't use the versions of tar and gunzip (or
djtarnt) on the above ftp site, it is possible that the distribution
became corrupted while it was being unpacked. Check the following for
indications that the distribution was not corrupted:
* Be sure to disable the CR/LF translation or the executables will
be unusable. Older versions of WinZipNT would enable this
translation by default. If you are using WinZipNT, disable it.
(I don't have WinZipNT myself, and I do not know the specific
commands necessary to disable it.)
* Check that filenames were not truncated to 8.3. For example,
there should be a file lisp\abbrevlist.elc; if this has been
truncated to abbrevli.elc, your distribution has been corrupted
while unpacking and Emacs will not start.
* Users have said that some utilities (WinZip again?) don't create
the lock subdirectory. You can create the lock directory by hand
(it is normally empty).
* Users have also reported that the gnu-win32 tar corrupts the
executables. Use the version of tar or djtarnt on the ftp.gnu.org
site instead.
If you believe you have unpacked the distributions correctly and are
still encountering problems, see the section on Further Information
below.
Virus scanners
Some virus scanners interfere with Emacs' use of subprocesses. If you
are unable to use subprocesses and you use Dr. Solomon's WinGuard or
McAfee's Vshield, turn off "Scan all files" (WinGuard) or "boot sector
scanning" (McAfee exclusion properties).
* Further information
If you have access to the World Wide Web, I would recommend pointing
your favorite web browser to following the document (if you haven't
already):
http://www.gnu.org/software/emacs/windows/ntemacs.html
This document serves as an FAQ and a source for further information
about the Windows port and related software packages.
In addition to the FAQ, there is a mailing list for discussing issues
related to the Windows port of Emacs. For information about the
list, see this Web page:
http://mail.gnu.org/mailman/listinfo/help-emacs-windows
To ask questions on the mailing list, send email to
help-emacs-windows@gnu.org. (You don't need to subscribe for that.)
To subscribe to the list or unsubscribe from it, fill the form you
find at http://mail.gnu.org/mailman/listinfo/help-emacs-windows as
explained there.
Another valuable source of information and help which should not be
overlooked is the various Usenet news groups dedicated to Emacs.
These are particuarly good for help with general issues which aren't
specific to the Windows port of Emacs. The main news groups to use
for seeking help are:
gnu.emacs.help
comp.emacs
There are also fairly regular postings and announcements of new or
updated Emacs packages on this group:
gnu.emacs.sources
* Reporting bugs
If you encounter a bug in this port of Emacs, we would like to hear
about it. First check the FAQ on the web page above to see if the bug
is already known and if there are any workarounds. Then check whether
the bug has something to do with code in your .emacs file, e.g. by
invoking Emacs with the "-q --no-site-file" options.
If you decide that it is a bug in Emacs that might be specific to the
Windows port, send a message to the "help-emacs-windows@gnu.org"
mailing list describing the bug, the version of Emacs that you are
using, and the operating system that you are running on (Windows NT,
2000, 95, 98, etc. including service pack level if known). If the bug
is related to subprocesses, also specify which shell you are using
(e.g., include the values of `shell-file-name' and
`shell-explicit-file-name' in your message).
If you think the bug is not specific to the Windows port of Emacs,
then it is better to mail the bug report to "bug-gnu-emacs@gnu.org" so
that it will be seen by the right people. If Emacs has been set up to
send mail, you can use the command M-x report-emacs-bug to create and
send the bug report, but in some cases there is a function to report
bugs in a specific package; e.g. M-x gnus-bug for Gnus, M-x
c-submit-bug-report for C/C++/Java mode, etc.
Enjoy!

View file

@ -1,25 +0,0 @@
@echo off
rem Run temacs.exe to recreate the dumped emacs.exe.
rem This is only likely to be useful on systems where the prebuilt
rem emacs.exe crashes on startup.
rem First save original emacs.exe if present
if exist emacs.exe.orig goto dump
echo Saving original emacs.exe as emacs.exe.orig
ren emacs.exe emacs.exe.orig
:dump
rem Overwrites emacs.exe if still present
mkdir ..\lib-src
copy fns* ..\lib-src
mkdir obj
mkdir obj\i386
mkdir obj\etc
copy ..\etc\DOC* obj\etc
copy temacs.exe obj\i386
obj\i386\temacs -batch -l loadup dump
copy obj\i386\emacs.exe .
goto skipArchTag
arch-tag: 0ca3036d-3a1e-47ea-87c6-9c0845253496
:skipArchTag

View file

@ -1,135 +0,0 @@
@echo off
rem Beware broken ports of tar. Recent cygwin versions work well, older
rem cygwin versions and the current MSys port have problems with DOS
rem line ends when reading file names from a file. Other ports have their
rem own problems too.
set TAR=tar
rem Make a copy of current Emacs source
if (%3) == () goto usage
if not (%4) == () goto %4
if not (%4) == (src) goto :lisp
:src
echo Create full source distribution, excluding leim
%TAR% --exclude leim --exclude _marker --exclude DOC --exclude DOC-X --exclude TAGS --exclude bin --exclude obj --exclude obj-spd --exclude oo --exclude oo-spd --exclude *~ --exclude *.rej -cvf - emacs-%1 | gzip -9 > %2-src.tar.gz
if not (%4) == () goto end
:lisp
echo Create limited elisp source distribution
%TAR% --exclude *.rej --exclude *.elc --exclude *~ -cvf - emacs-%1/lisp | gzip -9 > %2-lisp.tar.gz
if not (%4) == () goto end
:bin
set eld=emacs-%1/lisp
rem List of Lisp files that are not compiled and that should be
rem included in the bin distribution.
rem It would be better to generate this list automatically. It is the
rem list of all .el files for which there is no corresponding .elc
rem file, minus ldefs-boot.el. --lute
set elfiles=%eld%/cus-load.el %eld%/emacs-lisp/cl-specs.el %eld%/eshell/esh-groups.el %eld%/eshell/esh-maint.el %eld%/finder-inf.el %eld%/forms-d2.el %eld%/forms-pass.el %eld%/international/latin-1.el %eld%/international/latin-2.el %eld%/international/latin-3.el %eld%/international/latin-4.el %eld%/international/latin-5.el %eld%/international/latin-8.el %eld%/international/latin-9.el %eld%/international/mule-conf.el %eld%/language/czech.el %eld%/language/devanagari.el %eld%/language/english.el %eld%/language/georgian.el %eld%/language/greek.el %eld%/language/hebrew.el %eld%/language/japanese.el %eld%/language/kannada.el %eld%/language/korean.el %eld%/language/lao.el %eld%/language/malayalam.el %eld%/language/misc-lang.el %eld%/language/romanian.el %eld%/language/slovak.el %eld%/language/tamil.el %eld%/language/thai.el %eld%/language/utf-8-lang.el %eld%/loaddefs.el %eld%/loadup.el %eld%/mail/blessmail.el %eld%/mh-e/mh-acros.el %eld%/mh-e/mh-gnus.el %eld%/mh-e/mh-loaddefs.el %eld%/obsolete/keyswap.el %eld%/patcomp.el %eld%/paths.el %eld%/play/bruce.el %eld%/subdirs.el %eld%/term/AT386.el %eld%/term/apollo.el %eld%/term/bobcat.el %eld%/term/internal.el %eld%/term/iris-ansi.el %eld%/term/linux.el %eld%/term/lk201.el %eld%/term/news.el %eld%/term/vt102.el %eld%/term/vt125.el %eld%/term/vt200.el %eld%/term/vt201.el %eld%/term/vt220.el %eld%/term/vt240.el %eld%/term/vt300.el %eld%/term/vt320.el %eld%/term/vt400.el %eld%/term/vt420.el %eld%/term/wyse50.el %eld%/version.el
set fns_el=
for %%f in (emacs-%1/bin/fns*) do set fns_el=%fns_el% emacs-%1/bin/%%f
echo Create bin distribution
copy %3\README.W32 emacs-%1\README.W32
del #files# #elfiles#
for %%f in (emacs-%1/BUGS emacs-%1/README emacs-%1/README.W32) do echo %%f>>#files#
for %%f in (emacs-%1/bin/fns*) do echo emacs-%1/bin/%%f>>#elfiles#
for %%f in (emacs-%1/bin emacs-%1/etc emacs-%1/info emacs-%1/lisp) do echo %%f>>#files#
for %%f in (emacs-%1/lock emacs-%1/site-lisp) do echo %%f>>#files#
for %%f in (%elfiles% emacs-%1/site-lisp/subdirs.el) do echo %%f>>#elfiles#
%TAR% --exclude temacs.exe --exclude emacs.mdp --exclude *.pdb --exclude *.opt --exclude "*.el" --exclude "*~" -T #files# -cvf %2-bin-i386.tar
%TAR% -T #elfiles# -rvf %2-bin-i386.tar
gzip -9 %2-bin-i386.tar
del emacs-%1\README.W32
rem del #files# #elfiles#
if not (%4) == () goto end
:fullbin
echo Create full bin distribution
copy %3\README.W32 emacs-%1\README.W32
%TAR% --exclude temacs.exe --exclude emacs.mdp --exclude *.pdb --exclude *.opt --exclude *~ -cvf - emacs-%1/BUGS emacs-%1/README emacs-%1/README.W32 emacs-%1/bin emacs-%1/etc emacs-%1/info emacs-%1/lisp emacs-%1/lock emacs-%1/site-lisp | gzip -9 > %2-fullbin-i386.tar.gz
del emacs-%1\README.W32
if not (%4) == () goto end
:leim
echo Create archive with precompiled leim files
%TAR% -cvf - emacs-%1/leim/leim-list.el emacs-%1/leim/quail emacs-%1/leim/ja-dic | gzip -9 > %2-leim.tar.gz
if not (%4) == () goto end
:undumped
echo Create archive with extra files needed for redumping emacs
copy %3\README-UNDUMP.W32 emacs-%1\README-UNDUMP.W32
copy %3\dump.bat emacs-%1\bin
if exist emacs-%1\src\obj-spd\i386\temacs.exe copy emacs-%1\src\obj-spd\i386\temacs.exe emacs-%1\bin
if exist emacs-%1\src\oo-spd\i386\temacs.exe copy emacs-%1\src\oo-spd\i386\temacs.exe emacs-%1\bin
%TAR% -cvf - emacs-%1/README-UNDUMP.W32 emacs-%1/bin/dump.bat emacs-%1/bin/temacs.exe | gzip -9 > %2-undumped-i386.tar.gz
del emacs-%1\bin\temacs.exe
del emacs-%1\bin\dump.bat
del emacs-%1\README-UNDUMP.W32
if not (%4) == () goto end
:barebin
echo Create archive with just the basic binaries and generated files
echo (the user needs to unpack the full source distribution for
echo everything else)
copy %3\README.W32 emacs-%1\README.W32
%TAR% -cvf - emacs-%1/README.W32 emacs-%1/bin emacs-%1/etc/DOC emacs-%1/etc/DOC-X | gzip -9 > %2-barebin-i386.tar.gz
del emacs-%1\README.W32
if not (%4) == () goto end
goto end
rem Only do this if explicitly requested
:zipfiles
echo Create zip files for bin and lisp archives
mkdir distrib
cd distrib
gunzip -c ..\%2-bin-i386.tar.gz | %TAR% xf -
rem Need to split emacs.exe into fragments because it is too big now
rem to fit on a floppy even by itself.
copy %3\stitch.bat %2\bin
cd %2\bin
split -b 1000000 emacs.exe emacs
del emacs.exe
cd ..\..
zip -rp9 em%5bin %2
rm -rf %2
zipsplit -n 1400000 -b .. em%5bin.zip
del em%5bin.zip
gunzip -c ..\%2-lisp.tar.gz | %TAR% xf -
zip -rp9 em%5lis %2
rm -rf %2
zipsplit -n 1400000 -b .. em%5lis.zip
del em%5lis.zip
cd ..
goto end
:usage
echo Generate source and binary distributions of emacs.
echo Usage: %0 emacs-version dist-basename distfiles [lisp,bin,undumped,barebin]
echo (e.g., %0 19.34 emacs-19.34.5 d:\andrewi\distfiles)
echo Or: %0 emacs-version dist-basename distfiles "zipfiles" short-version
echo (e.g., %0 20.6 emacs-20.6 d:\andrewi\distfiles zipfiles 206)
:end
goto skipArchTag
arch-tag: 6e2ddd92-c1c9-4992-b6b5-207aaab72f68
:skipArchTag

View file

@ -1,342 +0,0 @@
#!/bin/sh
# quick-install-emacs -- do a halfway-decent job of installing emacs quickly
# Written by Miles Bader <miles@gnu.org>
# This script is mainly intended for emacs maintainer or pretesters who
# install emacs very often. See the --help output for more details.
PUBLIC_LIBSRC_BINARIES='b2m emacsclient etags ctags ebrowse'
PUBLIC_LIBSRC_SCRIPTS='grep-changelog rcs-checkin'
AVOID="CVS -DIC README COPYING ChangeLog ~ [.]orig$ [.]rej$ Makefile makefile stamp-subdir [.]cvsignore [.]arch-ids [{]arch[}] [.][cho]$ make-docfile testfile test-distrib"
# Prune old binaries lying around in the source tree
PRUNE=no
# Re-install files even if they already exist
FORCE=no
# Command verbose flag
VERBOSE=''
me="`basename $0`"
# Install commands (if the user specifies the `--verbose' option, it is
# passed to these commands, so that feature only works if these commands
# implement it too)
LINK='cp -lf'
COPY='cp -f'
REMOVE='rm -r'
MKDIR='mkdir -p'
# Used to execute commands once once we create them
EXEC='sh'
NAWK=/usr/bin/nawk
# avoid non-standard command output from non-C locales
unset LANG LC_ALL LC_MESSAGES
# Some messages
USAGE="Usage: $me [OPTION...] BUILD_TREE [PREFIX]"
TRY="Try "\`"$me --help' for more information."
# Parse command-line options
while :; do
case "$1" in
-n|--dry-run)
EXEC=cat; shift;;
-p|--prune)
PRUNE=yes; shift;;
-P|--no-prune)
PRUNE=no; shift;;
--prune-only)
PRUNE=only; shift;;
-f|--force)
FORCE=yes; shift;;
-v|--verbose)
VERBOSE="-v"; shift;;
--help)
cat <<EOF
$USAGE
Install emacs quickly
-n, --dry-run print installation commands instead of
executing them
-f, --force install even files that haven't changed
-v, --verbose print messages describing what is done
-p, --prune prune old generated files
-P, --no-prune don't prune old generated files (default)
--prune-only prune old generated files, but don't install
--help display this help and exit
--version output version information and exit
$me install emacs \`incrementally,' that is, it will
install only those files that have changed since the last time it was
invoked, and remove any obsolete files from the installation
directories. It also uses hard-links into the source and build trees to
do the install, so it uses much less space than the default Makefile
install target; however, this also means that $me can
not install onto a disk partition other than the one on which the source
and build directories reside.
Optionally, $me can also remove old versions of
automatically generated files that are version-specific (such as the
versioned emacs executables in the \`src' directory, and the DOC-* files
in the \`etc' directory). The latter action is called \`pruning,' and
can be enabled using the \`-p' or \`--prune' options.
EOF
exit 0
;;
--version)
cat <<EOF
$me 1.6
Written by Miles Bader <miles@gnu.org>
EOF
exit 0
;;
-[^-]?*)
# split concatenated single-letter options apart
FIRST="$1"; shift
set -- `echo $FIRST | sed 's/-\(.\)\(.*\)/-\1 -\2/'` "$@"
;;
-*)
echo 1>&2 "$me: unrecognized option "\`"$1'"
echo 1>&2 "$TRY"
exit 1
;;
*)
break;
esac
done
LINK_CMD="$LINK $VERBOSE"
REMOVE_CMD="$REMOVE $VERBOSE"
case $# in
1) BUILD="$1";;
2) BUILD="$1"; prefix="$2";;
*)
echo 1>&2 "$USAGE"
echo 1>&2 "$TRY"
exit 1
;;
esac
if test ! -d "$BUILD"; then
echo 1>&2 "$me: $BUILD: Build tree not found"
exit 2
elif test ! -r "$BUILD/config.status"; then
echo 1>&2 "$me: $BUILD: Not a proper build tree, config.status not found"
exit 2
fi
CONFIG_STATUS="$BUILD/config.status"
get_config_var ()
{
if ! sed -n "s/^s\(.\)@$1@\1\(.*\)\1.*$/\2/p" $CONFIG_STATUS | sed q | grep ''
then
echo 1>&2 "$me: $1: Configuration variable not found in $CONFIG_STATUS"
exit 4
fi
}
test x"$SRC" = x && { SRC="`get_config_var srcdir`" || exit 4 ; }
test x"$prefix" = x && { prefix="`get_config_var prefix`" || exit 4 ; }
test x"$ARCH" = x && { ARCH="`get_config_var host`" || exit 4 ; }
VERSION=`grep 'defconst[ ]*emacs-version' $SRC/lisp/version.el \
| sed -e 's/^[^"]*"\([^"]*\)".*$/\1/'`
DST_SHARE="$prefix/share/emacs/$VERSION"
DST_BIN="$prefix/bin"
DST_LIBEXEC="$prefix/libexec/emacs/$VERSION/$ARCH"
DST_INFO="$prefix/info"
maybe_mkdir ()
{
if ! test -d "$1"; then
$MKDIR $VERBOSE "$1" 2>&1 | sed "s/^mkdir:/$me:/" 1>&2
fi
}
maybe_mkdir "$DST_BIN"
maybe_mkdir "$DST_SHARE"
maybe_mkdir "$DST_SHARE/site-lisp"
maybe_mkdir "$DST_LIBEXEC"
maybe_mkdir "$DST_INFO"
( # start of command-generating sub-shell
PRUNED=""
if test x"$PRUNE" != xno; then
for D in `ls -1t $BUILD/etc/DOC-* | sed 1d`; do
echo $REMOVE_CMD $D
PRUNED="$PRUNED $D"
done
for D in `ls -1t $BUILD/src/emacs-$VERSION.* | sed 1d`; do
echo $REMOVE_CMD $D
PRUNED="$PRUNED $D"
done
fi
test x"$PRUNE" = xonly && exit 0
maybe_emit_copy ()
{
if test "$FORCE" = yes || ! cmp -s $1 $2; then
echo $LINK_CMD $1 $2
fi
}
maybe_emit_copy $BUILD/src/emacs $DST_BIN/emacs
maybe_emit_copy $BUILD/src/emacs $DST_BIN/emacs-$VERSION
for F in $PUBLIC_LIBSRC_BINARIES; do
maybe_emit_copy $BUILD/lib-src/$F $DST_BIN/$F
done
for F in $PUBLIC_LIBSRC_SCRIPTS; do
maybe_emit_copy $SRC/lib-src/$F $DST_BIN/$F
done
if test x"$SRC" = x"$BUILD"; then
PFXS="$BUILD"
else
PFXS="$SRC $BUILD"
fi
for SUBDIR in lisp leim etc lib-src info; do
# defaults
SHARED=no
FORCED=''
AVOID_PAT="`echo "($AVOID)" | tr ' ' '|'`"
# Set subdir-specific values
case $SUBDIR in
lisp|leim)
DST="$DST_SHARE/$SUBDIR"
;;
etc)
DST="$DST_SHARE/$SUBDIR"
# COPYING is in the avoid list, but there should be a copy of it in
# the install etc dir, so make that here.
FORCED="$DST/COPYING"
;;
lib-src)
DST="$DST_LIBEXEC"
AVOID_PAT="`echo "($AVOID ($PUBLIC_LIBSRC_BINARIES $PUBLIC_LIBSRC_SCRIPTS)\$)" | tr ' ' '|'`"
;;
info)
DST="$DST_INFO"
SHARED=yes
;;
esac
for PFX in $PFXS; do
if [ -d $PFX/$SUBDIR ]; then
for DIR in `(cd $PFX/$SUBDIR; find . -type d -print | sed 's@^./@@')`; do
if [ -d $DST/$DIR ]; then
echo Directory $DST/$DIR exists
else
echo Directory $DST/$DIR non-existant
if [ "`echo $DIR | egrep -v "$AVOID_PAT"`" ]; then
maybe_mkdir $DST/$DIR
fi
fi
done
diff -sqr $PFX/$SUBDIR $DST
fi
done | $NAWK '
BEGIN {
src_pat = "^'"$SRC"'/'"$SUBDIR"'/"
build_pat = "^'"$BUILD"'/'"$SUBDIR"'/"
dst_pat = "^'"$DST"'/"
dst_pfx = "'"$DST"'/"
avoid_pat = "'"$AVOID_PAT"'"
force = ("'"$FORCE"'" == "yes")
shared = ("'"$SHARED"'" == "yes")
init_bool_array(pruned, "'"$PRUNED"'")
init_bool_array(forced, "'"$FORCED"'")
}
function init_bool_array(array, string, a,k)
{
split (string, a)
for (k in a)
array[a[k]] = 1
}
function install(src, dst)
{
if (! (src in pruned)) {
cp[src] = dst;
from[dst] = src;
delete rm[dst];
}
}
function update(src, dst, copy)
{
if (src in pruned) {
rm[dst] = 1;
delete from[dst]
} else {
if (copy)
cp[src] = dst;
from[dst] = src;
delete rm[dst];
}
}
function uninstall(dst)
{
if (!(dst in from))
rm[dst] = 1;
}
/^Directory / {
if ($2 ~ avoid_pat) {
if ($NF == "exists")
uninstall($2)
} else
update(0, $2, 0)
next
}
/^Files / {
if ($4 ~ avoid_pat && !($4 in forced))
uninstall($4)
else if ($NF == "identical")
update($2, $4, force)
else
update($2, $4, 1)
next
}
/^Only / {
pfx = $3
sub (/:$/, "/", pfx)
if (pfx ~ dst_pat) {
if (! shared)
uninstall(pfx $4)
} else {
subdir = pfx
if (subdir ~ src_pat)
sub (src_pat, "", subdir)
else
sub (build_pat, "", subdir)
dst = dst_pfx subdir $4
if (! (dst ~ avoid_pat))
install(pfx $4, dst)
}
next
}
END {
for (f in rm)
print "'"$REMOVE_CMD"' " f
for (f in cp)
print "'"$LINK_CMD"' " f " " cp[f]
}
'
done
) | eval $EXEC
# arch-tag: 9322b572-9755-4cf7-a67a-21e6505f1477

View file

@ -1,137 +0,0 @@
#! /usr/bin/perl
# Copyright (C) 2001 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.
use File::Basename;
if (@ARGV < 3)
{
print <<USAGE;
revdiff FILE OLD NEW
Get a diff of FILE between revisions OLD and NEW. Store the
diff in a file named FILE-OLD-NEW.diff.
If OLD is `-' use FILE's current revision for OLD. If OLD is
`-<number>', use the Nth revision before the current one for OLD.
If NEW is +<number> or -<number>, build diffs between revisions OLD
and OLD +/- <number>.
Examples:
revdiff FILE - -1 get the latest change of FILE
revdiff FILE -1 +1 also gets the latest change of FILE
revdiff FILE 1.500 +2 get diffs 1.500-1.501 and 1.501-1.502.
USAGE
exit 1;
}
$file = shift @ARGV;
$old = shift @ARGV;
sub diffit
{
my ($old, $new) = @_;
print "cvs diff -r$old -r$new $file >$file-$old-$new.diff\n";
system "cvs diff -r$old -r$new $file >$file-$old-$new.diff";
}
sub current_revision ($)
{
my ($file) = @_;
my $dir = dirname ($file);
my $base = basename ($file);
my $entries = "$dir/CVS/Entries";
die "Can't find $entries" unless -f $entries;
open (IN, "<$entries") or die "Cannot open $entries";
my $rev;
while ($line = <IN>)
{
if ($line =~ m,/$base/([^/]+),)
{
$rev = $1;
break;
}
}
die "Cannot determine current revision of $file" unless $rev;
close (IN);
return $rev;
}
if ($old eq "-")
{
$old = current_revision ($file);
}
elsif ($old =~ /^-(\d+)$/)
{
my $offset = $1;
$old = current_revision ($file);
die "Internal error" unless $old =~ /(.*)\.(\d+)$/;
my $minor = $2 - $offset;
$old = sprintf ("%d.%d", $1, $minor);
}
while (@ARGV)
{
my $new = shift @ARGV;
if ($new =~ /^[+]\d+$/)
{
my $n = $new;
for ($i = 0; $i < $n; ++$i)
{
unless ($old =~ /(.*)\.(\d+)$/)
{
die "Internal error";
}
my $j = $2 + 1;
$new = "$1.$j";
diffit ($old, $new);
$old = $new;
}
}
elsif ($new =~ /^[-]\d+$/)
{
my $n = - $new;
for ($i = 0; $i < $n; ++$i)
{
unless ($old =~ /(.*)\.(\d+)$/)
{
die "Internal error";
}
my $j = $2 - 1;
$new = "$1.$j";
diffit ($new, $old);
$old = $new;
}
}
else
{
diffit ($old, $new);
$old = $new;
}
}
# Local Variables:
# mode: cperl
# End:
# arch-tag: 2798b20d-c7f2-4c78-8378-7bb529c36a09

View file

@ -1,9 +0,0 @@
#!/bin/sh
echo "Please read INSTALL.CVS for instructions on how to build Emacs from CVS."
# Exit with failure, since people may have generic build scripts that
# try things like "autogen.sh && ./configure && make".
exit 1
# arch-tag: a123408c-fada-4bf7-98a0-a786cff918f0

View file

@ -1,299 +0,0 @@
@echo off
rem ----------------------------------------------------------------------
rem Configuration script for MSDOS
rem Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2004
rem Free Software Foundation, Inc.
rem This file is part of GNU Emacs.
rem GNU Emacs is free software; you can redistribute it and/or modify
rem it under the terms of the GNU General Public License as published by
rem the Free Software Foundation; either version 2, or (at your option)
rem any later version.
rem GNU Emacs is distributed in the hope that it will be useful,
rem but WITHOUT ANY WARRANTY; without even the implied warranty of
rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
rem GNU General Public License for more details.
rem You should have received a copy of the GNU General Public License
rem along with GNU Emacs; see the file COPYING. If not, write to the
rem Free Software Foundation, Inc., 59 Temple Place - Suite 330,
rem Boston, MA 02111-1307, USA.
rem ----------------------------------------------------------------------
rem YOU'LL NEED THE FOLLOWING UTILITIES TO MAKE EMACS:
rem
rem + msdos version 3 or better.
rem + DJGPP version 1.12maint1 or later (version 2.03 or later recommended).
rem + make utility that allows breaking of the 128 chars limit on
rem command lines. ndmake (as of version 4.5) won't work due to a
rem line length limit. The make that comes with DJGPP does work.
rem + rm and mv (from GNU file utilities).
rem + sed (you can use the port that comes with DJGPP).
rem
rem You should be able to get all the above utilities from the DJGPP FTP
rem site, ftp.delorie.com, in the directory "pub/djgpp/current/v2gnu".
rem ----------------------------------------------------------------------
set X11=
set nodebug=
set djgpp_ver=
if "%1" == "" goto usage
rem ----------------------------------------------------------------------
rem See if their environment is large enough. We need 28 bytes.
set $foo$=789012345678901234567
if not "%$foo$%" == "789012345678901234567" goto SmallEnv
set $foo$=
:again
if "%1" == "" goto usage
if "%1" == "--with-x" goto withx
if "%1" == "--no-debug" goto nodebug
if "%1" == "msdos" goto msdos
:usage
echo Usage: config [--with-x] [--no-debug] msdos
echo [Read the script before you run it.]
goto end
rem ----------------------------------------------------------------------
:withx
set X11=Y
shift
goto again
rem ----------------------------------------------------------------------
:nodebug
set nodebug=Y
shift
goto again
rem ----------------------------------------------------------------------
:msdos
Echo Checking whether 'sed' is available...
sed -e "w junk.$$$" <Nul
If Exist junk.$$$ Goto sedOk
Echo To configure 'Emacs' you need to have 'sed'!
Goto End
:sedOk
Echo Checking whether 'rm' is available...
rm -f junk.$$$
If Not Exist junk.$$$ Goto rmOk
Echo To configure 'Emacs' you need to have 'rm'!
Goto End
:rmOk
Echo Checking whether 'mv' is available...
rm -f junk.1 junk.2
echo foo >junk.1
mv junk.1 ./junk.2
If Exist junk.2 Goto mvOk
Echo To configure 'Emacs' you need to have 'mv'!
rm -f junk.1
Goto End
:mvOk
rm -f junk.2
Echo Checking whether 'gcc' is available...
echo main(){} >junk.c
gcc -c junk.c
if exist junk.o goto gccOk
Echo To configure 'Emacs' you need to have 'gcc'!
rm -f junk.c
Goto End
:gccOk
rm -f junk.c junk.o junk junk.exe
Echo Checking what version of DJGPP is installed...
If Not "%DJGPP%" == "" goto djgppOk
Echo To compile 'Emacs' under MS-DOS you MUST have DJGPP installed!
Goto End
:djgppOk
echo int main() >junk.c
echo #ifdef __DJGPP__ >>junk.c
echo {return (__DJGPP__)*10;} >>junk.c
echo #else >>junk.c
echo #ifdef __GO32__ >>junk.c
echo {return 10;} >>junk.c
echo #else >>junk.c
echo {return 0;} >>junk.c
echo #endif >>junk.c
echo #endif >>junk.c
gcc -o junk junk.c
if not exist junk.exe coff2exe junk
junk
If ErrorLevel 10 Goto go32Ok
rm -f junk.c junk junk.exe
Echo To compile 'Emacs' under MS-DOS you MUST have DJGPP installed!
Goto End
:go32Ok
set djgpp_ver=1
If ErrorLevel 20 set djgpp_ver=2
rm -f junk.c junk junk.exe
rem The v1.x build does not need djecho
if "%DJGPP_VER%" == "1" Goto djechoOk
rem DJECHO is used by the top-level Makefile in the v2.x build
Echo Checking whether 'djecho' is available...
redir -o Nul -eo djecho -o junk.$$$ foo
If Exist junk.$$$ Goto djechoOk
Echo To build 'Emacs' you need the 'djecho.exe' program!
Echo 'djecho.exe' is part of 'djdevNNN.zip' basic DJGPP development kit.
Echo Versions of DJGPP before 2.02 called this program 'echo.exe'.
Echo Either unpack 'djecho.exe' from the 'djdevNNN.zip' archive,
Echo or, if you have 'echo.exe', copy it to 'djecho.exe'.
Echo Then run CONFIG.BAT again with the same arguments you did now.
Goto End
:djechoOk
rm -f junk.$$$
Echo Configuring for DJGPP Version %DJGPP_VER% ...
Rem ----------------------------------------------------------------------
Echo Configuring the source directory...
cd src
rem Create "epaths.h"
sed -f ../msdos/sed4.inp <epaths.in >epaths.tmp
update epaths.tmp epaths.h >nul
rm -f epaths.tmp
rem Create "config.h"
rm -f config.h2 config.tmp
sed -e '' config.in > config.tmp
if "%X11%" == "" goto src4
sed -f ../msdos/sed2x.inp <config.in >config.tmp
:src4
if "%DJGPP_VER%" == "2" Goto src41
sed -f ../msdos/sed2.inp <config.tmp >config.h2
goto src42
:src41
sed -f ../msdos/sed2v2.inp <config.tmp >config.h2
:src42
Rem See if DECL_ALIGN can be supported with this GCC
rm -f junk.c junk.o junk junk.exe
echo struct { int i; char *p; } __attribute__((__aligned__(8))) foo; >junk.c
rem Two percent signs because it is a special character for COMMAND.COM/CMD
rem Filter thru Sed because "&" is special for CMD.EXE
echo int main(void) { return (unsigned long)"&"foo %% 8; } | sed "s/.&./\&/" >>junk.c
gcc -o junk junk.c
if not exist junk.exe coff2exe junk
junk
If Not ErrorLevel 1 Goto alignOk
Echo WARNING: Your GCC does not support 8-byte aligned variables.
Echo WARNING: Therefore Emacs cannot support buffers larger than 128MB.
rem The following line disables DECL_ALIGN which in turn disables USE_LSB_TAG
rem For details see lisp.h where it defines USE_LSB_TAG
echo #define NO_DECL_ALIGN >>config.h2
:alignOk
rm -f junk.c junk junk.exe
update config.h2 config.h >nul
rm -f config.tmp config.h2
rem On my system dir.h gets in the way. It's a VMS file so who cares.
if exist dir.h ren dir.h vmsdir.h
rem Create "makefile" from "makefile.in".
rm -f Makefile junk.c
sed -e "1,/== start of cpp stuff ==/s@^# .*$@@" <Makefile.in >junk.c
If "%DJGPP_VER%" == "1" Goto mfV1
gcc -E -traditional junk.c | sed -f ../msdos/sed1v2.inp >Makefile
goto mfDone
:mfV1
gcc -E -traditional junk.c | sed -f ../msdos/sed1.inp >Makefile
:mfDone
rm -f junk.c
if "%X11%" == "" goto src5
mv Makefile makefile.tmp
sed -f ../msdos/sed1x.inp <makefile.tmp >Makefile
rm -f makefile.tmp
:src5
if "%nodebug%" == "" goto src6
sed -e "/^CFLAGS *=/s/ *-gcoff//" <Makefile >makefile.tmp
sed -e "/^LDFLAGS *=/s/=/=-s/" <makefile.tmp >Makefile
rm -f makefile.tmp
:src6
cd ..
rem ----------------------------------------------------------------------
Echo Configuring the library source directory...
cd lib-src
rem Create "makefile" from "makefile.in".
sed -e "1,/== start of cpp stuff ==/s@^#[ ].*$@@" <Makefile.in >junk.c
gcc -E -traditional -I. -I../src junk.c | sed -e "s/^ / /" -e "/^#/d" -e "/^[ ]*$/d" >makefile.new
If "%DJGPP_VER%" == "2" goto libsrc-v2
sed -f ../msdos/sed3.inp <makefile.new >Makefile
Goto libsrc2
:libsrc-v2
sed -f ../msdos/sed3v2.inp <makefile.new >Makefile
:libsrc2
rm -f makefile.new junk.c
if "%nodebug%" == "" goto libsrc3
sed -e "/^CFLAGS *=/s/ *-gcoff//" <Makefile >makefile.tmp
sed -e "/^ALL_CFLAGS *=/s/=/= -s/" <makefile.tmp >Makefile
rm -f makefile.tmp
:libsrc3
cd ..
rem ----------------------------------------------------------------------
if "%X11%" == "" goto oldx1
Echo Configuring the oldxmenu directory...
cd oldxmenu
sed -f ../msdos/sed5x.inp <Makefile.in >Makefile
if "%nodebug%" == "" goto oldx2
sed -e "/^CFLAGS *=/s/ *-gcoff//" <Makefile >makefile.tmp
mv -f makefile.tmp Makefile
:oldx2
cd ..
:oldx1
rem ----------------------------------------------------------------------
Echo Configuring the manual directory...
cd man
sed -f ../msdos/sed6.inp < Makefile.in > Makefile
cd ..
rem ----------------------------------------------------------------------
Echo Configuring the ELisp manual directory...
cd lispref
sed -f ../msdos/sed6.inp < Makefile.in > Makefile
cd ..
rem ----------------------------------------------------------------------
Echo Configuring the ELisp Introduction manual directory...
Rem The two variants for the line below is for when the shell
Rem supports long file names but DJGPP does not
if exist lispintro\Makefile.in cd lispintro
if exist lispintr\Makefile.in cd lispintr
sed -f ../msdos/sed6.inp < Makefile.in > Makefile
cd ..
rem ----------------------------------------------------------------------
Echo Configuring the lisp directory...
cd lisp
sed -f ../msdos/sedlisp.inp < Makefile.in > Makefile
cd ..
rem ----------------------------------------------------------------------
If not Exist leim\quail\latin-pre.el goto maindir
Echo Configuring the leim directory...
cd leim
sed -f ../msdos/sedleim.inp < Makefile.in > Makefile
cd ..
rem ----------------------------------------------------------------------
:maindir
Echo Configuring the main directory...
If "%DJGPP_VER%" == "1" goto mainv1
Echo Looking for the GDB init file...
If Exist src\.gdbinit update src/.gdbinit src/_gdbinit
If Exist src\_gdbinit goto gdbinitOk
Echo ERROR:
Echo I cannot find the GDB init file. It was called ".gdbinit" in
Echo the Emacs distribution, but was probably renamed to some other
Echo name without the leading dot when you untarred the archive.
Echo It should be in the "src/" subdirectory. Please make sure this
Echo file exists and is called "_gdbinit" with a leading underscore.
Echo Then run CONFIG.BAT again with the same arguments you did now.
goto End
:gdbinitOk
Echo Looking for the GDB init file...found
copy msdos\mainmake.v2 Makefile >nul
:mainv1
If "%DJGPP_VER%" == "1" copy msdos\mainmake Makefile >nul
rem ----------------------------------------------------------------------
goto End
:SmallEnv
echo Your environment size is too small. Please enlarge it and run me again.
echo For example, type "command.com /e:2048" to have 2048 bytes available.
set $foo$=
:end
set X11=
set nodebug=
set djgpp_ver=
goto skipArchTag
arch-tag: 2d2fed23-4dc6-4006-a2e4-49daf0031f33
:skipArchTag

1369
config.guess vendored

File diff suppressed because it is too large Load diff

1467
config.sub vendored

File diff suppressed because it is too large Load diff

23246
configure vendored

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,10 +0,0 @@
# Unlike most emacs dirs, etc has a simple non-autoconf-generated makefile
source ^(Makefile)$
# Generated files (DOC-X is generated on windows)
backup ^(DOC(|-[0-9.]*|-X))$
# Install-in-place on NT makes this directory, so just ignore it
backup ^(icons)$
# arch-tag: 5a1d62e0-593a-48cd-8743-8d45dc58dfae

5
etc/.gitignore vendored
View file

@ -1,5 +0,0 @@
fns-*
*.ps
*.log
*.dvi
DOC DOC-*

176
etc/BABYL
View file

@ -1,176 +0,0 @@
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"

View file

@ -1,88 +0,0 @@
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
possible 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.

View file

@ -1,157 +0,0 @@
[Someone sent this in from California, and we decided to extend
our campaign against information hoarding to recipes as well
as software. (Recipes are the closest thing, not involving computers,
to software.)
The story appears to be a myth, according to the Chicago Tribune,
which says that Mrs Fields Cookies hoards the information completely.
Therefore, this recipe can be thought of as a compatible replacement.
We have reports that the cookies it makes are pretty good.]
Someone at PG&E called the Mrs. Fields Cookie office
and requested the recipe for her cookies. They asked
her for her charge card number, and she gave it to them
thinking the cost would be $15 to $25. It turned out
to be $200!
Therefore, this person is giving the recipe to anyone
and everyone she knows (and doesn't know) so that
someone can get use of her $200. Anyway, just keep
passing it on.
Cream together: 2 cups butter
2 cups sugar
2 cups brown sugar
Add: 4 eggs
2 tsp. vanilla
Mis together in
separate bowl: 4 cups flour
5 cups oatmeal (put small
amounts of oatmeal in blender until it turns to
powder. Measure out 5 cups of oatmeal and only
"powderize" that, NOT 5 cups "powderized" oatmeal)
1 tsp salt
2 tsp baking powder
2 tsp baking soda
Mix: All of the above
Add: 24 oz. bag of chocolate chips and
1 finely grated 8 oz Hershey bar (plain)
Add: 3 cups chopped nuts (any kind)
Bake on greased cookie sheet (make golf ball sized balls) and
bake about two inches apart. Bake at 350 degrees for 8 - 10
minutes. DO NOT OVERBAKE. Makes 112.
From: ucdavis!lll-lcc!hplabs!parcvax!bane@ucbvax.berkeley.edu (John R. Bane)
Subject: Re: free cookie foundation?
Hi! I "stole" your very expensive cookie recipe off the net. If you
want to send me your SnailMail address, I'll be glad to send you a
dollar (I would like to suggest this to the net, but I think there is
some netiquette rule against asking for money - or is that only money
for oneself?) to help defray the cost (it's not much, but if EVERYone
who took the recipe sent you a dollar, it would help).
Here also is another cookie recipe which I'm very fond of.
Makes 6-8 dozen
Bake at 375 degrees for ~10 min.
Cream together:
1 cup shortening (I use Weight Watcher's Reduced Calorie Margarine!)
1/4 cup peanut butter (I recommend the non-sugared kind)
1/2 cup sugar
1/2 cup brown sugar
2 eggs
1 teaspoon vanilla
Add:
1/2 cup flour
1 teaspoon soda
1/2 teaspoon salt
2 cups rolled oats (I use the 5-min variety)
1-2 cups chocolate chips (I use 2 cups semi-sweet - ummmm!)
1 cup nuts (I use pecan pieces - don't get them crushed, or the extra
oil will make greasy cookies)
1 cup shredded or flaked coconut
(The nuts were listed as optional and I added the coconut myself, but
I really love them there! You could also add things like m&m's, or
raisins (I don't care for raisins in cookies, but you might). I've
always wanted to try banana chips.)
Mix well. Drop by teaspoonfuls on greased cookie sheet (I use pam).
Bake at 375 degrees for approx. 10 min.
My aunt found this recipe in an Amish book called something like
"Eating Well When The Whole World Is Starving," and although I thought
a cookie recipe was a bit odd for a book like that, they are about the
healthiest a cookie is ever likely to get.
They are also very easy to make (no blending, sifting, rolling, etc.)
and extremely delicious. I get rave reviews and recipe requests whenever
I make them.
- rene
Chocolate Chip Cookies - Glamorous, crunchy, rich with chocolate bits & nuts.
Also known as "Toll House" Cookies ... from Kenneth and Ruth Wakefield's
charming New England Toll House on the outskirts of Whitman, Massachusetts.
These cookies were first introduced to American homemakers in 1939 through
our series of radio talks on "Famous Foods From Famous Eating Places."
Mix Thoroughly :
2/3 cup soft shortening ( part butter )
1/2 cup granulated sugar
1/2 cup brown sugar ( packed )
1 egg
1 tsp vanilla
Sift together and stir in :
1-1/2 cups sifted flour (*)
1/2 tsp soda
1/2 tsp salt
Stir in :
1/2 cup cut-up nuts
6 oz package of semi-sweet chocolate pieces ( about 1-1/4 cups )
(*) for a softer, more rounded cookie, use 1-3/4 cups sifted flour.
Drop rounded teaspoonfuls about 2" apart on ungreased baking sheet. Bake until
delicately browned ... cookies should still be soft. Cool slightly before you
remove them from the baking sheet.
Temperature: 375 F. ( modern oven )
Time: bake 8 - 10 minutes
Amount: 4 - 5 dozen 2" cookies
=====
Personal comments :
I find it tastes better with a mixture of shortening and butter, as they say.
You don't need << all >> of that sugar, and it can be whatever color you want.
The nuts are optional. Feel free to play with the recipe. I put oatmeal in it,
reducing flour accordingly, and sometimes cinnamon.
I also find it useful to grease the cookie sheets.
I think I'm going to go bake some now ...
-- richard

View file

@ -1,340 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

File diff suppressed because it is too large Load diff

664
etc/DEBUG
View file

@ -1,664 +0,0 @@
Debugging GNU Emacs
Copyright (c) 1985, 2000, 2001, 2005 Free Software Foundation, Inc.
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.
[People who debug Emacs on Windows using native Windows debuggers
should read the Windows-specific section near the end of this
document.]
** When you debug Emacs with GDB, you should start it in the directory
where the executable was made. That directory has a .gdbinit file
that defines various "user-defined" commands for debugging Emacs.
** When you are trying to analyze failed assertions, it will be
essential to compile Emacs either completely without optimizations or
at least (when using GCC) with the -fno-crossjumping option. Failure
to do so may make the compiler recycle the same abort call for all
assertions in a given function, rendering the stack backtrace useless
for identifying the specific failed assertion.
** It is a good idea to run Emacs under GDB (or some other suitable
debugger) *all the time*. Then, when Emacs crashes, you will be able
to debug the live process, not just a core dump. (This is especially
important on systems which don't support core files, and instead print
just the registers and some stack addresses.)
** If Emacs hangs, or seems to be stuck in some infinite loop, typing
"kill -TSTP PID", where PID is the Emacs process ID, will cause GDB to
kick in, provided that you run under GDB.
** Getting control to the debugger
`Fsignal' is a very useful place to put a breakpoint 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. When using X, this is easy: type C-z at the
window where Emacs is running under GDB, and it will stop Emacs just
as it would stop any ordinary program. When Emacs is running in a
terminal, things are not so easy.
The src/.gdbinit file in the Emacs distribution arranges for SIGINT
(C-g in Emacs) to be passed to Emacs and not give control back to GDB.
On modern POSIX systems, you can override that with this command:
handle SIGINT stop nopass
After this `handle' command, SIGINT will return control to GDB. If
you want the C-g to cause a QUIT within Emacs as well, omit the
`nopass'.
A technique that can work when `handle SIGINT' does not is to store
the code for some character into the variable stop_character. Thus,
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.
When Emacs is running in a terminal, it is useful to use a separate terminal
for the debug session. This can be done by starting Emacs as usual, then
attaching to it from gdb with the `attach' command which is explained in the
node "Attach" of the GDB manual.
** 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.
You can also use `pp value' to print the emacs value directly.
Note: It is not a good idea to try `pr' or `pp' if you know that Emacs
is in deep trouble: its stack smashed (e.g., if it encountered SIGSEGV
due to stack overflow), or crucial data structures, such as `obarray',
corrupted, etc. In such cases, the Emacs subroutine called by `pr'
might make more damage, like overwrite some data that is important for
debugging the original problem.
Also, on some systems it is impossible to use `pr' if you stopped
Emacs while it was inside `select'. This is in fact what happens if
you stop Emacs while it is waiting. In such a situation, don't try to
use `pr'. Instead, use `s' to step out of the system call. Then
Emacs will be between instructions and capable of handling `pr'.
If you can't use `pr' command, for whatever reason, 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 additional Lisp
objects which you can examine in turn with the x... commands.
Even with a live process, these x... commands are useful for
examining the fields in a buffer, window, process, frame or marker.
Here's an example using concepts explained in the node "Value History"
of the GDB manual to print values associated with the variable
called frame. First, use these commands:
cd src
gdb emacs
b set_frame_buffer_list
r -q
Then Emacs hits the breakpoint:
(gdb) p frame
$1 = 139854428
(gdb) xtype
Lisp_Vectorlike
PVEC_FRAME
(gdb) xframe
$2 = (struct frame *) 0x8560258
(gdb) p *$
$3 = {
size = 1073742931,
next = 0x85dfe58,
name = 140615219,
[...]
}
(gdb) p $3->name
$4 = 140615219
Now we can use `pr' to print the name of the frame:
(gdb) pr
"emacs@steenrod.math.nwu.edu"
The Emacs C code heavily uses macros defined in lisp.h. So suppose
we want the address of the l-value expression near the bottom of
`add_command_key' from keyboard.c:
XVECTOR (this_command_keys)->contents[this_command_key_count++] = key;
XVECTOR is a macro, and therefore GDB does not know about it.
GDB cannot evaluate "p XVECTOR (this_command_keys)".
However, you can use the xvector command in GDB to get the same
result. Here is how:
(gdb) p this_command_keys
$1 = 1078005760
(gdb) xvector
$2 = (struct Lisp_Vector *) 0x411000
0
(gdb) p $->contents[this_command_key_count]
$3 = 1077872640
(gdb) p &$
$4 = (int *) 0x411008
Here's a related example of macros and the GDB `define' command.
There are many Lisp vectors such as `recent_keys', which contains the
last 100 keystrokes. We can print this Lisp vector
p recent_keys
pr
But this may be inconvenient, since `recent_keys' is much more verbose
than `C-h l'. We might want to print only the last 10 elements of
this vector. `recent_keys' is updated in keyboard.c by the command
XVECTOR (recent_keys)->contents[recent_keys_index] = c;
So we define a GDB command `xvector-elts', so the last 10 keystrokes
are printed by
xvector-elts recent_keys recent_keys_index 10
where you can define xvector-elts as follows:
define xvector-elts
set $i = 0
p $arg0
xvector
set $foo = $
while $i < $arg2
p $foo->contents[$arg1-($i++)]
pr
end
document xvector-elts
Prints a range of elements of a Lisp vector.
xvector-elts v n i
prints `i' elements of the vector `v' ending at the index `n'.
end
** Getting Lisp-level backtrace information within GDB
The most convenient way is to use the `xbacktrace' command. This
shows the names of the Lisp functions that are currently active.
If that doesn't work (e.g., because the `backtrace_list' structure is
corrupted), type "bt" at the GDB prompt, to produce the C-level
backtrace, and look for stack frames that call Ffuncall. Select them
one by one in GDB, by typing "up N", where N is the appropriate number
of frames to go up, and in each frame that calls Ffuncall type this:
p *args
pr
This will print the name of the Lisp function called by that level
of function calling.
By printing the remaining elements of args, you can see the argument
values. Here's how to print the first argument:
p args[1]
pr
If you do not have a live process, you can use xtype and the other
x... commands such as xsymbol to get such information, albeit less
conveniently. For example:
p *args
xtype
and, assuming that "xtype" says that args[0] is a symbol:
xsymbol
** Debugging what happens while preloading and dumping Emacs
Type `gdb temacs' and start it with `r -batch -l loadup dump'.
If temacs actually succeeds when running under GDB in this way, do not
try to run the dumped Emacs, because it was dumped with the GDB
breakpoints in it.
** Debugging `temacs'
Debugging `temacs' is useful when you want to establish whether a
problem happens in an undumped Emacs. To run `temacs' under a
debugger, type "gdb temacs", then start it with `r -batch -l loadup'.
** If you encounter X protocol errors
Try evaluating (x-synchronize t). That puts Emacs into synchronous
mode, where each Xlib call checks for errors before it returns. This
mode is much slower, but when you get an error, you will see exactly
which call really caused the error.
You can start Emacs in a synchronous mode by invoking it with the -xrm
option, like this:
emacs -xrm "emacs.synchronous: true"
Setting a breakpoint in the function `x_error_quitter' and looking at
the backtrace when Emacs stops inside that function will show what
code causes the X protocol errors.
Some bugs related to the X protocol disappear when Emacs runs in a
synchronous mode. To track down those bugs, we suggest the following
procedure:
- Run Emacs under a debugger and put a breakpoint inside the
primitive function which, when called from Lisp, triggers the X
protocol errors. For example, if the errors happen when you
delete a frame, put a breakpoint inside `Fdelete_frame'.
- When the breakpoint breaks, step through the code, looking for
calls to X functions (the ones whose names begin with "X" or
"Xt" or "Xm").
- Insert calls to `XSync' before and after each call to the X
functions, like this:
XSync (f->output_data.x->display_info->display, 0);
where `f' is the pointer to the `struct frame' of the selected
frame, normally available via XFRAME (selected_frame). (Most
functions which call X already have some variable that holds the
pointer to the frame, perhaps called `f' or `sf', so you shouldn't
need to compute it.)
If your debugger can call functions in the program being debugged,
you should be able to issue the calls to `XSync' without recompiling
Emacs. For example, with GDB, just type:
call XSync (f->output_data.x->display_info->display, 0)
before and immediately after the suspect X calls. If your
debugger does not support this, you will need to add these pairs
of calls in the source and rebuild Emacs.
Either way, systematically step through the code and issue these
calls until you find the first X function called by Emacs after
which a call to `XSync' winds up in the function
`x_error_quitter'. The first X function call for which this
happens is the one that generated the X protocol error.
- You should now look around this offending X call and try to figure
out what is wrong with it.
** If Emacs causes errors or memory leaks in your X server
You can trace the traffic between Emacs and your X server with a tool
like xmon, available at ftp://ftp.x.org/contrib/devel_tools/.
Xmon can be used to see exactly what Emacs sends when X protocol errors
happen. If Emacs causes the X server memory usage to increase you can
use xmon to see what items Emacs creates in the server (windows,
graphical contexts, pixmaps) and what items Emacs delete. If there
are consistently more creations than deletions, the type of item
and the activity you do when the items get created can give a hint where
to start debugging.
** If the symptom of the bug is that Emacs fails to respond
Don't assume Emacs is `hung'--it may instead be in an infinite loop.
To find out which, make the problem happen under GDB and stop Emacs
once it is not responding. (If Emacs is using X Windows directly, you
can stop Emacs by typing C-z at the GDB job.) Then try stepping with
`step'. If Emacs is hung, the `step' command won't return. If it is
looping, `step' will return.
If this shows Emacs is hung in a system call, stop it again and
examine the arguments of the call. If you report the bug, it is very
important to state exactly where in the source the system call is, and
what the arguments are.
If Emacs is in an infinite loop, try to determine where the loop
starts and ends. The easiest way to do this is to use the GDB command
`finish'. Each time you use it, Emacs resumes execution until it
exits one stack frame. Keep typing `finish' until it doesn't
return--that means the infinite loop is in the stack frame which you
just tried to finish.
Stop Emacs again, and use `finish' repeatedly again until you get back
to that frame. Then use `next' to step through that frame. By
stepping, you will see where the loop starts and ends. Also, examine
the data being used in the loop and try to determine why the loop does
not exit when it should.
** If certain operations in Emacs are slower than they used to be, here
is some advice for how to find out why.
Stop Emacs repeatedly during the slow operation, and make a backtrace
each time. Compare the backtraces looking for a pattern--a specific
function that shows up more often than you'd expect.
If you don't see a pattern in the C backtraces, get some Lisp
backtrace information by typing "xbacktrace" or by looking at Ffuncall
frames (see above), and again look for a pattern.
When using X, you can stop Emacs at any time by typing C-z at GDB.
When not using X, you can do this with C-g. On non-Unix platforms,
such as MS-DOS, you might need to press C-BREAK instead.
** 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.
An easy way to see if too much text is being redrawn on a terminal is to
evaluate `(setq inverse-video t)' before you try the operation you think
will cause too much redrawing. This doesn't refresh the screen, so only
newly drawn text is in inverse video.
The Emacs display code includes special debugging code, but it is
normally disabled. You can enable it by building Emacs with the
pre-processing symbol GLYPH_DEBUG defined. Here's one easy way,
suitable for Unix and GNU systems, to build such a debugging version:
MYCPPFLAGS='-DGLYPH_DEBUG=1' make
Building Emacs like that activates many assertions which scrutinize
display code operation more than Emacs does normally. (To see the
code which tests these assertions, look for calls to the `xassert'
macros.) Any assertion that is reported to fail should be
investigated.
Building with GLYPH_DEBUG defined also defines several helper
functions which can help debugging display code. One such function is
`dump_glyph_matrix'. If you run Emacs under GDB, you can print the
contents of any glyph matrix by just calling that function with the
matrix as its argument. For example, the following command will print
the contents of the current matrix of the window whose pointer is in
`w':
(gdb) p dump_glyph_matrix (w->current_matrix, 2)
(The second argument 2 tells dump_glyph_matrix to print the glyphs in
a long form.) You can dump the selected window's current glyph matrix
interactively with "M-x dump-glyph-matrix RET"; see the documentation
of this function for more details.
Several more functions for debugging display code are available in
Emacs compiled with GLYPH_DEBUG defined; type "C-h f dump- TAB" and
"C-h f trace- TAB" to see the full list.
When you debug display problems running emacs under X, you can use
the `ff' command to flush all pending display updates to the screen.
** Debugging LessTif
If you encounter bugs whereby Emacs built with LessTif grabs all mouse
and keyboard events, or LessTif menus behave weirdly, it might be
helpful to set the `DEBUGSOURCES' and `DEBUG_FILE' environment
variables, so that one can see what LessTif was doing at this point.
For instance
export DEBUGSOURCES="RowColumn.c:MenuShell.c:MenuUtil.c"
export DEBUG_FILE=/usr/tmp/LESSTIF_TRACE
emacs &
causes LessTif to print traces from the three named source files to a
file in `/usr/tmp' (that file can get pretty large). The above should
be typed at the shell prompt before invoking Emacs, as shown by the
last line above.
Running GDB from another terminal could also help with such problems.
You can arrange for GDB to run on one machine, with the Emacs display
appearing on another. Then, when the bug happens, you can go back to
the machine where you started GDB and use the debugger from there.
** Debugging problems which happen in GC
The array `last_marked' (defined on alloc.c) can be used to display up
to 500 last objects marked by the garbage collection process.
Whenever the garbage collector marks a Lisp object, it records the
pointer to that object in the `last_marked' array. The variable
`last_marked_index' holds the index into the `last_marked' array one
place beyond where the pointer to the very last marked object is
stored.
The single most important goal in debugging GC problems is to find the
Lisp data structure that got corrupted. This is not easy since GC
changes the tag bits and relocates strings which make it hard to look
at Lisp objects with commands such as `pr'. It is sometimes necessary
to convert Lisp_Object variables into pointers to C struct's manually.
Use the `last_marked' array and the source to reconstruct the sequence
that objects were marked.
Once you discover the corrupted Lisp object or data structure, it is
useful to look at it in a fresh Emacs session and compare its contents
with a session that you are debugging.
** Debugging problems with non-ASCII characters
If you experience problems which seem to be related to non-ASCII
characters, such as \201 characters appearing in the buffer or in your
files, set the variable byte-debug-flag to t. This causes Emacs to do
some extra checks, such as look for broken relations between byte and
character positions in buffers and strings; the resulting diagnostics
might pinpoint the cause of the problem.
** Debugging the TTY (non-windowed) version
The most convenient method of debugging the character-terminal display
is to do that on a window system such as X. Begin by starting an
xterm window, then type these commands inside that window:
$ tty
$ echo $TERM
Let's say these commands print "/dev/ttyp4" and "xterm", respectively.
Now start Emacs (the normal, windowed-display session, i.e. without
the `-nw' option), and invoke "M-x gdb RET emacs RET" from there. Now
type these commands at GDB's prompt:
(gdb) set args -nw -t /dev/ttyp4
(gdb) set environment TERM xterm
(gdb) run
The debugged Emacs should now start in no-window mode with its display
directed to the xterm window you opened above.
Similar arrangement is possible on a character terminal by using the
`screen' package.
** Running Emacs built with malloc debugging packages
If Emacs exhibits bugs that seem to be related to use of memory
allocated off the heap, it might be useful to link Emacs with a
special debugging library, such as Electric Fence (a.k.a. efence) or
GNU Checker, which helps find such problems.
Emacs compiled with such packages might not run without some hacking,
because Emacs replaces the system's memory allocation functions with
its own versions, and because the dumping process might be
incompatible with the way these packages use to track allocated
memory. Here are some of the changes you might find necessary
(SYSTEM-NAME and MACHINE-NAME are the names of your OS- and
CPU-specific headers in the subdirectories of `src'):
- In src/s/SYSTEM-NAME.h add "#define SYSTEM_MALLOC".
- In src/m/MACHINE-NAME.h add "#define CANNOT_DUMP" and
"#define CANNOT_UNEXEC".
- Configure with a different --prefix= option. If you use GCC,
version 2.7.2 is preferred, as some malloc debugging packages
work a lot better with it than with 2.95 or later versions.
- Type "make" then "make -k install".
- If required, invoke the package-specific command to prepare
src/temacs for execution.
- cd ..; src/temacs
(Note that this runs `temacs' instead of the usual `emacs' executable.
This avoids problems with dumping Emacs mentioned above.)
Some malloc debugging libraries might print lots of false alarms for
bitfields used by Emacs in some data structures. If you want to get
rid of the false alarms, you will have to hack the definitions of
these data structures on the respective headers to remove the `:N'
bitfield definitions (which will cause each such field to use a full
int).
** Some suggestions for debugging on MS Windows:
(written by Marc Fleischeuers, Geoff Voelker and Andrew Innes)
To debug Emacs with Microsoft Visual C++, you either start emacs from
the debugger or attach the debugger to a running emacs process.
To start emacs from the debugger, you can use the file bin/debug.bat.
The Microsoft Developer studio will start and under Project, Settings,
Debug, General you can set the command-line arguments and Emacs's
startup directory. Set breakpoints (Edit, Breakpoints) at Fsignal and
other functions that you want to examine. Run the program (Build,
Start debug). Emacs will start and the debugger will take control as
soon as a breakpoint is hit.
You can also attach the debugger to an already running Emacs process.
To do this, start up the Microsoft Developer studio and select Build,
Start debug, Attach to process. Choose the Emacs process from the
list. Send a break to the running process (Debug, Break) and you will
find that execution is halted somewhere in user32.dll. Open the stack
trace window and go up the stack to w32_msg_pump. Now you can set
breakpoints in Emacs (Edit, Breakpoints). Continue the running Emacs
process (Debug, Step out) and control will return to Emacs, until a
breakpoint is hit.
To examine the contents of a Lisp variable, you can use the function
'debug_print'. Right-click on a variable, select QuickWatch (it has
an eyeglass symbol on its button in the toolbar), and in the text
field at the top of the window, place 'debug_print(' and ')' around
the expression. Press 'Recalculate' and the output is sent to stderr,
and to the debugger via the OutputDebugString routine. The output
sent to stderr should be displayed in the console window that was
opened when the emacs.exe executable was started. The output sent to
the debugger should be displayed in the 'Debug' pane in the Output
window. If Emacs was started from the debugger, a console window was
opened at Emacs' startup; this console window also shows the output of
'debug_print'.
For example, start and run Emacs in the debugger until it is waiting
for user input. Then click on the `Break' button in the debugger to
halt execution. Emacs should halt in `ZwUserGetMessage' waiting for
an input event. Use the `Call Stack' window to select the procedure
`w32_msp_pump' up the call stack (see below for why you have to do
this). Open the QuickWatch window and enter
"debug_print(Vexec_path)". Evaluating this expression will then print
out the contents of the Lisp variable `exec-path'.
If QuickWatch reports that the symbol is unknown, then check the call
stack in the `Call Stack' window. If the selected frame in the call
stack is not an Emacs procedure, then the debugger won't recognize
Emacs symbols. Instead, select a frame that is inside an Emacs
procedure and try using `debug_print' again.
If QuickWatch invokes debug_print but nothing happens, then check the
thread that is selected in the debugger. If the selected thread is
not the last thread to run (the "current" thread), then it cannot be
used to execute debug_print. Use the Debug menu to select the current
thread and try using debug_print again. Note that the debugger halts
execution (e.g., due to a breakpoint) in the context of the current
thread, so this should only be a problem if you've explicitly switched
threads.
It is also possible to keep appropriately masked and typecast Lisp
symbols in the Watch window, this is more convenient when steeping
though the code. For instance, on entering apply_lambda, you can
watch (struct Lisp_Symbol *) (0xfffffff & args[0]).
Optimizations often confuse the MS debugger. For example, the
debugger will sometimes report wrong line numbers, e.g., when it
prints the backtrace for a crash. It is usually best to look at the
disassembly to determine exactly what code is being run--the
disassembly will probably show several source lines followed by a
block of assembler for those lines. The actual point where Emacs
crashes will be one of those source lines, but not neccesarily the one
that the debugger reports.
Another problematic area with the MS debugger is with variables that
are stored in registers: it will sometimes display wrong values for
those variables. Usually you will not be able to see any value for a
register variable, but if it is only being stored in a register
temporarily, you will see an old value for it. Again, you need to
look at the disassembly to determine which registers are being used,
and look at those registers directly, to see the actual current values
of these variables.
;;; arch-tag: fbf32980-e35d-481f-8e4c-a2eca2586e6b

View file

@ -1,98 +0,0 @@
-*- text -*-
For an order form for all Emacs and FSF distributions deliverable from
the USA, see http://www.gnu.org/order/order.html.
GNU Emacs availability information, October 2000
Copyright (C) 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1995, 1998, 2000
Free Software Foundation, Inc.
Permission is granted to anyone to make or distribute
verbatim copies of this document provided that the
copyright notice and this permission notice are preserved.
GNU Emacs is legally owned by the Free Software Foundation, but we
regard the foundation more as its custodian on behalf of the public.
In the GNU project, when we speak of "free software", this refers to
liberty, not price. Specifically, it refers to the users' freedom to
study, copy, change and improve the software. Sometimes users pay
money for copies of GNU software, and sometimes they get copies at no
charge. But regardless of how they got the software, or whether it
was modified by anyone else along the way, they have the freedom to
copy and change it--those freedoms are what "free software" means.
The precise conditions for copying and modification are stated in the
document "GNU General Public License," a copy of which is required to
be distributed with every copy of GNU Emacs. It is usually in a file
named `COPYING' in the same directory as this file. These conditions
are designed to make sure that everyone who has a copy of GNU Emacs
(including modified versions) has the freedom to redistribute and
change it.
If you do not know anyone to get a copy of GNU Emacs from, you can
order a cd-rom from the Free Software Foundation. We distribute
several Emacs versions. We also distribute nicely typeset copies of
the Emacs user manual, Emacs Lisp Reference Manual, the Emacs
reference card, etc. See http://www.gnu.org/order/order.html.
If you have Internet access, you can copy the latest Emacs
distribution from hosts, such as ftp.gnu.org. There are several ways
to do this; see http://www.gnu.org/software/software.html for more
information.
Emacs has been run on GNU/Linux, FreeBSD, NetBSD, OpenBSD, and on many
Unix systems, on a variety of types of cpu, as well as on MSDOS,
Windows and MacOS. It also formerly worked on VMS and on Apollo
computers, though with some deficiencies that reflect problems in
these operating systems. See the file `MACHINES' in this directory
(see above) for a full list of machines that GNU Emacs has been tested
on, with machine-specific installation notes and warnings.
Note that there is significant variation between Unix systems
supposedly running the same version of Unix; it is possible that what
works in GNU Emacs for me does not work on your system due to such an
incompatibility. Since I must avoid reading Unix source code, I
cannot even guess what such problems may exist.
GNU Emacs is distributed with no warranty (see the General Public
License for full details, in the file `COPYING' in this directory (see
above)), and neither I nor the Free Software Foundation promises any
kind of support or assistance to users. The foundation keeps a list
of people who are willing to offer support and assistance for hire.
See http://www.gnu.org/help/gethelp.html.
However, we plan to continue to improve GNU Emacs and keep it
reliable, so please send me any complaints and suggestions you have.
I will probably fix anything that I consider a malfunction. I may
make improvements that are suggested, but I may choose not to.
If you are on the Internet, report bugs to bug-gnu-emacs@gnu.org. You
can use the Emacs command M-x report-bug RET to mail a bug report.
Please read the Bugs section of the Emacs manual before reporting
bugs.
General questions about the GNU Project can be asked of gnu@gnu.org.
If you are a computer manufacturer, I encourage you to ship a copy of
GNU Emacs with every computer you deliver. The same copying
permission terms apply to computer manufacturers as to everyone else.
You should consider making a donation to help support the GNU project;
if you estimate what it would cost to distribute some commercial
product and divide it by five, that is a good amount.
If you like GNU Emacs, please express your satisfaction with a
donation: send me or the Foundation what you feel Emacs has been worth
to you. If you are glad that I developed GNU Emacs and distribute it
as free software, rather than following the obstructive and antisocial
practices typical of software developers, reward me. If you would
like the Foundation to develop more free software, contribute.
Your donations will help to support the development of additional GNU
software. GNU/Linux systems (variants of GNU, based on the kernel
Linux) have millions of users, but there is still much to be done.
For more information on GNU, see the file `GNU' in this directory (see
above).
Richard M Stallman
Chief GNUisance,
President of the Free Software Foundation

View file

@ -1,93 +0,0 @@
-*- indented-text -*-
This file contains two sections:
1) An EBNF (Extended Backus-Naur Form) description of the format of
the tags file created by etags.c and interpreted by etags.el;
2) A discussion of tag names and implicit tag names.
====================== 1) EBNF tag file description =====================
Productions created from current behaviour to aid extensions
Francesco Potorti` <pot@gnu.org> 2002
----------------
FF ::= #x0c /* tag section starter */
LF ::= #x0a /* line terminator */
DEL ::= #x7f /* pattern terminator */
SOH ::= #x01 /* name terminator */
regchar ::= [^#x0a#x0c#x7f] /* regular character */
regstring ::= { regchar } /* regular string */
unsint ::= [0-9] { [0-9] } /* non-negative integer */
tagfile ::= { tagsection } /* a tags file */
tagsection ::= FF LF ( includesec | regularsec ) LF
includesec ::= filename ",include" [ LF fileprop ]
regularsec ::= filename "," [ unsint ] [ LF fileprop ] { LF tag }
filename ::= regchar regstring /* a file name */
fileprop ::= "(" regstring ")" /* an elisp alist */
tag ::= directtag | patterntag
directtag ::= DEL realposition /* no pattern */
patterntag ::= pattern DEL [ tagname SOH ] position
pattern ::= regstring /* a tag pattern */
tagname ::= regchar regstring /* a tag name */
position ::= realposition | "," /* charpos,linepos */
realposition ::= "," unsint | unsint "," | unsint "," unsint
==================== end of EBNF tag file description ====================
======================= 2) discussion of tag names =======================
- WHAT ARE TAG NAMES
Tag lines in a tags file are usually made from the above defined pattern
and by an optional tag name. The pattern is a string that is searched
in the source file to find the tagged line.
- WHY TAG NAMES ARE GOOD
When a user looks for a tag, Emacs first compares the tag with the tag
names contained in the tags file. If no match is found, Emacs compares
the tag with the patterns. The tag name is then the preferred way to
look for tags in the tags file, because when the tag name is present
Emacs can find a tag faster and more accurately. These tag names are
part of tag lines in the tags file, so we call them "explicit".
- WHY IMPLICIT TAG NAMES ARE EVEN BETTER
When a tag line has no name, but a name can be deduced from the pattern,
we say that the tag line has an implicit tag name. Often tag names are
redundant; this happens when the name of a tag is an easily guessable
substring of the tag pattern. We define a set of rules to decide
whether it is possible to deduce the tag name from the pattern, and make
an unnamed tag in those cases. The name deduced from the pattern of an
unnamed tag is the implicit name of that tag.
When the user looks for a tag, and Emacs finds no explicit tag names
that match it, Emacs then looks for an tag whose implicit tag name
matches the request. etags.c uses implicit tag names when possible, in
order to reduce the size of the tags file.
An implicit tag name is deduced from the pattern by discarding the
last character if it is one of ` \f\t\n\r()=,;', then taking all the
rightmost consecutive characters in the pattern which are not one of
those.
===================== end of discussion of tag names =====================

View file

@ -1,2 +0,0 @@
Please refer to <http://www.gnu.org/software/emacs/> for information
about obtaining Emacs.

543
etc/GNU
View file

@ -1,543 +0,0 @@
Copyright (C) 1985, 1993, 2003, 2005 Free Software Foundation, Inc.
Permission is granted to anyone to make or distribute verbatim copies
of this document, 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.
Modified versions may not be made.
The GNU Manifesto
*****************
The GNU Manifesto which appears below was written by Richard
Stallman at the beginning of the GNU project, to ask for
participation and support. For the first few years, it was
updated in minor ways to account for developments, but now it
seems best to leave it unchanged as most people have seen it.
Since that time, we have learned about certain common
misunderstandings that different wording could help avoid.
Footnotes added in 1993 help clarify these points.
For up-to-date information about the available GNU software,
please see the latest issue of the GNU's Bulletin. The list is
much too long to include here.
What's GNU? Gnu's Not Unix!
============================
GNU, which stands for Gnu's Not Unix, is the name for the complete
Unix-compatible software system which I am writing so that I can give it
away free to everyone who can use it.(1) Several other volunteers are
helping me. Contributions of time, money, programs and equipment are
greatly needed.
So far we have an Emacs text editor with Lisp for writing editor
commands, a source level debugger, a yacc-compatible parser generator,
a linker, and around 35 utilities. A shell (command interpreter) is
nearly completed. A new portable optimizing C compiler has compiled
itself and may be released this year. An initial kernel exists but
many more features are needed to emulate Unix. When the kernel and
compiler are finished, it will be possible to distribute a GNU system
suitable for program development. We will use TeX as our text
formatter, but an nroff is being worked on. We will use the free,
portable X window system as well. After this we will add a portable
Common Lisp, an Empire game, a spreadsheet, and hundreds of other
things, plus on-line documentation. We hope to supply, eventually,
everything useful that normally comes with a Unix system, and more.
GNU will be able to run Unix programs, but will not be identical to
Unix. We will make all improvements that are convenient, based on our
experience with other operating systems. In particular, we plan to
have longer file names, file version numbers, a crashproof file system,
file name completion perhaps, terminal-independent display support, and
perhaps eventually a Lisp-based window system through which several
Lisp programs and ordinary Unix programs can share a screen. Both C
and Lisp will be available as system programming languages. We will
try to support UUCP, MIT Chaosnet, and Internet protocols for
communication.
GNU is aimed initially at machines in the 68000/16000 class with
virtual memory, because they are the easiest machines to make it run
on. The extra effort to make it run on smaller machines will be left
to someone who wants to use it on them.
To avoid horrible confusion, please pronounce the `G' in the word
`GNU' when it is the name of this project.
Why I Must Write GNU
====================
I consider that the golden rule requires that if I like a program I
must share it with other people who like it. Software sellers want to
divide the users and conquer them, making each user agree not to share
with others. I refuse to break solidarity with other users in this
way. I cannot in good conscience sign a nondisclosure agreement or a
software license agreement. For years I worked within the Artificial
Intelligence Lab to resist such tendencies and other inhospitalities,
but eventually they had gone too far: I could not remain in an
institution where such things are done for me against my will.
So that I can continue to use computers without dishonor, I have
decided to put together a sufficient body of free software so that I
will be able to get along without any software that is not free. I
have resigned from the AI lab to deny MIT any legal excuse to prevent
me from giving GNU away.
Why GNU Will Be Compatible with Unix
====================================
Unix is not my ideal system, but it is not too bad. The essential
features of Unix seem to be good ones, and I think I can fill in what
Unix lacks without spoiling them. And a system compatible with Unix
would be convenient for many other people to adopt.
How GNU Will Be Available
=========================
GNU is not in the public domain. Everyone will be permitted to
modify and redistribute GNU, but no distributor will be allowed to
restrict its further redistribution. That is to say, proprietary
modifications will not be allowed. I want to make sure that all
versions of GNU remain free.
Why Many Other Programmers Want to Help
=======================================
I have found many other programmers who are excited about GNU and
want to help.
Many programmers are unhappy about the commercialization of system
software. It may enable them to make more money, but it requires them
to feel in conflict with other programmers in general rather than feel
as comrades. The fundamental act of friendship among programmers is the
sharing of programs; marketing arrangements now typically used
essentially forbid programmers to treat others as friends. The
purchaser of software must choose between friendship and obeying the
law. Naturally, many decide that friendship is more important. But
those who believe in law often do not feel at ease with either choice.
They become cynical and think that programming is just a way of making
money.
By working on and using GNU rather than proprietary programs, we can
be hospitable to everyone and obey the law. In addition, GNU serves as
an example to inspire and a banner to rally others to join us in
sharing. This can give us a feeling of harmony which is impossible if
we use software that is not free. For about half the programmers I
talk to, this is an important happiness that money cannot replace.
How You Can Contribute
======================
I am asking computer manufacturers for donations of machines and
money. I'm asking individuals for donations of programs and work.
One consequence you can expect if you donate machines is that GNU
will run on them at an early date. The machines should be complete,
ready to use systems, approved for use in a residential area, and not
in need of sophisticated cooling or power.
I have found very many programmers eager to contribute part-time
work for GNU. For most projects, such part-time distributed work would
be very hard to coordinate; the independently-written parts would not
work together. But for the particular task of replacing Unix, this
problem is absent. A complete Unix system contains hundreds of utility
programs, each of which is documented separately. Most interface
specifications are fixed by Unix compatibility. If each contributor
can write a compatible replacement for a single Unix utility, and make
it work properly in place of the original on a Unix system, then these
utilities will work right when put together. Even allowing for Murphy
to create a few unexpected problems, assembling these components will
be a feasible task. (The kernel will require closer communication and
will be worked on by a small, tight group.)
If I get donations of money, I may be able to hire a few people full
or part time. The salary won't be high by programmers' standards, but
I'm looking for people for whom building community spirit is as
important as making money. I view this as a way of enabling dedicated
people to devote their full energies to working on GNU by sparing them
the need to make a living in another way.
Why All Computer Users Will Benefit
===================================
Once GNU is written, everyone will be able to obtain good system
software free, just like air.(2)
This means much more than just saving everyone the price of a Unix
license. It means that much wasteful duplication of system programming
effort will be avoided. This effort can go instead into advancing the
state of the art.
Complete system sources will be available to everyone. As a result,
a user who needs changes in the system will always be free to make them
himself, or hire any available programmer or company to make them for
him. Users will no longer be at the mercy of one programmer or company
which owns the sources and is in sole position to make changes.
Schools will be able to provide a much more educational environment
by encouraging all students to study and improve the system code.
Harvard's computer lab used to have the policy that no program could be
installed on the system if its sources were not on public display, and
upheld it by actually refusing to install certain programs. I was very
much inspired by this.
Finally, the overhead of considering who owns the system software
and what one is or is not entitled to do with it will be lifted.
Arrangements to make people pay for using a program, including
licensing of copies, always incur a tremendous cost to society through
the cumbersome mechanisms necessary to figure out how much (that is,
which programs) a person must pay for. And only a police state can
force everyone to obey them. Consider a space station where air must
be manufactured at great cost: charging each breather per liter of air
may be fair, but wearing the metered gas mask all day and all night is
intolerable even if everyone can afford to pay the air bill. And the
TV cameras everywhere to see if you ever take the mask off are
outrageous. It's better to support the air plant with a head tax and
chuck the masks.
Copying all or parts of a program is as natural to a programmer as
breathing, and as productive. It ought to be as free.
Some Easily Rebutted Objections to GNU's Goals
==============================================
"Nobody will use it if it is free, because that means they can't
rely on any support."
"You have to charge for the program to pay for providing the
support."
If people would rather pay for GNU plus service than get GNU free
without service, a company to provide just service to people who have
obtained GNU free ought to be profitable.(3)
We must distinguish between support in the form of real programming
work and mere handholding. The former is something one cannot rely on
from a software vendor. If your problem is not shared by enough
people, the vendor will tell you to get lost.
If your business needs to be able to rely on support, the only way
is to have all the necessary sources and tools. Then you can hire any
available person to fix your problem; you are not at the mercy of any
individual. With Unix, the price of sources puts this out of
consideration for most businesses. With GNU this will be easy. It is
still possible for there to be no available competent person, but this
problem cannot be blamed on distribution arrangements. GNU does not
eliminate all the world's problems, only some of them.
Meanwhile, the users who know nothing about computers need
handholding: doing things for them which they could easily do
themselves but don't know how.
Such services could be provided by companies that sell just
hand-holding and repair service. If it is true that users would rather
spend money and get a product with service, they will also be willing
to buy the service having got the product free. The service companies
will compete in quality and price; users will not be tied to any
particular one. Meanwhile, those of us who don't need the service
should be able to use the program without paying for the service.
"You cannot reach many people without advertising, and you must
charge for the program to support that."
"It's no use advertising a program people can get free."
There are various forms of free or very cheap publicity that can be
used to inform numbers of computer users about something like GNU. But
it may be true that one can reach more microcomputer users with
advertising. If this is really so, a business which advertises the
service of copying and mailing GNU for a fee ought to be successful
enough to pay for its advertising and more. This way, only the users
who benefit from the advertising pay for it.
On the other hand, if many people get GNU from their friends, and
such companies don't succeed, this will show that advertising was not
really necessary to spread GNU. Why is it that free market advocates
don't want to let the free market decide this?(4)
"My company needs a proprietary operating system to get a
competitive edge."
GNU will remove operating system software from the realm of
competition. You will not be able to get an edge in this area, but
neither will your competitors be able to get an edge over you. You and
they will compete in other areas, while benefiting mutually in this
one. If your business is selling an operating system, you will not
like GNU, but that's tough on you. If your business is something else,
GNU can save you from being pushed into the expensive business of
selling operating systems.
I would like to see GNU development supported by gifts from many
manufacturers and users, reducing the cost to each.(5)
"Don't programmers deserve a reward for their creativity?"
If anything deserves a reward, it is social contribution.
Creativity can be a social contribution, but only in so far as society
is free to use the results. If programmers deserve to be rewarded for
creating innovative programs, by the same token they deserve to be
punished if they restrict the use of these programs.
"Shouldn't a programmer be able to ask for a reward for his
creativity?"
There is nothing wrong with wanting pay for work, or seeking to
maximize one's income, as long as one does not use means that are
destructive. But the means customary in the field of software today
are based on destruction.
Extracting money from users of a program by restricting their use of
it is destructive because the restrictions reduce the amount and the
ways that the program can be used. This reduces the amount of wealth
that humanity derives from the program. When there is a deliberate
choice to restrict, the harmful consequences are deliberate destruction.
The reason a good citizen does not use such destructive means to
become wealthier is that, if everyone did so, we would all become
poorer from the mutual destructiveness. This is Kantian ethics; or,
the Golden Rule. Since I do not like the consequences that result if
everyone hoards information, I am required to consider it wrong for one
to do so. Specifically, the desire to be rewarded for one's creativity
does not justify depriving the world in general of all or part of that
creativity.
"Won't programmers starve?"
I could answer that nobody is forced to be a programmer. Most of us
cannot manage to get any money for standing on the street and making
faces. But we are not, as a result, condemned to spend our lives
standing on the street making faces, and starving. We do something
else.
But that is the wrong answer because it accepts the questioner's
implicit assumption: that without ownership of software, programmers
cannot possibly be paid a cent. Supposedly it is all or nothing.
The real reason programmers will not starve is that it will still be
possible for them to get paid for programming; just not paid as much as
now.
Restricting copying is not the only basis for business in software.
It is the most common basis because it brings in the most money. If it
were prohibited, or rejected by the customer, software business would
move to other bases of organization which are now used less often.
There are always numerous ways to organize any kind of business.
Probably programming will not be as lucrative on the new basis as it
is now. But that is not an argument against the change. It is not
considered an injustice that sales clerks make the salaries that they
now do. If programmers made the same, that would not be an injustice
either. (In practice they would still make considerably more than
that.)
"Don't people have a right to control how their creativity is
used?"
"Control over the use of one's ideas" really constitutes control over
other people's lives; and it is usually used to make their lives more
difficult.
People who have studied the issue of intellectual property rights(6)
carefully (such as lawyers) say that there is no intrinsic right to
intellectual property. The kinds of supposed intellectual property
rights that the government recognizes were created by specific acts of
legislation for specific purposes.
For example, the patent system was established to encourage
inventors to disclose the details of their inventions. Its purpose was
to help society rather than to help inventors. At the time, the life
span of 17 years for a patent was short compared with the rate of
advance of the state of the art. Since patents are an issue only among
manufacturers, for whom the cost and effort of a license agreement are
small compared with setting up production, the patents often do not do
much harm. They do not obstruct most individuals who use patented
products.
The idea of copyright did not exist in ancient times, when authors
frequently copied other authors at length in works of non-fiction. This
practice was useful, and is the only way many authors' works have
survived even in part. The copyright system was created expressly for
the purpose of encouraging authorship. In the domain for which it was
invented--books, which could be copied economically only on a printing
press--it did little harm, and did not obstruct most of the individuals
who read the books.
All intellectual property rights are just licenses granted by society
because it was thought, rightly or wrongly, that society as a whole
would benefit by granting them. But in any particular situation, we
have to ask: are we really better off granting such license? What kind
of act are we licensing a person to do?
The case of programs today is very different from that of books a
hundred years ago. The fact that the easiest way to copy a program is
from one neighbor to another, the fact that a program has both source
code and object code which are distinct, and the fact that a program is
used rather than read and enjoyed, combine to create a situation in
which a person who enforces a copyright is harming society as a whole
both materially and spiritually; in which a person should not do so
regardless of whether the law enables him to.
"Competition makes things get done better."
The paradigm of competition is a race: by rewarding the winner, we
encourage everyone to run faster. When capitalism really works this
way, it does a good job; but its defenders are wrong in assuming it
always works this way. If the runners forget why the reward is offered
and become intent on winning, no matter how, they may find other
strategies--such as, attacking other runners. If the runners get into
a fist fight, they will all finish late.
Proprietary and secret software is the moral equivalent of runners
in a fist fight. Sad to say, the only referee we've got does not seem
to object to fights; he just regulates them ("For every ten yards you
run, you can fire one shot"). He really ought to break them up, and
penalize runners for even trying to fight.
"Won't everyone stop programming without a monetary incentive?"
Actually, many people will program with absolutely no monetary
incentive. Programming has an irresistible fascination for some
people, usually the people who are best at it. There is no shortage of
professional musicians who keep at it even though they have no hope of
making a living that way.
But really this question, though commonly asked, is not appropriate
to the situation. Pay for programmers will not disappear, only become
less. So the right question is, will anyone program with a reduced
monetary incentive? My experience shows that they will.
For more than ten years, many of the world's best programmers worked
at the Artificial Intelligence Lab for far less money than they could
have had anywhere else. They got many kinds of non-monetary rewards:
fame and appreciation, for example. And creativity is also fun, a
reward in itself.
Then most of them left when offered a chance to do the same
interesting work for a lot of money.
What the facts show is that people will program for reasons other
than riches; but if given a chance to make a lot of money as well, they
will come to expect and demand it. Low-paying organizations do poorly
in competition with high-paying ones, but they do not have to do badly
if the high-paying ones are banned.
"We need the programmers desperately. If they demand that we stop
helping our neighbors, we have to obey."
You're never so desperate that you have to obey this sort of demand.
Remember: millions for defense, but not a cent for tribute!
"Programmers need to make a living somehow."
In the short run, this is true. However, there are plenty of ways
that programmers could make a living without selling the right to use a
program. This way is customary now because it brings programmers and
businessmen the most money, not because it is the only way to make a
living. It is easy to find other ways if you want to find them. Here
are a number of examples.
A manufacturer introducing a new computer will pay for the porting of
operating systems onto the new hardware.
The sale of teaching, hand-holding and maintenance services could
also employ programmers.
People with new ideas could distribute programs as freeware(7), asking
for donations from satisfied users, or selling hand-holding services.
I have met people who are already working this way successfully.
Users with related needs can form users' groups, and pay dues. A
group would contract with programming companies to write programs that
the group's members would like to use.
All sorts of development can be funded with a Software Tax:
Suppose everyone who buys a computer has to pay x percent of the
price as a software tax. The government gives this to an agency
like the NSF to spend on software development.
But if the computer buyer makes a donation to software development
himself, he can take a credit against the tax. He can donate to
the project of his own choosing--often, chosen because he hopes to
use the results when it is done. He can take a credit for any
amount of donation up to the total tax he had to pay.
The total tax rate could be decided by a vote of the payers of the
tax, weighted according to the amount they will be taxed on.
The consequences:
* The computer-using community supports software development.
* This community decides what level of support is needed.
* Users who care which projects their share is spent on can
choose this for themselves.
In the long run, making programs free is a step toward the
post-scarcity world, where nobody will have to work very hard just to
make a living. People will be free to devote themselves to activities
that are fun, such as programming, after spending the necessary ten
hours a week on required tasks such as legislation, family counseling,
robot repair and asteroid prospecting. There will be no need to be
able to make a living from programming.
We have already greatly reduced the amount of work that the whole
society must do for its actual productivity, but only a little of this
has translated itself into leisure for workers because much
nonproductive activity is required to accompany productive activity.
The main causes of this are bureaucracy and isometric struggles against
competition. Free software will greatly reduce these drains in the
area of software production. We must do this, in order for technical
gains in productivity to translate into less work for us.
---------- Footnotes ----------
(1) The wording here was careless. The intention was that nobody
would have to pay for *permission* to use the GNU system. But the
words don't make this clear, and people often interpret them as saying
that copies of GNU should always be distributed at little or no charge.
That was never the intent; later on, the manifesto mentions the
possibility of companies providing the service of distribution for a
profit. Subsequently I have learned to distinguish carefully between
"free" in the sense of freedom and "free" in the sense of price. Free
software is software that users have the freedom to distribute and
change. Some users may obtain copies at no charge, while others pay to
obtain copies--and if the funds help support improving the software, so
much the better. The important thing is that everyone who has a copy
has the freedom to cooperate with others in using it.
(2) This is another place I failed to distinguish carefully between
the two different meanings of "free". The statement as it stands is
not false--you can get copies of GNU software at no charge, from your
friends or over the net. But it does suggest the wrong idea.
(3) Several such companies now exist.
(4) The Free Software Foundation raised most of its funds for 10
years from a distribution service, although it is a charity rather
than a company.
(5) A group of computer companies pooled funds around 1991 to
support maintenance of the GNU C Compiler.
(6) In the 80s I had not yet realized how confusing it was to speak
of "the issue" of "intellectual property". That term is obviously
biased; more subtle is the fact that it lumps together various
disparate laws which raise very different issues. Nowadays I urge
people to reject the term "intellectual property" entirely, lest it
lead others to suppose that those laws form one coherent issue. The way to be
clear is to to discuss patents, copyrights, and trademarks separately.
See http://www.gnu.org/philosophy/not-ipr.xhtml for more explanation
of how this term spreads confusion and bias.
(7) In 1985 I had not yet recognized the importance of distinguishing
between "free software" and "freeware". The term "freeware" means
software you are free to redistribute, but usually you are not free to study
and change the source code, so most of it is not free software.
See http://www.gnu.org/philosophy/words-to-avoid.html for more
explanation.

View file

@ -1,545 +0,0 @@
GNUS NEWS -- history of user-visible changes.
Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
See the end for copying conditions.
Please send Gnus bug reports to bugs@gnus.org.
For older news, see Gnus info node "New Features".
* Changes in Oort Gnus
** `F' (`gnus-article-followup-with-original') and `R'
(`gnus-article-reply-with-original') only yank the text in the region if the
region is active.
** `gnus-group-read-ephemeral-group' can be called interactively, using `G M'.
** In draft groups, `e' is now bound to `gnus-draft-edit-message'.
Use `B w' for `gnus-summary-edit-article' instead.
** The revised Gnus FAQ is included in the manual.
See the info node "Frequently Asked Questions".
** Upgrading from previous (stable) version if you have used Oort.
If you have tried Oort (the unstable Gnus branch leading to this
release) but went back to a stable version, be careful when upgrading
to this version. In particular, you will probably want to remove all
.marks (nnml) and .mrk (nnfolder) files, so that flags are read from
your ~/.newsrc.eld instead of from the .marks/.mrk file where this
release store flags. See a later entry for more information about
marks. Note that downgrading isn't safe in general.
** Article Buttons
More buttons for URLs, mail addresses, Message-IDs, Info links, man pages and
Emacs or Gnus related references, see the info node "Article Buttons". The
variables `gnus-button-*-level' can be used to control the appearance of all
article buttons, see the info node "Article Button Levels".
** Dired integration
`gnus-dired-minor-mode' installs key bindings in dired buffers to send a file
as an attachment (`C-c C-m C-a'), open a file using the approriate mailcap
entry (`C-c C-m C-l'), and print a file using the mailcap entry (`C-c C-m
C-p'). See the info node "Other modes".
** Gnus can display RSS newsfeeds as a newsgroup. To get started do `B
nnrss RET RET' in the Group buffer.
** Single-part yenc encoded attachments can be decoded.
** Picons
The picons code has been reimplemented to work in Emacs 21 -- some of
the previous options have been removed or renamed.
Picons are small "personal icons" representing users, domain and
newsgroups, which can be displayed in the Article buffer. To enable
picons, install the picons database from
http://www.cs.indiana.edu/picons/ftp/index.html
and point `gnus-picon-databases' to that location.
** If the new option `gnus-treat-body-boundary' is `head', a boundary
line is drawn at the end of the headers.
** Retrieval of charters and control messages
There are new commands for fetching newsgroup charters (`H c') and
control messages (`H C').
** Delayed articles
You can delay the sending of a message with `C-c C-j' in the Message
buffer. The messages are delivered at specified time. This is useful
for sending yourself reminders. Setup with (gnus-delay-initialize).
** If `auto-compression-mode' is enabled, attachments are automatically
decompressed when activated.
** If the new option `nnml-use-compressed-files' is non-nil,
the nnml back end allows compressed message files.
** Signed article headers (X-PGP-Sig) can be verified with `W p'.
** The Summary Buffer uses an arrow in the fringe to indicate the
current article in Emacs 21 running on a graphical display. Customize
`gnus-summary-display-arrow' to disable it.
** Warn about email replies to news
Do you often find yourself replying to news by email by mistake? Then
the new option `gnus-confirm-mail-reply-to-news' is just the thing for
you.
** If the new option `gnus-summary-display-while-building' is non-nil,
the summary buffer is shown and updated as it's being built.
** The new `recent' mark "." indicates newly arrived messages (as
opposed to old but unread messages).
** The new option `gnus-gcc-mark-as-read' automatically marks
Gcc articles as read.
** The nndoc back end now supports mailman digests and exim bounces.
** Gnus supports RFC 2369 mailing list headers, and adds a number of
related commands in mailing list groups.
** The Date header can be displayed in a format that can be read aloud
in English, see `gnus-treat-date-english'.
** The envelope sender address can be customized when using Sendmail, see
`message-sendmail-envelope-from'.
** diffs are automatically highlighted in groups matching
`mm-uu-diff-groups-regexp'
** TLS wrapper shipped with Gnus
TLS/SSL is now supported in IMAP and NNTP via tls.el and GNUTLS. The
old TLS/SSL support via (external third party) ssl.el and OpenSSL
still works.
** New make.bat for compiling and installing Gnus under MS Windows
Use make.bat if you want to install Gnus under MS Windows, the first
argument to the batch-program should be the directory where xemacs.exe
respectively emacs.exe is located, iff you want to install Gnus after
compiling it, give make.bat /copy as the second parameter.
`make.bat' has been rewritten from scratch, it now features automatic
recognition of XEmacs and GNU Emacs, generates gnus-load.el, checks if
errors occur while compilation and generation of info files and reports
them at the end of the build process. It now uses makeinfo if it is
available and falls back to infohack.el otherwise. `make.bat' should now
install all files which are necessary to run Gnus and be generally a
complete replacement for the "configure; make; make install" cycle used
under Unix systems.
The new make.bat makes make-x.bat superfluous, so it has been removed.
** Support for non-ASCII domain names
Message supports non-ASCII domain names in From:, To: and Cc: and will
query you whether to perform encoding when you try to send a message.
The variable `message-use-idna' controls this. Gnus will also decode
non-ASCII domain names in From:, To: and Cc: when you view a message.
The variable `gnus-use-idna' controls this.
** Better handling of Microsoft citation styles
Gnus now tries to recognize the mangled header block that some Microsoft
mailers use to indicate that the rest of the message is a citation, even
though it is not quoted in any way. The variable
`gnus-cite-unsightly-citation-regexp' matches the start of these
citations.
** gnus-article-skip-boring
If you set `gnus-article-skip-boring' to t, then Gnus will not scroll
down to show you a page that contains only boring text, which by
default means cited text and signature. You can customize what is
skippable using `gnus-article-boring-faces'.
This feature is especially useful if you read many articles that
consist of a little new content at the top with a long, untrimmed
message cited below.
** The format spec %C for positioning point has changed to %*.
** The new variable `gnus-parameters' can be used to set group parameters.
Earlier this was done only via `G p' (or `G c'), which stored the
parameters in ~/.newsrc.eld, but via this variable you can enjoy the
powers of customize, and simplified backups since you set the variable
in ~/.emacs instead of ~/.newsrc.eld. The variable maps regular
expressions matching group names to group parameters, a'la:
(setq gnus-parameters
'(("mail\\..*"
(gnus-show-threads nil)
(gnus-use-scoring nil))
("^nnimap:\\(foo.bar\\)$"
(to-group . "\\1"))))
** Smileys (":-)", ";-)" etc) are now iconized for Emacs too.
Customize `gnus-treat-display-smileys' to disable it.
** Gnus no longer generates the Sender: header automatically.
Earlier it was generated iff the user configurable email address was
different from the Gnus guessed default user address. As the guessing
algorithm is rarely correct these days, and (more controversially) the
only use of the Sender: header was to check if you are entitled to
cancel/supersede news (which is now solved by Cancel Locks instead,
see another entry), generation of the header has been disabled by
default. See the variables `message-required-headers',
`message-required-news-headers', and `message-required-mail-headers'.
** Features from third party message-utils.el added to message.el.
Message now asks if you wish to remove "(was: <old subject>)" from
subject lines (see `message-subject-trailing-was-query'). C-c M-m and
C-c M-f inserts markers indicating included text. C-c C-f a adds a
X-No-Archive: header. C-c C-f x inserts appropriate headers and a
note in the body for cross-postings and followups (see the variables
`message-cross-post-*').
** References and X-Draft-Headers are no longer generated when you
start composing messages and `message-generate-headers-first' is nil.
** Improved anti-spam features.
Gnus is now able to take out spam from your mail and news streams
using a wide variety of programs and filter rules. Among the supported
methods are RBL blocklists, bogofilter and white/blacklists. Hooks
for easy use of external packages such as SpamAssassin and Hashcash
are also new.
** Easy inclusion of X-Faces headers.
** In the summary buffer, the new command / N inserts new messages and
/ o inserts old messages.
** Gnus decodes morse encoded messages if you press W m.
** Unread count correct in nnimap groups.
The estimated number of unread articles in the group buffer should now
be correct for nnimap groups. This is achieved by calling
`nnimap-fixup-unread-after-getting-new-news' from the
`gnus-setup-news-hook' (called on startup) and
`gnus-after-getting-new-news-hook' (called after getting new mail).
If you have modified those variables from the default, you may want to
add n-f-u-a-g-n-n again. If you were happy with the estimate and want
to save some (minimal) time when getting new mail, remove the
function.
** Group Carbon Copy (GCC) quoting
To support groups that contains SPC and other weird characters, groups
are quoted before they are placed in the Gcc: header. This means
variables such as `gnus-message-archive-group' should no longer
contain quote characters to make groups containing SPC work. Also, if
you are using the string "nnml:foo, nnml:bar" (indicating Gcc into two
groups) you must change it to return the list ("nnml:foo" "nnml:bar"),
otherwise the Gcc: line will be quoted incorrectly. Note that
returning the string "nnml:foo, nnml:bar" was incorrect earlier, it
just didn't generate any problems since it was inserted directly.
** ~/News/overview/ not used.
As a result of the following change, the ~/News/overview/ directory is
not used any more. You can safely delete the entire hierarchy.
** gnus-agent
The Gnus Agent has seen a major update. It is now enabled by default,
and all nntp and nnimap servers from `gnus-select-method' and
`gnus-secondary-select-method' are agentized by default. Earlier only
the server in `gnus-select-method' was agentized by the default, and the
agent was disabled by default. When the agent is enabled, headers are
now also retrieved from the Agent cache instead of the backends when
possible. Earlier this only happened in the unplugged state. You can
enroll or remove servers with `J a' and `J r' in the server buffer.
Gnus will not download articles into the Agent cache, unless you
instruct it to do so, though, by using `J u' or `J s' from the Group
buffer. You revert to the old behaviour of having the Agent disabled
by customizing `gnus-agent'. Note that putting `(gnus-agentize)' in
~/.gnus is not needed any more.
** gnus-summary-line-format
The default value changed to "%U%R%z%I%(%[%4L: %-23,23f%]%) %s\n".
Moreover `gnus-extra-headers', `nnmail-extra-headers' and
`gnus-ignored-from-addresses' changed their default so that the users
name will be replaced by the recipient's name or the group name
posting to for NNTP groups.
** deuglify.el (gnus-article-outlook-deuglify-article)
A new file from Raymond Scholz <rscholz@zonix.de> for deuglifying
broken Outlook (Express) articles.
** (require 'gnus-load)
If you use a stand-alone Gnus distribution, you'd better add
"(require 'gnus-load)" to your ~/.emacs after adding the Gnus
lisp directory into load-path.
File gnus-load.el contains autoload commands, functions and variables,
some of which may not be included in distributions of Emacsen.
** gnus-slave-unplugged
A new command which starts gnus offline in slave mode.
** message-insinuate-rmail
Adding (message-insinuate-rmail) in .emacs and customizing
`mail-user-agent' to `gnus-user-agent' convinces Rmail to compose,
reply and forward messages in Message mode, where you can enjoy the
power of MML.
** message-minibuffer-local-map
The line below enables BBDB in resending a message:
(define-key message-minibuffer-local-map [?\t] 'bbdb-complete-name)
** Externalizing and deleting of attachments.
If `gnus-gcc-externalize-attachments' (or
`message-fcc-externalize-attachments') is non-nil, attach local files
as external parts.
The command `gnus-mime-save-part-and-strip' (bound to `C-o' on MIME
buttons) saves a part and replaces the part with an external one.
`gnus-mime-delete-part' (bound to `d' on MIME buttons) removes a part.
It works only on back ends that support editing.
** gnus-default-charset
The default value now guesses on the basis of your environment instead
of using Latin-1. Also the ".*" item in gnus-group-charset-alist is
removed.
** gnus-posting-styles
Add a new format of match like
((header "to" "larsi.*org")
(Organization "Somewhere, Inc."))
The old format like the lines below is obsolete, but still accepted.
(header "to" "larsi.*org"
(Organization "Somewhere, Inc."))
** message-ignored-news-headers and message-ignored-mail-headers
X-Draft-From and X-Gnus-Agent-Meta-Information have been added into
these two variables. If you customized those, perhaps you need add
those two headers too.
** Gnus reads the NOV and articles in the Agent if plugged.
If one reads an article while plugged, and the article already exists
in the Agent, it won't get downloaded once more. Customize
`gnus-agent-cache' to revert to the old behavior.
** Gnus supports the "format=flowed" (RFC 2646) parameter.
On composing messages, it is enabled by `use-hard-newlines'. Decoding
format=flowed was present but not documented in earlier versions.
** Gnus supports the generation of RFC 2298 Disposition Notification requests.
This is invoked with the C-c M-n key binding from message mode.
** Gnus supports Maildir groups.
Gnus includes a new backend nnmaildir.el.
** Printing capabilities are enhanced.
Gnus supports Muttprint natively with O P from the Summary and Article
buffers. Also, each individual MIME part can be printed using p on
the MIME button.
** Message supports the Importance: (RFC 2156) header.
In the message buffer, `C-c C-f C-i' or `C-c C-u' cycles through the
valid values.
** Gnus supports Cancel Locks in News.
This means a header "Cancel-Lock" is inserted in news posting. It is
used to determine if you wrote a article or not (for cancelling and
superseding). Gnus generates a random password string the first time
you post a message, and saves it using the Custom system. While the
variable is called `canlock-password', it is not security sensitive
data. Publishing your canlock string on the web will not allow anyone
to be able to anything she could not already do. The behaviour can be
changed by customizing `message-insert-canlock'.
** Gnus supports server-side mail filtering using Sieve.
Sieve rules can be added as Group Parameters for groups, and the
complete Sieve script is generated using `D g' from the Group buffer,
and then uploaded to the server using `C-c C-l' in the generated Sieve
buffer. Search the online Gnus manual for "sieve", and see the new
Sieve manual, for more information.
** Extended format specs.
Format spec "%&user-date;" is added into
`gnus-summary-line-format-alist'. Also, user defined extended format
specs are supported. The extended format specs look like "%u&foo;",
which invokes function `gnus-user-format-function-foo'. Because "&" is
used as the escape character, old user defined format "%u&" is no
longer supported.
** `/ *' (gnus-summary-limit-include-cached) is rewritten.
It was aliased to `Y c' (gnus-summary-insert-cached-articles). The new
function filters out other articles.
** Some limiting commands accept a C-u prefix to negate the match.
If C-u is used on subject, author or extra headers, i.e., `/ s', `/
a', and `/ x' (gnus-summary-limit-to-{subject,author,extra})
respectively, the result will be to display all articles that do not
match the expression.
** Group names are treated as UTF-8 by default.
This is supposedly what USEFOR wanted to migrate to. See
`gnus-group-name-charset-group-alist' and
`gnus-group-name-charset-method-alist' for customization.
** The nnml and nnfolder backends store marks for each group.
This makes it possible to take backup of nnml/nnfolder servers/groups
separately of ~/.newsrc.eld, while preserving marks. It also makes it
possible to share articles and marks between users (without sharing
the ~/.newsrc.eld file) within e.g. a department. It works by storing
the marks stored in ~/.newsrc.eld in a per-group file ".marks" (for
nnml) and "groupname.mrk" (for nnfolder, named "groupname"). If the
nnml/nnfolder is moved to another machine, Gnus will automatically use
the .marks or .mrk file instead of the information in ~/.newsrc.eld.
The new server variables `nnml-marks-is-evil' and
`nnfolder-marks-is-evil' can be used to disable this feature.
** The menu bar item (in Group and Summary buffer) named "Misc" has
been renamed to "Gnus".
** The menu bar item (in Message mode) named "MML" has been renamed to
"Attachments". Note that this menu also contains security related
stuff, like signing and encryption.
** gnus-group-charset-alist and gnus-group-ignored-charsets-alist.
The regexps in these variables are compared with full group names
instead of real group names in 5.8. Users who customize these
variables should change those regexps accordingly. For example:
("^han\\>" euc-kr) -> ("\\(^\\|:\\)han\\>" euc-kr)
** Gnus supports PGP (RFC 1991/2440), PGP/MIME (RFC 2015/3156) and
S/MIME (RFC 2630-2633).
It needs an external S/MIME and OpenPGP implementation, but no
additional lisp libraries. This add several menu items to the
Attachments menu, and C-c RET key bindings, when composing messages.
This also obsoletes `gnus-article-hide-pgp-hook'.
** Gnus inlines external parts (message/external).
** MML (Mime compose) prefix changed from `M-m' to `C-c C-m'.
This change was made to avoid conflict with the standard binding of
`back-to-indentation', which is also useful in message mode.
** The default for message-forward-show-mml changed to symbol best.
The behaviour for the `best' value is to show MML (i.e., convert MIME
to MML) when appropriate. MML will not be used when forwarding signed
or encrypted messages, as the conversion invalidate the digital
signature.
** Bug fixes.
* Changes in Pterodactyl Gnus (5.8/5.9)
The Gnus NEWS entries are short, but they reflect sweeping changes in
four areas: Article display treatment, MIME treatment,
internationalization and mail-fetching.
** The mail-fetching functions have changed. See the manual for the
many details. In particular, all procmail fetching variables are gone.
If you used procmail like in
(setq nnmail-use-procmail t)
(setq nnmail-spool-file 'procmail)
(setq nnmail-procmail-directory "~/mail/incoming/")
(setq nnmail-procmail-suffix "\\.in")
this now has changed to
(setq mail-sources
'((directory :path "~/mail/incoming/"
:suffix ".in")))
More information is available in the info doc at Select Methods ->
Getting Mail -> Mail Sources
** Gnus is now a MIME-capable reader. This affects many parts of
Gnus, and adds a slew of new commands. See the manual for details.
** Gnus has also been multilingualized. This also affects too
many parts of Gnus to summarize here, and adds many new variables.
** gnus-auto-select-first can now be a function to be
called to position point.
** The user can now decide which extra headers should be included in
summary buffers and NOV files.
** `gnus-article-display-hook' has been removed. Instead, a number
of variables starting with `gnus-treat-' have been added.
** The Gnus posting styles have been redone again and now works in a
subtly different manner.
** New web-based backends have been added: nnslashdot, nnwarchive
and nnultimate. nnweb has been revamped, again, to keep up with
ever-changing layouts.
** Gnus can now read IMAP mail via nnimap.
* For older news, see Gnus info node "New Features".
----------------------------------------------------------------------
Copyright information:
Copyright (C) 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
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 this permission notice are preserved,
thus giving the recipient permission to redistribute in turn.
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.
Local variables:
mode: outline
paragraph-separate: "[ ]*$"
end:

View file

@ -1,69 +0,0 @@
This is a list of ways to say hello in various languages.
Its purpose is to illustrate a number of scripts.
---------------------------------------------------------
Amharic ($(3"c!<!N"^(B) $(3!A!,!>(B
Arabic (38R(47d(3T!JSa(4W(3W(B
Braille $,2(3(1('('(5(B
C printf ("Hello, world!\n");
Czech (,Bh(Be,B9(Btina) Dobr,B}(B den
Danish (dansk) Hej, Goddag
Emacs emacs --no-splash -f view-hello-file
English [,0p U(B-,0EZ L(B] Hello
Esperanto Saluton (E,C6(Bo,C~(Ban,Cx(Bo ,Cf(Biu,C<(Ba,C}(Bde)
Estonian (eesti) Tere p,Ad(Bevast, Tere ,Au(Bhtust
Finnish (suomi) Hei, Hyv,Add(B p,Ad(Biv,Add(B
French (fran,Ag(Bais) Bonjour, Salut
Georgian ($,1JEJ0J@J7J5J4J:J8(B) $,1J2J0J;J0J@JOJ=J1J0(B
German (Deutsch) Guten Tag, Gr,A|_(B Gott
Greek (,Fekkgmij\(B) ,FCei\(B ,Fsar(B
Hebrew (,Hraxiz(B) ,Hylem(B
Hindi (4$,4!}t%"+0$,15y55B14$,4!.v#"Yv#"20$,15f6 1(B) 4$,4!8v#")0$,15h14$,4!hv#")0$,15n14$,4!zv#!)v#")v#"D0$,15x6-5d6'1(B, 4$,4!8v#")0$,15h14$,4!hv#")0$,15n14$,4!zv# ev#"Rv#")0$,15x6-5U5~14$,4!nv#"W0$,15p1(B 4$,4 J0$,16D1(B
Italian (italiano) Ciao, Buon giorno
Javanese (Jawa) System.out.println("Halo, selamat sore!");
Kannada (4$,43Ov#4z0$,1>u14$,44Kv#4zv#4M0$,1?(?M?(14$,43sv#4z0$,1?!1(B) 4$,44Kv#4z0$,1?(14$,44hv#4zv#40$,1?.14$,44qv#4{v#3Q0$,1?8?M>u?>14$,44av#4z0$,1?01(B
Lao ((1>RJRERG(B) (1JP:R-04U1(B, 0(1"m1c0Ki1b*!04U1(B
Malayalam (4$,46A0$,1@N14$,46E0$,1@R14$,46Bv#6M0$,1@O@^14$,46Fv#6W0$,1@S@"1(B) 4$,46<0$,1@H14$,46A0$,1@N14$,46Kv#6Vv#6)v#6M0$,1@X@m@5@^14$,46Cv#6W0$,1@P@"1(B
Maltese (il-Malti) Bon,Cu(Bu, Sa,C11(Ba
Mathematics $,1x (B p $,1x((B world $,1s"(B hello p $,2!a(B
Nederlands, Vlaams Hallo, Dag
Norwegian (norsk) Hei, God dag
Polish (polski) Dzie,Bq(B dobry! Cze,B6f(B!
Russian (,L`caaZXY(B) ,L7T`PRabRcYbU(B!
Slovak (sloven,Bh(Bina) Dobr,B}(B de,Br(B
Slovenian (sloven,B9h(Bina) Pozdravljeni!
Spanish (espa,Aq(Bol) ,A!(BHola!
Swedish (p,Ae(B svenska) Hej, Goddag
Tamil (4$,4*N0$,1<D14$,4(i0$,1<N<_14$,4*Vv#)b0$,1<T<m1(B) 4$,4*U0$,1<U14$,4*M0$,1<C14$,4*Hv#)b0$,1<5<m14$,4*H0$,1<514$,4*Qv#)b0$,1<N<m1(B
Thai (,T@RIRd7B(B) ,TJ0GQ1J04U1$0CQ1:(B, ,TJ0GQ1J04U10$h1P(B
Tibetan (4$(7"7r'"]0"7"]14"20"21!;4%P0"G#!"Q14"20"21!;(B) 4$(7"70"714$P0"!#C"Q1!;4"Er'"S0"E"S14"G0"G1!;4"70"714"2r'"[0"2"[1!;4"Dr'"[0"D"[14"#0"#14"G0"G1!>(B
Tigrigna ($(3"8#r!N"^(B) $(3!Q!,!<"8(B
Turkish (T,M|(Brk,Mg(Be) Merhaba
Ukrainian (,LcZ`Pw]alZP(B) ,L2vbPn(B
Vietnamese (Ti,1*(Bng Vi,1.(Bt) Ch,1`(Bo b,1U(Bn
Japanese ($BF|K\8l(B) $B$3$s$K$A$O(B, (I:]FAJ(B
Chinese ($AVPND(B,$AFUM(;0(B,$A::So(B) $ADc:C(B
Cantonese ($(0GnM$(B,$(0N]0*Hd(B) $(0*/=((B, $(0+$)p(B
Korean ($(CGQ1[(B) $(C>H3gGO<<?d(B, $(C>H3gGO=J4O1n(B
Difference among chinese characters in GB, JIS, KSC, BIG5:
GB $AT*Fx(B $A?*7"(B
JIS $B855$(B $B3+H/(B
KSC $(Cj*Q((B $(CKR[!(B
BIG5 $(0&x86(B $(0DeBv(B
Just for a test of JISX0212: $BqV$(DiQ(B (the second character is of JISX0212)
A short test for characters represented by the character set
mule-unicode-0100-24ff:
Czech ($,1 ,(Besky) Dobr,A}(B den
Esperanto Saluton (E$,1 E(Bo$,1 }(Ban$,1 =(Bo $,1 )(Biu$,1 U(Ba$,1!-(Bde)
Greek ($,1'5';';'7'='9':',(B) $,1&s'5'9',(B $,1'C'1'B(B
Hebrew ($,1-",q-(,y-*(B) $,1-),|,u,}(B
Russian ($,1(`(c(a(a(Z(X(Y(B) $,1(7(T(`(P(R(a(b(R(c(Y(b(U(B!
Maltese (il-Malti) Bon$,1 A(Bu, Sa$,1 G G(Ba
;;; Local Variables:
;;; tab-width: 32
;;; End:

View file

@ -1,443 +0,0 @@
GNU'S NOT UNIX
Conducted by David Betz and Jon Edwards
Richard Stallman discusses his public-domain
UNIX-compatible software system
with BYTE editors
(July 1986)
Copyright (C) 1986 Richard Stallman. Permission is granted to make and
distribute copies of this article as long as the copyright and this notice
appear on all copies.
Richard Stallman has undertaken probably the most ambitious free software
development project to date, the GNU system. In his GNU Manifesto,
published in the March 1985 issue of Dr. Dobb's Journal, Stallman described
GNU as a "complete Unix-compatible software system which I am writing so
that I can give it away free to everyone who can use it... Once GNU is
written, everyone will be able to obtain good system software free, just
like air." (GNU is an acronym for GNU's Not UNIX; the "G" is pronounced.)
Stallman is widely known as the author of EMACS, a powerful text editor
that he developed at the MIT Artificial Intelligence Laboratory. It is no
coincidence that the first piece of software produced as part of the GNU
project was a new implementation of EMACS. GNU EMACS has already achieved a
reputation as one of the best implementations of EMACS currently available
at any price.
BYTE: We read your GNU Manifesto in the March 1985 issue of Dr. Dobb's.
What has happened since? Was that really the beginning, and how have you
progressed since then?
Stallman: The publication in Dr. Dobb's wasn't the beginning of the
project. I wrote the GNU Manifesto when I was getting ready to start the
project, as a proposal to ask computer manufacturers for funding. They
didn't want to get involved, and I decided that rather than spend my time
trying to pursue funds, I ought to spend it writing code. The manifesto was
published about a year and a half after I had written it, when I had barely
begun distributing the GNU EMACS. Since that time, in addition to making
GNU EMACS more complete and making it run on many more computers, I have
nearly finished the optimizing C compiler and all the other software that
is needed for running C programs. This includes a source-level debugger
that has many features that the other source-level debuggers on UNIX don't
have. For example, it has convenience variables within the debugger so you
can save values, and it also has a history of all the values that you have
printed out, making it tremendously easier to chase around list structures.
BYTE: You have finished an editor that is now widely distributed and you
are about to finish the compiler.
Stallman: I expect that it will be finished this October.
BYTE: What about the kernel?
Stallman: I'm currently planning to start with the kernel that was written
at MIT and was released to the public recently with the idea that I would
use it. This kernel is called TRIX; it's based on remote procedure call. I
still need to add compatibility for a lot of the features of UNIX which it
doesn't have currently. I haven't started to work on that yet. I'm
finishing the compiler before I go to work on the kernel. I am also going
to have to rewrite the file system. I intend to make it failsafe just by
having it write blocks in the proper order so that the disk structure is
always consistent. Then I want to add version numbers. I have a complicated
scheme to reconcile version numbers with the way people usually use UNIX.
You have to be able to specify filenames without version numbers, but you
also have to be able to specify them with explicit version numbers, and
these both need to work with ordinary UNIX programs that have not been
modified in any way to deal with the existence of this feature. I think I
have a scheme for doing this, and only trying it will show me whether it
really does the job.
BYTE: Do you have a brief description you can give us as to how GNU as a
system will be superior to other systems? We know that one of your goals is
to produce something that is compatible with UNIX. But at least in the area
of file systems you have already said that you are going to go beyond UNIX
and produce something that is better.
Stallman: The C compiler will produce better code and run faster. The
debugger is better. With each piece I may or may not find a way to improve
it. But there is no one answer to this question. To some extent I am
getting the benefit of reimplementation, which makes many systems much
better. To some extent it's because I have been in the field a long time
and worked on many other systems. I therefore have many ideas to bring to
bear. One way in which it will be better is that practically everything in
the system will work on files of any size, on lines of any size, with any
characters appearing in them. The UNIX system is very bad in that regard.
It's not anything new as a principle of software engineering that you
shouldn't have arbitrary limits. But it just was the standard practice in
writing UNIX to put those in all the time, possibly just because they were
writing it for a very small computer. The only limit in the GNU system is
when your program runs out of memory because it tried to work on too much
data and there is no place to keep it all.
BYTE: And that isn't likely to be hit if you've got virtual memory. You may
just take forever to come up with the solution.
Stallman: Actually these limits tend to hit in a time long before you take
forever to come up with the solution.
BYTE: Can you say something about what types of machines and environments
GNU EMACS in particular has been made to run under? It's now running on
VAXes; has it migrated in any form to personal computers?
Stallman: I'm not sure what you mean by personal computers. For example, is
a Sun a personal computer? GNU EMACS requires at least a megabyte of
available memory and preferably more. It is normally used on machines that
have virtual memory. Except for various technical problems in a few C
compilers, almost any machine with virtual memory and running a fairly
recent version of UNIX will run GNU EMACS, and most of them currently do.
BYTE: Has anyone tried to port it to Ataris or Macintoshes?
Stallman: The Atari 1040ST still doesn't have quite enough memory. The next
Atari machine, I expect, will run it. I also think that future Ataris will
have some forms of memory mapping. Of course, I am not designing the
software to run on the kinds of computers that are prevalent today. I knew
when I started this project it was going to take a few years. I therefore
decided that I didn't want to make a worse system by taking on the
additional challenge of making it run in the currently constrained
environment. So instead I decided I'm going to write it in the way that
seems the most natural and best. I am confident that in a couple of years
machines of sufficient size will be prevalent. In fact, increases in memory
size are happening so fast it surprises me how slow most of the people are
to put in virtual memory; I think it is totally essential.
BYTE: I think people don't really view it as being necessary for
single-user machines.
Stallman: They don't understand that single user doesn't mean single
program. Certainly for any UNIX-like system it's important to be able to
run lots of different processes at the same time even if there is only one
of you. You could run GNU EMACS on a nonvirtual-memory machine with enough
memory, but you couldn't run the rest of the GNU system very well or a UNIX
system very well.
BYTE: How much of LISP is present in GNU EMACS? It occurred to me that it
may be useful to use that as a tool for learning LISP.
Stallman: You can certainly do that. GNU EMACS contains a complete,
although not very powerful, LISP system. It's powerful enough for writing
editor commands. It's not comparable with, say, a Common LISP System,
something you could really use for system programming, but it has all the
things that LISP needs to have.
BYTE: Do you have any predictions about when you would be likely to
distribute a workable environment in which, if we put it on our machines or
workstations, we could actually get reasonable work done without using
anything other than code that you distribute?
Stallman: It's really hard to say. That could happen in a year, but of
course it could take longer. It could also conceivably take less, but
that's not too likely anymore. I think I'll have the compiler finished in a
month or two. The only other large piece of work I really have to do is in
the kernel. I first predicted GNU would take something like two years, but
it has now been two and a half years and I'm still not finished. Part of
the reason for the delay is that I spent a lot of time working on one
compiler that turned out to be a dead end. I had to rewrite it completely.
Another reason is that I spent so much time on GNU EMACS. I originally
thought I wouldn't have to do that at all.
BYTE: Tell us about your distribution scheme.
Stallman: I don't put software or manuals in the public domain, and the
reason is that I want to make sure that all the users get the freedom to
share. I don't want anyone making an improved version of a program I wrote
and distributing it as proprietary. I don't want that to ever be able to
happen. I want to encourage the free improvements to these programs, and
the best way to do that is to take away any temptation for a person to make
improvements nonfree. Yes, a few of them will refrain from making
improvements, but a lot of others will make the same improvements and
they'll make them free.
BYTE: And how do you go about guaranteeing that?
Stallman: I do this by copyrighting the programs and putting on a notice
giving people explicit permission to copy the programs and change them but
only on the condition that they distribute under the same terms that I
used, if at all. You don't have to distribute the changes you make to any
of my programs--you can just do it for yourself, and you don't have to give
it to anyone or tell anyone. But if you do give it to someone else, you
have to do it under the same terms that I use.
BYTE: Do you obtain any rights over the executable code derived from the C
compiler?
Stallman: The copyright law doesn't give me copyright on output from the
compiler, so it doesn't give me a way to say anything about that, and in
fact I don't try to. I don't sympathize with people developing proprietary
products with any compiler, but it doesn't seem especially useful to try to
stop them from developing them with this compiler, so I am not going to.
BYTE: Do your restrictions apply if people take pieces of your code to
produce other things as well?
Stallman: Yes, if they incorporate with changes any sizable piece. If it
were two lines of code, that's nothing; copyright doesn't apply to that.
Essentially, I have chosen these conditions so that first there is a
copyright, which is what all the software hoarders use to stop everybody
from doing anything, and then I add a notice giving up part of those
rights. So the conditions talk only about the things that copyright applies
to. I don't believe that the reason you should obey these conditions is
because of the law. The reason you should obey is because an upright person
when he distributes software encourages other people to share it further.
BYTE: In a sense you are enticing people into this mode of thinking by
providing all of these interesting tools that they can use but only if they
buy into your philosophy.
Stallman: Yes. You could also see it as using the legal system that
software hoarders have set up against them. I'm using it to protect the
public from them.
BYTE: Given that manufacturers haven't wanted to fund the project, who do
you think will use the GNU system when it is done?
Stallman: I have no idea, but it is not an important question. My purpose
is to make it possible for people to reject the chains that come with
proprietary software. I know that there are people who want to do that.
Now, there may be others who don't care, but they are not my concern. I
feel a bit sad for them and for the people that they influence. Right now a
person who perceives the unpleasantness of the terms of proprietary
software feels that he is stuck and has no alternative except not to use a
computer. Well, I am going to give him a comfortable alternative.
Other people may use the GNU system simply because it is technically
superior. For example, my C compiler is producing about as good a code as I
have seen from any C compiler. And GNU EMACS is generally regarded as being
far superior to the commercial competition. And GNU EMACS was not funded by
anyone either, but everyone is using it. I therefore think that many people
will use the rest of the GNU system because of its technical advantages.
But I would be doing a GNU system even if I didn't know how to make it
technically better because I want it to be socially better. The GNU project
is really a social project. It uses technical means to make a change in
society.
BYTE: Then it is fairly important to you that people adopt GNU. It is not
just an academic exercise to produce this software to give it away to
people. You hope it will change the way the software industry operates.
Stallman: Yes. Some people say no one will ever use it because it doesn't
have some attractive corporate logo on it, and other people say that they
think it is tremendously important and everyone's going to want to use it.
I have no way of knowing what is really going to happen. I don't know any
other way to try to change the ugliness of the field that I find myself in,
so this is what I have to do.
BYTE: Can you address the implications? You obviously feel that this is an
important political and social statement.
Stallman: It is a change. I'm trying to change the way people approach
knowledge and information in general. I think that to try to own knowledge,
to try to control whether people are allowed to use it, or to try to stop
other people from sharing it, is sabotage. It is an activity that benefits
the person that does it at the cost of impoverishing all of society. One
person gains one dollar by destroying two dollars' worth of wealth. I think
a person with a conscience wouldn't do that sort of thing except perhaps if
he would otherwise die. And of course the people who do this are fairly
rich; I can only conclude that they are unscrupulous. I would like to see
people get rewards for writing free software and for encouraging other
people to use it. I don't want to see people get rewards for writing
proprietary software because that is not really a contribution to society.
The principle of capitalism is the idea that people manage to make money by
producing things and thereby are encouraged to do what is useful,
automatically, so to speak. But that doesn't work when it comes to owning
knowledge. They are encouraged to do not really what's useful, and what
really is useful is not encouraged. I think it is important to say that
information is different from material objects like cars and loaves of
bread because people can copy it and share it on their own and, if nobody
attempts to stop them, they can change it and make it better for
themselves. That is a useful thing for people to do. This isn't true of
loaves of bread. If you have one loaf of bread and you want another, you
can't just put your loaf of bread into a bread copier. you can't make
another one except by going through all the steps that were used to make
the first one. It therefore is irrelevant whether people are permitted to
copy it--it's impossible.
Books were printed only on printing presses until recently. It was
possible to make a copy yourself by hand, but it wasn't practical because
it took so much more work than using a printing press. And it produced
something so much less attractive that, for all intents and purposes, you
could act as if it were impossible to make books except by mass producing
them. And therefore copyright didn't really take any freedom away from the
reading public. There wasn't anything that a book purchaser could do that
was forbidden by copyright.
But this isn't true for computer programs. It's also not true for tape
cassettes. It's partly false now for books, but it is still true that for
most books it is more expensive and certainly a lot more work to Xerox them
than to buy a copy, and the result is still less attractive. Right now we
are in a period where the situation that made copyright harmless and
acceptable is changing to a situation where copyright will become
destructive and intolerable. So the people who are slandered as "pirates"
are in fact the people who are trying to do something useful that they have
been forbidden to do. The copyright laws are entirely designed to help
people take complete control over the use of some information for their own
good. But they aren't designed to help people who want to make sure that
the information is accessible to the public and stop others from depriving
the public. I think that the law should recognize a class of works that are
owned by the public, which is different from public domain in the same
sense that a public park is different from something found in a garbage
can. It's not there for anybody to take away, it's there for everyone to
use but for no one to impede. Anybody in the public who finds himself being
deprived of the derivative work of something owned by the public should be
able to sue about it.
BYTE: But aren't pirates interested in getting copies of programs because
they want to use those programs, not because they want to use that
knowledge to produce something better?
Stallman: I don't see that that's the important distinction. More people
using a program means that the program contributes more to society. You
have a loaf of bread that could be eaten either once or a million times.
BYTE: Some users buy commercial software to obtain support. How does your
distribution scheme provide support?
Stallman: I suspect that those users are misled and are not thinking
clearly. It is certainly useful to have support, but when they start
thinking about how that has something to do with selling software or with
the software being proprietary, at that point they are confusing
themselves. There is no guarantee that proprietary software will receive
good support. Simply because sellers say that they provide support, that
doesn't mean it will be any good. And they may go out of business. In fact,
people think that GNU EMACS has better support than commercial EMACSes. One
of the reasons is that I'm probably a better hacker than the people who
wrote the other EMACSes, but the other reason is that everyone has sources
and there are so many people interested in figuring out how to do things
with it that you don't have to get your support from me. Even just the free
support that consists of my fixing bugs people report to me and
incorporating that in the next release has given people a good level of
support. You can always hire somebody to solve a problem for you, and when
the software is free you have a competitive market for the support. You can
hire anybody. I distribute a service list with EMACS, a list of people's
names and phone numbers and what they charge to provide support.
BYTE: Do you collect their bug fixes?
Stallman: Well, they send them to me. I asked all the people who wanted to
be listed to promise that they would never ask any of their customers to
keep secret whatever they were told or any changes they were given to the
GNU software as part of that support.
BYTE: So you can't have people competing to provide support based on their
knowing the solution to some problem that somebody else doesn't know.
Stallman: No. They can compete based on their being clever and more likely
to find the solution to your problem, or their already understanding more
of the common problems, or knowing better how to explain to you what you
should do. These are all ways they can compete. They can try to do better,
but they cannot actively impede their competitors.
BYTE: I suppose it's like buying a car. You're not forced to go back to the
original manufacturer for support or continued maintenance.
Stallman: Or buying a house--what would it be like if the only person who
could ever fix problems with your house was the contractor who built it
originally? That is the kind of imposition that's involved in proprietary
software. People tell me about a problem that happens in UNIX. Because
manufacturers sell improved versions of UNIX, they tend to collect fixes
and not give them out except in binaries. The result is that the bugs don't
really get fixed.
BYTE: They're all duplicating effort trying to solve bugs independently.
Stallman: Yes. Here is another point that helps put the problem of
proprietary information in a social perspective. Think about the liability
insurance crisis. In order to get any compensation from society, an injured
person has to hire a lawyer and split the money with that lawyer. This is a
stupid and inefficient way of helping out people who are victims of
accidents. And consider all the time that people put into hustling to take
business away from their competition. Think of the pens that are packaged
in large cardboard packages that cost more than the pen--just to make sure
that the pen isn't stolen. Wouldn't it be better if we just put free pens
on every street corner? And think of all the toll booths that impede the
flow of traffic. It's a gigantic social phenomenon. People find ways of
getting money by impeding society. Once they can impede society, they can
be paid to leave people alone. The waste inherent in owning information
will become more and more important and will ultimately make the difference
between the utopia in which nobody really has to work for a living because
it's all done by robots and a world just like ours where everyone spends
much time replicating what the next fellow is doing.
BYTE: Like typing in copyright notices on the software.
Stallman: More like policing everyone to make sure that they don't have
forbidden copies of anything and duplicating all the work people have
already done because it is proprietary.
BYTE: A cynic might wonder how you earn your living.
Stallman: From consulting. When I do consulting, I always reserve the right
to give away what I wrote for the consulting job. Also, I could be making
my living by mailing copies of the free software that I wrote and some that
other people wrote. Lots of people send in $150 for GNU EMACS, but now this
money goes to the Free Software Foundation that I started. The foundation
doesn't pay me a salary because it would be a conflict of interest.
Instead, it hires other people to work on GNU. As long as I can go on
making a living by consulting I think that's the best way.
BYTE: What is currently included in the official GNU distribution tape?
Stallman: Right now the tape contains GNU EMACS (one version fits all
computers); Bison, a program that replaces YACC; MIT Scheme, which is
Professor Sussman's super-simplified dialect of LISP; and Hack, a
dungeon-exploring game similar to Rogue.
BYTE: Does the printed manual come with the tape as well?
Stallman: No. Printed manuals cost $15 each or copy them yourself. Copy
this interview and share it, too.
BYTE: How can you get a copy of that?
Stallman: Write to the Free Software Foundation, 675 Massachusetts Ave.,
Cambridge, MA 02139.
[In June 1995, this address changed to:
Free Software Foundation
59 Temple Place - Suite 330
Boston, MA 02111-1307, USA
Voice: +1-617-542-5942
Fax: +1-617-542-2652
-gnu@prep.ai.mit.edu
]
BYTE: What are you going to do when you are done with the GNU system?
Stallman: I'm not sure. Sometimes I think that what I'll go on to do is the
same thing in other areas of software.
BYTE: So this is just the first of a whole series of assaults on the
software industry?
Stallman: I hope so. But perhaps what I'll do is just live a life of ease
working a little bit of the time just to live. I don't have to live
expensively. The rest of the time I can find interesting people to hang
around with or learn to do things that I don't know how to do.
Editorial Note: BYTE holds the right to provide this interview on BIX but
will not interfere with its distribution.
Richard Stallman, 545 Technology Square, Room 703, Cambridge, MA 02139.
Copyright (C) 1986 Richard Stallman. Permission is granted to make and
distribute copies of this article as long as the copyright and this notice
appear on all copies.

642
etc/JOKES
View file

@ -1,642 +0,0 @@
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
Customized
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

View file

@ -1,77 +0,0 @@
Date: 17 Apr 85 15:45:42 EST (Wed)
From: Martin David Connor <mdc@MIT-HTVAX.ARPA>
Date: Sat, 13 Apr 85 16:28:15 est
From: Richard M. Stallman <rms@mit-prep>
Can you help this person? Also, can you give me the rest of ledit
to distribute, plus some info on how to use it?
I have put the files "ledit.l" and "leditcfns.c" on prep:~mdc.
Much to my disgust ledit.l relied on some bogus little package of
functions on HT, so I had to massage it a bit.
To get it to work, one must:
- Compile leditcfns.c with something like:
cc leditcfns.c
- Edit ledit.l, changing the line beginning "(cfasl" to
have the right pathname for the cfns file you compiled in
the last step.
- Compile ledit.l with:
liszt ledit.l
Then put the following lines in your .lisprc file:
;load in functions for emacs interface
(load "//src//mdc//ledit//ledit") ; Location of Ledit library
(set-proc-str "%gnumacs") ; Name of editor
Then you can use ^E <RETURN> to get from LISP back to gnumacs.
Here is the part of my .emacs file that pertains to ledit.
;;; Set up ledit mode
(setq ledit-go-to-lisp-string "%lisp")
(setq lisp-mode-hook 'ledit-from-lisp-mode)
Date: Sat, 13 Apr 85 11:26:32 cst
From: neves@wisc-ai.arpa (David Neves)
This is a documentation question.
I cannot figure out how to use Ledit. I suspect I need some
function on the Franz Lisp end of things to go to Emacs and read in
the temporary file. Is this true? Is the Lisp job started within
Emacs or outside of emacs? I'm just plain confused. Perhaps a couple
of words from someone in the know would help.
A related question. I have been using a shell buffer when interacting
with Lisp (ie. put a definition in the kill buffer and then yank it
into the shell buffer to redefine it). This is nice but tends to fill
up the shell buffer with lots of code (I'd rather keep calls to functions
in the shell and not the functions themselves).
My question: Is using the shell buffer "better" than ledit? Am I using
it in the best way (i.e. copying definitions from an edit buffer to the
shell buffer)? -Thanks, David Neves
I have found that ledit works well for doing programming development
when you are changing lots of little pieces of a file and don't wish
to recompile the whole file. Of course M-X Compile is very nice for
calling up a liszt on a buffer and watching it in the another window.
Of course the interface of something like NIL is even better because
you can compile your function directly into your lisp. But since NIL
doesn't run under Unix, this is probably the next best thing.
I have tried the 2 window method (shell in lower window, lisp code in
upper), and have found it a little awkward. It does have certain
advantages, but most of the time, I get be fine using M-C-D to save a
defun for lisp, and C-X Z to jump back to LISP. C-E RETURN from lisp
is also mnemonic for getting back to gnumacs.
I hope this helps somewhat.

View file

@ -1,147 +0,0 @@
Linux and the GNU system
The GNU project started in 1984 with the goal of developing a complete
free Unix-like operating system: GNU. "Free" refers to freedom, not
price; it means you are free to run, copy, distribute, study, change,
and improve the software.
A Unix-like system consists of many different programs. We found some
components already available as free software--for example, X Windows
and TeX. We obtained other components by helping to convince their
developers to make them free--for example, the Berkeley network
utilities. This left many missing components that we had to write in
order to produce GNU--for example, GNU Emacs, the GNU C compiler, the
GNU C library, Bash, and Ghostscript. The GNU system consists of all
these components together.
The GNU project is not just about developing and distributing some
useful free software. The heart of the GNU project is an idea: that
software should be free, that software users should have freedom to
participate in a community. To run your computer, you need an
operating system; if it is not free, your freedom has been denied. To
have freedom, you need a free operating system. We therefore set out
to write one.
In the long run, though, we cannot expect to keep the free operating
system free unless the users are aware of the freedom it gives them,
and value that freedom. People who do not appreciate their freedom
will not keep it long. If we want to make freedom last, we need to
spread awareness of the freedoms they have in free software.
The GNU project's method is that free software and the idea of users'
freedom support each other. We develop GNU software, and as people
encounter GNU programs or the GNU system and start to use them, they
also think about the GNU idea. The software shows that the idea can
work in practice. Some of these people come to agree with the idea,
and then they are more likely to write additional free software.
Thus, the software embodies the idea, spreads the idea, and grows from
the idea.
Early on in the development of GNU, various parts of it became popular
even though users needed proprietary systems to run them on. Porting
the system to many systems and maintaining them required a lot of
work. After that work, most GNU software is easily configured for a
variety of different platforms.
By 1991, we had found or written all of the essential major components
of the system except the kernel, which we were writing. (This kernel
consists of the Mach microkernel plus the GNU HURD. The first test
release was made in 1996. Now, in 2002, it is running well, and
Hurd-based GNU systems are starting to be used.)
That was the situation when Linux came into being. Linux is a kernel,
like the kernel of Unix; it was written by Linus Torvalds, who
released it under the GNU General Public License. He did not write
this kernel for GNU, but it fit into the gap in GNU. The combination
of GNU and Linux included all the major essential components of a
Unix-compatible operating system. Other people, with some work made
the combination into a usable system. The principal use of Linux, the
kernel, is as part of this combination.
The popularity of the GNU/Linux combination is success, in the sense
of popularity, for GNU. Ironically, the popularity of GNU/Linux
undermines our method of communicating the ideas of GNU to people who
use GNU.
When GNU programs were only usable individually on top of another
operating system, installing and using them meant knowing and
appreciating these programs, and thus being aware of GNU, which led
people to think about the philosophical base of GNU. Now users can
install a unified operating system which is basically GNU, but they
usually think these are "Linux systems". At first impression, a
"Linux system" sounds like something completely distinct from the "GNU
system," and that is what most users think.
This leads many users to identify themselves as a separate community
of "Linux users", distinct from the GNU user community. They use more
than just some GNU programs, they use almost all of the GNU system,
but they don't think of themselves as GNU users. Often they never
hear about the GNU idea; if they do, they may not think it relates to
them.
Most introductions to the "Linux system" acknowledge that GNU software
components play a role in it, but they don't say that the system as a
whole is a modified version of the GNU system that the GNU project has
been developing and compiling since Linus Torvalds was in junior high
school. They don't say that the main reason this free operating
exists is that the GNU Project worked persistently to achieve its goal
of freedom.
As a result, most users don't know these things. They believe that
the "Linux system" was developed by Linus Torvalds "just for fun", and
that their freedom is a matter of good fortune rather than the
dedicated pursuit of freedom. This creates a danger that they will
leave the survival of free software to fortune as well.
Since human beings tend to correct their first impressions less than
called for by additional information they learn later, these users
will tend to continue to underestimate their connection to GNU even if
they do learn the facts.
When we began trying to support the GNU/Linux system, we found this
widespread misinformation led to a practical problem--it hampered
cooperation on software maintenance. Normally when users change a GNU
program to make it work better on a particular system, they send the
change to the maintainer of that program; then they work with the
maintainer, explaining the change, arguing for it, and sometimes
rewriting it for the sake of the overall coherence and maintainability
of the package, to get the patch installed. But people who thought of
themselves as "Linux users" showed a tendency to release a forked
"Linux-only" version of the GNU program and consider the job done. In
some cases we had to redo their work in order to make GNU programs run
as released in GNU/Linux systems.
How should the GNU project encourage its users to cooperate? How
should we spread the idea that freedom for computer users is
important?
We must continue to talk about the freedom to share and change
software--and to teach other users to value these freedoms. If we
value having a free operating system, it makes sense to think about
preserving those freedoms for the long term. If we value having a
variety of free software, it makes sense to think about encouraging
others to write free software, instead of proprietary software.
However, it is not enough just to talk about freedom; we must also
make sure people know the reasons it is worth listening to what we
say.
Long explanations such as our philosophical articles are one way of
informing the public, but you may not want to spend so much time on
the matter. The most effective way you can help with a small amount
of work is simply by using the terms "Linux-based GNU system" or
"GNU/Linux system", instead of "Linux system," when you write about or
mention such a system. Seeing these terms will show many people the
reason to pay attention to our philosophical articles.
The system as a whole is more GNU than Linux; the name "GNU/Linux" is
fair. When you are choosing the name of a distribution or a user
group, a name with "GNU/Linux" will reflect both roots of the combined
system, and will bring users into connection with both--including the
spirit of freedom and community that is the basis and purpose of GNU.
Copyright 1996, 2002 Richard Stallman
Verbatim copying and redistribution is permitted
without royalty as long as this notice is preserved.

43
etc/LPF
View file

@ -1,43 +0,0 @@
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.
(Added 2003) The League for Programming Freedom is inactive nowadays,
though its web site www.programming-freedom.org is still maintained.
It would be very useful to find a person who could take the initiative
to get the LPF operating again. It will be a substantial job,
requiring persistence and working with a lawyer. If you want to do
it, please write to rms@gnu.org.

File diff suppressed because it is too large Load diff

View file

@ -1,319 +0,0 @@
GNU Project Electronic Mailing Lists and gnUSENET Newsgroups
Last Updated 2004-10-19
Please report improvements to: gnu@gnu.org
* Mailing list archives
The GNU mailing lists are archived at http://lists.gnu.org.
* Some GNU mailing lists are also distributed as USENET news groups
Certain GNU mailing lists are gated both ways with the gnu.all
newsgroups at uunet. You can tell which they are, because the names
correspond. For instance, bug-gnu-emacs corresponds to gnu.emacs.bug;
info-gnu-emacs, to gnu.emacs.announce; help-gnu-emacs, to
gnu.emacs.help; gnu-emacs-sources, to gnu.emacs.sources. Replacing
`emacs' with some other program in those four examples shows you
the whole pattern.
If you don't know if your site is on USENET, ask your system
administrator. If you are a USENET site and don't get the gnu.all
newsgroups, please ask your USENET administrator to get them. If he has
your feeds ask their feeds, you should win. And everyone else wins:
newsgroups make better use of the limited bandwidth of the computer
networks and your home machine than mailing list traffic; and staying
off the mailing lists make better use of the people who maintain the
lists and the machines that the GNU people working with rms use (i.e. we
have more time to produce code!!). Thanx.
* Getting the mailing lists directly
If several users at your site or local network want to read a list and
you aren't a USENET site, Project GNU would prefer that you would set up
one address that redistributes locally. This reduces overhead on our
people and machines, your gateway machine, and the network(s) used to
transport the mail from us to you.
* How to subscribe to and report bugs in mailing lists
Send requests to be added or removed, to help-gnu-emacs-request (or
info-gnu-request, bug-gdb-request, etc.), NOT to info-gnu-emacs (or
info-gnu, etc.). Most <LIST_NAME>-request addresses are now handled
automagically by GNU Mailman.
If you need to report problems to a human, send mail to gnu@gnu.org
explaining the problem.
Many of the GNU mailing lists are very large and are received by many
people. Most are unmoderated, so please don't send them anything that
is not seriously important to all their readers.
If a message you mail to a list is returned from a MAILER-DAEMON (often
with the line:
----- Transcript of session follows -----
don't resend the message to the list. All this return means is that
your original message failed to reach a few addresses on the list. Such
messages are NEVER a reason to resend a piece of mail a 2nd time. This
just bothers all (less the few delivery failures (which will probably
just fail again!)) of the readers of the list with a message they have
already seen. It also wastes computer and network resources.
It is appropriate to send these to the -request address for a list, and
ask them to check the problem out.
* Send Specific Requests for Information to: gnu@gnu.org
Specific requests for information about obtaining GNU software, or GNU
activities in Cambridge and elsewhere can be directed to:
gnu@gnu.org
* General Information about all lists
Please keep each message under 25,000 characters. Some mailers bounce
messages that are longer than this. If your message is long, it is
generally better to send a message offering to make the large file
available to only those people who want it (e.g. mailing it to people
who ask, or putting it up for FTP). In the case of gnu.emacs.sources,
somewhat larger postings (up to 10 parts of no more than 25,000
characters each) are acceptable (assuming they are likely to be of
interest to a reasonable number of people); if it is larger than that,
put it in a web page and announce its URL. Good bug reports are short.
See section '* General Information about bug-* lists and ...' for
further details.
Most of the time, when you reply to a message sent to a list, the reply
should not go to the list. But most mail reading programs supply, by
default, all the recipients of the original as recipients of the reply.
Make a point of deleting the list address from the header when it does
not belong. This prevents bothering all readers of a list, and reduces
network congestion.
The GNU mailing lists and newsgroups, like the GNU project itself, exist
to promote the freedom to share software. So don't use these lists to
promote or recommend non-free software or documentation, like
proprietary books on GNU software. (Using them to post ordering
information is the ultimate faux pas.) If there is no free program to
do a certain task, then somebody should write one! Similarly, free
documentation that is inadequate should be improved--a way in which
non-programmers can make a valuable contribution. See also the article
at <URL:http://www.gnu.org/philosophy/free-doc.html>.
* General Information about info-* lists
These lists and their newsgroups are meant for important announcements.
Since the GNU project uses software development as a means for social
change, the announcements may be technical or political.
Most GNU projects info-* lists (and their corresponding gnu.*.announce
newsgroups) are moderated to keep their content significant and
relevant. If you have a bug to report, send it to the bug-* list. If
you need help on something else and the help-* list exists, ask it.
See section '* General Information about all lists'.
* General Information about help-* lists
These lists (and their newsgroups) exist for anyone to ask questions
about the GNU software that the list deals with. The lists are read by
people who are willing to take the time to help other users.
When you answer the questions that people ask on the help-* lists, keep
in mind that you shouldn't answer by promoting a proprietary program as
a solution. The only real solutions are the ones all the readers can
share.
If a program crashes, or if you build it following the standard
procedure on a system on which it is supposed to work and it does not
work at all, or if an command does not behave as it is documented to
behave, this is a bug. Don't send bug reports to a help-* list; mail
them to the bug-* list instead.
See section '* General Information about all lists'.
* General Information about bug-* lists and reporting program bugs
If you think something is a bug in a program, it might be one; or, it
might be a misunderstanding or even a feature. Before beginning to
report bugs, please read the section ``Reporting Emacs Bugs'' toward the
end of the GNU Emacs reference manual (or node Emacs/Bugs in Emacs's
built-in Info system) for a discussion of how and when to send in bug
reports. For GNU programs other than GNU Emacs, also consult their
documentation for their bug reporting procedures. Always include the
version number of the GNU program, as well as the operating system and
machine the program was ran on (if the program doesn't have a version
number, send the date of the latest entry in the file ChangeLog). For
GNU Emacs bugs, type "M-x emacs-version". A debugger backtrace of any
core dump can also be useful. Be careful to separate out hypothesis
from fact! For bugs in GNU Emacs lisp, set variable debug-on-error to
t, and re-enter the command(s) that cause the error message; Emacs will
pop up a debug buffer if something is wrong; please include a copy of
the buffer in your bug report. Please also try to make your bug report
as short as possible; distill the problem to as few lines of code and/or
input as possible. GNU maintainers give priority to the shortest, high
quality bug reports.
Please don't send in a patch without a test case to illustrate the
problem the patch is supposed to fix. Sometimes the patches aren't
correct or aren't the best way to do the job, and without a test case
there is no way to debug an alternate fix.
The purpose of reporting a bug is to enable the bug to be fixed for the
sake of the whole community of users. You may or may not receive a
response; the maintainers will send one if that helps them find or
verify a fix. Most GNU maintainers are volunteers and all are
overworked; they don't have time to help individuals and still fix the
bugs and make the improvements that everyone wants. If you want help
for yourself in particular, you may have to hire someone. The GNU
project maintains a list of people providing such services. It is
found in <URL:http://www.gnu.org/prep/SERVICE>.
Anything addressed to the implementors and maintainers of a GNU program
via a bug-* list, should NOT be sent to the corresponding info-* or
help-* list.
Please DON'T post your bug reports on the gnu.*.bug newsgroups! Mail
them to bug-*@gnu.org instead! At first sight, it seems to make no
difference: anything sent to one will be propagated to the other; but:
- if you post on the newsgroup, the information about how to
reach you is lost in the message that goes on the mailing list. It
can be very important to know how to reach you, if there is anything
in the bug report that we don't understand;
- bug reports reach the GNU maintainers quickest when they are
sent to the bug-* mailing list submittal address;
- mail is much more reliable then netnews; and
- if the internet mailers can't get your bug report delivered,
they almost always send you an error message, so you can find another
way to get the bug report in. When netnews fails to get your message
delivered to the maintainers, you'll never know about it and the
maintainers will never see the bug report.
And please DON'T post your GNU bug reports to comp.* or other gnu.*
newsgroups, they never make it to the GNU maintainers at all. Please
mail them to bug-*@gnu.org instead!
* Some special lists that don't fit the usual patterns of help-, bug- and info-
** info-gnu-request@gnu.org to subscribe to info-gnu
gnUSENET newsgroup: gnu.announce
Send announcements to: info-gnu@gnu.org
This list distributes progress reports on the GNU Project. It is also
used by the GNU Project to ask people for various kinds of help. It is
moderated and NOT for general discussion.
** gnu-misc-discuss-request@gnu.org to subscribe to gnu-misc-discuss
gnUSENET newsgroup: gnu.misc.discuss
Send contributions to: gnu-misc-discuss@gnu.org
This list is for serious discussion of free software, the GNU Project,
the GNU Manifesto, and their implications. It's THE place for
discussion that is not appropriate in the other GNU mailing lists and
gnUSENET newsgroups.
Flaming is out of place. Tit-for-tat is not welcome. Repetition
should not occur.
Good READING and writing are expected. Before posting, wait a while,
cool off, and think.
Don't use this group for complaints and bug reports about GNU software!
The maintainers of the package you are using probably don't read this
group; they won't see your complaint. Use the appropriate bug-reporting
mailing list instead, so that people who can do something about the
problem will see it. Likewise, use the help- list for technical
questions.
Don't trust pronouncements made on gnu-misc-discuss about what GNU is,
what FSF position is, what the GNU General Public License is, etc.,
unless they are made by someone you know is well connected with GNU and
are sure the message is not forged.
USENET and gnUSENET readers are expected to have read ALL the articles
in news.announce.newusers before posting. If news.announce.newusers is
empty at your site, wait (the articles are posted monthly), your posting
isn't that urgent! Readers on the Internet can anonymous FTP these
articles from host ftp.uu.net under directory ??
Remember, "GNUs Not Unix" and "gnUSENET is Not USENET". We have
higher standards!
** guile-sources-request@gnu.org to subscribe to guile-sources
gnUSENET newsgroup: NONE PLANNED
Guile source code to: guile-sources@gnu.org
This list will be for the posting, by their authors, of GUILE, Scheme,
and C sources and patches that improve Guile. Its contents will be
reviewed by the FSF for inclusion in future releases of GUILE.
Please do NOT discuss or request source code here. Use bug-guile for
those purposes. This allows the automatic archiving of sources posted
to this list.
Please do NOT post such sources to any other GNU mailing list (e.g
bug-guile) or gnUSENET newsgroups. It's up to each poster to decide
whether to cross-post to any non-gnUSENET newsgroup.
Please do NOT announce that you have posted source code to guile.sources
to any other GNU mailing list (e.g. bug-guile) or gnUSENET newsgroups.
People who want to keep up with sources will read this list. It's up to
each poster to decide whether to announce a guile.sources article in any
non-gnUSENET newsgroup (e.g. comp.emacs or comp.sources.d).
If source or patches that were previously posted or a simple fix is
requested in bug-guile, please mail it to the requester. Do NOT
repost it. If you also want something that is requested, send mail to
the requester asking him to forward it to you. This kind of traffic is
best handled by e-mail, not by a broadcast medium that reaches millions
of sites.
If the requested source is very long (>10k bytes) send mail offering to
send it. This prevents the requester from getting many redundant copies
and saves network bandwidth.
** gnu-emacs-sources-request@gnu.org to subscribe to gnu-emacs-sources
gnUSENET newsgroup: gnu.emacs.sources
GNU Emacs source code to: gnu-emacs-sources@gnu.org
This list/newsgroup will be for the posting, by their authors, of Emacs
Lisp and C sources and patches that improve GNU Emacs. Its contents
will be reviewed by the FSF for inclusion in future releases of GNU
Emacs.
Please do NOT discuss or request source code here. Use
help-gnu-emacs/gnu.emacs.help for those purposes. This allows the
automatic archiving of sources posted to this list/newsgroup.
Please do NOT post such sources to any other GNU mailing list (e.g
help-gnu-emacs) or gnUSENET newsgroups (e.g. gnu.emacs.help). It's up
to each poster to decide whether to cross-post to any non-gnUSENET
newsgroup (e.g. comp.emacs or vmsnet.sources).
Please do NOT announce that you have posted source code to
gnu.emacs.sources to any other GNU mailing list (e.g. help-gnu-emacs) or
gnUSENET newsgroups (e.g. gnu.emacs.help). People who want to keep up
with sources will read this list/newsgroup. It's up to each poster to
decide whether to announce a gnu.emacs.sources article in any
non-gnUSENET newsgroup (e.g. comp.emacs or comp.sources.d).
If source or patches that were previously posted or a simple fix is
requested in help-gnu-emacs, please mail it to the requester. Do NOT
repost it. If you also want something that is requested, send mail to
the requester asking him to forward it to you. This kind of traffic is
best handled by e-mail, not by a broadcast medium that reaches millions
of sites.
If the requested source is very long (>10k bytes) send mail offering to
send it. This prevents the requester from getting many redundant copies
and saves network bandwidth.
Local variables:
mode: outline
fill-column: 72
End:
arch-tag: 6e42bba8-7532-4a23-8486-99dbc5770a8e

File diff suppressed because it is too large Load diff

View file

@ -1,294 +0,0 @@
More Neat Stuff for your Emacs
This file describes GNU Emacs programs and resources that are
maintained by other people. Some of these may become part of the
Emacs distribution in the future. Others we unfortunately can't
distribute, even though they are free software, because we lack legal
papers for copyright purposes. Also included are sites where
development versions of some packages distributed with Emacs may be
found.
You might also look at the Emacs web page
<URL:http://www.gnu.org/software/emacs/emacs.html>. If you use the
Windows-32 version of Emacs, see the NTEmacs sites listed in the FAQ.
Please submit a bug report if you find that any of the addresses
listed here fail.
* The `Emacs Lisp List' at
<URL:http://www.anc.ed.ac.uk/%7Estephen/emacs/ell.html> has pointers
to sources of a large number of packages.
* gnu.emacs.sources
Packages posted to the gnu.emacs.sources newsgroup (see
etc/MAILINGLISTS) might be archived specifically (try a web search
engine) or retrievable from general Usenet archive services.
* emacswiki.org
The Emacs Wiki has an area for storing elisp files
<URL:http://www.emacswiki.org/cgi-bin/wiki.pl/ElispArea>.
* Maintenance versions of some packages distributed with Emacs
You might find bug-fixes or enhancements in these places.
* Ada-mode: <URL:http://libre.act-europe.fr/adamode>
* Battery and Info Look: <URL:ftp://ftp.ul.bawue.de/pub/purple/emacs>
* BibTeX:
<URL:http://www.ida.ing.tu-bs.de/people/dirk/bibtex/index.html>
* BS: <URL:http://www.geekware.de/software/emacs/index.html>
* Calculator: <URL:http://www.cs.cornell.edu/eli/misc/calculator.el>
* CC mode: <URL:http://cc-mode.sourceforge.net/>
* CPerl: <URL:ftp://ftp.math.ohio-state.edu/pub/users/ilya>
* Ediff and Viper: <URL:http://www.cs.sunysb.edu/~kifer/emacs.html>
* Eldoc and Rlogin:
<URL:ftp://ftp.splode.com/pub/users/friedman/packages/>
* EShell: <URL:http://www.gci-net.com/users/j/johnw/emacs.html>
* Etags: <URL:ftp://pot.potorti.it/pub/software/unix/etags.tar.gz>
* EUDC: <URL:http://lspwww.epfl.ch/%7Efigueire/Software/eudc/>
* Expand: <URL:http://w3.teaser.fr/%7Eflepied/expand.el.gz>
* Find Func:
<URL:http://www.kurims.kyoto-u.ac.jp/%7Epetersen/emacs/find-func.el>
* Flyspell: <URL:http://kaolin.unice.fr/%7Eserrano/emacs/flyspell>
* Fortune: <URL:http://www.coling.uni-freiburg.de/%7Eschauer/emacs.html>
* Gnus: <URL:http://www.gnus.org/>
* Ffap: <URL:http://www.mathcs.emory.edu/%7Emic/ftp/emacs/>
(And some addons for it.)
* Hideshow: <URL:http://www.glug.org/people/ttn/software/hideshow/>
* Ispell: <URL:http://www.kdstevens.com/%7Estevens/ispell-page.html>
* Iswitchb: <URL:http://www.anc.ed.ac.uk/%7Estephen/emacs/iswitchb.el>
* MH-E: <URL:http://mh-e.sourceforge.net/>
* PC Selection: <URL:ftp://ftp.thp.uni-duisburg.de/pub/source/elisp/>
* PS mode: <URL:http://odur.let.rug.nl/%7Ekleiweg/postscript/>
* PS-print: <URL:ftp://ftp.cpqd.com.br/pub/users/vinicius/>
* QuickURL: <URL:http://www.acemake.com/hagbard/archives/quickurl.el>
* RefTeX: <URL:http://zon.astro.uva.nl/~dominik/Tools/>
* Speedbar, Checkdoc etc: <URL:http://cedet.sourceforge.net/>
* SQL: <URL:http://www.geocities.com/TimesSquare/6120/emacs.html>
* Sregex: <URL:http://www.zanshin.com/%7Ebobg/sregex.html>
* Tramp: Remote file access via rsh/ssh
<URL:http://savannah.gnu.org/projects/tramp/>
* Webjump: <URL:http://www.neilvandyke.org/webjump>
* Whitespace: <URL:http://www.dsmit.com/lisp/>
* Auxiliary files
* (Tex)info files for use with Info-look that don't come from GNU
packages:
* Scheme: <URL:ftp://ftp-swiss.ai.mit.edu/pub/scm/r5rs.info.tar.gz>
* LaTeX: <URL:ftp://ctan.tug.org/tex-archive/info/latex2e-help-texinfo/
latex2e.texi> (or CTAN mirrors)
* Perl: <URL:ftp://ftp.cpan.org/pub/CPAN/doc/manual/texinfo/perl5/>
(or CPAN mirrors)
* Packages and add-ons not bundled with Emacs
Various major packages or useful additions aren't distributed as part of
Emacs for various reasons, sometimes because their authors haven't made
a copyright assignment to the FSF. Some of them may be integrated in
the future.
You might like to check whether they are packaged for your system.
Several are for Debian GNU/Linux in particular.
* AUCTeX: fancy (La)TeX support: <URL:http://www.gnu.org/software/auctex/>
There's an AUCTeX mail list/newsgroup:
<URL:news://sunsite.dk/emacs.auctex>.
* BBDB: personal Info Rolodex integrated with mail/news:
<URL:http://bbdb.sourceforge.net/>
[You might want to set the coding system of your .bbdb file to
emacs-mule, say by adding `("\\.bbdb\\'" . emacs-mule)' to
`file-coding-system-alist' for non-ASCII characters.]
* Boxquote: <URL:http://www.davep.org/emacs/>
* CEDET: Collection of Emacs Development Environment Tools, including
EIEIO, Semantic, Speedbar, EDE, and COGRE:
<URL:http://cedet.sourceforge.net/>
* CJK-emacs: Converting MULE-encoded text to TeX:
<URL:ftp://ctan.tug.org/tex-archive/language/chinese/CJK/> and
mirrors of the `CTAN' TeX archives.
* Dismal: spreadsheet:
<URL:http://acs.ist.psu.edu/dismal/dismal.html>
* ECB: Emacs Code Browser: <URL:http://ecb.sourceforge.net/>
* EDB: database: <URL:http://www.glug.org/people/ttn/software/edb/>
* Ee: categorizing information manager:
<URL:http://www.jurta.org/emacs/ee/>
* EFS: enhanced version of ange-ftp:
<URL:http://www-uk.hpl.hp.com/people/ange/efs>
Version 1.16 is said not to work properly with Emacs 20.
* Elib library: <URL:http://www.gnu.org/software/elib/elib.html>
From GNU distribution mirrors. (Much of this functionality is now
in Emacs.)
* EMacro: <URL:http://emacro.sourceforge.net/>
EMacro is a portable configuration file that configures itself.
* Emacs statistical system (ESS): statistical programming within Emacs
<URL:http://ess.r-project.org>
* Emacspeak -- A Speech Output Subsystem For Emacs:
<URL:http://emacspeak.sourceforge.net/>
* Emacs-w3m : <URL:http://emacs-w3m.namazu.org/>
A simple Emacs interface to w3m, which is a text-mode
WWW browser
* Emacs Wiki Mode: <URL:http://mwolson.org/projects/EmacsWiki.html>
A wiki-like publishing tool and personal information manager
* ERC: IRC client:
<URL:http://www.emacswiki.org/cgi-bin/wiki?EmacsIRCClient>
* Gnuserv:
<URL:ftp://ftp.splode.com/pub/users/friedman/packages/fgnuserv-1.0.tar.gz>
Enhanced emacsclient/emacsserver. See also
<URL:http://www.splode.com/users/friedman/software/emacs-lisp/> for
other Friedman Emacs hacks.
The latest versions of gnuserv are maintained by Martin Schwenke,
and are available from <URL:http://meltin.net/hacks/emacs/>. Also
available from this Web page: eiffel-mode.el.
* hm--html-menus:
<URL:ftp://ftp.tnt.uni-hannover.de/pub/editors/xemacs/contrib>
HTML-specific editing. Can work with PSGML.
* Hyperbole: `Hyperbole is an open, efficient, programmable
information management and hypertext system.'
From GNU distribution mirrors.
* ILISP: <URL:http://ilisp.cons.org/>
Provides an interactive environment for manipulating an inferior
process running some form of Lisp.
* JDEE: <URL:http://jdee.sunsite.dk/>
Provides a Java development environment for Emacs.
* Mule-UCS: Universal enCoding System:
<URL:ftp://ftp.m17n.org/pub/mule/Mule-UCS/>
Extended coding systems for Mule, specifically for reading and
writing UTF-8 encoded Unicode. This probably doesn't have much
advantage over the built-in `mule-utf-8' coding system with
`utf-translate-cjk' turned on.
* Mailcrypt:
<URL:http://mailcrypt.sourceforge.net/>
PGP and GPG support. PGP isn't free software, but GPG, the GNU
Privacy Guard, is a free replacement <URL:http://www.gnupg.org/>.
* Mew: <URL:http://www.mew.org/>
A MIME mail reader for Emacs/XEmacs.
* MMM Mode: <URL:http://mmm-mode.sourceforge.net/>
MMM Mode is an emacs add-on package providing a minor mode that
allows Multiple Major Modes to coexist in one buffer.
* nXML Mode: New mode for XML:
<URL:http://www.thaiopensource.com/nxml-mode/>
nXML mode is an addon for GNU Emacs, which makes GNU Emacs into a
powerful XML editor.
* Planner Mode:
<URL:http://sacha.free.net.ph/notebook/wiki/PlannerMode.php>
* Pointers to MIME packages:
<URL:http://bmrc.berkeley.edu/%7Etrey/emacs/mime.html>
* Preview LaTeX: embed preview LaTeX images in source buffer.
<URL:http://preview-latex.sourceforge.net/>
* PSGML: <URL:http://www.lysator.liu.se/projects/about_psgml.html>
DTD-aware serious SGML/XML editing.
* Quack: <URL:http://www.neilvandyke.org/quack/>
Quack enhances Emacs support for Scheme
* Remember:
<URL:http://sacha.free.net.ph/notebook/wiki/RememberEl.php>
* Session: <URL:http://emacs-session.sourceforge.net/>
Session Management for Emacs.
* SLIME: The Superior Lisp Interaction Mode for Emacs:
<URL:http://common-lisp.net/project/slime/>
* Tamago: Chinese/Japanese/Korean input method
<URL:ftp://m17n.org/pub/tamago/>
Emacs Lisp package to provide input methods for CJK characters.
It can use these background conversion servers:
FreeWnn (jserver, cserver, tserver),
Wnn6,
SJ3 Ver.2
* Tiny Tools: <URL:http://tiny-tools.sourceforge.net/>
* VM (View Mail): <URL:http://www.wonderworks.com/vm/> Alternative
mail reader. There is a VM newsgroup: <URL:news:gnu.emacs.vm.info>
* W3: <URL:http://www.cs.indiana.edu/elisp/w3/docs.html>
Web browser. There's a W3 mail list/newsgroup
<URL:news://sunsite.auc.dk/emacs.w3> and a W3 development mail
list/newsgroup <URL:news://sunsite.auc.dk/emacs.w3.dev>.
* Wanderlust: <URL:http://www.gohome.org/wl/>
Yet Another Message Interface on Emacsen. Wanderlust is a mail/news
reader supporting IMAP4rev1 for emacsen.
* WhizzyTex: <URL:http://pauillac.inria.fr/whizzytex/>
WhizzyTeX provides a minor mode for Emacs or XEmacs, a (bash)
shell-script daemon and some LaTeX macros.
* X-Symbol: <URL:http://x-symbol.sf.net/>
Quasi-WYSIWYG editing of TeX & al. (It will be improved to take
better advantage of Emacs 21 features.)
Local Variables:
mode: text
mode: view
eval: (goto-address)
End:
arch-tag: c1d4e7c8-db85-44e6-909e-659e2b20fefa

View file

@ -1,176 +0,0 @@
STUDIES FIND REWARD OFTEN NO MOTIVATOR
Creativity and intrinsic interest diminish if task is done for gain
By Alfie Kohn
Special to the Boston Globe
[reprinted with permission of the author
from the Monday 19 January 1987 Boston Globe]
In the laboratory, rats get Rice Krispies. In the classroom the top
students get A's, and in the factory or office the best workers get
raises. It's an article of faith for most of us that rewards promote
better performance.
But a growing body of research suggests that this law is not nearly as
ironclad as was once thought. Psychologists have been finding that
rewards can lower performance levels, especially when the performance
involves creativity.
A related series of studies shows that intrinsic interest in a task -
the sense that something is worth doing for its own sake - typically
declines when someone is rewarded for doing it.
If a reward - money, awards, praise, or winning a contest - comes to
be seen as the reason one is engaging in an activity, that activity
will be viewed as less enjoyable in its own right.
With the exception of some behaviorists who doubt the very existence
of intrinsic motivation, these conclusions are now widely accepted
among psychologists. Taken together, they suggest we may unwittingly
be squelching interest and discouraging innovation among workers,
students and artists.
The recognition that rewards can have counter-productive effects is
based on a variety of studies, which have come up with such findings
as these: Young children who are rewarded for drawing are less likely
to draw on their own that are children who draw just for the fun of
it. Teenagers offered rewards for playing word games enjoy the games
less and do not do as well as those who play with no rewards.
Employees who are praised for meeting a manager's expectations suffer
a drop in motivation.
Much of the research on creativity and motivation has been performed
by Theresa Amabile, associate professor of psychology at Brandeis
University. In a paper published early last year on her most recent
study, she reported on experiments involving elementary school and
college students. Both groups were asked to make "silly" collages.
The young children were also asked to invent stories.
The least-creative projects, as rated by several teachers, were done
by those students who had contracted for rewards. "It may be that
commissioned work will, in general, be less creative than work that is
done out of pure interest," Amabile said.
In 1985, Amabile asked 72 creative writers at Brandeis and at Boston
University to write poetry. Some students then were given a list of
extrinsic (external) reasons for writing, such as impressing teachers,
making money and getting into graduate school, and were asked to think
about their own writing with respect to these reasons. Others were
given a list of intrinsic reasons: the enjoyment of playing with
words, satisfaction from self-expression, and so forth. A third group
was not given any list. All were then asked to do more writing.
The results were clear. Students given the extrinsic reasons not only
wrote less creatively than the others, as judged by 12 independent
poets, but the quality of their work dropped significantly. Rewards,
Amabile says, have this destructive effect primarily with creative
tasks, including higher-level problem-solving. "The more complex the
activity, the more it's hurt by extrinsic reward," she said.
But other research shows that artists are by no means the only ones
affected.
In one study, girls in the fifth and sixth grades tutored younger
children much less effectively if they were promised free movie
tickets for teaching well. The study, by James Gabarino, now
president of Chicago's Erikson Institute for Advanced Studies in Child
Development, showed that tutors working for the reward took longer to
communicate ideas, got frustrated more easily, and did a poorer job in
the end than those who were not rewarded.
Such findings call into question the widespread belief that money is
an effective and even necessary way to motivate people. They also
challenge the behaviorist assumption that any activity is more likely
to occur if it is rewarded. Amabile says her research "definitely
refutes the notion that creativity can be operantly conditioned."
But Kenneth McGraw, associate professor of psychology at the
University of Mississippi, cautions that this does not mean
behaviorism itself has been invalidated. "The basic principles of
reinforcement and rewards certainly work, but in a restricted context"
- restricted, that is, to tasks that are not especially interesting.
Researchers offer several explanations for their surprising findings
about rewards and performance.
First, rewards encourage people to focus narrowly on a task, to do it
as quickly as possible and to take few risks. "If they feel that
'this is something I have to get through to get the prize,' they're
going to be less creative," Amabile said.
Second, people come to see themselves as being controlled by the
reward. They feel less autonomous, and this may interfere with
performance. "To the extent one's experience of being
self-determined is limited," said Richard Ryan, associate psychology
professor at the University of Rochester, "one's creativity will be
reduced as well."
Finally, extrinsic rewards can erode intrinsic interest. People who
see themselves as working for money, approval or competitive success
find their tasks less pleasurable, and therefore do not do them as
well.
The last explanation reflects 15 years of work by Ryan's mentor at the
University of Rochester, Edward Deci. In 1971, Deci showed that
"money may work to buy off one's intrinsic motivation for an activity"
on a long-term basis. Ten years later, Deci and his colleagues
demonstrated that trying to best others has the same effect. Students
who competed to solve a puzzle quickly were less likely than those who
were not competing to keep working at it once the experiment was over.
Control plays role
There is general agreement, however, that not all rewards have the
same effect. Offering a flat fee for participating in an experiment -
similar to an hourly wage in the workplace - usually does not reduce
intrinsic motivation. It is only when the rewards are based on
performing a given task or doing a good job at it - analogous to
piece-rate payment and bonuses, respectively - that the problem
develops.
The key, then, lies in how a reward is experienced. If we come to
view ourselves as working to get something, we will no longer find
that activity worth doing in its own right.
There is an old joke that nicely illustrates the principle. An
elderly man, harassed by the taunts of neighborhood children, finally
devises a scheme. He offered to pay each child a dollar if they would
all return Tuesday and yell their insults again. They did so eagerly
and received the money, but he told them he could only pay 25 cents on
Wednesday. When they returned, insulted him again and collected their
quarters, he informed them that Thursday's rate would be just a penny.
"Forget it," they said - and never taunted him again.
Means to and end
In a 1982 study, Stanford psychologist Mark L. Lepper showed that any
task, no matter how enjoyable it once seemed, would be devalued if it
were presented as a means rather than an end. He told a group of
preschoolers they could not engage in one activity they liked until
they first took part in another. Although they had enjoyed both
activities equally, the children came to dislike the task that was a
prerequisite for the other.
It should not be surprising that when verbal feedback is experienced
as controlling, the effect on motivation can be similar to that of
payment. In a study of corporate employees, Ryan found that those who
were told, "Good, you're doing as you /should/" were "significantly
less intrinsically motivated than those who received feedback
informationally."
There's a difference, Ryan says, between saying, "I'm giving you this
reward because I recognize the value of your work" and "You're getting
this reward because you've lived up to my standards."
A different but related set of problems exists in the case of
creativity. Artists must make a living, of course, but Amabile
emphasizes that "the negative impact on creativity of working for
rewards can be minimized" by playing down the significance of these
rewards and trying not to use them in a controlling way. Creative
work, the research suggests, cannot be forced, but only allowed to
happen.
/Alfie Kohn, a Cambridge, MA writer, is the author of "No Contest: The
Case Against Competition," recently published by Houghton Mifflin Co.,
Boston, MA. ISBN 0-395-39387-6. /

View file

@ -1,33 +0,0 @@
DESTDIR=
LIBDIR=/usr/local/lib
BINDIR=/usr/local/bin
MANDIR=/usr/man/man1
MANEXT=1
all:
mostlyclean:
-rm -f core *.dvi *.log
clean distclean maintainer-clean:
-rm -f DOC* core *.dvi *.log
SOURCES = [0-9A-QS-Z]* README *.[ch16] emacs.* etags.* ledit.l ms-* \
spook-lines tasks.texi termcap.* ulimit.hack *.tex
unlock:
chmod u+w $(SOURCES)
relock:
chmod u-w $(SOURCES)
# ${etcdir}/e/eterm is used by ../lisp/term.el.
# TERMINFO systems use terminfo files compiled by the Terminfo Compiler (tic).
# These files are binary, and depend on the version of tic, but they seem
# to be system-independent and backwardly compatible.
# So there should be no need to recompile the distributed binary version.
TIC=tic
e/eterm: e/eterm.ti
TERMINFO=`pwd`; export TERMINFO; $(TIC) e/eterm.ti
# arch-tag: 4261f003-cf77-4478-a10a-5284e9d8f797

14286
etc/NEWS

File diff suppressed because it is too large Load diff

6485
etc/ONEWS

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,9 +0,0 @@
Printed copies of the GNU Emacs Manual, the Emacs Lisp Reference
Manual, "Programming in Emacs Lisp: An Introduction", and other
materials can be ordered directly from the Free Software Foundation.
For more information, see the order form on the web at
<http://www.gnu.org/order/order.html>. Your purchases will help support
further development of Emacs and other free software programs. You
can also make tax-deductable donations to the Free Software Foundation,
a not-for-profit organization (assuming you pay US taxes) - see
<http://www.gnu.org/help/donate.html>.

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,13 +0,0 @@
This directory contains the architecture-independent files used by or
with Emacs. This includes some text files of documentation for GNU
Emacs or of interest to Emacs users, and the file of dumped docstrings
for Emacs functions and variables.
Some of the *.tex files need special versions of TeX to typeset them.
The files cs-*.tex and sk-*.tex need csTeX, a special version of TeX
tailored to typesetting Czech and Slovak documents. We provide
PostScript files for these documents, so that you could print them
without installing the modified TeX versions.
`termcap.src' is included mainly for VMS. It is a copy of the
`/etc/termcap' file used on Unix.

File diff suppressed because it is too large Load diff

229
etc/TERMS
View file

@ -1,229 +0,0 @@
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,

View file

@ -1,903 +0,0 @@
The GNU Project
by Richard Stallman
originally published in the book "Open Sources"
The first software-sharing community
When I started working at the MIT Artificial Intelligence Lab in 1971,
I became part of a software-sharing community that had existed for
many years. Sharing of software was not limited to our particular
community; it is as old as computers, just as sharing of recipes is as
old as cooking. But we did it more than most.
The AI Lab used a timesharing operating system called ITS (the
Incompatible Timesharing System) that the lab's staff hackers (1) had
designed and written in assembler language for the Digital PDP-10, one
of the large computers of the era. As a member of this community, an
AI lab staff system hacker, my job was to improve this system.
We did not call our software "free software", because that term did
not yet exist; but that is what it was. Whenever people from another
university or a company wanted to port and use a program, we gladly
let them. If you saw someone using an unfamiliar and interesting
program, you could always ask to see the source code, so that you
could read it, change it, or cannibalize parts of it to make a new
program.
(1) The use of "hacker" to mean "security breaker" is a confusion on
the part of the mass media. We hackers refuse to recognize that
meaning, and continue using the word to mean, "Someone who loves to
program and enjoys being clever about it."
The collapse of the community
The situation changed drastically in the early 1980s when Digital
discontinued the PDP-10 series. Its architecture, elegant and powerful
in the 60s, could not extend naturally to the larger address spaces
that were becoming feasible in the 80s. This meant that nearly all of
the programs composing ITS were obsolete.
The AI lab hacker community had already collapsed, not long before. In
1981, the spin-off company Symbolics had hired away nearly all of the
hackers from the AI lab, and the depopulated community was unable to
maintain itself. (The book Hackers, by Steve Levy, describes these
events, as well as giving a clear picture of this community in its
prime.) When the AI lab bought a new PDP-10 in 1982, its
administrators decided to use Digital's non-free timesharing system
instead of ITS.
The modern computers of the era, such as the VAX or the 68020, had
their own operating systems, but none of them were free software: you
had to sign a nondisclosure agreement even to get an executable copy.
This meant that the first step in using a computer was to promise not
to help your neighbor. A cooperating community was forbidden. The rule
made by the owners of proprietary software was, "If you share with
your neighbor, you are a pirate. If you want any changes, beg us to
make them."
The idea that the proprietary software social system--the system that
says you are not allowed to share or change software--is antisocial,
that it is unethical, that it is simply wrong, may come as a surprise
to some readers. But what else could we say about a system based on
dividing the public and keeping users helpless? Readers who find the
idea surprising may have taken proprietary social system as given, or
judged it on the terms suggested by proprietary software businesses.
Software publishers have worked long and hard to convince people that
there is only one way to look at the issue.
When software publishers talk about "enforcing" their "rights" or
"stopping piracy", what they actually *say* is secondary. The real
message of these statements is in the unstated assumptions they take
for granted; the public is supposed to accept them uncritically. So
let's examine them.
One assumption is that software companies have an unquestionable
natural right to own software and thus have power over all its users.
(If this were a natural right, then no matter how much harm it does to
the public, we could not object.) Interestingly, the US Constitution
and legal tradition reject this view; copyright is not a natural
right, but an artificial government-imposed monopoly that limits the
users' natural right to copy.
Another unstated assumption is that the only important thing about
software is what jobs it allows you to do--that we computer users
should not care what kind of society we are allowed to have.
A third assumption is that we would have no usable software (or, would
never have a program to do this or that particular job) if we did not
offer a company power over the users of the program. This assumption
may have seemed plausible, before the free software movement
demonstrated that we can make plenty of useful software without
putting chains on it.
If we decline to accept these assumptions, and judge these issues
based on ordinary common-sense morality while placing the users first,
we arrive at very different conclusions. Computer users should be free
to modify programs to fit their needs, and free to share software,
because helping other people is the basis of society.
There is no room here for an extensive statement of the reasoning
behind this conclusion, so I refer the reader to the web page,
<http://www.gnu.org/philosophy/why-free.html>.
A stark moral choice.
With my community gone, to continue as before was impossible. Instead,
I faced a stark moral choice.
The easy choice was to join the proprietary software world, signing
nondisclosure agreements and promising not to help my fellow hacker.
Most likely I would also be developing software that was released
under nondisclosure agreements, thus adding to the pressure on other
people to betray their fellows too.
I could have made money this way, and perhaps amused myself writing
code. But I knew that at the end of my career, I would look back on
years of building walls to divide people, and feel I had spent my life
making the world a worse place.
I had already experienced being on the receiving end of a
nondisclosure agreement, when someone refused to give me and the MIT
AI lab the source code for the control program for our printer. (The
lack of certain features in this program made use of the printer
extremely frustrating.) So I could not tell myself that nondisclosure
agreements were innocent. I was very angry when he refused to share
with us; I could not turn around and do the same thing to everyone
else.
Another choice, straightforward but unpleasant, was to leave the
computer field. That way my skills would not be misused, but they
would still be wasted. I would not be culpable for dividing and
restricting computer users, but it would happen nonetheless.
So I looked for a way that a programmer could do something for the
good. I asked myself, was there a program or programs that I could
write, so as to make a community possible once again?
The answer was clear: what was needed first was an operating system.
That is the crucial software for starting to use a computer. With an
operating system, you can do many things; without one, you cannot run
the computer at all. With a free operating system, we could again have
a community of cooperating hackers--and invite anyone to join. And
anyone would be able to use a computer without starting out by
conspiring to deprive his or her friends.
As an operating system developer, I had the right skills for this job.
So even though I could not take success for granted, I realized that I
was elected to do the job. I chose to make the system compatible with
Unix so that it would be portable, and so that Unix users could easily
switch to it. The name GNU was chosen following a hacker tradition, as
a recursive acronym for "GNU's Not Unix."
An operating system does not mean just a kernel, barely enough to run
other programs. In the 1970s, every operating system worthy of the
name included command processors, assemblers, compilers, interpreters,
debuggers, text editors, mailers, and much more. ITS had them, Multics
had them, VMS had them, and Unix had them. The GNU operating system
would include them too.
Later I heard these words, attributed to Hillel (1):
If I am not for myself, who will be for me?
If I am only for myself, what am I?
If not now, when?
The decision to start the GNU project was based on a similar spirit.
(1) As an Atheist, I don't follow any religious leaders, but I
sometimes find I admire something one of them has said.
Free as in freedom
The term "free software" is sometimes misunderstood--it has nothing to
do with price. It is about freedom. Here, therefore, is the definition
of free software: a program is free software, for you, a particular
user, if:
* You have the freedom to run the program, for any purpose.
* You have the freedom to modify the program to suit your needs. (To
make this freedom effective in practice, you must have access to
the source code, since making changes in a program without having
the source code is exceedingly difficult.)
* You have the freedom to redistribute copies, either gratis or for
a fee.
* You have the freedom to distribute modified versions of the
program, so that the community can benefit from your improvements.
Since "free" refers to freedom, not to price, there is no
contradiction between selling copies and free software. In fact, the
freedom to sell copies is crucial: collections of free software sold
on CD-ROMs are important for the community, and selling them is an
important way to raise funds for free software development. Therefore,
a program which people are not free to include on these collections is
not free software.
Because of the ambiguity of "free", people have long looked for
alternatives, but no one has found a suitable alternative. The English
Language has more words and nuances than any other, but it lacks a
simple, unambiguous, word that means "free," as in
freedom--"unfettered," being the word that comes closest in meaning.
Such alternatives as "liberated", "freedom" and "open" have either the
wrong meaning or some other disadvantage.
GNU software and the GNU system
Developing a whole system is a very large project. To bring it into
reach, I decided to adapt and use existing pieces of free software
wherever that was possible. For example, I decided at the very
beginning to use TeX as the principal text formatter; a few years
later, I decided to use the X Window System rather than writing
another window system for GNU.
Because of this decision, the GNU system is not the same as the
collection of all GNU software. The GNU system includes programs that
are not GNU software, programs that were developed by other people and
projects for their own purposes, but which we can use because they are
free software.
Commencing the project
In January 1984 I quit my job at MIT and began writing GNU software.
Leaving MIT was necessary so that MIT would not be able to interfere
with distributing GNU as free software. If I had remained on the
staff, MIT could have claimed to own the work, and could have imposed
their own distribution terms, or even turned the work into a
proprietary software package. I had no intention of doing a large
amount of work only to see it become useless for its intended purpose:
creating a new software-sharing community.
However, Professor Winston, then the head of the MIT AI Lab, kindly
invited me to keep using the lab's facilities.
The first steps
Shortly before beginning the GNU project, I heard about the Free
University Compiler Kit, also known as VUCK. (The Dutch word for
"free" is written with a V.) This was a compiler designed to handle
multiple languages, including C and Pascal, and to support multiple
target machines. I wrote to its author asking if GNU could use it.
He responded derisively, stating that the university was free but the
compiler was not. I therefore decided that my first program for the
GNU project would be a multi-language, multi-platform compiler.
Hoping to avoid the need to write the whole compiler myself, I
obtained the source code for the Pastel compiler, which was a
multi-platform compiler developed at Lawrence Livermore Lab. It
supported, and was written in, an extended version of Pascal, designed
to be a system-programming language. I added a C front end, and began
porting it to the Motorola 68000 computer. But I had to give that up
when I discovered that the compiler needed many megabytes of stack
space, and the available 68000 Unix system would only allow 64k.
I then realized that the Pastel compiler functioned by parsing the
entire input file into a syntax tree, converting the whole syntax tree
into a chain of "instructions", and then generating the whole output
file, without ever freeing any storage. At this point, I concluded I
would have to write a new compiler from scratch. That new compiler is
now known as GCC; none of the Pastel compiler is used in it, but I
managed to adapt and use the C front end that I had written. But that
was some years later; first, I worked on GNU Emacs.
GNU Emacs
I began work on GNU Emacs in September 1984, and in early 1985 it was
beginning to be usable. This enabled me to begin using Unix systems to
do editing; having no interest in learning to use vi or ed, I had done
my editing on other kinds of machines until then.
At this point, people began wanting to use GNU Emacs, which raised the
question of how to distribute it. Of course, I put it on the anonymous
ftp server on the MIT computer that I used. (This computer,
prep.ai.mit.edu, thus became the principal GNU ftp distribution site;
when it was decommissioned a few years later, we transferred the name
to our new ftp server.) But at that time, many of the interested
people were not on the Internet and could not get a copy by ftp. So
the question was, what would I say to them?
I could have said, "Find a friend who is on the net and who will make
a copy for you." Or I could have done what I did with the original
PDP-10 Emacs: tell them, "Mail me a tape and a SASE, and I will mail
it back with Emacs on it." But I had no job, and I was looking for
ways to make money from free software. So I announced that I would
mail a tape to whoever wanted one, for a fee of $150. In this way, I
started a free software distribution business, the precursor of the
companies that today distribute entire Linux-based GNU systems.
Is a program free for every user?
If a program is free software when it leaves the hands of its author,
this does not necessarily mean it will be free software for everyone
who has a copy of it. For example, public domain software (software
that is not copyrighted) is free software; but anyone can make a
proprietary modified version of it. Likewise, many free programs are
copyrighted but distributed under simple permissive licenses which
allow proprietary modified versions.
The paradigmatic example of this problem is the X Window System.
Developed at MIT, and released as free software with a permissive
license, it was soon adopted by various computer companies. They added
X to their proprietary Unix systems, in binary form only, and covered
by the same nondisclosure agreement. These copies of X were no more
free software than Unix was.
The developers of the X Window System did not consider this a
problem--they expected and intended this to happen. Their goal was not
freedom, just "success", defined as "having many users." They did not
care whether these users had freedom, only that they should be
numerous.
This lead to a paradoxical situation where two different ways of
counting the amount of freedom gave different answers to the question,
"Is this program free?" If you judged based on the freedom provided by
the distribution terms of the MIT release, you would say that X was
free software. But if you measured the freedom of the average user of
X, you would have to say it was proprietary software. Most X users
were running the proprietary versions that came with Unix systems, not
the free version.
Copyleft and the GNU GPL
The goal of GNU was to give users freedom, not just to be popular. So
we needed to use distribution terms that would prevent GNU software
from being turned into proprietary software. The method we use is
called "copyleft".(1)
Copyleft uses copyright law, but flips it over to serve the opposite
of its usual purpose: instead of a means of privatizing software, it
becomes a means of keeping software free.
The central idea of copyleft is that we give everyone permission to
run the program, copy the program, modify the program, and distribute
modified versions--but not permission to add restrictions of their
own. Thus, the crucial freedoms that define "free software" are
guaranteed to everyone who has a copy; they become inalienable rights.
For an effective copyleft, modified versions must also be free. This
ensures that work based on ours becomes available to our community if
it is published. When programmers who have jobs as programmers
volunteer to improve GNU software, it is copyleft that prevents their
employers from saying, "You can't share those changes, because we are
going to use them to make our proprietary version of the program."
The requirement that changes must be free is essential if we want to
ensure freedom for every user of the program. The companies that
privatized the X Window System usually made some changes to port it to
their systems and hardware. These changes were small compared with the
great extent of X, but they were not trivial. If making changes were
an excuse to deny the users freedom, it would be easy for anyone to
take advantage of the excuse.
A related issue concerns combining a free program with non-free code.
Such a combination would inevitably be non-free; whichever freedoms
are lacking for the non-free part would be lacking for the whole as
well. To permit such combinations would open a hole big enough to sink
a ship. Therefore, a crucial requirement for copyleft is to plug this
hole: anything added to or combined with a copylefted program must be
such that the larger combined version is also free and copylefted.
The specific implementation of copyleft that we use for most GNU
software is the GNU General Public License, or GNU GPL for short. We
have other kinds of copyleft that are used in specific circumstances.
GNU manuals are copylefted also, but use a much simpler kind of
copyleft, because the complexity of the GNU GPL is not necessary for
manuals.
(1) In 1984 or 1985, Don Hopkins (a very imaginative fellow) mailed me
a letter. On the envelope he had written several amusing sayings,
including this one: "Copyleft--all rights reversed." I used the word
"copyleft" to name the distribution concept I was developing at the
time.
The Free Software Foundation
As interest in using Emacs was growing, other people became involved
in the GNU project, and we decided that it was time to seek funding
once again. So in 1985 we created the Free Software Foundation, a
tax-exempt charity for free software development. The FSF also took
over the Emacs tape distribution business; later it extended this by
adding other free software (both GNU and non-GNU) to the tape, and by
selling free manuals as well.
The FSF accepts donations, but most of its income has always come from
sales--of copies of free software, and of other related services.
Today it sells CD-ROMs of source code, CD-ROMs with binaries, nicely
printed manuals (all with freedom to redistribute and modify), and
Deluxe Distributions (where we build the whole collection of software
for your choice of platform).
Free Software Foundation employees have written and maintained a
number of GNU software packages. Two notable ones are the C library
and the shell. The GNU C library is what every program running on a
GNU/Linux system uses to communicate with Linux. It was developed by a
member of the Free Software Foundation staff, Roland McGrath. The
shell used on most GNU/Linux systems is BASH, the Bourne Again
Shell(1), which was developed by FSF employee Brian Fox.
We funded development of these programs because the GNU project was
not just about tools or a development environment. Our goal was a
complete operating system, and these programs were needed for that
goal.
(1) "Bourne again Shell" is a joke on the name ``Bourne Shell'', which
was the usual shell on Unix.
Free software support
The free software philosophy rejects a specific widespread business
practice, but it is not against business. When businesses respect the
users' freedom, we wish them success.
Selling copies of Emacs demonstrates one kind of free software
business. When the FSF took over that business, I needed another way
to make a living. I found it in selling services relating to the free
software I had developed. This included teaching, for subjects such as
how to program GNU Emacs and how to customize GCC, and software
development, mostly porting GCC to new platforms.
Today each of these kinds of free software business is practiced by a
number of corporations. Some distribute free software collections on
CD-ROM; others sell support at levels ranging from answering user
questions, to fixing bugs, to adding major new features. We are even
beginning to see free software companies based on launching new free
software products.
Watch out, though--a number of companies that associate themselves
with the term "open source" actually base their business on non-free
software that works with free software. These are not free software
companies, they are proprietary software companies whose products
tempt users away from freedom. They call these "value added", which
reflects the values they would like us to adopt: convenience above
freedom. If we value freedom more, we should call them "freedom
subtracted" products.
Technical goals
The principal goal of GNU was to be free software. Even if GNU had no
technical advantage over Unix, it would have a social advantage,
allowing users to cooperate, and an ethical advantage, respecting the
user's freedom.
But it was natural to apply the known standards of good practice to
the work--for example, dynamically allocating data structures to avoid
arbitrary fixed size limits, and handling all the possible 8-bit codes
wherever that made sense.
In addition, we rejected the Unix focus on small memory size, by
deciding not to support 16-bit machines (it was clear that 32-bit
machines would be the norm by the time the GNU system was finished),
and to make no effort to reduce memory usage unless it exceeded a
megabyte. In programs for which handling very large files was not
crucial, we encouraged programmers to read an entire input file into
core, then scan its contents without having to worry about I/O.
These decisions enabled many GNU programs to surpass their Unix
counterparts in reliability and speed.
Donated computers
As the GNU project's reputation grew, people began offering to donate
machines running UNIX to the project. These were very useful, because
the easiest way to develop components of GNU was to do it on a UNIX
system, and replace the components of that system one by one. But they
raised an ethical issue: whether it was right for us to have a copy of
UNIX at all.
UNIX was (and is) proprietary software, and the GNU project's
philosophy said that we should not use proprietary software. But,
applying the same reasoning that leads to the conclusion that violence
in self defense is justified, I concluded that it was legitimate to
use a proprietary package when that was crucial for developing free
replacement that would help others stop using the proprietary package.
But, even if this was a justifiable evil, it was still an evil. Today
we no longer have any copies of Unix, because we have replaced them
with free operating systems. If we could not replace a machine's
operating system with a free one, we replaced the machine instead.
The GNU Task List
As the GNU project proceeded, and increasing numbers of system
components were found or developed, eventually it became useful to
make a list of the remaining gaps. We used it to recruit developers to
write the missing pieces. This list became known as the GNU task list.
In addition to missing Unix components, we listed added various other
useful software and documentation projects that, we thought, a truly
complete system ought to have.
Today, hardly any Unix components are left in the GNU task list--those
jobs have been done, aside from a few inessential ones. But the list
is full of projects that some might call "applications". Any program
that appeals to more than a narrow class of users would be a useful
thing to add to an operating system.
Even games are included in the task list--and have been since the
beginning. Unix included games, so naturally GNU should too. But
compatibility was not an issue for games, so we did not follow the
list of games that Unix had. Instead, we listed a spectrum of
different kinds of games that users might like.
The GNU Library GPL
The GNU C library uses a special kind of copyleft called the GNU
Library General Public License, which gives permission to link
proprietary software with the library. Why make this exception?
It is not a matter of principle; there is no principle that says
proprietary software products are entitled to include our code. (Why
contribute to a project predicated on refusing to share with us?)
Using the LGPL for the C library, or for any library, is a matter of
strategy.
The C library does a generic job; every proprietary system or compiler
comes with a C library. Therefore, to make our C library available
only to free software would not have given free software any
advantage--it would only have discouraged use of our library.
One system is an exception to this: on the GNU system (and this
includes GNU/Linux), the GNU C library is the only C library. So the
distribution terms of the GNU C library determine whether it is
possible to compile a proprietary program for the GNU system. There is
no ethical reason to allow proprietary applications on the GNU system,
but strategically it seems that disallowing them would do more to
discourage use of the GNU system than to encourage development of free
applications.
That is why using the Library GPL is a good strategy for the C
library. For other libraries, the strategic decision needs to be
considered on a case-by-case basis. When a library does a special job
that can help write certain kinds of programs, then releasing it under
the GPL, limiting it to free programs only, is a way of helping other
free software developers, giving them an advantage against proprietary
software.
Consider GNU Readline, a library that was developed to provide
command-line editing for BASH. Readline is released under the ordinary
GNU GPL, not the Library GPL. This probably does reduce the amount
Readline is used, but that is no loss for us. Meanwhile, at least one
useful application has been made free software specifically so it
could use Readline, and that is a real gain for the community.
Proprietary software developers have the advantages money provides;
free software developers need to make advantages for each other. I
hope some day we will have a large collection of GPL-covered libraries
that have no parallel available to proprietary software, providing
useful modules to serve as building blocks in new free software, and
adding up to a major advantage for further free software development.
Scratching an itch?
Eric Raymond says that "Every good work of software starts by
scratching a developer's personal itch." Maybe that happens sometimes,
but many essential pieces of GNU software were developed in order to
have a complete free operating system. They come from a vision and a
plan, not from impulse.
For example, we developed the GNU C library because a Unix-like system
needs a C library, the Bourne-Again Shell (bash) because a Unix-like
system needs a shell, and GNU tar because a Unix-like system needs a
tar program. The same is true for my own programs--the GNU C compiler,
GNU Emacs, GDB and GNU Make.
Some GNU programs were developed to cope with specific threats to our
freedom. Thus, we developed gzip to replace the Compress program,
which had been lost to the community because of the LZW patents. We
found people to develop LessTif, and more recently started GNOME and
Harmony, to address the problems caused by certain proprietary
libraries (see below). We are developing the GNU Privacy Guard to
replace popular non-free encryption software, because users should not
have to choose between privacy and freedom.
Of course, the people writing these programs became interested in the
work, and many features were added to them by various people for the
sake of their own needs and interests. But that is not why the
programs exist.
Unexpected developments
At the beginning of the GNU project, I imagined that we would develop
the whole GNU system, then release it as a whole. That is not how it
happened.
Since each component of the GNU system was implemented on a Unix
system, each component could run on Unix systems, long before a
complete GNU system existed. Some of these programs became popular,
and users began extending them and porting them---to the various
incompatible versions of Unix, and sometimes to other systems as well.
The process made these programs much more powerful, and attracted both
funds and contributors to the GNU project. But it probably also
delayed completion of a minimal working system by several years, as
GNU developers' time was put into maintaining these ports and adding
features to the existing components, rather than moving on to write
one missing component after another.
The GNU Hurd
By 1990, the GNU system was almost complete; the only major missing
component was the kernel. We had decided to implement our kernel as a
collection of server processes running on top of Mach. Mach is a
microkernel developed at Carnegie Mellon University and then at the
University of Utah; the GNU HURD is a collection of servers (or ``herd
of gnus'') that run on top of Mach, and do the various jobs of the
Unix kernel. The start of development was delayed as we waited for
Mach to be released as free software, as had been promised.
One reason for choosing this design was to avoid what seemed to be the
hardest part of the job: debugging a kernel program without a
source-level debugger to do it with. This part of the job had been
done already, in Mach, and we expected to debug the HURD servers as
user programs, with GDB. But it took a long time to make that
possible, and the multi-threaded servers that send messages to each
other have turned out to be very hard to debug. Making the HURD work
solidly has stretched on for many years.
Alix
The GNU kernel was not originally supposed to be called the HURD. Its
original name was Alix--named after the woman who was my sweetheart at
the time. She, a Unix system administrator, had pointed out how her
name would fit a common naming pattern for Unix system versions; as a
joke, she told her friends, "Someone should name a kernel after me." I
said nothing, but decided to surprise her with a kernel named Alix.
It did not stay that way. Michael Bushnell (now Thomas), the main
developer of the kernel, preferred the name HURD, and redefined Alix
to refer to a certain part of the kernel--the part that would trap
system calls and handle them by sending messages to HURD servers.
Ultimately, Alix and I broke up, and she changed her name;
independently, the HURD design was changed so that the C library would
send messages directly to servers, and this made the Alix component
disappear from the design.
But before these things happened, a friend of hers came across the
name Alix in the HURD source code, and mentioned the name to her. So
the name did its job.
Linux and GNU/Linux
The GNU Hurd is not ready for production use. Fortunately, another
kernel is available. In 1991, Linus Torvalds developed a
Unix-compatible kernel and called it Linux. Around 1992, combining
Linux with the not-quite-complete GNU system resulted in a complete
free operating system. (Combining them was a substantial job in
itself, of course.) It is due to Linux that we can actually run a
version of the GNU system today.
We call this system version GNU/Linux, to express its composition as a
combination of the GNU system with Linux as the kernel.
Challenges in our future
We have proved our ability to develop a broad spectrum of free
software. This does not mean we are invincible and unstoppable.
Several challenges make the future of free software uncertain; meeting
them will require steadfast effort and endurance, sometimes lasting
for years. It will require the kind of determination that people
display when they value their freedom and will not let anyone take it
away.
The following four sections discuss these challenges.
Secret hardware
Hardware manufacturers increasingly tend to keep hardware
specifications secret. This makes it difficult to write free drivers
so that Linux and XFree86 can support new hardware. We have complete
free systems today, but we will not have them tomorrow if we cannot
support tomorrow's computers.
There are two ways to cope with this problem. Programmers can do
reverse engineering to figure out how to support the hardware. The
rest of us can choose the hardware that is supported by free software;
as our numbers increase, secrecy of specifications will become a
self-defeating policy.
Reverse engineering is a big job; will we have programmers with
sufficient determination to undertake it? Yes--if we have built up a
strong feeling that free software is a matter of principle, and
non-free drivers are intolerable. And will large numbers of us spend
extra money, or even a little extra time, so we can use free drivers?
Yes, if the determination to have freedom is widespread.
Non-free libraries
A non-free library that runs on free operating systems acts as a trap
for free software developers. The library's attractive features are
the bait; if you use the library, you fall into the trap, because your
program cannot usefully be part of a free operating system. (Strictly
speaking, we could include your program, but it won't run with the
library missing.) Even worse, if a program that uses the proprietary
library becomes popular, it can lure other unsuspecting programmers
into the trap.
The first instance of this problem was the Motif toolkit, back in the
80s. Although there were as yet no free operating systems, it was
clear what problem Motif would cause for them later on. The GNU
Project responded in two ways: by asking individual free software
projects to support the free X toolkit widgets as well as Motif, and
by asking for someone to write a free replacement for Motif. The job
took many years; LessTif, developed by the Hungry Programmers, became
powerful enough to support most Motif applications only in 1997.
Between 1996 and 1998, another non-free GUI toolkit library, called
Qt, was used in a substantial collection of free software, the desktop
KDE.
Free GNU/Linux systems were unable to use KDE, because we could not
use the library. However, some commercial distributors of GNU/Linux
systems who were not strict about sticking with free software added
KDE to their systems--producing a system with more capabilities, but
less freedom. The KDE group was actively encouraging more programmers
to use Qt, and millions of new "Linux users" had never been exposed to
the idea that there was a problem in this. The situation appeared
grim.
The free software community responded to the problem in two ways:
GNOME and Harmony.
GNOME, the GNU Network Object Model Environment, is GNU's desktop
project. Started in 1997 by Miguel de Icaza, and developed with the
support of Red Hat Software, GNOME set out to provide similar desktop
facilities, but using free software exclusively. It has technical
advantages as well, such as supporting a variety of languages, not
just C++. But its main purpose was freedom: not to require the use of
any non-free software.
Harmony is a compatible replacement library, designed to make it
possible to run KDE software without using Qt.
In November 1998, the developers of Qt announced a change of license
which, when carried out, should make Qt free software. There is no way
to be sure, but I think that this was partly due to the community's
firm response to the problem that Qt posed when it was non-free. (The
new license is inconvenient and inequitable, so it remains desirable
to avoid using Qt.)
[Subsequent note: in September 2000, Qt was rereleased under the GNU
GPL, which essentially solved this problem.]
How will we respond to the next tempting non-free library? Will the
whole community understand the need to stay out of the trap? Or will
many of us give up freedom for convenience, and produce a major
problem? Our future depends on our philosophy.
Software patents
The worst threat we face comes from software patents, which can put
algorithms and features off limits to free software for up to twenty
years. The LZW compression algorithm patents were applied for in 1983,
and we still cannot release free software to produce proper compressed
GIFs. In 1998, a free program to produce MP3 compressed audio was
removed from distribution under threat of a patent suit.
There are ways to cope with patents: we can search for evidence that a
patent is invalid, and we can look for alternative ways to do a job.
But each of these methods works only sometimes; when both fail, a
patent may force all free software to lack some feature that users
want. What will we do when this happens?
Those of us who value free software for freedom's sake will stay with
free software anyway. We will manage to get work done without the
patented features. But those who value free software because they
expect it to be techically superior are likely to call it a failure
when a patent holds it back. Thus, while it is useful to talk about
the practical effectiveness of the "cathedral" model of development,
and the reliability and power of some free software, we must not stop
there. We must talk about freedom and principle.
Free documentation
The biggest deficiency in our free operating systems is not in the
software--it is the lack of good free manuals that we can include in
our systems. Documentation is an essential part of any software
package; when an important free software package does not come with a
good free manual, that is a major gap. We have many such gaps today.
Free documentation, like free software, is a matter of freedom, not
price. The criterion for a free manual is pretty much the same as for
free software: it is a matter of giving all users certain freedoms.
Redistribution (including commercial sale) must be permitted, on-line
and on paper, so that the manual can accompany every copy of the
program.
Permission for modification is crucial too. As a general rule, I don't
believe that it is essential for people to have permission to modify
all sorts of articles and books. For example, I don't think you or I
are obliged to give permission to modify articles like this one, which
describe our actions and our views.
But there is a particular reason why the freedom to modify is crucial
for documentation for free software. When people exercise their right
to modify the software, and add or change its features, if they are
conscientious they will change the manual too--so they can provide
accurate and usable documentation with the modified program. A manual
which does not allow programmers to be conscientious and finish the
job, does not fill our community's needs.
Some kinds of limits on how modifications are done pose no problem.
For example, requirements to preserve the original author's copyright
notice, the distribution terms, or the list of authors, are ok. It is
also no problem to require modified versions to include notice that
they were modified, even to have entire sections that may not be
deleted or changed, as long as these sections deal with nontechnical
topics. These kinds of restrictions are not a problem because they
don't stop the conscientious programmer from adapting the manual to
fit the modified program. In other words, they don't block the free
software community from making full use of the manual.
However, it must be possible to modify all the *technical* content of
the manual, and then distribute the result in all the usual media,
through all the usual channels; otherwise, the restrictions do
obstruct the community, the manual is not free, and we need another
manual.
Will free software developers have the awareness and determination to
produce a full spectrum of free manuals? Once again, our future
depends on philosophy.
We must talk about freedom
Estimates today are that there are ten million users of GNU/Linux
systems such as Debian GNU/Linux and Red Hat Linux. Free software has
developed such practical advantages that users are flocking to it for
purely practical reasons.
The good consequences of this are evident: more interest in developing
free software, more customers for free software businesses, and more
ability to encourage companies to develop commercial free software
instead of proprietary software products.
But interest in the software is growing faster than awareness of the
philosophy it is based on, and this leads to trouble. Our ability to
meet the challenges and threats described above depends on the will to
stand firm for freedom. To make sure our community has this will, we
need to spread the idea to the new users as they come into the
community.
But we are failing to do so: the efforts to attract new users into our
community are far outstripping the efforts to teach them the civics of
our community. We need to do both, and we need to keep the two efforts
in balance.
"Open Source"
Teaching new users about freedom became more difficult in 1998, when a
part of the community decided to stop using the term "free software"
and say "open source software" instead.
Some who favored this term aimed to avoid the confusion of "free" with
"gratis"--a valid goal. Others, however, aimed to set aside the spirit
of principle that had motivated the free software movement and the GNU
project, and to appeal instead to executives and business users, many
of whom hold an ideology that places profit above freedom, above
community, above principle. Thus, the rhetoric of "open source"
focuses on the potential to make high quality, powerful software, but
shuns the ideas of freedom, community, and principle.
The "Linux" magazines are a clear example of this--they are filled
with advertisements for proprietary software that works with
GNU/Linux. When the next Motif or Qt appears, will these magazines
warn programmers to stay away from it, or will they run ads for it?
The support of business can contribute to the community in many ways;
all else being equal, it is useful. But winning their support by
speaking even less about freedom and principle can be disastrous; it
makes the previous imbalance between outreach and civics education
even worse.
"Free software" and "open source" describe the same category of
software, more or less, but say different things about the software,
and about values. The GNU Project continues to use the term "free
software", to express the idea that freedom, not just technology, is
important.
Try!
Yoda's philosophy ("There is no `try'") sounds neat, but it doesn't
work for me. I have done most of my work while anxious about whether I
could do the job, and unsure that it would be enough to achieve the
goal if I did. But I tried anyway, because there was no one but me
between the enemy and my city. Surprising myself, I have sometimes
succeeded.
Sometimes I failed; some of my cities have fallen. Then I found
another threatened city, and got ready for another battle. Over time,
I've learned to look for threats and put myself between them and my
city, calling on other hackers to come and join me.
Nowadays, often I'm not the only one. It is a relief and a joy when I
see a regiment of hackers digging in to hold the line, and I realize,
this city may survive--for now. But the dangers are greater each year,
and now Microsoft has explicitly targeted our community. We can't take
the future of freedom for granted. Don't take it for granted! If you
want to keep your freedom, you must be prepared to defend it.
Copyright (C) 1998 Richard Stallman
Verbatim copying and distribution of this entire article is permitted
in any medium, provided this notice is preserved.

361
etc/TODO
View file

@ -1,361 +0,0 @@
-*-outline-*-
If you are ready to start working on any of these TODO items, we
appreciate your help; please write to emacs-devel@gnu.org so we can be
aware that the problem is being addressed, and talk with you how to do
it best. Since Emacs is an FSF-copyrighted package, please be
prepared to sign legal papers to transfer the copyright on your work
to the FSF.
* Small but important fixes needed in existing features:
** Fix the kill/yank treatment of invisible text. At the moment,
invisible text is placed in the kill-ring, so that the contents of
the ring may not correspond to the text as displayed to the user. It
ought to be possible to omit text which is invisible (due to a
text-property, overlay, or selective display) from the kill-ring.
** Change the way define-minor-mode handles autoloading.
It should not generate :require. Or :require in defcustom
should not be recorded in the user's custom-set-variables call.
** The buttons at the top of a custom buffer should not omit
variables whose values are currently hidden.
** Clean up the variables in browse-url. Perhaps use a shell command string to
specify the browser instead of the mushrooming set of functions.
See also ESR's proposal for a BROWSER environment variable
<URL:http://www.catb.org/~esr/BROWSER/browse-url.patch>.
* Important features:
** Provide user-friendly ways to list all available font families,
display a font as a sample, etc. [fx is looking at multilingual
font selection for Emacs 22.]
** Program Enriched mode to read and save in RTF. [Is there actually a
decent single definition of RTF? Maybe see info at
http://latex2rtf.sourceforge.net/.]
** Implement something better than the current Refill mode. This
probably needs some primitive support.
** Implement primitive and higher-level functions to allow filling
properly with variable-pitch faces.
** Implement a smoother vertical scroll facility, one that allows
C-v to scroll through a tall image. The primitive operations
posn-at-point and posn-at-x-y should now make it doable in elisp.
** Implement intelligent search/replace, going beyond query-replace
(see http://graphics.csail.mit.edu/~rcm/chi04.pdf).
** 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 are not visible when they are at end of line.
** Make movemail work with IMAP.
** Internationalize Emacs's messages.
** Address internationalization of symbols names essentially
as documentation, e.g. in command names and Custom.
** Make the Lucid menu widget display multilingual text. [This
probably needs to be done from actual Emacs buffers, either directly
in the menu or by rendering in an unmapped window and copying the
pixels. The current code assumes a specific locale; that isn't good
enough even if X can render the arbitrary text] [The gtk
port now displays multilingual text in menus, but only insofar as
Emacs can encode it as utf-8 and gtk can display the result.]
Maybe making Lucid menus work like Gtk's (i.e. just force utf-8) is good
enough now that Emacs can encode most chars into utf-8.
** Remove the limitation that window and frame widths and heights can
be only full columns/lines.
* Other features we would like:
** A function to check for customizable options that have been
set but not saved, and ask the user whether to save them.
This could go in kill-emacs-query-functions, to remind people
to save their changes. If the user says yes, show them
in a Custom buffer using customize-customized.
** Emacs Lisp mode could put an overlay on the defun for every
function that has advice. The overlay could have `after-text' like "
[Function has advice]". It might look like
(defun foo [Function has advice] (x y)
The overlay could also be a button that you could use to view the advice.
** ange-ftp
*** understand sftp
*** Use MLS for ange-ftp-insert-directory if a list of files is specified.
** Ability to map a key, including all modified-combinations.
E.g map mouse-4 to wheel-up as well as M-mouse-4 -> M-wheel-up
M-C-mouse-4 -> M-C-wheel-up, H-S-C-M-s-double-mouse-4 ->
H-S-C-M-s-double-wheel-up, ...
** Beefed-up syntax-tables.
*** recognize multi-character syntactic entities like `begin' and `end'.
*** nested string-delimiters (for Postscript's (foo(bar)baz) strings).
*** support for infix operators (with precedence).
*** support for the $ (paired delimiter) in parse-partial-sexp.
*** support for hook-chars whose effect on the parsing-state is specified
by elisp code. Thus a char could both close a string and open a comment
at the same time and do it in a context-sensitive way.
*** ability to add mode-specific data to the partial-parse-state.
** Add a way to convert a keyboard macro to equivalent Lisp code.
** Have a command suggestion help system that recognizes patterns
of commands which could be replaced with a simpler common command.
It should not make more than one suggestion per 10 minutes.
** Add a way to define input methods by computing them (when first used)
from other input methods. Then redefine C-x 8 to use a
user-selected input method, with the default being the union of
latin-1-prefix and latin-1-postfix.
** Implement a clean way to use different major modes for
different parts of a buffer. This could be useful in editing
Bison input files, for instance, or other kinds of text
where one language is embedded in another language.
** Give start-process the ability to direct standard-error
output to a different filter.
** Make desktop.el save the "frame configuration" of Emacs (in some
useful sense).
** Give desktop.el a feature to switch between different named
desktops.
** Replace finder.el with something that generates an Info file
which gives the same information through a menu structure. [Dave
Love started on this.]
** Implement a variant of uncompress.el or jka-compr.el that works with
GNU Privacy Guard for encryption. [Code exists but isn't assigned.
See the Gnus development sources for assigned code concerning GPG
use with mail, which is probably a good start.]
** Save undo information in special temporary files, and reload it
when needed for undoing. This could extend undo capacity.
** 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.
** Get some major packages installed: W3 (development version needs
significant work), PSGML. Check the assignments file for other
packages which might go in and have been missed.
** Make keymaps a first-class Lisp object (this means a rewrite of
keymap.c). What should it do apart from being opaque ?
multiple inheritance ? faster where-is ? no more fix_submap_inheritance ?
what else ?
** Provide real menus on ttys. The MS-DOS implementation can serve as
an example how to do part of this.
** Implement popular parts of the rest of the CL functions as compiler
macros in cl-macs.
** Make compiler warnings about functions that might be undefined at run time
smarter, so that they know which files are required by the file being
compiled and don't warn about functions defined in them.
** Highlight rectangles (`mouse-track-rectangle-p' in XEmacs). Already in CUA,
but it's a valuable feature worth making more general.
** Support simultaneous tty and X frames.
** Provide MIME support for Rmail using the Gnus MIME library. [Maybe
not now feasible, given Gnus maintenance decisions. fx looked at
this and can say where some of the problems are.]
** Eliminate the storm of warnings concerning char/unsigned char
mismatches that we get with proprietary compilers on various systems.
They make it difficult to spot the important warnings.
** Fix anything necessary to use `long long' EMACS_INTs with GCC.
** Split out parts of lisp.h and generate Makefile dependencies
automatically.
** Update the FAQ.
** Allow auto-compression-mode to use zlib calls if zlib is available.
[It's required for PNG, so may be linked anyhow.]
** Add a --pristine startup flag which does -q --no-site-file plus
ignoring X resources (Doze equivalents?) and most of the
environment. What should not be ignored needs consideration.
** Investigate using the language environment (or locale?) to set up
more things, such as the default Ispell dictionary, calendar
holidays, quoting characters?,...
** Improve the GC (generational, incremental). (We may be able to use
the Boehm collector.) [See the Boehm-GC branch in CVS for work on
this.]
** Check what hooks would help Emacspeak -- see the defadvising in W3.
** Add horizontal scroll bars.
** Provide an optional feature which computes a scroll bar slider's
size and its position from lines instead of characters.
** Make the Custom themes support do useful things.
** Add support for SVG (Scalable Vector Graphics) rendering to
Emacs.
** Allow unknown image types to be rendered via an external program
converting them to, say, PBM (in the same way as PostScript?).
** Allow displaying an X window from an external program in a buffer,
e.g. to render graphics from Java applets. [gerd and/or wmperry
thought this was feasible.]
** Allow images (not just text) in the margin to be mouse-sensitive.
(Requires recursing through display properties). Provide some way
to simulate mouse-clicks on marginal text without a mouse.
** Implement Lisp functions to determine properly whether a character
is displayable (particularly needed in XFree 4, sigh). Use it to
define useful glyphs that may be displayed as images or unicodes
(with ASCIIfied fallback via latin1-disp). Examples include
box-drawing graphics in Custom buffers, W3 rules and tables, and
tree displays generally, mode-line mail indicator. [See work done
already for Emacs 22 and consult fx.]
** Do something to make rms happy with fx's dynamic loading, and use it
to implement things like auto-loaded buffer parsers and database
access in cases which need more than Lisp.
** Extend ps-print to deal with multiple font sizes, images, and extra
encodings.
** Provide portable undumping using mmap (per gerd design).
** Use the XIE X extension, if available, for image display.
** Make monochrome images display using the foreground and background
colors of the applicable faces.
** Face remapping.
** Add support for rendering antialiased text, probably using
XRender/Freetype.
** Port the conservative stack marking code of Emacs' garbage collector
to more systems, so that we can completely get rid of GCPROs.
** Reorder defcustom's in each package so that the more important
options come first in the Customize buffers. This could be done by
either rearranging the file (since options are shown in the order
they appear in the *.el files), or by adding a few :set-after
attributes.
** Maybe document the features of libraries missing from the manual (or
ancillary manuals, including the Lisp manual in some cases).
This is not worth doing for all of these packages and we need not
aim for completeness, but some may be worth documenting.
Here's a list which is probably not complete/correct: align, allout,
artist, ansi-color, array, battery, calculator, cdl, cmuscheme,
completion, cua, delim-col, dirtrack, double, echistory, elide-head,
easymenu, expand, flow-ctrl, format [format-alist],
generic/generic-x [various modes], kermit, log-edit, ledit
[obsolete?], makesum, midnight [other than in Kill Buffer node],
mouse-copy [?], mouse-drag, mouse-sel, net-utils, rcompile,
snmp-mode [?], soundex [should be interactive?], strokes [start from
the web page], talk, thingatpt [interactive functions?], type-break,
vcursor, xscheme, zone-mode [?], mlconvert [?], iso-cvt, iso-swed,
swedish, feedmail [?], uce, bruce, gametree, meese, page-ext,
refbib, refer, scribe, sgml-mode, spell, texinfo, underline,
cmacexp, hideif, mantemp [obsolete?], pcomplete, assoc, xml,
cvs-status (should be described in PCL-CVS manual); other progmodes,
probably in separate manual.
** Convert the XPM bitmaps to PPM, replace the PBMs with them and scrap
the XPMs so that the colour versions work generally. (Requires care
with the colour used for the transparent regions.)
** Convenient access to the `values' variable. It would be nice to have an
interface that would show you the printed reps of the elements of the
list in a menu, let you select one of the values, and put it into some
other variable, without changing the value of `values'.
** (Controlled by a flag) make open and close syntax match exactly,
i.e. `(' doesn't match `]'.
** Specify parameter ID-FORMAT in all calls to `file-attributes' and
`directory-files-and-attributes' where attributes UID or GID are used.
Whenever possible, use value 'string.
When done, change meaning of default value from 'integer to 'string.
If value 'integer is used nowhere, remove the parameter ID-FORMAT from
the definition of `file-attributes' and `directory-files-and-attributes'
and from the calls.
** Make language-info-alist customizable. Currently a user can customize
only the variable `current-language-environment'.
** Improve language environment handling so that Emacs can fit
better to a users locale. Currently Emacs uses utf-8 language
environment for all utf-8 locales, thus a user in ja_JP.UTF-8 locale
are also put in utf-8 lang. env. In such a case, it is
better to use Japanese lang. env. but prefer utf-8 coding system.
** Eliminate the current restriction on header printing by ps-print.
Currently, a header can contain only single 1-byte charset in
addition to ASCII.
** In ps-print, provide an user friendly interface to specify fonts.
** OpenType font support for various complex scripts (e.g. Devanagari).
As X protocal doesn't provide a way to access OpenType Layout Tables
in a OpenType font of a server side, we need a way to utilize local
fonts (perhaps by directly using the Freetype library or indirectly
via Xft library).
** Enhance word boundary detection for such a script that doesn't use
space at word boundary (e.g. Thai).
** Implement interface programs with major Japanese conversion server
in lib-src so that they can be used from the input method
"japanese". Currently, most Japanese users are using external
packages (e.g. tamago, anthy) or an input method via XIM.
** Provide the toolbar on ttys. This could map a bit like tmm-menubar
for the menubar and buttons could look a bit like those used by customize.
* Internal changes
** Replace gmalloc.c with the modified Doug Lea code from the current
GNU libc so that the special mmapping of buffers can be removed --
that apparently loses under Solaris, at least. [fx has mostly done
this.]
** Rewrite make-docfile to be clean and maintainable.
** Add an inferior-comint-minor-mode to capture the common set of operations
offered by major modes that offer an associated inferior
comint-derived mode. I.e. basically make cmuscheme.el/inf-lisp.el generic.
For use by sml-mode, python-mode, tex-mode, scheme-mode, lisp-mode,
haskell-mode, tuareg-mode, ...
;;; arch-tag: b0a3e40b-726a-457d-9999-ba848321b036

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Some files were not shown because too many files have changed in this diff Show more